OmniAICreator/Qiita-1.07M huggingface dataset:
Entity FrameworkでPostgreSQLに接続する

丸一日はまった。SQLServerの場合全部勝手にやってくれてる最初の処理を全部書かないといけなかったからなんですが。
手間が減るのは万々歳なんだけど、中身の理解を後回しにしてしまうという点で善し悪し。

環境・テーブル構造・フォームのコードについては[EntityFramework6で単純なデータ表示フォームを作成](http://qiita.com/keidrumfreak/items/15fc7217817c7f8b01b3)と同じ。

データベースはPostgreSQL9.4を使用

###パッケージインストール
NugetよりEntityFramework6.Npgsqlをインストール。
依存関係は全部引っ張ってきてくれます。

###App.configの編集
`<configration>`セクション内に以下を追記

```xml:App.condig
  <connectionStrings>
    <add name="接続名"
      connectionString="接続文字列"
      providerName="Npgsql" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <add name="Npgsql
        Data Provider"
        invariant="Npgsql"
        support="FF"
        description=".Net Framework Data Provider for Postgresql"
        type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
  </system.data>
```

###エンティティクラスの作成

```csharp:Model.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Postgresql_DBtoCode.Database
{
    [Table("model")] //テーブル名
    class Model
    {
        [Key] //主キー列の宣言
        [Column("model_id")] //列名
        public int ModelID { get; set; }

        [Column("model_name")]
        public string ModelName { get; set; }
    }
}
```

```csharp:Title.cs
using System;
using System.ComponentModel.DataAnnotations.Schema;

namespace Postgresql_DBtoCode.Database
{
    [Table("title")]
    class Title
    {
        [Column("title_id")]
        public int TitleID { get; set; }
        
        [Column("model_id")]
        public int ModelID { get; set; }

        [Column("version_id")]
        public decimal VersionNO { get; set; }

        [Column("title_name")]
        public string TitleName { get; set; }

        [Column("running_date")]
        public DateTime RunningDate { get; set; }

        [ForeignKey(nameof(ModelID))] //外部キー列の指定 *プロパティ名を指定する
        public Model Model { get; set; }
    }
}
```

###コンテキストクラスの作成

```csharp:MusicGameData.cs
using System.Data.Entity;

namespace Postgresql_DBtoCode.Database
{
    class MusicGameData : DbContext
    {
        public MusicGameData()
            : base("name=接続名")
        {
        }

        public DbSet<Model> Models { get; set; }
        public DbSet<Title> Titles { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema("スキーマ名");
        }
    }
}
```

とりあえずこれで前回のコードが動きます。~~やってることはただのベタ書き。~~
BackChannelingによるお手軽お仕事用チャット

syobochimメディアで[BackChanneling](https://github.com/kawasima/back-channeling)を紹介していただきました。
http://syobochim.hatenablog.com/entry/2015/09/03/214050

![logo.png](https://qiita-image-store.s3.amazonaws.com/0/8475/eec59531-8b49-95e9-7d44-eaa52b256a6c.png)



BackChannelingは、HipChatやSlackで感じてた不満を解消するために作りはじめたチャットです。HipChatやSlackはどうしても話題が流れていってしまうので、仕事では使いにくい面があります。そこでBackChannelingは話題ごとにスレッドを立てれるようにしました。なので実はチャットというよりはリアルタイムBBSという位置づけのつもりです。

特長として、

- スレッドフローティング型
- マルチタブ
- Markdownでコメントが書ける
- 音声コメント
- コメントのキュレーションができる
- ボットアカウントを作れる

などがあります。音声はストリーミングでなく、クライアントサイドでogg圧縮してサーバに送るので、社内ネットワークのような帯域専有に気をつけなきゃいけないような環境でも使うことができます！

### 動かしてみる

1. https://github.com/kawasima/back-channeling/releases からzipファイルをダウンロードします。
2. zipを展開し、`bin/back_channeling`を実行します。

…以上です。簡単ですね！

ただこれはインメモリにデータ持っちゃうので、永続化する場合は

```shell-session
% bin/transactor
% DATOMIC_URL=datomic:free://localhost:4334/bc bin/back_channeling
```

と先にDatomicを起動します。何れにせよ簡単ですね！

サインアップしてログインすると、2ちゃんねるビューワみたいなページが開きます。

![範囲を選択_020.png](https://qiita-image-store.s3.amazonaws.com/0/8475/5ec51448-fc21-9e0b-b0b8-b2426a66dbbe.png)

スレッドを選択すると、タブでスレッドを開きます。
Markdownでコードを書くとちゃんとシンタックスハイライトもされます。それから2ちゃんねるのようにスレ番へのリンクも可能です。

![範囲を選択_021.png](https://qiita-image-store.s3.amazonaws.com/0/8475/09ef22c9-7431-b912-9cf6-75dc55323f98.png)

Previewみながらコメントも書けるのでMarkdownでもらくらくです。Ctrl+Enterで投稿できます。

![範囲を選択_022.png](https://qiita-image-store.s3.amazonaws.com/0/8475/3abbbffb-4965-b0f4-f3b5-213ffb104e7c.png)

コメントフォーマットを「Voice」にするとRecordボタンがでます。押せば録音が始まります。音声もPreviewで確認して投稿できるので、噛んじゃっても大丈夫です！

![範囲を選択_024.png](https://qiita-image-store.s3.amazonaws.com/0/8475/e6415ce0-3841-56a6-79be-d6cfc493d624.png)

スレッドはキュレーションが可能です。スレを選んで並び替えや追記ができ、Markdownボタンを押すとクリップボードにキュレーション結果がコピーされますので、議事録として保管が可能です。

![範囲を選択_023.png](https://qiita-image-store.s3.amazonaws.com/0/8475/872ccd04-dfd9-22ac-21c6-060928d2a7ab.png)

### アーキテクチャ

サーバサイド、HTML、Javascript、CSS、SQL(的なもの)にいたる全てがClojure(Clojurescript)のコードになっています。

![DB4X9FpK.png](https://qiita-image-store.s3.amazonaws.com/0/8475/a8643ac6-28e6-0b28-d8f0-c0d1675c0e3a.png)

データは[Datomic](http://www.datomic.com)に格納されます。フロントエンドはReactラッパーのomを使ってsecretaryでルーティングしています。

Voiceは[ffmpeg-asm.js](https://github.com/muaz-khan/WebRTC-Experiment/tree/master/ffmpeg) (18MBのJavascript!)を使ってクライアントサイドでエンコードします。

### さいごに

BackChannelingは簡単に構築できて、仕事で使えるよう工夫してあるつもりです。チームコミュニケーションでお悩みのみなさん是非試してみて下さい！

https://github.com/kawasima/back-channeling
avyのヒント表示（スタイル）の違いについてのメモ


[画面内を素早くカーソル移動する方法のまとめ](http://qiita.com/ballforest/items/834c92bf5bf262c37973)で紹介したように、カーソルを素早く移動させるためのパッケージとして[avy](https://github.com/abo-abo/avy)が存在している。移動先の候補となる場所にヒント文字を表示するスタイルだが、この表示スタイルは実はいくつかの選択肢から選択可能であったので、メモを残しておく。

|スタイル|説明|
|:---|----|
|at  |ヒント文字を当該場所に１字ずつ表示。ace-jump-modeのスタイル。|
|at-full|ヒント文字を当該場所にすべて表示 (デフォルト)|
|pre|ヒント文字を当該場所ではなく、当該場所の前側に表示|
|post|ヒント文字を当該場所ではなく、当該場所の後側に表示|

これらは以下のように設定する：

```el:
(setq avy-style 'at)
```

それぞれのスタイルについて、スクリーンショットを用意したほうがわかりやすいが、何より使ってみたほうが早い。スタイルにはde-bruijnという選択肢も存在するが、自分がまだ良く把握してないので列挙することは避けた。
インタラクティブにスタイルを変更したいなら以下の関数を使ってみるのもありだろう。

```el:
(defun avy-select-style ()
  "Select `avy-style' interactively."
  (interactive)
  (let ((style (completing-read
                (format "Select style (current is '%s'): " avy-style)
                '("at" "at-full" "pre" "post" "de-bruijn") nil t)))
    (setq avy-style (intern-soft style))
    (message "avy-style is set to '%s'." avy-style)))
```
JenkinsでAndroid SDKを毎日自動更新しよう

# 概容

ビルドしたらAndroid SDKがないなんてことがよくある。

JakeWhartonさんの[sdk-manager-plugin](https://github.com/JakeWharton/sdk-manager-plugin)を使えばいいじゃんって話もあるが、emulatorとかもろもろも最新にしておきたい。

そこでcron的にjobを一個登録しておくと便利だったのでメモ。

# 1. タスクの作成

適当にフリースタイル・プロジェクトのビルドで作成する

![step1_create_job.png](https://qiita-image-store.s3.amazonaws.com/0/15000/3683b0a8-1633-106b-b953-b37b159ae4ea.png)

# 2. トリガーの設定

トリガーの時間は適当に設定。
平日の早朝とかにしておくといい感じ。

![step2_build_trigger.png](https://qiita-image-store.s3.amazonaws.com/0/15000/a551fa4f-5b96-b92a-3d73-934defa20315.png)

# 3. アップデートスクリプトの設定

![step2_shell_script.png](https://qiita-image-store.s3.amazonaws.com/0/15000/f30f6472-46d7-ae71-7918-9276576c4b97.png)

スクリプトは下記のような感じ

```bash:bash
expect -c "
    set timeout -1
    spawn android update sdk --no-ui

    expect {
        \"Do you accept the license\" {
            send \"y\n\"
            exp_continue
        }
        Downloading {
            exp_continue
        }
        Installing {
            exp_continue
        }
    }
"
```

`Do you accept the license` にマッチしたら、yを送信するという単純なもの。
購読しているセキュリティ関連メーリングリスト情報

もはや恒例になっているような気もしますが、BIND9の脆弱性情報が出ましたね。各ディストリビューションではすでに修正済みパッケージが提供されていると思いますが、どうやって知るの？って聞かれたので、購読しているメーリングリストをまとめておくことにしました。RSSフィードでも良いんだけど、RSSフィード読み飛ばしがちなのでメーリングリストの方がおすすめです。

## JPCERT/CCメーリングリスト

https://www.jpcert.or.jp/announce.html (RSSフィードも提供)

- 毎週1回セキュリティ関連のトピックをまとめておくってくれる。
- 緊急性が高い場合は都度注意喚起が行われる。
- 貴重な日本語情報でしかも読みやすくまとまってて便利。


## Ruby on Rails: Security

https://groups.google.com/forum/#!forum/rubyonrails-security

- Ruby on Railsのセキュリティ情報が流れてくる。
- Railsを使っているなら入っておくと良い。
- 更新頻度はそんなに高くなく、サードパーティライブラリの情報は少ない。

## ruby-security-ann

https://groups.google.com/forum/#!forum/ruby-security-ann

- Ruby自身とgemのセキュリティ関連の情報配信。

## Node Security ([RSS](https://nodesecurity.io/rss.xml)のみ)

https://nodesecurity.io/advisories

- Node.js 用 **ライブラリー** のセキュリティアップデート情報のまとめ (Node.js 本体は含まれない)
- 必ずしも全てのライブラリーを網羅しているわけではない
- `nsp` というモジュールを使って、CI 段階で脆弱性のあるモジュールを発見することも可能

## debian-security-announce

https://lists.debian.org/debian-security-announce/

- Debianのセキュリティアップデートのアナウンス用メーリングリスト。
- DSA (Debian Security Advisory)に情報が掲載されると流れてくる。
- CVEとDSAの番号の関連づけと修正済みバージョンがわかって便利。
- Debianを使ってるなら読んでおいた方が良い。

## ubuntu-security-announce

https://lists.ubuntu.com/mailman/listinfo/ubuntu-security-announce

- Ubuntuのセキュリティアップデートのアナウンス用メーリングリスト

## centos-announce

https://lists.centos.org/mailman/listinfo/centos-announce

- CentOSのアップデート情報アナウンス用メーリングリスト
- あんまり読みやすくないので代わりを知ってたら教えて欲しい。
- いまはCentOS運用してないから購読してない。

情報まとまってるとうれしいので、購読しているメーリングリストがあったら編集リクエストください。
arduinoでスマホからLチカ

##概要
arduino unoとesp8266でwebサーバーを作って、スマホからLチカしました。 
##写真
![MVC-011S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/ff1ed2b9-05da-dda6-54a0-3252589d3f06.jpeg)
android4.2.2

![MVC-012S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/b30ec197-e9d4-aea4-ab29-3e620b4293e1.jpeg)
windows sphone

![MVC-013S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/3821cffb-e0be-8eba-6765-54096dfc334c.jpeg)
iphone

##説明
android1.6は、うまく動きませんでした。
EmacsでMarkdownプレビュー

# はじめに
[Emacs](http://www.gnu.org/software/emacs/emacs.html)の[markdown-mode](http://jblevins.org/projects/markdown-mode/)は、[Markdown](http://daringfireball.net/projects/markdown/)を編集するための[シンタックスハイライト](https://qiita-image-store.s3.amazonaws.com/0/37213/946a9687-809a-9982-3404-4b2c778f4231.png)とコマンドを提供する。
今回は、markdown-modeで編集中のMarkdownファイルをプレビューするための`markdown-command`と`markdown-open-command`の設定を紹介する。

# 動作環境
* OS X 10.7以降（Marked 2が動作するOS X）
* Emacs
* [Marked 2](http://marked2app.com)

# Emacsとmarkdown-modeのインストール
Emacsのインストールは下記のサイトを参考のこと。

* [EmacsForMacOS](http://www.emacswiki.org/emacs/EmacsForMacOS)
* [Emacs24 のインストールと新機能](http://sakito.jp/emacs/emacs24.html)

markdown-modeのインストールは下記サイトを参考のこと。

* [Emacs Markdown Mode](http://jblevins.org/projects/markdown-mode/)

なお、Emacs Lisp Packageの管理はEmacs 24から標準で添付されている[package.el](http://emacs-jp.github.io/packages/package-management/package-el.html)を使うと簡単にできる。

# ブラウザでMarkdownプレビュー
編集中のMarkdownをブラウザでプレビューするには`markdown-command`を利用する。

1. Markdownをhtmlに変換するために[Markdown](http://daringfireball.net/projects/markdown/)スクリプト、または[multimarkdown](http://fletcherpenney.net/multimarkdown/)コマンドをインストールする。（どちらか一つで可。）
    Markdownスクリプトはパスの通ったディレクトリに保存し、実行権限を与える。
    multimarkdownはHomebrewやMacPortsからインストールできる。

    Homebrew

    ```shell-session
    $ brew install multimarkdown
    ```

    MacPorts

    ```shell-session
    $ sudo port install multimarkdown
    ```

2. `.emacs`、または`~/emac.d/init.el`に以下の設定を追加する。

    Markdownスクリプトの場合

    ```el
    (setq markdown-command "(Markdownスクリプトの名前)")
    ```

    multimarkdownの場合

    ```el
    (setq markdown-command "multimarkdown")
    ```

上記を設定することで、[Markdownファイルを表示し](https://qiita-image-store.s3.amazonaws.com/0/37213/316a59d9-069c-67f0-4754-ca2ce5889f40.png)、

* `C-c C-c m`を押すと、`markdown-command`を実行し、[別バッファにhtmlファイルを出力する](https://qiita-image-store.s3.amazonaws.com/0/37213/ad33191b-70a4-3a67-343f-aa258c4a7a86.png)。
* `C-c C-c p`を押すと、`markdown-command`を実行し、[一時ファイルを生成し、ブラウザを起動する](https://qiita-image-store.s3.amazonaws.com/0/37213/17ba15ca-bbf0-5352-e50d-9aac2ca5ea8b.png)。

# Marked 2でライブアップデートMarkdownプレビュー
上記の方法でブラウザでのMarkdownプレビューは可能になるが、編集のたびに一時ファイルを生成しなければならない。このため、`markdown-open-command`を設定し、Macアプリケーションの[Marked 2](http://marked2app.com)を使って、ライブアップデートMarkdownプレビューを実現する。

1. [Marked 2](http://marked2app.com)をインストールする。
2. パスの通ったディレクトリに以下のスクリプトを保存する。

    ```shell-session
    #!/bin/sh
    
    if [ "$1" ]; then
        open -a "Marked 2" "$1";
    else
        open -a "Marked 2";
    fi
    ```

3. `.emacs`、または`~/emac.d/init.el`に以下の設定を追加する。
    なお、下の例では2で保存したスクリプトを`marked2`という名前で保存している。

    ```el
    (setq markdown-open-command "marked2")
    ```

上記を設定することで、[Markdownファイルを表示し](https://qiita-image-store.s3.amazonaws.com/0/37213/316a59d9-069c-67f0-4754-ca2ce5889f40.png)、`C-c C-c o`を押すと、[Marked 2が起動する](https://qiita-image-store.s3.amazonaws.com/0/37213/7c12b1c0-9676-315b-7d80-2c18e902f4a8.png)。ブラウザでのプレビューとは異なり、カスタムでCSSを設定でき（デフォルトで`github.css`が添付）、保存のたびにライブアップデートされ、非常に使いやすい。

# 補足
[Marked 2](http://marked2app.com)は通常\$13.99のところ、\$9.99で購入が可能（2015/09/04時点）。また、無料でのお試しも可能。
WindowsでAtomに関連付けする方法

WindowsでAtomを使い出すとちょっと困るのが関連付けの問題。

Exeファイルはあるんだけどバージョンアップの度にパスが変わっちゃうし、パスを吸収しているバッチファイルはあるんだけどそれだとアイコンがつかないしでどちらにしてもちょっとイマイチ。

で、ちょっと探してみたところいい方法が見つかったんだけど、GitHubのIssueに埋もれてる感じなのでメモがてらに紹介しておく。

[Make setting Atom as Default Editor for filetypes easier #4893][]

リンク先を見るのがわかりやすいし早いんだけど、要は

  1. [Autohotkey](http://ahkscript.org/)をインストールする
  2. Atomを起動するバッチを実行するahkスクリプトを作成
  3. スクリプトをExe化するAhk2Exeでアイコン付きのExeファイルを作成
  4. 作成したExeファイルに関連付けする

ッて感じで、簡単にいける。

うーん、これGitHubからの配布物にも入れて欲しいところだなぁ。

[Make setting Atom as Default Editor for filetypes easier #4893]: https://github.com/atom/atom/issues/4893#issuecomment-126939442
arduinoでノートPCからLチカ

##概要
arduino unoとesp8266を使って、webサーバーを作って、ノートPCのブラウザからLチカしました。
##写真
![MVC-008S.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/c8711e52-e200-8549-59ad-b85cd203feea.jpeg)
##ハイパーターミナル
![web.PNG](https://qiita-image-store.s3.amazonaws.com/0/18104/a9854a55-fc19-6ae7-ce31-514f316ccd12.png)
##サンプルコード
https://github.com/ohisama/Esp8266
##説明
ノートPCからは、wifiでesp8266に入ります。
http://192.168.4.1をIE６で開くとLEDが点灯します。
リロードすると、LEDが消灯します。
chromeは、うまく動きません。
nginxでLoadBalancer

## 参考

* [Using nginx as HTTP load balancer](http://nginx.org/en/docs/http/load_balancing.html)
* [NGINX Load Balancing | NGINX](https://www.nginx.com/resources/admin-guide/load-balancer/)

## CentOS6にインストール

* [CentOS6.xにてnginxの最新版をインストールする手順 - Qiita](http://qiita.com/utano320/items/0c0d9b84a9a28525bcb9)

```bash:centos6
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install -y nginx
service nginx start
```

## インストール直後の設定

* 長くなるのでコメントは削除してます

```nginx:/etc/nginx/nginx.conf 
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}
```

```nginx:/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
```

* /usr/share/nginx/html/index.html が 最初に使われるindex.html

## ロードバランサ設定

```nginx:/etc/nginx/nginx.conf
http {
    upstream backend {
        server yahoo.co.jp;
        server google.co.jp;
        server 192.168.0.4;
    }
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}
```

nginxに何度かアクセスすると、yahoo, google, 192.168.0.4 のWEBページが表示されることを確認。

さらなる情報はマニュアル参照
github-flow


git-flow は複雑で苦労だったので。github-flowなるものは簡単。

### 基本

* リリース可能なブランチは master のみ!

* 開発は全て **最新の** masterからブランチを作成する

```
git pull origin master
git checkout -b feature master
```

* 作成したブランチはローカルコミット後、定期的にリモートにpushする 

```
git push origin feature
```

* 完了後masterへの Pull(Merge) Request を送る


### 原則禁止事項

* ソース修正していきなり master に push

```
git push origin master
```

リモートリポジトリのmasterブランチは管理者以外はpush禁止にしたほうがよい。

さらに事故防止設定

```
git config --global --add push.default nothing
```

### 補足

* masterの変更を取り込むのは rebase

```
git rebase master
```

ブランチ側のコミットが変わってしまうのが恐いケースならば merge

```
git merge master
```
RailsのログをFluentdでtailしてslackへ通知

# td-agentのインストール

http://docs.fluentd.org/articles/install-by-rpm

## 関連プラグインのインストール

`/usr/sbin/td-agent-gem install fluent-plugin-slack`
`/usr/sbin/td-agent-gem install fluent-plugin-rewrite-tag-filter`

# ログのtail

ログフォーマットはRailsのフォーマッターで出力される標準のものです。

```config/environments/production.rb
config.log_formatter = ::Logger::Formatter.new
```

```log/production.log
E, [2015-09-04T07:03:14.772738 #18058] ERROR -- : undefined method `hoge' for nil:NilClass
```

FATALエラーとかでトレース情報が複数行出力されることがあるので、multilineでtailします。

```/etc/td-agent/td-agent.conf
<source>
  type tail
  path /rails-root/log/production.log
  pos_file /var/log/td-agent/production.log.pos
  tag rails.raw
  format multiline
  format_firstline /^.,/
  format1 /^., \[(?<time>[^\.]+).+\][ ]+(?<level>[^ ]+) -- :(?<message>.*)$/
  time_format %Y-%m-%dT%H:%M:%S
</source>
```

format_firstlineに最初の行を判定する正規表現を指定し、format1以降に各行の条件を指定します。
multilineの詳しい使い方は公式ドキュメントにも載ってます。
http://docs.fluentd.org/articles/in_tail

今回はファイルに吐き出したログをtailしていますが、以下のgemを用いたほうがいいかもですね。
https://github.com/actindi/act-fluent-logger-rails

# ログの選別

fluent-plugin-rewrite-tag-filterを用いてERRORとFATALのみ通知するようにします。
https://github.com/fluent/fluent-plugin-rewrite-tag-filter

```/etc/td-agent/td-agent.conf
<match rails.raw>
  type rewrite_tag_filter
  rewriterule1 level ERROR rails.error
  rewriterule2 level FATAL rails.error
  rewriterule3 level INFO  rails.info
  rewriterule4 level .+  clear
</match>
<match clear>
  type null
</match>
```

# slackへ通知

fluent-plugin-rewrite-tag-filterでエラーのラベルが付いたものをslackへ通知します。
https://github.com/sowawa/fluent-plugin-slack

IncomingWebHookのキー発行は以下から。
https://xxx.slack.com/services/new

```/etc/td-agent/td-agent.conf
<match rails.error>
  type slack
  webhook_url https://hooks.slack.com/services/*********/********/*********
  channel alert
  username Alert
  icon_emoji :ghost:
  flush_interval 60s
  message_keys level,message
  message "[%s] %s"
</match>
```
そろそろ node.js v4 が出る？

出ました！

- [Node v4.0.0 (Stable) | Node.js](https://nodejs.org/en/blog/release/v4.0.0/)

メモ用のブックマークを晒しておく

- [4.0 is the new 1.0 — Node & JavaScript — Medium](https://medium.com/node-js-javascript/4-0-is-the-new-1-0-386597a3436d)
- [Node.jsとio.jsの最初の統合リリース「Node.js 4.0」が9月に登場予定 － Publickey](http://www.publickey1.jp/blog/15/nodejsiojsnodejs_409.html)
- [Node.js v4がリリースされたらコードの書き方でどこが変わるか？ - なっく日報](http://yukidarake.hateblo.jp/entry/2015/08/17/190622)
- [そろそろnode.jsにarrow functionが来る！ - Qiita](http://qiita.com/devneko/items/ec3b72ed6daa622f1e45)

おまけ

- [YAPC::ASIA 2015で「どうしてこうなった？ Node.jsとio.jsの分裂と統合の行方。これからどう進化していくのか？」というタイトルで発表してきた。 - from scratch](http://yosuke-furukawa.hatenablog.com/entry/2015/08/24/152147)
bash - 隠しファイルのみ表示


通常`ls`コマンドに`-a`オプションをつけて実行すれば隠しファイル **も** 列挙してくれる。

が、隠しファイルになっているコンフィグ系ファイルもそれ以外のファイルフォルダもがたくさんあるホームディレクトリなどで`ls -la`とやるとページャにパイプするかマウスホイールでスクロールしないと隠しファイルが確認出来ないことがままあってモヤモヤしてた。

追記：heliac2000 さんにもっとシンプルな方法を教えて貰ったのでそちらをここに追記。

```bash
$ ls -ld .*
```
追記ここまで。 

結論としてはこれでいけた。

```bash
$ ls -ld `ls -a | grep -e "^\..\+$"`
```

エイリアスに設定しようと思ったがエスケープ関係がわけわかめになるので関数定義した。

```bash:.bash_profile
function llaa() {
    ls -ld `ls -a | grep -e "^\..\+$"`
}
```

行末指定の`$`は要らないかな。
Bootstrap 4 alpha使ってみた

## src

* [Introduction · Bootstrap](http://v4-alpha.getbootstrap.com/getting-started/introduction/)

```html:読み込みするだけの場合
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
```

```html:html例
<!DOCTYPE html>
<html lang="en">
  <head>
    <!-- Required meta tags always come first -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="x-ua-compatible" content="ie=edge">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous">
  </head>
  <body>
    <h1>Hello, world!</h1>

    <!-- jQuery first, then Bootstrap JS. -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js" integrity="sha384-vZ2WRJMwsjRMW/8U7i6PWi6AlO1L79snBrmgiDpgIWJ82z8eA5lenwvxbMV1PAh7" crossorigin="anonymous"></script>
  </body>
</html>
```

## パーツ設置

* [CSS · Bootstrap](https://getbootstrap.com/css/)

```html:
<!--Bootstrap４に必要なCSSとJavaScriptを読み込み-->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
<style>
.center-block() {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.container {
  width: @width;
  .center-block();
}
</style>

<!--タブコンポーネントを使ってHTMLコーディング-->
<div>
  <!--タブのボタン部分-->
  <ul class="nav nav-tabs container">
    <li class="nav-item col-md-5">
        <a href="#tab1" class="nav-link bg-primary" data-toggle="tab">タブ1</a>
    <li class="nav-item col-md-5">
        <a href="#tab2" class="nav-link bg-primary" data-toggle="tab">タブ2</a>
  </ul>
  <!--タブのコンテンツ部分-->
  <div class="tab-content">
    <div id="tab1" class="tab-pane active" >
        <img class="col-md-10" src="http://jsrun.it/assets/8/I/s/O/8IsOW.jpg">
    </div>
    <div id="tab2" class="tab-pane" >
        <img class="col-md-10" src="http://jsrun.it/assets/6/6/k/e/66keT.jpg">
    </div>
  </div>
</div>

<div class="row">
  <!--10列幅分のボックス-->
  <div class="col-xs-10 bg-primary">10列</div>
</div>

<div class="row">
  <!--7列幅分のボックス-->
  <div class="col-xs-7 bg-success">7列</div>
  <!--5列幅分のボックス-->
  <div class="col-xs-5 bg-info">5列</div>
  <div class="alert alert-success" role="alert">aa</div>
</div>
```
そろそろnode.jsにarrow functionが来る！

そろそろリリースされるはずの Node.js v4.0.0 からarrow functionが使えるようになります！
V8 4.5がマージされると使えるようになるそうです。
https://github.com/nodejs/node/pull/2682

arrow function というのはクロージャを記述する新しい構文のことです。
こんな感じで書けます。
```js
(a,b) => { return a + b; }
```

楽しみですね。
Javaの差分リスト

２つのArrayList、Setなどの差分を取りたい際の自分用の備忘録。

(ArrayList, Set) a1, a2;
a1.removeAll(a2)
a2.removeAll(a1)
の形でa1-a2, a2-a1の差分リストを取得可能。a1, a2はCollection型であれば型が一致している必要はない。

以下実験コードと結果。

コード:

```
ArrayList<String> arr1 = new ArrayList<String>() {
	private static final long serialVersionUID = 1L;
	{
		add("a");
		add("b");
		add("c");
		add("d");
		add("e");
	}
};

ArrayList<String> arr2 = new ArrayList<String>(arr1);
arr2.remove(0);
arr2.remove(0);
arr2.add("f");

System.out.println("arr1");
for (String s : arr1) {
	System.out.println(s);
}
System.out.println("--------");

System.out.println("arr2");
for (String s : arr2) {
	System.out.println(s);
}
System.out.println("--------");

System.out.println();

ArrayList<String> subArr1 = new ArrayList<String>(arr1);
subArr1.removeAll(arr2);
System.out.println("subArr1");
for (String s : subArr1) {
	System.out.println(s);
}
System.out.println("-------");

ArrayList<String> subArr2 = new ArrayList<String>(arr2);
subArr2.removeAll(arr1);
System.out.println("subArr2");
for (String s: subArr2) {
	System.out.println(s);
}
System.out.println("-------");

System.out.println();

Set<String> set1 = new HashSet<String>();
set1.add("a");
set1.add("b");
set1.add("c");
set1.add("d");
set1.add("e");

Set<String> set2 = new HashSet<String>(set1);
set2.remove("a");
set2.remove("b");
set2.add("f");

System.out.println("set1");
for (String s : set1) {
	System.out.println(s);
}
System.out.println("--------");

System.out.println("set2");
for (String s : set2) {
	System.out.println(s);
}
System.out.println("-------");

System.out.println();

Set<String> subSet1 = new HashSet<String>(set1);
subSet1.removeAll(set2);
System.out.println("subSet1");
for (String s : subSet1) {
	System.out.println(s);
}
System.out.println("-------");

Set<String> subSet2 = new HashSet<String>(set2);
System.out.println("subSet2");
subSet2.removeAll(set1);
for (String s: subSet2) {
	System.out.println(s);
}
System.out.println("-------");

System.out.println();

ArrayList<String> subArrWithSet = new ArrayList<String>(set1);
subArrWithSet.removeAll(arr2);
System.out.println("subArrWithSet");
for (String s : subArrWithSet) {
	System.out.println(s);
}
System.out.println("-------");
```

結果 :

```
arr1
a
b
c
d
e
--------
arr2
c
d
e
f
--------

subArr1
a
b
-------
subArr2
f
-------

set1
a
b
c
d
e
--------
set2
c
d
e
f
-------

subSet1
a
b
-------
subSet2
f
-------

subArrWithSet
a
b
-------
```
c++ > 変換演算子 > あるオブジェクトを自動的に別の型に変換する方法を定義するもの > operator const char *{} { return mBuffer; }

引用: C++のためのAPIデザイン by マーティン・レディ
6.5 演算子のオーバーロード
6.5.5 変換演算子

> 変換演算子とは、あるオブジェクトを自動的に別の型に変換する方法を定義するものだ。典型的な例として、カスタム文字列クラスを定義して、標準Cライブラリのstrcmp()やstrlen()など、const char *ポインタを受け取る関数に渡す方法がある。

## 本のコード

```cpp
class MyString
{
public:
  MyString(const char *string);
  
  // MyStringをCスタイルの文字列に変換する
  operator const char *{} { return mBuffer; }

private:
  char *mBuffer;
  int mLength;
};

// MyStringオブジェクトは自動的にconst char*に変換される
MyString mystr("Haggis");
int same = strcmp(mystr, "Edible");
int len = strlen(mystr);
```

## コードの疑問

上記のコードでよくわからないのは、mBufferをchar*型にしている点。
つまりは、return mBufferする前に、コンストラクタで受け取ったstringをどこかでchar*型に変換しないといけないということになるのだろう。

ideoneで実装してみた。
http://ideone.com/rHfigu

コンストラクタとデストラクタで以下の定義を追加したところ、sameとlenを出力できたが、これが、著者が本来考えていたコードなのか疑問である。

```cpp
MyString::MyString(const char *string)
{
  mBuffer = new char[10];
  strcpy(mBuffer, string);
}

MyString::~MyString()
{
	delete [] mBuffer;
}
```

...

よく見たらstringというもの自身が char *型だった。
ということで疑問は解決した。

stringという名前の変数をstringという型と勘違いしていた。
技術英語 > make room:場所を空ける / make a room:部屋を作る / make the bed

引用: 冠詞マスター教本 by 石井隆之さん

> (a) make room for a person : 人のために場所を空ける
> (b) make a room for a person : 人のために部屋を作る

<hr>
https://github.com/adrozdenko/accountancy/blob/71d34d46b88b918c25c39bbbdc0a686fdb148815/web-app/assets/css/app.css

>`/*make room for navbar*/`

cssなどで位置調整にmake roomを使っている人がいる。

<hr>

ふと疑問に思ったので調べたもの

http://ejje.weblio.jp/content/make+the+bed
> (起床後)ベッドを整える[整頓する]; 床をとる.

この場合は the が付いている。

<hr>
Quaggaインストールしてospfdを起動してみた

## 参考

* [Quaggaを使ってLinuxサーバで動的ルーティング - 元RX-7乗りの適当な日々](http://d.hatena.ne.jp/rx7/20140108/p1)

## インストール

```bash:
yum install -y quagga telnet
cd /etc/quagga/
cp ospfd.conf.sample ospfd.conf
service zebra start
service ospfd start
```

## 接続

```bash:ポート番号確認
# nestat -anp
tcp    0    0 127.0.0.1:2601    0.0.0.0:*     LISTEN    71/zebra
tcp    0    0 127.0.0.1:2604    0.0.0.0:*     LISTEN    94/ospfd
```

```bash:
telnet localhost 2604
```

* ospfd.conf で指定しているpassword: `zebra` でログイン。
* `en` はパスワード指定していないので空。

```bash:
# telnet localhost 2604
Password: zebra
ospfd> en
ospfd# sh run

Current configuration:
!
hostname ospfd
password zebra
log stdout
!
!
!
interface eth0
!
interface lo
!
line vty
!
end
```

この`show run`の結果と`/etc/quagga/ospfd.conf`を照らしあわせてみるとコメントアウト以外一致する。
`conf t`などで設定できるが、`ospfd.conf`に直接設定を書くのも良い。


## トラブル例

> service zebra start
> Starting zebra: privs_init: initial cap_set_proc failed [FAILED]
> service ospfd start
> Starting ospfd: privs_init: initial cap_set_proc failed [FAILED]

* [Quagga in docker - Google グループ](https://groups.google.com/forum/#!topic/docker-user/7z4ITMrSaFo)

`docker run` で `--privileged`オプションが必要。
なおdockerでospf設定したが、show ip route が以下の結果となったので今回は諦めた。

```bash:
> show ip ospf route 
============ OSPF network routing table ============

============ OSPF router routing table =============

============ OSPF external routing table ===========
```

```bash:成功しなかったsh&nbsp;run
# sh run
Current configuration:
!
hostname ospfd
password zebra
log stdout
!
!
!
interface eth0
!
interface lo
!
router ospf
 redistribute connected
 network 192.168.1.0/24 area 0.0.0.0
!
line vty
!
end
```
Qiita以外のNode.jsサイトリンク集


###概要・公式サイト等
[Wikipedia - Node.js　日本語](https://ja.wikipedia.org/wiki/Node.js)
[Wikipedia - Node.js　英語](https://en.wikipedia.org/wiki/Node.js)

[公式ウェブサイト（英語） Node.js](https://nodejs.org/en/)

[Node.js 日本ユーザグループ](http://nodejs.jp/)


[Node.js とは一体何か？　IBM](https://www.ibm.com/developerworks/jp/opensource/library/os-nodejs/)

###2015年
[いまアツいJavaScript！ゼロから始めるNode.js入門〜5分で環境構築編〜](http://liginc.co.jp/web/programming/node-js/85318)

[Node.jsとgulpをインストールして使うまでの入門記事 Win/Mac対応](http://commte.net/blog/archives/5283)

[いまさら聞けないNode.jsの基礎知識とnpm、Gulpのインストール (1/2)](http://www.atmarkit.co.jp/ait/articles/1501/09/news040.html)

[TypeScriptで始めるNode.js/io.js入門](http://ics-web.jp/lab/archives/4682)

###2014年
[ Node.js入門 (全16回) ドットインストール](http://dotinstall.com/lessons/basic_nodejs)

###2013年

###2012年
[基礎から学ぶNode.js](http://gihyo.jp/dev/serial/01/nodejs)

[JavaScriptでWebアプリを開発できる「Node.js」活用入門](https://osdn.jp/magazine/12/04/11/0618228)

###2011年
[第一回 Node.jsでどんなことができる？](http://mdlab.jp/project/node_js/01.html)

###2010年～2012年
[連載インデックス「Node.jsでサーバサイドJavaScript開発入門」　等](http://www.atmarkit.co.jp/fwcr/index/index_nodejs.html)

###その他
[Node.jsとio.jsの最初の統合リリース「Node.js 4.0」が9月に登場予定](http://www.publickey1.jp/blog/15/nodejsiojsnodejs_409.html)
nodebrewの環境でcapistranoからnpm installする

## 経緯

ローカルの開発環境は[nvm](https://github.com/creationix/nvm)と[avn](https://github.com/wbyoung/avn)の組み合わせを使ったりしているのですが、サーバにはシンプルな[nodebrew](https://github.com/hokaccha/nodebrew)の方が安心できると思って導入しました。
しかしデプロイ時に`npm install`されるよう[capistrano-npm](https://github.com/capistrano/npm/)を入れて試してみるとPATHが通っていないのでそのままでは動きません。

## そこで [capistrano-nodebrew](https://github.com/kuy/capistrano-nodebrew) を使います

意外にもまだなかったので作りました。`capistrano-rbenv`をベースにしています。
使い方は`capistrano-rbenv`や`capistrano-nvm`と変わりません。
対応しているcapistranoは3.1以降です。もし3.0系でも動いたら教えて下さい。

```
# Capfile
require 'capistrano/nodebrew'

# config/deploy.rb
set :nodebrew_type, :user # or :system, depends on your nodebrew setup
set :nodebrew_node, 'io@v2.5.0'

set :nodebrew_map_bins, %w{npm node iojs} # default values
set :nodebrew_roles, :all # default value
```
Jekyllを試してみよう

## はじめに

GitHub PagesというホスティングサービスでJekyllが使えるということなので、Jekyllを試してみようと思います。

この記事では、Jekyllのローカル環境構築と動作確認を紹介します。

要約すると、次のようなコマンドラインになります。

```
$ gem install jekyll
$ jekyll new my-awesome-site
$ cd my-awesome-site
$ jekyll serve
# => Now browse to http://localhost:4000 
```

[Jekyll • Simple, blog-aware, static sites](http://jekyllrb.com/)

環境をあまり汚したくないので、gemの--install-dirを使ってローカル環境を構築してみます。

OSXであれば、Rubyをインストールする必要はありませんので、Rubyのインストールは省略します。

## ローカル環境構築

#### Jekyll

次のコマンドラインでJekyllをインストールします。

```
$ mkdir jekyll
$ cd jekyll
$ gem install --install-dir . jekyll
$ cd ..
```

ここで`jekyll new my-awesome-site`を実行しても失敗します。少し設定が必要になります。

#### PATH

まず、jekyll/binにjekyllがあるのでPATHを通します。

```
$ export PATH=$PATH:~/path/to/jekyll/bin
```

#### GEM_PATH

次に、GEM_PATHを指定します。

```
$ export GEM_PATH=~/path/to/jekyll
```

GEM_PATHについては、こちらの記事を参考にしました。

- [Rubyが参照してるgemのパスやインストール済gemを確認する方法 - Qiita](http://qiita.com/h5y1m141@github/items/74029cab9706971c8dbe)

無事、ローカル環境が構築できました。

## 動作確認

次のコマンドラインで、プロジェクトを作成して、サーバを起動します。

```
$ jekyll new my-awesome-site
$ cd my-awesome-site
$ jekyll serve
```

![スクリーンショット 2015-09-04 0.40.33.png](https://qiita-image-store.s3.amazonaws.com/0/29884/0ea9bc41-60b4-bc07-b0d4-5a104cddf683.png)

## まとめ

Jekyllのローカル環境構築と動作確認を紹介しました。

とりあえず、触ってみたという感じです。

もう少し触ってみないとなんともいえませんが、RSS, Email, SNS連携が使えそうな感じで、便利そうです。

GitHub PagesでJekyllを使うためにはもう少し調査が必要ですが、ひとまずここまで。
cygwinやmsysでvagrantが固まる時


cygwinやmsys2,msysnなどminttyな環境で一部の対話型のコマンドがうまく動かないというのは有名な話。
で、端末の話は詳しくないので理由は分からないが、なぜかvagrantもこの問題に引っかかる。対話といってもy/nとか1,2,3とか選ぶだけなんだから普通にstdinから読んでくれればいいのに。
upする時のnic選択やdestroyの確認とかで、固まったり終了したり。

そんな時は
```shell-session
$ pacman -S winpty
```

等でwinptyをインストールし、bashrcやzshrcに

```bash:.bashrc
if [ -x /usr/bin/winpty ]; then
    alias vagrant="winpty vagrant"
fi
```
としておくと幸せになれる。
React が分からないポエム

追記
まあ自分の好きなように使ってみる。

-- 

React が全然わからない。
みんな言っていることが違う気がする。
それに関しては、僕の調べ方が悪い可能性が高そうなんだけど
そもそも公式の action, dispatcher, store って何なんだよ感がある。

最初に僕が感じた

ステートレスなサーバサイドのアプリと似たような構成で書けて便利。

っていうのはそこまで喧伝されていないように感じる。

普通の Web アプリケーションは、URL があって、DB があってビューがあって、
DB の状態によっては当然変わるんだけど、毎回ビューを作り直すから楽チン。

React はこんな感じにしようとしていると思っていたが、なんか Store から飛んでくるイベントを拾っておのおのビューが state を更新するんです。みたいなことを言ってる人が多い。

なんで state を更新するのか理解できない。Store の内容からでビューを生成しろ。

React は Store の変更があったら常に RootElement から再描画するように書けばいいのだと思っているんだけどこの認識はあってるんだろうか。

ていうか、新しい名前が出てくるけど既存の Web アプリの語彙から取って来てくれた方が嬉しいしみんな助かる気がする。なんだよ action, store, dispatcher て。

正直あんまり調べてないからもっと調べる。
Xcode7 beta6 警告が消えない Directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/Developer/Library/Frameworks'

Xcode6からXcode7に移行していると下記の警告が消えずはまったので情報共有します。
![スクリーンショット 2015-09-03 23.45.53.png](https://qiita-image-store.s3.amazonaws.com/0/89206/121c2673-6b39-8a05-c383-78579b6bade2.png)

**解決策**
Framework Search PathsからiPhoneos/Developer/Library/Frameworksを削除すると消えました。
![スクリーンショット 2015-09-03 23.54.13.png](https://qiita-image-store.s3.amazonaws.com/0/89206/2b267577-fd30-ee55-c702-449e91ce5ea6.png)

**手順** ex)アプリ名が「FreeHand」の場合
①TARGETS → FreeHandTests → Build Setting → search pathsで検索
![スクリーンショット 2015-09-03 23.58.36.png](https://qiita-image-store.s3.amazonaws.com/0/89206/04386591-1d6b-6376-b34e-b315cc23e103.png)

②iPhoneos/Developer/Library/Frameworksをダブルクリック → 左下のーから削除します
![スクリーンショット 2015-09-04 0.04.28.png](https://qiita-image-store.s3.amazonaws.com/0/89206/638018d0-7899-51f5-aa02-dedc97205dd1.png)

③Product → Cleanします 
![スクリーンショット 2015-09-04 0.06.55.png](https://qiita-image-store.s3.amazonaws.com/0/89206/799d69cf-604b-ae4b-9bd5-e08a1d53a289.png)

④ビルドしてください。警告が出てこないのが確認できるかと思います。
![スクリーンショット 2015-09-04 0.07.47.png](https://qiita-image-store.s3.amazonaws.com/0/89206/900700c0-ec44-db42-5e9c-b4445c40111c.png)

**最後に**
少しでもお役に立てればと思い記載しました。
Xcode7に対応するのは大変ですが、新しい構文によりコードが短くなるのはいいですね。
個人的にはguardが良いなと思っています。
今回例として出した[FreeHand](https://itunes.apple.com/jp/app/shinpurunao-huikakiapuri-freehand/id1029889631?mt=8)のアプリは[こちら](https://itunes.apple.com/jp/app/shinpurunao-huikakiapuri-freehand/id1029889631?mt=8)からダウンロードできます。
他にもアプリリリースしていますので興味のある方がいれば[こちら](http://hideyukitone.blog.fc2.com/blog-entry-41.html)からどうぞ。
POH6 C# 解答

ネタバレのため、paizaオンラインハッカソン6問題をまだやってない人は見ないことをお勧めする。
POH6+は明日以降。


#緑川つばめ
コメントするようなこともない。

```csharp

public class Hello{
public static void Main(){
// 自分の得意な言語で
// Let's チャレンジ！！
var N = int.Parse(System.Console.ReadLine());
System.Console.WriteLine(N+N%10+N/10);
}
}
```

#霧島京子
一番面倒ではあった。処理終了条件を付けられるけど、なくても最短時間っぽいのでそのままとした。
読み込んだ数列のint配列化が1行で出来るようになったのはありがたい。

```csharp
using System;
using System.Linq;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            bool[] map = new bool[N];   //  到達可能マップ
            int goal = N-1;
            map[goal] = true;
            var t = Console.ReadLine().Split(' ').Select(k => int.Parse(k)).ToArray();
            for (int j = 0; j < (N - 2); j++) {
                for (int i = 1; i < goal; i++)
                {
                    var index = t[i] + i;
                    if (!map[i] && index < N && index > 0 && map[index])
                    {
                        map[i] = true;
                    }
                }
            }
            int m = int.Parse(Console.ReadLine());
            for (int i = 0; i < m; i++)
            {
                var d = int.Parse(Console.ReadLine());
                Console.WriteLine((d < N && map[d]) ? "Yes" : "No");
            }
        }
    }
}
```

#六村リオ
誤差問題。3の時の計算を単純化出来ればよいのだろう。
コーヒー総量は整数で求められることを利用し、飲んだとき水の量だけ計算し続けるようにした。
分母が整数で誤差がなくなったのでおそらく正解だろう。
総量-水=粉　なので水か粉のどちらか分かっていれば答えは求まる。

```csharp
using System;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            double coffee = 0, water = 0;
            int weight = 0;
            int N = int.Parse(Console.ReadLine());
            for (int i = 0; i < N; i++)
            {
                var r = Console.ReadLine().Split(' ');
                var t = int.Parse(r[0]);
                var s = int.Parse(r[1]);
                switch (t)
                {
                    case 1:
                        water += s;
                        weight += s;
                        break;
                    case 2:
                        weight += s;
                        break;
                    case 3:
                        water = water * (weight - s) / weight;
                        weight -= s;
                        break;
                }
            }
            coffee = weight - water;
            int ans = (int)(coffee * 100.0 / weight);
            Console.WriteLine(ans);
        }
    }
}
```
本番ビルド時にNSDataオブジェクトをAnyObject?受け取るとnilになる


### 前提
- 本番環境(Release)
- NSDataオブジェクトをAnyObject?で受け取るメソッドを定義している

### 事象
- AnyObject?でNSDataオブジェクトを受け取ると、受け取った値が ***nil*** になる

### サンプル(上記事象が発生するコード)
本番環境(Release)ビルドで以下のコードをコンパイルすると、dataの値がnilとなる

``` swift
var str = "Hello";
// String to NSData
let data = str.dataUsingEncoding(NSUTF8StringEncoding)
sampleMethod(data)

func sampleMethod(data: AnyObject?) {
	var out: String = NSString(data:data, encoding:NSUTF8StringEncoding)
	println("data:\(data)")
}
```


### 対策
受け取るデータ型をNSData?にする。

``` swift
func sampleMethod(data: NSData?) {
	println("data:\(data)")
}
```
PHPを学習中に購入した本


私がPHPの学習を始めた当初（およそ８年前）に購入した書籍なので、今時点で購入をお勧めするものではありません。むしろ、造反されていないものは内容も古いものでしょうから、決して購入してはいけません。

これから学習を始める方にとって、書籍選びの一助になればと思います。

[導入効果バツグン! PHP5.0+MySQL5.0で構築する最速Webシステム](http://www.amazon.co.jp/%E5%B0%8E%E5%85%A5%E5%8A%B9%E6%9E%9C%E3%83%90%E3%83%84%E3%82%B0%E3%83%B3-PHP5-0-MySQL5-0%E3%81%A7%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B%E6%9C%80%E9%80%9FWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0-%E6%98%9F%E9%87%8E-%E5%8A%AA/dp/4774127078/ref=pd_sim_sbs_14_2?ie=UTF8&refRID=13052WEYYK8CHCSWZ08N)

活用度：4/5

これは一番最初に購入した書籍なので、結構活用しました。

[速攻&活用! Web開発者のためのPHPベストサンプル集](http://www.amazon.co.jp/%E9%80%9F%E6%94%BB-%E6%B4%BB%E7%94%A8-Web%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEPHP%E3%83%99%E3%82%B9%E3%83%88%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E9%9B%86-%E6%98%9F%E9%87%8E-%E5%8A%AA-x/dp/477413175X/ref=sr_1_155?s=books&ie=UTF8&qid=1441186521&sr=1-155&keywords=php)

活用度：3/5

スニペットがたくさん。

[Smarty入門‾PHP＋テンプレート・エンジンでつくるMVCアプリケーション](http://www.amazon.co.jp/Smarty%E5%85%A5%E9%96%80%E2%80%BEPHP%EF%BC%8B%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%83%BB%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8BMVC%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E2%80%BE-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4798108839/ref=pd_sim_sbs_14_2?ie=UTF8&refRID=01389ZBD6S2HSH2367SP)

活用度：2/5

公式リファレンスがあればいいかな。この本のせいで、SMARTYをフレームワークの一種と勘違いする初学者が多いのではないかと思う。SMARTY使えばMVCとなるわけではない。

[今日からつかえるPHP5サンプル集](http://www.amazon.co.jp/%E4%BB%8A%E6%97%A5%E3%81%8B%E3%82%89%E3%81%A4%E3%81%8B%E3%81%88%E3%82%8BPHP5%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E9%9B%86-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4798009458/ref=sr_1_319?s=books&ie=UTF8&qid=1441186760&sr=1-319&keywords=php)

活用度：3/5

スニペットがたくさん。
GitHubからHorizontalListViewのプロジェクトを取ってきた話


##目的
水平方向にスワイプして次のViewを出したい。その検証。

##記録
HorizontalListViewを使ったアプリのクローンを作ります。

GitHubにあるアプリを使わせていただきました。
https://github.com/MeetMe/Android-HorizontalListView

参考：
クローンの作り方
http://qiita.com/tesoro/items/5f27a8c4e2c4ae1b2bdb

##注意
AndroidStudioでクローンを作ると、エラーが出ますので、
javaやxmlのpackage名を変更するとエラーがなくなります。

##感想
画面は一見どこをスワイプするのか分かりませんでしたが、全部で三ヶ所スワイプできます。
すてきです。
ぐぐった時に、わ～英語だ、と思わずに少し見てみるとただのGitHubで安心しました。
rsync, wget, curl, scp に速度制限をかける方法まとめ

数GBのバックアップファイルをネットワーク上のストレージへコピーする際にrsyncを使用しているのだが、あるタイミングから毎回IOエラーが発生するようになった。

```
rsync error: error in file IO (code 11) at receiver.c(389) [receiver=3.1.0]
```

code 11 は例えばコピー先の容量が一杯のときなどにでるようだが（[参考](http://faq.buffalo.jp/app/answers/detail/a_id/2633)）
転送先のストレージの空き容量などは特に問題なく、HDDもある程度新しいため壊れたとも考えにくい状態。

その後対応を調べたところ、転送速度をある程度絞るとエラーが発生しなくなった。

# rsync `--bwlimit` オプションを設定

rsyncの帯域制限をかけるには、以下のように設定する。単位は kB/sec。

```bash
# 転送速度を 1MB/sec に設定
rsync --bwlimit=1024 <送信元> <送信先>
```

今回はエラーの対処のために行ったが、主にサーバーの負荷を下げる用途に使用するらしい。

# その他のコマンドでも帯域制限をかける
## wget

```bash
# 単位は byte/sec, 例は 1MB/sec
wget --limit-rate=1024k http://XXXXXXXXXXXXXXXXXXXX
wget --limit-rate=1m http://XXXXXXXXXXXXXXXXXXXX
```

## curl

```bash
# 1024k, 1m などで指定できるらしい、例は 1MB/sec
curl --limit-rate 1m http://XXXXXXXXXXXXXXXXXXXX
```

## scp

```bash
# 単位は Kbit/sec
scp -l 8192 root@hoge.com:/foo/bar.txt .
```

# 参考

+ [rsyncで帯域制限をかける (rsync bwlimit)](http://tech.clickyourstyle.com/articles/280)
+ [wgetやscpに帯域制限をかける](http://d.hatena.ne.jp/isher/20080817/1218996948) 
+ [Manual -- curl usage explained](http://www.hcn.zaq.ne.jp/___/unix/curl_manual.html#SPEED-LIMIT)
JavaFXでウィンドウ最大化

ウィンドウを最大化したい場合、
StageクラスのsetMaximizedメソッドを使用する。

```Hoge.java
public class Hoge extends Application{
	public static void main(String[] args){
		Application.launch(args);
	}
	
	@Override
	public void start(Stage stage) throws Exception {
		//Stage
		stage.setScene(new Scene(new AnchorPane(), 700, 500));
		stage.setMaximized(true);

		stage.show();
	}
}
```
WordPressの簡易CSVエクスポートメモ

WordPressの簡易CSVエクスポート。拡張フィールド対応。

```php:functions.php
/**
 * 何もしない
 */
function my_dummy() {
}

/**
 * サブメニュー登録(Export CSV)
 */
function my_register_custom_submenu_page() {
	// tools.php は不要。
	add_submenu_page( 'tools.php', 'Export CSV', 'Export CSV', 'manage_options', 'my-export-csv','my_dummy');
}
add_action('admin_menu', 'my_register_custom_submenu_page');

/**
 * CSVエクスポート
 */
function my_export_csv() {

	// ID, タイトルと拡張フィールド
	$fields = array('ID','post_title','zip','pref','city','tel');
	$fp = fopen('php://temp','r+');
	$q = new WP_Query(array(
		'nopaging'=>1,
		'orderby'=>'ID',
		'order'=>'ASC',
	));

	fputcsv($fp, $fields, ',', '"');
	if ($q->have_posts()) :
	while($q->have_posts()) : $q->the_post();
        	$data = array();
		foreach ($fields as $fld) :
		switch($fld) :
		case 'ID' : $data[] = get_the_ID();break;
		case 'post_title':$data[] = get_the_title(); break;
		default :
			// 拡張フィールド
			$v = get_field($fld);
			if (is_array($v)) :
				$data[] = join($v,',');
			else :
				$data[] = $v;
			endif ;
		endswitch;
		endforeach;
		fputcsv($fp, $data, ',', '"');
	endwhile;
	endif;
	wp_reset_postdata();

	header('Content-Type: text/csv');
	header('Content-Disposition: attachment; filename=export.csv');
	rewind($fp);

	while (($buf = fgets($fp)) !== false) :
		echo mb_convert_encoding($buf,'SJIS-win',mb_internal_encoding());
	endwhile;

	fclose($fp);
}

/**
 * アドミン初期時
 * page=my-export-csvがあれば、EXPORT処理
 */
function my_admin_init(){
	$page = isset($_GET['page']) ? $_GET['page'] : '';
	if ($page === 'my-export-csv') :
		my_export_csv();
		exit();
	endif;
}
add_action('admin_init', 'my_admin_init');
```
React向けのアーキテクチャパターン - Flux

Fluxの概念について勉強してみたかったので、色んな記事を読み漁り自分なりにまとめてみた。

Fluxの要素
１、View(ReactComponent)
２、Action
３、Dispatcher
４、Store

とりあえずこの４つを覚えればよいらしい。

## １、View(React)
・Storeのデータを表示する。いわゆるView

## ２、Action
・ユーザーが行った操作がAction経由でDispatcherに届けられる。

## ３、Dispatcher
・Actionを受け付けて登録されたcallbackを実行し、Storeにイベントを通知する。すべてのデータは一旦Dispatcherを通る。

## ４、Store
・アプリケーションのデータと、ビジネスロジックを担当する。Storeのデータが更新された場合、changeイベントを発行してReactのコンポーネントツリーに更新を通知する。


![flux-diagram-white-background.png](https://qiita-image-store.s3.amazonaws.com/0/74237/50a2e08a-7630-6372-da89-b3763bdad73e.png "flux-diagram-white-background.png")
https://github.com/facebook/flux
↑よくある図


### 処理の流れ
・Viewで発生したユーザーの操作がActionを経由してDispatcherを呼び出す。
・DispatcherのコールバックとしてStoreの処理を呼び出す。
・Storeは処理が終わるとChange Eventをemitする。
・ViewはStoreのChange Eventをlistenしていて、Change Eventを受け取ると自身のstateを更新する。

以上。

まあ作ってみないとなんとも言えないので、とりあえず作ってみようと思う。
https://github.com/yhikishima/Flux-env
SASS::SyntaxError in のエラーの解決方法


# エラーの原因
どうやら原因にgemのbootstrap-sassが入っていなかったこと、hamlファイルであったことがエラーの原因になっていたと考えられる。

![Qiita](https://i.gyazo.com/0efdf03a957a3f4d66b387b4826a78dc.png )

# applicaton.css.scssを編集
変更前(エラー時の記述)

```scss:apllication.css.scss
@import "bootstrap";
@import "protospace";

```

変更後(エラーを直した後の記述)

```scss:apllication.css.scss
@import "bootstrap-sprockets";
@import "bootstrap";
@import "protospace";
```

このようにsprocketsを挿入したことでassets ファイルのコンパイルを行ってくれて、うまくファイルを読み込んでくれるそうです。

# Gemfileを編集
変更前

```Gemfile:Gemfile
gem 'twitter-bootstrap-rails'
```

変更後

```Gemfile:Gemfile
gem 'bootstrap-sass'
```

として再起動するとエラーは解除されました。
# 参考url
 sprockets の README 意訳
http://blog.willnet.in/entry/20110928/1317196255
Fast and Memory-Efficient Significant Pattern Mining via Permutation Testingを読んだ

# KDD2015 Fast and Memory-Efficient Significant Pattern Mining via Permutation Testingを読んだ

## どんなもの？
時間的・メモリ的に計算効率の良い頻出パターンマイニングの手法を提案

## 先行研究と比べると？
- 実行時間：3ケタ減
- ピークメモリー：1～2桁減

## 技術や手法のキモはどこ？
先行研究で提案された手法(FastWY)の問題点を一つ一つ解決していった

## 次に読むべき論文は？
- Resampling-based multiple testing.
Rails で ajax を使おうとしてformat.js 指定しているのに、なぜか htmlが返ってしまう状態になった時・・

[Rails4 - RailsでAjax基本形（Scaffoldで学ぶ） - Qiita](http://qiita.com/mm36/items/684f36f22e79d0a27ae9) の続き。。

## 状況

- viewで ``` remote: true ``` して、jsでリクエストを送っている。
- コントローラーでは、 ``` respond_to ``` で js 待ち受けている
- なのに何故か ```create.js.erb``` が呼ばれた形跡がない；；

## 確認その１

``` create.js.erb ``` が本当に呼ばれていないのかチェックする。

``` app/views/stocks/create.js.erb
$('#stock-action').html("<%= j(render 'update_partial') %>");
alert('create呼ばれた！！');
```

create.js.erbはJavaScriptなので、JavaScriptの ``` alert ``` メッセージとか入れてみると、呼び出されたかそうでないかすぐわかる。
メッセージが表示されなければ、このファイルは読み込まれていない。
（表示されなかった）

## 確認その２

その１で確認できてるので、もうその２まで確認しなくていいんだけど・・・

[Ruby - Railsのデバッグを助けるgems - Qiita](http://qiita.com/mm36/items/b88c165a8be9b70c998f)

で入れた、RailsPanelで呼び出されたコントローラーと、レンダーされた結果が確認できる。

### 正しくAjax呼び出しできてる場合はこんな感じ

create.js.erbが返ってくるのを期待している。

![image](https://qiita-image-store.s3.amazonaws.com/0/5691/dc99614a-5259-013a-e0d9-4f4b258c88dc.png)

### 間違ってる状態

Format は js なのに、何故か返っているViewは ```create.html.haml```

![image](https://qiita-image-store.s3.amazonaws.com/0/5691/1d16340d-c88c-c398-9011-263cf66e5834.png)

## 原因

``` create.js.erb ``` の置き場所が間違ってた；；

正：app/views/user/stocks/create.js.erb
誤：app/views/stocks/create.js.erb

に置いてあった；；
namespace使ってみようとしてたから・・・・
しかもcreate.html.hamlがコントローラージェネレート時に初期状態で生成されていたらしく（その後コントローラーだけ移動させてて残ってるのに気づいてなかった）、jsファイルがないから、htmlを返してくれちゃってたらしい；；

ぐぬぬ・・

## 結論

Railsでファイルのパス、大事。めちゃめちゃ大事・・
Command failed due to signal: Illegal instruction: 4


次の環境でSwiftアプリをビルドしたところ、タイトルのようなコンパイルエラーが出ました。

Xcode 7.0 beta 5

原因はoverrideしたメソッドの戻り値の型が誤っていたためでした。単純ミスです。

こちらがUITableViewControllerに記述した、エラーになるコードです。

	// 間違えたコード
	override func sectionIndexTitlesForTableView(tableView: UITableView) -> [String] {
		return ["a", "b", "c"]
    }

UITableViewDataSourceのsectionIndexTitlesForTableViewはオプショナルを返すので、

	// 正しいコード
	override func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
		return ["a", "b", "c"]
    }
    
と修正しました。これでコンパイルが通るようになりました。
ディレクトリ制限ありのSFTPでSublimeから編集できるところまで


サーバで動いているプロジェクトを直接さわって作業してほしいけど、
特定の場所だけに限定したいというようなケース。
chrootという方法で、アカウントの/を強制的に変更してそこ以外を見えなくします。
今回はRailsのappディレクトリの共有を想定した、ubuntuでの手順メモです。

こんなイメージ。

![Screen Shot 2015-09-03 at 9.50.06 PM.png](https://qiita-image-store.s3.amazonaws.com/0/14782/d31c9b63-31d1-4258-8a7d-6ca992f837f5.png "Screen Shot 2015-09-03 at 9.50.06 PM.png")


# 作業アカウントの準備

## 作業ユーザの追加

sftpで接続するためのアカウントをつくる。名前はなんでもいいけどあとからわかりやすいようにsftpuserとします。

```
$ sudo adduser sftpuser
```

## ホームディレクトリの設定

作業ユーザのホームディレクトリをchrootのディレクトリにするために、rootの権限にする。

```
$ sudo chown root:root /home/sftpuser
$ sudo chmod 755 /home/sftpuser
```

## Sublime Textでいじるためのディレクトリを準備する

こちらのパーミッションは作業ユーザでよい。

```
$ sudo mkdir /home/sftpuser/app
$ sudo chown sftpuser:sftpuser /home/sftpuser/app
```

# 作業ファイルの準備

作業したい実体があるディレクトリをマウントしておきます。
シンボリックリンクだとchroot内からみることができないぽいので。

```
$ sudo mount --bind /PATH/TO/PROJECT/app /home/sftpuser/app
```

# /etc/ssh/sshd_config の変更

- sftpuserのルートディレクトリ指定
- パスワード認証を許可（必要であれば）
- sshd内部のsftpを使用（通常のsftpは制限ディレクトリ配下にないから）

```
Match User sftpuser
    ChrootDirectory /home/sftpuser
    PasswordAuthentication yes 
    ForceCommand internal-sftp 
```

sshdリスタート。

```
$ sudo /etc/init.d/ssh restart
```

# SublimteText側の設定

SFTPプラグインが必要です。
参考：http://ideahacker.net/2014/05/20/8417/

## フォルダ追加
任意の場所に作業用のフォルダを作ってSublimeにドロップします。

![sublime1.png](https://qiita-image-store.s3.amazonaws.com/0/14782/7098207c-b548-6688-56c9-82796a97b39c.png "sublime1.png")

右クリックでMap to Remote...というメニューを開きます。

![sublime2.png](https://qiita-image-store.s3.amazonaws.com/0/14782/ca24995b-1570-9e76-3d39-ee6b047747f6.png "sublime2.png")

## sftp-config.json

設定ファイルができるので、よしなにします。
今回でいうと

```
"host": "YOURSERVER",
"user": "sftpuser",
"password": "YOURPASSWORD",
"remote_path": "/app",
```
あたりが関係します。
upload_on_saveをtrueにすると、ファイルを保存したらすぐにサーバ側にアップしてくれるようになったりします。


![sublime3.png](https://qiita-image-store.s3.amazonaws.com/0/14782/1034761c-2a4d-771d-687c-753d34a8bf48.png "sublime3.png")


## ダウンロード！

これでappの中身がローカルにダウンロードされるはず。

![sublime4.png](https://qiita-image-store.s3.amazonaws.com/0/14782/2b4aac5e-be4b-2fee-7971-1ebb97c66e50.png "sublime4.png")