OmniAICreator/Qiita-1.07M huggingface dataset:
gnuplotで規則性のないファイル一覧を連続で描画して動画風にする

___________________________________________________
# ファイルの一覧を番号とともに標準出力に出力

**<なにがしたいか>**

+ C:\home下のファイル一覧を"数字　ファイル名"みたいな感じでテキストを出力する。
+ あえてawk使っているのは後でgnuplot中で使用するため。




```
1 foo.txt
2 bar.exe
...
```


みたいな出力がほしい。


**<できたスクリプト>**

```batch:row_ls.bat
dir "C:\home" /b | awk "{print NR,$0}"
```


**<スクリプト中でやってること>**

1. dir/bでディレクトリ一覧を取得
2. パイプ("|"←これ！)でawkに渡す
3. awkが読み込んだ列数と、ファイル名を標準出力にprintしてくれる
( batchとして実行ではなく、コマンドだけコピーしてコマンドラインに打ち込むと通る。)







___________________________________________________
# 特定の行数だけ、ファイルの一覧を番号とともに標準出力に出力

**<何がしたい>**

+ C:\home下のファイル一覧を"数字　ファイル名"みたいな感じで出力するのはさっきと同じ。
+ 出力する数を限定したい。
+ 例えばファイルを4番から7番まで出力したい



**<できたスクリプト>**

```batch:row_ls.bat2
dir "C:\home" /b | awk "NR== 4,NR==7 {print NR,$0}"
```


**<スクリプト中でやってること>**

1. C:\home下のファイルネームをdirする
2. パイプでawkへ渡す
3. awkで4-7行目までを"行数, ファイルネーム"の順で取り出す




なお行数を示す数字なぞいらなければ`{print NR,$0}`ではなく`{print}`だけにすればよろしい。









___________________________________________________
# 順番にプロットして動画チックにする

**<なにがしたいか>**

+ "C:\home\gnuplot\160101\"というディレクトリ下にソートすると順番になるファイル群(例えば"data160101_1001_00.txt","data160101_1002_00.txt","data160101_1003_00.txt",..."data160101_1100_00.txt")があるとする。
+ 指定したディレクトリ下のファイルネームを順番に取得してgnuplotの標準出力に連続して出力。
+ set outputでgifを指定すればgifファイルが出来上がる。







**<できたスクリプト>**

```gnuplot:dofor_get_filename.gp
outdrct='C:\home\gnuplot\160101\'	#outdrctにrootディレクトリ格納
outdrct2='C:/home/gnuplot/160101/'	#outdrctにrootディレクトリ格納
drctpath=sprintf("%srawdata\\trace",outdrct)	# drctpathに目的のディレクトリ入れる(ココまではつなげてしまっても良い)



do for [i =1:100]{
	command=sprintf('dir %s /b | awk "NR==%4.0f{print}"',drctpath,i)	# ファイル名一覧を出力するdir /bしてパイプでawkに渡す
	data=system(command)
	print sprintf("%4.0f番目のファイルは%sです。",i,data)
	dataname=outdrct2.'rawdata/trace/'.data
	plot dataname
}
```






**<スクリプト中でやってること>**
outdrct内のファイルを連続でプロットするgp

1.  doforで取得する行を指定
2. dir /bでファイル一覧を取得
3. ファイル一覧のi番目のファイル名を取得
4. 変数data,datanameに渡して連続してプロットする









___________________________________________________
# 順番にプロットして動画チックにする(よりシンプルに)




**<できたスクリプト>**

```gnuplot:dofor_get_filename2.gp
outdrct='C:\home\gnuplot\160101\'	#outdrctにrootディレクトリ格納
outdrct2='C:/home/gnuplot/160101/'	#outdrctにrootディレクトリ格納
# cd outdrct.'rawdata/trace'
drctpath=sprintf("%srawdata\\trace",outdrct)	# drctpathに目的のディレクトリ入れる(ココまではつなげてしまっても良い)


command=sprintf('dir %s /b | awk "{print}"',drctpath)	# ファイル名一覧を出力するdir /bしてパイプでawkに渡す
list=system(command)
do for [data in list]{
	dataname=outdrct2.'rawdata/trace/'.data
	p[][-150:0] dataname w l lc "grey40" title data
}
```


**<スクリプト中でやってること>**

1. `command`でawkによってファイル一覧を吐き出させるまではほぼ同じ。違うのは1行ずつではなく改行区切りで一気に出力※
2. awkの出力を`list`という変数に格納
3. list一行一行をdataに代入していくと、さっきと同じ結果になる。



※標準出力に出してみると改行区切りであるが、gnuplot上では`do for [foo in "bar foobar ..."]`で有効なスペース区切りに解釈してくれるらしい。






補足：規則性があるならdo forの中でiとかの変数を引数にdataname決めればいいのですが、「順番には並んでいるけど規則性がない」場合にファイル名を取得してきて連続描画してくれるスクリプトがほしかったのです。
VBA条件分岐、繰り返し、処理を抜ける

###For文
```vbnet
For i = m To n
（中身）
Next
```

###if文
```vbnet
If (条件) Then
  文
End If
```

```vbnet
If (条件１) Then
  　文　
ElseIf (条件２) Then
  　文　
Else
  　文　
End If
```
###For文とIf文の使い分け
```vbnet
Private Sub Worksheet_Activate()

Dim i As Integer
For i = 1 To 10
  If IsEmpty(Cells(i, 1)) = True Then
    ActiveSheet.Tab.Color = RGB(255, 0, 0)
    Exit For
  Else
    ActiveSheet.Tab.Color = RGB(255, 255, 255)
  End If
Next

End Sub
```

###Do Until文
```vbnet
Do Until (条件)
  　文　
Loop

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

Sub 平均が50点以下のセルを赤にする()

Dim no As Long
no = 4
Do Until Cells(no, 4) = ""
  If Cells(no, 4).Value < 50 Then
    Cells(no, 4).Interior.ColorIndex = 3
  End If
  If no >= 11 Then
    Exit Do
  Else
    no = no + 1
  End If
Loop

End Sub
```
条件がTrueになるまで実行する。

### 実行中の処理を途中で抜ける
[【参考】](http://excelvba.pc-users.net/fol6/6_6.html)

```vbnet
Exit Do

Exit For

Exit Function

Exit Property

Exit Sub
```
VBA超基礎

###変数宣言
```vbnet
Dim 変数名 As 型名

Dim i As int
```
###代入の仕方
```vbnet
変数名 = 値

i = 5
moji = "hoge"
```

###デバグ
```vbnet
Debug.Print 値

Debug.Print i & moji
```

###セルの範囲指定
```vbnet
Range ("A1")
Range ("A1,C5")
Range ("A1:C5")
Range ("A1:C5,E1:G5")
Range ("A:C")
Range ("1:5")

Cells(i,j)
```

###セルに代入
```vbnet
Range("A1").Value = 値
```

###オブジェクト型変数
```vbnet
Dim myRange As Range
Set myRange = Range("A1")
```
mbed LPC1768 ペリフェラルのピン指定Tips

I2C通信するコードを書くとき、「コンストラクタの引数ってsda, sclだったっけ？scl, sdaだっけ？」と、よく迷ってしまいます。
そのたびにGoogle検索してHandbookを確認していたのですが、どうやらmbedライブラリでMBED_xxxがdefineされているようなので調べました。

#define定義されているMBED_xxx
代表的なものを抜粋して図示します。
![20160215A.PNG](https://qiita-image-store.s3.amazonaws.com/0/109634/89201261-cdb0-b7c1-20eb-c8a71c00ed5b.png)

#使い方

```cpp
I2C i2c(MBED_I2C0);   // I2C i2c(p28, p27);
```

#define定義してある場所

[mbed / libraries / mbed / targets / hal / TARGET_NXP / TARGET_LPC176X / PeripheralNames.h](https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC176X/PeripheralNames.h)
ResqueSchedulerをActiveJob化してみる


resque使ってActiveJob使うには

```ruby:app/jobs/hoge_job.rb
class HogeJob < ActiveJob::Base
  queue_as :default
  
  def perform(*args)
    # queueな処理
  end
end
```

```ruby:app/controllers/hoge_controller.rb
class HogeController < ApplicationController
  def create
    HogeJob::perform_later("piyopiyo")
  end
end
```

うん、これで完璧。ちょーべんり。っつか、ほとんど変わってない。

よーし、resque-schedulerもActiveJobにするぞっ！
同じようにすればきっといけるよねっ！

```ruby:app/jobs/foo_scheduler_job.rb
class FooSchedulerJob < ActiveJob::Base
  queue_as :default
  
  def perform(*args)
    # queueな処理
  end
end
```

よし書けたぞーってんで、Webページから ``Queue now`` をぽち
・・・・なんかうまくいかへんorz

---

ってことで調べてみたら、resque-scheduler のときは ``perform`` じゃなくて、``self.scheduled`` で受けるっぽげ
ってことで修正

```ruby:app/jobs/foo_scheduler_job.rb
class FooSchdulerJob < ActiveJob::Base
  queue_as :default
  
  def self.scheduled(queue, klass_name, *params)
    self.set(queue: queue).perform_later(*params)
  end
  
  def perform(*args)
    # queueな処理
  end
end
```

あらためて ``Queue now`` をぽち
うん、うまくいった♪

まぁ、scheduledで受けたあとにあらためてenqueueする必要あるのかな？ってのは気になったけど...
EmacsにElixir関係のmodeを追加しようとして色々つまずいた話

# package-install可能なmodeの調査
M-x package-list-package
でElixir関係のmodeをしらべてみると

- elixir-mode
- alchemist
- flymake-elixir
- elixir-mix
- ob-elixir

などが見つかる。
elixir-modeはElixir用のメジャモード。
alchemistはemacs上でコード補完を行ったり、指定したリージョンを実行したりする機能を追加するモード。
flymake-elixirは、名前からしておそらく構文チェッカー。
elixir-mixとob-elixirは, それぞれmixとiexをemacsから呼び出すためのラッパーのようである。

alchemistが多機能で便利らしいので、とりあえずelixir-modeとalchemistをインストールすることにする。

# elixir-mode
M-x package-install [RET] elixir-mode [RET]
あとは, init.elでmodeを読み込むようにする。

``` init.el
(require 'elixir-mode)
```

init.elをリロード後、試しにexファイルを開いてみて
![スクリーンショット 2016-02-15 16.23.04.png](https://qiita-image-store.s3.amazonaws.com/0/111295/7d2b85d0-881b-7afe-b320-afe9971594ae.png)
メジャモードとしてElixirが選択されていればOK.


# alchemistのインストール
[Githubの説明] (https://github.com/tonini/alchemist.el)を参考にインストール
M-x package-install [RET] alchemist [RET]

すると、

```
Package `emacs-24.4' is unavailable
```

と表示されて失敗。どうやら、emacsの24.4以降が必要なようだ。
Cent7のyumでemacsをインストールした場合、24.3がインストールされてしまうので、
[こちらのサイト] (http://akiki2starlet.blog.fc2.com/blog-entry-4.html)を参考に24.4をインストールする。
emacs24.4.1をインストールしたりGitのバージョンを上げたりした(magitを入れ直した際に要求された)、散々寄り道した末、ようやくpackage-install成功。

``` init.el
(require 'alchemist)
```
と設定ファイルに追加して、exファイルを開くと…

![スクリーンショット 2016-02-15 18.22.05.png](https://qiita-image-store.s3.amazonaws.com/0/111295/f77ae023-4381-d921-17c3-e93c63987895.png)
無事導入完了。
alchemistにはphoenix用のモードも含まれていたらしく、alchemist-phoenixというモードも有効になっている。

ついでに、コード補完をauto-completeに変更するac-alchemistも導入することにする。
M-x package-install [RET] ac-alchemist [RET]
とpackage-installして, init.elに以下を追加
``` init.el
(add-hook 'elixir-mode-hook 'ac-alchemist-setup)
```


すると
![スクリーンショット 2016-02-15 18.34.25.png](https://qiita-image-store.s3.amazonaws.com/0/111295/fec16629-278c-776c-9782-0e2d272ebb3b.png)
と無事auto-completeが有効になりました。

# 最後に
今回はpackage-installを使ってインストールを行いましたがEl-getにも対応しているようなので
複数環境でinit.elを使いまわしたい場合は、そちらを使って定義したほうが良いと思われます。


# 参考サイト
EmacsでElixirのコードを書いて、IExで即座に実行 : http://qiita.com/__hage/items/577c0dba7bab9ec4f3a1

Elixir の Emacs でのコード補完を auto-complete  : http://qiita.com/naoya@github/items/8d6856c64a2e3b9fa208

CentOS6.6 に Emacs24.4 : http://akiki2starlet.blog.fc2.com/blog-entry-4.html
通勤 (第2回 ドワンゴからの挑戦状 本選)


http://dwango2016-honsen.contest.atcoder.jp/tasks/dwango2016final_a

- ニコニコ数(2,5,25,52,252,525,2525,...)をNまで列挙する(Aとする)。
- $d(n)=\min^{len(A)}\_{i=1} d(\frac{n}{A_i})+n \bmod A_i$ となる。
- ただしd(n)はメモ化が必要となる。

Rubyでの実装。

- http://dwango2016-honsen.contest.atcoder.jp/submissions/637050

```rb
z=->(n){n<=N&&A<<n&&z[n*10+10/(n%10)]}
d=->(n){M[n]||=A.map{|e|d[n/e]+n%e}.min}
M={0=>0}
N=gets.to_i
A=[]
z[2];z[5]
p d[N]
```

ニコニコ数列挙を再帰で行っている以外はさほど奇をてらった書き方ではないと思う。
ところで、再帰で書けるなら、Haskellで書いてみたい。
実装してみた。

```hs
z a n l = if n>l then a else z (n:a) (n*10+10 `div` (n `mod` 10)) l
d a n = if n==0 then 0 else minimum $ map (\e -> (n `mod` e) + (d a (n `div` e))) a
 
main = do
	n<-readLn
	let a=(z [] 2 n)++(z [] 5 n)
	print $ d a n
```

見ての通り、メモ化できていない。これは、Haskellだと、束縛の破壊的変更ができないからである。

ところで、関数dを再帰する際にaが出てこないようにすることができて、そのためにはこのように変更する(import qualified Control.Monad.Fix)。

```hs
d a = (\f n -> if n==0 then 0 else minimum $ map (\e -> (n `mod` e) + (f (n `div` e))) a) (d a)

d a = Control.Monad.Fix.fix $ \f n -> if n==0 then 0 else minimum $ map (\e -> (n `mod` e) + (f (n `div` e))) a
```

こうなればしめたもので、`Control.Monad.Fix.fix`を @tanakh 氏作のmemofix( http://d.hatena.ne.jp/tanakh/20100411 )に置き換えればメモ化完了である。氏の実装は遅延評価木を使うためIOを必要とせず、今回の目的にもぴったりである。

- http://dwango2016-honsen.contest.atcoder.jp/submissions/637106

```hs
#!/usr/bin/env runghc

-- http://d.hatena.ne.jp/tanakh/20100411
class MemoIx a where
  index :: a -> Integer
  unindex :: Integer -> a

instance MemoIx Integer where
  index n | n>=0 = n*2
          | otherwise = -n*2-1

  unindex n | n`mod`2==0 = n`div`2
            | otherwise = -((n+1)`div`2)

instance (MemoIx a, MemoIx b) => MemoIx (a, b) where
  index (a, b) = l*(l+1)`div`2 + ib
    where
      ia = index a 
      ib = index b
      l  = ia+ib

  unindex ix = (unindex ia, unindex ib)
    where
      l  = floor ((-1 + sqrt (1 + 8 * fromIntegral ix))/2)
      ib = ix - l*(l+1)`div`2
      ia = l-ib

data Tree a = Tree a (Tree a) (Tree a)

findTree :: MemoIx a => Tree b -> a -> b
findTree tree ix = f (bits $ index ix + 1) tree
  where
    f []     (Tree v _ _) = v
    f (0:bs) (Tree _ l _) = f bs l
    f (_:bs) (Tree _ _ r) = f bs r

    bits = tail . reverse . map (`mod`2). takeWhile (>0) . iterate (`div`2)

genTree :: MemoIx a => (a -> b) -> Tree b
genTree f = gen 0 where
  gen ix = Tree (f $ unindex ix) (gen $ ix*2+1) (gen $ ix*2+2)

memofix :: MemoIx a => ((a -> b) -> (a -> b)) -> (a -> b)
memofix f = memof where
  memof = f $ findTree tbl
  tbl = genTree memof

memo :: MemoIx a => (a -> b) -> (a -> b)
memo f = findTree (genTree f)

-- program
z a n l = if n>l then a else z (n:a) (n*10+10 `div` (n `mod` 10)) l
d::[Integer]->Integer->Integer
d a = memofix $ \f n -> if n==0 then 0 else minimum $ map (\e -> (n `mod` e) + (f (n `div` e))) a

main = do
	n<-readLn
	let a=(z [] 2 n)++(z [] 5 n)
	print $ d a n
```

---

- tanakh氏はhaskellwikiの方が良いとのことですが、コードスニペットが見つからなかったので…。
- `d = memo $ \a n -> ...`とは書けませんでした。aもメモ化しようとしてしまうらしく。幸いdから見ればaは定数なのでfixすれば良かった。

- MathJaxのテスト http://web-dou.com/math/view.php
CentOS 6.5 に Ruby と Ruby on Rails をインストール


# 環境
* CentOS 6.5

# Ruby のインストール

まずは rbenv をインストール。
rbenv は Ruby のバージョンを切り替えるためのコマンド。
これを使って Ruby をインストールする。

```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

インストールできたか確認する。

```
$ source ~/.bash_profile
$ rbenv --version
rbenv 1.0.0-18-gad7dfa6

```

次に Ruby をインストール…

```
$ rbenv install --list
  2.3.0-preview1
  2.3.0-preview2
  2.3.0
  2.4.0-dev
  jruby-1.5.6
$ rbenv install 2.3.0
```

ちなみにここはソースのダウンロードからコンパイルまで実行され、
かなり処理時間は長めとなります。そしてその間何も表示されないので、
動いているか不安になると思います。

そういうときは別ウィンドウを開いてログを確認するのが良いです。

```
$ ls -al /tmp | sort -k 7 | grep ruby
```

この中の新しいログファイルを以下のコマンドで出力する。

```
$ tail -f /tmp/ruby-build.20160215080229.27281.log
```

ここで自分はこんなエラーが出てしまったので、ログに従ってlibffi-develをインストールし、
再度rubyのインストールを実行。

```
...
/usr/bin/ld: ./libffi-3.2.1/.libs/libffi.a(raw_api.o): relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
./libffi-3.2.1/.libs/libffi.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [../../.ext/x86_64-linux/fiddle.so] Error 1
make[2]: Leaving directory `/tmp/ruby-build.20160215074913.15120/ruby-2.2.0/ext/fiddle'
make[1]: *** [ext/fiddle/all] Error 2
make[1]: Leaving directory `/tmp/ruby-build.20160215074913.15120/ruby-2.2.0'
make: *** [build-ext] Error 2

$ yum install libffi-devel
$ rbenv install 2.3.0
```

次はこんなエラーが…

```
...
The Ruby openssl extension was not compiled.
The Ruby readline extension was not compiled.
The Ruby zlib extension was not compiled.
...
```

というわけでこれらをインストール。

```
yum install -y openssl-devel readline-devel zlib-devel
```

今度こそ…

```
$ rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /root/.rbenv/versions/2.3.0
```

インストールできているか確認。

```
$ rbenv global 2.3.0
$ rbenv versions
 2.3.0
```

# Ruby on Rails のインストール

```
$ gem update --system
$ gem install --no-ri --no-rdoc rails
$ gem install bundler
$ rbenv rehash
```

バージョンを確認する。

```
$ rails -v
Rails 4.2.5.1
```

# ついでに rspec と serverspec のインストールと実行方法…
## rspec
```
$ gem install rspec
$ rspec --init
$ rspec spec
```

## serverspec

```
$ gem install serverspec rake
$ serverspec-init
$ rake spec
```
Java+Eclipse 開発環境構築 MacOSX編

MacOSXにおいて、Java開発を行う際に必要な環境構築の手順を下記にまとめます。

# 0. OSについて
OSは下記であることが前提です。
・MacOSX 10.8.5以上

# 1. Java開発に必要なもの
・[JDK (Java Development Kit)](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
・[Eclipse(エクリプス)]
(https://eclipse.org/)

# 2. JDKのインストール
## 2-1. JDKのダウンロード
Oracle公式サイトより、JDKの最新版
(2016年2月15日時点では**JDK 8u73**)
をダウンロードします。
http://www.oracle.com/technetwork/java/javase/downloads/index.html

![java1.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/805552ac-ea86-1436-1b41-12df62b3988a.jpeg)

上記画像の赤枠部分をクリックすると、ダウンロードページに移動します。

![java2.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/319b0202-16ed-2222-e137-fd35b3295f2f.jpeg)

「Accept License Agreement」を選択してから、
「jdk-8u73-macosx-x64.dmg」をクリックすると、ダウンロードが開始されます。

## 2-2. ダウンロードしたJDKのインストール
ダウンロードしたdmgファイルを開きます。「続ける」をクリックしてください。

![java3.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/8af11bf2-05c0-4a51-8270-64d68b7f7099.jpeg)

「インストール」をクリックし、インストールを開始してください。

![java4.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/e06faf38-346e-8f3a-2427-e01ac33c3e27.jpeg)

インストールが完了すると下記のように表示されます。
「閉じる」をクリックしてください。

![java5.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/2b1a8a2f-0533-69fa-73ee-b4178f6ec937.jpeg)

## 2-3. JDKがインストールされているかの確認
JDKがインストールされているか、念のため確認します。
Finderの「アプリケーション」→「ユーティリティ」より、
「ターミナル」を起動します。
そして、下記コマンドを入力し、enterキーを押して実行してください。

`$ java -version`

![java6.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/fbe4ab3e-dfc2-509c-61c5-406e24c02a1a.jpeg)

上記画像のように表示されればOKです。
これでJDKのインストールは完了です。

# 3. Eclipseのインストール
## 3-1. Eclipseのダウンロード
Eclipse公式サイトより、Eclipseをダウンロードします。
https://eclipse.org/

![eclipse1.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/b16f96ad-f80a-af78-1a85-e28999f6bc6e.jpeg)

「DOWNLOAD」をクリックすると、下記ページに移動します。

![eclipse2.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/539be461-0273-20b6-a400-93952b21b545.jpeg)

「Mac OS X 64bit」をクリックすると、ダウンロードページに移動するので、「DOWNLOAD」をクリックしてください。「eclipse-inst-mac64.tar.gz」がダウンロードされてきます。

![eclipse3.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/531a7b79-539e-0478-3dce-a7d4db53b138.jpeg)

## 3-2. ダウンロードしたEclipseのインストール
ダウンロードしたファイルをダブルクリックして展開すると、「Eclipse Installer」が出てきますので、開いてください。

![eclipse4.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/4c3b0f26-4520-81bb-2b40-c1da8ba8398b.jpeg)

リストが表示されますので、「Eclipse IDE for Java Developers」を選択してください。

![eclipse5.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/63cc0333-0e5b-39ef-0545-5a3732087a46.jpeg)

「INSTALL」をクリックすると、下記画面が表示されます。「Accept Now」をクリックすると、インストールが開始されます。

![eclipse6.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/c6611fff-23d8-1dfa-7787-7c85ac5ec1b0.jpeg)

インストールが完了すると、下記画面が表示されます。「LAUNCH」をクリックすると、Eclipseが起動します。

![eclipse7.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/75179e7e-d768-2cef-a147-8237441e7ba9.jpeg)

2回目以降に起動する場合、Eclipseが下記の位置に配置されていますので、そちらから実行してください(デフォルトの場合)。
`/Users/ユーザ名/eclipse/java-mars/Eclipse.app`

![eclipse8.jpg](https://qiita-image-store.s3.amazonaws.com/0/93963/838c9142-a351-943b-3e1f-21dcba40cc10.jpeg)

以上でJavaの環境構築は完了です。
LDAP schemaファイルの見方(attribute)

/etc/openldap/schemaのcore.schmaを開いたら、暗号すぎてわけがわからなかったので調査

LDAP attribute構成要素は、
attributeのOID(ObjectID),
Description,
attributeを検索する際の照合規則
attributeのデータ型(OIDで指定。StringとかIntegerとか)
から成る。

```
attributetype 
( 1.1.2.1.1 Name 'myName'
   DESC 'unique name with my company'
   EQUALITY caseIgnoreMatch
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
```
例えば上の例だと、『OID 1.1.2.1.1、myNameっていう名前の、自社固有のAttributeをString型で定義する。照合条件は大文字小文字を無視。』という意味。


#### Attributeの構成要素

|Type|Meaning|
|:--:|:--|
|OID|attributeのObjectID|
|NAME|attributeの名前|
|DESC|DESCription 詳細。|
|照合規則|EQUALITY(完全一致照合)<br>ORDERING(順序性照合規則)<br>SUBSTR(部分一致照合)<br>のいずれか、あるいは複数を規定する|
|SYNTAX|attributeのデータ型をOIDで指定する。<br>例えば文字列型なら、1.3.6.1.4.1.1466.115.121.1.12|

#### 照合規則
EQUALITY(どういった条件で一致とみなすか)
ORDERING(大小検索照合)
SUBSTR(文字列部分一致の照合)
の3つがある。規則によって適用できるattributeは異なる。
当たり前だけど、integerMatchとかなら、INTEGER型のattributeに設定しないと無意味。


####  EQUALITY(同値性）
どんな場合に一致しているとみなすか

|EQUALITY|Meaning|attribute<br>Syntax|
|:--:|:--|:--|
|booleanMatch|True/Falseで一致|Boolean|
|caseIgnoreMatch|大文字小文字を区別しない、スペース無視|Directory<br>String|
|caseExactMatch|大文字小文字区別、スペース無視|Directory<br>String|
|distinguished<br>NameMatch|識別名一致 |Distinguished Name syntax|
|integerMatch|整数一致|Integer|
|octetStringMatch|オクテット文字列一致|OctetString|

#### ORDERING

大小関係や辞書順で照合する際に適用される

|ORDERING|Meaning|attribute<br>Syntax|
|:--:|:--|:--|
|caseIgnore<br>OrderingMatch|大文字小文字区別なし。スペース無視。辞書順で大小比較|Directory<br> String|
|caseExact<br>OrderingMatch|大文字小文字区別有。スペース無視。辞書順で大小比較|Directory<br>String|
|integer<br>OrderingMatch|整数で比較|Integer|
|numericString<br>OrderingMatch|数値で比較|Numeric<br>String|

#### SUBSTR
部分一致照合

|SUBSTR|Meaning|attribute<br>Syntax|
|:--:|:--|:--|
|caseIgnore<br>SubstringsMatch|大文字小文字区別なし。スペース無視|Directory<br>String|
|caseExact<br>SubStringMatch|大文字小文字区別有。スペース無視|Directory<br>String|

</br>

#### SYNTAXの種類
ここはITUとかに規定されているので、全世界共通。最悪1.3.6.1.4.1.1466.115.121.1.5とかで丸ごとググれば、何の型だか分かる。

|SYNTAX OID|属性|説明|
|:--|:--|:--|
|1.3.6.1.4.1.1466.115.121.1.5|Binary||
|1.3.6.1.4.1.1466.115.121.1.8|Certificate||
|1.3.6.1.4.1.1466.115.121.1.9|Certificate List||
|1.3.6.1.4.1.1466.115.121.1.10|Certificate Pair||
|1.3.6.1.4.1.1466.115.121.1.11|Country String||
|1.3.6.1.4.1.1466.115.121.1.12|Distinguished Name(DN)|dnを入れられる。<br>EX:cn=UserA,o=ABC_Corp,dc=com|
|1.3.6.1.4.1.1466.115.121.1.15|Directory String ||
|1.3.6.1.4.1.1466.115.121.1.20|Enhanced Guide||
|1.3.6.1.4.1.1466.115.121.1.21|Fax Tel No||
|1.3.6.1.4.1.1466.115.121.1.22|Fax||
|1.3.6.1.4.1.1466.115.121.1.23|Generalized Time||
|1.3.6.1.4.1.1466.115.121.1.24|Guide||
|1.3.6.1.4.1.1466.115.121.1.25|IA5 String||
|1.3.6.1.4.1.1466.115.121.1.26|Integer||
|1.3.6.1.4.1.1466.115.121.1.27|JPEG||
|1.3.6.1.4.1.1466.115.121.1.28|LDAP Syntax Description||
BrowserSync導入（notタスクランナー）

node.jsを知らない人を対象に書いてます。
さくっと使うためのものなので、タスクランナーには触れていません。
導入環境はmacを対象にしています。


# BrowserSyncとは何か

フロントエンジニア（コーダー）の強い味方です。
やれることは大きく別けて3つです。

**1. htmlやcssなどファイルを保存すると、自動的にブラウザをリロードする**

**2. localhostを立ち上げるので、/style.cssとかスラッシュから始まるパスのものも読み込む　**

**3. 同じネットワーク下にいるデバイスとブラウザ画面を共有する（windows、mac、Android、iphone....etc）**

これだけでも十分すごいですが、
さらに3に関して、BrowserSyncはもっとすごいことをやってくれます。

**・スクロール同期**
　一つのブラウザでスクロールした分、全ての画面で同じ分だけスクロール
**・ページ遷移同期**
　1ページ進んだら、全ての画面で1ページ進む。戻っても同じ
**・フォーム入力共有**
　面倒くさいスマフォでのフォーム挙動確認も、PCからの入力で一発


## BrowserSyncの導入

めちゃくちゃ便利なのでぜひ使っていきましょう。
少し小難しいことをしなければいけませんが、macの場合導入は簡単です。
（windowsの場合は……いつか追記しておきます）

以下macを対象に説明します。


### Node.jsをインストールする

まず[Node.js](https://nodejs.org/en/) をインストールします。
インストーラーが用意されているので、osに対応したものをインストールしてください。

※「Node.jsって何？」という方
　要はjsという名前がついているとおり、JavaScriptです。
　なんかすごいJavaScriptで、BrowserSyncを動かしてくれる基礎、と思っておけば今は構いません。


### BrowserSyncをインストールする

ターミナルを開きます。

コピペで以下を貼り付けて、エンターを押します。

```
npm install -g browser-sync
```

macでエラーが出た場合は以下で試してください。

```
sudo npm install -g browser-sync
```

npm というのは、node package managerの略です。
ターミナルでの操作に慣れていないと違和感があるかもしれませんが、
これを叩くだけで、browsersyncに必要なものがパソコン上に落ちてきます。

-gという単語にも意味はあるのですが、ここでは省きます。
（もしbrowsersyncをタスクランナーで使いたい、というなら必要な知識です）


## BrowserSyncを起動する

ダウンロードは完了したでしょうか。
ターミナルはまだ閉じないでください。

次はターミナル上でBrowserSyncを使いたいローカルディレクトリに移動します。

```
cd C:\Users\～～～～～
```

cd とつけてbrowsersyncを試したいディレクトリのパスを叩くことで、
ターミナル上でディレクトリを移動します。
※cdの後ろには必ず半角スペースを一ついれてください。

このとき移動するディレクトリですが、
ひとまず「このディレクトリから下のファイルをリロードさせたい」という
ディレクトリの存在する場所を指定しておけば間違いありません。

移動した後は、次のコマンドを叩きます。

```
browser-sync start --server --files *
```
しばらく待つと
Access URLs:
というものがターミナル上に現れます。

と、同時にブラウザが立ち上がります。
これで成功です。

```
browser-sync start --server --files *
```
このコマンドの--files *の部分が重要で、ここで監視する対象を選べます。
「\*」は全てを意味するので、cdで移動したディレクトリにあるもの全てを監視しています。



ただ全てのファイルを監視させると重いので、基本的には以下のようにしておくのが無難かもしれません。

```
browser-sync start --server --files "**/*/*.html, **/*/*.css, **/*/*.js"
```
「なんか*増えてない？」

```
**/*/*.拡張子　
```
とすると、たとえ何階層下のファイルだったとしても監視してね。
という意味になります。


## 他のデバイスで画面同期しているかを確認する

他のデバイスでも画面を確認してみましょう。
ターミナルに出ているAccess URLs:というのが、
他のデバイスからアクセスするためのurlになります。

local: http://～～～
External: http://192.168.～～ 　←このアドレスを他のデバイスで見る
\-------------------------------
local: http://～～～
External: http://192.168.～～

二つアドレスが出ていると思いますが、上部のExternalのアドレスを閲覧してください。
ちなみに、下部は設定画面のurlです。
（スクロール同期するとかしないとか、そういうの）

※ファイアウォールの関係で、同じネットワークにいても上手く取得できないときもあります。


## 初回インストール後の使用について
インストールは完了したので、以降は　BrowserSyncを起動する　の項だけで
いつでもBrowserSyncを使えます。
【注意】Apple Worldwide Developer Relations中間証明書の期限切れ

2/15日朝にAppleからもらったApple Worldwide Developer Relationsの中間証明書が期限切れになりました。

これに伴って以下の問題をおこなる場合があります。
・itunes connectへのアップロードやValidateで"Your account already has a valid iOS distribution certificate"のエラーが出ます。

配布用証明書はイポートしていますが、ローカルに見つかりませんというようなメッセージが表示されます。
KeyChainAccessで確認すると配布用証明書がすべて”この証明書の発行者が無効です。”のエラーが出てます。

解決方法→https://forums.developer.apple.com/message/114003
↑のリンクの最後に林檎マークついている人が解決方法を書いてあります。
ざっくりまとめると、
1.新しいAppleのWWDR中間証明書( https://developer.apple.com/certificationauthority/AppleWWDRCA.cer )をダウンロードしてKeyChainAccessに入れます
2.KeyChainAccessから期限切れの古い中間証明書を削除します

審査出し予定日でこういう問題が起きるのは結構ショックでした・・・
[Rails] 簡単な検索機能を実装する（関連テーブルの検索、and検索も可）

#引用
というかこちらを書き直して、自分の経験を元にコメントを記載したものです。
[EC-CUBEな日々 RUBY ON RAILSで複数のモデルが絡む検索画面の作り方](http://www.prime-architect.co.jp/myblog/ruby-on-rails-1566)

#実行環境
- Ruby 2.2.2
- Rails 4.2.3

#やりたいこと
- views/parents/index に簡単な検索機能を実装する
- 複数の検索条件をandでつなげる
- 関連テーブルについても検索を行う

比較的簡単な実装だと思います。
簡単な検索をつくるだけなら負荷はransackと比べると小さいと思います（負荷に関するテストはしていませんがransack自体が重たくなりがちなので）。
orでつなげる検索はこのやり方では出来ませんが、ransackを利用するととても簡単です。

##model
こんな関係を用意します。
親 has_many 子

親も子も名前（:name）を持ちます。

```親をつくる.rb
rails generate scaffold parent name:string
```

```子をつくる.rb
rails generate scaffold child name:string parent:references
```


```parent.rb
class Parent < ActiveRecord::Base
  has_many :childs
end
```

```child.rb
class Child < ActiveRecord::Base
  belongs_to :parent
end
```

#コード
##controller

- `def index`について
  `@search_form.search`は初期値だと`Member(null)`になるので、初期値の場合のみ上書きします。
（もっとうまい書き方があれば教えてください）

- `class ParentSearchForm`について
親に検索に一致する複数の子があった場合、親が複数行表示されてしまうので、子の検索には`.uniq`をつけて重複を防ぎます。
（人名だとなかなかありえませんが、例えば「子の年齢がxx歳」や「子の性別がxx」検索する場合は一人の親が検索に一致する複数の子を持つ可能性はあるかと思います）

```parents_controller.rb
def index
  @search_form = ParentSearchForm.new(params[:search])
  @parents = @search_form.search
  @parents = Parent.all if @parents == Parent
end

class ParentSearchForm
  include ActiveModel::Model
 
  attr_accessor  :name, :child_name
 
  def search
    rel = Parent
    rel = rel.where( name: name ) if name.present?
    rel = rel.joins( :child ).where( "childs.name" => child_name ).uniq if child_name.present?

    rel
  end
end
```

##view
先ほど`ParentSearchForm`で用意したattributeを設定します

```views/parents/index.html.erb
<%= form_for @search_form, as: 'search', url: :parents, html: {method: :get} do |f| %>

<%= f.label :name, "親の名前" %>
<%= f.text_field :name %><br>
<%= f.label :child_name, "子の名前" %>
<%= f.text_field :child_name %>

<%= f.submit "検索" %>
<% end %>
```

この検索フォームで`@parents`に検索結果が返ってくるので`<% @parents.each do |parent| %>`あたりを使って一覧を表示してやれば良いです。
xcodeのカラーピッカーが変な色を拾ってくるぽいので、正しい色を指定する方法？


WebサイトのカラーなどをIBで設定したいときに、Xcodeのカラーピッカーを使用して色を指定すると、期待していた色とずれるみたいです。

例）QiitaのテーマカラーをXcodeのカラーピッカーで取得した色とweb背景色の比較
![スクリーンショット 2016-02-15 17.16.58.png](https://qiita-image-store.s3.amazonaws.com/0/68288/6a5b7d6c-cdc0-db8b-f989-98a5cffe864a.png)


とりあえず解決したので、自分なりに色がずれないようにする方法のメモです。

カラーピッカーはmac標準の***Digital Color Maker***を使用します。

# 手順
## Digital Color Makeを起動する
Launchpad -> その他の中に入っています

## **ネイティブの値を表示**に設定する
※デフォルトで、選択されていると思います

![スクリーンショット 2016-02-15 16.43.50.png](https://qiita-image-store.s3.amazonaws.com/0/68288/95d4b34a-ea4f-841e-c723-19fc9aea5aac.png)

## 画面上で拾いたい色をピッカーで取得する

今回はQiitaのテーマカラー？にしました。

![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/68288/d71c9bfb-c724-1398-51da-113a7ccae057.png)

## 取得したい値を設定する

### コードの場合

```swift

view.backgroundColor = UIColor(red:121/255, green:183/255, blue:74/255, alpha:1)

```

### IBの場合

* カラー設定画面を開く
* RGB Slidersを選択する
* プロファイルの設定が***Generic RGB***になっていることを確認する

![スクリーンショット 2016-02-15 16.31.42.png](https://qiita-image-store.s3.amazonaws.com/0/68288/8b1a2002-9c43-4872-7690-171ee4ec22dd.png)

* 取得したRBGを入力する

![スクリーンショット 2016-02-15 16.30.29.png](https://qiita-image-store.s3.amazonaws.com/0/68288/0b0dec36-8962-69d6-0470-72778790e0b8.png)

# 確認

わかりにくいですが、
左側がXcodeのピッカーを使用して取得した色、
右側がDigital Color Makeを使用して取得した色となります。

![スクリーンショット 2016-02-15 17.12.35.png](https://qiita-image-store.s3.amazonaws.com/0/68288/94203c65-93d4-a2bc-40dc-b2c5447d8fb2.png)

デザイン関係についてはさっぱりなのですが、ピッカーと端末のディスプレイプロファイルの設定がずれていると、取得できるRGB値が異なってしまう模様です。

他のカラーピッカーでもディスプレイプロファイルが変更できるものであれば、プロファイルを合わせることで値が取得できるはずなので、試してみてください。
Cocoaの機能を使ってWi-Fiに接続するAppleScript



* CoreWLANフレームワークを使ってWi-Fiに接続するサンプル
* `listWiFi`: Wi-FiネットワークをスキャンしてSSIDのリストを返す
* `connectWiFi`: SSIDとパスワードを使ってWi-Fiに接続
* `disconnectWiFi`: 接続中のWi-Fiを切断


```AppleScript:connectToWifi.scpt
use scripting additions
use framework "CoreWLAN"
use framework "Foundation"

--SSID選択
set chooseResult to choose from list my listWiFi()
if chooseResult = false then
	error number -128
end if
set networkSSID to item 1 of chooseResult

--パスワード入力
set {text returned:pass} to display dialog "Password of network " & quoted form of networkSSID & ":" default answer "" buttons {"Cancel", "Connect"} cancel button 1 default button 2 with hidden answer

--Wi-Fiに接続
my connectWifi(networkSSID, pass)

--Wi-Fiの接続を切る
my disconnectWiFi()

on listWiFi()
	--require framework: CoreWLAN, Foundation
	set currentInterface to current application's CWInterface's interface()
	currentInterface's setPower:true |error|:(missing value)
	set networkSet to currentInterface's scanForNetworksWithName:(missing value) |error|:(missing value)
	return ((networkSet's allObjects()'s valueForKeyPath:"ssid.@distinctUnionOfObjects.self")'s sortedArrayUsingSelector:"localizedCaseInsensitiveCompare:") as list
end listWiFi

on connectWifi(networkSSID as text, pass as text)
	--require framework: CoreWLAN
	set currentInterface to current application's CWInterface's interface()
	currentInterface's setPower:true |error|:(missing value)
	set network to (currentInterface's scanForNetworksWithName:networkSSID |error|:(missing value))'s anyObject()
	currentInterface's associateToNetwork:network |password|:pass |error|:(missing value)
end connectWifi

on disconnectWiFi()
	--require framework: CoreWLAN
	current application's CWInterface's interface()'s disassociate()
end disconnectWiFi
```


## 更新履歴

* 2016-02-13: CoreWLANフレームワークを使ってWi-Fiに接続する`connectWiFi`ハンドラを作成
* 2016-02-15: `listWiFi`ハンドラと`disconnectWiFi`ハンドラを作成
Xcode code signing error ( No code signing identities found: No valid signing identities )のFix方法

# 現象

Xcodeにて

実機にアプリを転送しようとRun

<img width="456" alt="error1.png" src="https://qiita-image-store.s3.amazonaws.com/0/32215/0b6efeb0-a1fc-cd1f-190f-03639bfa22db.png">

FixIssueを試みたけど
<img width="431" alt="error2.png" src="https://qiita-image-store.s3.amazonaws.com/0/32215/799bc0a1-5bbb-c8dd-c441-fdc0dd746ac6.png">


# 原因

すでに他の人がビルドしているものを違うAppleIDでビルドしようとしたため。
同一のチームIDを使ってビルドすることで上記のような現象は起きません

# その場での解決方法

TARGETS->General->Identify

BundleIdentifierの名称を変更する。
TeamをNoneとする。

ビルド。

<img width="891" alt="target.png" src="https://qiita-image-store.s3.amazonaws.com/0/32215/62b60a26-329a-1951-14db-7d150e25568a.png">


# Thanks!

 ios - An App ID with Identifier '' is not available. Please enter a different string - Stack Overflow 

http://stackoverflow.com/questions/20565565/an-app-id-with-identifier-is-not-available-please-enter-a-different-string
Spacemacs の設定 (初級者むけ)

# 経緯
Windowsでのemacs設定が面倒になった．用途は主にpythonスクリプトやマークダウン，MATLABスクリプトの編集．emacs-jediやらMATLAB-modeやらを使うために設定した．Emacs習熟度は初心者を抜けて初級者ぐらいだと自負．

# 環境
 - Windows 10 Pro
 - NTEmacs
 - git (sourcetreeの奴)
 - Anaconda(python)

# インストール
[本家レポジトリ]()https://github.com/syl20bnr/spacemacs) を読めば詰まることはないとおもう．

NTEmcsをインストールすると

    C:\Users\hoge\AppData\Roaming\

に.emacs.dが出来たと思うのでそのディレクトリの代わりにspacemacsのレポジトリをcloneしてEmacsを起動するだけ．
特に詰まるところはなかった．vimmerか?vimmer用に設定しとこか？と聞かれるとこにNOと答えた事は覚えている．

#設定
下記の参考記事を読んだが "Configuration Layer" なるものがよく理解出来なかったので全て .spcemacs に書いた(以前も設定は全てinit.elに書いてた)．

    C:\Users\rysk\AppData\Roaming\.spacemacs
    
なるファイルに色々書くだけでもちゃんと想定の動作をした．

## パッケージ関連
.spacemacsを読むと，

```el
   dotspacemacs-additional-packages
   '(
     )

```

なる行がある．MELPAなどにあるパッケージなら，

```el
   dotspacemacs-additional-packages
   '(
     helm-ls-git
     epc
     jedi
     jedi-core
     rotate
     matlab-mode
     )
```

と書いて M-x sync-configuration-layer を実行すればインストールとロードが自動的に行われる．
あとspacemacsにはhelm他色々なパッケージがあらかじめ入っているので，気に入らないパッケージは下記のような部分にいれとけば多分loadされない．

```el
   ;; If non-nil spacemacs will delete any orphan packages, i.e. packages that
   dotspacemacs-excluded-packages '()
```

## 外見
フォントしか弄ってない

```el
    dotspacemacs-default-font '("Ricty"
                               :size 19
                               :weight normal
                               :width normal
                               :powerline-scale 1.3)
```

## その他
通常のinit.elに書くようなことは大体

```el
(defun dotspacemacs/user-config ()
  "Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration. You are free to put any user code."

  ;; helm
  (global-set-key (kbd "C-;") 'helm-for-files)
  (global-set-key (kbd "C-x SPC") 'helm-M-x)
  (global-set-key (kbd "M-x") 'helm-M-x)
  (global-set-key (kbd "C-]") 'helm-ls-git-ls)
  (global-set-key (kbd "C-z") 'helm-show-kill-ring)

  ;; windmove
  (global-set-key (kbd "C-x w w") 'windmove-up)
  (global-set-key (kbd "C-x w s") 'windmove-down)
  (global-set-key (kbd "C-x w d") 'windmove-right)
  (global-set-key (kbd "C-x w a") 'windmove-left)
  (global-set-key (kbd "M-[") 'rotate-layout)

  ;;jedi
  (add-hook 'python-mode-hook 'jedi:setup)

  ;; 

  )
```
こんな感じで書いたら動いた．

# 感想
 - helm とか大抵の定番が最初から入ってて楽
 - 見た目もなかなか
 - windowsでも問題なし
 - そんなに重くもない
 - (Vimmerは使わないんじゃないかな…)

# 参考記事
 - http://qiita.com/ryosukes/items/d0ec5094a9d3d636f7bb
 - http://qiita.com/p-baleine@github/items/4ef3ccf84b4e8a7fb419
CakePHPでSQLログを出したいマン

CakePHP1.3でSQLログを出したいマン(☝ ՞ਊ ՞)

# viewにSQLログを出す
```
<?php echo $this->element('sql_dump'); ?>
```

viewに書くとSQLログを書いてくれます。

# SQLの数を増やす
SQLが投げられまくっているのに200件までしか表示されない場合です。

```
vi

cake/libs/model/datasources/datasource.php


/**
 * Maximum number of items in query log
 *
 * This is to prevent query log taking over too much memory.
 *
 * @var int Maximum number of queries in the queries log.
 * @access protected
 */
    var $_queriesLogMax = 200;
```
`$_queriesLogMax`を200から増やすとその数だけSQLを出力してくれます。
async.jsを使って排他制御をしてみた

# 背景
　nodejsのシステムで、httpリクエストがあってからDB更新するまで、排他制御をする必要が出てきました。

# 方法概要
　いろいろとネット上を調べてみた結果、async.jsのQueueでconcurrencyを１、pause(),resume()を使えばできるのでは？と考えました。
　https://github.com/caolan/async#queue

# 実装したコード
```
var http = require('http');
var async = require('async');

var server = http.createServer();

var q = async.queue(function (task, done) {
    console.log("task:"+task.name);
    done();
}, 1);　// 同時実行数を1に制限

var index=0;
server.on('request', function (request, response) {
    response.writeHead(200);
    var taskname='task_'+index;
    console.log('task push!: ' + taskname);
    index++;
    q.push({
        name: taskname,
    }, function (err) {
        q.pause(); // queueのタスク実行を一時停止する
        setTimeout(function(){
            console.log({message: taskname });
            // 実際のDBデータ取得・更新処理など。コールバック処理でq.resume()を実行
            q.resume(); // queueのタスクを再開する
            response.end();
        },500);
    });
}).listen(8080);
``` 

# 実行
　[loadtest](https://www.npmjs.com/package/loadtest)を使って実行してみます。
```
$ loadtest -n 1 -c 10 http://localhost:8080
```

結果です。

```
$ node index.js
task push!: task_0
task:task_0
task push!: task_1
task push!: task_2
task push!: task_3
task push!: task_4
task push!: task_5
task push!: task_6
task push!: task_7
task push!: task_8
task push!: task_9
{ message: 'task_0' }
task:task_1
{ message: 'task_1' }
task:task_2
{ message: 'task_2' }
task:task_3
{ message: 'task_3' }
task:task_4
{ message: 'task_4' }
task:task_5
{ message: 'task_5' }
task:task_6
{ message: 'task_6' }
task:task_7
{ message: 'task_7' }
task:task_8
{ message: 'task_8' }
task:task_9
{ message: 'task_9' }

```

# まとめ
ひとまず排他的な動作にはなったのですが、この方法で良いのかもう少し勉強してみます。
当然なのですが、エラーなどでresume()を忘れると、ずっと止まります。
NodeJS初心者なので、「こうしたほうがよい」などありましたらご教授ください。
MacVimが起動しないので無理やり対処

いつからか、（多分El Capitanにアップグレード以降）MacVimが起動しなくなった。

起動しない、というか、**起動はしてるがウィンドウが表示されない**、という状況。

ターミナルから `/Applications/MacVim.app/Contents/MacOS/mvim` を直接実行すれば起動するので、オートメーションでその場を凌いでみた。

## Automatorでアプリケーション作成

Automatorでシェルスクリプトをアプリケーションとして保存します

### 手順
![ 2016-02-15 16.48.42.png](https://qiita-image-store.s3.amazonaws.com/0/27532/ccbfc589-2272-21b3-89ee-e731e5c1a9ec.png)

1. Automatorを開き「新規書類を開く」
2. 「アプリケーション」を選択し「アクション」の中の「シェルスクリプトを実行」を選択
3. シェルに `/bin/bash`を選択し、内容を `/Applications/MacVim.app/Contents/MacOS/mvim` にする
4. `Applications` フォルダに `mvim.app` として保存


これで作成した`mvim.app`をダブルクリック、もしくはSpotlightから`mvim`で起動出来るようになった。取り急ぎ以上。

対処法わかる方、いらっしゃいましたらコメント下さいましm(_ _)m
AdHoc配信しようと思ったら、missing ios distribution signing identity for~ というエラーが出た。


## 背景
iOSアプリのプロジェクトをAdHoc配信するためにipaファイルとしてexportしようとした時のお話。
無事にArchiveが済んでいざexport!!と思った時に以下のようなエラーが書かれたアラートが出ました。
```missing ios distribution signing identity for~
```

昨日まで大丈夫だったのにおかしいな〜と思ってググったところ、Appleさんがこんなこと言ってるよ〜って書いてある[記事](http://stackoverflow.com/questions/32821189/xcode-7-error-missing-ios-distribution-signing-identity-for)
を見つけました。

``` FromApple
Thanks for bringing this to the attention of the community and apologies for the issues you’ve been having. This issue stems from having a copy of the expired WWDR Intermediate certificate in both your System and Login keychains. To resolve the issue, you should first download and install the new WWDR intermediate certificate (by double-clicking on the file). Next, in the Keychain Access application, select the System keychain. Make sure to select “Show Expired Certificates” in the View menu and then delete the expired version of the Apple Worldwide Developer Relations Certificate Authority Intermediate certificate (expired on February 14, 2016). Your certificates should now appear as valid in Keychain Access and be available to Xcode for submissions to the App Store.
```
バレンタインに期限が切れちゃったんですね、なるほど。そりゃ昨日まで大丈夫で今日出来なくなるはずだ。(この記事を書いてるのが2/15)

## 解決策
1. [AppleWWDRCA.cer](https://developer.apple.com/certificationauthority/AppleWWDRCA.cer)をダウンロードして、それをダブルクリックしてKeychain Accessに登録。
2. Keychain Accessに期限切れのAppleWWDRCA.cerがあるはずなのでそれを削除。
3. 私はこれで無事にexport出来るようになりました。めでたしめでたし。
Atomでcmd-wを連打したときウィンドウまで閉じてしまわないようにする

## 設定画面を開く
`cmd-,` で設定画面を開く

## Close Empty Windowsのチェックを外す

![close-empty-windows.png](https://qiita-image-store.s3.amazonaws.com/0/109/da6b2d16-50c9-ffaf-d6d9-628fa56b99ee.png)
Rubyの小技 hash編

Rubyのhashの知ってたら少し得するかも、な小技を紹介します。

## 1, ハッシュの生成
基本は、こう

```rb
h = {a: 10, b: 20}
```

こんなのもできる

```rb
Hash(a: 10, b: 20)
```

こんなのもある　配列受けとる

```rb
Hash[:a, 10, :b, 20]
```
## 2, each_key, each_value

ハッシュのkeyだけを取得するために、Hash#keys
valueだけを取得するために、Hash#values
があります。

こんなことを昔の僕はこんなことをよくやっていました。

```rb
# hashのkey, valueのみをそれぞれ取得してeachでループさせる
h = {a: 10, b: 20, c: 30}
h.keys.each do |key|
  p key
end
#=> a
#=> b
#=> c

h.values.each do |value|
  p value
end
#=> 10
#=> 20
#=> 30
```

しかし、これを一回でできるメソッドがありました。
それが、**each_key**と**each_value**

```
h = {a: 10, b: 20, c: 30}
h.each_key do |key|
  p key
end
#=> a
#=> b
#=> c

h.each_value do |value|
  p value
end
#=> 10
#=> 20
#=> 30

```


## 3, invert
利用シーンがなかなかなさそうな**invert**
こんなことができる

```rb
h = {a: 10, b: 20}
p h.invert

#=> {10 => :a, 20 => :b}
```

keyとvalueを反対にして返す。


## 4, values_at
引数のキーの値をまとめて取り出す。

```
h = {a: 10, b: 20, c: 30}
one, two = hash.values_at(:a, :b)

p one, two
#=> 10
#=> 20
```



こちらもどんどん見付け次第更新していきますー
こんなのあるぜっていう情報も、どんどんよろしくお願いしますmm
yumが動かない。file too shortとepelエラー対応 [CentOS6/Linux]

#yum がいつのまにか動かなくなってました...

先日、動いて当たり前だと思っていたyum様が、知らぬ間に動かなくなっており
かなり動揺いたしました。

放置の方向に...(*´；ェ；`)

と思いきや、やっぱりそんなわけにもいかず
本日直すことになりましたので、記録。(｡´Д⊂


# [エラーその１] file too short対応
```
There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:

/lib64/librpm.so.3: file too short
```

...Python...エ？

と、(結構)泣きそうになりましたが、そうではなくてyumってPythonで書かれてるんですね！
お勉強になります(*´∀`*)

とりあえず、このエラーが出てるファイルを辿って何者か確認。

`# ls -l /usr/lib64/libelf.so.1`

シンボリックリンクが貼られていたので、シンボリックリンク先も確認。
・・・0バイト。空ですな。
(ここでうっかりシンボリックリンクとハードリンクとエイリアスとショートカットの違いに苦悩。)

ここでようやくわかって、シンボリックリンクを一度削除。
`# rm /usr/lib64/libelf.so.1`

からの～、空になっていない似た名前のファイル(私の場合libelf-1.152.so)に貼り直し。

・・・

動いたー！ :tada: 



#[エラーその２] epel対応

動いたのもつかの間、なんだか**updateがうまくできない**。。。

これは即解決させていただきました。〇┓ペコ

`# vi etc/yum.repos.d/epel.repo`

で

```
\#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
↓
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
\#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
```

#動くようになったところで、ごきげんなうちにyumのお手入れ♡

`# yum clean all`
おお♡　動く！

`# yum -y update`
おお♡

`# yum --security update`
おおお♡動いてる！　←都度感激(笑)


#まとめ
動いて当たり前だと思っていたものが、動かなくなっても
怖がらないで、がんばりましょう(笑)


参照先が多くない中、助けていただきました♪　[ [sashの日記様](http://cordea.hatenadiary.com/entry/2014/04/17/212221) ] [ [C_6B4A2Bの日記様](http://d.hatena.ne.jp/C_6B4A2B/20130427/1367073209) ]
ありがとうございます！
python上でunixコマンドを実行する


subprocessモジュールを用いてコマンドを実行する。
（※ subprocess.run()関数について追記：2/15 23:30 ）

## コマンドを実行する
#### `subprocess.call(cmd)`

基本的な使い方。
引数として与えられたコマンドをただ実行する。
コマンド実行が成功したら `0` が返る。

#### <i class="fa fa-code"></i> サンプル
```py
import subprocess
res = subprocess.call('ls')
#=> lsコマンドの結果
print res
#=> コマンドが成功していれば 0
```

## コマンドを実行する（失敗時、CalledProcessErrorをあげる）
#### `subprocess.check_call(cmd)`

引数として与えられたコマンドを実行する。
コマンド実行が成功したら `0` が返る。
失敗時、CalledProcessError 例外をあげてくれるので、`try-except`で処理できる。

#### <i class="fa fa-code"></i> サンプル
```py
import subprocess
try:
    res = subprocess.check_call('dummy')
except:
    print "Error."
#=> Error. 
```
実行できないコマンドが与えられた場合、例外処理が行える。

## コマンドを実行し、その出力を取得する
#### `subprocess.check_output(cmd)`

引数として与えられたコマンドを実行する。
コマンド実行が成功したら、その出力を返す。
check_callと同様に、失敗時、CalledProcessError 例外をあげてくれるので、`try-except`で処理できる。

#### <i class="fa fa-code"></i> サンプル
```py
import subprocess
try:
    res = subprocess.check_output('ls')
except:
    print "Error."
print res
#=> lsの実行結果 
```

---
ここまでで、簡単なコマンドを実行することが可能。
最後に、引数を伴うコマンドの実行について。

## コマンドに引数を加えて実行する
#### `subprocess.call(*args)`

check_call, check_outputについても同様。
配列によって、コマンドや引数を指定する。

#### <i class="fa fa-code"></i> サンプル
```py

import subprocess
args = ['ls', '-l', '-a']
try:
    res = subprocess.check_call(args)
except:
    print "Error."
#=> "ls -l -a" の実行結果
```

## `subprocess.run(cmd)`
（ @MiyakoDevさんからいただいたコメントを反映 ）
Python3.5より、上記3つのコマンドをひとまとめにした [subprocess.run()](http://docs.python.jp/3/library/subprocess.html#subprocess.run) 関数が追加された。

#### <i class="fa fa-code"></i> サンプル
```py3
import subprocess
import sys

res = subprocess.run(["ls", "-l", "-a"], stdout=subprocess.PIPE)
sys.stdout.buffer.write(res.stdout)
```
出力を得るサンプルコード。
出力は**バイト列**として返ってくる。

## <i class="fa fa-link"></i> 参考
osモジュールを使った `os.system` やcommandsモジュールを使った ` commands.getstatusoutput` がありましたが、現在は推奨されていないようです。



<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
kintone 英語設定でのアプリ作成時の覚書

#kintone 英語設定でのアプリ作成時の覚書
言語設定を行うとフィールドコードのデフォルト値が異なるので、API で項目を扱う場合に注意が必要。
複数言語対応アプリの場合は、英語設定でアプリ作成時を行ったほうがいいかもしれません。
##レコード番号や、作成者など
画面に設定しないレコード番号や、作成者などのフィールドコードも英語名の設定値になる。
- レコード番号 : Record_number
- 作成者 : Created_by
- 作成日 : Created_datetime
- 更新者 : Updated_by
- 更新日 : Updated_datetime

レコード番号は、2016/2/14の定期更新で「\$id」がサポートされたので今後は「\$id」を使ったほうがよさそうです。
[2016-02-14-の定期メンテナンスにおけるkintone-API更新情報](https://cybozudev.zendesk.com/hc/ja/articles/207161996-2016-02-14-%E3%81%AE%E5%AE%9A%E6%9C%9F%E3%83%A1%E3%83%B3%E3%83%86%E3%83%8A%E3%83%B3%E3%82%B9%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bkintone-API%E6%9B%B4%E6%96%B0%E6%83%85%E5%A0%B1)

![formedit.png](https://qiita-image-store.s3.amazonaws.com/0/100572/329510b5-f980-cf62-5e13-111053630365.png)
1ページに複数のGoogle mapを表示

```lang:HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>1ページに複数のGoogle mapを表示</title>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
</head>

<body>

<div id="map_canvas_01"></div>
<div id="map_canvas_02"></div>
<div id="map_canvas_03"></div>


  <script type="text/javascript">
  (function(){
    var latlng = new google.maps.LatLng(34.687298, 135.526226);
    var myOptions = {
        zoom: 15
      , center: latlng
      , mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map_01 = new google.maps.Map(
        document.getElementById("map_canvas_01")
      , myOptions
    );
	var marker = new google.maps.Marker({ 
		position: latlng, 
		map: map_01
	});
	

    var latlng = new google.maps.LatLng(34.651312, 135.510388);
    var myOptions = {
        zoom: 15
      , center: latlng
      , mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map_02 = new google.maps.Map(
        document.getElementById("map_canvas_02")
      , myOptions
    );
	var marker = new google.maps.Marker({ 
		position: latlng, 
		map: map_02
	});
	
	
    var latlng = new google.maps.LatLng(34.809425, 135.532477);
    var myOptions = {
        zoom: 12
      , center: latlng
      , mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map_03 = new google.maps.Map(
        document.getElementById("map_canvas_03")
      , myOptions
    );
	var marker = new google.maps.Marker({ 
		position: latlng, 
		map: map_03
	});

  }());
  </script>

</body>
</html>
```
```lang:CSS
#map_canvas_01,
#map_canvas_02,
#map_canvas_03 {
	width:500px;
	min-height: 250px;
}
```

### 参考にさせていただいたサイト
[http://temping-amagramer.blogspot.jp/2010/09/google-map-v3.html]
private blockchainのmijinのトランザクション解説

# はじめに
mijinクラウドチェーンでのトランザクションのPOSTの仕方をまとめてみました。
mijinのAPIは、nemのAPIと99%以上互換性があるようなので、現状はnemのAPIドキュメントを見て理解を深めている状態ですが、現状詳細な情報が少ないこともあり、まずは私が理解したことをアウトプットしていこうかと思います。
なので、間違いや記載不足のご指摘は是非に！

以下の記事は、2016/02/15時点での情報ですので、それ以降のアップデートで変更があるかもしれません。ご注意ください。
（少なくとも、製品版には複数の機能が追加される予定になっています。）

# mijinとは
BitCoinのように誰もが参加できる「Public」なBlockChainではなく、指定したノードだけが参加できる「Private」なBlockChainを構築できるプラットフォーム。詳しくは、[公式サイト](http://mijin.io/ja/about-mijin)へ。

現在は、各社個別の環境が提供されているクローズドβと共通の環境で提供されていて、一般参加が可能なオープンβが行われています。オープンβへの参加は、以下のフォームより登録できるようです。

[mijinクラウドチェーン – オープンβプログラム登録フォーム](http://mijin.io/ja/mijin-cloud-chain-beta-test/mijin-cloud-chain-sakura-open-beta)

# トランザクションAPIの種類
送金やnamespace、mosaicの作成、マルチシグ化など、色々なことがAPI経由で可能ですが、用意されているAPIは、以下の２種類です。
エンドポイントではなく、内部のTransaction typeで、実行したい処理を指定します。

## /transaction/prepare-announce
prepare-announceは、<b>ローカルのNISに対してのみリクエストが可能</b>です。リモートのNISにリクエストしても401エラーが帰ってきます。
ローカルのNISへのPOSTなので、<b>電子署名が不要</b>です。NISがシリアライズして署名してannounceしてくれます。（試せてないので多分ですが）

## /transaction/announce
announceは、リモートへのNISに対して使用するAPIです。現状では、mijinの各NISにはSSH等でログイン出来ないため、基本的にトランザクションはannounceを使用することになります。

# トランザクションAPIのバージョン
現状は、V1、V2の２種類があります。基本的にV1の拡張がV2となっているようです。
例えば、Transfer transactionでは、mosaicの送金を行う場合はV2を使用する必要があります。
ちょいちょいV1とV2が混じっていたりと混乱しやすいところでもあり、トランザクション共通部分に指定するバージョンでもあるので、どのバージョンのAPIを叩いているのか意識しておきましょう。（エンドポイントは同じなので。。）

# トランザクションのPOST手順
それでは、/transaction/announce/を使用して、トランザクションをPOSTするための手順を見ていきましょう。

* Transaction Typeに応じたJSONを作成
* JSONをserialize(serialize化した文字列 : data)
* serialize化した文字列の電子署名を作成(電子署名 : signature)
* dataとsignatureのJSONをPOST

図で書くと、↓な感じです。
![transaction.png](https://qiita-image-store.s3.amazonaws.com/0/931/ac43ef7a-aaab-7a3e-a5c9-4acde68c29f5.png)

# serializeの詳細
Transactionタイプ毎に、serializeのフォーマットが決まっています。
nemのAPIドキュメントでいうと[7.9 Creating a signed transaction](http://bob.nem.ninja/docs/#creating-a-signed-transaction)の部分ですが、正直見づらいしアレなので図にしてみました。

Transfer Transactionを例として、記載しています。
![transfer_transaction.png](https://qiita-image-store.s3.amazonaws.com/0/931/c84c12e0-af7b-b32d-5f99-11c912dbc0af.png)

Serializeで生成される文字列は、トランザクション共通部分とトランザクションタイプに応じた個別部分に別れます。共通部分は、全てのトランザクションタイプで共通です。正直個別部分の実装はメンドクサイですね。。

この部分の詳細は、lightwalletのservices/Transactions.jsを見てみるとより理解が深まると思います。
（もう少しコメント振ってあると、なお良いんですけどね。。）

# まとめ
ざっくりmijinクラウドチェーン上でのトランザクションのPOSTの仕方について、解説しました。
BitCoinの実装部分に馴染みがない人にとっては、少々とっつきづらいものだと思うので、少しでも理解の助けになればと思います。
個人的な理解と少々のテストを元に記載しているので、間違い、記載漏れ等含まれているかと思います。
ご指摘や修正リクエスト等頂けますと、私の理解も深まるのでありがたいです。
git submodule を使った時のmemo

経緯
-------------------------

gitに１つのプロジェクトを２つの別々のプロジェクトとして登録することになった。
しかしリポジトリをビルドするときには２つのリポジトリを１つのプロジェクトとして両方の資材が必要なので、gitのsubmoduleという機能を使ってみた。

使ってみた
-------------------------

まずはそれぞれをリポジトリに登録。（gitbucket使用）

* http://localhost:8080/git/hogehoge/repo1.git
* http://localhost:8080/git/hogehoge/repo2.git

そしてrepo1の中で

```
$ git submodule add http://localhost:8080/git/hogehoge/repo2.git repo2
```

これでrepo2はrepo1の中でsubmoduleとして扱ってくれる。

想像と違った
-------------------------

使ってみてちょっと違うな、と思った。
まず、submodule登録した場所へ移動するとそこはrepo2の中なわけで、そこでrepo2に対してadd/commit/push/pull等できるのだが、この変更がrepo1でも`new commits`扱いになる。
なぜならsubmodule登録した時点のrepo2のコミットハッシュ値がrepo1側で保持されていて、これと違うとsubmoduleが更新されているという扱いになるからだ。

`git submodule update`

というコマンドがあるが、これはrepo1で保持しているコミットハッシュ値に資材を更新しますよ、という意味のような動作になるので、このupdateコマンドでsubmoduleが最新に更新されると勘違いしていた私は少しだけ嵌った。。。

`git status`したらsubmoduleに`new commits`と出るときは、これもadd/commit/pushしてあげないとだめ。
もしくは無視してsubmoduleをつねに手動でpullし続けるか。

あと、jenkinsでsubmoduleを使ったリポジトリをビルドしようとしたら、submoduleに対する認証ができなくて詰んだ。
少し調べたが、Git pluginのバグか？くらいの情報しか見つけられなかった。

結論
-------------------------

使えなくはないができることなら使いたくない。
Evernote for Macで使えるMarkdown


偶然、EvernoteでもMarkdown記法がちょっとだけ使えるのに気がついたので、とりあえず気がついた範囲だけφ(.. )

# リスト

## 番号無しリスト
```
* List
```

*のあとスペースでリストになります。~~"- "じゃダメだった~~ 
2018/01/10追記 いつのまにか"- "でもいけるようになってました



## 番号ありリスト
```
1. 数字リスト
```
1.スペースで数字リストに。


# 水平線
```
---
```
ハイフン3つのあと改行で水平線に。```===```でもいけた


# チェックボックス
```
[] 
[x] 
```
[]のあとにスペースでチェックボックスに。


# ダメそうなの

- リンク
- 太字
- 画像リンク
- 見出（これ一番欲しかったが…(^^;