OmniAICreator/Qiita-1.07M huggingface dataset:
Windows で rb-readline がいつの間にか大丈夫になってた

Windows で Rails 開発をやってて rb-readline という gem に泣かされていた。これがためにコンソールが死んだり，ジェネレーターが死んだりしていた。

ところが，いつの間にか直ってた。
直ってると知らずにエラい目に遭い続けてきた。
同じ境遇の人がいるかもしれないので報告する。

# rb-readline とそのバージョン

rb-readline が Rails において何の役割を果たす gem なのか分からないまま，新規の Rails プロジェクトで Gemfile に

```rb:Gemfile
group :development do
  platforms :mingw, :mswin do
    gem 'rb-readline', '~> 0.4.2'
  end
end
```

といつも書いてきた。判で押したように。

なぜこれを書くようになったのか，今となっては思い出せない。なぜバージョン 0.4.2 なのかももはや分からない。

結論を先に言えば，rb-readline を 0.4.2 にしていたのがトラブルの元だった。
最新版の 0.5.3 にしたら問題は解消した。

以下，どんなトラブルで困っていたか，三つの事例を挙げる。

# 事例 1：カーソルキーで死ぬ問題

Ruby のバージョンは以下のとおり。

ruby 2.1.7p400 (2015-08-18 revision 51632) [i386-mingw32]

## 再現手順

まず

```
rails c
```

で Rails コンソールを起動。

おもむろにカーソルキーに触る。すると

rb-readline-0.4.2/lib/rbreadline.rb:4269

において

```
in `block in _rl_dispatch_subseq': invalid byte sequence in UTF-8 (ArgumentError)
```

が出ていた。Windows でデフォルトの文字コードが CP932（Windows 31J）であることに起因するバグだろう。

とにかく，さっき打ったコマンドをもう一度と思って [↑] を打っただけでコンソールが落ちるのだからたまらない。
分かっていても，ついクセで打ってしまうのだ。

# 事例 2：そもそもコンソールが起動しない問題

さっきは Ruby 2.1 だったが，こんどは

ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32]

の場合。

## 再現手順

```
rails c
```

とやっただけで，

rb-readline-0.4.2/lib/rbreadline.rb:1864

において

```
in `_rl_get_screen_size': undefined method `split' for nil:NilClass (NoMethodError)
```

が出る。

## 原因

rbreadline.rb の該当箇所を見ると，

```rb
wr,wc = `stty size`.split(' ').map{|x| x.to_i}
```

と書いてある。`stty` という端末の情報を表示する Unix コマンドから情報を得ているのだ。

Windows にそんなものは無い。

# 事例 3：ジェネレーターのコンフリクト確認で死ぬ問題

Ruby バージョンは事例 2 と同じ Ruby 2.2。

## 再現手順

適当な Rails プロジェクトを作っておいて，テキトーなコントローラーを

```
rails g controller hello world
```

として作り，同じ名前のコントローラーを

```
rails g controller hello ruby
```

として作ろうとする。

当然コンフリクトが発生するので，まず端末に

```
conflict  app/controllers/hello_controller.rb
```

と表示される。次に，どうするかを訊いてくるはずなのだが，ここで事例 2 とまったく同じエラーが出て死ぬ。

# 解決

事例 1 はずいぶん前から悩みの種だった。

事例 2, 3 は Ruby 2.2 にしてからのような気がする。bcrypt が Ruby 2.2 に対応してくれなかった問題[^bcrypt]で長らく Ruby 2.1 を使い続けていたから気づかなかったようだ。

[^bcrypt]: Windows のみ。Windows 用バイナリーが Ruby 2.1 用までしか収録されてなかった問題。2016年3月に解消。

既に書いたように，rb-readline のバージョンが古いのが問題であって，これを 0.5.3 にしたらすべて解消した。

うー，人生を無駄にした。

解決はしたが，そもそも rb-readline を Rails の Gemfile に本当に入れなきゃいけないのかとか，基本的なことが分かってないままだ。
ZFS on Linuxでスナップショットを作成し一定期間経過後破棄

#はじめに
ZFS on LinuxでZFSを使い始めたのですが、自動的にスナップショットを作成し、一定期間経過したら削除したくなりました。cronで自動運用する方法を公開します。

#ファイル作成
```
$ touch /etc/cron.daily/zfs-snapshot
$ chmod u=rwx,g=rx,o=rx /etc/cron.daily/zfs-snapshot #実行属性を付ける
```

#ファイル内容
```
#!/bin/bash
snapshot () {
    #第1引数: ファイルシステムまたはボリュームを指定
    #第2引数: スナップショットの先頭に付ける文字列を指定
    date=$(date -u +'%Y%m%dT%H%M%SZ') #20151231T235959Z形式
    zfs snapshot ${1}@${2}${date}
}
snapshot_destroy () {
    #第1引数: ファイルシステムまたはボリュームを指定
    #第2引数: スナップショットの先頭に付ける文字列を指定
    #第3引数: 保存期間を指定（この場合30日間保存）
    date=$(date -u -d "${3}" +%Y%m%dT%H%M%SZ)
    for snapshot in $(zfs list -H -o name -t snapshot -r ${1}); do #スナップショットの一覧を取得
        snapshot_date=${snapshot#*@${2}} #日付部分を切り出し
        if [[ ${snapshot_date} =~ ^[0-9]{8}T[0-9]{6}Z$ ]]; then #日付の形式を正規表現で確認
            if [[ ${snapshot_date} < ${date} ]]; then #保存期間を過ぎていたら
                echo "destroy ${snapshot}"
                zfs destroy ${snapshot} #破棄
            fi
        fi
    done
}

snapshot 'tank/home' 'auto'

snapshot_destroy 'tank/home' 'auto' '30 days ago'
```

SambaからWindowsのエクスプローラーでスナップショットを開いていると cannot destroy snapshot tank/home@20151231T235959Z: dataset is busy と表示され破棄できませんでしたが、エクスプローラーを閉じれば破棄できました。
jQueryでformのsubmitをフックして独自の処理を差し込む


```hoge.coffee
$("#form").on "submit", (event) ->
  # 何か処理
  this.submit
```

ミソは `this.submit` している箇所、ここが ` $("#form").submit `だと、このイベントハンドラ自身が再度呼びだされて無限ループにハマる。

this は Form オブジェクトを指している(生のDOMオブジェクト)、本来の submit メソッドはイベントハンドラの呼び出しは行われないが、jQueryの submit メソッドはイベントハンドらを呼び出しているらしい。
Windowsで vagrant up時に「could not be accessed in the remote catalog」と表示されたら

Windows環境で、Vagrantで環境構築をする際、`vagrant up`を起動したところ、次のようなエラーメッセージが表示されました。

```shell-session
The box 'miya0001/vccw' could not be found or could not be accessed in the remote catalog
```

原因はどうやら「Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)」というライブラリが入っていないことが原因だったようです。以下のサイトからダウンロードしました。

- [Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)](https://www.microsoft.com/en-us/download/details.aspx?id=8328)

無事に起動しました。
TARGETED_DEVICE_FAMILY で iPhone向けかiPad向けか選択しました。

TARGETED_DEVICE_FAMILY が 1だとiPhone、２だとiPad、
1,2 だとユニバーサルアプリになるそうです。

Xcodeからのたどり方は、アプリ > General > Deployment Info > Devices で iPhone　と　iPad か Universalかを選択できます。

<img width="305" alt="TARGETED_DEVICE_FAMILY" src="https://qiita-image-store.s3.amazonaws.com/0/1624/5e83948f-f4dc-980c-93c7-d2e2826bb1bd.png">


# 参考
http://isisredirect.blogspot.jp/2011/09/ios-sdk-titanium-mobile-ios.html
Sublime Text | 「現在開いているファイル」をサイドバーに表示する簡単な方法

# 操作

ファイル編集エリアの「何もないところ」で右クリックして「Reveal in Side Bar」を選ぶ。

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/6855708e-1d30-627e-3bb0-da9dc58508a7.png)

# 結果

サイドバーで表示してくれる。

![image](https://qiita-image-store.s3.amazonaws.com/0/90607/ff569c6e-4f60-be95-f120-8f72dbbb2df2.png)

# 環境

Sublime Text 3 ( Mac OS X )
 
![image](https://qiita-image-store.s3.amazonaws.com/0/90607/3ba3b189-8c44-5ac3-648a-961560a7f6bc.png)



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
Qiita アイコン画像の GitHub・Twitter・Gravatar・Upload での画質の違い

Qiita のアイコン画像の画質が汚くて気になって、icon の取得元を切り替えてみたら全然画質が違ったのでメモっとく。

<table>
<tr><th>取得元</th><th>形式</th><th>解像度</th></tr>
<tr><td>GitHub</td><td>JPEG</td><td>460 x 460</td></tr>
<tr><td>Twitter</td><td>JPEG</td><td>48 x 48</td></tr>
<tr><td>Gravatar</td><td>JPEG</td><td>80 x 80</td></tr>
<tr><td>Upload</td><td>PNG</td><td>80 x 80</td></tr>
</table>

みんな GitHub アカウントのアイコン画像にすると幸せになれる！
记录bug

```
[6] pry(#<#<Class:0x007f95fc463450>>)> whereami

From: /home/vagrant/.rvm/gems/ruby-2.2.3@develop_upgrade/gems/actionview-4.2.5/lib/action_view/helpers/capture_helper.rb @ line 149 ActionView::Helpers::CaptureHelper#content_for:

    148: def content_for(name, content = nil, options = {}, &block)
 => 149:   if content || block_given?
    150:     if block_given?
    151:       options = content if content
    152:       content = capture(&block)
    153:     end
    154:     if content
    155:       options[:flush] ? @view_flow.set(name, content) : @view_flow.append(name, content)
    156:     end
    157:     nil
    158:   else
    159:     @view_flow.get(name).presence
    160:   end
    161: end

[7] pry(#<#<Class:0x007f95fc463450>>)> block_given?
=> true
[8] pry(#<#<Class:0x007f95fc463450>>)> capture(&block)
ArgumentError: wrong number of arguments (3 for 1..2)
from /home/vagrant/data/bootcopy/modules/80_bootstrap_bsp/lib/custom_form_builder.rb:17:in `radio_button'
[9] pry(#<#<Class:0x007f95fc463450>>)> 
```
http://stackoverflow.com/questions/12605568/jquery-tokeninput-how-to-change-the-ajax-call-url-to-script-dynamically
JavaFX でストップウォッチを作る

# 概要
JavaFX で簡単なストップウォッチを作ってみます。

# スクリーンショット
## 起動直後
![ScreenShot1.png](https://qiita-image-store.s3.amazonaws.com/0/102004/378392e2-1532-9d60-87c6-b9de75da2689.png)

## Start
![ScreenShot5png](https://qiita-image-store.s3.amazonaws.com/0/102004/2ffe8067-ffac-0b00-32a9-61af48806b9a.png)

”Start” を押すとカウントアップが始まります。

![ScreenShot2.png](https://qiita-image-store.s3.amazonaws.com/0/102004/04eb4177-483e-2bc8-5053-a0c027cba79a.png)
カウントアップ中は ”Start” が ”Stop” になっていて、そのボタンを押すとカウントアップが停止します。

![ScreenShot3.png](https://qiita-image-store.s3.amazonaws.com/0/102004/8df0cd03-9585-e390-09f2-a738a4334e3b.png)
Reset を押せばカウントをクリアします。以上、何の変哲もないストップウォッチでした。


# 解説

## Component 本体
Button を継承して実装しました。Component 自体をクリックしてもカウントアップのコントロールが可能になっています。

### 状態のコントロール
active という boolean 値でストップウォッチの状態をコントロールします。

### Timeline
別スレッドで定期的に何かしらの処理を実行させる仕組みとして、JavaFX には [Timeline](https://docs.oracle.com/javase/jp/8/javafx/api/javafx/animation/Timeline.html) というクラスが用意されています。今回は下記の通り初期化し、100ms ごとにカウントアップと表示の更新を実施させます。

```java:Timeline初期化
            timeline = new Timeline(
                    new KeyFrame(Duration.millis(100),
                    e2 -> {
                        if (!active) {
                            return;
                        }
                        final Duration duration = ((KeyFrame) e2.getSource()).getTime();
                        time = time.add(duration);
                        timeSeconds.set(makeText(time));
                    }
                )
            );
```

## 表示
Duration は double で値を取得できるので、整数値に調整する必要があります。 ~~今回 floor を使ったのは端数切捨てでないと時計らしい表示にならないためです。~~ コメントでキャストでよいと指摘を頂きました。@shiracamus さんありがとうございます。

```java:makeText
    private String makeText(final Duration duration) {
        return String.format("%02d:%02d",
                (long) (duration.toMinutes() % 60.0),
                (long) (duration.toSeconds() % 60.0)
                )
                + (active ? "▶" : "■");
    }
```

## Button
ストップウォッチ本体だけだと操作に不自由するので、 Button を2つ追加します。

### start
そのままです。ストップウォッチの状態によってテキストを変えます。

```java:start
        final Button start = new Button("Start");
        start.setOnAction(eve -> {
            start.setText(stopwatch.isActive() ? "Start" : "Stop");
            stopwatch.start();
        });
```

### reset
カウント状況をリセットする Button です。

```java:reset
        final Button reset = new Button("Reset");
        reset.setOnAction(eve -> {stopwatch.reset();});
```

# 成果物
[GitHub Repository](https://github.com/toastkidjp/stopwatch)

# 参考
1. [javafx-stopwatch-timer](http://stackoverflow.com/questions/9355303/javafx-stopwatch-timer)
2. [javafx-how-can-i-format-a-double-property-for-binding](http://stackoverflow.com/questions/32666166/javafx-how-can-i-format-a-double-property-for-binding)
Perl基本文法メモ

#変数宣言
**スカラ$**
`$hoge = "A";`

**配列@**
`@array = (1,2,3);`

**ハッシュ%**
`%hash = ("red"=>"apple","purple"=>"grape");`

#修飾子
**my**
レキシカルスコープ変数：サブルーチン内で定義された場合、サブルーチンを抜けた時点で破棄される変数となる。private。ローカル変数

#構文
**if**

```ex.pl
if($i == 0){}
elsif($i ==1){}
else{}
```
**for**

```ex.pl
for(my $c = 0; $c < 100; $c++){

}
```
**while**

```ex.pl
my $i=0;
while($i < 10){
        print "s";
        $i++;
}
```

**foreach**

```ex.pl
foreach my $k (@arr){

} 

```

#サブルーチン

```ex.pl
sub sroutine{
 return retval;

} 
```

呼ぶ時は

```ex.pl
$val = &sroutine;

sub sroutine{
 return $retval;

} 
```

引数があるときの呼び方

```ex.pl
$val = &sroutine(1,2,4);

sub sroutine{
($a,$b,$c) = @_ 

return $a + $b + $c;

} 
```
このように引数は@_で受け取っている。


#配列の操作
**配列の添字**
負の値をつけると末尾から走査する。(末尾は-1から始まる)


**配列の要素数や添字の取得**

```ex.pl
@hoge = (100,1002,122);
$num = $#hoge; #最後の添字を取得 この場合は2
$num = @hoge; #配列の要素数を取得　この場合は３
```

**配列のソート**

```ex.pl
#数値の配列のソート
@sorted = sort{$a <=> $b} @nums;
#$a $bと書いてアレばそれは昇順（小さいほうが先頭）のソートである。

#文字列の辞書順のソート
@sorted = sort($a cmp $b) @strs;

#sortして一度では並び順を確定できなかった時
sort{length $a <=> length $b || $a cmp $b} @strs;
#これは要素の文字列の長さでソートして、それで確定できなかったら辞書順ソート


```

**C#/LinqのSelect的なもの：Map**

```ex.pl
my @a = (1 .. 10);
my @b = map{$_ * 2} @a;
```

**C#/LinqのWhere的なもの:grep**

```ex.pl
my @c = grep{$_ %2 == 0} @b;
```

#ハッシュの操作
**キーのリストを取得**

```ex.pl
my %fruit = ("red" => "apple","yellow" => "banana");
my @ks = keys %fruit;
```

**値のリストを取得**

```ex.pl
my %fruit = ("red" => "apple","yellow" => "banana");
my @vs = values %fruit;
```
注意：
このようにして作られたキーや値の**配列の順序が入れた挿入した順序とは異なる**。ただし、keys-valuesの対応付けはしっかりしてる。（ハッシュで順序変更してるのかな？）

```ex.pl
@sorted keys = sort{$a cmp $b} (keys %fruit);
```
片方だけソートすると当然対応付けが壊れるので注意。順序が必要な物は普通に配列でやったほうが良い。

また

```ex.pl
while((my $kt, my $vt) = each(%days)){
        print "$kt : $vt";
}
```
のように、列挙することもできる。

#リファレンス
**参照(実体を指し示すもの)**

リファレンスを使うとハッシュの中にハッシュを格納し、ハッシュにハッシュを格納するみたいな複雑な構造が定義できる。

```ex.pl
my $akami = ['maguro', 'katsuo'];
my $shiromi = ['tai', 'hirame'];
my @sushi = ($akami, $shiromi);
print $sushi[1][1]; # => hirame
```
例えばこれは配列のリファレンスを配列化したもの

**リファレンスの簡単な書き方**
**-配列**

``` ex.pl
my $array_ref = ["This","is","array-ref"];
```

**-ハッシュ**

``` ex.pl
my $array_ref = {"t" => "This",,"i" => "is","a" => "array-ref"];
```

配列は()の代わりに[]
ハッシュは()の代わりに{}を使う。
nkfとhtml2jadeで大量のhtmlをpug(jade)に一括変換する

リニューアル案件で古いhtmlに修正加える際に必要になりました。

## require
|ツール|用途|
|-----------------------------------------------------------|-----------------------------------|
| [html2jade](https://github.com/donpark/html2jade)         |                                   |
| [nkf(Network Kanji Filter)](https://github.com/nurse/nkf) | Shift-JISの場合にのみ必要         |
| [rename](http://brewformulas.org/rename)                  | 拡張子を.jadeから.pugに変換する用 |

```zsh:terminal
:terminal

brew install nkf rename
npm install -g html2jade
```

## utf-8に変換後、html2jadeを実行
sjisファイルが文字化けしたので、最初にutf-8に変換しました。
最後にrenameコマンドで拡張子をpugに変換する。
（必要ならpugからhtml出力した際にgulp-endodeなどで再びsjisに戻します。）

```zsh:terminal
find . -type f -exec nkf -w --overwrite {} \;
html2jade -t --donotencode --noemptypipe ./*.html && find . -name "*jade*" | xargs rename -s .jade .pug
```

## html2jade option
|        オプション        |                                          作用                                          |
|--------------------------|----------------------------------------------------------------------------------------|
| -d, --double             | 属性値をダブルクォートで囲う                                                           |
| -o, --outdir &lt;dir&gt; | jadeファイルを格納するディレクトリを指定（先に用意しておく必用がある）                 |
| -n, --nspaces &lt;n&gt;  | インデントサイズを指定（初期値は2スペース）                                            |
| -t, --tabs               | タブ・インデントにする                                                                 |
| --donotencode            | 特殊文字を実体参照エンコードしない__（日本語が使用されているhtmlでは必須オプション）__ |
| --bodyless               | html, body タグを差し込まない                                                          |
| --numeric                | 数値参照を使用する                                                                     |
| -s, --scalate            | Scalate用シンタックスで生成                                                            |
| --noattrcomma            | 属性間カンマを省略する                                                                 |
| --noemptypipe            | 空行を要素の内容として"&#124; 〜"に変換する                                                |

## 参考

> http://qiita.com/seanchas_t/items/bd024a46115564c69806
Progateサービスリニューアル状況


##はじめに

- 2016.4.21に調べた情報です。

私がプログラミングを勉強し始めたときにお世話になった **Progate。**
見た目が可愛らしく、何よりもちゃんと作っていってる感じがいいです。
最近は学べる内容も増え、有料会員プランなるものもできました。
（ただの覚書ですので詳しくは[公式サイト](公式サイト "https://prog-8.com/")をご覧ください）

##目的別コース

以前のProgateは各言語を難易度別に学習する形式でした。
リニューアル後、より実践的なスキルが身につくコースも増えたみたいです。

|コース|目的|
|:--:|:--:|
|学習コース|プログラミングの基本を学ぶ|
|道場コース|応用力を伸ばす|
|プロジェクトコース|創れる力を手にいれる|


####


##料金

||プラスプラン（有料会員）|ベーシックプラン|
|:--:|:--:|:--:|
|料金|¥ 980（税込）/月|無料|
|学習コース|13レッスン|5レッスン|
|道場コース|3レッスン|-|
|プロジェクトコース|2レッスン|-|

「有料会員になると全レッスンができるならいいじゃん！」
と思ったのですが **プラスプランでも制限がある** っぽい。

なぜなら提供している各コースのレッスン数の方が多いから。

||レッスンの数|
|:--:|:--:|
|学習コース|16|
|道場コース|8|
|プロジェクトコース|3|

翌月になると他のレッスンも学習できるようになるのかな？
（有料会員になっていないのでわかりませんが・・・）

##学べる範囲（言語別）

さらっと見た感じ（一部未公開のものもあり）

|言語|無料|有料|
|:--:|:--|:--|
|HTML&CSS|基礎の知識（タグ等）を学習。スライドを見てコードを真似して書いていく感じ。|CSSの透過度やレイアウト、メディアクエリやレスポンシブなど。道場コース以降は仕様書を頼りに自分で作っていく。|
|JavaScript|基本文法、配列、関数の学習。|未公開|
|jQuery|findやclickといった基本メソッドなどイベントの基本学習。|モーダル、アコーディオンの作成。スクロールなどもう少し動きをつける。静的サイトに動きをつける。Progateで学習していない内容も出てくるので、自分で調べる力がつく。|
|Ruby|基本文法、配列の学習と簡単なゲームの作成。|オブジェクト志向の学習。一部未公開。|
|Ruby on Rails|基本文法などの学習。|○acebook類似サイトを作りながら実践的な学習。|
|Java|未公開|未公開|
|PHP|基本文法、配列、関数の学習。お問い合わせフォームを作ってみる。|未公開|

##感想

無料で学べる範囲は狭くなりましたが、各言語の網羅する範囲は広がったなーという印象です。
ちなみに私はProgateで一通り学習して、暇なときにドットインストールを見てました。
誰かのお役にたてると幸いです。
Pythonの簡易WebサーバをDockerで起動する

マシンのPythonではなくDockerのpythonイメージを使って起動させる。


## 環境

Mac OSX + Docker Machine (Docker version: 1.10.3)


## 実行方法

コンテンツのあるフォルダで以下を実行。

### Python2の場合

```bash
docker run -it --rm -p 8888:8888 -v `pwd`:/app -w /app python:2-alpine python -m SimpleHTTPServer 8888
```


### Python3の場合

```bash
docker run -it --rm -p 8888:8888 -v `pwd`:/app -w /app python:3-alpine python -m http.server 8888
```


## アクセス

```
open "http://`docker-machine ip default`:8888"
```
Railsでmasterをマージしてdb/schema.rbがconfilictしたらやること

# Railsでmasterをマージしてdb/schema.rbがconfilictしたらやること

```shell-session
git checkout --theirs db/schema.rb  #db/schema.rbをマージ/リベース元のファイルに戻す
bundle exec rake db:migrate　　# スキーマファイルを更新
git add db/schema.rb
```
クローム(Chrome)の入力フォームの履歴を削除する方法

入力フォームに勝手に以前の履歴を入力されてうざいことがある。

![Screen Shot 2016-04-21 at 17.48.07.png](https://qiita-image-store.s3.amazonaws.com/0/34733/ecf760a3-9a8c-7915-04a8-8283e5b3b847.png)

こんな感じでタグのサジェストと被ってて非常にうざい。
macでの削除方法は消した履歴を十字キーで選択して、

**[fn] + [shift] + [delete]**

で消えます。
[メモ] ArduinoFFTのコンパイル警告への対応

[ArduinoFFTライブラリ](http://wiki.openmusiclabs.com/wiki/ArduinoFFT) を使ったプログラムをArduino IDE 1.6.8でコンパイルしたところ、次のような警告が大量に発生しました。

> /Users/foo/Documents/Arduino/libraries/FFT/FFT.h:182:3: warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix]
   "ldi r16, "STRINGIFY(FFT_N/2)" \n" // prep loop counter

警告をなくすためには、FFT.hのインラインアセンブラ文字列中の各所にあるSTRINGIFY()の前後にスペースを挿入します。

````c:FFT.h
   "ldi r16, " STRINGIFY(FFT_N/2) " \n" // prep loop counter
````

##参考

[Stringification](https://gcc.gnu.org/onlinedocs/cpp/Stringification.html)
electronなGraphvizエディタ "electron-viz"

electronなGraphvizのエディタを作成しました！
https://github.com/Kazunori-Kimura/electron-viz

![ss](https://github.com/Kazunori-Kimura/electron-viz/raw/master/ss.jpg)

## 概要

* dotファイルをsvgに変換し、表示します
* エディタ部分で編集した内容がリアルタイムに反映されます
* svgファイルを保存できます


## ダウンロード

windows/macのバイナリを作成しています。
ダウンロードは以下のURLから。
https://github.com/Kazunori-Kimura/electron-viz/releases/latest

## 開発

ソースコードから実行する場合は、以下の手順で。

npm v3の場合は `--global-style` オプションを指定してインストールしてください。
参考: [npm v3 で Electron のパッケージサイズが大きくなる](http://qiita.com/Kazunori-Kimura/items/bcc1214fd8bc602e06b8)

```sh
$ git clone git@github.com:Kazunori-Kimura/electron-viz.git
$ cd electron-viz
$ npm install --global-style
$ npm run start
```

ビルドは用意しているスクリプトを実行してください。
引数にビルドのターゲットを指定します。

```sh
$ npm run build {target} {arch}
```

* target: win32, darwin
* arch: ia32, x64


## TODO

* ~~ショートカットキーの実装~~
  - v0.12.0で対応しました
* ~~mac向けバイナリの作成~~
  - [v1.1.0](https://github.com/Kazunori-Kimura/electron-viz/releases/latest)で対応しました

## 参考

* [Graphviz](http://www.graphviz.org/Home.php)
* [Viz.js](https://github.com/mdaines/viz.js)
* [electron](http://electron.atom.io/)
* [Graphvizとdot言語でグラフを描く方法のまとめ](http://qiita.com/rubytomato@github/items/51779135bc4b77c8c20d)
* http://www.showa-corp.jp/special/graphtools/graphviz.html
年月日時分秒の値を個別のシェル変数に一発で入れるやつ

シェルスクリプトで`年/月/日/時/分/秒`とかの値を個別の変数に入れたい時って今まで↓こんな風にしてたんだけど。

```bash
# 何回もdate実行するとその間に日付変わる可能性あるので%sの値を使い回す
s=$(date +%s)
Y=$(date -d @$s +%Y)
m=$(date -d @$s +%m)
d=$(date -d @$s +%d)
:
```

↓これでよかったｗ

```bash
read s Y m d H M S ms ns <<< "$(date +'%s %Y %m %d %H %M %S %3N %9N')"
```

`date` の実行が1回で済むから無駄もないし、変数間での時間のズレも気にしなくていいし良いこと尽くめじゃんｗ 何で今まで思いつかなかったんだろう。
グーグルスプレッドシート(GoogleSpreadSheet)でカンマ区切り文字列を分割してセルごとに貼り付ける方法

"hoge,hoge,hoge,hoge,hoge"
こんな文字列をスプレッドシートに貼り付けるとこうなっちゃう…。

![Screen Shot 2016-04-21 at 17.14.06.png](https://qiita-image-store.s3.amazonaws.com/0/34733/f5287eec-f639-39be-d4c0-fb54500ea063.png)

そんな時はこれ。

![Screen Shot 2016-04-21 at 17.14.40.png](https://qiita-image-store.s3.amazonaws.com/0/34733/1230e6fd-8636-33f4-5ce6-9d82b6d4f8fd.png)

**テキストを列に分割**

![Screen Shot 2016-04-21 at 17.16.29.png](https://qiita-image-store.s3.amazonaws.com/0/34733/53bb2a7a-836d-8b6b-6402-f3fb67809745.png)

OK!!
GalliumOSを入れたChromebookが何故か日本語になった

![GalliumiCON_chromebook.png](https://qiita-image-store.s3.amazonaws.com/0/43608/e8ede292-c22f-c80b-8284-7811d48aff0f.png)

先日
[ChromebookにGalliumOS入れてWine動かしたかった](http://qiita.com/walrein/items/c9050ab036cdafd564ee)
ということでChromebookにGalliumOS入れたんですけどね、
ずっと日本語のデスクトップにならずにおっかしーなーと思いつつ
こういうものなんだと割りきって使ってたんですが・・・

#               0.環境
- Dell Chromebook 11(2014|15Q31) 

#ある日、ふとapt-get upgradeしてみると
なんかxscreensaverが更新されないなーって放置してたんですが、
バージョン古すぎるよ！って何回も注意されるので、
もういいやってなって
>$ sudo apt-get dist-upgrade

したわけなんですが、
再起動させたら日本語のデスクトップ環境になったんですよ。
色んな事試したのに
オチはxscreensaverだったのかと思うと、
もっと早く更新しとけばよかったと思いました。
別に弊害ないから良いんです。

同じ環境の方がいたら試してみてください。
Ruby演算子 a ||= 1 の意味 (or イコール)

見慣れない演算子があったのでメモ。

a ||= 1

検索をしてみると「aが偽か未定義ならば1を代入。初期化時のイディオムの一種。」とのこと。
わかりづらい。
pry で試してみる。

```
[2] pry(main)> a ||= 1
=> 1
[3] pry(main)> a = 5
=> 5
[4] pry(main)> a ||= 1
=> 5
```

a が既に定義されている場合は代入できないのね。
Python / Backlog API v2 で課題を登録する

Backlogに毎月のルーチンワーク等を登録するためのスクリプト例です。
[Backloglib](https://github.com/tksmd/backloglib)を試してみましたが、DueDateの値渡しがうまくいかない、Backlog API v1(XML-RPC)のラッパーのためユーザ/パスワードの設定が必要そう、というところでHTTPライブラリを利用して書いてみました。HTTPライブラリとして[Requests](http://requests-docs-ja.readthedocs.org/en/latest/user/quickstart/)を利用しています。

認証についてはリクエスト毎にAPI Keyを飛ばす方式を利用、API Keyの発行方法については[BackLog APIの設定](http://www.backlog.jp/help/usersguide/personal-settings/userguide2378.html)を参照。
各リクエストパラメータについては[こちら](http://developer.nulab-inc.com/ja/docs/backlog/api/2/add-issue)を参照。リクエストパラメータの一部(priorityIdなど)の取りうる値については[こちら](https://www.backlog.jp/developer/api/xml-rpc/method3_3.html)を参照。
projectIdはプロジェクト設定画面のURL `https://(yourspace).backlog.jp/EditProject.action?project.id=123456789`のproject.idから、
categoryId[]はプロジェクト設定画面のURL `https://(yourspace).backlog.jp/EditComponent.action?component.id=123456789`のcomponent.idから拾えます。

Python 2.7.10, requests 2.5.0で動作確認済。

```
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import datetime
from time import sleep

def addIssue(summary,due_date):
    # Set the API endpoint
    # Backlog API v2
    url = "https://(yourspace).backlog.jp/api/v2/issues"
    payload = {
    		'apiKey':      'your api key',
    		'issueTypeId': 1,
    		'projectId':   (your project ID),
    		'summary':     summary,
    		'priorityId':  3,
    		'description': u'スクリプトによる自動投稿です。',
    		'categoryId[]':(your category ID),
    		'dueDate':     due_date,
    }
    r = requests.post(url, params=payload)
    print(r.text)

# example: batch addition using for loop
for iterator_month in range(5,10):
    # create summary and due_date
    cursor_date    = datetime.date(2016,iterator_month,1)
    summary  = u'サンプルタスク(' +  cursor_date.strftime("%Y/%m") + u'用)'
    due_date = cursor_date.strftime("%Y-%m-%d") 
    # add issue
    addIssue(summary,due_date)
    # just in case
    sleep(1)
```
Ruby初心者が押さえておいたほうがいい シンボル、文字列、ハッシュの関係

## ハッシュキーに文字列を使ってるのか、シンボルを使ってるのか、ちゃんと区別しといたほうがいい

最近ちょっと悩んだ、ハッシュのキーに関して

```
irb > { 'my-key' => '111' } == { 'my-key': '111' }
# => false
```

で、「え！！？」となって驚いた話。

### ```{ 'my-key' => '111' }```

文字列 ```'my-key'``` をキーとするハッシュ

### ```{ 'my-key': '111' }```

シンボル ```:'my-key'``` をキーとするハッシュ

## ハイフンやスペースが入った文字列をハッシュのキーにしたい時

ハイフンやスペースが入ってる場合、前置きコロンでサクッとシンボルにできない。

```{ 'my-key': '111' }```　みたいにわざわざシンボルに変換せず、文字列のまま使ったほうがわかりやすい。

あとでアクセスする時もキーが```:'my-key'```になっちゃってややこしいから・・

- - -

ここから、自分的復習ポイント。

## ハッシュのキーはシンボルと文字列を区別している

「シンボルと文字列は違う」ため、ハッシュのキーとして使うときに区別される。

```
irb> hash1 = { "one" => "uno", "two" => "dos" }
=> {"one"=>"uno", "two"=>"dos"}
irb> hash2 = { :one => "uno", :two => "dos" }
=> {:one=>"uno", :two=>"dos"}
irb0> hash1 == hash2
=> false
irb> hash1["one"]
=> "uno"
irb> hash1[:one]
=> nil
```

hash1は文字列がキーに、hash2はシンボルがキー。
hash1の値を取りたいときに、シンボルの ```:one``` を渡しても取れない。（シンボルと文字列は違うものだから）

## ハッシュの省略記法

ハッシュにはよく __シンボルがキーとして使われる__ ため、 Ruby1.9より省略記法が導入されている。

```
irb> hash3 = { one: "uno", two: "dos" }
=> {:one=>"uno", :two=>"dos"}
irb> hash2 == hash3
=> true
```

後ろコロン・・・
これは、 __シンボルをキーとしたハッシュを作るための省略記法__

- - -

機械的に、「ハッシュ作る時のキーは後ろコロン」だけ覚えてたら、最初に書いた問題にぶち当たった。
後ろコロンで作られたハッシュのキーはシンボルである。
ハイフンやスペースが入ったサクッとシンボルにならない文字列の場合、ややこしくなるので、文字列のまま ``` { 'my-key' => '111' } ``` とするのが吉。
[Python] ターミナル上にプログレスバーを

少し長めのscriptを流して放置する際に、あるとよいもの


somethingという処理をfor文でn回まわす時の例

```
import sys
import time


def something():
    time.sleep(t_sleep)
    pass

def update_progbar(progress):
    prog_length = int(bar_length * progress)
    return ('[[' + '-' * prog_length +
            ('>' if prog_length < bar_length else '') +
            '*' * (bar_length - prog_length) +
            ']] %.1f%%' % (progress * 100.))



n = 123
t_sleep = 0.05
bar_length = 30


t0 = time.time()
t1 = t0

print '\n'

for i in range(n):
    
    something()
    
    t2 = time.time()
    progress = i/float(n)
    t_remain = (t2 - t1) * (n - i)
    sys.stderr.write('\r\033[K' + update_progbar(progress)+
                     " Remaining: %.1f sec"%t_remain)
    sys.stderr.flush()

    t1 = time.time()

sys.stderr.write('\r\033[K' + update_progbar(1.0))
print '\n'
print 'Total: %.1f sec'%(t1 - t0), time.ctime()
print '\n'

```
参考：
http://www.yunabe.jp/docs/terminal_progress_bar.html



しかし、こんなことをしなくても最近はtqdmというモジュールがあるらしい……
https://pypi.python.org/pypi/tqdm
http://postd.cc/my-top-5-new-python-modules-of-2015/
requirejs で module 作る時の雛形 (jQuery利用版)

es5 で書くときの雛形。

es2015は、まだIEへの対応が弱いらしいので、
es5で書かなくてはならないときに使う。

## 使い方
'MyClassName' の箇所を任意のクラス名に置き換えて使う。
jQueryのパス適宜修正が必要 ※lib/jquery-1.8.2.min の部分。
(不要なら消す)


```js
(function (global, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['lib/jquery-1.8.2.min'], factory);
  } else if (typeof module === 'object' && module.exports) {
    // CommonJS
  } else {
    // Browser globals
    global.MyClassName = factory(jQuery);
  }
}((this.self || global), function ($) {
  'use strict';

  var MyClassName = function(){
  };

  MyClassName.prototype = {
    constructor: MyClassName,
    test: function(){
      alert('test');
    }
  }

  return MyClassName;
}));
```
Swiftで書かれたWebフレームワークを試すにあたっての注意点

# はじめに
これは各フレームワークの使い方How toというよりも、それぞれのサンプルを動かしてみようとして僕の嵌ったところを書き残しておくものです。

# 各チュートリアルへのリンク
基本的にはこれらを参考にしてそれぞれのセットアップを行ってください。
後で述べますがswiftのバージョンを色々いじらなければいけないのでswiftenvを導入することをおすすめします**（余談ですが、swiftenvで導入したswiftの実行ファイルは.swiftenv/shimsに入っています。.swiftenvの中には.swiftenv/ほにゃらら/usr/bin/swiftというものもあってここらへんでpathの設定を間違いやすいので注意してください。）**

- [Vapor](https://vapor.readme.io/)
- [Kitura](https://github.com/IBM-Swift/Kitura#developing-kitura-applications)
- [Swifton](https://github.com/necolt/Swifton)
- [Perfect](https://github.com/PerfectlySoft/Perfect)

# 実行するために
各チュートリアルやこの他の参考サイトを見るとSwift3.0-devを使うためにみんな口を揃えて「最新のスナップショットをダウンロードして」と書いています。ですがこれはあくまで出始めの最も話題になっていたころの話で、何故かはしりませんが4/12にリリースされた最新スナップショットでかなり文法に手が加えられてしまった結果上のほとんどがコンパイルエラーをビルド時に吐くようになってしまいました。（2016/4/21時点）

そのため実際に動かすときには昔のスナップショットが必要になります。中には最新のものに対応している場合もあるのでswiftenvのlocalコマンドで各プロジェクトごとにバージョンを変えるのがいいでしょう。

### DEVELOPMENT-SNAPSHORT-2016-04-12-aでビルド可能
- Vapor...[この記事](http://qiita.com/n0bisuke/items/ed10deba4b9db2c1652b)にあるように現在はminorバージョンを6にするとコンパイルが通るようです。

### DEVELOPMENT-SNAPSHOT-2016-03-24-aでビルド可能
- Kitura

### DEVELOPMENT-SNAPSHOT-2016-03-01-aでビルド可能
- Swifton


# 最後に
今書いてないのはまだ動作確認が取れていないものです。動作確認がとれたら追記します。

また今回書いたもの以外にもWebフレームワークはあるようです。中には最新版SNAPSHOTに対応してそうなのもありました。

- [swifter](https://github.com/httpswift/swifter)...思いっきしTwitterフレームワークと名前かぶってますね^^;
- [Taylor](https://github.com/izqui/Taylor)...ここまで潔い名前は見たこと無い笑
- [Zewo](https://github.com/Zewo/Zewo)...Vapor同様homebrewで入れられるみたいです
今日から始めるDRDD


# 初めに

DRDDとは**D**aily **R**eport **D**riven **D**evelopmentの略です。

> 成長に差が出る日報駆動開発(DRDD)について
http://qiita.com/senseiswift/items/8816e8a528939cabf3ee

ありていに言えば、ここからパクりました。
日報。いい響きです。内容についても共感しまくりです。

なにを隠そう私、社会人になってからこっち頼まれなくても日報を作成し、その時々のレポートラインに勝手に送り続けていました。いらんと言われたら送るのはやめようと思っていましたが、幸いにして一度も拒否されたことはありません。

なぜそんな面倒なことをしていたのか。
それはまさに**日報駆動**で日々の業務をこなしていたからです。


# DON'T

- 1日の終わりに業務を振り返って日報を書く

**最悪です。**
繰り返します。
**悪習ですので即座に撤退してください。**

実を言えば私が属するチームでも1年ほど全員で日報を書いていましたが、最終的には廃止されました。理由は色々あるのですが、一番の原因は作業後に日報を書いていた人が大半だったからです。
クソ忙しいというのにさらに帰る間際に報告書までまとめなければならないとなれば、手間はともかく心理的な負担は相当なものです。書くくらいなら作業を1ミリでも進めたいと考えるのは当然の流れです。

でもね、違うんですよ。逆なんです。日報は計画に使うものであり、1日の初めに書くものです。

# DO

- 1日の初めに今日の業務を組み立てるために日報を書く

これが正解です。作業前に書くという意味では、前日の業務終了時でも構いません。それが可能であるならばむしろベストです。
翌日、即業務を開始できます。
その日にこなさなければならないタスクの箇条書きと随時アップデートされる作業ログが日報を構成する要素になります。
これがなくてなぜ業務がこなせるのか、正直私にはわからないレベルです。

# じゃ、どう書けばいいの？


私が使っているフォーマットは以下です。


## 9:00 出社直後

```md
# 今日の作業
- サポート #3259 XXXアプリを起動時に｢XXXが発生しました｣となる
- 機能 #3254 XXXアプリがXX時に鳴らないパターンについて

# TODO
- XXXバッファリング機能
- サポート #2463 XXXメニューの動作について
- XXX調査
```

RedmineやGithubなどでIssue管理していれば、そこから担当しているissueを引き出してきて**今日の作業**に列挙します。
その時に時間配分についても検討します。


## 14:00 そろそろ煮詰まってきた頃

```md
# 今日の作業
- サポート #3259 XXXアプリを起動時に｢XXXが発生しました｣となる
    FugaActivity 
        ok
    Foo#aaaa
        ok
    Foo#abc
        ok
    HogeService#hogehoeが呼ばれていない。なぜ？
    処理が2重に起動している可能?


- 機能 #3254 XXXアプリがXX時に鳴らないパターンについて

# TODO
- XXXバッファリング機能
- サポート #2463 XXXメニューの動作について
- XXX調査
```

作業ごとのメモは誰の眼に触れるものでもないのでとにかく殴り書いていきます。
これが、明日同じことを繰り返さないための、いわば自分への手紙です。


## 19:00 提出した日報

```md
#作業時間:9:00 - 19:00
---------
# 今日の作業
- サポート #3259 XXXアプリを起動時に｢XXXが発生しました｣となる
    調査中。AAAの原因がわからず苦労しています。
    もし誰が情報を持っていたら教えてください。

# TODO
- 機能 #3254 XXXアプリがXX時に鳴らないパターンについて
- XXXバッファリング機能
- サポート #2463 XXXメニューの動作について
- XXX調査

# 所感
galaxy nexus 飛びつこうと思ってしまいましたが
よくよく見ると実質負担額なので注意が必要です。
一括で買った場合、いったい本体価格がいくらになるのか気にかかります。

また、iPhoneも持っているので、同じサイズ（といってもnexusでかいですが）
よりも、note や tabが気になる今日この頃です。


```

ヘッダは適当に。作業時間等つけると、過去の自分が働きすぎなのか、そうでもないのか振り返れます。

報告内容は簡潔に。作業ログから切り貼りすれば全く苦労せず書けます。
作業中に書いたログは報告には載せず、そのままメモとして残しておきます。
明日はそのメモの最後から作業を開始すれば良いわけです。

検索性を高めるため、単なるテキストファイルとして保存しておくのが楽です。
私の日報兼ログは5年ほどで100Mを超えました。
人間の脳とは不思議なもので、作業の詳細は覚えていなくても何をやったかは大体覚えているものです。
昔やったな、、と思った時は、検索すれば細大漏らさず詳細がわかる貴重な財産です。

そして大事なのが所感。
仕事に関係ないことでも適当に書けばOKです。
ちなみにこの所感は2012年に私が書いたものをそのままコピペしてみました。nexus欲しかったのね、当時のじぶん。

人間は一度にまとめてコミュニケーションするより、日々少しづつ交流がある人に好感を持つらしいので、これでレポートライン上の人の好感度を高めていく作戦です。きっといつかフラグが立つはず。たぶん。



というわけで、作業の組み立てに、自身の外部記憶にと、**DRDD**オススメします。
laravelのmigrationファイル命名規則

この記事は移行しました！[最新の内容はこちら](https://naoqoo2.github.io/blog/laravel%E3%81%AEmigration%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87/)をご覧ください😀

# migrationファイル命名規則
今後は下記ルールで作成することにしました。

## テーブル作成時
php artisan make:migration create_{テーブル名} --create={テーブル名}
例）php artisan make:migration create_users --create=users

## テーブル変更時
php artisan make:migration modify_{テーブル名}_{YYYYMMDD} --table={テーブル名}
例）php artisan make:migration modify_users_20160128 --table=users

# 決める上で考慮したこと
http://readouble.com/laravel/5/1/ja/migrations.html#generating-migrations
をベースに下記のようにしました。

- カラム名はファイル名に含めない
    - 複数カラムの場合や開発途中で名称変更となった場合に手間なので
- 日付でユニーク化
    - 案件名でのユニークも考えたが、日付は裏切らない
- _tableは省略
    - だってテーブル操作だし

# 命名規則がなかったことによる失敗談
命名規則を決めるにあたって、下記のような背景がありました。
## プロジェクトXにて
ある日、usersテーブルにカラムAを追加しました。

> php artisan make:migration modify_users
> 
> ```php:2016_02_14_123412_modify_users.php
> class ModifyUsers extends Migration {
>     {カラムAの記述}
> }
> ```
> 
> php artisan migrate（カラムAが追加された）

数ヶ月後、ふたたびusersテーブルにカラムBを追加しました。

> php artisan make:migration modify_users
> 
> ```php:2016_04_21_212434_modify_users.php
> class ModifyUsers extends Migration {
>     {カラムBの記述}
> }
> ```
> 
> php artisan migrate（カラムBが追加された）

これ、順に実行した場合は問題ないのですが、

## 問題発生

DBを一から作る際にエラーとなりました。。。

> PHP Fatal error: Cannot redeclare class ModifyUsers

クラス名が同じためエラー。。PHPだし、まぁそりゃそうだよね。

## ひとまず解決へ

片方のクラス名だけ変更して解決を試みたのですが、
どうやらmigrateはファイル名からクラスを呼び出すらしく、エラー解消されず。。
結局、ファイル名も変更して解決しました。

## 再発を防ぐために
いっそmigrationコマンドでファイル作成時にバリデーションしてくれればいいのに。。
と思いつつ、
今後このようなことが起きないよう命名規則を決めることにしました。


# 最後に
命名規則を決めておけば、迷いもなくスムーズに開発が進みます。
（このような問題も発生しませんしね）
ルールがまだない方は是非決めてみてはいかがでしょうか。

それではステキなmigrationライフを。
Javaエンジニアにお勧めする一度はたどり着くであろうサイトまとめ

これからJavaを勉強する人が検索時に必ず一回は目にしそうなサイトまとめ。

# 基本の基本

Java APIは目を通そう。
http://www.oracle.com/technetwork/jp/java/javase/documentation/api-jsp-316041-ja.html

#APIを読んでわからなくても、大抵のことはここを見ると載っている（気がする）

Javaメモ目次(Hishidama's Java Memo) 
http://www.ne.jp/asahi/hishidama/home/tech/java/index.html

Javaを勉強する時はブックマークしておこう。

#Java全般

寺田　佳央 - Yoshio Terada | Java & Java EE
https://yoshio3.com/

きしだのはてな
http://d.hatena.ne.jp/nowokay/

水まんじゅう
http://d.hatena.ne.jp/megascus/

日々常々
http://irof.hateblo.jp/

#Spring関連

BLOG.iK.AM
https://blog.ik.am/

#Kotlin

算譜王におれはなる!!!!
http://taro.hatenablog.jp/

逆引きKotlin
http://kotlin-rev-solution.herokuapp.com/site/

#JAX-RSとかセミコロンレスJavaとか

ホーム — 裏紙 
http://backpaper0.github.io/


#Java EE
Challenge Java EE !
http://kikutaro777.hatenablog.com/

Java EE 事始め！
http://masatoshitada.hatenadiary.jp/


#~~趣味シリーズ~~ 世界のメモ

CLOVER
http://d.hatena.ne.jp/Kazuhira/


#Qiitaだとこのお二人
http://qiita.com/opengl-8080

http://qiita.com/kawasima

# 最新情報のキャッチアップ

## 基本的には…
はてなブックマークのテクノロジーに上がってくるBlogやスライドをチェックしていればいいんじゃないかな。
http://b.hatena.ne.jp/ctop/it

## ユーザーグループ

日本Javaユーザーグループ
http://www.java-users.jp/

関西Java、渋谷Javaなどもある。
http://kanjava.connpass.com/
http://shibuya-java.connpass.com/


あとは、各地で開かれる勉強会にスケジュールが合えば参加してみるのもあり。
勉強会の様子はTwitterにハッシュタグ付で呟かれ、後日 http://togetter.com/ にもまとめられるので後から読み返すのも勉強になる。

2016/5/24にJavaDayTokyo2016があるけど、これからJavaを始める人にとってはハードルが高すぎるかもしれない。
2016/5/21にJJUG CCCがあるのでこちらの方がまだハードルは低いかも。

# 最後に

自分が困ったこと、はまったことは他の人も困ると思うので、積極的にQiitaなどに書いていくといいと思うよ！（自戒含む）
gulp実行中に「Error: no writecb in Transform class」というエラーが出た

node.js自体のバージョンをあげると直った

参考：
https://github.com/sindresorhus/gulp-autoprefixer/issues/46

node.jsのバージョンの上げ方：
http://parashuto.com/rriver/tools/updating-node-js-and-npm
Rubyのアクセスメソッド(attr_reader, attr_writer, attr_accessor)の使い方と意味が何となくわかった気がする


Rubyの本を初めて読んだ時、self や Proc と並んで意味が全くわからなかったアクセスメソッドの意味と使い方がなんとなくわかった気がしたのでメモ。
いろいろなサイトをスクレイピングしていて、今回はこんなコードを書いてみた。

```rb
require 'open-uri'
require 'nokogiri'
require 'kconv'

class HogeBot
  URL_BASE = "https://hogehoge.com/"
  UserAgnet = "Mozilla/5.0 () "

  attr_accessor :next_url

  def initialize
    @next_url = "https://hogehoge.com/hoge/?page=2"
    @page_number = 2
    @image = []
    @title = []
    @author = []
  end

  # ネクストページのコンテンツが nil になるまで繰り返し
  def check_page
    open_url while @next_url
  end

  # URLを open して get_content を実行後、次のページを next_url に代入
  def open_url
    sleep 1
    p @next_url
    html = open(@next_url,"User-Agent" => UserAgnet).read
    doc = Nokogiri::HTML(html.toutf8, nil, 'utf-8')

    get_content(doc)

    # ページコンテンツが無かった場合、nil を返す。
    @next_url = if doc.css(".hogehogehoge").empty?
                            nil
                          else
                            @page_number += 1
                            URL_BASE + "?page=" + @page_number.to_s
                          end
  end

  # ページコンテンツを取得
  def get_content(doc)
    doc.css(".hogehoge").each do |row|
      @image.push img_src = row.css("img").attribute("src").value
      @title.push row.css("h1").text
      @author.push row.css("h2").text
    end
  end
end
```

やってることは下のようなリンク構造を持ち、コンテンツは無くてもpage 自体は用意してあるようなサイトから情報を抜き出してくること。

```
https://hogehoge.com/hoge/?page=2
https://hogehoge.com/hoge/?page=3
https://hogehoge.com/hoge/?page=4
https://hogehoge.com/hoge/?page=5
https://hogehoge.com/hoge/?page=6
https://hogehoge.com/hoge/?page=100  #ページはあるけどコンテンツは空
```

コード内に self とか attr_accessor が書いてあるが、意味はあまり良くわからずに使っている。
でコードを書いた後に、```@title```, ```@image```, ```@author``` を取り出そうとして困った。どうやって取り出せばいいんだろう。

```rb
hoge_scrape = HogeBot.new
hoge_scrape.check_page
```
これでプログラムが動いて、```@title```, ```@image```, ```@author```の配列に情報が入っているはずなのに。。。

そんな時にこの記事を見てようやくなんとなくの使い方がわかった。

[アクセスメソッド - クラスの概念 - Ruby入門](http://www.rubylife.jp/ini/class/index6.html)

```rb
require 'open-uri'
require 'nokogiri'
require 'kconv'

class HogeBot
  URL_BASE = "https://hogehoge.com/"
  UserAgnet = "Mozilla/5.0 () "

  #コメントでアドバイスをいただき、修正
    attr_accessor :next_url, :image, :title, :author

  # attr_accessor :next_url
  # attr_accessor :image
  # attr_accessor :title
  # attr_accessor :author

  def initialize
    @next_url = "https://hogehoge.com/hoge/?page=2"
    @page_number = 2
    @image = []
    @title = []
    @author = []
  end
```
すごいこれで取り出せるなんてすごい便利！

```rb
hoge_scrape = HogeBot.new
hoge_scrape.check_page
hoge_scrape.image
hoge_scrape.title
hoge_scrape.author
```
こんな感じでインスタンス変数とかにアクセスできるんですね！
Vyatta on SoftLayer覚え書き

Vyatta関連で何度か似たことを調べている気がするので、覚え書き。

# マニュアル
http://www.brocade.com/content/html/en/administration-guide/vyatta_5400_manual/wwhelp/wwhimpl/js/html/wwhelp.htm#href=Guide%20to%20Vyatta%20Documentation/Guide_to_Documentation.1.1.html

# Dead Peer Detection (DPD)
Vyattaはデフォルトはオフ。
対向ルータの設定と一致していないと繋がらない可能性がある。
http://www.brocade.com/content/html/en/administration-guide/vyatta_5400_manual/wwhelp/wwhimpl/js/html/wwhelp.htm#href=VPN_Site-to-Site%20IPsec%20VPN/IPSec%20VPN%20Commands.5.28.html

# Perfect Forward Secrecy (PFS)
フェーズ2に関連するパラメータ。
Vyattaはデフォルトはオン（ike-groupで定義されたDHグループが使われる）。
対向ルータの設定と一致していないと繋がらない可能性がある。
http://www.brocade.com/content/html/en/administration-guide/vyatta_5400_manual/wwhelp/wwhimpl/js/html/wwhelp.htm#href=VPN_Site-to-Site%20IPsec%20VPN/IPSec%20VPN%20Commands.5.23.html

# show vpn debugコマンド

http://www.brocade.com/content/html/en/administration-guide/vyatta_5400_manual/wwhelp/wwhimpl/js/html/wwhelp.htm#href=VPN_Site-to-Site%20IPsec%20VPN/IPSec%20VPN%20Commands.5.07.html

show vpn debug peer 【対向ルータのIP】
トンネルを抜けた先のプライベート・セグメントの設定が双方のルータで一致していないと繋がらない可能性があるので、このコマンドで確認。

```
$ show vpn debug peer 201.16x.xxx.xxx
000 "peer-201.16x.xxx.xxx-tunnel-1": 10.243.184.0/26===161.20x.xx.xxx[161.20x.xx.xxx]...201.16x.xxx.xxx[xxx.xxx.xxx.xxx]===10.254.0.0/25; unrouted; eroute owner: #0
（以下略）
```

# インターフェースを流れる通信量をグラフィカルに表示

`monitor interfaces bonding bond0`
とか
`monitor interfaces bonding bond1`

![WS010863a.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/dff5ffba-0aa4-3d13-a628-14ff7385b79b.jpeg)


gキーを押すとグラフが、dキーを押すとdetailが表示される。
下記はgとdを両方押した状態。

![WS010863b.jpg](https://qiita-image-store.s3.amazonaws.com/0/59627/fa3585b5-371b-10b8-ef75-383398d6bb28.jpeg)

当画面を抜ける時はqキー。

# ログ
/var/log/messages
/var/log/auth.log

# Firewallログ
`show log firewall name 【Firewall名】`

# Phase 1 確認
`show vpn ike sa`

# Phase 2 確認
`show vpn ipsec sa`
`show vpn ipsec sa detail`

# 設定確認
一般モード(Operation Mode)：
show configuration　→　pre-shared-secretは伏字になる。
show configuration commands →　現在の設定にするためのコマンドリストを出力

設定モード(Configuration Mode)：
show

# tcpdump

sudo -i tcpdump -ni bond1 dst 161.202.xxx.xxx
sudo -i tcpdump -ni bond1 udp port 500
sudo -i tcpdump -ni bond1 icmp
など。

# 空けるべきポート
IPSec VPNとして使用される事が多い「ESPとIKEを用いたトンネルモード」の場合、間にあるFirewallで、下記を双方向で通す。NAT越えをする場合は追加でudp 4500を通す。

- esp
- udp 500

```lang:VyattaのFirewallを使う場合の設定例
        rule 10 {
            action accept
            destination {
                port 500
            }
            protocol udp
            source {
                address 【対向ルータのIP】
            }
        }
        rule 20 {
            action accept
            protocol esp
            source {
                address 【対向ルータのIP】
            }
        }
```

# ルート情報の表示

`show ip route`
よく使われるGitコマンドまとめ

# よく使うGitコマンドをまとメモ！


## ブランチ操作系
### ブランチ作成
作って移動

```
git checkout -b [ブランチ名]
```
---
作るだけ

```
git branch [新ブランチ名(現在存在しないブランチ名)]
```
---

### ブランチ移動
移動

```
git checkout [ブランチ名]
```
---

### ブランチ確認
ローカルブランチリスト表示

```
git branch
```
---
ローカルもリモートも全部表示

```
git branch -a
```
---

### ブランチ削除
ローカルブランチ削除

```
git branch -d [ブランチ名]
```

## ファイル変更後
### add
指定のファイルをステージにあげる

```
git add [何を]
```
---
全部ステージにあげる

```
git add .
```
---

### commit
コミット！

```
git commit -m 'コミットメッセージ'
```
---
vimが立ち上がってコミットメッセージ入力
保存すればコミット開始される

```
git commit
```
---
空(ファイル変更のない)のコミット

```
git commit --allow-empty
```
---
空(ファイル変更のない)コミット -コミットメッセージ有り版-

```
git commit --allow-empty -m 'コミットメッセージ'
```

### push
初回プッシュ
_最初だけこれ使う_
_次からオプションつけなくてもoriginにプッシュしてくれるようになる_

```
git push -u origin [ブランチ名]
```
---
初回以降のプッシュ

```
git push
```
---


### pull
リモートからデータを引っ張ってくる

```
git pull
```
---

### fetch/merge
fetchする

```
git fetch [リモートリポジトリ] [ブランチ名]
```
---
mergeする

```
git merge —no-ff [ブランチ名]
```
---

## なんか系
状態を確認

```
git status
```
---
ブランチのログをみる

```
git log
```
---


## 間違った時とか
### ヘッドへ戻す時
ヘッドの状態に戻す

```
git reset --soft HEAD^
```
---
指定のコミットに戻る

```
git checkout [コミットハッシュ]
```
---
前の状態に戻す

```
git checkout — [ファイル指定]
```
---
addの取り消し

```
git reset HEAD [ファイル名]
```

## 設定とか
### グローバルへの設定登録
Gitのusernameをグローバルな設定として登録

```
git config —global user.name [名前]
```
---
アドレス登録

```
git config —global user.email [アドレス]
```
---
【捕捉】
[名前][アドレス]部分をなしで実行すれば設定を確認できる

---


## その他git使う時に初めに行ったりするやつ
###sshキー作成

```comand:terminal
$ cd ~/.ssh
$ ssh-keygen
```
上記コマンドで秘密鍵と公開鍵が生成されて
**id_rsa.pub**(公開鍵)をgitに登録
**id_rsa**(秘密鍵)のパーミッションを[600]にする

```command:terminal
$ chmod 600 ~/.ssh/id_rsa
```
これで大丈夫なはず
(ちょっと自信ない)

---
### エイリアスを切る

~/.gitconfigに記載する

```config:.gitconfig
[alias]
st = status
br = branch
とかとか
```

なんか間違ってたら直します・・・。
GAE/Go urlfetch.ClientでGetしたらタイムアウトエラー「urlfetch: DEADLINE_EXCEEDED」の解決方法


<a href="https://cloud.google.com/storage/" target="_blank">Cloud Storage</a>のNearLine（レスポンス遅い、＄安い）に配置したファイルにたいして、GETをしたらタイムアウトになった。その回避策。

```go:5秒でタイムアウトしてしまう
client := urlfetch.Client(ctx)
response, err := client.Get(path_to_url)
```

すると、タイムアウトエラーが出ます。

```text
Get http://example.com/path/to/file.xxx : API error 5 (urlfetch: DEADLINE_EXCEEDED)
```

これは `urlfetch.Client` のコメントにも書かれていましたが、タイムアウトの初期値が5秒（default deadline of 5 seconds）になっているためのようです。

以下のように書くことで、この問題を解決しました。

```go:30秒までタイムアウトしない

client := &http.Client{
  Transport: &urlfetch.Transport{
    Context:  ctx,
    Deadline: 30 * time.Second,
  },
}
response, err := client.Get(path_to_url)
```
IEのdocument.allはオブジェクトもコレクションも返す

Internet Explorer 7決め打ちで作られたサイトのモダンブラウザ対応での調査メモ

https://msdn.microsoft.com/ja-jp/library/ms537434.aspx

>Depending on the number of times the name or ID is defined in the document, the item method returns null, a single element object, or a collection of element objects. 

とあるので、定義されているIDやnameの数によってnullやsingle element objectやcollection of element objectsを返してくる。

```html:sample1
<input name="hoge" type="hidden" value="">
```
```javascript:sample1
document.all["hoge"].value = 10;
```
も

```html:sample2
<input type="radio" name="huga" value="on" checked>
<input type="radio" name="huga" value="off">
```
```javascript:sample2
var isOn = document.all["huga"][0].checked;
```
もDOM側の構造に合わせて適当に動作するので単純にgetElementsByNameに置き換えても動かないみたいだ…
SphinxでtoctreeにないとLaTeXでdocディレクティブで正常にリンクされないのを対処する

Sphinxでtoctreeにないファイルに対してdocディレクティブでリンクを作成すると、
HTMLではリンクを作ってくれるが、LaTeXでPDF化すると単なる文字列となってしまう。

htmlとlatexpdfjaのどちらが正しい動きなのか分からないが、対処方法を書いておく。
ちなみに、Sphinxは1.3.6で確認。

リンク元として、以下のような書き方をする。
hiddenにしたtoctreeを作って、toctree上にドキュメントを認識させている。

```rst
..toctree::
   :hidden:

   test

:doc:`test`
```
RedmineのwikiにRestAPI用のIDリストを出力するスクリプト（※要 ViewCustomizePlugin）

RedmineのView Customize plugin でwikiページにRestApi用のキー一覧を表示してみました。
Redmineのバージョンは3.1.1です。

https://github.com/onozaty/redmine-view-customize

RedmineのwikiにIdlistというページを作成して、View Customize pluginで以下を登録
Path pattern: 	wiki/Idlist
Type:javascript
Code:

```js
$(function () {
  var home = $("a.home").attr("href");
  var getList = 
    ["projects",
     "users", 
     "groups",
     "trackers",
     "issue_statuses",
     "custom_fields",
    ];
  $.each(getList,function (i, target) {
    $.get(home + target + ".json?limit=500")
    .then(function(data) {
      var table = $("<table><tr><th colspan=2>" + target + "</th></tr></table>");
      $.each(data[target], function (j, tObj) {
        var name;
        if (tObj.name) {
          name = tObj.name;
        } else {
          name = tObj.lastname + " " + tObj.firstname
        }
        table.append("<tr><td>" + tObj.id + "</td><td>" + name + "</td></tr>");
      });
      $("div.wiki-page").append(table);
    });
  });
});
```

ページを開いたときに認証ダイアログが表示されます。
ユーザ一覧、グループ一覧を表示するにはシステム管理者権限のあるユーザで認証する必要があるようです。

一行目に以下を設定すれば認証の手間が省けますが、システム管理者のapikeyが公開されてしまうので、お勧めできません。

```js
$.ajaxSetup({"headers": {"X-Redmine-API-Key" : "※RedmineのApiKey"}});
```
jQuery・JavaScript　高さ、横幅取得方法

#jQueryによる要素サイズの取得
##高さ
`.height()`　要素の高さのみ
`.innerHeight()` 要素のpaddingを含んだ高さ
`.outerHeight()`　要素のborder、paddingを含んだ高さ
`.outerHeight(true)` 要素のmargin、border、paddingを含んだ高さ

##横幅
`.width()`　要素の幅のみ
`.innerWidth()` 要素のpaddingを含んだ幅
`.outerWidth()`　要素のborder、paddingを含んだ幅
`.outerWidth(true)` 要素のmargin、border、paddingを含んだ幅

#JavaScriptによる要素サイズの取得
```javascript:script.js
var h = element.clientHeight;
```
##高さ
`.clientHeight `　paddingを含んだ高さ
`.scrollHeight `　paddingを含んだ画面上に表示されていないコンテンツを含む高さ
`.offsetHeight `　border、padding、スクロールバーを含んだ高さ

##横幅
`.clientWidth `　paddingを含んだ幅
`.scrollWidth `　paddingを含んだ画面上に表示されていないコンテンツを含む幅
`.offsetWidth `　border、padding、スクロールバーを含んだ幅

##ウィンドウサイズ
`window.innerWidth` スクロールバーを含んだウィンドウの幅
`window.innerHeight` スクロールバーを含んだウィンドウの高さ
`window.outerWidth` サイドバーなどを含んだブラウザ全体の幅
`window.outerHeight` タブやブックマークバーなどを含んだブラウザ全体の高さ

#display: none;の時のサイズ取得
| 取得しない |取得する|
|:-----------|:------------|
|offsetHeight|height|
|clientHeight|innerHeight|
||outerHeight|


#参考
http://cly7796.net/wp/javascript/can-not-get-size-when-elements-of-the-display-none/
http://js.studio-kingdom.com/javascript/
http://semooh.jp/jquery/
UE4のゲームプレビューをGearVRの表示とだいたい一致させる

# 概要
GearVR上の視界をUE4のゲームプレビューでおよそ把握できるように設定を調整する。

|GearVR上の表示|UE4のプレビュー調整前|UE4のプレビュー調整後|
|---|---|---|
|![Screenshot_2016-04-21-14-32-23.png](https://qiita-image-store.s3.amazonaws.com/0/122577/cb3fddae-534e-2df1-e2a6-f0d81ad1baa9.png)|![before.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/61cbabbf-4692-5239-90b1-46f01215aa2f.png)|![after.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/108bf749-7d0a-623e-b23b-9d1108cd8f58.png)|


# 諸元
* 開発環境：UE4.11.2
* 実行環境：GearVR + Galaxy S6 edge
* プロジェクト：[Samsung Gear VR UE 4 のクイックスタート](https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/QuickStart/index.html)に従って作成


# 手順
## 1. プレイインエディタの詳細設定を開く
![p1.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/990e6884-2360-e6aa-37b7-f3f5d20008af.png)

## 2. ウィンドウの縦横比が1:1になるようサイズを設定
ここでは720x720に設定している。
![p2.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/222281ab-8473-5153-7e86-bb550c17c209.png)

## 3. ポーンのブループリントを開く
![p3.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/2f393b27-fb3a-334a-ba48-3df86447a3a3.png)

## 4. カメラの高さ（ロケーションのZ値）を0に、FOVを80に設定
パッケージング時には適切な値がオーバーライドされるので問題ない（はず・・・）
![p4.PNG](https://qiita-image-store.s3.amazonaws.com/0/122577/413f0392-22c8-7db6-d7eb-24cab0910cf4.png)
インスタンス名からタイムライン番号を取り出す愚行について

デザイナー？寄りの話である。
Flashの話でもある。

昨日馬鹿なことしたのでメモの代わりにエントリーを残しておく。

・ステージにMovieClip(インスタンス名 mc_1)がある
・6つのMovieClip(インスタンス名 f_mc_01 - 06)がそれとは別で配置されている
・6つのMovieClipそれぞれを押すと、(mc_1)が切り替わる

上記のようなものを作ろうとして、ハマった。
duplicateMovieClipがあれば、こんな事にはならなかったのかもしれないが、
そもそも実装を考えていればハマることさえ稀有なケースなので、
僕の頭は相当悪い。

結局、mc_1 のタイムラインに、f_mc_01 - 06 をそれぞれに配置することで、解決した。

以下にゴミコードを置いておく。

```
f_mc_01.addEventListener(MouseEvent.MOUSE_UP, numSplit);
f_mc_02.addEventListener(MouseEvent.MOUSE_UP, numSplit);
f_mc_03.addEventListener(MouseEvent.MOUSE_UP, numSplit);
f_mc_04.addEventListener(MouseEvent.MOUSE_UP, numSplit);
f_mc_05.addEventListener(MouseEvent.MOUSE_UP, numSplit);
f_mc_06.addEventListener(MouseEvent.MOUSE_UP, numSplit);

var snum:int;

function numSplit(evt):void{
	var targetStr:String = evt.currentTarget.name;
	var arr:Array = targetStr.split("_");
	if(int(arr[2]) < 10){
		snum = int(arr[2].substr(2,2));
	}else{
		snum = int(arr[2]);
	}
	
	changeTimeLine();
	
}

function changeTimeLine():void{
	mc_1.gotoAndStop(snum);
}
```

すべてが馬鹿げているが、本当に僕がプログラマでなくてよかったと心の底から思っている。

そもそも、タイムラインの移動だけなら、ボタンは進む、戻るだけでいいし、
なんで文字列操作してインスタンス名からタイムラインの番号取り出してるのか意味不明だし。

世の中には僕とは違うまともなFlashエンジニアが山ほどいるので、ご安心ください。

誰か僕にプログラムを教えて下さい。
Githubで二段階認証をしているユーザーがプライベートリポジトリのgemを取得する方法


## 概要
Githubのプライベートリポジトリにあるgemをbundlerで取得するときに、二段階認証をしているアカウントだとaccess tokenを使って取得する必要がある。

###### Gemfileのサンプル

```
gem 'gem_test', git: 'https://github.com/TeamName/gem_test.git'
```

## access tokenの作成
### １．GithubのSettingsからPersonal access tokensを選択して、Generate new tokenをクリックする。

### ２．Token descriptionに適当な名前を入れて、repoにチェックを入れてから、Generate tokenをクリックする
![スクリーンショット 2016-04-21 14.51.33.png](https://qiita-image-store.s3.amazonaws.com/0/29803/80763605-a6ee-c106-0c4f-16e283f5a2ee.png "スクリーンショット 2016-04-21 14.51.33.png")

### ３．作成されたaccess tokenをbundle installするときのPasswordに入れる。
![スクリーンショット 2016-04-21 14.52.32.png](https://qiita-image-store.s3.amazonaws.com/0/29803/e90732b0-3af4-ac83-1ed2-131b25c0973b.png "スクリーンショット 2016-04-21 14.52.32.png")

```bundleのサンプル
$ bundle install
Fetching https://github.com/TeamName/gem_test.git
Username for 'https://github.com': novless # アカウント名を入力する
Password for 'https://novless@github.com' # 作成したaccess tokenを入れる
```

以上

#### 参考URL
https://help.github.com/articles/creating-an-access-token-for-command-line-use/