OmniAICreator/Qiita-1.07M huggingface dataset:
Starling HandBookが出るよ

こちらの記事はFLASHer Advent Calendar 2016 １２日目の記事となります。
http://qiita.com/advent-calendar/2016/flashers

今年もFLASH(er)のAdvent Calendarがあって、何気に他に去年より盛況ですね。カレンダーの雰囲気は同窓会ぽい感じというかカレンダーの趣旨自体が思い出を記す感じですが、本日は空気を読まずに、ここ最近のネタで記事を投稿しようと思います。(他にFlashのカレンダーたてるのもアレですし。)

# 最近のStarling ![header_logo_st.png](https://qiita-image-store.s3.amazonaws.com/0/8302/5519b66a-8699-76c5-5826-f918a3672fb7.png)


スマホ向きアプリをFLASH(AIR)で作るなら定番といった立ち位置になったStarling frameworkも、いつのまにやら最新のバージョンが2.1となりました。
http://gamua.com/starling/
着実に進化してハイパフォーマンスかつ高機能でかつ汎用的な優等生に育ちました、が、全ての機能を使いこなせる人は少なく、昔使っていたという人も最新の機能はあまり把握していなかったりするのではないでしょうか。

どんなに拡大してもジャギーが目立たないビットマップフォント
http://forum.starling-framework.org/topic/new-feature-distancefieldstyle

2Dスプライトのライティング機能
http://wiki.starling-framework.org/extensions/dynamic_lighting

このように、2.xからの大技的な実装も精力的にされております。しかし、決して使うのが難しいわけではないのですが、AIR未経験者がStarlingを初めてみても何をどうすればいいかわからず、上にあるような便利な機能を使うまで至らない場合もあるようです。AIR自体の情報も多くないので、そもそもまずエディタをどうするのかとかわからないですよね。StarlingコンテンツもFlash(Animate)タイムラインアニメーションから直接書き出せたりすると良いのですが、実際には利用するにある程度のレベルのプログラムを書く必要があり、最初の関門が存在しています。

# 入門書が出るよ ![header_logo_st.png](https://qiita-image-store.s3.amazonaws.com/0/8302/5519b66a-8699-76c5-5826-f918a3672fb7.png)

![handbook-bezel.png](https://qiita-image-store.s3.amazonaws.com/0/8302/f22bc950-cd44-837f-20a5-800a4ba02659.png)

そのような状況を把握してなのかわかりませんが、Starling framework作者のダニエルさん自ら[Starling ハンドブック] という名前の入門書を執筆されています。
http://gamua.com/blog/2016/09/the-starling-handbook/
執筆中のプレビュー版を上記リンクから入手可能です。ダニエルさんのwikiの記事はいつも丁寧でわかりやすいのですが、今回の執筆内容も図やサンプルプログラムを多く含み、プレビュー版の状態で既に良いものとなっています。

内容としては、下記のような章立が予定されています。

**(1) まず最初にやること**
Starlingとその技術面の概要解説、便利な関連ツールの紹介、プログラムの最初の一歩まで。
**(2) フラッピーStarling**
某怒った鳥風味のゲームを実際に作ってみながら、基本的なStarlingの使い方を覚える。
**(3)Starlingの基本コンセプト**
ディスプレイリスト・テクスチャ・イメージ・テキスト・イベントハンドリング・アニメーション・エフェクトなどについて。
**(4)上級テクニック解説**
アセット管理・パフォーマンスチューニング・カスタムレンダリングなどについて。
**(5)スマホ開発**
ネイティブANE拡張・マルチ解像度対応・画面の回転・およびFeathersUIコンポーネントについて。
**(6)プロのTips**
様々なシチュエーションで役にたつTips集。ATFテクスチャの扱い・マルチタッチ制御・画像のキャッシング・パーティクル・ライトエフェクト・水面反射エフェクト・AIRのコンパイルの考察など。

まだ販売形体と発売時期は未確定ですが、大概の電子書籍フォーマットでは出版され、ひょっとすると紙の本も出るかもしれません。しかしここで１つの疑問があります。日本語版は出るのだろうか、と。

# 翻訳やります ![header_logo_st.png](https://qiita-image-store.s3.amazonaws.com/0/8302/5519b66a-8699-76c5-5826-f918a3672fb7.png)

というところで、英語版以外はどうなの？と、直接ダニエルさんに聞いてみました。その時点ではまだ考えてなかったようですが、やる気になってくれました。ハンドブックは実際に販売されるものなので出版社もからんできて、簡単に多言語版が実現できるわけではないようですが、ハンドブック内容の大部分は一新される公式マニュアルやweb上のドキュメントと同じ内容になるので、少なくともその部分は多言語版を用意する敷居が低いようです。

そして放っておくと日本語版が出ない予感がするので、とりあえず無料の公開される範囲に関しては、自分が翻訳のお手伝いをする事にしました。（どうせ英語版は全部読むので。）担当した翻訳は問題なければまずはラフな状態からQiitaに上げていこうと思いますので、興味ある方はお尻叩きなどよろしくお願いします。そもそもいつ原稿が出来上がるのかまだ連絡もらえていないので、こちらの業務が忙しい時期とぶつからないといいのですが。

# 終わりに ![header_logo_st.png](https://qiita-image-store.s3.amazonaws.com/0/8302/5519b66a-8699-76c5-5826-f918a3672fb7.png)

この本が出版されたら次はFeathersUIの方も出版されたらいいなーと思っています。こちらもAIRモバイル開発では手放せない感じですが、入門書がなく、使いこなすまでの敷居が高いので。。

さて、明日は、akirafukuokaさんの`Tweenerで好きだったパラメーター（仮）`です。楽しみです。
プログラミングの原則を振り返る

[mediba advent calendar 2016](http://qiita.com/advent-calendar/2016/mediba) 12日目担当の @h-sugawara です。

## はじめに
　油断や慢心し始めた頃に初心に帰るための自戒として記載した目的の記事です。
プログラミングにおける代表的な原則を6つピックアップしてみました。

## 原則たち

### 1. KISS
　「Keep It Short and Simple.」の英文の各単語の頭文字を集めたもので、「コードは短くシンプルにする」という原則です。つまり、目的の実装をするために不必要なコードを書かないということです。
　新しく覚えた技術や将来必要になるかもしれない機能を入れ込みたくなる時もありますが、それが機能の目的と無関係あるいは必要性が無いのであれば、書いてはいけません。この原則は、PIE や Naming is important といった原則にも関連性があり、保守性や可読性を高める意図を持っています。

### 2. DRY
　「Don't Repeat Yourself.」の英文の各単語の頭文字を集めたもので、「繰り返さない」という原則です。つまり、コピペプログラミング禁止ということになります。
　同じプロジェクト内で同一の目的を果たすためにコピペをする・しているコードを見かけますが、これは保守性を著しく下げるため、行ってはいけません。同じ内容がいくつも存在するということは、依存関係も複雑になっているため、どこから呼び出されているのか等を把握するのが非常に難しくなっています。そのため、かなり慎重に動かないと修正が不十分なままリリースを行い意図せぬ不具合が発生することになります。

### 3. YAGNI
　「You Aren't Going to Neet it.」の英文の各単語の頭文字を集めたもので、「それは必要にならない」という原則です。必要な時に必要なものだけを用意するようにしましょうということです。
　この原則は、KISS 原則にも深く関連しており、今必要ではないコードは書かない、ということです。必要になるだろう、と考えて予め考えて書いておいたコードが、その後に必要になることはあまりありません（仕様を握っている人がプログラミングしていない限り）。むしろ、必要なコードでないものが混入することで、可読性や保守性が低下します。

### 4. PIE
　「Program Intently and Expressively」の英文の各単語の頭文字を集めたもので、「コードの意図を表すプログラミングをする」という原則です。
　コードは人が読むものであり、コードそのものが仕様書になるということは往々にしてあります。そんな時に、意図が分かりにくいコードだったら、辟易とするはずです。そういった相手から見た視点で考えた時に、自分が書きやすいコードよりも、相手が見やすいコードを重視しましょう、という視点が、この原則となります。コードは書く回数よりも読まれる回数の方が圧倒的に大きくなるので、読みやすいコードを書くことが品質向上のカギとなるのです。

### 5. OCP
　「Open-Closed Principle」というフレーズの各単語の頭文字を集めたもので、「開放・閉鎖原則」と呼ばれるものです。
　「開放・閉鎖原則」とは、拡張が容易で、その修正の影響は受けない、という原則です。機能の拡張が簡単でき、その上で既存の機能に影響を与えない設計のものが、この原則を満たしていると言えます。KISS や YAGNI、そして PIE のような原則を満たしていれば、この原則を満たすこともそれほど難しいことではないのではないでしょうか。この原則に従えているプロジェクトは、高い保守性と拡張性を持っていることになります。

### 6. Naming is important
　名前が重要という原則です。名づけは非常に重要で、名前から判断できない処理を行ってはいけません。getメソッドなのにsetメソッドのような挙動をしたり、○○という処理の名前が付いているメソッドなのに○○の後に△△の処理を行っていたり等です。
　振る舞いに名前を付ける時に気付きますが、一つの単語に二つ以上の振る舞いを持つ単語はないと思います。そうした時に、名前に違和感があった場合、それは設計が正しく行われていないことを示します。名前と処理が一対一になるようにした時、KISS や YAGNI などの原則も同時に満たせるようになっていくのです。

## まとめ
　エンジニアとしては、新しい技術を負うのはもちろん大切なことです。
　しかし、それは、プログラミングの原則や思想（今回の記事には記載してはいませんが）を理解し、正しく実践できるようになってからの話ではないかと思います。
　原則や思想を理解せず、技術だけを追っているその姿は、食事マナーが悪い状態で新しい料理を食い散らかす姿そのものです。正しいマナーを守って料理を食べられるようになりましょう（ブーメラン）。
CakePHP3のcontainを操る

CakePHP3でデータベースを引くときに、他のテーブルを取り込める`contain`という機能があります。単にデータを取ってくるだけでなく、更に細かい制御も行えます。

## `contain`の必要性
CakePHP3ではモデルクラスもTableとEntityに分かれたことで、1レコードがEntityオブジェクトとなったのですが、その結果発生しうるのが**N+1問題**です。Entityの中から関連づいたテーブルを参照しようとすると、それぞれのEntityごとにクエリが飛ぶため、クエリの数が膨れ上がってしまうのです。

これを防ぐために、データベースから関連するレコードを一気に引いてしまう、という手法があって、以下のどちらかで実装されています。

* 関連する別テーブルとJOINすることで、まとめてデータを引く
* 関連付けするキーを使って別のテーブルを引いて、あとから合成する

CakePHP3で、このような「まとめて引く」ための操作を行うのが`contain`です。

## `contain`の制御の必要性
モデルを内部的に使う場合にしても、不要な列まで取ってくる必要はありません。そしてさらに、[Crudプラグイン](http://qiita.com/Junkins/items/e15b4d6fab6ecb31e8e2)を使う場合、引いてからデータを加工するというのが面倒になるので、クエリ段階で調節できればそれが最適解となります。

## 具体的な書き方

### 基本編
まず、`contain`メソッドはクエリオブジェクトにあるものなので、`$someTable->find()->contain()`のように呼び出します。`contain`の引数には配列を与えますが、普通の配列と連想配列が混ざったような、慣れるまでは不思議な形で与えます。

* `'OtherItems'`のようなキーだけ→そのテーブルを`contain`する
* `'AnotherItems' => ['YetOtherItem']`のような「キー => 配列」の指定→キーのテーブルへ、さらに配列の中身を`contain`する（このネストは何度でも繰り返せます）

### 列を絞る
そして、`contain`に与える配列に`'テーブル名' => function($q){}`のようなクロージャを与えると、`$q`には`contain`先のテーブルについてのクエリオブジェクトが来ますので、ここで各種の制御ができます。

たとえば、「`Users`で必要な列は`id`と`name`だけ」というような場合、以下のように書けばそうとれます。

```php
$this->Items->find()
    ->contain(['Users' => function($q){
        return $q->select(['id', 'name']);
    }]);
```

なお、列を絞るときには注意点が2つあります。

* リレーションに必要な列は必ず入れてください（そうしないとリレーションを成立させられなくなります）。
* Virtual Propertyを仕掛けてある場合など、Entity側でコードを書いている場合、「列が減った状態」でもエラーにならないか確認の必要があります。

また、このようにコールバックを取った`contain`に別なリレーションを`contain`したい場合は、`$q->contain()`というようにチェーンさせてください。

### Virtual Propertyの制御
「Crudに使うときには不要」ということでVirtual Propertyを止めたいこともあるかもしれませんが、これを行うときはEntityオブジェクト自体を書き換える必要が出てきます。ということで、`formatResults()`という関数の出番です。ここでは、`Product`にあるVirtual Propertyをを全部止める、という例で考えてみます。

```php
$this->Transactions->find()
    ->contain(['Products'=> function($q){
        return $q->formatResults(function($products){
            return $products->map(function($product){
                $product->virtualProperties([]);
                return $product;
            });
        });
    }]);
```
ご覧のとおり、これを行うだけで3重のクロージャが必要となってしまいます。ただ、「全部止める」だけであればクロージャを使いまわせますので、何かのヘルパーで生成して流用、というのが現実的ではないかと思います。
Fess パスマッピングの設定

Fess 10.3
パスマッピングの設定をしてみます。

## パスマッピングの設定

| 項目         |       設定値 |
|:-------------|:------------------|
| 正規表現     | [Java8の正規表現](https://docs.oracle.com/javase/jp/8/docs/api/java/util/regex/Pattern.html) |
| 置換      | 置換する文字列 |
| 処理の種類      | クローラ/ディスプレイ/両方 |
| 表示順序     | Integerの昇順 |
| ユーザーエージェント  | ユーザーエージェントを変更する場合は設定する |

#### 正規表現と置換
- サーバーのファイルシステムをURLにマップする

```text:
正規表現: file:/server/user/local/
置換: http://server/~user/local/
```

- パスをファイル名のみに置換する

```text:
正規表現: ^.*/(.*)$
置換: $1
```

#### 処理の種類

- クローラー
インデックス時にパスを置換してから保存する(タイトルのリンクも置換される)

- ディスプレイ
検索結果の表示をする時に置換する
- クローラー・ディスプレイ
両方行う

クローラーでインデックス時のパスを変更してリンク先のURLを修正したり、
検索結果のパスを変更して非表示にしたり、情報を付加することができます。
Swiftについての覚書２

#各タップの検知の仕方について

まずはタップを検知する画像を作成

        // UIImageViewを作成
        let touchImageView = UIImageView(frame: CGRectMake(20,20,100,120))
        // 画像を設定
        let touchImage = UIImage(named: "kuroneko.gif")
        // 画像をUIImageViewに設定する
        touchImageView.image = touchImage
        // 画像の表示する座標を指定する.
        touchImageView.layer.position = CGPoint(x: 100, y: 200.0)
        // viewに追加
        self.view.addSubview(touchImageView)
        // タップを検知するよう設定
        touchImageView.userInteractionEnabled = true
userInteractionEnabled = true でタップを検知するようになります。

##タップ
    /*
     タッチを感知した際に呼ばれるメソッド.
     */
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        print("タップされた！")
    }
タップを検知したら自動でtouchesBeganが呼び出されます。

##ダブルタップ

        // ダブルタップの設定
        let doubleTapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self
            , action:#selector(doubleTap(_:)))
        doubleTapGesture.numberOfTapsRequired = 2
        self.touchImageView.userInteractionEnabled = true
        self.touchImageView.addGestureRecognizer(doubleTapGesture)

    　　// ダブルタップ検知時の動作
    　　func doubleTap(gesture: UITapGestureRecognizer) -> Void {
        　　print("ダブルタップされた！")
    　　}

##長押し
        // 長押しの設定
        let longPress = UILongPressGestureRecognizer(target: self, action: #selector(pressedLong(_:)))
        self.touchImageView.addGestureRecognizer(longPress)

    　　// 長押し検知時の動作
    　　func pressedLong(sender: UILongPressGestureRecognizer!) {
        　　print("長押しされた！")
    　　}
Jenkinsプラグインの埋め込みバッジサイト「Sebastian-badge」

# Sebastian-badgeとは?
Jenkinsプラグインのバージョン情報をGitHubのREADMEなどに埋め込むためのバッジをホスティングするサイトです

http://sebastian-badge.info/

![image](https://qiita-image-store.s3.amazonaws.com/0/8059/3a3934cf-abcf-5a08-9fd2-60f423231eba.png)

https://badge.fury.io/ のJenkinsプラグイン版みたいなものだと思ってもらえると。

# Jenkins pluginの埋め込みバッジって?
こういうのです。

![20150205003327.png](https://qiita-image-store.s3.amazonaws.com/0/8059/fb833907-5033-602b-05c7-54dd464c13ed.png)

markdownやhtmlなどの形式でいい感じにコピペできます。
githubのREADME.mdに手軽に貼れます。

![image](https://qiita-image-store.s3.amazonaws.com/0/8059/6536e9d3-952b-bf88-e85a-eca6cbc67f64.png)

http://sebastian-badge.info/plugins/chatwork

JenkinsプラグインはConfluenceにページ作ることになってるので、Confluence wiki形式でもコピペできるようになっています。

![image](https://qiita-image-store.s3.amazonaws.com/0/8059/d1cadabc-57a9-1d59-25ef-0a5d7cd351e6.png)

# 技術的なこと
ソース: https://github.com/sue445/sebastian-badge

* Ruby
* PostgreSQL
* [Padrino Framewowk](http://jp.padrinorb.com/)
* Heroku
* 全文検索に [Groonga](http://groonga.org/ja/) を利用
* [CircleCI](https://circleci.com/)
  * GithubでPRをマージしたらCircleCIでビルドしてHerokuにデプロイする、（僕にとっては）いつもの手の込んだ手抜きデプロイです
* Deploy to Heroku ボタンに対応してるので誰でも自分のHerokuインスタンスにデプロイできます
  * トピックブランチの確認するのに便利

## 仕様
* 1時間に1回 [Jenkins Update Center](https://updates.jenkins-ci.org/) をチェックして更新されたプラグインをDBに保存
* バッジはsvgで表示
  * テキスト(xml)だけで画像生成できるのでお手軽。ImageMagicなどを使わなくていいのは嬉しい
* svgが大量に呼ばれてもいいようにキャッシュを頑張った
  * サーバサイドはmemcached
  * クライアントサイドはETagヘッダとLast-Modifiedヘッダ

# どうでもいいこと
* 10年ぶりくらいにドメインとった [^domain]
* ロゴ画像募集中です:sweat_smile:
  * https://github.com/sue445/sebastian-badge/issues/40

[^domain]: 最後にとったのがsue445.net

# 名前の由来
JenkinsやHudsonが執事に由来しているので、[ドキドキ！プリキュア](http://www.toei-anim.co.jp/tv/dokidoki_precure/)に出てくる執事のセバスチャン(Sebastian)から名前をとっています。

![セバスチャン](https://qiita-image-store.s3.amazonaws.com/0/8059/493af7c2-1f3c-8c85-c697-0774ebe0d9e9.png)

http://www.toei-anim.co.jp/tv/dokidoki_precure/character/other.html

# 思い出
## tachikoma.ioで毎週bundle updateしていたらgemのバグを見つけた
rroonga（groongaをrubyで使うためのgem）をアップデートした時に、なぜかHerokuへのデプロイが失敗するという事象があってissueで報告した思い出

[Heroku deploy is failed with rroonga v6.0.2 · Issue #130 · ranguba/rroonga](https://github.com/ranguba/rroonga/issues/130)
WindowsでDatadogのAgentをインストールする

こんにちは。村主です。

WindowsはOSSが動かないものも多かったり、自動化もすごくし辛いし、Windowsは好みません。
今回はDatadogの話なので、監視についてお話します。

弊社での監視はNagiosやSensuが中心です。
NagiosのクライアントソフトウェアをWindowsで利用する場合は、正常に動作しなかったり、更新頻度が少なかったりと、Linuxと比べると安定性に欠けます。
Sensuに関しても、監視スクリプトが動く際にCPUを多く消費したりと、割りと面倒なことも多いです。

そこでDatadogはどうなんだ？ということでWindowsで使ってみました。

# インストール
以下の2個を実行するだけです。するとスタートメニュー等に[Datadog]が登録されます

* [Datadog]-[Agent]-[Windows]を選択した際に表示されるリンク(Download the Datadog Agent installer.)よりDatadog Agent Installerをダウンロードする。 
* cmd.exeを実行し、ダウンロードしたフォルダ内で以下の処理を実行する

```
msiexec /qn /i ddagent-cli.msi APIKEY="YOUR_API_KEY" HOSTNAME="my_hostname" TAGS="mytag1,mytag2"
```

# 設定
インストールしたら自動で起動しているので、ぼちぼちすればDatadogのダッシュボードに現れると思います。
設定を変更したければ以下を実行すればAgent Managerが起動します。

```
C:\Program Files (x86)\Datadog\Datadog Agent\files\agent-manager.exe
```

apikeyの変更や、hostnameの変更などはこちらから設定します。
また、各種プラグインは画面下部のEnableを押すことで有効化されます（各種ミドルウェア等で事前の準備が必要）
<img width="809" alt="スクリーンショット 2016-12-11 19.47.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/75573/df37a691-945d-7727-9da3-762dbee0d098.png">

# 最後に
インストールを2手順ほど実行するだけで各種メトリクスの取得ができ、各種プラグインもEnableにするだけなので非常に簡単に導入することが出来ました。
依存関係やOSSが更新されていない。比較的新しいOSに対応していない。など、Linuxを中心においている監視ソフトウェアに悩まされることは少なくなりそうです。
XBRLのほんとのほんとの基礎

自社内でもXBRLで書かれた財務諸表について見られる人があまりいないので、ちょっとでもなにかの足しになればな、というメモです。
ざっくりなので、多少あいまいでも概要がわかるような感じです。

# XBRL？
ただのマークアップ言語ですが、財務諸表とよばれる俗にいう決算書を国税庁に送信するときに使われています。
財務諸表の種類としては、

- 貸借対照表(BS)
- 損益計算書(PL)
- 製造原価報告書(CR)
- 株主資本等変動計算書(SS)
- 個別注記表

です。
「損益金の処分表」や、持ち分会社のときに作成する「社員資本等変動計算書」なども作成できます。

キャッシュ・フロー計算書が入ってないですが、国税に送信するときはいらないことになっています。

## XBRLの構成
国税庁に送信される申告データの中は「管理用部分」、「内容部分」に分かれています。
内容部分の財務諸表に関するデータがXBRLデータです。
XBRLデータの中は金額・文章などを格納したインスタンス文書と企業別のタクソノミースキーマなどで構成されます。

話を簡単にするために、管理用部分はざっくりカットです。

## XBRLとタクソノミ
いきなり出てきた「タクソノミ」ですが、これは「財務諸表のひな型」のようなものです。
金額などが書かれている「インスタンス」はこの「タクソノミ」とセットになって初めて読むことができます。

簡単に言うと、`現金100円`という情報をインスタンス文書では
`<jpfr-etax-t-cte:CashHand unitRef="JPY" decimals="0" contextRef="CurrentYearNonConsolidatedInstant">100</jpfr-etax-t-cte:CashHand>`
と書きますが、CashHand="現金"という情報はインスタンス文書の中のどこにもありません。

では、どこにあるのかというと「タクソノミ」の中にあるのですが、どのタクソノミの情報なのかというのがCashHandのプレフィックスに書かれています。
このjpfr-etax-t-cteというのは、「日本の税務用財務諸表タクソノミに定義されているよ」ということです。

「現金」という名称にくわえて、ひな形という言葉通り「現金」が「流動性預金」の分類に含まれているなどの基本的な構成に関する情報もすべてタクソノミ側に定義されています。

このタクソノミは[国税庁のHP](http://www.e-tax.nta.go.jp/shiyo/shiyo3.htm)から持ってくることができます。
展開したら、jp>fr>etax>t>cte>2013-03-25の順にフォルダをたどると日本語のラベル名、英語のラベル名が保存されたxmlファイルが見つかります。
日本語ラベルの中に「現金」が見つかるはずです。

#どう書けばいいか？#

細かい仕組みから説明をするよりも、実際のデータを見るのが手っ取り早いと思います。
極限まで簡略化して、以下のような財務諸表がどのようなXBRLの内容になるのかを見てみます。

| 科目名 | 金額 |
|:-----------------|------------------:|
| 資産の部 ||
|流動資産||
|　現金及び預金|150|
|　　現金|100|
|　　小口現金|50|
|資産の部合計|150|

こんな貸借がバランスしていない貸借対照表はありませんが、例です。
XBRLでは以下のようになります。

`<jpfr-t-cte:CashAndDeposits unitRef="JPY" decimals="0" contextRef="CurrentYearNonConsolidatedInstant">150</jpfr-t-cte:CashAndDeposits>
<jpfr-etax-t-cte:CashHand unitRef="JPY" decimals="0" contextRef="CurrentYearNonConsolidatedInstant">100</jpfr-etax-t-cte:CashHand>
<jpfr-etax-t-cte:PettyCash unitRef="JPY" decimals="0" contextRef="CurrentYearNonConsolidatedInstant">50</jpfr-etax-t-cte:PettyCash>
<jpfr-t-cte:Assets unitRef="JPY" decimals="0" contextRef="CurrentYearNonConsolidatedInstant">150</jpfr-t-cte:Assets>`

ここまででも、一回作成されたXBRLデータを国税のタクソノミに定義されている情報とにらめっこして、科目を追加したり、金額を手直しするのは可能になります。
科目なら、`Assets`や`CashHand`の情報を、`CheckingAccounts(当座預金)`などに書き換えることになります。

まず、ほんのさわりまで。

〇続編できました。「じゃ、実際にどう使うの？」という点にご興味がある方はぜひ
[XBRL解析が難しいので、簡易的に財務諸表を作ってみた](https://qiita.com/saya38/items/ee3142dfa521edf1fc4c#_reference-5425ff09c2d7259d0b36)
いわゆる小１の壁よりも、小４（学童）の壁があった在宅エンジニア

[子育てエンジニア AdventCalendar 2016](http://qiita.com/advent-calendar/2016/kosodate-engineer)の12/12の記事です。

個人事業主として、自宅を作業スペースとしてFileMakerの開発をしている、小３息子付きの開発者です。
もともとFileMakerではなく、Javaの開発をしていた（同じく個人事業主として）ので、ほとんどが大規模開発で、その日に帰れなかったり、徹夜したりということもありました。
ただ、子供が１歳過ぎて認可保育園に入れなかったりで、しかたなく無認可の保育ルームに預け、仕事に復帰した時は、夫が行きに保育ルームへ子供を連れて行き、私が帰りにピックアップするというのは最初だけ、やはり忙しくて子供の世話の負担が夫に傾きかけて私がどうにもこうにも家に帰れなかったりした時、

これはいかん。

家庭崩壊するために働いているのではない。

でも、仕事は続けたい。
開発したい。

ということで、Javaの開発から、小回りのきくFileMakerの開発で、自宅メインにシフトチェンジしました。
夫には、引き続き大規模開発のコンサルがメインということで、外仕事をメインに。

とはいえ、FileMakerに馴染みがあったわけではないので、1からの出発。
勉強しつつ小さい修正を受けたりとしてきました。
（でもJavaの開発で自宅でできる開発は引き続き受注）
この頃には無事区立保育園にも入れ、ホッと一息。
忙しければ、延長して19時15分までに歩いて5分の保育園に迎えに行き、子供が寝た後でまた仕事再開、もしくは早朝にシフトをして仕事をしていました。

あぁ、保育園で19時15分まで預かってもらえるってすばらしい。

そう思って小学校入学時の学童申し込みでは、リミットが18時15分。。。
たった１時間ですが、１時間違うとできることが数倍違います。
しかも、さびしんぼうの息子だったので、「お迎え来て！」（学童は自分で家に帰ってもOK）だったので、時計を見ながらの仕事。
なんとか学童も慣れてきたところ、学童は小学３年までなので、来年度４年生からはそのままさくっと帰ってくる。。。
もし私がいなかった場合はその際自分で鍵を開けて入って「帰ったよ」コールをする、電話がなっても出ない、ピンポンなっても出ない、などなど、、、この一年、練習として留守番をさせてそれを定着させるのに、

私「ピンポンしても誰も出なかったら？」　／　息子「鍵開けて入って、ママに電話」
私「電話がなったら？」　／　息子「出ない！」
私「ピンポンなったら？」　／　息子「出ない！」
私「お友達がおうちで遊びたいって言ったら？」　／　息子「家に入れないで外で遊ぶ」
私「外で遊ぶ時は？」　／　息子「ママに電話」

とその都度繰り返し、今では私が打ち合わせで帰る時間が息子の帰宅時間と合わなくてもきちんと電話してくれるようになりました。

はっきり言って、小１の学童開始時は、どのみち大人の目があるのでそんなに心配はしていませんでした。
何かあれば連絡帳で知らせてくれるし、もっと大変なことがあれば電話してくれるし、宿題の声かけも外遊びもさせてくれる。
でも、学童に行かなくなったら、大人の目が届かないので、一時期は本気で「小４になったらリビングにモニタとかつけた方がいいんじゃない！？」とか思ってました^^;;;
今の所、時間差で私が後に帰って来た時は、テレビを見ているか、家の前の広場で遊んでいるので、留守番練習は功を奏しているのだと思います。

結局、２学期に入ってあれこれあって学童は辞めたのですが、私が家にいなかった時の対処は引き続きできているので、来年度もなんとかなるかな？と思います。（とはいえ、その心の油断をした時に何かあるかも。。。と気を引き締め）

「子供なんてそんな約束しなくても、テキトーに帰って来て友達と遊ばせておけばいいじゃない？在宅なんでしょ？」
と思われるかもしれませんが、住んでいる地区は人口過密地帯。
しかもオレオレ詐欺も毎日警察署からのメールで警戒してくださいとある地域。
何かあってからでは遅いので、子供との約束は必須です。

習い事もあるので、時計をもたせて「何時に遊びから帰って来たら習い事に間に合う？」と自分でおおよその準備時間や習い事先までどのくらいの時間かかるかなどの訓練もこの一年、同じく一緒にしてきました。
定着するまでは、かなりピリピリでしたが。。。

ちなみに、１週間みっちり習い事を入れて、学童から直接習い事へ行かせ、帰宅時間を子供の習い事に合わせている社員（フツーに朝会社に行って夜帰ってくる）ママ友も。
今まで共働きで仕事をしていると、子供が1人で家にいることが不安でたまらない、というのもあるみたいです。

さて、ここまで訓練してきたことを、来年度以降も引き続きやってくれることを息子に期待しつつ、次のAdventerにバトンを渡します。
ターミナルで遊べるブロック崩しをGo言語で作る

この記事は[Go (その2) Advent Calendar 2016](http://qiita.com/advent-calendar/2016/go2)の12日目の記事です。

みなさん、サンタさんには何をお願いしましたか？
PS4ですか？

でもクリスマスまであと何日かありますよね。PS4はしばらくお預けですよね。
PS4がまだ無いとすると、手元にあるCUIのターミナルで遊ぶしかないですよね。

というわけで、ターミナルで遊べるブロック崩しをGo言語で作ってみました。

![Untitled9.gif](https://qiita-image-store.s3.amazonaws.com/0/33890/03e04a53-38db-bf7e-b62c-b419330b5395.gif)

WindowsでもMacでもLinuxでも[遊べます。](https://github.com/kurehajime/kuzusi/releases)
残念ながら[PS3では遊べません](http://gigazine.net/news/20160622-sony-ps3-linux/)。

## 技術解説

Go言語界隈ではわりとおなじみの[termbox-go](https://github.com/nsf/termbox-go)というライブラリを利用しています。

これを使うと

* 任意の座標への文字の書き込み
* 画面のクリア
* キーイベントの取得

が行えます。

画面表示はこんな風に行います。

``` draw.go
//画面を初期化
termbox.Clear(termbox.ColorDefault, termbox.ColorDefault)
//10列目15行目にAと表示
termbox.SetCell(10, 15, []rune("A")[0], termbox.ColorDefault, termbox.ColorDefault)
//画面に反映
termbox.Flush()
```

とっても簡単ですね。
座標を指定して、文字列渡すだけ。
オプションで背景色や文字色も指定できます。

キー入力はこのように取得します。

```key.go
for {
    switch ev := termbox.PollEvent(); ev.Type {
    case termbox.EventKey:
        switch ev.Key {
        case termbox.KeyArrowLeft:
            //左キーを押された時の処理
        case termbox.KeyArrowRight:
            //右キーを押された時の処理
        default:
        }
    default:
    }
}
```

ぐるぐるループを回しながらキーイベントを待つ感じです。

---

今回のブロック崩しは

* キーイベントの取得(プレイヤーのバーを動かす)
* タイマーの取得(時間経過でボールを動かす)
* 当たり判定などのゲームコントロール
* 画面描画

大きく分けて４つの処理で成り立っています。

この中の「キーイベント」と「タイマー」は同時に別々に動かす必要があるため、goroutineで並行して実行しています。

しかし気をつけて実装しないと・・・

![zu2.png](https://qiita-image-store.s3.amazonaws.com/0/33890/e7093428-416b-6414-92dc-0762043cb18a.png)

複数のgoroutineがひとつのデータを同時に編集しようとしてクラッシュします。

ただの変数なら「いつかクラッシュするかも」というレベルですが、termbox-goのようにIOが絡んでくると起動して数十秒でクラッシュすることもあります。

というわけで、このような構成にしてみました。

![zu.png](https://qiita-image-store.s3.amazonaws.com/0/33890/ba391b6e-a499-0bba-c3ad-841e32aeb2bd.png)

キーの取得とタイマーを別々のgoroutineとして動かし、それらの整合性はchannelでゲームコントロール関数に一任。画面描画関数を呼び出せるのをゲームコントロール関数だけに限定し、複数のgoroutineから同時に画面を弄るようなことはしない、という作りです。左下の猫に深い意味はありません。

このあたりの並列/並行処理のバグは非常に厄介で、試しに動かしてみたら普通に動くけど、長時間動かすと途中でクラッシュする、というような再現の難しい問題に直面します。

そういったバグを事前にチェックする機能がGo言語には備わっているので、goroutineを利用するプログラムを作る際はぜひチェックしましょう。

>Go1.1 の Race Detector
>http://jxck.hatenablog.com/entry/20130530/1369928762


## まとめ

ソースコードはこちらです。
https://github.com/kurehajime/kuzusi

余談ですが、
今回のブロック崩しに似たプログラムで「pongコマンド」というのも過去に作りましたので、ぜひこちらもご覧頂ければと思います。

>Go言語でpongコマンドを実装する
>http://qiita.com/kurehajime/items/f9d225fab5eaa736913b

そして誰か、自分の代わりにpongコマンドの並行処理バグを直してくれると大変助かります。
【Node.js】udpで回線監視をするアプリケーション(udping)を作った話

[SFC-RG Advent Calendar 2016](http://www.adventar.org/calendars/1413)の11日目です。

<img width="951" alt="スクリーンショット 2016-12-12 2.04.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/94774/be12cfd2-481f-ffdb-e075-ee904162732d.png">

# 概要
* Node.jsで簡単な回線監視を行うアプリケーションを作った
* コマンドラインツール,WEBアプリケーション,Node.jsモジュールの３つの使い方が出来るようにする
* RaspberryPiなどのIoT機器で回線監視に用いることをを想定。
* サーバー側・クライアント側の両方から、RTTの上昇や不通といった回線異常を検知できます。

[GitHub](https://github.com/yas-nyan/udping/)
[npm](https://www.npmjs.com/package/udping)


# 構成
## 環境
* Node.js v6.9.2 (v4以降なら動くはず)
* Mac OS X 10.12.1
* Ubuntu 16.04 

Windowsは未確認です。大したことはやってないので大丈夫だとは思いますが、出来ないこともあるかもしれません。

## シーケンス図
基本的な仕組みはこんな感じ。
![udping_図.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/94774/08006fa4-4c16-84b9-fca6-2a870b78c79f.jpeg)


# 使い方

プライベートIPを介する場合、必要に応じてポートフォワーディングを行ってください。
## コマンドラインツールとして利用する


```shell:~/
npm install udping --global
```

グローバルオプションをつければ、```udping```をそのままターミナルのコマンドとして使えます。

### サーバー側

```shell:~/
udping -s
```


### クライアント側

```shell:~/
udping [サーバー側のIPアドレス]
```

### 主なオプション
ping風です。

*  -s, --server
サーバーモードで起動します。
   
* -c, --client
クライアントモードで起動します。

*  -t, --time <value>
実行時間(秒) デフォルトは無限です。
   
*  -i, --wait <value>
実行間隔(秒)　デフォルトは1秒です。サーバー側は1.5秒
   
*  -f, --file <value>
ログデータを書き出すパスを指定できます。
デフォルトは```[実行ディレクトリ]/result_udping/```
   
* -h, --host <value> 
サーバー側のIPアドレスです。
通常は``udping 192.168.1.1``のように省略します。
    
* -p, --port <value>
サーバー側のポート番号を指定します。デフォルトは55555。独自にで指定したい場合や他のプログラムとの競合がある場合のみ変更してください。



## モジュールとして他のNode．jsアプリケーションから利用する

普通にnpmでインストールしてください。

```shell:~/
npm install --save udping
```

udpingクラスを呼び出すと使えます。
引数に環境設定用のオブジェクトを与えてください。
```node.js:yourApp.js
const Udping = require(`udping`);
const _env = {
    //サーバーorクライアント クライアントが初期値。
    //mode: "client",
    mode: "server",

    //サーバーのホストネーム IP 
    host: "localhost",
    
    port: 55555,
    execTIme: new Date().getTime(),
    savepath: `./result_udping/${Date.now()}_result.txt`,
    //何ミリ秒おきに送るか。モードをサーバーにした場合は1.5倍
    wait: 1000,
    //タイムアウトやエラーが起きた時のcallback。初期設定はプリミティブ型のfalseを入れておく。
    errCallback: false,
    //成功時のcallback.初期設定はプリミティブ型のfalseを入れておく。
    successCallback: false
}
const udpingServer = new Udping(_env);
```



## WEBコンソールでRTTをチャートで可視化する(おまけ機能)
RTTを可視化させて楽しむ機能を作りました。

CLI版をインストールした状態で、

```shell:~/
udping-web
```
で起動します。適当なブラウザで```localhost:3012```を開いてください。

<img width="951" alt="スクリーンショット 2016-12-12 2.04.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/94774/be12cfd2-481f-ffdb-e075-ee904162732d.png">
こんな感じでヌルヌル動きます


# 参考文献
[npm でコマンドラインツール開発事始め](http://qiita.com/takayukioda/items/a149bc2907ef77121229)
何故かGNOMEクラシック上でGNOME SHELLを使う

How to reproduce

0. ディスプレイマネージャーとしてlightdmを有効にする（lightdmインストールすればdebconfで選択を聞いてくる）
1. lightdmでログインする際にセッションとしてGNOMEクラシックを選ぶ
2. ディスプレイマネージャーをgdm3に切り替える（sudo dpkg-reconfigure gdm3)
3. ログインセッションをGNOMEにする
4. 何故かGNOMEクラシック上でGNOME SHELLを使うという謎環境ができる

解除方法
0. もう一度ディスプレイマネージャーとしてlightdmを有効にする（sudo dpkg-reconfigure gdm3)
1. ログオフしてログインセッションをGNOMEにしてログイン
2. ディスプレイマネージャーを再度gdm3に切り替え（sudo dpkg-reconfigure gdm3)
3. ログオフして、普通にgdm3からログオンする
帰省時に作っておきたい、5分でできる家族みまもりシステム

# 背景
数日前、茨城で震度6弱の地震がありました。
私の実家は茨城なので、今回の地震があったときも家族に安否確認をしました。
ふと、この年末年始の帰省時にAmazonDashButtonで何かやろうかなと考えていた時に、[ポットを使った時に家族にメールが届く仕組み](http://www.mimamori.net/)を思い出しました。
これと似たようなものをAmazonDashButtonで作ることで、いつでも家族の安否を確認できるのでは、ということで、大晦日の某歌番組を見ながら作ってみました。

# 概要
AmazonDashButtonで家族の安否を確認するシステムを作りました。
家具（今回は扉）にAmazonDashButtonをつけて、ボタンが押されるとLINEに通知がきます。
**5分**で作れます。

# 必要なもの
- [AmazonDashButton](https://www.amazon.co.jp/b?node=4752863051)
- サーバ（今回は実家で埃を被っていたMac mini)
- 通知を受け取るプラットフォーム(今回は[LINE Notify](https://notify-bot.line.me/ja/))
- [dasher](https://github.com/maddox/dasher)

サーバはWiFiが使える小さなマイコンモジュールとかにしてもいいですね。
dasherを動かすNode.jsはv7.3.0を使用しました。

# 実装
## LINE Notifyのアクセストークンを取得
[LINE Notify](https://notify-bot.line.me/ja/)でログインし、画面右上のマイページから任意のトークルームを選択し、アクセストークンを発行します。

## AmazonDashButtonの初期設定
AmazonDashの設定を[セットアップ手順](https://www.amazon.co.jp/gp/help/customer/display.html/ref=amb_link_1?ie=UTF8&nodeId=201746340&pf_rd_m=AN1VRQENFRJN5&pf_rd_s=merchandised-search-leftnav&pf_rd_r=TSXWXYC79BGFWDKJCQD3&pf_rd_r=TSXWXYC79BGFWDKJCQD3&pf_rd_t=101&pf_rd_p=cf13d39a-e3f0-4ff4-a61f-037a02d68c1d&pf_rd_p=cf13d39a-e3f0-4ff4-a61f-037a02d68c1d&pf_rd_i=4752863051)の**5番まで**行います。
注文する商品を選択する画面で画面右上の✕ボタンを押して、セットアップをキャンセルします。

## AmazonDashButtonのMACアドレスを取得
今回はdasherを使います。

```sh
git clone https://github.com/maddox/dasher.git
cd dasher
npm install
```

次に、`find_button`スクリプトを実行し、AmazonDashButtonを押すと、MACアドレスが取得できます。
（xx:xx:xx:xx:xx:xxと表記しています）

```
⇒  ./script/find_button
Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
Possible dash hardware address detected: xx:xx:xx:xx:xx:xx Manufacturer: unknown Protocol: udp
.
.
```

## dasherの設定ファイルを記述
config.example.jsonをconfig.jsonに名前変更します。

```
mv config/config.example.json config/config.json
```

`config.json`を以下のように変更します。

```json
{"buttons":[
    {
      "name" : "[任意の名前]",
      "address": "xx:xx:xx:xx:xx:xx",
      "url": "https://notify-api.line.me/api/notify",
      "method": "POST",
      "headers": {"Authorization": "Bearer [LINE Notify access token]"},
      "formData": {"message": "[任意のメッセージ]"}
    }
]}

```

`sudo npm start`でAmazonDashButtonが押されるのを待ち受けたら、AmazonDashButtonを押すことでLINEに通知が行くはずです！

# デモ
扉の開閉で通知を送ってみました。

![dash_button_demo.gif](https://qiita-image-store.s3.amazonaws.com/0/2037/7183589e-1a68-69d5-88b4-f128b951008b.gif)

※デモ用に目立ったところに置いていますが、実稼働するときは普段見ることがない扉の奥のところにつけます。

# まとめ
今回の実装で一番苦労したのは、**いかに普段の生活に溶け込み、かつ邪魔しない配置にAmazonDashButtonを置くか**、というところでした。
家の見えない位置に置いて、普段の生活動作で勝手にボタンが押される状態が一番だと思い、今回は普段見えない位置の扉にしました。
AmazonDashButtonは約1000回使えるということで、1日2~3回程度の使用ならば1年くらいは使えそうです。
毎年帰省時にボタンを変えるだけで1年間見守ってくれるのは、そこそこリーズナブルだなと思いました。
LINEのトークルームに兄弟なども招待すれば、他の家族も安否確認を共有できていいですね。
みなさんもぜひ試してみてください。
What is your ikigai?

あなたの生き甲斐は何ですか。家族？趣味？仕事？社会貢献？

順調な時に進路について悩むことはあまりありませんが、トラブルに遭ったり岐路に立った時にはいろいろ考えちゃいますよね。facebookで紹介してもらったwikipedia英語版の[「Ikigai」という記事](https://en.wikipedia.org/wiki/Ikigai)によれば、ikigaiとは「存在する理由」であり「日本人によれば誰でもikigaiを持っている」ものとのこと。それを図式化したものが下の図です。

![File Modern Ikigai.jpg   Wikipedia.png](https://qiita-image-store.s3.amazonaws.com/0/35320/52e45356-98e6-6252-50dc-57f5eaa8ca37.png)
[Modern_Ikigai](https://en.wikipedia.org/wiki/File:Modern_Ikigai.jpg) / [YawLifeInc.](http://www.mikepaton.com/) / [CC BY-SA 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/deed.ja)（日本語は[higa4](http://qiita.com/higa4)が追加）

人に誇れるようなものではなく、どちらかといえばトラブルばかりの人生を過ごしてきた私ですが、トラブルに出くわすたびに自問していたのは自分は何者でこれからどういう人生にしたいのかということで、それは自分の生き甲斐とは何なのかを問い続ける試みだったように思います。

異文化圏のローコンテキストな視点からの日本文化の解釈には新鮮な気づきをもらえることがよくありますが、この図を見ながら今回改めて気付いたのは「生き甲斐とは何か」という問いは自分と社会との関わりを問い直すことでもある、ということです。

上の図では４つの円の重なる部分が「生き甲斐」となっています。

(1) 好きなこと
本能が赴く方向性。穏やかに言えば自然体でいる時にやりたいこと。趣味、嗜好、恋愛、等々。野放図にやると法に触れることもあるので何でもやりなさいということではもちろん無い。

(2) 得意なこと
何か他人よりうまくできるみたい、ということ。

(3) お金を稼げること
職業、仕事。

(4) 社会の役に立つこと
個人で寄付したり、町内会、NPO、CSOなど何らかの組織に参加して社会が必要としていることをやろうとすること。

４つのうち、「お金を稼げること」は仕事とか職業に相当しますが、自立した生活を送るためには誰もがやらなければなりませんし、そこに生き甲斐を感じる人もいるでしょう。

それ以外の３つはやらねばならないものではありません。やりたい人がやれば良いし、生き甲斐を感じる／感じないも自由だと思います。生き甲斐は人により異なり、誰でも自分なりに追い求めて良いものですが、無いよりもあった方が生活に張り合いが出るものでしょう。生き甲斐を感じている人の方がそうで無い人よりも長生きであるという[調査](https://www.psychologytoday.com/blog/the-good-life/200809/ikigai-and-mortality)もあるようです。

仕事を通じてこれら４つのことを全て実現できている人は素晴らしい人生を送っていることでしょう。しかしながらそういう人はそう多い訳ではありません。仕事だからといって好きではないことや、得意では無いことや、社会の役に立つとは思えないことを続けていると辛くなってきます。そうした時にはスポーツで汗を流したり、家族との時間を過ごしたり、趣味に走ったり、サークル活動、コミュニティ活動、ボランティア活動など、会社で仕事をする自分以外の立場で、生き甲斐を感じられる場が重要なのだと思います。

仕事で全てを満たすことが無理なら、別の枠組みやコミュニティに参加して、ちょっと違った自分で何ができるかチャレンジしてみること、そのひとつがコミュニティ活動であり、さらにそのひとつがシビックテックの活動なんだろうと思います。

人はどういう人生を送ろうが自由ではありますが、悩み模索する人は意識しているかどうかに関わらず、単一の枠組みではなく、例えば上の図の円に相当する部分を、立場を変えながら組み合わせて関わっているような気がします。

で、結局何が言いたかったのかという話ですが ^^; 以下のようなことです。

・何かをやるのに何のためかと問われた時、自分の生き甲斐のため、と堂々と答えていいんじゃないの。
・人のやっていることにはそれぞれのバックグラウンドと目的意識があるので、そこにあれこれ口出ししたり文句を言っててもつまんないんじゃないの。
・あなたは誰で何をしたいのですか？他人を見るのではなく自分のためにできることを考えて動いた方が前に向かって進めるヨ

Wish you a happy new year! 来年もよろしく。
gitでbranchをcheckoutした履歴

作業ログとして、あるいは以前参照したブランチに再度チェックアウトするために、branchをcheckoutした記録を残したいと思ったことはないでしょうか。ぼくはあります。

ぼくは以前まで、 `.git/info/.branch.log` というファイルを作って `.git/hook/post-checkout` でブランチ名を記録するといったことを行っていました。

しかし、ちょうどさっきbranchをcheckoutした履歴って実はreflogに含まれてることに気づいてこのオレオレブランチ履歴を捨て去りました。やったね！

```bash
git --no-pager reflog | awk '$3 == "checkout:" && /moving from/ {print $8}' | uniq | head
```

こんな感じでgit自体のログから取れるようになって幸せになりました。

ちなみに、直前に居たブランチにチェックアウトするには:

```bash
git checkout -
```

これでできます。
継続的な技術コミュニティの持続のために工夫していること

投稿が遅れてしまい失礼致しました。
仕事や年末の忙しさに加えて体調不良やトラブルもあり、例年以上に時間が思ったように取れず、アドベントカレンダーだというのに大晦日の投稿になってしまいました…。

本稿では、ぼくが主宰しているGotanda.pmというコミュニティと、その継続のための工夫について書きます。

# Gotanda.pmとは

Gotanda.pmは五反田を拠点としたPerlエンジニアのための技術コミュニティです。

その活動の一環として `Gotanda.pm Perl Technology Conference` というカンファレンスを行っています。（技術の勉強を通じて交流することを目的としたものを目指しているため、あえて勉強会ではなくカンファレンスという言葉を用いています。）
そのため、とても緩い雰囲気で行われています。

カンファレンスはGotanda.pmにとっては必ずしも無くてはならないものではありませんが、
他の技術者を知る機会、また、いま他のひとが気になっている技術を知る機会、コミュニティの様子を覗く機会を提供するために開催を行っています。

# カンファレンス/勉強会の開催の苦労

さて、もしあなたがコミュニティの勉強会などのイベントの主催であれば、その開催に当たってさまざまな意思決定をする必要があるでしょう。
たとえば、日程と会場、時間帯やスケジュールはどうするのか、他のイベントと日程は重なっていないか、何人まで参加できるのか、テーマはどうするか、スピーカーは何人いるべきか、募集方法はどうするか、会場等で費用が掛かる場合はどうやって工面するのか、会場での飲食は可能なのか、飲食を提供するか、参加費を徴収するか、どのように広報するのか、徴収する場合はお釣りを用意する時間と手間も確保する必要があるし、会場の準備/撤収の人員の確保、会場となるビルが施錠される時間帯がある場合はその時間帯に到着した参加者を誰がどのようにピックアップするのか、他に決めなければいけないことはないか、などなど細かいことまで含めて本当に様々なことを決める必要があります。
大きなイベントともなれば、更にスポンサーやゲスト、ノベルティやお金とスケジュールのやりくりなどもこれに加わってきます。

そして、何か問題があれば迷惑や被害を被った人から苦情が来るわけです。
つまり、多かれ少なかれ、責任を要求されます。
完全無償のボランティアで運営するコミュニティに責任を求める人もどうなんだという意見もあるでしょうけど、
迷惑や被害を被ってしまった人に対しては当事者の身を顧みれば申し訳が立たないと思う場面もあるかもしれません。特に金銭の揉め事は厄介です。
なんにせよ、そういう面倒事が起きるのは面倒なので割けたいとは誰もが思うことでしょう。
そのため、主催者は問題が最小化しつつイベントが最高になるよう、これらの意思決定をすることになります。
リスクが小さければ無視できるものも多いとはいえ、リスクの取捨選択も含めた意思決定には神経を使います。時間も使うことになるでしょう。

時間は有限です。当然、コミュニティの運営と言えども全ての時間をその準備に充てることはできません。
また、モチベーションも有限です。頑張れば乗り切ることもできるでしょうが、無限に頑張り続けるだけのモチベーションを維持することは極めて困難です。

有志で運営するものだからこそ、効率化が必要になります。

# フレームワーク化する

イベントをどのように開催すれば良いのかをフレームワーク化することで意思決定すべきことをリスト化することができ、TODOを可視化しやすくなります。
また、やるべきことが見えていると行動しやすくなります。

Gotanda.pmの場合はカンファレンスの開催を3/6/9/12月に行うということを決めています。
主催者にとっては、日程の選択肢を絞りやすくなり、参加者にとっては、予定を調整しやすくなります。

また、決定事項をYAMLに記載すればconnpassへのイベント登録をほぼ全自動で行ってくれる[Mother](https://github.com/gotanda-pm/Mother)というシステムを作り、利用しています。
会場のキャパシティから、参加者枠/発表者枠などをいい感じに計算して入れたり、懇親会参加のアンケートを生成するなどの機能も持っています。
これはイベント日のスケジュールをある程度フレームワーク化しているが故に作ることができました。

ほかにも、会場や物事を決める順序など、様々なことをあらかじめ決めておくことで開催が楽になります。

Gotanda.pmではまだ実現できていませんが、誰でも開催することができるよう運営ノウハウを明文化したいと考えています。

反面、何もかもを毎度同じにしすぎると面白みが薄れる要因にもなるため、加減は必要だとは思います。

# やらなくて良いことをやらない

たとえば、人数が少なくかつほぼ顔見知りのメンバーだけであれば、事前徴収せずに懇親会会場で割り勘精算などでも十分な場合もあります。トラブルが発生する可能性が低くかつ万が一問題が起きても当事者間のやりとりだけで解決できる見込みが高いためリスクが低く見積もれるためです。
さらに、金銭のやりとりが発生しなければ参加/不参加のチェックは重要ではなくなるかもしれません。
などなど、その時々の状況に応じて妥協できる点はたくさんあるはずです。

# まとめ

少しづつですが、毎回少しづつ楽になってきている気がします。
簡単になりますが、これが少しでも技術コミュニティの運営を始めようとする方々、関わる方々の一助となれば幸いとなります。

さて、ここまで書いてきたことですが、これらはプログラミング原則に則ったものであることにお気づきでしょうか。

* KISS(Keep It Simple, Stupid) => シンプルに保つ
* DRY(Don't Repeat Yourself) => 手順を毎度定義せずに済むようにする
* YAGNI(You Aren't Going to Need It) => 必要になるまでやらない

プログラミング原則は技術コミュニティの運営にも役立つ！というオチで〆させて頂きます。
ありがとうございました。
Android Studio 2.2.3 for MAC のインストール

# はじめに
大晦日に紅白を見ながら環境構築してます。
IDE を使うのは初めてなので、一般的な開発環境の Android Studio 2.2.3 をmacOS Sierra 10.12.2に組んでみました。単にMacを久しぶりに使ってみたかったのと、Windowsで端末毎のUSBドライバ関係に懲りているだけとも言う。

# 環境設定
やることは大まかに以下の３つらしい。

1. JDKのインストール
2. Android Studio のインストール
3. 足りないSDKを追加でインストール

## 1. JDKのインストール
Finderの「移動」から「ユーティリティー」を立ち上げて、「ターミナル」を立ち上げる。
Javaがインストールされてるかと思って確認。

```
hoge$ javac -version
No Java runtime present, requesting install.
hoge$
``` 

入っていないので、[Java SE Development Kit 8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)からJDK8u111をインストール。
Oracle Binary Code License Agreement for Java SE を Accept License Agreementしてダウンロード。「jdk-8u111-macosx-x64.dmg」を起動してインストール。

```
hoge$ javac -version
javac 1.8.0_111
hoge$ 
```

ちゃんと入りました。

## 2. Android Studio のインストール
[Android Studio とSDK ツールをダウンロード](http://developer.android.com/sdk/index.html)を開いて**ANDROID STUDIO**ボタン？を押下して表示されたライセンスに同意し Android Studio for MAC をダウンロード。
「android-studio-ide-145.3537739-mac.dmg」をクリックしてインストーラを起動。表示されたウインドウで Android Studio アイコンをアプリケーション・フォルダにドラッグ＆ドロップすればインストールされます。細かいことはダウンロードサイトに書いてありますが、Macはこの手の変なGUI操作が必要なので直感的に解らないことが多い。
あとはアプリとしてAndroid Studio を起動して、2回選択とFinish 押したらインストールが開始されました。途中で認証聞かれて完了。

- 以前の環境はないので引き継がない
- Standard

## 3. 足りないSDKを追加でインストール
インストール完了時点でAndroid Studio ウインドウが開いたままなので、「Configure」から「SDK Manager」を選択。デフォルトだと「Android 7.1.1 (Nougat) API Level 25」しかSDKが入っていないので、手元の機器に合わせて「Android 4.4 (KitKat) API Level 19」以上を入れておく。

「Launch Standalone SDK  Manager」で必要なものを追加。

- Android SDK Build-tools は全部

各API (Level 19 以上)の packages については次の通り。
中華スマホ/パッドを幾つか買ってるのもあり、対応環境は入れられるだけ入れる。

- Document は入れない
- Glass, Android TV, Android Wear 関係は入れない
- System Image (MIPS, ARM 64/EABI, Intel x86 Atom) 関係は入れる  
- Google APIs (ARM 64/EABI, Intel x86 Atom) 関連は入れる
- Sources for Android SDK 関係は入れる

Extra は次の通り。

- Android Support Repository
- Google Play Service
- Google Repository
- simulator/emulator は入れない（実機デバック予定）　

やることの都合上「Android 2.3 (Gingerbread) API Level 9」位までは必要になる可能性が高いが、とりあえず手元の機器に合わせておく。

Accept License してインストール実行。1GB以上ダウンロード＆展開するらしく結構かかるが、紅白が終わるまでにはなんとかなったので今年の作業は終了。
次回からは、簡単なアプリを作ってみるつもり。

# 参考
[アプリ開発:スマホ・アプリの作り方](https://akira-watson.com)
開発時にCORSを無視するGoogleChromeの起動オプション

## まとめ
Chromuimベースのブラウザで起動オプションをつけることで、CORSを無視して動作させることが出来る。

```bash
open http://localhost:8000/ -a "/Applications/Google Chrome.app" --args --disable-web-security --user-data-dir
```

## 開発時に困るCORS（Cross-Origin Resource Sharing） 
他のドメインにリクエストする際に以下の様なエラーを見たことありませんか？

```
XMLHttpRequest cannot load https://api.example.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://example.com' is therefore not allowed access.
```

これはCORS(Cross-Origin Resource Sharing)といって、他のサーバーにXMLHttpRequestをした際のリソースを読み取ることが出来ない仕様です。
セキュリティのための仕様ですが、開発時には鬱陶しくなることがあります。

サーバーのレスポンスで以下のようなヘッダーを返すと、読み込むことが出来ます。

```
Access-Control-Allow-Origin: "http://example.com"
```
しかし、サーバーが弄れない状況だったらどうでしょう。
年末年始でサーバーの方が弄れなくなってしまった…みたいな状況に心当たりありませんか？

### 起動オプションで無効にできる
実はGoogle Chromeは複数の起動オプションをつけることでブラウザの挙動を変えることが出来ます。

```bash
open http://localhost:8000/ -a "/Applications/Google Chrome.app" --args --disable-web-security --user-data-dir
```

Chromiumの方の機能なので、Chromiumを使っているブラウザだったらすべてこの方法で大丈夫そう。
自分は普段使いのブラウザがChromeなので[Vivaldi](https://vivaldi.com/)をCORS無視にして開発しています。
Onion Omega2

##届きました。
今年の夏頃にKICKSTARTERのクラウドファンディングに出資していた
omega2が今日届きました。
![DSC_1553.JPG](https://qiita-image-store.s3.amazonaws.com/0/148248/a21d2a4c-a840-f9d1-ea0b-0a54b97f797e.jpeg)
laravelのクエリービルダーで取得したコレクションについて重複行を削除し、値を合計する


#やること
同じ日付で売り上げが異なるレコードが複数あるので、重複日の売り上げ高を合計して日付の重複を削除した新しい配列を作る。

```php

//DBからリストを取得。日付の早い順に並び替え
$dates = List::orderBy('date','asc')->get();

//初期設定
$count = $dates->count(); //ループの基準になるレコード総数の取得
$sum_sales = 0; //日付合計の初期化
$date = $dates[0]->history_date; //基準日に初期値を設定
$sales_days = []; //出力用の配列初期化

//集計
for ($i=0; $i < $count; $i++) {
	//日付と売上を一時保存
	$tmp_date = $dates[$i]->history_date;
	$tmp_sales = intval($dates[$i]->sales);
	//同一日、または最終レコードか確認
	if ($tmp_date != $date or $i == $count - 1) {
		//異なる日付だったら出力配列に格納。ついでにcarbonでフォーマット
		$sales_days[] = [$date->format('Y/n/j'),$sum_sales];
		//基準日、合計の初期化
		$date = $tmp_date;
		$sum_sales = $tmp_sales;
	} else {
		//同一日だったら集計
		$sum_sales += $tmp_sales;
	}
}
```
RSpecを並列実行するgemを作っている話

これは Ruby アドベントカレンダー 24 日目の記事です。

Railsを長く開発していると機能を追加していくにつれてテストコードも肥大化し、初めのうちは一瞬で終わっていたrspecも気がつけば数十分かかるようになっていたということも多いと思います。テストをCIで回していると、結果が得られるまで作業が止まることになるので、テスト時間の肥大化は結構大きなインパクトを持ってきます。

テストの中にボトルネックがある場合それを解消することである程度の高速化ができますが、純粋にテストの数が多いということになると、全てのテストを実行するのを諦めないのであれば、テストを並列に実行するのが高速化のアプローチとなります。

## テストを並列実行するgem

テストを並列に実行するgemはすでに世の中にいくつもあります。

### [rrrspec](https://github.com/cookpad/rrrspec)

Cookpad社が作っているrrrspecはRSpecを複数サーバで分散実行します。CircleCIなどのCIサービス上で使うのは難しいです。（多分）

### [parallel_tests](https://github.com/grosser/parallel_tests)

parallel_testsは複数プロセスでテストを分散処理するgemです。この手のgemの中でおそらく一番githubスターを集めているのがこれです。このgemの最大の問題は、テスト実行の最初の時点で各プロセスにテストファイルを割り当ててしまうことです。ファイル間で実行時間に偏りがある場合、1つのプロセスだけが走り続けてテスト実行時間が伸びる可能性があります。

### [test-queue](https://github.com/tmm1/test-queue)

test-queueはparallel_testsと同様に複数プロセスでテストを実行します。parallel_testsとは異なり、実行時に順次テストを配布していくのでテスト時間の偏りは発生しません。また、複数サーバにまたがってテストを実行する機能もあります。

機能的には必要なものを全て持っていて素晴らしいのですが、使ってみたらうまく動かず、デバッグしようとコードを見たら、いかにもCプログラマが手続き的に書き下したような感じでなかなか読むのが辛い。しかも頑張って読み込んでいっても問題がわからないし、これは自分で書き直した方が早いのでは？という気がしてきました。

### [rspec-parallel](https://github.com/bicarbon8/rspec-parallel)、 [rspec_parallel](https://github.com/cloudfoundry/rspec_parallel)

rspec-parallelとrspec_parallelはRSpec専用の複数スレッドでテストを分散処理するgemです。残念ながら両方とも積極的には開発されていないです。またE2Eテストにpoltergeistを使っている都合で一部DBをtruncateが必要な箇所があるためスレッドだと困るのと、CI環境のコアをちゃんと使い切りたいとか、そういう都合もあって使えませんでした。

## [parallel-rspec](https://github.com/yuku-t/parallel-rspec)

というわけで既存のgemがうまく動かなかった＋デバッグが難しかったため、 parallel-rspecという新しいRSpecを並列実行するgemを作っています。特徴としては

- 単一のマシンの上で動く
- プロセスベース
- RSpecだけに対応して
    - 余分な複雑さを排除
    - パフォーマンス最適化
- RSpecっぽい使い勝手
- OOP的に書く

### 使い方

gemをインストールするとparallel-rspecコマンドがインストールされるので、これをrspecコマンドの代わりに使うだけです。

```
parallel-rspec spec
```

これでspecディレクトリ以下の *_spec.rb が全て分散実行されます。この例では一切引数が渡されていませんが、rspecコマンドに渡せる全てのオプションを指定することができます。ただし複数プロセスで動いているので、一部のオプションは互いに上書きしあってうまく動かない可能性があります。また並列度は自動的に実行環境のコア数になります。

parallel-rspecコマンドはspec/parallel_spec_helper.rbが存在する場合、それを自動的に読み込みます。このファイルを使って挙動の設定をすることができます。例えばRailsを使っているとして、並列度を4にして、各プロセスごとに異なるDBを使う設定はこんな感じです。

```rb
RSpec::Parallel.configure do |config|
  config.concurrency = 4

  config.after_fork do |worker|
    # config/database.ymlのtestで指定したdb名の末尾にそれぞれ0~3がつく
    ActiveRecord::Base.configurations["test"]["database"] << worker.number.to_s
    ActiveRecord::Base.establish_connection(:test)
  end
end
```

このようにプロセスごとにDBを個別に用意するのはRailsだと多いので、専用のrakeタスクが用意されています。以下のコマンドを実行すると4つのDBが作られます。引数で並列度を指定していますが、省略した場合コア数になります。

```
rake "db:test:prepare_sequential[4]"
```

## 終わりに

まだ実プロジェクトで使えるような段階ではないので注意が必要です。アドベントカレンダーが空いていたので埋めてみました。開発の励みになるのでおとしだまがわりにGitHubスターをください :pray:
汎用リレーボードでＵＳＢ加湿器をＯＮ／ＯＦＦしてみる

#はじめに
本記事は、2016年の[大晦日ハッカソン](https://atnd.org/events/83845)/2017年の[正月ハッカソン](https://atnd.org/events/84508#)の作業記録です。~~進行に応じて、逐次編集していきます。~~作業終了しました。

共立プロダクトからお手軽な[汎用リレーボード](http://eleshop.jp/shop/g/g402514/)が出たので、これをつかってＵＳＢ加湿器をラズパイからON/OFFしてみようと思います。

#用意したもの
## 1. USB加湿器
ターゲットにしたものは、SANWA SUPPLYから発売されている[ペットボトルを使ったＵＳＢ加湿器](https://www.sanwa.co.jp/product/syohin.asp?code=USB-TOY92BK&cate=1)です。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/40bd225e-5b3f-6409-5e76-6e82d0be13ca.png)

これを選んだのは、給水がペットボトルなので本体が小型で持ち運びしやすいためです。出張で泊まるビジネスホテルだと、冬場に空気が乾燥してて朝にのどが痛くなることもよくあるので、活躍しないかなと。

まずは、消費電力を測ってみる。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/8fff94b6-7e84-8aaf-e106-e72d007c20c4.png)

300mA程度でした。

## 2. 汎用リレーボード

共立プロダクトの[汎用リレーボード](http://eleshop.jp/shop/g/g402514/)を使用します。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/a656333b-eec5-d221-9c2b-700fc8b89bd7.png)

電源電圧は5VなのでUSB機器の給電につかえます。リレーのON/OFFの動作ON信号電圧が2.4V以上ということで、3.3v系でも5v系でもつかえます。ラズベリーパイのGPIOは3.3vなので使えますね。

## 3. ACアダプター

USB加湿器の電源はラズペリーパイから取らずに直線コンセントからもらうことにします。

汎用リレーボードにはDCジャック（内径2.1mmのセンター＋）がついてますので、そこから電源をとりますので、ACアダプターを用意しました。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/ae094400-00a9-e0d4-7e5f-14e19e656ad3.png)

## 4. USBソケット

USB加湿器とリレーを接続するためのUSBソケットを用意します。USBソケットのピンは電源（１ピン）とグランド（４ピン）だけを使用します。
![image](https://qiita-image-store.s3.amazonaws.com/0/51272/8ffbfc04-d6fe-d518-a140-39a05d6d20f8.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/51272/fcfe9a88-fb7c-49e1-eafc-f73a89c2574b.png)

# 組み立て

DCジャックからの電源は、CN2から取り出せますので＋をリレー出力ターミナル（青い部分）のCOM端子（３つの真ん中）に繋げます。
![image](https://qiita-image-store.s3.amazonaws.com/0/51272/584c95d9-5681-78ff-303d-b643f0de76a2.png)
またCN2の－にはUSBソケットのグランド（黒ケーブル）をつなげます。USBソケットの電源側は、リレー出力ターミナルのNO端子に接続します。

次に、ラズベリーパイとの接続ですが、CN1の－をどれかのグランドに、CN1の真ん中の信号ピンをどれかのGPIOに（写真ではGPIO17）に接続します。

![image](https://qiita-image-store.s3.amazonaws.com/0/51272/f66e4f4e-655e-8872-46a7-f30e99ee7080.png)

その後、ACアダプターとUSB加湿器を接続し、ラズベリーパイから以下の操作をすればON/OFFできます。

【GPIO17につないだ場合の例】

```
$ echo 17 > /sys/class/gpio/export
$ echo out > /sys/class/gpio/gpio17/direction
$ echo 1 > /sys/class/gpio/gpio17/value
$ echo 0 > /sys/class/gpio/gpio17/value
```

リレーが動作すると「カチッ」と音がしますし、リレーがONになるとLEDが点灯します。
![image](https://qiita-image-store.s3.amazonaws.com/0/51272/45367376-0970-1391-585b-a3110f1aa121.png)

USBソケットの電源側を、リレー出力ターミナルのNC端子に接続するとリレーがONになると、USB側への通電をOFFにするというようなことができます。

# 痛恨のミス

今回使用したUSB加湿器ですが、一度電源を落とすと、次回に通電した場合でも背面のスイッチを押さないと電源がＯＮにならない仕様でした。。。

その為、リレーだけでＯＮにすることができません。ただし、電源のＯＦＦは可能です。

# 最後に

リレーを使ってラズベリーパイからUSB加湿器をOFFしてみました。
汎用リレーボードを使えば、リレー回路を自分で組み立てなくても簡単にリレーを使用することができます。

今回はUSB加湿器を使いましたが、USBから電源を取るものであれば（例えばこの[USB扇風機](http://www2.elecom.co.jp/products/FAN-U36BU.html)とか）ON/OFF可能です。

ただし、今回のUSB加湿器のように通電だけでONにならない機器もあるので注意が必要です。
Windows版パッケージ管理「Chocolatey」のインストールする方法

## 環境
OS: Windows10Pro
※ VM

## Chocolateyとは？
Chocolateyは、Windowsのパッケージ管理ツールです。
MacでいうところのHomebrewや、Linuxのyum, dnf, aptなどのようなコマンドラインから、
Windowsのアプリケーションをインストールすることができます。
eclipseやJDK, skype, chrome, firefox, gitなど多くのアプリケーションが用意されています。

## メリットとデメリット
### メリット
- 開発環境など作るのが簡単
- 更新が一括で行える
- 設定ファイルで管理できるため、チーム間で環境を共有でき、新しい人が増えてもスムーズに環境構築できる。

### デメリット
- 存在しないパッケージも多い（サクラエディタと秀丸、XAMPPがない( ；∀；)）

## インストール方法
インストールは簡単です。

1. 管理者権限でコマンドプロンプトを起動する。
[Windows] + xキーでメニューを表示し、コマンドプロンプト(管理者)で起動します。
（[Windows] + xキー、Aキー、Alt + Yですぐ起動できます）

2. コマンドを実行する

```batch:コマンドプロンプト(管理者権限)
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
```

※ Powershellの場合は、以下のコマンドを実行

```powershell:powershell(管理者権限)
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```

## パッケージの探し方
Chocolateyの公式サイトで検索できます。

Chocolatey
[https://chocolatey.org/packages](https://chocolatey.org/packages)

## パッケージのインストール方法
```batch:コマンドプロンプト(管理者権限)
chocolatey install パッケージ名
```



## 一括でインストールする方法
xml形式で用意します。
インストールしたいアプリ分のpackageタグを用意し、id属性にパッケージ名を記載します。

```xml:コマンドプロンプト(管理者権限)
<?xml version="1.0"?>
<packages>
    <package id="jdk8" />
    <package id="eclipse" />
</packages>
```

そして以下のコマンドを実行します。

```batch:コマンドプロンプト(管理者権限)
cinst packeages.config
```
js 完全平方であるか判定し、真ならば次の完全平方を返す

##お題
与えられた引数が完全平方であるか判定し、真ならば次の完全平方を返す。
偽ならば-1を返す。
与えられる値は正の数とする。

*完全平方
ある整数・整式が他の整数・整式の平方になっていること。
→ √をとると、整数になる数。1,4,9,16,25,36,49…


```js
function findNextSquare(sq) {
//write your code.
  return ;
}
```


##出力結果　例

```js
findNextSquare(121) // 144
findNextSquare(625) // 676
findNextSquare(114) // -1 
```

##使ったもの
[Math.sqrt()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt)
[Math.pow()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/pow)

##考え方
Math.sqrtで求めた平方根を変数に入れる。
変数の値が1で割りきれるか判定する。
0ならばMath.powで次の平方を求める。
割り切れない場合は-1を返しておわり。

##コード

```js
function findNextSquare(sq) {
  var root = Math.sqrt(sq);
  return root % 1 === 0 ? Math.pow(root + 1, 2) : -1;
}
```


###他にもコードが浮かんだ方、コメントお待ちしております。
Rubyで明けましておめでとうございます


```akeome.rb
"ibqqzofxzfbs".bytes{|akeome|sleep 0.5
printf"%c\n",(akeome-97-1/1)%26+97}
##=>何が出力されるかはお楽しみ
```

# 参考
2010年RWCの記念品に書かれていたコードの ~~パクリ~~オマージュです。
![IMG_1203.JPG](https://qiita-image-store.s3.amazonaws.com/0/62796/e0a0feec-0bc4-135d-c9c5-e9317d889c57.jpeg "IMG_1203.JPG")
git-flow initするまで

#初めに
git管理されているリポジトリに、
git-flowを導入した場合のメモ

#前提
1.すでに、git initしちゃってる。
2.masterブランチしかないような状態でした。

#環境

```
cat /etc/redhat-release
->Fedora release 24 (Twenty Four)
```

#git-flowインストール

```
su
cd /usr/local/src
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
```

#パスが通ってなかったから、通した。(ここでは全ユーザーに設定する。)

```
vi /etc/profile
#最終行に下記を追加
export PATH=$PATH:/usr/local/src
```
そして、再起動。

#インストール確認

```
git flow
```
なんかそれっぽいのが出てきたらOK

#git-flow導入(developブランチを作成し、init)

git initしちゃってるディレクトリに移動して。。

```
git branch develop
git flow init
```
※デフォルトでやるので、聞かれてもひたすら連打。

おわり！

#参考
git-flowインストール
http://qiita.com/drapon/items/a510613ecb5b8dfaea45
http://rfs.jp/server/git/03git/git-flow-install.html#Linuxgit-flow

パスを通す
http://d.hatena.ne.jp/Akineko/20090825/1251187210

既存リポジトリにgit-flowを導入
http://qiita.com/azusanakano/items/c5f021497d8f69c00e51
http://blog.inouetakuya.info/entry/20120605/1338900346
LINE Bot で今日泊まれるホテルを探す『今日のホテルBot』を作ってみた


[LINE BOT AWARDS](https://botawards.line.me/ja/) なる開発コンテストが開催されるということなので、[Mashup Awards](http://mashupaward.jp/) に応募した勢いで、こちらもやってみようとLINE Messaging API の勉強がてら開発してみました。

以前、出張先で急遽延泊することになった時に宿を探すのが面倒だったこともあり、場所を指定すれば今日泊まれるホテルを探して予約できるBot君を作りました。

# 使いみち
急な出張や予定変更となった時に慣れない場所でも、空いているホテルをさっと探して予約できちゃいます。
禁煙ルームや朝食付きなどでホテル／プランを絞り込むこともできます。
![今日泊まれるホテルが表示される](http://app-labo.net/blog_images/todayhotelbot07.png "今日泊まれるホテルが表示される")

# 使い方
ホテルを探したい地名をテキストメッセージか、位置情報を送ります
![止まりたい場所を指定する](http://app-labo.net/blog_images/todayhotelbot01.png "止まりたい場所を指定する")


今日泊まれるホテルがあれば、カルーセル型メッセージで横スクロール表示されます
![今日泊まれるホテルが表示される](http://app-labo.net/blog_images/todayhotelbot02.png "今日泊まれるホテルが表示される")

今日泊まれるホテルが5軒以上あれば、他のホテルを見るか、禁煙ルームなどの条件で絞り込むこともできます
![絞り込み検索](http://app-labo.net/blog_images/todayhotelbot03.png "絞り込み検索")

気に入ったホテルがあれば、そのホテルのプランだけをみることもできます
![特定のホテルで絞込](http://app-labo.net/blog_images/todayhotelbot05.png "特定のホテルで絞込")

”予約するボタン”を押せば楽天トラベルの予約ページが表示されるので、そのまま予約できちゃいます
![簡単に予約](http://app-labo.net/blog_images/todayhotelbot06.png "簡単に予約")

# 利用したAPI
* [楽天トラベル空室検索API](https://webservice.rakuten.co.jp/api/vacanthotelsearch/)
  - ホテルの空室検索
* [Yahoo!ジオコーダAPI](http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html)
  - 地名から位置情報を取得

# 環境
* AWS Lambda
* Amazon API Gateway
* node.js v4.3.2

# 利用したnode.js パッケージ
* [node-rakuten](https://github.com/tatsuyaoiw/node-rakuten/blob/master/README-ja.md)
  - 楽天APIを簡単に利用できるパッケージ。空室検索API だけでなく、ひととおりのAPIが使えるようです。

# Lambda へのアップロード
AWS Lambda へのデプロイはソースコードや利用するパッケージをZIPファイルに含めてアップロードする必要があります。
いちいちZIPファイルを作ってアップロードするのも面倒でしたので、こちらで紹介されているツールを利用させていただきました。
[AWS Lambdaの関数アップロードをお手軽に](http://takamints.hatenablog.jp/entry/2016/03/09/launcher-script-for-the-aws-lambda-function)

一度設定してしまえば、一コマンドでアップロードできるので、かなり楽に開発を進められました。

# 実装
[こちら](https://github.com/sumihiro3/TodayHotelLineBot)にソースコードを載せておきます。
node.js は使い始めたところですので、まずいコードなどありましたらコメントいただければありがたいです。
LINE BOT AWARDS にも応募しますが、ソースコードを載せておいて大丈夫かな？？

# 詰まったところ
LINE Messaging API のカルーセル型メッセージやボタンのタイトルなどには文字数制限があるのですが、これに気づかず何時間かハマってしまいました…

# 締め切りまでに改善したいところ
* LINE のメニューをまったく使っていないので、何かショートカットなど付けたいですね
   - 人数とかメニューから指定できるといいのかな？
* 絞り込み条件の追加、指定方法

# 最後に
使ってみたいと思った方は、下のQRコードから「友だち追加」して使ってみてください。
![「今日のホテルBot」のQRコード](http://app-labo.net/blog_images/todayhotelbot_qr.png "「今日のホテルBot")

「なんかバグってるよ」とか「こんな機能があればいいな」などありましたら、記事にコメントいただければ嬉しいです。

なお、大晦日に仕上げたので、[大晦日ハッカソン](https://atnd.org/events/83845) にも参加してみます :-)

# 蛇足
ちなみにQiita 初投稿でした ;-)

# 参考サイト
* [AWS Lambdaの関数アップロードをお手軽に](http://takamints.hatenablog.jp/entry/2016/03/09/launcher-script-for-the-aws-lambda-function)
* [AWS Lambda + API GatewayでLINE BOT APIを叩いてみた](http://qiita.com/teyosh/items/567ee416c94c2af2fe91)
* [AWS Lambdaを使ってサーバレスでクイズができるLINE Botをつくった](http://qiita.com/ykyk1218/items/232437bc92f13d02a8a2)