OmniAICreator/Qiita-1.07M huggingface dataset:
PHPの変数名に関するTIPS

## 変数

http://creive.me/archives/8719/

初心者向けとしては珍しく大きな問題の見当たらない、手堅く纏まってる記事ですが、変数名の部分は明白に誤っています。

> `まず、必ず「 $(ドルマーク) 」を先頭につけます。その後に、変数の名前を続けます。変数名として、「 a-zA-Z（小文字・大文字） 」と 「0~9（数字）」、「_（アンダースコア）」を利用できます。大文字と小文字は区別されます。`
> `さらに、変数名は数字から命名してはいけません。（ 例: ✕ $7_seven ）`


使用可能な文字の実際の定義は'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'です。
http://php.net/manual/ja/language.variables.basics.php


```php
	$ほげ = 'A';
	$  = 'B'; // 変数名がchr(246)
```

などは正しい変数宣言です。
まあ初心者相手にこんなこと解説する必要はないので、そういう意味では十分な表現でしょう。

あと裏技として、{}で囲むと何故か定義域以外の文字を変数名として使えます。

```php
	${1} = 'C';

	var_dump($1); // Parse error: syntax error, unexpected '1'
	var_dump(${1}); // C
	
	${02} = 'D'; // 変数名は"2"になる

	var_dump(${2}); // D
	var_dump(${02}); // D ${2}と同じ
	
	${''} = 'E'; // 変数名は""
	${' '} = 'F'; // 変数名は" "
	${'\''}= 'G'; // 変数名は"'"
```

定義したはいいものの、普通に参照することはできないので、取得時も代入時と同じように{}で括って取得します。

{}で括るのは、本来は変数名を動的に決める時に使うためのものだと思いますが、何故かこの場合の命名規則が通常の変数定義と異なります。

```php
	${rand(1,9)} = 'H'; // 変数名は'1'～'9'のどれか
```

で、この{}による代入/参照は、可変変数で全く同じように書くことができます。

```php
	$a='ほげ';
	$$a = 'A';
	
	$b = ' '; // 値はchr(246)
	$$b = 'B';
	
	$c = 1;
	$$c = 'C';
	
	$d = 02;
	$$d = 'D';
	
	$e = '';
	$$e = 'E';

	$f = ' ';
	$$f = 'F';
	
	$g = '\'';
	$$g = 'G';
	
	$h = rand(1,9);
	$$h = 'H';
	
	$j = 'this';
	$$j = 'J'; // 特に関係ないが可変変数では$thisも定義できる。{}では不可。
	${'this'} = 'J'; // Fatal error: Cannot re-assign $this
```

こんなの何に使うのって、forと組み合わせて数値変数名を作ったりします。
fizzbuzzでは必須のテクです。
http://qiita.com/rana_kualu/items/6f6722558fc5c8bb204a


これ以上特に話を広げられなかったのでここで終わり。

## おまけ：プロパティ

```php
	$class = new stdClass();
	$class->  = 'a'; // キーはchr(246)
	$class->1 = 'b'; // Parse error: syntax error, unexpected '1'
	$class->{1} = 'c';
	$class->{' '} = 'd';
```

プロパティ名のルールは特に記載がないのですが、変数名と同じ文字が使えるようです。
http://php.net/manual/ja/language.oop5.properties.php

## おまけ：定数

```php
	define(' ', 'e'); // 定数名はchr(246)
	echo  ; // e
	
	define('1', 'f');
	echo 1; // int(1)になる
	echo constant(1); // f
```

何のエラーも出さずに定数名'1'を設定可能で、get_defined_constants()でも存在を確認することができますが、困ったことに参照できません。
constant()で参照できますが、もはやdefine()した意味がありません。

```php
	const   = 'g'; // 定数名はchr(246)
	echo  ; // g 
	
	const 1 = 'h'; Parse error: syntax error, unexpected '1'
```

constでは変数定義域外の文字を使うとパースエラーになります。
しかも{}や可変変数も使うことができないため、constで正しくない定数名を設定することはできないようです。


## おまけ：クラス名

おそらくconstと同じ。
newするクラス名を動的に持つというのはよく見かけますが、クラス名自体を動的に作ることはできないようです。

```php
	class  {} // クラス名がchr(237)
	$  = new  ;
	
	$j = ' '; // chr(237)
	$  = new $j;
	
	class {1}{} // Error: syntax error, unexpected '{'
	class $j{} // Error: syntax error, unexpected '$'
```
jqGrid frozen column example(treegrid mode)

```javascript:treegrid.js
//jqgrid作成後に下記コードを実行(ツリーグリッドモードではfrozenはnot supportのようです)
//treegrid fixed column (treegrid frozen not supported) after create jqgrid Table

var pos = 3; // <- 左から何列固定させるか how many frozen
var $wrap = $(".ui-jqgrid-bdiv");
$wrap.scroll(function(e){
    var offset = $(this).scrollLeft();
          //$('#treegrid').jqgrid({...}) ならば #treegrid
    var sel = '#treegrid td:nth-child(-n+'+pos+'),thead th:nth-child(-n+'+pos+')';
          //#FFF と 10 は適宜書き換える
    $(sel).css({position:"relative",left:offset,background:"#FFF",zIndex:"10"});
});
```
文字列の分割

カンマ区切りのデータを手軽に切り出す、split関数みたいなのがLuaにほしいなと思ったのですが、
逆に、カンマでない部分を切り出してしまえば良いと気付きました。
数字や英文字のつながっている部分を抜き出すので、スペース区切りでもいいです。

```lua
s = "ab,1,23"

-- 英文字
for n in s:gmatch("%a+") do print(n) end 

-- 数字
for n in s:gmatch("%d+") do print(n) end 

-- 英数字
for n in s:gmatch("[%a%d]+") do print(n) end 
```
gmatchの+を除けば、一文字単位で切り出してくれます。

```lua
s = "123456"

for n in s:gmatch("%d") do print(n) end 
```
underscoreコードリーディング（isNull）

underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##isNullとは


###[underscorejs.orgのisNull](http://underscorejs.org/#isNull)

こんな説明。
>####_.isNull(object) 
Returns true if the value of object is null.


```javascript
_.isNull(null);
=> true
_.isNull(undefined);
=> false
```

------------- 
objectがnullだった場合にtrueを返します。

###[underscore.isNull](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1255)
コード的にはこのあたり。

```javascript
  // Is a given value equal to null?
  _.isNull = function(obj) {
    return obj === null;
  };

```

objとnullとの比較の結果を返す。
T4 デザイン時TextTemplateあれこれ

# **テキスト テンプレートの基本的な使い方**
## **１．T4 TextTemplateとは**
MicrosoftのVisual Studioで使用可能なテキストジェネレータ。
実行時T4テキストテンプレートとデザイン時T4テキストテンプレートがある。
今回、デザイン時T4テキストテンプレートの使い方をコードとともに説明します。

## **２．基本文法**
記述には以下の概念を基本に持つ。
###**２．１．ディレクティブ**
**説明**：テンプレートの処理方法を制御する要素、名前空間の定義、ファイルのincludeなどを行うことができる。
**記法**：「<#@」と「#>」で囲って記述する。

```lang:sample.tt
<#@ template debug="false" hostspecific="false" language="C#" #>  //■ テンプレートのデバッグ時に使用、既定はC#,VBも可
<#@ assembly name="System.Core" #>  //■ アセンブリの読み込み
<#@ import namespace="System.Linq" #>  //■ 名前空間の宣言
<#@ output extension=".cs" #>  //■ 出力するファイルの拡張子

```         

###**２．２．テキストブロック**
**説明**：そのまま出力される部分
**記法**：特になし

```lang:sample.tt
<#@ output extension=".cs" #>
Hello //■ 普通に書くとそのまま出力される
```

###**２．３．コントロールブロック**
**説明**：処理に基づいた出力を行う部分。以下の２つがある
　　　「標準コントロールブロック」：if,foreach,などに加え、読み込んだアセンブリ、
　　　　　　　　　　　　　　　　　　名前空間で使用可能な制御文が使用できる。
　　　「式コントロールブロック」：式を判断して文字列が出力される。
**記法**：標準コントロールブロック：「<#」と「#>」で囲って記述する。
　　　式コントロールブロック：「<#=」と「#>」で囲って記述する。

```lang:sample.tt
<# 
  string[] Names{ "Sato","Suzuki","Nakano"} ;
#>
<# foreach(var name in Names){ #>  //■ (b)までの間の処理を繰り返し行う
  <#=name#>,                     //Sato,Suzuki,Nakano,   が出力される
<# } #}                         //■(b)
```

## **３．私感**
C#ではマクロが使えないのでC++に比べてコード量が増える傾向にあり
その解決策の１つとなると思います。反面、Snippetやインテリセンスが効かない
また、読みにくいというデメリットもあり使いどころを選ぶ技術と思います。

## **４．その他**
### **可読性を上げる**
可読性を上げる方法として処理部分とデータ定義部分を分けることができます。
以下の例ではデータの定義を"GenerateData.tt"で作成して、
処理実装部分ではinclude file ディレクティブを使用することでGenerateData.ttで作成した
データを使用することができます。
これにより、処理部分の完成後はGenerateData.ttを編集するだけで済むようになります。

```lang:sample.tt
<#@ include file="GenerateDate.tt" #>
```

## **５．参考**
T4 テキスト テンプレートの作成
https://msdn.microsoft.com/ja-jp/library/bb126478.aspx

T4 テキスト テンプレートから Visual Studio またはその他のホストへのアクセス
https://msdn.microsoft.com/library/gg604090(v=vs.100).aspx

ITextTemplatingEngineHost インターフェイス
https://msdn.microsoft.com/ja-jp/library/microsoft.visualstudio.texttemplating.itexttemplatingenginehost(v=vs.100).aspx

本当に必要ならば、独自のVS拡張機能として作成できるようです。
チュートリアル: カスタム テキスト テンプレート ホストの作成
https://msdn.microsoft.com/ja-jp/library/bb126579(v=vs.100).aspx
Swiftでズンドコキヨシ（ビット演算版）


晩飯食おうと思ったら謎のブームが来ていたので一つ書いてみました。
元ネタ→http://qiita.com/shunsugai@github/items/971a15461de29563bf90

## ソースと解説

```swift:
import UIKit
var his = UInt8.max
repeat {
    let doko = UInt8(arc4random_uniform(2))
    his = (his << 1) | doko
    print(doko == 1 ? "ドコ" : "ズン")
} while (his & 0x1f) != 1
print("キ・ヨ・シ！！")
```


変数`his`に0（ズン）か1（ドコ）かを溜めていって、
ズンズンズンズンドコ、つまり変数`his`の下位5ビットが`00001`になったらループを抜けてキヨシを出力する感じです。

また、変数`his`は`11111111`で初期化することで、いきなりドコが来た時などの誤判定を防いでいます（無理矢理感あります）。


## 出力例

```text:
ドコ
ズン
ズン
ドコ
ズン
ドコ
ドコ
ドコ
ドコ
ズン
ドコ
ズン
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ドコ
ドコ
ズン
ズン
ズン
ドコ
ズン
ズン
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ズン
ズン
ズン
ドコ
ドコ
ドコ
ズン
ドコ
ズン
ズン
ドコ
ドコ
ズン
ドコ
ズン
ズン
ドコ
ズン
ズン
ドコ
ズン
ドコ
ドコ
ドコ
ズン
ドコ
ズン
ズン
ドコ
ドコ
ズン
ドコ
ズン
ドコ
ズン
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ！！
```
[ServersMan@VPS]Entryプランの性能

せっかくServersMan@VPS(Entryプラン)を契約したので、性能について、簡単にまとめてみます。(2016/03/15時点)
CentOS 7(64bit)で初期セットアップしております。

## OS
```bash:bash
[root@dti ~]# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
```

```bash:bash
[root@dti ~]# cat /proc/version
Linux version 2.6.32-042stab092.2 (root@kbuild-rh6-x64) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Tue Jul 8 10:35:55 MSK 2014
```

## CPU
```bash:bash
[root@dti-vps-srv65 ~]# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 44
model name	: Intel(R) Xeon(R) CPU           L5630  @ 2.13GHz
stepping	: 2
cpu MHz		: 426.070
cache size	: 12288 KB
fpu		: yes
fpu_exception	: yes
cpuid level	: 11
wp		: yes
flags		: fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm rep_good aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 popcnt aes hypervisor lahf_lm ida arat dts
bogomips	: 4266.95
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 44
model name	: Intel(R) Xeon(R) CPU           L5630  @ 2.13GHz
stepping	: 2
cpu MHz		: 426.070
cache size	: 12288 KB
fpu		: yes
fpu_exception	: yes
cpuid level	: 11
wp		: yes
flags		: fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm rep_good aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 popcnt aes hypervisor lahf_lm ida arat dts
bogomips	: 4266.95
clflush size	: 64
cache_alignment	: 64
address sizes	: 40 bits physical, 48 bits virtual
power management:
```

## メモリ
```bash:bash
[root@dti ~]# cat /proc/meminfo
MemTotal:        1048576 kB
・・・・・
```

```bash:bash
[root@dti ~]# free -kt
              total        used        free      shared  buff/cache   available
Mem:        1048576       38080      966288       14896       44208      957449
Swap:       1048576      196984      851592
Total:      2097152      235064     1817880
```

## 書き込み速度
```bash:bash
[root@dti ~]# time dd if=/dev/zero of=./test count=1000 bs=1M
1000+0 レコード入力
1000+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 8.44304 秒、 124 MB/秒

[root@dti ~]# time dd if=/dev/zero of=./test count=1000 bs=1M
1000+0 レコード入力
1000+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 8.53162 秒、 123 MB/秒

[root@dti ~]# time dd if=/dev/zero of=./test count=1000 bs=1M
1000+0 レコード入力
1000+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 7.88433 秒、 133 MB/秒

[root@dti ~]# time dd if=/dev/zero of=./test count=1000 bs=1M
1000+0 レコード入力
1000+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 9.34336 秒、 112 MB/秒

[root@dti ~]# time dd if=/dev/zero of=./test count=1000 bs=1M
1000+0 レコード入力
1000+0 レコード出力
1048576000 バイト (1.0 GB) コピーされました、 8.00941 秒、 131 MB/秒
```

何か知りたい情報があれば、ご一報ください。
RailsのDateまたはDateTimeを用いてカレンダーを実装

<h2>Date(Time)オブジェクトを利用してカレンダーを実装</h2>

```command:command
$ bundle exec rails console
```
<p>
まずはrails consoleを起動してDateオブジェクトの挙動を調べます。
*この記事を書いているのは<b>2016年3月15日</b>です
</p>
```commans:command
$today = Date.today
=> Tue, 15 Mar 2016

$today.month
=> 3

$today.day
=> 15

$today.year
=> 2016

$today.beginning_of_month.wday
=> 2   #月初めの日の曜日を取得。ハッシュなのでsundayが０

$today.strftime("< %m / %Y >")
=>  < 03 / 2016 >
```
<p>
まだ他にも多くのメゾットがありますが本題に入ろうと思います
</p>
<h2>
railsで簡易カレンダーの実装
</h2>

```ruby:calendar_controller.rb
class CalendarController < ApplicationController

  def index
    @today = Date.today
    from_date = Date.new(@today.year, @today.month, @today.beginning_of_month.day).beginning_of_week(:sunday)
    to_date = Date.new(@today.year, @today.month, @today.end_of_month.day).end_of_week(:sunday)
    @calendar_data = from_date.upto(to_date)
  end

end
```

```html:index.html.erb
<table>
  <tr>
    <% t('date.abbr_day_names').each do |day_name| %>
      <td>
        <%= day_name %>
      </td>
    <% end %>
  </tr>
  <% @calendar_data.each do |date| %>
    <% if date.wday == 0 %>
      <tr>
    <% end %>
    <td>
      <%= date.day %>
    </td>
    <% if date.wday == 6 %>
    </tr>
    <% end %>
  <% end %>
</table>
<p><%= @today.strftime("< %m / %Y >") %></p>

```

```yaml:ja.yml
ja:
  date:
    abbr_day_names:
      - Sun
      - Mon
      - Tue
      - Wed
      - Thu
      - Fri
      - Sat
```
<p>
これでtableに展開されるカレンダーができましたd(￣ ￣)
</p>
Laravel推奨のHomesteadにimagickを入れておく


おそらくimagickがないので、class imagick not found みたいなことになる。

```bash
$ sudo apt-get install imagemagick libmagickwand-dev
$ sudo pecl install imagick
$ sudo apt-get install php5-imagick
$ sudo service php5-fpm reload
$ sudo service nginx restart
```

でいけた。
Visual Studioの既存プロジェクトをGitHubにアップする


Visual Studio 2012で作成された既存のプロジェクトをGitHubにアップする手順のメモ。

## Visual Studio Tools for Git のインストール
- Visual Studio のツールメニューより「拡張機能と更新プログラム」を選択します。

- オンラインのVisual Studioギャラリーからgitで検索をかけると「Visual Studio Tools for Git」が見つかるのでダウンロード。
![img01.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/0b1cbdc1-d38e-09f1-5b2e-fb080e10693f.jpeg)  

- インストーラがダウンロードされたら、実行してインストール開始。

|Install|...|Finish|
|---|---|---|
|![Capu002.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/2a98c23e-03dc-dcf1-0198-6de670fbfc06.jpeg)|![Capu003.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/88841e27-ab35-4f38-79c8-2b2dc7293174.jpeg)|![Capu004.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/19d3add5-fef6-3974-2cf0-9e5450a8dc4d.jpeg)|  

- 終わったら一度Visual Studioを再起動します。
 
## ソース管理にVisual Studio Tools for Gitを設定
- ツールメニューのオプションから「ソース管理」を選択し、現在のソース管理プラグインから「Microsoft Git Provider」を選択。
![Capu005.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/fb177683-b67c-e03d-4e16-53d734ce05ca.jpeg)

  
- ソリューションを右クリックし、「Add Solution to Source Controll ...」を選択します。
ソール管理に何を使うか聞かれるので、Gitを選択しましょう。
※新規プロジェクトを作るときもGitで管理する場合は下のチェックも入れときましょう

![Capu008.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/6e66e649-2aa0-c1fd-c18d-bb01a8b5e81f.jpeg)



## 初めてのコミット

- ソリューションを右クリックして「Commit」を選択
 ![Capu009.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/14ab9962-80f6-88c8-7b4d-515586dd1e19.jpeg)


…そのままじゃコミットできませんでした。  

Gitの設定する必要があるので、チームエクスプローラのChangesのあたりの▼をクリックして設定してやります。
今度はコミットできるようになるので、コメント入れてコミットしてあげます。

|設定|Gitの設定入力|Commit|
|---|---|---|
|![Capu010.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/dd8a8660-e2f3-67cd-98f5-28dfef991b8d.jpeg)|![Capu011.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/d3474513-1b51-1b84-5a0c-3fd7a91c718c.jpeg)|![Capu012.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/f4b15a73-4f5e-f544-0a21-80af144c571e.jpeg)|

リモートリポジトリの設定が出るのでURLを入れます(リモートリポジトリはあらかじめGitHubで作っておきます)。
Publishボタンが有効になるのでクリックするとGitHubに反映されます。

|リモートリポジトリのURL入力|
|---|
|![Capu013.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/31276c66-1b07-8d1e-a7ea-9fda57d00f81.jpeg)|


無事Pushできました。めでたしめでたし。
![Capu017.jpg](https://qiita-image-store.s3.amazonaws.com/0/110452/89d303a0-aa44-f231-f3cc-d96d861304d5.jpeg)
CentOS6.7にてPEARのライブラリをComposerでインストールしようとしたらはまった

# はまった

```json:composer.json
{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.php.net/"
        }
    ],
    "require": {
        "pear-pear.php.net/PEAR" : "*",
        "pear-pear.php.net/HTTP_Request2": "*"
    }
}
```

```bash
$ php composer.phar install
Loading composer repositories with package information
Initializing PEAR repository http://pear.php.net
PEAR repository from http://pear.php.net could not be loaded. Your configuration does not allow connection to http://http://pear.php.net. See https://getcomposer.org/doc/06-config.md#secure-http for details.
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested package pear-pear.php.net/mail_mime could not be found in any version, there may be a typo in the package name.
  Problem 2
    - The requested package pear-pear.php.net/http_request2 could not be found in any version, there may be a typo in the package name.
  Problem 3
    - The requested package pear-pear.php.net/mail_mimedecode could not be found in any version, there may be a typo in the package name.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://getcomposer.org/doc/04-schema.md#minimum-stability> for more details.

Read <https://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.
```

エラーがでる。
Mac OS Xのbrewで入れたcomposerだとうまく行くのに、CentOS6.7だとうまく行かない。

# 修正
httpじゃないとダメだよ、ということだったのでsecure-httpオプションをオフに

```json:composer.json
{
    "config": {
        "secure-http": false
    },
    "repositories": [
        {
            "type": "pear",
            "url": "https://pear.php.net/"
        }
    ],
    "require": {
        "pear-pear.php.net/PEAR" : "*",
        "pear-pear.php.net/http_request2": "*"
    }
}
```

```bash
$ php composer.phar install
```

うまく行きました。composerのバージョンかと思います。

# その他
他のオープンソースなプロジェクトのcomposer.jsonで同様の`
Your configuration does not allow connection to`と言われてしまいました。
公開されている`composer.json`には`secure-http`の記載がありません。

改めてググってみたところ、グローバル環境変数？でこのオプションをオフにするコマンドがありました。

```bash
composer config -g -- disable-tls false
```
> http://stackoverflow.com/questions/36003429/latest-composer-version-not-pulling-laravel

上記のコマンドでホームディレクトリにある設定ファイルの内容が書き換わるようです。

```json:~/.composer/config.json
{
    "config": {
        "disable-tls": false
}
```

他のプロジェクトですがこれで解決しました。恐らく表題の件もこれで解決できると思われます。
Swift2でズンドコキヨシ

初投稿です。
そんなに綺麗でもないけど、とりあえず[元ネタ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)に感化されて、書いてみました。

```swift:zundoko.swift
import UIKit
let array = ["ズン", "ドコ"]
var zun = 0
while true {
    let a = Int(arc4random_uniform(2))
    print(array[a])
    if a == 0  {
        zun += 1
    }
    else if a == 1 && zun == 4 {
        break
    }
    else{
        zun = 0
    }
}
print("キ・ヨ・シ！！")
```
インクリメントはあえて使わないように書いています。[Swift3で廃止されそうなので](https://github.com/apple/swift-evolution/blob/master/proposals/0004-remove-pre-post-inc-decrement.md)。

# 実行結果
<img width="1072" alt="スクリーンショット 2016-03-15 19.20.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/96492/fbf85629-4fa8-4cc0-5d1a-62651505aa5d.png">


もう少し綺麗に書けないですかね...
修行が足りない気がします。
ズンドコキヨシ with MySQL 〜 はじめてのProcedure 


#はじめに

<blockquote class="twitter-tweet" data-lang="en">
<p lang="ja">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>— てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">March 9, 2016</a>
</blockquote>

SQLでなにかしたいと思ったら、実行環境がない。


# 実行環境
ちょっとコード書きたいなあって時に便利
https://paiza.io/


# コード
```sql
DELIMITER //
CREATE PROCEDURE  zundoko()
BEGIN
  DECLARE zunCount INT unsigned DEFAULT 0;
  DECLARE randValue  INT unsigned DEFAULT 0;
  
  loop_label: LOOP
    SET randValue = FLOOR (RAND() * 10) % 2;
    SELECT CONCAT('randValue:', randValue);
    IF randValue = 0 THEN
      SET zunCount = zunCount + 1;
    ELSEIF zunCount < 4 THEN
        SET zunCount = 0;
    ELSEIF randValue = 1 THEN
      SELECT CONCAT('zunCount:',zunCount);
      SELECT "キ・ヨ・シ！";
      LEAVE loop_label;
    END IF;
  END LOOP loop_label; 
END
//
DELIMITER ;

CALL zundoko;

```

![スクリーンショット 2016-03-15 18.54.11.png](https://qiita-image-store.s3.amazonaws.com/0/12362/03075a58-0130-36e2-7a58-f307e6711ed2.png)


# さいごに

 - Procedure中の変数定義
 - 条件なしのループの仕方
 - ループからの抜け方
 - クエリー書きたいわあって気持

を得ました。
CakePHP: The datasource configuration default was not found in database.php（別のケース）

テーブルが2つありモデル同士がリレーションをしている場合、
次の順番でbakeをすると表題のエラーがでます：

1) テーブル1のモデルをbake
2) テーブル1のコントローラをbake
3) テーブル1のビューをbake　→　エラー！

正しくは次の順番でbakeします：

1) テーブル1のモデルをbake
2) テーブル2のモデルをbake
3) テーブル1のコントローラをbake
4) テーブル2のコントローラをbake
5) テーブル1のビューをbake
6) テーブル2のビューをbake

※おそらく、3以降の順番は任意
途中から .gitignore が言うことを効かない時

# あるある

結構コミットのスタックがたまってから、途中から「やっぱりignoreしたい」となって、.gitignoreをいじってみても、うまく無視されて無いときがあります。~~僕だけか...？~~

# 適切解？

そういう時はgitignoreを編集後、以下のように`git rm`してやると適用されるようです（`git rm --cached`の場合もあります）

```
$ git rm want-to-ignore-file
$ git commit -m '消しまっせ〜'
```

# 注意

以下のように、一回全部`git rm -r`しなさい、ってやり方もありますが、この記事中でも言及されているように、一回全部消してからもう一回全部addする、という結構強引なやり方です。

```
$ git rm -r --cached
$ git add .
$ git commit -m "無理矢理でっせ〜"
```

> version control - Ignore files that have already been committed to a Git repository - Stack Overflow
http://stackoverflow.com/questions/1139762/ignore-files-that-have-already-been-committed-to-a-git-repository


# See Also

>.gitignore does not work [duplicate]
http://stackoverflow.com/questions/6380196/gitignore-does-not-work
pythonでズンドコキヨシ


##元ネタ

[こちら](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)
取り敢えず乗っておこう。

##まずは普通に

```zundoko.py
# coding:utf-8

from random import choice

ZUNDOKO_MESSAGE = 'ズンズンズンズンドコ'
KIYOSHI = 'キ・ヨ・シ!'

def zundoko():
    check_list = []
    while ''.join(check_list[-5:]) != ZUNDOKO_MESSAGE:
        check_list.append(choice(['ズン', 'ドコ']))
        print check_list[-1]
    print KIYOSHI

if __name__ == '__main__':
    zundoko()
```

実行

```
$ python zundoko.py
ズン
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ!
```
うむ

##無駄にクラス化

少バイト数を目指す方が多い中、無駄なことをやる。
まあ色々突っ込みドコロはあるが。

```ZundokoKiyoshi.py
# coding:utf-8

from random import choice

class ZundokoKiyoshi:

    CORRECT_MESSAGE = 'ズンズンズンズンドコ'

    RESULT_MESSAGE = 'キ・ヨ・シ!'

    _message_list = ['ズン', 'ドコ']

    _result = []

    def say_rand(self):
        '''
        メッセージをランダムに返す
        '''
        return choice(self._message_list)

    def append(self, message):
        '''
        リストにメッセージを追加する
        '''
        self._result.append(message)

    def empty(self):
        '''
        リストを空にする
        '''
        self._result = []

    def is_correct(self):
        '''
        リスト内のメッセージを確認し、メッセージが正しいかどうかを返す
        '''
        return ''.join(self._result[-5:]) == self.CORRECT_MESSAGE

    def print_result(self):
        '''
        結果メッセージを返す
        '''
        print ''.join(self._result) + self.RESULT_MESSAGE

    def check(self):
        '''
        ズンドコキヨシを実行する
        '''
        while (self.is_correct() is False):
            self.append(self.say_rand())
        self.print_result()
        self.empty()
        return True
```

使い方

```execZundokoKiyoshi.py
# coding:utf-8

from ZundokoKiyoshi import ZundokoKiyoshi

if __name__ == '__main__':
    zundoko = ZundokoKiyoshi()
    for i in xrange(5):
        zundoko.check()
```

実行

```
$ python execZundokoKiyoshi.py
ズンドコズンズンズンズンズンズンズンドコキ・ヨ・シ!
ズンズンズンズンドコキ・ヨ・シ!
ドコドコドコズンドコズンドコドコドコドコズンズンドコドコドコズンドコズンズンズンドコズンドコドコドコドコドコドコズンドコドコズンドコドコズンズンドコズンズンドコズンドコズンズンドコズンズンドコズンドコドコドコドコドコドコドコズンズンドコドコドコズンズンズンドコズンドコズンドコズンドコドコズンズンズンドコドコズンドコドコズンズンズンズンドコキ・ヨ・シ!
ズンズンドコズンズンドコズンズンドコズンズンズンズンドコキ・ヨ・シ!
ズンズンドコドコドコズンドコズンドコドコズンズンズンドコズンズンドコズンズンドコドコドコドコズンドコズンドコドコドコズンズンズンズンズンズンドコキ・ヨ・シ!
```

目がしぱしぱするｗ
Android純正エミュレータでは、まだARMのイメージは提供されていない模様

エミュレータで N Preview を試していたのだけど、 `INSTALL_FAILED_NO_MATCHING_ABIS` が出て特定のアプリをインストールできなかった。

この `INSTALL_FAILED_NO_MATCHING_ABIS` は、アプリが使っているネイティブライブラリに端末のアーキテクチャが対応していない時に出る。

今回は ARM 向けのアプリを　x86 のエミュレータにインストールしようとして失敗したのだけど、どうやら Android N Preview 1 時点では、イメージは x86 向けしか公開されていない模様。

> Select the N system image (with the x86 ABI), then click Next. (Only x86 system images are currently supported with the Android Emulator for the Android N Preview.)
> https://developer.android.com/intl/ja/preview/download.html#setupAVD

### 参考
* [Cocos2d-xをAVD上で動かそうとしたらINSTALL_FAILED_NO_MATCHING_ABISエラー - 俺、サービス売って家買うんだ](http://www.ie-kau.net/entry/2015/08/20/Cocos2d-x%E3%82%92AVD%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E3%82%89INSTALL_FAILED_NO_MATCHING_ABIS%E3%82%A8%E3%83%A9%E3%83%BC)
phpにおいてORACLEデータベースの接続

# Oracleへの接続手段
**PDO_OCI**
PDO(PHP Data Objects)の一部になる。
PHPによる開発されたもの。
古いので、使用しない。
> https://pecl.php.net/package/PDO_OCI

**oci8**
ORACLEによる開発されたもの。
PHP5.3とORACLE Ver.11以降では、
ORACLEのDRCPによる接続プーリングを実現できる。

> http://php.net/manual/ja/oci8.connection.php

**DRCP**
DRCP設定の資料
http://kenken0807.hatenablog.com/entry/2015/07/30/205833
kiyoshi.py

はやりのアレ

あんまりpythonで書いてる人がいなかったのでとりあえず。

```py3

# -*- coding: utf-8 -*-
from doctest import testmod
from random import getrandbits
RULE = ['zun','zun','zun','zun','doko',]


def execute():
    '''
    >>> r = execute()
    >>> r[-1]
    'kiyoshi'
    >>> r[-2]
    ['zun', 'zun', 'zun', 'zun', 'doko']
    '''
    result = []
    n = None
    while n != RULE:
        n = ['zun' if int(x)==0 else 'doko' for x in list(str('{0:05b}'.format(getrandbits(5))))]
        result.append(n)
    else:
        result.append('kiyoshi')
    return result


if __name__ == "__main__":
    testmod()
    for o in execute():
        print(o)


```

追記

問題を読み違えていたので書き直し

```py3
# -*- coding: utf-8 -*-
from doctest import testmod
from random import getrandbits
RULE = [True,True,True,True,False]


def execute(rule):
    '''
    >>> r = execute([True,True,True,True,False])
    >>> r[-5:]
    [True, True, True, True, False]
    '''
    res = []
    is_loop = True;
    while is_loop:
        n = [x == '1' for x in list(str('{0:0100b}'.format(getrandbits(100))))]
        for i in range(100):
            if not n[i:i+5] == rule:
                continue
            is_loop = False
            res.extend(n[:i+5])
            break
        else:
            if is_loop:
                res.extend(n)
    return res


if __name__ == "__main__":
    testmod()
    for o in execute(RULE):
        print(("zun" if o else "doko"))
    else:
        print('kiyoshi')
```
CentOS6.7でEmacs24をインストールする

# はじめに
CentOSを使っていたらscala-mode2がemacs24以降が必須だった。
標準リポジトリは23系が入っていて絶望したのでメモ。
ソースからインストールは大変そうなのでyumで管理したかった。


# ググったけどダメだった

ググったら下記のやりかたが出てきたけどうまくいかなかった。

> wgetコマンドのインストール
> yumのリポジトリの追加
> yum rpm -import
> yum install emacs-24.2-4.el6.x86_64
>
> [Yum Install Emacs24 on CentOS 6.5](http://kanpe777.github.io/blog/2014/01/12/yum-install-emacs24-on-centos-6-dot-5/)


```bash
$ cd /etc/yum.repos.d
$ sudo wget http://pj.freefaculty.org/EL/pjku.repo
$ sudo rpm --import http://pj.freefaculty.org/EL/PaulJohnson-BinaryPackageSigningKey
$ sudo yum install emacs-24.2-4.el6.x86_64
$ emacs -versionで確認
```

CentOSに詳しくないけど6.5と6.7では違うんだろうか…。

# 他のやりかた

```bash
$ sudo curl -o /etc/yum.repos.d/emacs.repo https://gist.githubusercontent.com/AaronTheApe/5540012/raw/5782a8d6a95f76daeed6073dc0c90612fefe2fb3/emacs.repo
$ sudo yum remove emacs emacs-nox
$ sudo yum install dejavu-sans-mono-fonts
$ sudo yum --disablerepo="*" --enablerepo="emacs"  --nogpgcheck -y install emacs-nox
$ emacs --version # 確認
```

これでうまく入りました。

# 補足

元々あるemacsを削除した方が良いのかどうか分からなかったです。

以下のサイトから持ってきました。安全性は不明です。
> https://gist.github.com/AaronTheApe/5540012


`--nogpgcheck`オプションがないと以下のエラーで怒られました。

```
Package liblockfile-1.08-9.el6.x86_64.rpm is not signed
```

指定したリポジトリに含まれるパッケージについて、下記のサイトを参考にしました。今まで知らなかったので凄く助かりました！

```bash
$ yum --disablerepo="*" --enablerepo="emacs" list available
```

> http://mcvictech.blogspot.jp/2012/06/yum-update-from-specific-repository.html
python > link > dir_util.copy_tree() > update=1 > 取得済みはコピーしない?


http://docs.python.jp/2/distutils/apiref.html

> distutils.dir_util.copy_tree(src, dst[, preserve_mode=1, preserve_times=1, preserve_symlinks=0, update=0, verbose=0, dry_run=0])

>  update と verbose は copy_file() のものと同じです。

<hr>

> distutils.file_util.copy_file(src, dst[, preserve_mode=1, preserve_times=1, update=0, link=None, verbose=0, dry_run=0])

>update が真の場合、 src は dst が存在しない場合か、dst が存在して src より古い場合にだけコピーします。

フォルダのコピーですでに取得済みのコピーをスキップするには update を1にすればよさそうだ。
ズンドコキヨシ.ex by ストリーム without `Stream`

## はじめに

もう既に何番煎じか（もうすぐ3桁？）て感じですが、敢えてもう1本上げてみる。
夕べ書いた [ズンドコキヨシ.jl with Iteration](http://qiita.com/antimon2/items/b198076666b40c72cece) を [Elixir](http://elixir-lang.org/) に翻訳してみた。

## 実装結果

```ex:zundoko.ex
# zundoko.ex

defmodule Zundoko do
  def stream do
    &stream(0, &1, &2)
  end

  defp stream(_, {:halt, acc}, _fun), do: {:halted, acc}
  defp stream(v, {:suspend, acc}, fun), do: {:suspended, acc, &stream(v, &1, fun)}
  defp stream(:done, {:cont, acc}, _fun), do: {:done, acc}
  defp stream(5, {:cont, acc}, fun), do:
    stream(:done, fun.("キ・ヨ・シ！", acc), fun)
  defp stream(4, {:cont, acc}, fun), do: 
    stream(Enum.random([{4, "ズン"}, {5, "ドコ"}]), {:cont, acc}, fun)
  defp stream(n, {:cont, acc}, fun) when n < 4, do: 
    stream(Enum.random([{n + 1, "ズン"}, {0, "ドコ"}]), {:cont, acc}, fun)
  defp stream({n, zd}, {:cont, acc}, fun), do: 
    stream(n, fun.(zd, acc), fun)

  def run do
    stream |> Enum.join |> IO.puts
  end
end

Zundoko.run
# => ズンドコズンズンズンドコドコドコズンドコドコズンズンズンズンズンズンズンズンドコキ・ヨ・シ！
```

ポイントは、「`Stream` モジュールを使わないストリームの実装」。
（詳しくは [私の過去記事](http://qiita.com/antimon2/items/2c485bda4696d155156f) 等参照）
`Zundoko.stream` の定義に `Enum.random` 以外の標準ライブラリ関数を使用していません！

[ズンドコキヨシ.jl with Iteration](http://qiita.com/antimon2/items/b198076666b40c72cece) と同様、処理本体は `Stream`（として扱われる関数）として返ってくるので、リストで取得したければ、例えば
`Zundoko.stream |> Enum.to_list`
とすれば `["ドコ", "ズン", "ドコ", "ズン", "ズン", "ズン", "ズン", "ズン",
 "ドコ", "キ・ヨ・シ！"]` といったリストが得られます。

## まとめじゃないけれど

ストリーム（無限リスト）やイテレータの定義方法が似ているなら他言語でも同じような感じで実装出来るのではないかと。
Robolectricを利用したプロジェクトのJaCoCoカバレッジをJenkinsで測定する

基本的には[Jenkinsを利用したAndroidコード品質の見える化 - Qiita](http://qiita.com/usamao/items/93535df778916ee70ad8)を参考にしています。その上で動かすために変更を加えた箇所です。

# Jenkins JaCoCoプラグインのダウングレード

Robolectricを利用したテストのカバレッジを取るためにはJaCoCo 0.7.1系が必要らしいです。

参考：
[Тестирование на Android: Robolectric + Jenkins + JaСoСo / Блог компании Rambler&Co / Хабрахабр](https://habrahabr.ru/company/rambler-co/blog/266837/)
[Testing for Android: Robolectric + Jenkins + JaCoCo — IT daily blog, news, magazine, technologies](http://developers-club.com/posts/266837/)（上記の勝手？英訳）
[android - JaCoCo doesn't work with Robolectric tests - Stack Overflow](http://stackoverflow.com/questions/35735085/jacoco-doesnt-work-with-robolectric-tests)（ベストアンサーより）

JaCoCo 0.7.1系をサポートしているのはJenkins JaCoCoプラグインの[1.0.18](http://updates.jenkins-ci.org/download/plugins/jacoco/1.0.18/jacoco.hpi)までなので、アーカイブからダウンロードして手動でインストールします。（既に最新版をインストールしている場合も同様の方法でダウングレードできます）

***Jenkinsの管理>プラグインの管理>高度な設定（タブ）＞プラグインのアップロード***

![jenkins_jacoco.png](https://qiita-image-store.s3.amazonaws.com/0/21354/7a7062fb-26ce-be3a-02ff-9482b7d6bbab.png)


また、build.gradleのjacoco.toolVersionもこれに合わせて変更します。

```groovy
jacoco {
    toolVersion = "0.7.1+"
}
```

現在最新のバージョン2.0.1でJaCoCo 0.7.5系が必要になりましたが、Android Studio上でJaCoCoカバレッジ出力に必要な0.7.4系とexecの形に互換がなくなっています。Robolectricを利用していなければ以下の記述で。

2.0.1を利用するなら

```groovy

jacoco {
    toolVersion = "0.7.5+"
}

// 単体でのJaCoCoレポート出力では0.7.4系が必要なため削除せざるを得なかった
//task jacocoReport(type: JacocoReport, dependsOn: "testDebug") {
// 以下略
//}
```

1.0.19～2.0.0を利用しているなら（Android Studioでもカバレッジ取りたいとき）

```groovy
jacoco {
    toolVersion = "0.7.4+"
}

task jacocoReport(type: JacocoReport, dependsOn: "testDebug") {
// 略
}
```

# ProductFlavorを考慮したJenkinsの設定変更

私の抱えているプロジェクトの場合、1つのプロジェクトに複数のProductFlavorがあり参考にしたQiitaの記述だけではJaCoCoリポート出力時にエラーとなってしまったので以下の修正を加えました。（なので、特に設けていない場合はここは手を入れなくてもいいはずです）

* Path to exec files

```text
**/test**.exec
```

* Path to class directories（ProductFlavor毎にintermidiates/classesの下にflavor/debugといった形で1階層挟まるため。ワイルドカードでOK）

```text
**/build/intermidiates/classes/*/debug
```

* Path to source directories（記述中のflavorは任意のProductFlavorの名前。ProductFlavorの数だけ記述を増やす。ワイルドカード指定だとtestまで含んでしまうので必要なだけ個別に）

```text
**/src/main/java, **/src/flavor/java
```

※[5分で AndroidStudio + JaCoCo の環境構築 - Qiita](http://qiita.com/usamao/items/ef64012f60927ac008ff)のようにJacocoReportタスクを定義している場合はbuild.gradleの記述に関しても同様の考慮が必要です。
ズンドコキヨシ by CoffeeScript

今更だろうが流行っているのでCoffeeScriptで。
~~これ、[進捗どうですか](http://elephnote.com/blog/archives/936) じゃ…?~~

```coffeescript:zundoko.coffee
do ->
  zundoko = ''
  until /ズンズンズンズンドコ$/.test zundoko
    part = if Math.random() > 0.5 then 'ズン' else 'ドコ'
    zundoko += part
    console.log part
  console.log 'キ・ヨ・シ!'
```

### 結果
```bash
> coffee zundoko.coffee
ドコ
ドコ
ズン
ズン
ズン
ズン
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ!
```

今更なのはCoffeeScriptですか。そうですか。
folderにgroupの書き込み権限設定

[参考](http://superuser.com/questions/19318/how-can-i-give-write-access-of-a-folder-to-all-users-in-linux)

```shell-session
sudo usermod -a -G www-data <some_user>
sudo chgrp -R www-data /var/www
sudo chmod -R g+w /var/www
```
【Git】git push --delete origin {削除したいリモートブランチ名} →リモートブランチの削除

しばしば調べてる気がするのでメモ。
タイトル見ただけでほぼ分かるようにしてみた。

## リモートブランチを削除する

リモートブランチ `hoge` を削除したい場合

```sh:
$ git push origin :hoge
```

コロンの後の`hoge`は削除したいリモートブランチ名を指定します。

```sh:
$ git push origin :{削除したいリモートブランチ名}
```



もしくは

```sh:
$ git push --delete origin hoge
```

```sh:
$ git push --delete origin {削除したいリモートブランチ名}
```

## 参考

参考にさせていただきました。今日も先人様に感謝。

とてもわかりやすいです↓

* [今さら聞けないgit pushコマンド - Shoichi Matsuda's diary] (http://shoma2da.hatenablog.com/entry/2014/03/08/234523)

以上
Rails:4.2.5 Redis:3.2.2 Errno::ECONNREFUSED Redis::CannotConnectErrorを倒す

# 問題
トリガーすると`Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) (Redis::CannotConnectError)`でアプリケーションが落ちてしまう。

```
/path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:332:in `rescue in establish_connection': Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) (Redis::CannotConnectError)
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:318:in `establish_connection'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:94:in `block in connect'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:280:in `with_reconnect'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:93:in `connect'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:351:in `ensure_connected'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:208:in `block in process'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:293:in `logging'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:207:in `process'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis/client.rb:113:in `call'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:2085:in `block in publish'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:57:in `block in synchronize'
	from /Users/hirokishirai/.rbenv/versions/2.3.0/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:57:in `synchronize'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/redis-3.2.2/lib/redis.rb:2084:in `publish'
	from /path_to_app_dir/vendor/bundle/ruby/2.3.0/gems/websocket-rails-0.7.0/lib/websocket_rails/synchronization.rb:63:in `block in publish'
```

# ２つの解決策
どちらも動作確認済みです。
moaaさんのfixesをそのまま使っちゃうか、とりあえずredisを3.2.0にダウングレードしてwebsocket-railのマスターにfixesがマージされるのを待つかです。どちらでも良いと思います。
## 方法１ `moaa/websocket-rails`の`sync_fixes`ブランチを使う
### Gemfileを次のように書き換える
```diff
- gem 'websocket-rails'
+ gem 'websocket-rails', github: 'moaa/websocket-rails', branch: 'sync_fixes'
```

## 方法２ `gem 'redis'`のバージョンを`3.2.0`にダウングレードする
### Gemfileを次のように書き換える
```diff
- gem 'redis'
+ gem 'redis', '3.2.0'
```
### redisをupdate（Gemfile.lockでバージョンがロックされているのでbundle installは通らないはず）
```
bundle update redis
```


# Source↓
[Redis error when sending two different messages · Issue #313 · websocket-rails/websocket-rails](https://github.com/websocket-rails/websocket-rails/issues/313)
hogan.jsの基本的な使い方まとめ

# そもそもHogan.jsって？
Twitter社から出たApache Licenseのjava scriptのテンプレートエンジン

https://github.com/twitter/hogan.js
http://twitter.github.io/hogan.js/

# 対象version
Hogan.js 3.0.2

# Hogan.jsの基本的知識
* [Mustache](http://mustache.github.io/)というテンプレートエンジンの構文に則っている
* 複雑な制御文が書けないのでロジックとviewがほぼ分離される
* 事前にコンパイルもできるっぽい
* そのままライブラリを読み込んで、利用もできる
* 他ライブラリの依存はない(standalone)
* 自動でエスケープされる
* テストは`Qunit`か`mastache spec`
* バージョンはSemantic Versioningに則り管理されている様子。詳しくは[こちら](http://semver.org/lang/ja/)で

# Hogan.js(=Mustache)の基本的構文
## 変数
`{{`、`}}`で囲む
{{name}}
`name`という変数名が出力される

## 変数のアンエスケープ
`{{{`、`}}}`で囲む
{{{name}}}
`name`という変数にhtmlタグが混在していてhtmlタグを有効にして出力したい場合に使う

## 条件分岐
* conditionがtrueの場合

 ```
 {{#condition}}
  output
 {{/condition}}
 ```

* conditionがfalseの場合

 ```
 {{^condition}}
  output
 {{/condition}}
 ```

## ループ
if true文と同じになるが配列が渡った際はループとして動作する

```
$array = array(
  array('name' => 'aaa'),
  array('name'  => 'bbb')
)
--
{{#array}}
 {{name}}
{{/array}}
```

## Lambda
説明が難しいので
>```
>Template:
>
>{{#wrapped}}
>  {{name}} is awesome.
>{{/wrapped}}
>Hash:
>
>{
>  "name": "Willy",
>  "wrapped": function() {
>    return function(text, render) {
>      return "<b>" + render(text) + "</b>"
>    }
>  }
>}
>```
参照:https://mustache.github.io/mustache.5.html


## コメント
`!`をつける
{{! name}}


# 気づいた点
* Mustacheは訳すと口ひげ。だから`{`を多用しているっぽい
* Semantic Versioningの日本語版をこの機会によく読めてよかった
* 同様の`handlebarsjs`あたりもちょっと見てみたくなった
【C＃】ポリモーフィズムの意外な動き


インターフェースを継承したクラスを継承して新しいクラスを作成したら、C#の仕様を理解していないばかりにハマってしまいました。
インターフェースを継承したクラスに一部機能追加をしたく、次のようなソースを書きました。

```csharp:IData.cs
interface IData
{
    void Method();
}
```

```csharp:DataParent.cs
public class DataParent : IData
{
    public void Method()
    {
        Console.WriteLine("Parent");
    }
}
```

```csharp:DataChild.cs
public class DataChild : DataParent
{
    public new void Method()
    {
        Console.Write("Child => ");
        base.Method();
    }
}
```

こんな感じで

```csharp:Program.cs
static void Main(string[] args)
{
    DataChild dataChild = new DataChild();
    dataChild.Method();
    IData data = dataChild;
    data.Method();
}
```

実行してみると

```
Child => Parent
Parent
```

となります。
IDataで受けようともDataChildが呼び出されると疑っていませんでした。想定外の動きに頭の中が混乱しましたが、調べたら仕様のようです。
DataChildもIDataで受けたい場合は、継承を追加すれば大丈夫です。

```csharp:DataChild.cs
public class DataChild : DataParent, IData
{
    public new void Method()
    {
        Console.Write("Child => ");
        base.Method();
    }
}
```

インターフェースからすると自分を継承しているメソッドを呼び出すようです。知らなかったので焦りましたが、そう言われればそういうもんかな。あまりやらないことをしてあたふたしていました。
Javaでズンドコキヨシ

# 前提
ちょっと前に話題になった「ズンドコキヨシ」の話題に乗ってみる。
元ネタはこちら↓↓↓
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160">2016年3月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

# ソース

「ズン」「ズン」「ズン」「ズン」「ドコ」の順番に値を返すまで無限に続くストリームを作ってやってみる。

```java

public class ZunDokoKiyoshi {

  enum ズンドコ {
    ズン, ドコ;
  }

  public static void main(String... args) {
    StreamSupport.stream(Spliterators.spliteratorUnknownSize(new ZunDokoIterator(), Spliterator.ORDERED), false)
        .forEach(System.out::println);
    System.out.println("キ・ヨ・シ！");
  }

  static class ZunDokoIterator implements Iterator<ズンドコ> {

    Random rnd = new Random();
    int zc = 0;
    boolean end = false;

    @Override
    public boolean hasNext() {
      return !end;
    }

    @Override
    public ズンドコ next() {
      ズンドコ e = rnd.nextInt(10) % 2 == 0 ? ズンドコ.ズン : ズンドコ.ドコ;
      switch (e) {
      case ズン:
        zc++;
        end = false;
        break;
      case ドコ:
        if (zc >= 4) {
          end = true;
        } else {
          zc = 0;
          end = false;
        }
        break;
      default:
        throw new IllegalArgumentException(e.toString());
      }
      return e;
    }

  }
}

```
positionプロパティを使い、親要素を基準として子要素の位置を指定する。

以下のHTMLで、時刻をdivの中で一番上に表示したい時などに使える。

```html5
<div class="content">
    <h3 class="title">タイトル</h3>
    <p class="desc">内容

    </p>
    <time class="date" datetime="2016-03-15">時刻</time>
</div>
```

親要素に設定されているcontentクラスにposition:relative; を指定し、子要素に設定されているdateクラスに position:absolute; を指定すると、子要素はposition:relative; が指定された親要素からの相対位置に配置される。
ここでは相対位置(top、left)を指定していないので、最も左上に配置され、その結果、上から時刻・タイトル・内容の順番に表示される。

```css
.content {
    position:relative;
}

date{
    position:absolute;
}
```
CoffeeScriptで非同期ズンドコキヨシ


`Promise`を使って非同期にズンドコキヨシしてみた。

参考: [ズンドコキヨシまとめ](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)

```coffeescript
kiyoshi = (str = "")->
  new Promise (resolve) ->
    console.log w = ["ズン", "ドコ"][Math.random() * 2 | 0]
    if (str = str + w).match /(ズン){4}ド/
      console.log "キ・ヨ・シ！"
      resolve()
    else
      kiyoshi(str).then ->
        resolve()

kiyoshi()
```
RaspberryPiで脈拍データをCSV出力(CSV出力)

#手順とリンク
1.準備と基礎編
http://qiita.com/tkyko13/items/62ff91bce7d9e555c434
2.アナログ入力確認編
http://qiita.com/tkyko13/items/981989a006a95821ccde
3.pythonで確認
http://qiita.com/tkyko13/items/44ca53b027fa249acdc6
4.脈拍センサ
http://qiita.com/tkyko13/items/e4afc73add81d7bbb426
5.csv出力
ここ

#pythonでCSV
探すとたくさん参考記事が見つかると思います。
以下のURLからも参考にさせて頂きました。
http://qiita.com/okadate/items/c36f4eb9506b358fb608
まずは、脈拍センサ関係なくシンプルなサンプルコードを乗せます。
これを実行すると、このpythonコードと同じフォルダにdata.csvが作られ、縦に0から99の数字が並んでいると思います。
最終的にこの数字を脈拍の数値にします。

```csvSample.py
import csv

f = open('data.csv', 'w')

for i in range(0, 100):
    writer = csv.writer(f, lineterminator='\n')
    writer.writerow([i])

f.close()
```

動くことが確認できたら、for文ではなく、前々回の「3.pythonで確認」で作ったサンプルコードと合わせていきます。

```sample.py
import smbus
import time
import threading
import csv

I2C_ADDRESS = 0x48

bus = smbus.SMBus(1)
f = open('data.csv', 'w')

def loop(count):

    count = count+1
    bus.write_byte(I2C_ADDRESS, 0xFF)
    value = bus.read_byte(I2C_ADDRESS)
    print value

    writer = csv.writer(f, lineterminator='\n')
    writer.writerow(value)

    if count < 100 :
        t = threading.Timer(0.1, loop, args=(count,))
        t.start()
    else :
        f.close()
        print 'finish'

t = threading.Thread(target=loop, args=(0,))
t.start()

```


#いざ脈拍測定
さて、脈拍センサが配線でき(前回)、上のpythonコードを実行できるようになったら測定していきます。
コツとしては指を少し離すといいらしいです。

#csvデータ転送
無事ラズパイ内にcsvデータができれば成功です。
自分のPCにデータ転送します。
方法は自由ですが、自分はftpソフト(macですのでCyberduck)を使いました。
ラズパイにUSBメモリを差すのもありです。

#エクセルでデータを開きグラフを挿入
自分のデータはうまくいっていなかったっぽいです。
指を置いたときと、まったく置いていないときを比較したグラフ画像が以下です。

![スクリーンショット 2016-02-23 18.42.38.png](https://qiita-image-store.s3.amazonaws.com/0/76572/60f2184d-a1f1-c8f7-04b3-7cb7ed5872cd.png "スクリーンショット 2016-02-23 18.42.38.png")

配線か、環境か、データ取得間隔が開きすぎたか・・・
もしくわ・・・既に死んでいる・・・？

#まとめ
結果はどうあれ、これにて半無理矢理終了です。
改善改良は引き続き行って行きたいと思います。
長くなりましたがお疲れ様でした。
Arduino IDEでESP-WROOM-02のボード設定について

ESP-WROOM-02(ESP8266)の開発をArduino IDEから行うときに[Arduino core for ESP8266 WiFi chip](https://github.com/esp8266/Arduino)をインストールします。インストール後のボード設定の項目があやふやのままだったので調べてみました。

因みに僕はスイッチサイエンスの[ESP-WROOM-02 Arduino互換ボード](https://www.switch-science.com/catalog/2620/)を使っているので、記事「[ESP-WROOM-02開発ボードをArduino IDEで開発する方法](http://trac.switch-science.com/wiki/esp_dev_arduino_ide)」を参考に、以下のように設定しています。

![Arduino IDEキャプチャ](https://qiita-image-store.s3.amazonaws.com/0/55103/0f8eb68e-2cfc-4b20-e6ba-58461de4bd98.jpeg)

| 設定項目 | パラメーター |
|:-----------|:------------|
| マイコンボード | Generic ESP8266 Module |
| Flash Mode | QIO |
| Flash Frequency | 80MHz |
| Upload Using | Serial |
| CPU Frequency | 80MHz |
| Flash Size | 4M (1M SPIFFS) |
| Debug port | Disabled |
| Debug Level | None |
| Reset Method | nodemcu |
| Upload Speed | 115200 |

# 各設定項目について調べてみました
ざっとググッてまとめてみました。不備がありましたらコメントにてご指摘いただけると嬉しいです :bow: 

## マイコンボード
ESP8266をどの状態で使用するのかを指定します。ESP8266に直接スケッチを書き込む場合は`Generic ESP8266 Module`を選択します。

## Flash Mode
Flashメモリにデータを書き込むモードを選択します。**DIO：Dual I/O**で**QIO：Quad I/O**のようです(参考記事「[What is the difference between QIO and DIO flash mode?](http://www.esp8266.com/viewtopic.php?f=33&t=3838)」)。名前の通りQuadがDualより速いので`QIO`を選択します。

## Flash Frequency
フラッシュメモリの動作周波数です。`80MHz`を選択します。

## Upload Using
スケッチの書き込み方式です。USBで書き込むので`Serial`を選択します。`OTA`を選択すると、Wi-Fi経由でスケッチを書き込めるようです(参考記事「[ESP-WROOM-02 + ArduinoOTAでスケッチのWiFi経由アップロード](http://qiita.com/minori24/items/4a3fdc0b037e9d1c09a1)」)。

## CPU Frequency
CPUの動作周波数です。`80MHz`を選択します。

## Flash Size
Flashメモリのサイズです。`4M (1M SPIFFS)`を選択します。[SPIFFS](https://github.com/pellepl/spiffs)とはSPI Flash File Systemの略で、フラッシュメモリにスケッチ以外のファイルを保存するための領域を用意するものです。`4M (1M SPIFFS)`は4MBの内1MBをSPIFFSの領域として確保するという意味です。大きなファイルを保存したい場合は`4M (3M SPIFFS)`を選択します。

## Debug port
ESP8266のデバッグをするか指定します。特に必要なければ`Disabled`を選択します。Arduino IDEのシリアルモニターに出力したい場合、`Serial`を指定します。

## Debug Level
Debug portを`Disabled`以外で設定したときに、デバッグする項目を指定します。

## Reset Method
2016/3/22 更新
ESP8266にスケッチを書き込むときにIO0をLOWにしてRSTでリセットする必要があり、それを書き込みの際にパソコンからの信号で自動的にリセットするときの方式を指定します。`nodemcu`を選択します。

## Upload Speed
スケッチを書き込む転送速度です。ESP8266は標準で115200bpsのため、`115200`を選択します。

# まとめ
ざっと調べてみてなんとなく意味がわかってきました。**Reset Method**については解決できなかったので、ご存知のかた教えていただきたく :bow:
最近見つけたちょっとしたときに使えそうなUIライブラリを適宜まとめていく（Webアプリ向け）

今回は、「なんかの時に使えそうだな〜。だけど今必要じゃないな〜」みたいな感じで、試すだけ試してそのままになってるUIライブラリをまとめてみます。

個人的に、そのうち何かの折に使う時に役立つかもしれないので！
使わないかもしれないけど！てか使わない可能性の方が高い気がするけど！

あと一部（結構な量）自分の投稿の中で登場してるやつもあります。

## Label.css

http://usablica.github.io/label.css

画像とか、特定の領域の上にラベルを貼れるcssです。
表示アニメーションも2パターンから選択可能。


## list.js

http://www.listjs.com/

ulやtableの中のtrやliをjsで動的に足したり引いたり、検索したり並べ替えたりできるライブラリです。
シンプルに使えるインタフェースなのがいいですね！

## SuperPlaceHolder.js

http://www.webappers.com/2016/03/15/superplaceholder-js-bring-your-input-placeholders-to-life/

placeholderの文字列をアニメーションさせられるライブラリです。
動きは上記の公式サイトを見ていただいた方がわかりやすいかと思われます。
optionsでループさせるか、フォーカスを得たら動くようにするか、など細かくカスタマイズ可能。

## FlowType.js

http://simplefocus.com/flowtype/

画面サイズに合わせて動的に文字サイズとかを適切なサイズに変更してくれるライブラリです。
jQueryで動いているので、jQuery必須です。


## TURNBOX.js

http://noht.co.jp/turnbox

タグに色々アニメーションをつけられるライブラリです。
簡単にアニメーションを入れることもできるし、細かく設定することもできます。


## Hamburgers

https://jonsuh.com/hamburgers/

ハンバーガーアイコンに色々なアニメーションをつけるライブラリです。
ナビバー全体を何かしらのライブラリで作っている場合には不要な可能性大ではあります。

## spin.js

http://fgnass.github.io/spin.js/

手軽にスピナーを実装できるjsライブラリです。
スピナーの太さや回転速度などをカスタマイズ可能で、
公式サイト上からGUIでの調整もできます。

# TableExport.js

https://www.clarketravis.com/tableexport/

tableタグの内容をexcelやcsvにexportできるjs。
jQueryとfilesaver.jsを利用しているようです。

- - -

こんな感じで、いつか使う日がくることを期待しながら、適宜追加していきます！
~/.aws/credentialsファイルでプロファイルを切り替える

AWSの認証情報についてググると良く以下の環境変数をセットせよと言う記事が出てきます。

* AWS_ACCESS_KEY_ID
* AWS_SECRET_ACCESS_KEY

これでも良いのですが、複数のAWSアカウントを使い分けていると面倒ですね。
というわけで、この辺のファイルのお話です。

```
~/.aws
├── config
└── credentials
```

## configとcredentials

2つのファイルが有りますが、以下の様な使い分けです。

|ファイル | 用途 |
|-------|-----|
|config| [AWS CLI](https://aws.amazon.com/jp/cli/)を使う時のプロファイル別情報 |
|credentials|[AWS SDK](https://aws.amazon.com/jp/tools/),[AWS CLI](https://aws.amazon.com/jp/cli/) を使う時の認証情報|

以前は `config`,`credentials`の両方にアクセスキー、シークレットキーが書かれていたのですが、最近の `aws configure`コマンドでは、上記のように認証情報は`credentials`ファイルに寄せられるようになっています。

で、今回はSDKの方の話をしたいので`~/.aws/credentials`の方にしぼります。

## プロファイル

プロファイルはアクセスキー、シークレットキーのペアに名前をつけて管理する機能です。
上記classmethodさんの記事から引用させていただくと、

```ini
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
 
[test-user]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
```

こんな感じで`default`,`test-user`というのがプロファイル名になります。

### defaultプロファイル

何も指定しない場合にはご想像の通り`default`が使われます。

### 任意のプロファイルを指定する

AWS CLIの場合には全てのコマンドに`--profile`というオプションがあります。
SDKの場合にはどうするのでしょう？

#### 1. ソースコード中でAWS関連のクラスをnewするときに指定

http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Client.html
例えばRuby SDKであればClientクラスのコンストラクタに`:profile`があります。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EC2.html#constructor-property
しかし、Node.jsのコンストラクタには無かったりします。

あと、ソースコードにプロファイル名を埋め込んでしまうと、皆でプロファイル名を統一するという運用が必要になってきます。

#### 2. 環境変数で指定する

`AWS_PROFILE`という環境変数にプロファイル名を指定することで、SDKが内部的に使用するプロファイルを切り替えることが出来ます。似たようなもので`AWS_DEFAULT_PROFILE`という環境変数もありますが、こちらはAWS CLI用みたいです。

使える環境変数については一覧があった気がするのですが・・・んー、出てこなくなった。
とりあえずこれで。
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-getting-started.html#cli-environment
ネットのどこかからssh接続を試行してくるユーザ名を調べてみた

グローバルIPを持つVPSサーバに、毎日のようにネットのどこかからssh接続を試行してくる輩がいる。
どんなユーザ名でアクセスしようとしているか調べてみた。

数字はそのユーザでアクセスしてきた件数、userが圧倒的に多い。
次は、1位と大きく離れてgit、testと続く。

rootログインを許可しているため、
ここにはでていないけどrootも相当多いハズ。
もしかしたらuserよりも。

環境：CentOS6.X

<pre><code># grep -i invalid /var/log/secure | awk '{print$8}' | sort | uniq -cd  |sort -n -r | head -30
   1598 user
     54 git
     30 test
     27 deploy
     23 oracle
     22 admin
     21 ubuntu
     18 postgres
     14 vyatta
     12 ellen
     11 vagrant
     11 testuser
     10 nagios
      9 USERID
      8 stpi
      8 informix
      7 tomcat
      6 zabbix
      6 www
      6 upload
      6 matt
      6 hadoop
      6 guest
      6 cactiuser
      5 xbmc
      5 ronjones
      5 richard
      5 mysql
      5 monitoring
      5 mdpi
</pre></code>