OmniAICreator/Qiita-1.07M huggingface dataset:
香風智乃生誕祭2016

#香風智乃生誕祭とは

[\#香風智乃生誕祭2016 hashtag on Twitter](https://twitter.com/hashtag/%E9%A6%99%E9%A2%A8%E6%99%BA%E4%B9%83%E7%94%9F%E8%AA%95%E7%A5%AD2016?src=hash) のようにチノちゃんの誕生日を祝うことで、プログラマなのでちょっとだけ技術的に祝ってみることにしました。

#Live2D with WebGL

Live2Dとは2次元の絵をグリグリと動かす技術のことです。JavaScriptで動かすことができるのでそれを使ってみることにしました。[WebGL 2\.1 \- Live2D Cubism SDK 2](http://sites.cybernoids.jp/cubism-sdk2/webgl2-1)

## モデルを作る

まずは、ものすごく頑張ってLive2Dのモデルを作成します。

### 元絵を描く

動かす元の絵を描きます。左目玉、左白目、左眉、左横髪と言った具合に動かすパーツを想定して各々レイヤーに分けます。ブレンドモードは通常で不透明度は100％にする必要があります。ものはPSDで保存します。

|![pic1.png](https://qiita-image-store.s3.amazonaws.com/0/380/887e77a0-422b-9817-2022-890c9b39da26.png)|![pic02.png](https://qiita-image-store.s3.amazonaws.com/0/380/05110fcb-a571-8a17-8351-9566051c4034.png)|
|:-:|:-:|
|全表示|右横髪非表示|

### モデリング

Live2D Modeler Cubismでモデリングします。先程のPSDを読み込んで動きをつけていきます。とりあえず顔と髪が動くようになるとそれっぽくなるので頑張りましょう。
![model.png](https://qiita-image-store.s3.amazonaws.com/0/380/10b6a228-ef33-bd30-1a2a-b108502e76af.png)

そして、mocファイル書き出しすると最終的にこんな感じのファイルができます。
<img width="197" alt="スクリーンショット 2016-12-04 23.39.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/380/e28fbe70-e28c-cd4b-11ab-aa818d233759.png">

できたモデルをLive2D Viewerで読み込むとそこそこ遊べます。
![ss1.png](https://qiita-image-store.s3.amazonaws.com/0/380/762eceb7-95ea-fb34-4aae-aeeaa41e127d.png)


## SDK持ってきて試す

[WebGL 2\.1 \- Live2D Cubism SDK 2](http://sites.cybernoids.jp/cubism-sdk2/webgl2-1)にサンプルが入っているので適宜書き換えて作ったモデルを読み込んでみます。

```js:sample/sampleApp1/src/util/LAppDefine.js
    //  モデル定義
    // MODEL_HARU : "assets/live2d/haru/haru.model.json",
    MODEL_HARU : "assets/live2d/chino2016/model2.model.json",
    MODEL_HARU_A : "assets/live2d/haru/haru_01.model.json",
    MODEL_HARU_B : "assets/live2d/haru/haru_02.model.json",
    MODEL_SHIZUKU : "assets/live2d/shizuku/shizuku.model.json",
    MODEL_WANKO : "assets/live2d/wanko/wanko.model.json",
    MODEL_EPSILON : "assets/live2d/Epsilon2.1/Epsilon2.1.model.json",
```

Epsilon2.1からモーションを借ります。

```json:sample/sampleApp1/assets/live2d/chino2016/model2.model.json
{
	"version":"Sample 1.0.0",
	"model":"model2.moc",
	"textures":[
		"model2.2048/texture_00.png"
	],
	"motions":{
		"idle":[
			{"file":"Epsilon2.1_idle_01.mtn"}
		]
	},
	"project_settings":"model2.settings.json",
	"name":""
}
```

そして、落としてきたSDKのルートでローカル鯖を立てて実行してみると・・・
![8e014d715a365d7fc70d7243f62411c0.gif](https://qiita-image-store.s3.amazonaws.com/0/380/2d0a4f9e-adfc-58e7-ab4d-ba70c383717d.gif)

動いた!誕生日おめでとうございます!

# 参考

* [ビギナーのためのLive2D テクニックガイド](https://www.kohgakusha.co.jp/books/detail/978-4-7775-1957-6) 大体これみて作りました
* [WebGL 2\.1 \- Live2D Cubism SDK 2](http://sites.cybernoids.jp/cubism-sdk2/webgl2-1)
Azure サブスクリプションの課金アラートの設定

#Azure サブスクリプションの課金アラートシステムとは
Azureを使っている際に料金がどれくらいかかっているのか不安になったことはありませんか？
毎回毎回、Azureのポータルにアクセスして料金を確認するのはめんどくさい！ということで、Azure サブスクリプションの課金アラートシステムを使うことでシステムの無駄な課金を防ぐことができます。アラートシステムは特定の金額に達すると自動的にメールを送信します。

#アラートシステムの設定
[こちら](https://account.windowsazure.com/Subscriptions)からMicrosoft Azureのサブスクリプションのページに飛びます。そこで、サブスクリプションの選択します。

![１.png](https://qiita-image-store.s3.amazonaws.com/0/130097/09daa1f6-bab0-a1d2-0bae-2002554f8bb9.png)


サブスクリプションのページに残り日数や料金がわかります。このページの**【プレビュー機能】**を選択します。

![２.png](https://qiita-image-store.s3.amazonaws.com/0/130097/775b07fb-b3e0-3cb1-591f-4ab447eac667.png)

**Billing Alert Service**からAlertを**【try it now】**を選択してONにします！

![３.png](https://qiita-image-store.s3.amazonaws.com/0/130097/6bdaee1a-f855-8a19-c1f7-2a0f005b0fae.png)

すると、**You Are ACTIVE** となりアラート設定ができるようになります。

![４.png](https://qiita-image-store.s3.amazonaws.com/0/130097/5494918e-f66d-d784-c632-5f71170871a6.png)

先ほどの**サブスクリプション**に戻ると**アラート**というタブが増えるのでそこでアラートの設定を行うことができます。

![５.png](https://qiita-image-store.s3.amazonaws.com/0/130097/ba459383-e2af-9643-f252-a1543ccc9083.png)

ここでの**請求合計,通貨クレジット**とは、通過クレジットがクレジットカードになり、請求合計がサブスクリプションの使用金額になります。合計5つのアラートを設定できます。
設定が終了して、保存をすると、アラート内で設定したメールにアラート設定したという確認メールが届き完了です。

![６.png](https://qiita-image-store.s3.amazonaws.com/0/130097/2de99519-92ec-d6a6-d4df-b28f4c49fde3.png)

#参考サイト
https://docs.microsoft.com/ja-jp/azure/billing-set-up-alerts
[*その他*] JJUG CCC 2016 Fall に行ってきたメモ

# はじめに
JJUG CCC 2016 Fall に行ってきました。
その際のメモ。
一部自分でも何がなんだか思い出せないメモがあるけどひとまずそのまま。

# 後でセッション全体のスライド読む用メモ
[JJUG CCC 2016 Fallの発表資料,ブログ記事まとめ](https://github.com/jjug-ccc/slides-articles-2016fall)

# 聴いたセッションのメモ
## 新人研修や本では教えてくれないJava！〜フレームワークの仕組みと実務必須ツールを学ぼう〜

[スライド](https://speakerdeck.com/masatoshitada/wan-quan-ban-xin-ren-yan-xiu-yaben-dehajiao-etekurenaijava)


* maven・・・ビルドツール、IDEには大体入ってる
* mavenはフォルダ構造が決まっていて、その構造に従う必要がある
* webフレームワーク・・・MVCをきっちり分ける（例：Spring MVC（Thymeleafが最近人気）、JSF）
* JSPのクロスサイトスクリプティング問題
* ORマッパー・・・DBアクセスを簡単にかける（例：JPA、Hibernate）
* DIコンテナ・・・コントローラーとDAOの接続担当、インスタンスの代入を自動でやってくれる（依存性注入）
* リフレクション・・・クラス名からインスタンスを生成する
* サーバーを起動する→mainメソッドが動く
* ログ・・・logback

## SIerもはじめる わたしたちのDevOps

[スライド1](http://www.slideshare.net/syobochim/sier-devops-jjugccc-69780604)
[スライド2](https://docs.com/asashiho/8906/jjug-ccc-2016-fall)

* DevOpsってなにか・・・開発×運用（開発チーム×運用チームで価値を生み出す）、文化×技術
* Kibana
* Docker・・・特定の実行環境に依存しない
* 今あるアプリをDockerに、は失敗する
* crach.academy


## 日本でも出来る！最先端のDevOpsを導入する方法

[ブログ](http://simplearchitect.hatenablog.com/entry/2016/12/03/142029)

* DevOps・・・人・プロセス・プロダクトの集合体でエンドユーザに価値を提供すること
* 本番環境・・・フィードバックを得るための場として
* 予見するのではなく、本番にデプロイして確認
* 会社のルールだから従わないといけない→上の人からすると結構どうでもよかったりする（そんなことよりリードタイム短くしたかったりする）ので、おかしいルール等について指摘
* アジャイルの導入難度→日本は圧倒的に高い（106カ国でNo1　ダントツ）
* 日本文化の上にアジャイルやDevOpsむずかしい
* 西洋文化を学んで取り入れる　文化のインストール
* 海外と日本の単位時間あたりの生産性比較→物量が違う、やる仕事量が違う、向こうだとメールとかも超簡潔だったりする、日本だったら提案書を用意して…などで時間かかる
* Be Lazy・・・より少ない時間で成果を最大化する
* 重大なことをやる/捨てるものは捨てる、大切な事以外は断る
* 日本：10個のうち、2個優先度高い重要なのをやる、残り8も頑張る
* 海外：2やったら、残り8はやらない／捨てる
* 準備に対するモノの考え方→日本だと事前準備にとても時間をかけるので知らないからできないとか準備してないからできない等が発生する
* 海外の場合は知らんでもやってみてValueを出す、やってから考えるみたいな勢い、いかにValueを出すか
* DevOpsハックフェスト→お客さんと一緒にハックしてその場で自動化したりする→お客さんのスキルも上がる


## GitBucketを支えるJava技術とグローバルで使われるOSSの作り方

[スライド](http://www.slideshare.net/takezoe/gitbucketjavaoss)

* Scalaで実装されたOSSのGitサーバ
* GithubとUI似すぎていて、Githubの弁護士からメールが→UI変更
* 平日仕事終わってから1、2時間とか休日とかでやってる

# おわりに
どの発表も面白かった。
DevOps関連、とても興味が。
Dockerは触ろう触ろうと思いつつ、今日まで触ることなくきてしまったので触ってみようと思った。

海外と日本のやる仕事量の違いについてはなるほどなーと思った。
確かに日本の場合だと、タスクに優先度はつけるが2割やって8割は捨てるとかそんな潔いことはしないので、大して重要でもないけどやらないといけないことってのが蓄積されていく体質なのだなーと。
海外の何をするにもあまり準備をせずに時間内にいかに成果を出すかに集中ってのもすごいなと。
日本の体質的になかなかNO準備でその場で頑張ろうとか、残りのタスクはもう無かったことにスパッと潔く切り捨てるってなかなかならないとは思うけど、最近は残業とかそういうのも減らしていく流れに世間がなってきているので、日本もそういう方向転換を強いられていくのかな。
JJUG CCC 2016 Fallに参加してきました


# はじめに
2016/12/03に行われたJJUG CCC 2016 Fallに参加してきました。
JJUG CCC 2016 Springに続き2回目です。
参加したセッションの感想を書いてみたいと思います。

# 新人研修や本では教えてくれない Java！～フレームワークの仕組みと実 務必須ツールを学ぼう～
参加者の割合は、教わる側と教える側でちょうど半分くらいだったようです。
一応、私は教える側の立場として聞きました。
新人研修が終わり、実際にWebアプリケーションを構築するのに必要な、次の知識が整理されています。
これらを利用しないとどういった問題があり、それをどう解決できるのか記載されているのが良いですね。

セッションにあたり一部を割愛されたそうですが、下記のスライドは割愛する前のものです。
[[完全版] 新人研修や本では教えてくれないJava！](https://speakerdeck.com/masatoshitada/wan-quan-ban-xin-ren-yan-xiu-yaben-dehajiao-etekurenaijava)

# 基調講演2： 「Java EE - What's Next?」 
Java EEが今後どうなっていくのか気になり聴講しました。
JavaOne 2016で発表された内容とほぼ同じようです。スライドにもJavaOneの文字があります。
Dockerの扱いが大きいのが印象にのこりました。
Java EE 8ではCDI、JAX-RSなどの中核技術は順当に対象となり、あとはJSON対応が進むようですね。
Java EE 8が2017、Java EE 9が2018。こんなに早くリリースできるんでしょうかね？

[Java EE, What's Next? by Anil Gaur](http://www.slideshare.net/itakashi/java-ee-whats-next-by-anil-gaur)

# Javaの型システム再入門 ～オブジェ クト指向からジェネリクスまで～
OOPを実務に生かせておらず、Genericsは普通に使えていますが正しい知識を持っていると言えない為、参加しました。
最後にJJUG幹事の方が「初心者向けというより中級者向け」とおっしゃってましたが、まさしくその通りでした。
参加者は初心者が多かったようで、登壇者の方もやりにくかったようですね。
私は中級者だと自任しているので、レベル感あっていて非常に勉強になり楽しかったです。

[Javaの型システム再入門 ～オブジェクト指向からジェネリクスまで～](https://github.com/nagise/JJUG-CCC-2016-FALL/wiki)

# JAX-RS REST Client で Cognitive Service や Excel を操作しよう
日本マイクロソフトの寺田さんのセッション。さすがの人気です。
サービスを利用することによってどのようなバリューを提供できるのか、開発者の未来について語られていたのが印象に残りました。
Cognitive Serviceの紹介が中心でした。
個人的にはExcelのRESTアクセスが気になっていたので、もうちょっと聞きたかったです。

# JPA と DDD の関係で僕が思っている こと
Java EEについて調べていると、必ずといっていいほどヒットするopengl-8080さんのセッションです。
JPAだけで見ると使いにくいと感じるが、DDDとの類似性に気づいたというお話です。
DDDの知識がなかったのですが、資料、検証が丁寧で分かりやすかったです。
最近JPAを勉強しようと思っているので、セッションの内容を思い出しながら触ってみたいです。

[JPA と DDD の関係で僕が思っていること](http://qiita.com/opengl-8080/items/944a6383f81dd3406486)
[JPA マッピングカタログ](http://qiita.com/opengl-8080/items/5190ee953cfbab5ce3e9)

# まとめ
この規模のカンファレンスが無料で提供されるのは本当にありがたいです。
弊社の人間にも行くように勧めようと思います。
自分は春からちょっと進歩できていると感じられたのが嬉しかったです。
今後も勉強を続けていきます。
[1day1lang AdventCalender] day3 PHP

#環境設定
## phpインストール
```bash
$ sudo apt-get install php
```

```bash
$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
```

## Hello World!

```bash
$ php -r "echo 'Hello World!'.PHP_EOL;"
Hello World!
```

## Apacheインストール
今回は必要ないが、Apatche2 もインストール

```bash
$ sudo apt-get install apache2
```

Apache が動いていることを確認

```bash
$ curl http://localhost
```

# ツリー描画プログラム
```php:tree.php
<?php

define("ASTER", "* ");
define("SPACE", " ");
define("EVE", 24);

$sumAster = 0;
$step = 0;

while($sumAster <= EVE) {
    $step ++;
    $sumAster += $step;
}
$trnk = EVE - ($sumAster - $step);

for ($i = 1; $i <= $step; $i++){
	if ($i < $step) {
	    for ($j = $step; $j > $i; $j--) echo SPACE;
	    for ($j = 1; $j <= $i; $j++)    echo ASTER;
	} else {
		for ($j = $i - $trnk; $j >= 1; $j--) echo SPACE;
		for ($j = 1; $j <= $trnk; $j++)      echo ASTER;
	}
    echo PHP_EOL;
}

```
実行

```
$ php tree.php 
      * 
     * * 
    * * * 
   * * * * 
  * * * * * 
 * * * * * * 
    * * * 
```

# おわり
もしもjQuery.getJSON()をjQueryなしで書きたかったら

JSONファイルを取得するときに<code>jQuery.getJSON()</code>あるいは<code>$.getJSON()</code>を使用するケースがあると思います。IEとか気にしない環境やなるべくシンプルに軽量に記述したいという理由なんかでjQueryを使用しないケースを想定して、ピュアJavascriptでの<code>.getJSON</code>の書き方をメモっておきます。

## jQuery

```
$.getJSON( "file.json", function( data ) {
  var items = [];
  $.each( data, function( key, val ) {
    items.push( "<li id='" + key + "'>" + val + "</li>" );
  });
 
  $( "<ul/>", {
    "class": "my-new-list",
    html: items.join( "" )
  }).appendTo( "body" );
});
```

## Pure Javascript
```
function getjson(objs) {
    objs = JSON.parse(objs);

    objects.forEach(funciton (obj) {
        var div = document.getElementById(obj.id);
        div.innerHTML = obj.text;
    });
}

var request = new XMLHttpRequest();

request.onload = createElements;
request.open("get", "file.json", true);
request.send();
```
英語でコミット！

随時更新してきます。

##書き方
- 大文字で始める
- ピリオドは付けない
- 「〇〇を～しました」は動詞の過去形で始める
    - Fixed conflict

##単語

### Fix
|英語|意味|
|:-:|:-:|
|Fix A|Aを修正|
|Fix A of B|BのAを修正|
|Fix for A|Aに対する修正|


### Add
|英語|意味|
|:-:|:-:|
|Add A to B|AをBに加える|

### Remove
|英語|意味|
|:-:|:-:|
|Remove A|Aを取り除く|
|Remove A from B|AをBから取り除く|
- Remove unused code

### Update
|英語|意味|
|:-:|:-:|
|Update A to B|AをBに更新する|

### Move
|英語|意味|
|:-:|:-:|
|Move A to B|AをBに移動する|
|Move A from B|AをBから移動する|

### Rename
|英語|意味|
|:-:|:-:|
|Rename A to B|AをBにリネームする|

### Use
|英語|意味|
|:-:|:-:|
|Use A in B|BでAを使う|

### improve
改善する

### optimize
最適化する

### now
now + 動詞の過去形で、「今後〇〇されるようになる」と使う。

### issue
不具合。bugではなくこちらを使う


## オシャレフレーズ

- cosmetic change
    - インデントの修正などコードをちょっときれいにしたときに
- :put_litter_in_its_place: `:put_litter_in_its_place:`
    - 不要な行を消すなど
- :scream_cat: `:scream_cat:`
    - ミス
Eclipseがjavafxパッケージを読み込んでくれない時の対処法


## ビルドパスの設定
 - 取り込みたいプロジェクトのPropertiesを開く
 - Java Build Pathを選択

![スクリーンショット 2016-12-04 23.21.11.png](https://qiita-image-store.s3.amazonaws.com/0/125931/731bf213-85e2-2e6f-15ba-273feea7ed2e.png "スクリーンショット 2016-12-04 23.21.11.png")

## Access rulesの追加
Libraries中のJavaSE項目を展開

![スクリーンショット 2016-12-04 23.22.24.png](https://qiita-image-store.s3.amazonaws.com/0/125931/254db24c-e5f4-e995-1d50-4a35af8dc36f.png "スクリーンショット 2016-12-04 23.22.24.png")

##Access ruleの記述
javafx以下を全て取り込み対象にしたい場合javafx/**

![スクリーンショット 2016-12-04 23.22.43.png](https://qiita-image-store.s3.amazonaws.com/0/125931/ca218007-cd8e-1553-28a0-63a58f55abcf.png "スクリーンショット 2016-12-04 23.22.43.png")

### 参照元
[Using JavaFX in JRE 8](http://stackoverflow.com/questions/22812488/using-javafx-in-jre-8)
Swift3で同期処理と非同期処理 その2

#概要
前回の続きで、2からになります。
http://qiita.com/koji-nishida/items/14fda04b586263a47e73

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

#DispatchSemaphoreの使い方
###Semaphoreとは
http://wa3.i-3-i.info/word13357.html

###こんな使い方ができる
例えば、前記事の並列処理(上)を、無理矢理直列処理（下）にさせるというサンプルです。  
![スクリーンショット 2016-12-04 22.51.38.png](https://qiita-image-store.s3.amazonaws.com/0/38124/3a530014-c1e1-f7eb-cb8f-de4ba1107826.png)
![スクリーンショット 2016-12-04 22.54.44.png](https://qiita-image-store.s3.amazonaws.com/0/38124/adf6bc1b-0c4a-6e10-cff6-fc56bda98f60.png)

下は同時に3つ以上は実行できないようにするというサンプルです。
![スクリーンショット 2016-12-04 22.59.11.png](https://qiita-image-store.s3.amazonaws.com/0/38124/5fb4dae5-8355-eca3-ec29-346089388c20.png)

###実際の使い所
もうちょっと具体的な使い方を。
例えば、非同期でAPIでリストデータを取得して、
データが取得でき次第、テーブルに描画(reload)するようなよくあるやつ。
だいぶ端折ってますが、だいたいこんな感じです。
複数のリクエストを並列で投げれないから、リクエスト返ってこなかったらどうするんだとかいう話は、
見逃して下さいｗ
![スクリーンショット 2016-12-04 23.21.42.png](https://qiita-image-store.s3.amazonaws.com/0/38124/f107873f-575e-cd9f-2ebc-8698fbc1ffe9.png)
![スクリーンショット 2016-12-04 23.21.20.png](https://qiita-image-store.s3.amazonaws.com/0/38124/140dce73-5a86-cb12-2400-57b4fcad207e.png)
iPhone(safari)での検証

webサイトの検証作業をしていてiPhoneでも検証出来たらいいのになと思っていたら、普通にあるということ。
私みたいな経験の浅い人は知らないこともあると思うのでご紹介。


# 使用方法
※今回はmacでの説明になります

1. **iPhoneとパソコンをUSBケーブルで繋げる**<br><br>
2. **safariを起動しメニューの開発から「iPhone」→「(検証先の)URL」を選択**<br><br>![2.png](https://qiita-image-store.s3.amazonaws.com/0/142824/d97a32eb-e1dc-8250-4664-01fa227dad83.png)
<br><br>
3. **検証画面が開きます**<br><br>![1.png](https://qiita-image-store.s3.amazonaws.com/0/142824/38af437b-2975-f8c1-2ab5-3459d1362608.png)

<br><br>

※safariのメニューバーに開発が表示されていない場合、環境設定の詳細に「メニューバーに”開発"メニューを表示」にチェックを入れてください

![3.png](https://qiita-image-store.s3.amazonaws.com/0/142824/1f5d8b4c-0c74-2327-bc57-fa1029a606da.png)
Jenkins入門②〜Jenkins設定編

# はじめに
前回まででJenkinsのインストールが完了してるかと思います。
今回はJenkinsの設定編です。
JenkinsをインストールしてあるPCからの操作になります。
さくさくいきますよー。

# 前回までの記事
[Jenkins入門①〜Jenkins概要とインストール編](http://qiita.com/izumaru_akippa/items/6b88694b62050ae89479)

# Jenkins起動
以下のコマンドをターミナルから実行しましょう。

```bash
$ jenkins
```

そうすると以下のようなものが表示されます。

```bash
*************************************************************
*************************************************************
*************************************************************
 
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
This may also be found at: /Users/hoge/.jenkins/secrets/initialAdminPassword
 
*************************************************************
*************************************************************
*************************************************************
```

xxxx...のとこが初期パスワードです。

# ロック解除
http://localhost:8080/
を開きましょう。
初期設定画面が表示されます。スクショないです。ごめんなさい。
初期パスワード入れるところがあるので入力してContinue。

# プラグインのインストール
こちらもスクショがありません。
「Install suggested plugins」を選択すればよいでしょう。
しばし待ちましょう。

# 管理者ユーザー作成
もちろんこちらもスクショがありません。
必要事項を入力しましょう。

ブラウザはこれで終了。ここからMacの設定です。

# 自動起動設定
```bash
$ cp /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
```

# ネットワーク設定
LAN内からアクセスできるようにしましょう
・システム環境設定→ ネットワーク→詳細→TCP/IP→IPv4の設定→DHCPサーバを使用（アドレスは手入力）を選択
IPv4アドレス欄に任意のIPアドレスを。

・~/Library/LaunchAgents/homebrew.mxcl.jenkins.plistを編集
ついでに文字コードの設定も

```text:homebrew.mxcl.jenkins.plist
// これ削除
<string>--httpListenAddress=127.0.0.1</string>
 
// これ追加
<string>-Dfile.encoding=UTF-8</string>
<string>-Dsun.jnu.encoding=UTF-8</string>
```

# Jenkins再起動

```bash
$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
```

今回はここまで！
とりあえずLAN内からアクセスできるようになりましたね！
【FileMaker】スナップショットリンクを簡易的なバックアップとして活用しよう

はい、今日は、[AdventCalendar 2016 FileMaker Tips](https://qiita.com/advent-calendar/2016/filemaker-tips/) 12/04の記事です。
まだどなたもエントリーしていなかったので、つなぎですみませんが小ネタでよろしくお願いします。

今日は、[スナップショットリンクとして保存](http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9051/~/スナップショットリンクとして保存)を紹介します。

まずは、どういう動きか、↓でどうぞ。
https://youtu.be/zolhfDq4mIY

動画では、検索した結果をスナップショットリンクとして保存しています。
保存されると、拡張子が"fmpsl"になります。

スナップショットとは、PCの画面をそのままキャプチャするのと同様に、例えば検索している結果や表示しているレイアウトなどを、FileMakerを使っている最中の止まった動きとして保存してくれます。

何かしら作業の途中で、別のファイルを開かないと、、、でも今までの作業は次開いた時にすぐに開始したい、とか、「この検索結果をお客様にみてもらいたい」という時に有効だと思います。
スナップショットリンクは、FileMaker Goでも同様に利用できますので、お客様先で得た検索結果などをすぐに共有できます。

また、スナップショットリンクはスナップショットを撮る瞬間までのデータを保管していますので、簡易的なバックアップとして利用してもいいかもしれませんね。

この機能はFileMaker Pro 11から実装されていますが、意外と知らない方もいらっしゃるのではないでしょうか？
ぜひ使ってみてください。
スタートアップでマイクロサービスするなら、並列処理が楽で軽量な技術スタックを1つ持っとくといいかも


4日目にして割と挫折気味ですが、ポエムでなんとかつなごうと思います。

---

技術会社ではないスタートアップで、開発を始めていくことを念頭に置きます。

スタートアップの会社でマイクロサービスとか無理/無駄でしょ、っていう意見もあります。
が、スタートアップでも、ある程度多角的にビジネスをやっていると、マイクロサービスらしくなくても明らかにビジネスの境界が明確なときに、サービス分けといた方がむしろ無難なケースもあると思います。(そもそもユーザから見ても全く別々のサービスだとか)

しかし、このタイミングから技術スタックをどんどん増やしていくのは、いかにも考えものです・・・。たいていの場合、最初の数個のサービスは同じ技術スタックを使っていくことになるでしょう。

仮にそれがRuby on Railsだとします。実装コストが低い、枯れていてハマリが少ない、技術者もそこそこ確保しやすい、いい選択ですね!

---

1年くらい経つとRuby on Railsの知見も社内に溜まりはじめ、書き方や使うライブラリがこなれてくるはずです。幸いビジネスも順調に進んで、事業は4つくらいのサービスに分解されています。

そんなときに、例えば、サービスをまたがる管理画面を作りたいという話が出ました。そして、作る前にたまたま、昨日の記事、[「管理画面」のマイクロサービスを立ち上げる前に考えるべきこと](http://qiita.com/qsona/items/f5d5f470f6b00195ea7b) を見たとしましょう。

- 選択1. SPA (Single Page Application) で作る
- 選択2. DBをほぼ持たないようなサーバで作り、HTMLをレンダリングする
- 選択3. 新しく責務を担うサービスを作る

検討した結果、まず責務ではないので3ではない。SPAにしたい気持ちはあるが今の技術状況で行くのは危険。
熟慮の結果、2を選択しました。

---

では、2をやるときに技術スタックは何にしようか少し悩みます。普通のサービスならノータイムでRailsですが、ここは少し悩みどころかもしれない・・・。

- DBがほぼ不要 => ActiveRecordが不要。
- API呼び出しが多い。並列にリクエスト送りたい。

というあたりで、Railsのスタックとちょっとミスマッチが心配される。

しかし現実的には、社内の技術はRuby+Railsしかなく、新しいものを習得するコストは非常に高い。

どうするか?

1. Node.jsにする。(理論派案)
2. Railsにする。(現実派案)
3. 同じRubyだけど軽量のフレームワークのsinatraにする。(折衷案)

---

正直に言って、正解はなさそうです。2にするかもしれませんね。

ただ、2を選ぶとするときに気になることが一つあります。

**RailsでMVCする方法は知っていても、「Railsで外部API叩きながらViewをつくる」方法にこなれてるわけじゃない**

逆にRailsを下手に知ってる分、

- 責務をもってしまう
- DBにデータもってActiveRecordつくってViewでレンダリングしてしまう
 
・・・的なことが起きうる危惧があります。

---

下は、技術的負債の種別を、軽い順に並べたものです。

1. 小さめのサービス内で完結している負債
2. 大きめのサービスに積もってきている負債
3. サービスをまたがる設計の負債

もっとも避けたいのは3のタイプです。3を避けるためには、ある程度矯正ギプスが必要なのかなと思っています。

いつもと違う・・というか本来それに向いているやり方(Node.jsとか)しておいたほうが、一時的コストはかかっても最終的に設計ミスって辛くなるという最大の問題は避けやすい気がしています。

---

逆に言うと、このサービスはこう設計するべきという指針が固くあり、それが十分浸透できるのであれば、そこにあるものは、その指針に向いてない言語やフレームワークだろうが、最初はなんでもいいと思うのです。できないってことはないので。

個人的には、スタートアップではそれって結構難しいのではないか、という気がしたりしています。

いやでも、スタートアップにおいては常に正しいアーキテクチャなんて多分ないので、逆にそういう取り決めごとみたいのをしっかりしておく方がもしかしたら大事なのかもしれません。そう考えると、もうRailsだと決め打って、そのかわり方針の取り決めをしっかりする、という戦略もあり得ると思います。

ちょっと答えは出せないです。一旦両論併記(?)してみました。

---

で、ここまで書いてタイトルに戻ります。

**スタートアップでマイクロサービスするなら、並列処理が楽で軽量な技術スタックを1つ持っとくといいかも**

きっと後々使うんだから、Node.jsか、Goか、何か使えるものを持っておきましょうよ、こういう使うタイミングがあれば、せっかくだからやっておきましょう、と。

あるいはそもそも最初からそれをバックエンドでもメインに使う、というのも、NodeにしてもGoにしても今なら全然ありだと思います。

# 最後に

はい、今日は正直パスの予定でしたが、初のAdventCalendar次回予告をしたいがためにポエムを書いてしまいました。

明日、5日目は、初心者詐欺で名を轟かす [ovrmrw (ちきさん)](http://qiita.com/ovrmrw) さんです!!
SmartSketchからはじまったのだ

オールドファンの皆さまコンニチワ
まつばらあつし　でございます
今回は、ちと昔話をしてみようかなと思っております
ホンのちょい、おつき合いの程を・・・・・・・・

***********************************************************
さて、今を遡ること20年ほど前のおはなし

当時（たぶん）九段下にあった「某Mac Fan」という雑誌の編集者のN君から
「まつばらさん、オモシロイお絵描きソフトあるんですけど、見に来ませんか？」と電話があった。
そのころ、すなわち1995年ごろ（だったと思うけど確信無し・ゴメン）、Mac誌とかに文章＆お絵描きを寄稿していた、そう言われたんならオモシロがりに行こうと、ワタクシは「そんじゃ行くね」と、地下鉄に乗って行ったワケですよ九段下。

で、そこで見せられたのが「スマートスケッチ」というヤツ。地味なパッケージで、初対面は正直さほど興味が湧かない感じだったんですが、編集のN君が「これね、フツーにこうやって描くと、ほら、線がベクターデータになるンスよ」とか言ってるワケ。
いや、正直言ってワカンナイから。ナニソレそんなのできるわけないじゃん、とか言ったような記憶もあるが、とにかく実物をみた時にマジでびっくりしちゃったわけですよスマートスケッチ。
何だよコレ超ヒキョーなソフトだよな。こんな事できるんだスゲエなあ・・・。
という感じで完璧に引き込まれちゃいました。

というわけで、そのままパッケージごとお持ち帰りして、なんか数日触っていたら面白くなってきて、そこに追い討ちをかけるようにN君からの電話。
「で、まつばらさんレビューよろしく。2ページ・・・いや、4ページ行けますよね。じゃ、来週までにお願いしますね」とか言われちゃって、もう、逃げられない状態。モチロン書きましたよレビュー記事。Mac Fan誌に。
（イヤ実はその記事探して引用しようと思ってたんですけど、旧い記事が見つからないんで断念。昔のデータはSyQestのリムーバブルHDDのクラッシュと共に消えちまいました電子の彼方）

そんなわけでFLASHの元となった「スマートスケッチ」から20年ほど。この歳になっても未だ仕事でのお絵描きは「FLASH」&「Animate」なワケでございます。
ちなみにワタクシが、Mac Fan誌でスマートスケッチのレビュー記事を書いたのと同じ月に、たしかMacPower誌でまつむらまきおさんが、やはりスマートスケッチのレビュー記事を書いてたような記憶があります。まつむらさん元気かな。

まあ、20年以上前の事ゆえ、いろいろ記憶が曖昧になってるんですけど、敢えて今回は「ググらない」で記事を書いてみました。したがってナニカ間違ってるトコがあったら、教えてくださいね。
というわけで、おれたちゃ付き合いが長いんだぜという、としよりの自慢話でありました。
これからもよろしくねAnimate。

2016年12月4日　　まつばらあつし（お絵描き屋さん&文字書き屋さん・時々ガッコの先生）
Arduino UNOでVL53L0X Time-of-Flight 距離センサモジュールを使う

# Arduino UNOでVL53L0X Time-of-Flight距離センサモジュールを使う

ToF方式の距離センサを試したくて、Arduino UnoとVL53L0Xでやってみる。

# 道具・材料

Arduino Uno R3 - スイッチサイエンス https://www.switch-science.com/catalog/789/
VL53L0X Time-of-Flight 距離センサモジュール - スイッチサイエンス https://www.switch-science.com/catalog/2869/
ニューブレッドボード
ジャンパワイヤ(オス～オス)
ハンダ
ハンダゴテ

# 接続するピン

Arduinoとセンサのぞれぞれ以下を繋げば良い。

| Arduino | VL53L0X |
|:-:|:-:|
|  5V |  VIN |
| GND  | GND  |
|  SDA | SDA  |
|  SCL | SCL  |

# SCL・SDAって何

知らなかったので調べた。

> ArduinoUnoR3のレイアウトでは、SDA(データ線)とSCL(クロック線)という2つのピンがAREFの隣にあり、このピンにI2Cデバイスを接続することができます。汎用ピンをSDAとSCLとして使うこともでき、その場合は下記のピンを使います。
>Uno: SDA=A4 SCL=A5

# 作業

ToFセンサにピンヘッダがストレートのやつとL字のやつが付属している。
今回はブレッドボードに立てたいのでL字のやつをはんだ付け。

![IMG_5350.JPG](https://qiita-image-store.s3.amazonaws.com/0/16283/d0cf8103-ee03-c4c9-1d3a-63260612eedc.jpeg)

ブレッドボードにToFセンサを挿して、Arduinoと繋ぐ。

![arduino-uno__VL53L0X_bb.jpg](https://qiita-image-store.s3.amazonaws.com/0/16283/c29cda8c-1e5d-c7e2-e8b8-13d7a85a1bbe.jpeg)

[GitHub](https://github.com/pololu/vl53l0x-arduino)からライブラリをダウンロード。
サンプルコードのContinuousのほうがシンプルだったのでとりあえずそれを開いて
READMEに従ってArduino IDEから検索してVL53L0X用のライブラリを入れる
サンプルスケッチ実行
おわり

# 参考

測距センサ VL53L0X を用いた身長測定器 | Home Made Garbage http://homemadegarbage.0t0.jp/vl53l0x01
pololu/vl53l0x-arduino: Pololu Arduino library for VL53L0X time-of-flight distance sensor https://github.com/pololu/vl53l0x-arduino
VL53L0Xデータシート https://www.pololu.com/file/0J1187/VL53L0X.pdf
VL53L0Xマニュアル https://www.pololu.com/file/0J435/UM10204.pdf
Arduino 日本語リファレンス http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=341
超シンプル目立たない複数ウィンドウ管理(ぞ式ElScreen)

こんにちは、[.emacs Advent Calendar 2016](http://qiita.com/advent-calendar/2016/dot-emacs)です。みなさんEmacsでいっぱいファイルを開きますよね？

私もいっぱいファイルを開いたり、かちかち切替したりしたいです ヾ(〃＞＜)ﾉﾞ しばらく前から雑に使ってて馴染んでる設定がありますので紹介します。

## そもそもElScreenって何

るびきち師の[elscreen.el : Emacsをタブエディタ＋GNU Screen(Tmux)化してしまえ！ウィンドウ構成管理の重鎮](http://emacs.rubikitch.com/elscreen/)をお読みください。

ついでにEmacs用語のの「ウィンドウ(window)」とか「フレーム(frame)」とかややこしいので、おなじくるびきち師の[そろそろEmacsのウィンドウについて一言いっとくか](http://d.hatena.ne.jp/rubikitch/20100210/emacs)を読まれると良いです。マルチウィンドウ管理やタブの実装はいくつかあるのですが、ここでは触れません。

私はElScreenの機能を、最低限は使ってるもののフル活用はしてません。

## 私とtmux

私は[自己主張しないtmux設定(SSH向け)](http://qiita.com/tadsan/items/e6d04df824e2207d8909)で書いたように、以下のようなポリシーで設定します。

 - ステータスラインごときに画面をもう一行占有されたくない
 - ウィンドウを操作するのはめんどくさい
   - 複数のウィンドウ／タブの移動・管理は煩雑である
   - たかだか「表」と「裏」をフリップできれば用は足りる

### なぜタブを利用しないか

もしA, B, C, Dの4面があったとすると、それぞれの面でどんな操作してるか記憶しておく必要があります。また、タブの形式では「左右の並び」といふ位置関係が生じます。

タブやウィンドウを散らかすよりは基本的に2面だけを使って、どうしても足りないときに1面だけ追加して3面にするといった運用にします。はじめから2面しかなければ、位置関係の移動を考慮する必要がありません。

## Emacsで、私はどうしたか

以上のような発想で私は3面以上のスクリーンを管理したくないので、**ElScreenの機能を潰します**。

つまり、以下のように設定します。

 - タブ表示は不要なので消す
 - Emacs起動時に既に2面が存在する状態にする
 - ワンタッチでタブ切替できるようにする (<kbd><kbd>C</kbd>-<kbd>&lt;tab&gt;</kbd></kbd>)
 - *(そのほかタブ関連の設定は無効化)*

`.emacs`ファイルの記述は以下のような感じになります。

```~/.emacs.d/init.el
;; ElScreen
(require 'elscreen)
(setq elscreen-prefix-key (kbd "C-z"))      ;; これは任意
(setq elscreen-display-tab nil)             ;; タブを消す
(setq elscreen-tab-display-kill-screen nil) ;; タブ全消しをしない
(setq elscreen-tab-display-control nil))
(bind-key* "C-<tab>" 'elscreen-next)
(bind-key* "<C-iso-lefttab>" 'elscreen-previous)
(elscreen-start)  ;; ElScreen開始
(elscreen-create) ;; ElScreenのスクリーン作成
```

## 運用方法

わたしはこんな感じで使ってます。便宜上「表」「裏」と表現しますが、どっちが表に意味はないです。

- (表左)実装コード (表右)参考コード／リファレンス (裏全面)テストコード
- (表全面)原稿([Writeroom-mode](https://github.com/joostkremers/writeroom-mode)) (裏左)参考実装コード (裏右)REPL(comint)等

要は、メインの作業とサブ作業と参考にしたいファイル、のようなものをかちかちスイッチしながら複数ファイルを横断できるのでべんりです。

## ElScreenとは関係ないところ

### あたらしいフレーム

ウィンドウじゃなくてフレームの話なんですが、私は基本的にEmacsは全画面表示にして使ってます。ところが、たまに小さいウィンドウ(Emacs用語での**フレーム**)を作って、ほかのアプリのウィンドウと並べて作業をしたいことがあります。

そんなときのために私は<kbd><kbd>M</kbd>-<kbd>N</kbd></kbd>を`meke-frame`コマンドに割り当ててます。ところがmacosでfullscreenで表示してるときに`make-frame`すると、新しいフレームもfullscreenになります。そこで<kbd>&lt;f11&gt;</kbd>を押すとfullscreenが解除されてるのではありますが、それがちょっとめんどくさい… `after-make-frame-functions`とかに登録すれば`make-frame`直後の動作を制御できるように見えるのですが、うまくいかない… ぐぬぬぬ……。
Jenkins入門①〜Jenkins概要とインストール編

大阪帰るはずが帰れなくて東京いるんでね。
予定ぽっかり空いて暇なんすよね。
ってことでシリーズ第2弾！

# はじめに
Jenkinsとはなんぞやという人向けの記事です。
Jenkinsの概要からJenkinsをインストールするところまでです。

# Jenknisとは
JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツールである。このプロジェクトはHudsonからフォークされた。オラクルが2010年12月にHudsonの商標を登録したことによるものである。
ソフトウェア開発向けに継続的インテグレーションサービスを提供しており、Apache TomcatなどのServletで動作しているサーバーベースシステムである。CVS、Subversion、Git、Mercurial、Perforce、Clearcaseといったバージョン管理システムツールに対応し、Apache AntやApache Mavenにおける任意のシェルスクリプトやWindowsバッチコマンドといったプロジェクトを実行することが出来る。おもなJenkins開発者には川口耕介がおり、MIT Licenseで公開されているフリーソフトウェアである。
ビルドはバージョン管理システムにおけるコミットでのトリガ、cronライクのメカニズムを通したスケジューリング、他のビルドが完了した時の構築、特定のビルドURLによるリクエストといった様々な方法で起動することができる。
出典:[Wikipedia](https://ja.wikipedia.org/wiki/Jenkins)

なんのこっちゃですねー。もうちょい簡単に書いて欲しいですねー。

# CIツールについて
クラウドでiOS/AndroidアプリのCIだとcircleciですかね？
まぁ他のことにも使えるし、クラウドより自由だし、一台くらい物理サーバーあってもいいよねってことでakippa社にはMac miniさんが鎮座しております。
Jenkins自体はJavaなので、WindowsでもMacでもLinuxでも動くけど、iOSビルドするならMacしかないですねー。

# Jenkinsを使うメリット
JenkinsというかCIツールを使うメリットですねー。

1.テストアプリ配布の手間が省ける。
CIツールなしでテストアプリを配布するには
iOS:UDID集めて、登録して、プロビジョニングプロファイル更新して、自動テストやって、Archiveして、Exportして、配布場所用意して、アップロード...
Android:自動テストやって、Generate Signed APKして、配布場所用意して、アップロード...
めんどくさい！CIツール使えば、バージョン管理システムにコミットするだけでおk！お手軽！

2.セキュリティ面で安全・事故のリスクが減る
申請用ビルドを作るには
iOS:配布用の証明書とProvisioning ProfileをビルドするPCに登録しなきゃいけない。
Android:keystoreとパスワード、key aliasとパスワードを共有しないといけない。
ないとは思いたいけど、エンジニアが悪意を持ったコードを埋め込んで申請する。なーんてこともなくはない。
かといって特定の人間しか申請できないのもそれはそれで困る。。
CIツールを使えば申請用のビルドも全部お任せしちゃえばおk！
生成されたipaなりapkをごにょごにょすればいいだけ！
人の手も一切入れられない！

ぼくの体験談なんですけどね。
当時大手SAPでストアランキングも上位の某有名ゲームの開発責任者をしてたんですね。とあるバージョンアップ申請の時。
テストアプリをみんなに配布してテストしてもらってはい、おk！
自分のPCでビルドして、申請！通った！リリース！
あれー？なんか変ー。
ログインできひん。。アクセスログ見て青ざめるぼく。
デバッグコード入ってるやんこれ！
結局、掲載停止してストアからしばらく非表示に。
人生史上最大に青ざめましたよ。
純粋な損失だけでも多大な金額なのに、これに広告とか外部とのキャンペーンとかかぶってたら、、首吊るとこでしたね。
人の手が入る以上、どんなに気をつけててもミスは起きますからね。
慣れてくると気をつけるのも忘れたりするし。
CIツールはね、機械ですから。設定した通りにしか動かない！素晴らしい！

# インストール方法
前置きが長くなりましたが。
さっそくインストール。

### ・動作環境
OS : Mac OS X El Capitan 10.11.6

### ・インストールするもの
JDK 1.8.0
Jenkins最新版

### ・事前準備
[こちら](http://qiita.com/izumaru_akippa/items/96cce728dac9f187ba2b)を参考にXcodeとHomebrewをインストールしておきましょう。

### ・JDKインストール
[こちら](http://www.oracle.com/technetwork/java/javase/downloads/index.html)からMac OS X用のインストーラー(dmg)をダウンロードしてインストール

### ・Jenkinsインストール

```bash
$ brew install jenkins
```

簡単ですねー。
次回は初期設定編ですよー。
Memo: Azure ネットワークとSmart NIC（FPGA ）の利用方法

Memo from "Microsoft's Production Configurable Cloud".
By Mark Russinovich, CTO MS Azure.

https://onedrive.live.com/view.aspx?resid=D026B4699190F1E6!2749

# How much trials were required to bring FPGA usable in production?

* Two generations were not usable for production. (v0, v1)
* 3rd generation, Catapult V2, was used in production.
    * Catapult V2 : All traffic go through FPGA. (40Gbps QSFP)
    * Slide 21: ![catapult-v2.PNG](https://qiita-image-store.s3.amazonaws.com/0/93467/dd3641d7-ff47-6a95-5c8c-6bc938ae2edd.png)


# Use cases which might be able to apply in private cloud

## Accelerated Networking: bypass virtual switch by offloading to Intelligent NIC.

* So called "VFP: Virtual Filtering Platform"
* Flow based policy (match / action) (ex: sending to )
* Encryption
* Load Balancing (IP NAT, MAC re-write)
* DNAT/SNAT
* Filtering, ACL
* Tenant VM plumbing (VNet Policy Routing)
* Tunnel termination (encap/decap)
* Slide 17: ![vfp-flowtables.PNG](https://qiita-image-store.s3.amazonaws.com/0/93467/898c3086-f057-0647-4c4c-f98e2e388c68.png)



## Reduce CPU to CPU (=~VM to VM) latency under 20us for 12 hops!!

* Using LTL: Lightweight Transport Layer.
* But could be considered as an approach to reduce latency. (i.e. offload TCP to Intelligent NIC)
* Slide 33: ![latency-over-ltl.PNG](https://qiita-image-store.s3.amazonaws.com/0/93467/82a3c32f-eed4-720a-86f1-fcb80b52d4a1.png)
Nimでのメイン処理とコマンドライン引数について

# 概要

nimの勉強がてら簡易なコマンドを作ろうとしたときに調べたことを書いていきます。

* メイン処理の判断(Pythonの```__name__=='__main__'```)
* コマンドライン引数
* プログラムの戻り値
* コマンドライン引数パーサーを利用

## サンプルアプリ１

メイン関数の判定を行い、引数、戻り値を設定するサンプルコードです。
isMainModuleという変数で、そのモジュールがメインとして起動しているかどうかを判断します。

```nim:main1.nim
# 通常のコマンドラインアプリサンプル その１

import system
import os

# メインモジュールとして起動しているかチェック
if isMainModule :
    # 終了コードは、system.programResult に設定する
    if paramCount() == 0 :
        system.programResult = 1
    else :
        # パラメータの取得
        echo "パラメータの数 =" $os.paramCount()
        echo "コマンドラインパラメータ = " $os.commandLineParams()
        echo "１個目のパラメータ = " $os.commandLineParams()[0]
        system.programResult = 0
```

```
# 引数ありで実行
$ main1 1 2 3                                                   
パラメータの数 =3
コマンドラインパラメータ = @[1, 2, 3]
１個目のパラメータ = 1

# 引数なしで実行
$ main1                                                   
FAIL: 1

```

## サンプルアプリ２

parseopt2というモジュールを使うと、コマンドラインオプションを自動的にパースして、扱いやすくしてくれます。
パースした結果をマップに入れて使うと便利そうです。

* -key
* -key:val or --key=val
* arg

```nim:main2.nim
# 通常のコマンドラインアプリサンプル その２

# コマンドラインパーサーモジュール
import parseopt2

# メインモジュールとして起動しているかチェック
if isMainModule :
    # イテレータで取得    
    for kind, key, val in getopt() :
        # (余談)kindは、enum型なので、case文ではすべてのenum値
        # を網羅していないとコンパイルエラーとなります
        case kind
        of cmdArgument:
            echo "引数 >" $key
        of cmdLongOption, cmdShortOption:
            echo "オプション > ",key,"=" ,val
        of cmdEnd:
            echo "終了"
```

```
#結果
/main2 -a -b:c --d --e:f --g=h i j k                                                                                                                                        
オプション > a=
オプション > b=c
オプション > d=
オプション > e=f
オプション > g=h
引数 >i
引数 >j
引数 >k
```
ElixirをBash on Ubuntu on Windowsで動かす

# Bash on Ubuntu on WindowsでElixirを動かす

**2018/04/27現在確認したところ普通に入れて動くようです**

Phoenixくんと戯れるためにElixir入れたら動かなかったので調べてみました。

Bash on Ubuntu on Windows上で

```
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install esl-erlang=1:18.3.4
sudo rm /usr/bin/erl
sudo ln -s /usr/lib/erlang/bin/erl /usr/bin/erl
sudo apt-get install elixir
```

そのままこれをコピペしていけば入ります。

1.9系だとクラッシュするので18.3.4を入れてます

Erlangのバージョンが上がるとまずいので
```sudo apt-mark hold esl-erlang```
しとくといいかも


引用元
[https://github.com/Microsoft/BashOnWindows/issues/613#issuecomment-239642248](https://github.com/Microsoft/BashOnWindows/issues/613#issuecomment-239642248)
MacにHomebrewをインストール

# Xcodeインストール
App Storeからインストールしましょう。
なくてもできるらしいんですけど。
エンジニアならいれとけばいいじゃん？

# ターミナル起動して以下のコマンドを実行しましょう。

```bash
$ sudo xcodebuild -license accept
$ xcode-select --install
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew doctor
$ brew update
```

# おまけ
Homebrew経由でインストールするアプリケーションのインストール先ディレクトリ変更
~/.bashrcに以下の1行を追記

```txt:.bashrc
export HOMEBREW_CASK_OPTS='--appdir=/Applications'
```

~/.bashrcがないよって人はこれしてね

```bash
$ touch ~/.bashrc
```
[Advent Calendar 2016] Cruise Control for Pedestrians: Controlling Walking Direction using Electrical muscle Stimulation

##はじめに

本記事は[ヒューマンコンピュータインタラクション論文紹介 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/hci)のために執筆したものです。

4日目はPfeifferらの[[Cruise Control for Pedestrians: Controlling Walking Direction using Electrical muscle Stimulation]](http://dl.acm.org/citation.cfm?doid=2702123.2702190)を紹介します。この論文はCHI2015にて発表されたものですが、自分がちゃんと目を通したのが今年だったのと去年の[AdventCalendar](http://qiita.com/advent-calendar/2015/hci)では取り上げられていなかったので許容して頂きたいです。

##概要
足の筋肉を電気で刺激することにより歩行者の進行方向を誘導するナビゲーションシステム。地図を見ながら歩かなくて良いので周囲の状況に集中できるとしている。電気刺激による歩行への影響を調査とその結果に基づいて実装したデバイスによる屋外実験を行った。

[![video](http://img.youtube.com/vi/JSfnm_HoUv4/0.jpg)](https://www.youtube.com/watch?v=JSfnm_HoUv4)

##関連研究

同じようにナビゲーション中に地図を注視する必要のない触覚を使ったナビ

- [PocketNavigator: vibro-tactile waypoint navigation for everyday mobile devices](http://dl.acm.org/citation.cfm?id=1851696&CFID=699454304&CFTOKEN=32778720)
- [Pull-navi: a novel tactile navigation interface by pulling the ears](http://dl.acm.org/citation.cfm?id=1597975&dl=ACM&coll=DL&CFID=699454304&CFTOKEN=32778720)

電気刺激（FESやGVS）を使った人のマニピュレーション

- [PossessedHand: a hand gesture manipulation system using electrical stimuli](http://dl.acm.org/citation.cfm?id=1785457&dl=ACM&coll=DL&CFID=699454304&CFTOKEN=32778720)
- [Effects of galvanic vestibular stimulation during human walking](http://onlinelibrary.wiley.com/doi/10.1111/j.1469-7793.1999.0931s.x/abstract)
etc...

特にナビの指示を受けて自分で方向転換するのではなく無意識のうちに進行方向を誘導できるGVSを使ったものはコンセプト的にも近いとしている。

## 実装と現状のリミテーション
- １２０Hzで動作する市販のTENS用デバイスのon/offと電圧をarudinoを使って制御している
- 電極を縫工筋に装着し、足の向きがyow方向に回転するように刺激を与える
- 電圧の強さは被験者に応じて予めキャリブレーションを行う。今回の被験者では大体１３V~32V
- 歩行時の被験者の進行方向をおよそ１６deg/mで曲げる事が可能
- 実際に屋外で歩いてもらい、ナビゲーションが有効についてもテストを行った。
- 電極の装着性の悪さや発汗などの皮膚のコンディションの変化によって操作量が容易に変化してしまうのが課題

## 雑記
最近HCI界隈でなにかと流行りが来始めている気がするEMS関連の論文。どうやっても痛覚まで刺激されたり安全性が担保しきれなかったりそもそもパッドの装着が不快だったり。。。と課題は山積みなのでそれらに打ち勝つだけのご利益をだすのはなかなか骨が折れそう。個人的にはFESではないけどSXSWでSamsungが発表してした[GVSのデバイス](http://japanese.engadget.com/2016/03/15/vr-entrim-4d/)がうっかり発売されないかなぁとあまり期待しないで待っています。
コミュニティとしてのジーズアカデミー

これは[ジーズアカデミー Advent Calendar 2016](http://qiita.com/advent-calendar/2016/gsacademy)の４日目の記事です:cake::sparkles::sparkles:

# はじめに
はじめまして、ジーズアカデミー４期DEVコースの＠tomoko523です:hatching_chick:
2016年4月から10月まで過ごしたジーズアカデミーについてコミュニティという観点からちょっとお話しようかと思います。

**なお、本文中の内容は私が個人的に感じたことなので公式の見解とは異なるかもしれません。**


# エンジニアにおけるコミュニティとは

[引用：コミュニティ](http://www.weblio.jp/content/%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%E3%83%BC)
>コミュニティー ［2］ 【community】
①人々が共同体意識を持って共同生活を営む一定の地域，およびその人々の集団。地域社会。共同体。
②転じて，インターネット上で，共通の関心をもちメッセージのやりとりを行う人々の集まり。
③アメリカの社会学者マッキーバー（R. M. MacIver）が定式化した社会類型の一。血縁・地縁など自然的結合により共同生活を営む社会集団。 → アソシエーション


エンジニア業界におけるコミュニティやコミュニティ活動というものは②に当てはまると考えます。
”共通の関心”は、多くは言語やフレームワークまたは領域などが挙げられます。

私自身、Rubyのコミュニティに参加し勉強会の運営、登壇やカンファレンス参加、同じRubyistたちとの交流を行なっています:relaxed::gem:

# ジーズアカデミーにおけるコミュニティ
[![https://gyazo.com/35b92b3787f6ba670ade7756ea400250](https://i.gyazo.com/35b92b3787f6ba670ade7756ea400250.png)](https://gyazo.com/35b92b3787f6ba670ade7756ea400250)

では、ジーズアカデミーの”共通の関心”とはなんでしょうか？
スクールなので、特定の言語に特化したりしているわけではありません。
そういう意味では一般的なエンジニアのコミュニティとは少し毛色が違うかもしれません。

そんな中で、ジーズアカデミーに来る人の共通の関心、思考とは「プログラミングを使って何か新しいことを始めたい」という人が多いなと感じました。
そこから、ジーズアカデミーにとはどういうコミュニティか？と考えたとき、
**「何か新しいことを始めたい人を後押ししてくれるコミュニティ」**だと私は思っています。


（ここで後押ししてくれる、と入れているのは単純に起業したい人のためのコミュニティでは無いな、と感じたためです。本気でやりたいことや起業の意思がある人ならスクールに通わなくても自分で何事も学ぶし、周りを巻きこんでやりきってしまうと思います。）

## 特徴

「何か新しいことを始めたい人を後押ししてくれるコミュニティ」と感じた理由は以下の通りです:school:


### :tada:ポジティブに受け取ってくれる・応援してくれる人がいる

私が所属していたDEVコースは週末の社会人向けのコースだったため、みなさん本職も持ちつつスクールに通っていました。（非エンジニアの方もたくさんいました:beginner:）その中で、毎週慣れないプログラミングを学び課題をこなすというのは本当に大変だったと思います。

でも、それでも何かをやりたい！と考えた人たちが集まったコミュニティなので、お互いの活動について前向きなメンバーが集まっていると思いました。
メンバー同士で刺激しあえる、一人だと凹みそうなときに乗り越えられるような環境になっているというのは、コミュニティならではの特徴だと思います！

（具体的には入ってからのお楽しみということで:laughing:笑）


### :two_men_holding_hands:エンジニアとしての環境を整えてくれている
通常のプログラミングの授業以外に、起業や転職の支援や、自分の実力を発揮する場（GGA,ハッカソン)を提供してくれています。
また、卒業後もコワーキングスペースとして一定期間自由に出入りが可能となっているため、他の期やコースの人との交流もすることができるようになっています。
また、メンターやスタッフの方も様々なバックグラウンドを持っているので、エンジニア的な進路を考えた時に様々な学びがあるのではないかと思います。（ただでさえエンジニアの進路は多いので…:astonished:）

（具体的なサポート体制については[公式HP](http://gsacademy.tokyo/)を確認してくださいね:mortar_board:）



## 最後に

図らずも宣伝みたいになってしまいましたが、何かしたいけれど勢いがつけられない、何からやったらいいかわからない、という人にとってはとてもいい環境だと思います（勿論自主性は必須ですが）:innocent:！

ではでは、明日はアドカレ作成者の[n0bisukeさん](http://qiita.com/n0bisuke)、よろしくおねがいします:running:！
AWS re:Invent 2016に参加してみた 5日目

いよいよ最終日です。なんとかここまでこれました。今までの軌跡はこちらです。

[AWS re:Invent 2016に参加してみた 1日目](http://qiita.com/kojiisd/items/0b1c5ebe9118bd26147e)
[AWS re:Invent 2016に参加してみた 2日目](http://qiita.com/kojiisd/items/bd00afa24a515c58ddae)
[AWS re:Invent 2016に参加してみた 3日目](http://qiita.com/kojiisd/items/04d6d466444fca8be2a0)
[AWS re:Invent 2016に参加してみた 4日目]
(http://qiita.com/kojiisd/items/ace39cd00230bd9283ab)

# BDA303-R - [REPEAT] NEW LAUNCH! Intro to Amazon Athena. Easily analyze data in S3, using SQL.

先日のキーノートで発表されたAmazon Athenaの追加セッション。半分程度はWebで謳っていることでしたが、裏側でHadoop Clusterを使っていることやメタデータの保持にHiveと似た構造を取っている、などの情報は新しかったです（CREATE文の中でHiveのライブラリを使っている部分があったので、標準SQLといってもHive側に寄ってたりするんですかね？）

すでにBeta版の利用として実施してもらった企業もいくつもあるようです。BigQueryとすでにパフォーマンスを比較している人がすでにWeb上ではいましたが、適した利用場面や使い方が発見されていき、流行るサービスの一つになる気がしています。

# MAC309-R - [REPEAT] NEW LAUNCH! Introducing Amazon Polly and Introducing Amazon Lex: Repeat (Abridged)
Amazon Athenaの発表でもそうしたが、半分程度は公式ページに書いてあることですね。そういう意味では後半だけ聞けばよかったかも、と思いました。

あとAmazon Lexは前日にすでにWorkShopを経験していたので、すっと入ってきました。Pollyは言っていることはわかるのですが消化しきれていないので、もう一度公式ページを見直す必要があるかな、という感じです。特にAmazon Pollyは日本語のテキストメッセージにも対応しているので、色々なサービスの可能性が考えられますね。

# 5日間参加してみた感想
今回初のre:Invent参加でした。自費で参加しました。ただやっぱり言ってよかったな、というのが感想です。行かなければわからないことっていくつかあると思うんですが、自分は特に

- AWSのUSAのエキスパートと話ができたこと
- 日本人のAWSユーザの方々と知り合えたこと。またその中で皆さんのレベルが非常に高く、勉強不足を実感したこと。（Professional持ってるのが当たり前、みたいなのはかっこよかった）
- 新しいサービスを世界一早く情報収集できたこと（そしてその場で調べ始められる環境）
- 新サービス展開などでの場の温度感、盛り上がりを肌で実感できたこと

などなど、感じました。
これらが自分にとってプラスに働く人にとっては、一度行ってみるのがいいんじゃないかな、と思っています。

今回この5日間の記事は自分としても忘れないように、という備忘録の意味もありますが、ここで得たことをベースに色々と調べて、手を動かしてその結果をまたQiitaにフィードバックしていこうと思います。
Tensorflow0.7.1でSummaryWriterがAttributeErrorになる

[TensorFlowで学ぶディープラーニング入門](https://www.amazon.co.jp/TensorFlow%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-~%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%BE%B9%E5%BA%95%E8%A7%A3%E8%AA%AC~-%E4%B8%AD%E4%BA%95-%E6%82%A6%E5%8F%B8/dp/4839960887)を読みながらコードを書いていたら、突然 `AttributeError` となり、tensorboard用のデータが作れなかった。

## 解決方法
このエラーを出した原因のコードは

```python
tf.train.SummaryWriter("/tmp/hogehoge_logs", sess.graph)
```

であり、本家のGithubを眺めていたら

```python
tf.train.SummaryWriter("/tmp/hogehoge_logs", sess.graph.as_graph_def())
```

とするか、バージョンを上げろと書いてあったので前者を採用してみた結果無事動いた。
Android開発はGoogleから学ぼう

4日目を担当させていただきます @sakebook です。

Androidアプリ開発において、Googleの影響力は絶大です。そんなGoogleがストアにアプリをいくつ公開しているかご存知でしょうか？

自分の環境で見たところ、[100件以上のアプリ](https://play.google.com/store/search?q=%22Google%20Inc.%22&c=apps&hl=ja)が公開されています。

現状のAndroidでどんなことができるのか？自分では思いついていないようなことや、できないと思っていたことでもできたりするかもしれません。

どんなことが実際にできているのか、ストアに公開されているアプリを例に学びます。

## [Google Inc.](https://play.google.com/store/apps/dev?id=5700313618786177705)
### [Expeditions](https://play.google.com/store/apps/details?id=com.google.vr.expeditions)
VRコンテンツを、引率役のガイドと、引率される探索ユーザのグループで同時に体験することができるアプリです。ベストイノベーティブアプリ部門に[ノミネート](https://japan.googleblog.com/2016/12/google-play-2016.html)されています。

コンテンツ自体はAndroidで作るものではないですが、Expeditionsアプリと連携することでこのような体験ができるようになります。

コンテンツを作成、イベントなどで利用したい方は[こちらのフォーム](https://docs.google.com/forms/d/e/1FAIpQLSeTdm5XfMn7AFqxNIuLcsHQCAhvIcZWILaRW_jFze7KheWcKA/viewform)から申請できるようです。

### [Android TV Remote Control](https://play.google.com/store/apps/details?id=com.google.android.tv.remote)
スマホを、Android TVのリモコンにできるアプリです。利用されているライブラリを見ると、 `google-tv-pairing-protocol-jar` というものが使われています。

映像をAndroid TVにキャストするだけでなく、入力に関しても開発者でカスタムできるようです。
`google-tv-pairing-protocol-jar` の[ソースコードは公開](https://android.googlesource.com/platform/external/google-tv-pairing-protocol/)されていますが、一部C言語で書かれています。

### [フォトスキャン - Googleフォト提供アプリ](https://play.google.com/store/apps/details?id=com.google.android.apps.photos.scanner)
印刷されている写真をスマホのカメラでスキャンして保存できるアプリです。

Googleフォトと連携しているのでどの部分で使われているかわかりませんが、利用されているライブラリに[TensorFlow](https://www.tensorflow.org/)が含まれていました。

### [Google サンタを追いかけよう](https://play.google.com/store/apps/details?id=com.google.android.apps.santatracker)
クリスマスにサンタがプレゼントを配る様子を見る事ができるアプリです。クリスマスまでは、サンタについて学んだりゲームをすることもできます。

こちらは[ソースコードが公開](https://github.com/google/santa-tracker-android)されているのですが、ストア版とは若干異なります。
Mobile, TV, Wearと対応しており、ゲームは別モジュールにしてあるなど、マルチプロジェクトの見本になるコードになっています。

## [Marketing @ Google](https://play.google.com/store/apps/developer?id=Marketing+@+Google)
こちらはGoogle Inc.のアプリではないですが、[Googleのリポジトリ](https://github.com/google)にあったので紹介します。

### [サイエンス ジャーナル](https://play.google.com/store/apps/details?id=com.google.android.apps.forscience.whistlepunk)
センサーを使って光や音を測定し、データをグラフにしたり、実験を記録したり、疑問やアイデアをまとめたりすることができるアプリです。

こちらも[ソースコートが公開](https://github.com/google/science-journal)されています。
[Protocol Buffers](https://developers.google.com/protocol-buffers/)が使われています。初めて見ました。

## [Android Experiments](https://www.androidexperiments.com/)
ストアに公開されていないものもありますが、こちらも魅力的です。

> 創造性の高い実験的なプロジェクト （Experiment） をオープンソースとして 1か所にまとめることで、誰もがそれを見て仕組みを理解し、自分でも何か作ってみようと思えるような場

となっています。

各Experiment __全てソースコードが公開__ されています。自身で[登録依頼](https://www.androidexperiments.com/submit)を出すこともできます。

本筋とは異なりますが、Experimentの[Chrome版](https://www.chromeexperiments.com/)と[AI版](https://aiexperiments.withgoogle.com/)、[Art & Culture版](https://artsexperiments.withgoogle.com/)もあり、どれも目を引くものばかりです。

記事上にソースコードが登場しないですが、以上です。

### 参考
[GitHub Search](https://github.com/search?utf8=%E2%9C%93&q=org%3Agoogle+%22com.android.application%22&type=Code&ref=searchresults)
「君の名は。」風で話題のEverFliterがどんな仕組みなのか調べてみた(iPhone版)

## EverFilterとは

写真をアニメ風に加工してくれるアプリです。

画像盗用疑惑や個人情報の悪用についての記事を見つけ、
実際にどんな情報が抜かれるのか簡単に調査しました。

* [アニメ風に画像加工するアプリ「Everfilter」について拡散中の「個人情報が抜かれる」噂について](http://did2memo.net/2016/12/04/everfilter-kojinjouhou-rumor/)  
* [Everfilter は本当にディープラーニングを使っているのか?　どうやって?](http://d.hatena.ne.jp/shi3z/20161204/1480806378)  
* [Everfilter：あなたの写真が「君の名は。」の世界に！一瞬でアニメ風に加工されるアプリ…削除されちゃう！？](http://lab.hendigi.com/everfilter/)

## 実際に使ってみた

アプリをインストールして、[加工スタート]を押して写真を選択しました。

すると選択した画像そのものを外部のサーバーにアップロードしていることが分かりました。
アプリはその変換結果をただ表示しているだけ、加工処理を全くやっていないようです。(電波が無いと使えません)

##　まとめ

「どんな情報　＝　画像そのもの」

アルバムから選んだ画像は、外部のサーバーにアップロードされています。
この手のアプリは、アップロードした画像がどう扱われるのかが分からず、
知らぬうちに流出する危険性もあるため、使用を控えるか、公開されても大丈夫な画像を使うようにしましょう。

[Original](https://tamazawa.net/2016/12/04/「君の名は%E3%80%82」風で話題のeverfliterがどんな仕組みなの/)
RESAS（地域経済分析システム）のRuby用APIクライアントを作った


[RESAS](https://resas.go.jp)（Regional Economy Society Analyzing System）とは、内閣官房まち・ひと・しごと創生本部が公開している「地域経済の見える化システム」です。
地域の人口動態や観光の人の流れ等のデータを視覚化することができます。

RESAS に掲載されているデータは [RESAS API](https://opendata.resas-portal.go.jp) 経由で取得できるようになっていますので、ご自分のアプリから利用、加工したい場合に便利です。
curl コマンド等でも簡単に API にアクセスできますので、どのようなデータを取得できるのかお気軽にお試しいただけるかと思います。

今回私は使い慣れている Ruby で少しでも簡単にデータを操作したかったので、まずは既存の [Resas::Api](https://github.com/nard-tech/resas-api) という gem を利用させていただこうと思いました。
しかし当初、README に記載されているコードでは、私の環境ではうまくデータが取得できませんでした。
その後の調査も面倒でしたので、サクッと自分で実装してしまいました。

それが [ResasKit](https://github.com/emsk/resas_kit) という gem です。

RubyGems.org に公開していますので、皆様にも簡単にお使いいただけるかと思います。

## API キーを取得する

まずは RESAS API の[利用登録画面](https://opendata.resas-portal.go.jp/form.html)から利用登録をしていただき、API キーを取得してください。

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

一般的な gem と同様に `Gemfile` に下記のように記載していただき、`bundle install` してください。

```ruby:Gemfile
gem 'resas_kit'
```

※Ruby 2.0.0 以降があらかじめインストールされている必要があります

## 使い方

下記のように `ResasKit::Client` インスタンスの `get` メソッドを使って API を呼び出すだけです。
[こちら](https://opendata.resas-portal.go.jp/docs/api/v1-rc.1/index.html)の RESAS API 公式リファレンスも参考にしながら、アクセスしてみてください。
※2016/12/04 現在の API のバージョンは `v1-rc.1` のようです

```ruby
require 'resas_kit'

# API キーを指定して `ResasKit::Client` インスタンスを生成
client = ResasKit::Client.new(api_key: '1234567890ABCDEFGHIJ1234567890abcdefghij')

# get メソッドの第一引数にエンドポイント（バージョン番号以降）の文字列、
# 第二引数以降にパラメータのキーと値を指定（パラメータは lower-camelcase でも指定可能）
res = client.get('tourism/foreigners/forFrom', year: 2016, pref_code: '32', purpose: 2, add_area: '31,33')

# メソッドチェーンして取得したい情報を取得
res.body.result.changes[0].country_name
```

## 環境変数

環境変数 `RESAS_API_KEY` に API キーをあらかじめ設定しておくことで、`ResasKit::Client` インスタンスの生成を簡略化することができます。

```ruby
client = ResasKit::Client.new
```

## まとめ

上記のように、簡単に API 経由でデータを取得し、操作できることがおわかりいただけたかと思います。

現時点（ResasKit v0.1.0）では、`get` メソッドのみが実装されており、第一引数の指定が少し面倒かもしれません。
今後、各エンドポイントにアクセスするための専用のメソッドを増やしていく予定です。

その他、ResasKit の機能について何かご要望等がありましたら、お気軽にご連絡ください。
GitHopperというGithub レポジトリのビュアーアプリをElectronで作った

このエントリーは[Electron Advent Calendar 2016 - Qiita](http://qiita.com/advent-calendar/2016/electron)の4日目です。

[GitHopper](https://github.com/akira-hamada/GitHopper)というGithub レポジトリ(以下、repo)のビュアーアプリをElectronで作った。
このアプリは特に、**業務などで複数のプロジェクトを開発/レビューしている人ほど役立つと思います。**

突然のレビュー依頼などで、作業中ではないrepoのコードをサッと見たい時、従来のwebブラウザだと新しいタブをその度に開いてGithubを開いているタブがどんどん増えるかもしれません。あるいは、一つのタブの中で複数のrepoを行ったり来たりしているかもしれません。

しかしこのアプリを使うと、レビューが済んでサイドバーから元のrepoを選ぶと、元々見ていたページがそのまま表示されるので元の作業にサッと戻れます。

![app_main](https://github.com/akira-hamada/GitHopper/blob/master/screenshots/githopper_1.png?raw=true)  
([その他のスクショはREADMEを参照](https://github.com/akira-hamada/GitHopper#githopper))

1年ほど実際の業務で使用しながら細かくブラッシュアップしましたので、そこそこ使いやすいものになっているはずです。

# 主な機能

- 自分が所有しているrepoがサイドバーに一覧表示される
  - 所属してるOrganizationのrepoも表示されます
  - ある特定の一つのOrganizationのrepoのみ表示する事も可能
  - アクティブではないなどで、見る必要のないrepoはサイドバーへの表示を除外出来ます
- サイドバーから任意のrepoに移動可能
  - 各repoの表示状態はrepoを切り替えても維持されます
- 自分が所有していない外部の公開repoもサイドバーに追加可能 (railsなどお気に入りのプロジェクトを登録すると良いですね)
  - 実は `blog` という値を設定すると[Githubのblog](https://github.com/blog)をサイドバーに追加可能。このページだけ特別です
- ショートカットで、あるrepoの特定のPR/issueにジャンプすることも可能 (PR一覧やissue一覧なども)
- キーボードショートカットでサイドバーの前後のrepoに移動する事も可能
- アプリ起動時には[Github trending](https://github.com/trending)が表示される (任意のURLに設定可能)

# イケてない所 (PR大歓迎！！)

- Macでしか動作確認してません
- **アクセストークン入力でrepo一覧は習得できても、一度だけWebview内で別途Githubへ手入力でログインして貰う必要があります**
- 環境設定を変更しても、その変更を反映させるためにアプリを再起動するか ⌘+Shift+Rでアプリをリロードして貰う必要があります…
- Github Enterpriseは考慮していません
- オンラインでの使用を前提にしています

# 使用方法

1. アプリを[こちらからダウンロード](https://github.com/akira-hamada/GitHopper/releases/download/1.0.0/GitHopper.app.zip) (現状Macのみ)
2. 起動して[Githubアクセストークンを入力](https://github.com/settings/tokens) (scopeは `repo` のみでOK)
3. サイドバーにrepo一覧が表示されるので、あるレポジトリを選択
4. Githubへのログインを求められるので入力してログイン (最初の一回だけ要求されます)
5. 各repoの内容が表示されるはず ;)

# 技術的な特徴

- 実はレポジトリを表示したWebViewを重ねてるだけで大した事してません (あまりにも表示repoが多いと不具合が出るかも…)
  - Webviewの中で表示しているrepoのページは普通のGithubのページですので、元々のGithubの体験を損なう事は無いはずです。GitHub上で使えるキーボードショートカットもそのまま使用可能。
- webview内のページ内キーワード検索は `window.find()` というjsの関数を使用
- 主な使用ライブラリ
  - レポジトリ一覧の取得: [github-api](https://www.npmjs.com/package/github-api)
  - アプリ内のショートカットキーの定義: [keymaster](https://github.com/madrobby/keymaster)