OmniAICreator/Qiita-1.07M huggingface dataset:
Apache DistributedLogの基本について調べてみた(全体概要編)

はじめに
===

DistributedLog(以下DL)とはTwitterがオープンソースとして公開したスケーラブルなメッセージングシステムです。
> https://github.com/twitter/distributedlog

![image](https://qiita-image-store.s3.amazonaws.com/0/48330/e5d28317-e65e-a569-52ae-b9ede1d89df5.png)


現在ではApache Incubatorプロジェクトとなっており、注目度の高いプロダクトです。
> http://distributedlog.incubator.apache.org/

本記事ではDLの基礎についてドキュメントからかいつまんでまとめてみようかと思います。
現在ではドキュメントぐらいしか情報もなく、まだサンプルプログラムも実装していないので間違いがあったらごめんなさい。

データの扱われ方
===

### ログストリームとネームスペース

DLではログストリームと呼ばれる単位でデータを扱います。
またこのログストリームはネームスペースの配下として管理されます。

ひとつのネームスペース配下には複数のログストリームを作成することができ、クライアントはログストリームを指定してDLにデータの読み書きを行います。
書き込み際には複数のログストリームを明示的に指定することもできますし、ロードバランシングも可能となっているようです。

### DLSNとTransactionId

ログストリームへ書き込まれたデータにはその順にそれぞれ一意となるシーケンス番号(DistributedLog Sequence Number, 略してDLSN)が付与されます。
データ読み取りの際はこの番号をもとにデータの読み取り位置を管理します。

さらに各レコードにはクライアントアプリケーションが利用するためのトランザクションIDも指定することができます。
こちらも同様にデータを読み取る際の位置を特定するためのものです。

DLは他のPub/Subシステムとは異なり、自身でどこまでデータが読み取られたかの位置情報を管理しません。そのためクライアント側で上記のシーケンスIDやトランザクションIDを利用して読み取り位置を管理する必要があります。

![名称未設定_key.png](https://qiita-image-store.s3.amazonaws.com/0/48330/57bc6e85-ac69-752c-ce1e-40c5b7193925.png)


全体構成
===
ドキュメントでは大きく以下のレイヤーで分けられています。

* Stateless Serviing
* Distributed Core
* Persistent Storege

図にすると以下のようなかたちです。

![名称未設定_key.png](https://qiita-image-store.s3.amazonaws.com/0/48330/39a56df1-5e71-b8f3-43ad-56ef070f8b4e.png)


Stateless Serviing
---
DLに読み書きを行うクライアントアプリケーションとデータの永続化を行うPersistent Storage(詳細は後述)の仲介を行うレイヤーです。
そのため、DLへのデータアクセスのための様々なやり取りを担います。

主に以下の機能がこのレイヤーに含まれています。

### Write Proxy
DLに対してデータを書き込む際の受け口となるものです。
クライアントアプリケーションはこのWrite Proxyを経由してDLへデータを書き込みます。 
DLのサーバ障害時などにおけるフェイルオーバーもWrite Proxyが透過的に行う仕組みとなっています。


### Read Proxy
DLに対してデータを読み込む際の受け口となるものです。
DLへの読み取りを行うクライアントアプリケーションからの一斉処理をさばけるように、データをキャッシュします。


Distributed Core
---

### Writer
実際にDLのデータストアへ書き込みを担うコア機能であり、書き込み時においてデータの順序を保証します。
そのため、それぞれのログストリームに書き込むを行うWriterはただひとつになるように調整されます。


### Reader
実際にDLのデータストアからの読み取りを担うコア機能です。
前述した通り、DL自体はクライアントごとの読み取り位置を管理しないため、指定されたシーケンスIDまたはトランザクションIDをもとにデータの読み取りを開始します。

Persistent Storege
---
データの永続化を行うレイヤーです。さらに大きく３つの要素から構成されています。

### Log Segment Store
前述したログストリーム上のデータは、実際にはログセグメントという単位でデータ配置され、そのログセグメントを配置するデータストアです。
書き込みが行なわれているログセグメントが閾値よりも大きくなったもしくは一定時間を過ぎると、次のログセグメントに書き込みが行なわれていきます。
Apache BookKeeperが利用されています。

### Cold Storage
時間の経過したログセグメントを格納するためのデータストアです。アーカイブや過去データからのリカバリなどを目的に利用されます。
いっぱいになったログセグメントがここにコピーされていきます。
ここではHDFSが利用されています。

### Metadata Store
ログストリームをそれを構成するログセメントの紐付け情報といったメタデータを管理するためのデータストアです。
それ以外にもデータの読み書き時における一貫性を制御するためのデータなども管理されます。
Apache Zookeeperが利用されています



つぎは
===
ざっくり概要についてドキュメントを追いながら簡単に整理してみました。
次はサンプルプログラムを動かしながら仕組みの詳細についてみていきます。
Automotive Grade Linux のデモを一緒に開発しませんか？

# はじめに

みなさんこんにちは。@task_jp です。

今年も [Qt Advent Calendar](http://qiita.com/advent-calendar/2016/qt) の季節がやってまいりました。毎日いろんな人の役に立つ（？）記事を楽しみにしながらよい年末を向かえましょう。まだまだ募集中の日がたくさんあるので、気軽にご参加ください。

私ごとですが、今年の３月から [The Qt Company](http://qt.io/jp) で働きはじめました。色々大変ですけどなんとか頑張っています。

~~/* 現在 The Qt Company Japan では Qt のために日本で一緒に働くメンバーを募集中ですので、興味のある方は是非お知らせください。 */~~

今日は最近半分仕事、半分趣味で参加している AGL の紹介をしたいと思います。


# Automotive Grade Linux について

[Automotive Grade Linux](https://www.automotivelinux.org/) (通称 AGL) は [The Linux Foundation](https://www.linuxfoundation.org/) がホストをしているオープンソースの車載向けの Linux のプラットフォームで、[Toyota や Mazda などの OEM をはじめ、様々な車業界の会社](https://www.automotivelinux.org/about/advisory-board) がプロジェクトに参加をしています。

元々 [Intel](http://www.intel.co.jp/) が開発していた [Moblin](https://ja.wikipedia.org/wiki/Moblin) というプラットフォームと [Nokia](http://www.nokia.co.jp/) が開発していた [Maemo](https://ja.wikipedia.org/wiki/Maemo) というプラットフォームが合体して [MeeGo](https://ja.wikipedia.org/wiki/MeeGo) というプラットフォームが誕生し、それが諸事情により [Tizen](https://ja.wikipedia.org/wiki/Tizen) というプラットフォームになり、その流れの一環で、Tizen とは別に誕生したプラットフォームが AGL で、[Yocto Project](https://www.yoctoproject.org/) をベースに様々な機能が開発され、[デモの UI の大半は Qt Quick で書かれています](https://gerrit.automotivelinux.org/gerrit/gitweb?p=AGL/DemoApps/ALS2016.git;a=tree)。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">AGL の今までのデモはこんな感じでした。 <a href="https://t.co/sj6FoJFnJK">pic.twitter.com/sj6FoJFnJK</a></p>&mdash; Tasuku Suzuki (@task_jp) <a href="https://twitter.com/task_jp/status/804305895794454528?ref_src=twsrc%5Etfw">December 1, 2016</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この UI は元々 [Jaguar Land Rover](http://www.jaguarlandrover.com/) が HTML5 向けに作っていた UI を Qt Quick で書き直したらしいのですが、最近 AGL の中でもそろそろ新しい UI に変えようよという機運が高まってきており、来年の初めにラスベガスで開催される [CES 2017](http://cesjapan.org/) に向けて現在 UI の刷新が進められています。
（グラフィックデザインが固まったのがー昨日で、昨日から実際のコーディングがはじまりました）
![AGL_HMI_Design.png](https://qiita-image-store.s3.amazonaws.com/0/13867/57e21067-1fb7-9f3f-77b6-4b34bef1cc9b.png)

# 一緒に開発をしませんか？

で、現在この UI の開発の大部分を私が担当するような雰囲気になっているのですが、一人で開発をしていてもあまりおもしろくないことが想定されるため、協力してくれる方を絶賛募集中です。

AGL は普通のオープンソースのコミュニティなので、基本的にだれでも AGL のデモの開発に参加し、貢献することが可能です。

開発のインフラ的には [Gerrit](http://gerrit.automotivelinux.org/) なので、Qt のコードに貢献をしたことのある方であればとても敷居が低いと思われますので、「俺 CES で展示されるこの AGL のデモの UI の開発に貢献したいぜ！」という方はもちろんのこと、「Qt Quick の勉強のためにちょっと手伝ってみよう」という方でも全然大歓迎です。

本番のデモのハードウェアは [Renesas の Porter](http://elinux.org/R-Car/Boards/Porter) というものになる予定ですが、デモの UI や簡単なアプリであれば Windows でも Linux でも Mac でも普通に Qt のアプリとして開発できる（ようにする）予定なので、あまり細かいことは気にせずに手伝ってくれたらうれしいです。

あと、デザイン関係も色々不安なところがあるので、「グラフィックのデザイン手伝いたい」という方や、「UI/UX をかっこよくしたい」という方も大歓迎です。

# おわりに

この AGL というプラットフォーム（のデモの UI）がそのまま実際の製品になるということは多分ないと思うんですけど、Qt や QtQuick で楽しく、効率よく開発し続けることで将来的にたくさんの人をいろんな意味で幸せにできたらいいなぁと思っています。あと、こういうオープンソースのプロジェクトの UI をちゃんとした Qt Quick で書いておくことで、色々な人の勉強のお役に立てられればいいかなぁとも思っています。

というわけで、クリスマスまでには完成していないとヤバいのでよろしくお願いします。

明日は @sazus さんが担当です。楽しみに待ってましょう。

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
今年の成果・その１

こんばんは。初日から間に合わなかったらどうしようかと思いましたが、書き始めたのが当日の22時9分なのですから、どうしようもありませんね。

というわけで今年も始まりました「Appcelerator Titanium Advent Calendar」でございます。まだまだ空きがあるようなので、皆様奮ってご参加の程よろしくお願いします。どうしても埋まらないときは、報復を仄めかすなどの文明的な手段を駆使して参りたいと思います。

さて、今年のエントリでは、年内にリリースされたTitanium製アプリを順に紹介していくことにします。記念すべき第一回はこちら：

#[ポケットマルシェ](http://pocket-marche.com/)

![ロゴ](http://pocket-marche.com/assets/img/PMlogo.png)

です。ご覧の通り産直の農作物や肉、魚などを生産者の皆様から直接買い付ける事ができるサービスなのですが、なんといってもまずはこの[出品一覧](https://poke-m.com/products)を眺めてみて頂ければと思います。どれもまあ美味しそうなこと。お歳暮の季節になりましたが、こういうのって贈られるとすごく嬉しいですよね。もちろん自分自身のQoLを高めるのもいいですし、開発中も画面を眺めては、うまそうだなあとついぼうっとしてしまう仕事でした。まだまだ改良は続いておりますが、とにかく気に入ったものが見つかったら買ってみてくださいな。

[会社紹介はこちら](http://www.pocket-marche.com/)
[Facebook](https://www.facebook.com/pocketmarchejp/)

また、今回の開発では、色々と開発の注意点なんかもそれなりの数が溜まってきたので、それらも別エントリにまとめていきたいと思います。

というわけで、駆け足ですが初日のエントリといたします。よろしくお願いします。次はキュアップラパパの@shinoutさんです。
論文 pdf から Google 翻訳にコピペする時に改行を消すススメ

意外と周りで需要があったので。
Google 翻訳が強くなったこともあるので。


# Chrome Extension
<img alt="1512_03385v1_pdf.png" src="https://qiita-image-store.s3.amazonaws.com/0/40717/8d5bd9fa-7287-4c72-778f-c83ddab97610.png">

右クリックから一発。以下の Google 公式 Chrome Extension が必要
https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb?hl=ja


# shell コマンド
コピーしてある場合以下のコマンド (Mac OS)

```
pbpaste |tr '\n' ' '| pbcopy
```

# Alfred workflow
<img width="658" alt="ss_ 2016-12-01 22.09.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/40717/bf28820f-2762-0cf6-fa5b-7caad6b122f6.png">

上のコマンドを一回するだけの workflow を作った。自分で設定したほうが早そう。

https://github.com/elzup/oneline-workflow/releases
pythonでユーザベース協調フィルタリング

[pythonでアイテムベース協調フィルタリングを実装する - MovieLensを例に](http://qiita.com/kotaroito/items/6acb58bb16b68a460af9) の続きとして、ユーザベース協調フィルタリングをやってみた。



```py3
import numpy as np
import pandas as pd
from  scipy.spatial.distance import cosine
from scipy.stats import pearsonr

df = pd.read_csv('u.data', sep='\t', names=['user_id','item_id', 'rating', 'timestamp'])

shape = (df.max().ix['user_id'], df.max().ix['item_id'])
R = np.zeros(shape) 

for i in df.index:
    row = df.ix[i]
    R[row['user_id'] -1 , row['item_id'] - 1] = row['rating']


class CollaborativeFiltering:
    def fit(self, rating_matrix):
        u_count = rating_matrix.shape[0]

        boolean_matrix = (rating_matrix > 0) * 1
        mean_ratings = [self.evaluated_mean(rating_matrix[i,:]) for i in range(u_count)] # of users

        self.rating_matrix = rating_matrix
        self.rating_matrix_mean =  (boolean_matrix.T * mean_ratings).T
        
    def predict(self, x):
        sims = self.user_similarities(x)
        
        scores = sims.dot(self.rating_matrix - self.rating_matrix_mean)
        norms = np.absolute(sims).dot((self.rating_matrix > 0) * 1)
        x_mean = self.evaluated_mean(x)
        
        p = scores / norms +  x_mean
        
        for i in range(p.size):
            if np.isnan(p[i]):
                p[i] = 0.0
        
        return p
            
    
    def evaluated_mean(self, v):
            ev = v[v > 0]
            if ev.size > 0:
                return np.mean(ev)
            else:
                return 0.
    
    def user_similarities(self, x):
        # n: user counts
        n = self.rating_matrix.shape[0]
        return np.array([similarity(x, self.rating_matrix[i]) for i in range(n)])

    def similarity(self, v1, v2):
        # index of items that non-zero
        idx = np.logical_and(v1 != 0, v2 != 0)

        v1_non_zero = v1[idx]
        v2_non_zero = v2[idx]

        sim = 0.0
        if v1_non_zero.size > 0:
            coef, _ = pearsonr(v1_non_zero, v2_non_zero)
            if not np.isnan(coef):
                sim = coef

        return sim

cf = CollaborativeFiltering()
cf.fit(R)
```



## 参考
[推薦システムのアルゴリズム](http://www.kamishima.net/archive/recsysdoc.pdf)
Electron製のアプリ、ごちゃごちゃしたファイル群を一つのEXEにまとめる方法

#Electronの欠点

- ファイルサイズがとにかく大きい(「最低」120MB はでかすぎ)
- パッケージングしてもディレクトリごちゃごちゃ(よくわからんファイル群)

#というわけで、

このごちゃごちゃしたファイル群を単一のEXEファイルにまとめる方法があったので報告します。

content_resources_200_percent.pakやら
content_shell.pakやらd3dcompiler_47.dllやら
icudtl.datやら
を１つのEXEファイルにまとめてみたいと思います。

##※この方法の欠点

- ファイルサイズは逆に増える(50MBぐらい。結構増える)
- 起動がチト遅くなる
- パフォーマンスもチト落ちる

##1.Enigma Virtual Boxのインストール

![スクショ](http://i.imgur.com/JfzqD9y.png)
[http://enigmaprotector.com/en/downloads.html](http://enigmaprotector.com/en/downloads.html)
このページの画像で示したボタンを押してインストーラを落とす。あとは指示に従ってインストールしてください。

##2.早速やってみる

もうアプリは起動してると思います。

![スクショ](http://i.imgur.com/PP78WnS.png)
Enter Input File Name:に、ファイル群の中のEXEを指定します。
Enter Output File Name:には勝手に入ります。
そしてAdd...を押して、Add Folder Recursiveを選択。適当にフォルダを選んでそのままOK→OK。
あとはProcess押したらおｋ。
Runボタンでアプリが起動します。

#さいごに

ファイル群を１つのファイルにまとめることができましたが、ファイルサイズが大きいので(ちょっとしたアプリでも190MB(！) )
使いどころは難しい。こんなことしなくてもそのままZipにすれば120MB→50MBまで抑えられたので。
Tableau10でGoogle BigQueryのLegacy SQLを使い続ける方法


Tableau10からBigQueryにクエリを投げる時のSQLの種類がStandardSQLになりました。
その結果、Tableau9以前で作った一部のダッシュボードが使えなくなってしまいます。

以下のビューはTableau10にアップグレードした時に使えなくなります。

* カスタムSQLを利用しているダッシュボード
* Legacy SQLのビューを参照しているダッシュボード

これらのSQLをStandardSQLに書き換えれば正常に動作するようになりますが、とりあえずLegacySQLのままで使い続ける方法もあります。

以下のファイルを`bigquery.tdc`という名前で作成します。

```xml:bigquery.tdc
<connection-customization class='bigquery' enabled='true' version='10.1' >
  <vendor name='bigquery' />
  <driver name='bigquery' />
  <customizations>
    <customization name='connection-dialect' value='google-bql' />
  </customizations>
</connection-customization>
```

そして、このファイルを、以下のパスに配置します。(Macの場合)

`/Users/<ユーザー名>/Documents/マイ Tableau リポジトリ/データ ソース`

Tableau Serverの場合は以下のパスに配置します。
なお、配置した後にはTableau Serverの再起動が必要です。

`C:\Program Files\Tableau\Tableau Server\[version]\bin`

# 参考
https://onlinehelp.tableau.com/current/pro/desktop/en-us/examples_googlebigquery.html#switch_to_bql
Firefox Developer Editionの存在

この記事は[Firefox 開発ツール Advent Calendar](http://qiita.com/advent-calendar/2016/fx_devtools)の 1日目の記事です。
明日はUemmra3の[Firefox開発ツールのショートカット](http://qiita.com/Uemmra3/items/b6f58499b9a61e737c0d)です。

まだ私以外には12日のdoockieさんしか登録がないのですが、全部オレにする気は毛頭ありません。皆さまの登録をお待ちしています。

さて、Firefoxには通常版と、ウェブ開発者向けのDeveloper Editionがあります。かつてはAuroraとか言っていた、限定版です。
知っている人は知っているし、知らない人は知らない。
当たり前ですが、もう少し広まっても良いのかな？と思います。

Google Chrome最高！と言ってる人たちにもぜひ使って頂きたい。
初日の今日は、まずその存在をお伝えしたいと思います。

[Firefox Developer Edition](https://developer.mozilla.org/ja/Firefox/Developer_Edition)

ミーハーな部分で言うと、青いアイコンがカッコいいですね。
とにかく一度インストールして。話はそれからだ。

では。
Pythonでcsvファイルの読み書きを行う方法

#はじめに
　本記事は、Python3を使用した場合のプログラムを記載しています。 私自身の備忘録として書いているため、誤りがあればコメントして頂けると幸いです。また、同じようにPythonでcsvファイルのデータを読み書きしたい人の参考になれば嬉しいです。

##csvファイルの読み込み
　csvファイルを読み込むためには、以下のようなプログラムが基本となります。読み込みたいファイルをdata.csvとして、ファイルポインタread_fpで読み込み専用で開いています。

```python:csv_read.py
# csvファイルを扱うための関数を読み込む
import csv

# read_fpをdata.csvの読み込みポインタとして定義
read_fp=csv.reader(open("data.csv", "r"))

# read_fpでdata.csvを一行ずつ読み込み、lineに代入
for line in read_fp:

    # 読み込んだ一行分のデータの処理を記述
    print(line)

```

##csvファイルの書き込み
　csvファイルを書き込むためには、以下のようなプログラムが基本となります。書き込みたいファイルをoutput.csvとして、ファイルポインタwrite_fpで新規書き込み専用で開いています。

```python:csv_write.py
import csv

write_fp=csv.writer(open("output.csv", "w"))

# 書き込みたいリスト
list1 = ["りんご", "みかん"]
list2 = ["にんじん", "とまと"]

# output.csvにwrite_fpで一行書き込む
write_fp.writerow(list1)
write_fp.writerow(list2)

```

csv_write.pyの出力結果は以下のようになります。

| 1 | 2 | 3 |
|:-:|:-:|:-:|
| りんご  |みかん   |   |
|にんじん   |とまと   |   |
|   |   |   |

**Point**
　ファイルを読み込んだり書き込んだりする場合には、プログラム内でファイルを開く必要があります。ファイルを開くために、次の一文を記述しましょう。オプションについては表にまとめておきます。

```
open("ファイル名", "オプション")
```
| オプション | 意味 |
|:-:|:-:|
| r  | ファイルを読み込み専用として開く。 |
| w  | ファイルに書き込みをするために新規作成する。但し、存在するファイル名を指定すると、ファイルの中身が全て消えます。|
| a  |ファイルに書き込みするために開く。|
少しの遊びを我慢して、1年間の開発をJetBrains社製IDEで楽にしよう!

みなさんエディタやIDEは何を使用して開発していますか？？
最近だとGitHubが提供している無料エディタ[Atom](https://atom.io/)や、JavaのIDEだと[Eclipse
](https://eclipse.org/downloads/)など多岐に渡るかと思います。

私自身は普段フロントエンジニアをしており、使用言語としてはHTML,CSS,JavaScript,PHPが主になってきています。
そこで、開発環境としては[JetBrains](https://www.jetbrains.com/)が提供しているIDEである[PhpStorm](https://www.jetbrains.com/phpstorm/?fromMenu)を使用しています。
今回はこのIDEの良さを簡潔にお伝えしたいと思います。
*JetBrains社とは無関係の人間です。


# そもそもJetBrainsとは？？
![スクリーンショット 2016-12-01 20.25.28.png](https://qiita-image-store.s3.amazonaws.com/0/108073/6cc439a9-f4b7-2505-fc9d-98e1b9e871f7.png)

チェコ共和国のプラハに本社がある技術主導型のソフトウェア開発企業になります。
[Wikipedia参照](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%83%96%E3%83%AC%E3%82%A4%E3%83%B3%E3%82%BA)

冒頭にも述べた[PhpStorm](https://www.jetbrains.com/phpstorm/?fromMenu)以外にも、Ruby向けIDEの[RubyMine](https://www.jetbrains.com/ruby/?fromMenu)など様々な言語向けにIDEがあります。
[全製品一覧](https://www.jetbrains.com/products.html?fromMenu)


# 無料でダウンロードできるのか？？
JetBrains製品は高機能なので、無料ではありません・・・が、購入する価値はあります！
[PhpStormの料金表](https://www.jetbrains.com/phpstorm/buy/#edition=commercial)
約1ヶ月の使用は無料体験できるので、まず1ヶ月試してみるのが良いかと思います。

# どんな特徴があるの？？
- UIがわかりやすい  
- gulpなどをGUIで動かせる
- GitHubと連携して、コミット、プッシュ、マージ、プルリクエストをショートコマンドで実行できる
- コンソールがついているので、画面を切り替える必要がない
- コード補完が強力！！自作クラスを参照することや、記述ミスが大幅に減らせる
- 他のエディタやIDEとくらべて動作が軽く、メモリの割り当てを増やすことも可能

# オススメの参考記事
[ウェブ制作にはWebStormがお勧め！(引用元:ICS MEDIA)](https://ics.media/entry/11642)
[PHP界最強のIDEといえば「PhpStorm」だよね！(引用元:グロージェントの中の人)](https://www.g-gent.com/nakanohito/best-of-ide-for-php-is-phpstorm/)
[PhpStormを使い始めた人は知っておきたい便利な使い方25選 その1(引用元:karakaram-blog)](http://www.karakaram.com/phpstorm-useful-tips1)
[JetBrainsのIDEでもっとGitを使いこなそう！意外と便利なGUIから使える小技(引用元:LIG)](https://liginc.co.jp/317888)

# おまけ
JetBrainsの情報を追うのは公式サイトを見ればいいのですが、英字ではなく日本語で知りたい方や、細かい情報を追いたい方向けです。

## 日本の正規代理店
JetBrainsの正規代理店を[サムライズム](http://samuraism.com/)が運用しており、
カンファレンスを開いたり、[ツイッター](https://twitter.com/samuraism?ref_src=twsrc%5Etfw)方でも情報を載せているのでチェックしておくといいかと思います。

- [JetBrains日本語公式](https://twitter.com/jetbrainsjp) 

代表と社員の方もツイッターで情報を呟いているので、フォローすると新鮮な情報が追えます！
- [山本 裕介さん](https://twitter.com/yusuke)
- [Lily -Yuri.T-さん](https://twitter.com/Florasion_ja)

## コミュニティ
- [Slackコミュニティ](http://jbugj.herokuapp.com/)
- [フェイスブックコミュニティ](https://www.facebook.com/groups/178583459014413/)


# 最後に
ざっくりですが、JetBrains製品についてご紹介しました！
有料のIDEになりますが、少し遊びを我慢すれば1年間の開発が、かなり楽になるかと思います。
自分の会社で導入してもらうこともできますし、無料体験もできるので、一度使ってみるといいと思います。

[アドベントカレンダー](http://qiita.com/advent-calendar/2016/jetbrains)の方もあるので、是非チェックしてください！
最近のre:dashの主な変更履歴


機能追加が多く開発が活発で、ついていけてない人も多いと思うので書いてみます。

v0.9以降の大きめの修正だけ書きました。

# v0.9.0
### グラフ描画ライブラリがHighChartsからPlot.lyへ
  * [Plotly \| Make charts and dashboards online](https://plot.ly/)
  * [plotly の紹介 \- Qiita](http://qiita.com/kozo2/items/b530d38633111cbace8c)

### グラフをiframeで自分のサイト等に埋め込み可能に

![Qiita](https://gyazo.com/7cd8f9ba002a8eabb641270a529dbc1e.png "Qiita")

* ↑はデモサイトのiframe例です。
* 埋め込んだ瞬間publicになってしまうので使う際は注意。

### データソース別のRole別権限管理
* 特定のRoleのUserにはMysqlにアクセスさせない、等

![Qiita](https://cloud.githubusercontent.com/assets/71468/12002987/1fae5e2e-ab18-11e5-8f65-5abd160c7887.png "Qiita")

![Qiita](https://cloud.githubusercontent.com/assets/71468/12002994/3a55c0dc-ab18-11e5-8250-4f13b6ab1aac.png "Qiita")
  

# v0.9.2
### Excelダウンロード機能
* 便利。

### データソースにMicrosoft SQL Serverが追加

### ダッシュボードの印刷用レイアウト

### ダッシュボードのフルスクリーン機能
* 大きいモニタに常時表示させとくような用途

# v0.10
### デザインの大幅な変更
* フラットデザインになった
* v0.10以上へのアップグレードをするには使用者のキャッシュクリアが必要

#### before

![Qiita](https://cloud.githubusercontent.com/assets/71468/14453249/588568da-009c-11e6-9b61-d9a57a2c0550.png "Qiita")

#### after

![Qiita](https://cloud.githubusercontent.com/assets/71468/14452325/ab80aa3c-0096-11e6-9c69-cc1d666f44e0.png "Qiita")


### データソースにDynamoDB DQLが追加
* [DQL \- DynamoDB Query Language — dql 0\.5\.22 documentation](https://dql.readthedocs.io/en/latest/)

### ダッシュボードの公開機能
  * ログインなしで見れるダッシュボード

### ダッシュボードのフルスクリーン機能

### パスワードリセット機能

### 実行中、実行後のクエリモニタリング機能
  * どのクエリでre:dashが詰まっているかがわかる
  * `個人的には超が付くほど重宝してる機能`

![Qiita](https://cloud.githubusercontent.com/assets/71468/13331498/6cef9166-dc06-11e5-94ce-1fe4be0092bf.png "Qiita")


# v0.11
### アラート
* プラグイン化
* Slack追加

### wordcloud visualization

![Qiita](https://cloud.githubusercontent.com/assets/389937/15429398/cc1829c8-1e6e-11e6-9164-7f0511261eea.png "Qiita")

### Heroku サポート

### Parameter UI
* SQLに渡すparameterを画面から指定できるUI。
* 最低限のUIという感じで細かい指定はできない。
* 細かい指定をしたい場合は[ここを参照](http://qiita.com/yokotty/items/55ffab41ec5e49bc4a30)

![Qiita](https://cdn-images-1.medium.com/max/800/1*Ub8Z609432EGDXvBmdvPXQ.gif "Qiita")


# v0.12(最新)
### データソース系
* BigQuery
  * UDFサポート。
  * standard sqlサポート。
* Cassandra追加
* ScyllaDB追加
* JIRA（JQL）追加
* Prestoのスキーマの動的ロード

### Sankey visualization

![Qiita](https://cloud.githubusercontent.com/assets/71468/17449025/54623052-5b60-11e6-9754-3cf69d121315.gif "Qiita")

### sunburst sequence visualization

![Qiita](https://cloud.githubusercontent.com/assets/71468/17143735/0909d714-535d-11e6-85b6-2727f6eef4db.gif "Qiita")

### アラートメールの件名変更機能

### Query Snippets
* Queryでよく使う定型文を予め登録しておき、登録しておいたキーワードをタイプすると補完される
* かなり便利な機能！

![Qiita](https://redash.io/help/assets/Snippet.png "Qiita")


### ダッシュボードのテキストボックス編集機能
* これまではテキストボックスを作り直す必要があった(かなり面倒だった)


# 次は？

* 次はv1.0なので、安定版という位置づけになる。
さくらのクラウドで公開鍵を追加する

さくらのクラウドでは設定から公開鍵を追加することが出来ます。
これによってサーバ作成時に公開鍵を配置することが簡単にできるので連続して作成する場合や、
時間を空けて作成する場合でも公開鍵の管理が簡単になります。

##公開鍵
まずはコントロールパネル左上の「設定」をクリックします。
![サーバ一覧.png](https://qiita-image-store.s3.amazonaws.com/0/140995/21859272-a1dc-cbdc-dc3a-20398abaf0de.png)

するとこんな画面が表示されます。(トリミングしています)
公開鍵にはすでに登録済の鍵の一覧が表示されます。

![公開鍵.png](https://qiita-image-store.s3.amazonaws.com/0/140995/68a2fc11-017d-7a71-8383-b2ed4fffb2ed.png)

##公開鍵追加
「+追加」をクリックすると追加用のウィンドウが表示されます。

![公開鍵追加.png](https://qiita-image-store.s3.amazonaws.com/0/140995/a70093f6-c584-3150-5d0b-697d09fd3311.png)

公開鍵はサーバ側で対応できるものであれば登録出来ると思いますが、
WindowsのPuTTYgenで保存した公開鍵はコメントなどを除去して一行に編集する必要があります。
また、サーバ作成時の管理ユーザ(rootや指定ユーザー名)に公開鍵が設定されるので複数ユーザには対応していないようです。

##追加した公開鍵の利用

このように事前に登録した公開鍵があればサーバ作成時に選択できるようになります。

![サーバ追加.png](https://qiita-image-store.s3.amazonaws.com/0/140995/98d004a5-6c42-bae8-8272-0b3bcae49970.png)

CentOSをディスクソースとした場合のディスク修正はこのようになります。
公開鍵を2つ選択していますが、CentOSの場合、rootユーザに2つの公開鍵が登録されます。
また、「パスワード/チャレンジレスポンスで...」をチェックしておくとsshd_configが修正されパスワードでの認証ができなくなります。

公開鍵認証はパスワードを使った認証に比べてセキュリティー上も好ましいかと思うのでさくらのクラウドに慣れたら設定しておくのがお勧めです。
JA:Name sample の情報を楽に使えるようにするかもしれないやつ

OpenStreetMap Wiki には日本に存在するチェーン店の name 値を羅列している [JA:Naming sample](https://wiki.openstreetmap.org/wiki/JA:Naming_sample) というページがあります。
OSM に登録されるチェーン店の表記が揺れにくいように用意されたようです。

このページの情報を元に POI に値を与えていきますがこのままコピペをすると結構手間がかかり、楽に使うツール等も自分は発見できなかったので、いつも使っている JOSM にペーストできる形に変換する JavaScript を書いて Github で利用できるようにしました。

紛らわしい名前になってしまったのを反省しつつ公開しています。
[JA:Name Sample](https://kmr-zoar.github.io/name_samples/)

## 使い方

ページを開くと次のような画面が出ます。
左側にチェーン店の一覧が、右側に情報をコピーする為のウインドウ的なものが表示されます。

![name_sample01.PNG](https://qiita-image-store.s3.amazonaws.com/0/32433/31eeeb60-e2ef-edf2-52ca-424f2a180000.png)

左側のチェーン店をクリックすると右側のウインドウ的なものに情報が表示されます。
`クリップボードにコピー`をクリックすると内容がクリップボードにコピーされ、JOSM で POI を選択してから `Ctrl + Shift + V` でタグとして貼り付けることができます。 

branch や operator は省略したり、店舗ごとに変わったりするので別枠に表示し、テキストボックスに入力して `add` をクリックすると情報に追加できるので、その後に`クリップボードにコピー`をクリックしてください。

Wiki ページにもあるメモ欄も表示するようにしていて、赤い文字で表示されるようにしています。
![name_sample02.PNG](https://qiita-image-store.s3.amazonaws.com/0/32433/16607417-31ab-ea5a-bbdb-ea867655f450.png)

左上の方にあるテキストボックスに文字を入力すると `name` タグと `name:en` タグの文字に一致するチェーン店だけが絞り込まれるようにしてあります。探す手間が省ければと。

![name_sample03.PNG](https://qiita-image-store.s3.amazonaws.com/0/32433/4c87ffb7-de33-fad2-07ed-b9c65004d060.png)


デザインやスクリプトにセンスがないので [GitHub](https://github.com/KMR-zoar/name_samples) に置いてあるのでアドバイスをいただけると直せるかもしれません。
その他問題があったら優しく教えてください。
CODE for GIFU 2016年の振り返り

この記事はcivic tech advent calendarの12/2担当の記事になります。

http://qiita.com/advent-calendar/2016/civictech

2016年のCODE for GIFUの活動を振り返りです。

## アーバンデータチャレンジに初参加

　今年の５月にCODE for GIFUの代表：國枝氏から以下の案内がFacebookグループに流れました。

>アーバンデータチャレンジ２０１６の地方予選会場として、正式に採択された模様です

　キッカケは2016年のインターナショナル・オープンデータ・デイに参加されていた県議会議員の方がオープンデータについて興味を持たれ岐阜県に働きかけていただき、岐阜県→公益財団法人ソフトピアジャパン→CODE for GIFUとめぐりめぐってやってきたのです（さすが國枝氏）。

　初めは「７月になんか１回やって、１１月ぐらいにハッカソンやって、、」といつものごとくのんびり構えていたのですが、何故かしら岐阜県・公益財団法人ソフトピアジャパンと打ち合わせる中で「（12月応募まで）期間が空くから、月１で勉強会とかやりましょー」という流れになってしまいました。まあ来るもの拒まず、去る者追わずのCODE for GIFUとしては「わかりました」の一言です。

　で、なんとなく日程だけ埋めるとこんな感じになりました。
- 7/27 キックオフ
- 8/26 勉強会１
- 9/15 勉強会２
- 11/3 交流会
- 12/10 ハッカソン
　日程が決まるとなんとか、なりそうな気がして来るのが不思議です（笑）。

　そもそも自分自身がG空間情報だとかデータビジュアライゼーションだとか知らなかったので、いい機会だから勉強会の講師も務めることにしました。内容は「なんでもいいよ」とのことだったので、無謀にもCARTOとRESASを企画して（資料の準備とか大変だった、、）メンバーに助けてもらいながら実施できました。

　11月の交流会はいつもは主催者としてがんばっている方々を岐阜へお招きしてお互いの活動を知って役立ててほしいという思いで企画しました。みんなのチャレンジを応援するってことで、CODE forに限らず、いろいろな方からライトニング・トークを募集したところ17チーム/個人も集まり大盛況となりました。

あとは本番のハッカソンと作品の応募がまっていますので、そちらに向けて着々と準備をすすめています。少しでもみんなの役に立てるものがこのコンテストをきっかけに始まったらいいなあと考えています。

[アーバンデータチャレンジ2016 in 岐阜のイベントページ](https://www.softopia.or.jp/public/event/udcingifu2016/)

## MashupAwardが岐阜にやってきた

大垣でロボットコミュニティ「ROBOTALK」に参加されているコアメンバーの市川大祐さんが是非やりたいと企画したのが9/3-4に開催した大垣ロボットハッカソンです。Pepper、Sota、NAO、 Bocco、PLEN、BB8と、、コミュニケーションロボットがこれだけの種類が揃ってるハッカソンは珍しかったのではないでしょうか？

[大垣ロボットハッカソンのイベントレポート](http://mashupaward.jp/2016/09/hackathon-oogaki/)

MashupAwardにもCIVICTECH部門があるのですが、そんなこと忘れるぐらいロボットがかわいくて「こいつに何やらせたらオモシロいだろう？」って純粋に楽しめたイベントでした。私の参加したチームは全員で夜中3時までNAOにダンスを覚えこませるのに必死でしたｗ。楽しむってホント大事ですよね。

## Code for Shirakawaが立ち上がる

7月のアーバンデータチャレンジのキックオフの懇親会で白川町の地域おこし協力隊の天川伊織さんから「白川町でもやりたいんです！」と熱意のコールを受けて「どうぞどうぞ」といったらその次の日に早速立ち上げされました。この行動力見習いたいです。

[Code for Shirakawa](http://amakawaiori.com/20160728/1059720875.html)

　白川町は世界遺産のある合掌造りの白川村ではなく、お茶とパイプオルガンある町ですが、地元の私も通り過ぎる事はあってもいままで訪ねた事はありませんでした。
　11/23（祝）にマッピング・パーティーを開催したのですが、これもすごく興味深かった。都市部のマッピングパーティには参加したことあるのですが、白川町は町役場周辺でもGoogleMapに建物が一件も書かれておらず、車の通れる道すら書かれていない状況でした。そんな地域こそ日常で使える地図が必要だし、地域の方が参加してもらって地図をつくることが大切だと学びました。

## さいごに

　ことし一年を振り返ると月一でイベントやってて、個人的にも「小さなIT相談室」（月２回程度）でいろいろな方とお話する機会を意識的に増やしてきました。それはイベントを通じて「じぶんごと」に感じてもらう大切さに気づいたからです。
　SNSは便利ですが「他人事」であって「じぶんごと」にはならないんですよね。サービスをつくるにしても、イベントの集客するにしても直接人に会って、その人の考えを知って、その人が共感できるモノを知って、それから自分の考えを伝える。
　この”人伝て”という地道な活動がCIVICTECHには合っていて、どんな素晴らしいアプリや技術をつかっても、その想いを伝えるのは”人”なんですよね。さらに継続させるためには「じぶんごと」として共感してもらうしかない。Code for Kanazawaの活動はすでにそれを実践されているので、とても参考になります。

　岐阜でも少しずつですが、そんな息吹を感じることのできた一年だったので、このタネを大切にして来年に向けてがんばりたいと思います。
OpenStreetMap 埼玉リージョン切り抜きデータ

自分が主に埼玉県内のデータを編集していて、データの破壊されたり自分のミスで大きく状態を戻さないといけない場合や、埼玉県内の OSM データを使いたいけど自分で切り抜くの面倒という方、とりあえず OSM データを使ってみたいけど Planet.osm や japan-latest.osm はでかいよねって方向けに埼玉県内のデータのみを切り取って公開しています。

[OpenStreetMap 埼玉リージョン](http://saitama.noob.jp/)

bzip2 で圧縮したものをレンタルサーバーにアップロードているだけです。  

使っている元データは [Geofabrik の 日本リージョン](http://download.geofabrik.de/asia/japan.html)で公開されている japan-latest.osm.pbf です。

切り抜きは [osmosis](http://wiki.openstreetmap.org/wiki/JA:Osmosis) を使っていて、次のようなコマンドを cron で動かしています。

```
$ osmosis --read-pbf file="japan-latest.osm.pbf" --bounding-polygon file="saitama.poly" --write-xml file="saitama.osm"
```

saitama.poly で切り抜くエリアを指定しますが、これは埼玉県の県境をトレースした後ポリゴン化して少しのバッファを加えたものです。

ライセンスは [OpenStreetMap のライセンス](http://www.openstreetmap.org/copyright)なのでダウンロードしてライセンスの範囲で使っていただいて問題ありません。  
レンタルサーバーにアップロードしているのは概ね30日分ですが、
それよりも前のデータは [OneDrive](https://onedrive.live.com/?cid=704058b261170cc9&id=704058B261170CC9%2153317&lor=shortUrl) で公開しているのでそちらからもどうぞ
 → GDPR で制限されるデータが含まれているため OneDrive での公開を取りやめています。
Windows10のスタートアイコンを右クリックする → 運用担当が泣く

**Windows10の優しさに運用が泣いた（CV:てらそままさき）。**

# これを右クリックするじゃろ

![qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/23318/6c107279-c64a-705f-5a43-5f83064874c6.png)

# こうなる

![qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/23318/3aeae038-f1a3-09b8-9f9d-ff416a43dff1.png)

素晴らしくないですか、これ。

この右クリメニューに表示されるのは、Windowsの運用に携わった者ならば、何度もお世話になる項目。個人的に嬉しいのはイベントビューア。

今までのバージョンであれば、設定をクリックしてから管理を開いてあーだこーだして起動していたアプリ群が、Windows10であれば、クリック２回で開けてしまう。
Windows10にしてよかったと実感した機能No.1は、間違いなくこれです（次点はBashか検索の利便性向上）。

既に知っていた人もそうでない人も、この聖Microsoftより賜った祝福の恩恵を感じながら、素晴らしい~~年末デスマ~~クリスマスをお迎えくださいませ。
なに、自分はランチャー派ですだと？ 貴様の話は聞いとらんわい。

# あとがき、もしくはアドベントカレンダーへのお誘い

というわけで、このカレンダーは[「1分で実現できる有用な技術 Advent Calendar 2016」](http://qiita.com/advent-calendar/2016/one-minute)と言います。
皆さんが知っている豆ネタを披露したり、どこにも投稿しづらい微妙な小話を展開する場です。
御覧頂いたとおり、この記事はクソです。このようなヌルーい情報でも構いませんので、面白いと思って頂ければ、ぜひご参加くださいまし。
unorderd_mapをまとめて削除

unorderd_mapにはerase_return_voidってのがあります。
もともと、quick_eraseという関数名だったのですが変更になったようです。

STLのeraseは削除した要素の次のイテレータを返すんですが、
unorderd_mapの場合、次のイテレータを求めるコストってのがあるらしく
何も返さないeraseであればその分速く出来るようです。

eraseの返り値を使うのは条件に合う要素をまとめて消す場合だと思います。
以下のような、ややわかりにくいコードで知られていると思います。

```cpp
#include<vector>

int main(){
	std::vector<int> v;
	for (auto it = v.begin(); it != v.end();){
		if (*it % 4 == 0){
			it = v.erase(it);
		}else{
			it++;
		}
	}
}
```

こういうのをunorderd_mapでやる場合、どうすればいいか、ということで、
ベンチマークを取ってみました。

データを乱数で突っ込んでおいて、keyが4の倍数の要素だけ消すベンチマークです。

erase1は、vector等でも使われる、eraseで次のイテレータを受け取る形式です
erase2は、条件をまとめておいて、keyを指定してのeraseです。
erase3は、erase_return_voidを使ったやつです。

erase2,3は削除するキー分のバッファが必要ですし、毎回findの必要もあります。

```cpp
#include <iostream>
#include <vector>
#include <string>
#include <boost/unordered_map.hpp>
#include <boost/timer/timer.hpp>

bool check(int n) { return n % 4 == 0;}

void erase1(boost::unordered_map<int, int *> &map)
{
	for (auto it = map.begin(); it != map.end();) {
		if (check(it->first)) {
			it = map.erase(it);
		}
		else {
			it++;
		}
	}
}

void erase2(boost::unordered_map<int, int *> &map)
{
	std::vector<int> keyvec;

	for (const auto &v : map) {
		if (check(v.first))keyvec.push_back(v.first);
	}

	for (int key : keyvec) {
		map.erase(key);
	}
}

void erase3(boost::unordered_map<int, int *> &map)
{
	std::vector<int> keyvec;

	for (const auto &v : map) {
		if (check(v.first))keyvec.push_back(v.first);
	}

	for (int key : keyvec) {
		auto it = map.find(key);
		map.erase_return_void(it);
	}
}


void speed_check(std::function<void()> func)
{
	boost::timer::auto_cpu_timer timer;

	func();

}

int main()
{
	boost::unordered_map<int, int *> map1, map2, map3;

	int value = 0;

	for (int i = 0; i < 100000; i++) {
		int key = rand();

		map1[key] = &value;
		map2[key] = &value;
		map3[key] = &value;
	}

	speed_check([&]() {erase1(map1); });
	speed_check([&]() {erase2(map2); });
	speed_check([&]() {erase3(map3); });


    return 0;
}
```

[wandbox](http://melpon.org/wandbox/permlink/wJhb5JK4xdosIwxe)


そして実行結果は…ドン！

```text
 0.012342s wall, 0.010000s user + 0.000000s system = 0.010000s CPU (81.0%)
 0.025197s wall, 0.030000s user + 0.000000s system = 0.030000s CPU (119.1%)
 0.023067s wall, 0.020000s user + 0.000000s system = 0.020000s CPU (86.7%)
```

無理にerase_return_voidを使うよりは、普通にループした方が倍以上速いですね。
Swift3で同期処理と非同期処理 その1

#概要
同期・非同期とかメインスレッド・サブスレッドとかを使い分けないと、
もさっとした動作になったり、表示したいものが意図したタイミングで表示されなかったり、
そもそも表示されないとかとか色々問題が起こりますよね。
でもって、Swift3ではどうやるんだ？というので、自分はつまずいたので、
こんな使い方をしているよっていうのを、まとめてみました。
※だいたい合ってると思いますが、100%正しいかは・・・

1. DispatchQueueの使い方
2. DispatchSemaphoreの使い方
3. よくありそうな使い方サンプル
    1. 非同期でAPIリクエスト
    2. 同期でAPIリクエスト

#DispatchQueueの使い方
- 種類について（一部）
    - 直列、メインスレッド  
```let queue = DispatchQueue.main```
    - 直列、サブスレッド  
```let queue = DispatchQueue(label: "jp.sample.queue")```
    - 並列、サブスレッド  
```let queue = DispatchQueue.global(qos: .default)```  
```let queue = DispatchQueue(label: "jp.sample.queue", attributes: .concurrent)```

例えば、「並列、サブスレッド」で、こんな処理を実行すると、
![スクリーンショット 2016-12-01 19.50.20.png](https://qiita-image-store.s3.amazonaws.com/0/38124/d8bc6d9d-ebeb-0e19-3a13-7f4f5ed0866b.png)

こんな感じで、ループ内の1処理が終わるのを待たずに、次の処理が開始されます。
また、メインスレッドではないので、全ての処理が終わらずともアラートが表示されます。
```Start: 6
Start: 3
Start: 5
Start: 4
Start: 9
Start: 1
Start: 8
Start: 2
Start: 7
Start: 0
End: 5
End: 4
End: 6
End: 3
End: 9
End: 1
End: 2
End: 8
End: 7
End: 0
```

逆に「直列、メインスレッド」の場合だと、
![スクリーンショット 2016-12-01 19.58.02.png](https://qiita-image-store.s3.amazonaws.com/0/38124/f82f547e-710d-b094-7c5f-d3c7cae20d82.png)

こんな感じで、順番通りに処理が進んでいき、ループを抜けるまでアラートも表示されません。
```
Start: 0
End: 0
Start: 1
End: 1
Start: 2
End: 2
Start: 3
End: 3
Start: 4
End: 4
Start: 5
End: 5
Start: 6
End: 6
Start: 7
End: 7
Start: 8
End: 8
Start: 9
End: 9
```

よく使うパターンとしては、こんな感じでしょうか。
APIにリクエストして、データを取得する（通信している間も操作はできる状態）
⇒取得次第データを表示する
![スクリーンショット 2016-12-01 20.04.09.png](https://qiita-image-store.s3.amazonaws.com/0/38124/8cc28022-38e9-dcd4-6e00-a3010541c726.png)

#DispatchSemaphoreの使い方
続きはこちらに書きました。
http://qiita.com/koji-nishida/items/305808ff04d3ff818564
serverless frameworkでPHPを使用する


公式にサポートはされていませんが、AWS LambdaでPHPを動かすことは可能です。
Linux用のPHP本体をアプリケーションと一緒にアップロードすることで、AWS LambdaでPHPのアプリケーションを動かすことができます。
といったことを、[去年のAdvent Calendar](http://qiita.com/oh-sky/items/646d326ee23ae640153f)やら[PHPカンファレンスのLT](https://speakerdeck.com/ohsky/serverlessdephp)で紹介しました。
しかし、これらを自分で一からやろうとすると、ちょっと面倒です。
カジュアルに用意できればいいのになーと思っていたところ・・・

Serverlessフレームワーク用のプラグイン serverless-php が先月に公開されました。
開発元のブログ→ http://blog.zerosharp.com/the-serverless-framework-and-php/
github→ https://github.com/ZeroSharp/serverless-php
これを使えば、簡単に、AWS LambdaでPHPを動かすことができます。

## serverless-php の使い方
### 事前準備
- [serverless のインストール](https://serverless.com/framework/docs/providers/aws/guide/installation/)
- [AWS IAMユーザの作成及びCredentialの生成](https://github.com/serverless/serverless/blob/master/docs/providers/aws/guide/credentials.md)

### アプリケーションの構築から実行まで
#### 1. テンプレートの展開

```bash:serverless-phpのテンプレートを展開
[prompt]$ sls install --url https://github.com/ZeroSharp/serverless-php
```

#### 2. serverless.yml の編集(必要であれば)
デフォルトでは、アイルランドリージョンに展開するように記述してあります。
日本リージョンに展開するように書き換えます。

```yaml:serverless.yml
(前略)
provider:
  name: aws
  runtime: nodejs4.3
  region: ap-northeast-1
(後略)
```

#### 3. デプロイ
アクセスキー、シークレットキーには、事前準備で生成したCredentialの情報を入力します。

```bash:アプリケーションのデプロイ
[prompt]$ AWS_ACCESS_KEY_ID=AKI********* \
AWS_SECRET_ACCESS_KEY=*********** \
sls deploy
```

デプロイに成功すると、APIのエンドポイントなどの情報が出力されます。

#### 4. 実行
作成されたエンドポイントに対して、リクエストを行います。

```bash:デプロイしたアプリケーションの実行
[prompt]$ curl -i https://******.execute-api.ap-northeast-1.amazonaws.com/dev/hello

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 74
Connection: keep-alive
Date: Thu, 01 Dec 2016 10:50:05 GMT
x-amzn-RequestId: 892d80e2-b7ab-11e6-8ed0-8b69baa26de7
X-Amzn-Trace-Id: Root=1-583ff24d-e749cf3e97cb5ef4e73c2783
X-Cache: Miss from cloudfront
Via: 1.1 2587f87ca37d9b8f8c0f687522eec7f6.cloudfront.net (CloudFront)
X-Amz-Cf-Id: xGZWHF9VKDd1pJnMAHhck4R5uT5BFnZ5raZe3sajdpvFwqm2fFKSpg==

{"message":"Go Serverless v1.0! Your PHP function executed successfully!"}
```

このように簡単な手順で、アプリケーションを作成することができます。

## 任意のバージョンのphpを使用したい場合

PHPをビルドするためのdockerfileが同梱されていますので、それを編集し、動かせば、好きなバージョン・好きなビルドオプションのphpを使用することができます。

## アプリケーションによっては、うまく動かない場合がある
動かしたいアプリケーションによっては、必要なライブラリがAWS Lambda上に無いなどの理由で、エラーが発生してしまうことがあります。
そのような場合には、必要なライブラリもアップロードする必要があります。
ライブラリのアップロード・使用については、[こちら](http://www.slideshare.net/oh-sky/php-55467177)が参考になるかもしれません。
Unity5.5でUnloadSceneAsync()が実装されてUnloadScene時にフリーズしなくなった


特定の場所でUnloadSceneをするとUnityがフリーズするバグに見舞われていて

http://qiita.com/vjbab/items/62d43b57bc1e3740a4d1
https://issuetracker.unity3d.com/issues/unity-hangs-on-scenemanager-dot-unloadscene

おそらくこのあたりで紹介されているもの

>I found i way around this, instead os just calling UnloadScene, create a coroutine that when the trigger recives a on enter event wait for the end of frame then unload the scene.

>Like this:

>yield return new WaitForEndOfFrame(); 
SceneManager.UnloadScene("MyScene");

結局こんな感じに処理して対応してたんだけどUnity5.5でUnloadSceneAsyncが追加されてた。

https://unity3d.com/jp/unity/whats-new/unity-5.5.0

>SceneManager: UnloadScene has now be marked deprecated and will throw an exception if called at illegal times. UnloadSceneAsync should be used instead (762371)

上記のissueのIDと一致してるし、これからはUnloadSceneAsync()を使えばいいらしい。
Hello! My name is VAddy :)

これは[VAddy Adventカレンダー](http://qiita.com/advent-calendar/2016/vaddy)1日目の記事です。
VAddyは、継続的なWeb脆弱性検査が簡単に実現できるSaaSです。
https://vaddy.net/ja

執筆している私はVAddyのプロダクトマネージャと開発をしている市川です。セキュリティ検査エンジンはCTOのkanatokoが開発していて、私はフロントの開発を主に担当しています。
広報や契約関係をしている西野の3人のチームで運営しています。ちなみに西野は[VAddy公式Twitterアカウント](https://twitter.com/vaddynet)の中の人です。

このタイトルは私が大好きなスコットランドのクラフトビールメーカBrewDogが何種類か出しているビールの名前をオマージュしています。
https://www.brewdog.com/lowdown/blog/hello-my-name-is-vladimir
2年ぐらい前に飲んだHello my name is Vladmirは最高に美味しいビールでした。特に許可もなくプーチンの似顔絵をラベルに貼るという最高にロックな、おっと話が長くなりそうなのでこのへんにしておきますね。


##VAddyが行うセキュリティテスト
VAddyが行うWeb脆弱性検査はブラックボックステストです。
ブラックボックステストはHTTPサーバにHTTPリクエストを投げてレスポンスを見ながら検査します。
簡単に言うと例えば、GETのパラメーターが 
````/index.php?foo=bar````
であれば、
````/index.php?foo=bar'````
のように、パラメータ値を検査値に変更して検査していきます。（実際はもっと複雑なことをしています）
この場合、ソースコードは見ないのでVAddyに対してソースコードを提供する必要はありませんし、言語やフレームワーク、ミドルウェアを限定せずにテストできます。

## VAddyの特徴
VAddyの特徴は下記になります。

- ユーザフレンドリー
- API連携可能（CI連携可能）
- 低価格(フリーミアム)
- 検査が早い

JenkinsのようなCI(継続的インテグレーションツール）がなくても使えますが、VAddyはCI連携を前提として設計して検査エンジンも自前で作っています。
これは、世の中にはこの方針で作っている脆弱性検査ツールは存在せず、やりたいことを実現しようと思ったら作るしかなかったからです。

## VAddyの重要な視点
重要視しているのは、既存のテストツールと同じようにCIと連携して使えて、かつ簡単に利用できる点です。
既存のセキュリティテストツールをCIと組み合わせて運用するのは可能ですが、セキュリティエンジニア以外の人がやる場合は大変な労力を伴い、実際のビジネスのスピードを落としかねないのです。

セキュリティの話になると100%を目指すあまり、導入や運用のハードルがとても高くなり、費用対効果を考えると導入が難しくなります。
それが必要なところもあるでしょうが、多くのWebアプリケーション開発現場ではセキュリティテストが実施されず、Web Application Firewallも導入されていない現状を考えると、80%ぐらいのレベルで良いので簡単に導入できて既存の開発フローに馴染むものを提供する方が、多くの人の心に届くと考えています。

## さいごに
このAdventカレンダーを通して、我々の考え方、技術的な仕組み、海外カンファレンススポンサーなどの体験談を共有していけたらと考えています。
このAdventカレンダーはVAddyに関係することであれば誰でも参加可能ですので、VAddy触ってみたとか、VAddyの印象など書いていただける方がいれば是非お願いします。
あと24回ありますが、他の参加者がいない場合は全部俺になるので、ハラハラしながら1日目の記事を終わりたいと思います。

Let's VAddy!
新人エンジニアこそちゃんと調べてちゃんと知りちゃんと考える

# 本稿について
本稿は、

1. 学生時代に`HTML`,`PHP`,`Java`くらいなら触った事あるかな程度の配属4ヶ月目の新人である自分が、
2. ほぼ初めて`JavaScript`や、色んなフレームワークに触れ技術の荒波に揉まれながら、
3. **ちゃんと調べてちゃんと知りちゃんと考える**事が大事だなーとぼんやりと思ったこと

を書き記すものです。

# 出来るだけ上流のソースを読む

## 分からない事に出会った時
分からない事に出会った時、まずググりますよね。
そこでまず目に留まるのは**「非公式かつ目的の用途に限定された」**ものです。
しかも日本語だから読みやすい！やったぜ！

![ぐぐる](https://qiita-image-store.s3.amazonaws.com/0/128278/7dada374-653b-d3f3-fe22-f635905762f6.png)

先人達の知恵と努力の結晶はありがたく活用させて頂きたい所存です。
細かいことは考えず解決！しかし…

## 鵜呑み型ケーススタディの問題点

1. その解答例が自分の環境で上手く動作するのか
2. 似たようなケースに流用出来るのか
3. その解答例の内側ではどういったやり取りが行われているのか説明出来るのか

ただ調べてちょっと変形させたらコピーして解決！しているだけではこの3つの問題に直面し…

## 「調べる⇒使う⇒調べる⇒使う⇒…」の無限ループ
しばらくして、
調べて出てきた事を使っているだけでは、いつまでたっても応用することが出来ない事に気付きました。
**「（同じような事を）調べる⇒使う⇒調べる…」**の無限ループに陥ってしまいます。
これでは「業務の効率が悪く」なっていく一方で…~~（申し訳程度のテーマ意識）~~

## まずは公式を読む！
自分は「使えたら良いや」でコーディングをしていたせいで、無限ループに陥っていました。
今日も分からない事を先輩に聞きに行きます…

ぼく：「こうこうこういう事が分かんなくて…調べても上手く行かないんですよ」
先輩：「君、ちゃんと調べたの？」
ぼく：「はい、このサイトとこのサイトと…」

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/128278/069ca0b4-6ccf-a188-1b8b-dc3797decbd2.png)


先輩：「いやそうじゃなくてさぁ…この**１番上に出てるサイト**なんで見てないの？」
ぼく：「えっ…

1. 公式サイトってなんか使いづらそうだし
2. 知りたい事がピンポイントで書かれているわけでもなさそうだし
3. 英語ばっかりのもあるし 
4. 文章長いし
       
　　　 見てないです…」

これが大きな間違いでした。

実際に公式サイトを開いてみると、はじめはその情報量の多さに辟易するも、欲しい情報はちゃんと書いてあるし(当たり前)、中でどういった処理が行われているから分かるようになるので、似たようなケースに応用出来るようになりました。
**「ケース専用のコーディングから自分が出来るコーディングへ」**
となったわけですね…

何もかも分からなかったら**まずは公式**、分かってきたら有志の記事で学ぶのが良いみたいです。

## 英語というだけで拒否反応
はじめは公式サイトの読み方が全く分からず、時間をかけてばっかりでした。
特に英語のサイト！英語というだけで初心者は拒否反応が出てしまうものです。

そこでめんどくさがりの僕は、**英語を勉強するのを諦めました**。(これが業務効率化だ！)

## 英語の技術系サイトはプログラミングの知識と翻訳機で読める
1. 英語とはいうが日常的に使っているプログラミング言語が沢山書いてある
2. その他分からない事は翻訳機を使えばほぼ完璧に翻訳出来る

ということで、Chrome拡張機能の翻訳機に甘えながら読むことにしたのでした。
![翻訳機](https://qiita-image-store.s3.amazonaws.com/0/128278/676e7e17-afb3-3f0f-a5ad-3efe7b7d73ac.png)
ヒエログリフ級難易度の文章もこの通り

そう。始めっから英語バリバリ出来るイケてるエンジニアになろうなんて思うほうがお門違いなのです。
自分の程度に合ったレベルまで難易度をロス無く落としていくことが重要なのです…（）

よく考えたら英語っていろんな国の人が読むから可能な限り簡単に書かれているのも頷けます。

# 結構考える時間も必要

## なんとなくで動いてしまうのがプログラム
ここまで読んでくださった方は、僕がいかに面倒くさがりなのかが分かって頂けているかと思います。
そんな僕が次に犯した間違いは
**「自分で作れたし、動いたし、触った感じバグも無さそうだから完成！」**

## このコードが説明できない
ぼく：「いや～めっちゃテストしましたよ。完璧なコードです。どうぞ。」
先輩：「これとこれなんだけど。なんで同じような実装が二箇所あるのよ」
ぼく：「そういえば…。気付きませんでした」
先輩：「なんでこうしたの？共通のコードに出来るよね？」
ぼく：「うーん…（適当だとは口が裂けても言えない）」

こういうことに限らず、変数一つにしても変数名から始まり、スコープ、宣言の型等、説明できなきゃいけない事はいくらでもあるんですよね。

## 考える時間を取らなければ、考える時間は短くならない
説明するためには、考えた結果が必要です。でも考えるには時間が必要です。

> 「今日のこのタスク、昼までに終わらせるって言っちゃったしなぁ…」
> 「知らない分野だから何を考えたらいいのか分からないぞ…」
> 「見た目は出来てるんだし、なんかめんどくさいし」

こういう気持ちから、自然と形として体を成した成果物を出す事だけに力を注いでしまうことがよくありました。
でも、それで良い訳がないのです。適当にやったしっぺ返しは必ず来ます。

最初のうちは業務に影響が出そうなくらい考える時間を取っても良いんだと思います。~~(実際に出たら問題ですけど)~~
必要なコスト（時間）はしっかり払っておかないとですね。

**新しく学んだ事は、初めに「何故」「どうやって」を考え、調べる習慣を付けることで、
手癖になり、その手癖はどんどん早くなっていく**ということです。

# まとめ
技術的な効率化は他の方が書いてくださっているので、
本稿では自分が学んだマインド的な部分を書いてみたつもりです。
エンジニアとして、が記事の途中からプログラマとして、になっていたような気がしないでもないような…

いつかは技術的な事も書けるようになりたいなー
ご高覧ありがとうございました。
Vultrとその他のVPSっぽいサービスを比べてみる

Vultrとその他のVPSっぽいサービスを比べてみる

VultrというVPSサービスを知ったのですが、価格をみるといい感じに安い上、東京リージョンもあるということでサーバーを移転を考え中です。

現在はDigitalOceanのシンガポールリージョンの512MBで運用中です。

ちなみにEC2とGCEはVPSとして使うと割高なのは知っていますが、こういう場合は必須かなと思ったのと、比較対象が少なすぎてもアレなので入れています。

## 比較表

この表は2016年12月1日現在の価格で書かれています。

1ヶ月の明記がないサイトは `24 hours * 30 days` で計算しています。

|サービス|日本リージョン|最安Ins価格|最安Ins価格(日本)|最安Ins構成|WindowsServer|UnixBenchScore|備考|
|:--------|:--------:|:--------|:--------|:--------|:--------:|:--------|:--------|
|Vultr|:o:|\$0.007/hr<br>\$5/mth|:arrow_left:|CPU: 1 CPU<br>MEM: 768 MB<br>SSD: 15GB|:o:|1482.3|WindowsServerは料金プラス|
|DigitalOcean|:x:|\$0.007/hr<br>\$5/mth|:x:|CPU: 1 CPU<br>MEM: 512 MB<br>SSD: 20GB|:warning:|1227.6|WindowsServerはライセンス持ち込み|
|ConoHa|:o:|\1/hr<br>\630/mth|:arrow_left:|CPU: 1 CPU<br>MEM: 512 MB<br>SSD: 20GB|:x:|1561.3|転送量無料|
|さくらのVPS|:o:|\685/mth|:arrow_left:|CPU: vCPU x1<br>MEM: 512 MB<br>SSD: 20GB|:o:|-|時間毎料金なし？<br>WindowsServerの場合、MEM: 768MB,\1000/mth|
|AWS EC2|:o:|\$0.0065/hr<br>\$4.68/mth|\$0.01/hr<br>\$7.2/mth|CPU: vCPU x1<br>MEM: 0.5 GB<br>SSD: 8GB|:o:|1978.0|t2.nano<br>SSD容量の変更可能<br>オンデマンド料金<br>WindowsServerは料金プラス|
|GCE|:o:|\$0.008/hr<br>\$4.09/mth|\$0.01/hr<br>\$5.11/mth|CPU: vCPU x0.2<br>MEM: 0.6 GB<br>SSD: 10GB|:o:|499.5|f1-micro<br>SSD容量の変更可能<br>[0.2 CPUはGCEのドキュメントを参照してください](https://cloud.google.com/compute/pricing)<br>継続処理には向かない？<br>WindowsServerは料金プラス|
NetBSDでごちうさフォントを作る話。

NetBSD Advent Calendar 2016第一日目は、NetBSDでフォント作成環境をつくってみる話にしようかと思います(あまりNetBSDでてこないかも...)。

環境はNetBSD-7.0-amd64です。

```sh
$ uname -a 
NetBSD fontbuild 7.0 NetBSD 7.0 (GENERIC.201509250726Z) amd64
```

[NetBSD上にX環境を構築する話](http://qiita.com/furandon_pig/items/a1a636a5fa7dbe6d9f23)を参照しつつ、X環境を構築してみます。

今回はTwmやWindowMakerではなく、もうちょっとモダンなXfceを使ってみます。
以下の手順でXfeとフォント作成ツールのfontforgeをインストールします。

```
$ sudo -i pkg_add -v xfce4 xfce4-wm-themes
$ sudo -i pkg_add -v fontforge
```

今回は以下のような感じの、ごちうさのあんこフォントを作成してみます。

![img208.png](https://qiita-image-store.s3.amazonaws.com/0/61137/08bf7769-8a31-4b57-7cab-1a73fa8ddb0c.png)

おもむろにFontforgeを起動し、フォントグリフを割り当てたい文字を選択します。今回は"@"に割り当ててみます。
あらかじめ用意した画像を"File"-"Import"でとりこみます。これが背景画像になるので、それをなぞる形でフォントを作成してゆきます。

![img200.png](https://qiita-image-store.s3.amazonaws.com/0/61137/c775da0d-eaa9-5a5c-4bb6-8bad657629fb.png)

フォントを作成する際には、パスの向きに注意する必要があります。以下のような中をくりぬいたような感じのフォントを作成する場合は、外側のパスは「時計回り」、内側のパスは「反時計回り」で書くようにします。

![img202.png](https://qiita-image-store.s3.amazonaws.com/0/61137/2cb95dd8-f273-832f-8f36-dd257d3fe8a7.png)

デフォルトは時計回りのパスになるので、"Element"-"Counter Clockwise"でパスの方向を逆にします。

![img204.png](https://qiita-image-store.s3.amazonaws.com/0/61137/45dab5b2-1a80-0342-41cc-7ec855be8678.png)

画像をなぞってこんな感じにフォントグリフを作成します。

![img206.png](https://qiita-image-store.s3.amazonaws.com/0/61137/1db26a4c-fcf3-e8bc-d554-0a85316ce8ef.png)

出来上がったフォントを"File"-"Generate Fonts..."でttfファイルとして書き出します。

![img207.png](https://qiita-image-store.s3.amazonaws.com/0/61137/bb5c68c0-4828-8503-a107-956f04a344c9.png)

## Webフォントとして使ってみる

作成したフォントをWebフォントとして使用する場合は、以下のようなHTMLを記述します。

```html
    @font-face {
        font-family: 'MyRegular';
        src: url('gochiusa.ttf') format('truetype')
    }
...
<span style="font-family: 'MyRegular';font-size:24px;">@</font>
```

これで無事に、ごちうさフォントが表示されました。

![img208.png](https://qiita-image-store.s3.amazonaws.com/0/61137/08bf7769-8a31-4b57-7cab-1a73fa8ddb0c.png)

## まとめ

一昨年と去年のNetBSD Advent Calendarでは、あまりデスクトップ回りの記事を書かなったなと思ったので、今回はNetBSD+Xfce+Fontforgeでフォントを作成する話を書いてみました。
(そのせいでNetBSDっぽくない感じに...)

明日は[ryoon](http://qiita.com/ryoon)さんの記事になります。ぜひお楽しみに！
raspberry pi3で猫監視カメラを作る全体の流れ

猫がお留守番中何をしているのか知るために、ラズパイとwebカメラを使用して、猫が動いたら動画記録し、それをtwitterにuploadするようにしました。

- インストールしたアプリやライブラリ
    - motion(動体検出用)
    - ffmpeg(motionでできた動画ファイルをtwitterに合う形にフォーマット変換するため)
        - インストールは自前コンパイルが必要なので、以下を参考にした
            - http://d.hatena.ne.jp/kt_hiro/20150101/1420094609
            - http://m97087yh.seesaa.net/article/415078356.html
    - twython(楽してtweetするため)

- 処理概要
    - motionで動体検出
        - 動体検出したら、動画で記録するようにします。
        - twitterにuploadするためには、エンコード、コンテナを規定範囲内で作る必要があるが、motionで一旦録画したのち、あとでffmpegで好きなフォーマットに変換することとしたため、とりあえずmpeg4でエンコードとした。解像度は、とりあえず640x320、20fpsとした。
        - on_movie_endからpython script(*)を呼び出して、あとはtwitter投稿までそこで処理させる。
        -python script(*)での処理。
            - 第一引数に、生成された動画ファイルのfull pathが渡ってくる。
                - ffmpegでaviファイルをh264の動画、オーディオなし、mp4コンテナに変換。
                - 一定サイズ以上のファイルをtwitterにuploadする
                - 一定時間以上たった古いファイルを削除。（お掃除）
            - ffmpegでの変換はこんな感じ
                - ffmpeg -i hoge.avi -vcodec libx264 -an -f mp4 piyo.mp4
CocoaPods1.xで複雑なTarget構成の依存を簡潔に書く

# はじめに
今年始めにCocoaPod1.xが出て随分経ちました。1.xではPodfileがとてもキレイに書けるようになっていて嬉しく思っているんですが、旧来の記法をそのまま使えることもあって、あまり新しいsyntaxを使っていない人も多く見かけます。

自分も移行当初はほとんどそのままの記法を使っていたんですが、プロジェクトのtarget構成が複雑になったタイミングで記法を書き換えました。構成は以下のようなものです。

- アプリではターゲットが複数存在する。それぞれでは共通のPodを利用している
- Testターゲットのみで使いたいPodがある。更にTestも複数のターゲットがある

ここではこの構成を例に、Podfileの新しいsyntaxを古いものと比較しながら紹介します。

# 0.x以来の記述方法
`common_pods`のような共通podsを括りだした上で、ターゲットを宣言して各ブロック内で地道に呼び出す必要がありました。

```
def common_pods
  pod 'Alamofire'
  ...
end

def test_pods
  pod 'Quick'
  ...
end

target 'App1' do
  common_pods
end

target 'App2' do
  common_pods
end

target 'Tests1' do
  common_pods
  test_pods
end

target 'Tests2' do
  common_pods
  test_pods
end
```

targetが増えれば増えるほどしんどい感じになってきます。これを1.x syntaxに書き変えます。

# 1.xでのsyntax
 新しい記法ではたったのこれだけ。まず`abstract_target`を宣言し、その中に共通で使いたいpodを書いておきます。これは中で宣言したtarget全てに依存が継承されます。
 
 この共通のpod以外に使うものがないtargetは、シンプルに`target '名前'`一行で記述可能です。

```

abstract_target 'App' do
	
	pod 'Alamofire' # 全ターゲット共通で使うpod
	...
	
	target 'App1'
	target 'App2'
	
	abstract_target 'Tests' do
	
		pod 'Quick' # テストターゲット共通で使うpod
		...
		
		target 'Tests1'
		target 'Tests2' do
		  # Tests2でのみ使うpodの記述
		end
	end
end

```

この例では複数あるテストターゲットだけで使いたい共通ライブラリもあったので、更に`abstract_target`をネストして記述しています。これで`Test1`、`Test2`両方でアプリターゲットの依存に加え、Quickが使えるようになります。

# まとめ
CocoaPods1.xからPodfileがとてもシンプルに書けるようになりました。0.x系からあまりsyntaxを変えず使い続けている人もいるかもしれないですが、簡単に見通しが良くなるので一度見直してみるといいかもしれません。
Milkcocoaまとめ2016 #mlkcca

## 今年もMilkcocoaにお世話になりました。

この記事は、[Milkcocoa Advent Calendar 2016](http://qiita.com/advent-calendar/2016/milkcocoa)の1日目の記事です。
[去年](http://qiita.com/advent-calendar/2015/mlkcca)に引き続き、今年も開催できました。めでたい。👏ﾊﾟﾝ

## Milkcocoaとは
IoTデバイスのリアルタイム通信とデータストアに特化したバックエンドサービスです。
Technical Rockstarsが開発と運営を行っていましたが、今年2月に[株式会社ウフル](http://uhuru.co.jp/)に事業譲渡しています。（サービスは変わらず運営中です。）

![milkcocoa.jpg](https://qiita-image-store.s3.amazonaws.com/0/38442/a1b1ac58-fd71-fa75-87db-5be6149cdaa5.jpeg)

## Things Powered by Milkcocoa
2016年もいろんなモノづくりでMilkcocoaにお世話になりました。順番に振り返ってみたいと思います。

### Johnny-FiveとMilkcocoaで始めるIoTオジサン入門
[集まれMilkcocoaオジサン。Milkcocoa Meetup vol 8](https://mlkcca.connpass.com/event/27083/)で発表しました。

>発表資料: https://speakerdeck.com/shanonim/johnny-five-and-milkcocoa

![スクリーンショット 2016-11-27 18.17.16.png](https://qiita-image-store.s3.amazonaws.com/0/38442/be1d8cab-9a54-c530-20cc-58a332e9f20e.png)

IoT用のJavaScriptフレームワークである[Johnny-Five](http://johnny-five.io/)とMilkcocoaを使って、IoT入門をしよう！という試みです。
実装例のサンプルとして、人感センサとArduinoを使って、在席管理システムを作りました。在席情報をMilkcocoaにストアして、Webサイトからセンサ情報を閲覧できるようにしています。

### IoTで美味しい漬け物を作りたい
[IoT縛りの勉強会! IoTLT vol.19](https://iotlt.connpass.com/event/37813/)で発表しました。

>発表資料: https://speakerdeck.com/shanonim/make-good-pickles-with-iot

塩分センサを使って漬け物の最適な食べ頃を見つけるシステムを作りました。今流行りのFoodTechです。(？)
Milkcocoaは、塩分濃度情報のストア先に使っています。

<img width="726" alt="スクリーンショット 2016-12-01 17.47.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/38442/83d4f0bd-e2a5-e845-78df-56670ba7bc72.png">


### connected-luminous
[明星和楽2016](http://2016.myojowaraku.net/)という福岡で開催されたITフェスティバルに出展した電子デバイスです。LEDを付けたカチューシャとサイリウムデバイスを製作しました。
今年のMashupAwardsにもエントリしています。

>発表資料: https://speakerdeck.com/shanonim/myojyo-waraku-2016-report
>Mashup Awards 2016: http://hacklog.jp/works/49919

<img width="768" alt="IMG_1957.JPG" src="https://qiita-image-store.s3.amazonaws.com/0/38442/7344fd9c-8b52-bfdd-be5e-097a4238fec6.jpeg">

デバイス同士のLED色を同期する処理の部分でMilkcocoaを使っています。

## Community Powered by Milkcocoa
コミュニティの話をします。
Milkcocoaの良いところとして、サービスはもちろんなのですが、<b>ユーザのコミュニティがしっかりしている</b>という点があります。定期的にミートアップが開催されたり、IoT関係のLTイベントでも使ってみた事例の発表が多いので、ユーザ同士の意見交換が活発です。

イベントが多いと、「わたしもIoTやってみようかな…」というキッカケが増えるし、ユーザも事例も増えて良いことばかりです。

![20160405_ec-640x427.jpg](https://qiita-image-store.s3.amazonaws.com/0/38442/c34249f8-94ac-8398-dac0-433a94853228.jpeg)

使い続けるサービスの同志がいることは、とても心強いことだと思います。
そういう意味でも、Milkcocoaの掲げている<b>「エンドユーザープログラミングの世界の実現」</b>が、この1年間でまた一段と近づいたのではないでしょうか。

## まとめ
これからIoTをやってみたいと思っている方は、ぜひ一度Milkcocoaを使ってみてください。初心者のハードルが低いこともMilkcocoaのメリットのひとつだと思います。
よかったらコミュニティにもjoinしてみてください :)

>Milkcocoa Facebookグループ: https://www.facebook.com/groups/mlkcca/
>connpassグループ: https://mlkcca.connpass.com/

また来年も引き続き、Milkcocoaと一緒にいろんなモノを作っていきたいと思います。
Bluemix：簡易ETLサービスDataConnect、GUIで書くワークフローが使いやすくなりました（まだbetaサービスみたいですが）

最初にbetaが発表されたとき（以下記事ご参照）、ちょっと使いづらかったGUIが改善されてたのでメモ。
http://qiita.com/azzeten/items/a1d55f386f4fd8b5e233

ターゲットDBとして定義できるのがたった1つの接続先（指定のホスト、指定のDB）だったのですが、
それが複数定義できるようになりました。

文章だと書きづらいので、以下キャプチャでご説明。

## ターゲット（コピー先）を定義する
これまで、このset targetをすると、以下キャプチャでいうところの「顧客情報」や「従業員」テーブルに対するターゲットも一緒に定義しなければならなかったのですが、これが個別に定義できるようになりました。（普通そうですよね・・）

![スクリーンショット 2016-11-19 23.50.11.png](https://qiita-image-store.s3.amazonaws.com/0/119378/127d09af-4e6a-d3e7-a288-7181d62aabbc.png)

deptとempのjoinはデータベースA、
顧客情報テーブルをソートした結果はデータベースB、
従業員テーブルをコピーした結果はデータベースC
というようにバラバラに定義できる、ということです。


## ジョブ実行、そして確認

上記の定義をしたあとにrunしたら以下のようになります。
真ん中の列で、ちゃんとそれぞれ、動いていることがわかります。

![スクリーンショット 2016-11-19 23.52.08.png](https://qiita-image-store.s3.amazonaws.com/0/119378/0c6a51ad-7767-d956-5ae3-fda931b610c1.png)