OmniAICreator/Qiita-1.07M huggingface dataset:
begin()の使い方

## 目的

begin()を使っていたら躓いたので、begin()の使い方を確かめてみる。

begin()は先頭要素を指すイテレータを取得する。
イテレータとはポインタのようなもの。

まず、1次元配列の場合

```c++:begin1.cpp
#include <cstdio>
#include <vector>

using namespace std;

int main() {
    vector <int> A{1, 2, 3};
    vector<int>::iterator itr;

    itr = B.begin();
    
    printf("Bの最初の値は : %d\n", *itr); //Bの最初の値を表示
}
```

```txt:出力結果
Bの最初の値は : 1
```

次に2次元配列の場合

```c++:begin2.cpp
#include <cstdio>
#include <vector>

using namespace std;

int main() {
    vector<vector <int> > B{{1, 2, 3},
                            {4, 5, 6}};
    vector<int>::iterator itr2;

    itr2 = B[0].begin();
    
    printf("B[0]の始め : %d\n", *itr2); //B[0]の始めを表示
}
```

```:出力結果
B[0]の始め : 1
```

ちなみに以下のようにするとSegmentation faultとなる。

```c++
    itr2 = B.begin(); 
    printf("Bの始め : %d\n", *itr2); //エラー
```

```c++
    itr2 = B.begin().begin();
    printf("B[0]の始め : %d\n", *itr2); //エラー
```
Highest output learning with mac pc hacks

# Alfred

- i never live without alfred on digital hacking life
- Use  clipboard extension its soooooooooooo important! many many cases it is useful and cover inputting.
- Snippet extension register is highly cost registration so very important keywords only i submit.

# Edit level of Content

- Edit level controlling. Re edit text or articles is soooo highly cost you. do not use backspace.
- like Live streaming out put
- Between flow or stock.

# Google Chrome

- use Vimium Shift + << >> tab swapping
- use Command + Y History it is hidden good feature of Chrome
- While slow service posting i close unused tab and copy url and register to clipboard and etc ... its "Super cleaning zen time"
- and etc etc etc...
---
[yumainaura output - Google Search](https://www.google.com/search?q=yumainaura+output&oq=yumainaura+output&aqs=chrome..69i57j69i64l2.6059j0j7&sourceid=chrome&ie=UTF-8)

https://github.com/YumaInaura/YumaInaura/issues/70








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Qiita 利用規約に同意するチェックボックスが毎回出るサービス

![image](https://user-images.githubusercontent.com/13635059/50553185-ec6aa680-0ce4-11e9-815b-89a31a860621.png)

# 何故毎回出るのか？

- 明示的な同意が毎回された方が良いというマナー、配慮
- 暗黙的に同意がおこなわれないようにするサービスとして優れた精神、だが利便性とは反する
- 投稿アクションは滅多におこなわれないことなので、毎回出しても問題ないが、大量投稿する爆速アウトプットな愚者にはつらい

# Twitterの共有も毎回チェックボックスを入れる方式？

- Gistも同じ
- こうなってくると「単にデフォルトを外しているだけでは？」という気持ちもしてくる
- Twitterに共有したい人は毎回共有したいんじゃないだろうか

# GoogleChrome拡張がほしい

- 勝手に利用規約に同意するやつ
- GoogleChrome 拡張の勉强でjs覚えてみたい フロントわからない大阪Webエンジニア
- エンジニアだし、なにか不便があるごとに勉強を始めたら良いのかも知れない

[yumainaura 爆速 - Google Search](https://www.google.com/search?q=yumainaura+%E7%88%86%E9%80%9F&oq=yumainaura+%E7%88%86%E9%80%9F&aqs=chrome..69i57j69i61j69i60l2j69i64l2.4929j0j7&sourceid=chrome&ie=UTF-8)

https://github.com/YumaInaura/YumaInaura/issues/69









<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
量は質に転化する

# プログラマの勉强は「量は質に転化する」を信望せよ

- とにかく誰に迷惑をかけても良いから量、量、量
- この法則を信じているかいないかでアウトプット学習の効果は何十倍も変わるかも知れない
- できるだけ迷惑がかからないような場所を目指すが、優先すべきは量の最大化

# 量を笑うものは量に泣く

- Qiitaの記事を5分で書けるようになった
- Qiitaに記事を1日100本書くトライアルに挑戦するようになった
- Qiitaの他の記事からたくさん学び始めると、世の中に恐るべき情報が溢れていることが実感できるようになった

# 量を確保するために必要なこと

- MacBookAir iPhone などハードウェア選定
- Alfred GoogleChrome拡張 キーボード設定などのソフトウェア選定、超大事
- ScrapBox GitHub Qiita はてなブログ Twitter などのアウトプットサービス選定

[量yumainaura - Google Search](https://www.google.com/search?q=%E9%87%8Fyumainaura&oq=%E9%87%8Fyumainaura&aqs=chrome..69i57.2174j0j7&sourceid=chrome&ie=UTF-8)

https://github.com/YumaInaura/YumaInaura/issues/67








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Qiitaで記事1日100本トライアル

# Qiitaで記事1日100本トライアルする迷惑ユーザーが心がけていること

# Mental Model

- 量は質に転化する法則を信じる
- いいねがつかないインターバルに挑戦する


# Moral

- タグ付けは適切にする、やりすぎたと思ったら反省して削るようにする
- まじで何の役にも立たない記事は書かないが、世界中の誰かが役に立つ記事は勝つ
- 少なくとも自分の脳をステップアップさせるために書けば、世界中の一人にだけは役立つ記事になる

# Behavior

- 弾丸装填！ とにかく何を学ぶにも Qiita new page を開く https://qiita.com/drafts/new
- Macのスクリーンショット、AlfredのSnippetなどを活用する、その他色々なHackをして、爆速であることをなによりも優先する
- 下へ下へと流れていくようにFlowに記事を書いていく、極力振り返らない、StockとFlowの間ぐらいを目指す

https://github.com/YumaInaura/YumaInaura/issues/67








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
pip実行時に「failed building wheel for tornado(bdist_wheel)」などのエラーが出たときの対処法

# はじめに
環境
・Ubuntu18.04 LTS

起きたこと
・venvで作成した仮想環境にて、pip3 install ... でインストールを実行
・インストール自体は成功したが、途中で「failed building wheel for tornado(bdist_wheel)」などが見られた

# 対処法
下記のコマンドにて、wheelとtornadoをインストールしたら、ひとまず上記の表示はなくなったっぽい。

```
pip3 install wheel
pip3 install tornado
```

備忘録程度ですが、以上です。
Deno: インストール〜Webサーバ起動

~~Denoはまだ開発中で1.0になっていません。そのため、この記事の内容は将来的に変更されるかもしれませんのでご注意ください。~~
2020-05-14 
Deno 1.0 がリリースされました :tada: 
https://deno.land/v1

この記事はmacOS Catalina で試した内容です。

# Denoとは

Node.jsのoriginal authorであるRyan Dahl氏が開発しているTypeScriptをV8で動かすラインタイム実行環境です。 
DenoはNode.jsの反省点を活かして開発しています。
Ryan Dahl氏が JSConf EU 2018 でそのことについて話している動画がYouTubeにあるので興味がある方はぜひ御覧ください。  

[Node.jsに関する10の反省点 Ryan Dahl - JSConf EU 2018](https://youtu.be/M3BM9TB-8yA)

また日本語で書かれた記事は以下の記事が詳しいです。  

[Node.js における設計ミス By Ryan Dahl - from scratch](https://yosuke-furukawa.hatenablog.com/entry/2018/06/07/080335)

# インストール
インストール方法は[公式の The Deno Manual](https://deno.land/manual/getting_started/installation) にも記載されています。

shellでは以下のコマンドを実行

```
curl -fsSL https://deno.land/x/install/install.sh | sh
```

power shellでは

```
iwr https://deno.land/x/install/install.ps1 -useb | iex
```

macOSの方は Homebrew を使ってインストールすることもできます。

```
brew install deno
```


この時点で`deno`コマンドが使えるようになっているので、試しに https://deno.land にあるサンプルを実行してみます。

```
$ deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
```

# Hello, World

試しにHello, Worldを表示するプログラムをTypeScriptで書いて実行してみます。

```ts:hello.ts
console.log('Hello, World');
```

```
$ deno run hello.ts
Hello, World
```

# Webサーバを起動する
localhost:8080 で起動する http サーバーを作ってみます。

```typescript:hello_http.ts
import { serve } from "https://deno.land/std@0.50.0/http/server.ts";
const s = serve({ port: 8080 });
console.log("http://localhost:8080/");
for await (const req of s) {
  req.respond({ body: "<h1>Hello World</h1>\n" });
}
```

[`http`というdeno標準ライブラリ](https://github.com/denoland/deno/tree/master/std/http)を使います。
Deno は [ Top-level await](https://github.com/tc39/proposal-top-level-await) をサポートしているので上記のように for-await-of 構文を使ってリクエストを捌くことができます。serve　関数は async iterable なクラス Server のインスタンスを返却しています。https://github.com/denoland/deno/blob/55d2c6bd103879263c115fa5697f3cf3101158f4/std/http/server.ts#L262
https://github.com/denoland/deno/blob/55d2c6bd103879263c115fa5697f3cf3101158f4/std/http/server.ts#L125

```
$ deno run --allow-net hello_http.ts
http://localhost:8080/
```

実行時に`--allow-net`というオプション引数を付与しています。
denoはデフォルトでインターネット上からアクセスできません。ユーザーが許可しない限り、ネットワークにアクセスできないためセキュアです。


<img width="410" alt="スクリーンショット 2018-12-31 09.41.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/93166/efa848f0-b48b-ccc4-0709-640d4a699c63.png">

ブラウザからlocalhost:8080にアクセスしてHello, Woldが表示されればWebサーバは起動しています。

# あとがき
Deno は Node.js の反省点を踏まえて開発されており、かつとてもシンプルでセキュアなTypeScript 実行環境です。
1.0 が出るまでは Deno の変更点も多かったですが、1.0 がリリースされて今後もメジャーバージョンが上がるまで破壊的変更は起きないと思います。
しかし、今後も開発は盛んに行われていくと思いますし、利用頻度も増えコミュニティやエコシステムも成熟していくと考えています。これからの成長が楽しみです。

最後までお読みいただきありがとうございます。質問や不備があればTwitter([@shisama_](https://twitter.com/shisama_))またはコメント欄までお願いいたします。

この記事は 2020-05-14 に大幅更新しています。
お前らの年賀状は古い

## はじめに
俺は古いと思っているが、別にディスっているわけではない。
リスペクトはしているがいつまでこの風習が続くのか個人的に気になったのだ。

## なぜ古いのか
### 紙を使っている
平成最後の年賀状に紙を使っているだと・・・？

まじかよ・・・。

よく考えてほしい。

**わざわざ郵便局まで行って、年賀状を買って、年賀状のデザインを考えて、宛名を調べて、プリンターのインクを買って、印刷して、この人喪中だったからいらないんだったとか、ポストに出して、・・・ってどんだけ手順を踏むだよ！**

こんだけインターネットが発達してるご時世になんでわざわざ紙！

エンジニアは効率化する生き物だろ？

**「紙の年賀状を出すやつは2流エンジニア」ってマックのJKが言ってた。**

もっと効率化できる！

## お年玉が法定通貨

おいおいいつまで、法定通貨(フィアット)を信じてるんだ？

来年も日本円がその価値だと決めつけていいのか？
日本お先真っ暗なのでは？？？

やっぱりこれからの時代はビットコインでしょ！(適当)

日本が終わったら価値のなくなる紙切れより、日本が終わっても価値のある暗号資産の方がよっぽど安全だよ！(雑)

## お年玉は書いた人が欲しい
面倒な手順踏んでるのに、お年玉が貰えるのはなぜか他人・・・。

相手が確実に書いてくれる相手ならいいけど、書いてくれない相手に送るインセンティブがなさすぎる。

## 郵便局員を休ませてあげて
紙のせいで輸送コストがめっちゃかかるんだよ。

年末年始ぐらい郵便局員を休ませてあげてようぜ？

**お前ら、「ブラック、ブラック」って口を揃えて言う割に、人には働かせるよな。**

みんな休もうぜ！

---

年賀状が古い理由はだいたいわかっただろうか。

これを打破するサービスを作ったのでみんなも使ってほしい。

## 年賀状2.0 『お年賀Cash』
- 1分で年賀状が出来たらな～
- 郵「正月休みたいよ～」
- 日本円には不安が

そんなみんなの気持ちをいっぺんに解決した。

https://onenga.cash

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">こんな感じで本当にすぐ出来るから皆も使ってみてね！ <a href="https://t.co/awmPeGWeUL">pic.twitter.com/awmPeGWeUL</a></p>&mdash; あおいちゃん⛓️ハッカソンマスター (@_serinuntius) <a href="https://twitter.com/_serinuntius/status/1079532637872521216?ref_src=twsrc%5Etfw">2018年12月31日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## サービス概要
Twitterでログインして、サクッと文章を入れるだけで年賀状が作れます。

## ビットコインの抽選に応募する条件

1. ツイートにハッシュタグ「#お年賀Cash」と「生成されるURL」を入れる。

それだけです。

1月3日に抽選して

1等: 1ビットコイン(1名様)
2等: 0.1ビットコイン(3名様)
3等: 0.01ビットコイン(10名様)

に当選するようにします。

ちなみにここでいうビットコインはBCHABCです。

## 使用技術
- Firebase
    - Auth
    - Functions(node8)
    - Firestore
    - Storage
    - Hosting
- Google Domains
- Vue
    - router
- Bulma(Bootstrapよりイケてるやつ)

## 一番たいへんだったところ
このサービスは年賀状をOGPの画像に設定してシェアさせるのですが、そのOGPは実はフロント側でSVGで生成しています。
なぜならユーザにリアルタイムでプレビューを見てほしかったからです。

それを実現するために少々無茶をしました。

1. IllustratorでSVGのデザインをする
2. Vue.jsでいい感じにする
3. Canvasに書き出してPNGに変換する
4. それをCloud Storageにアップロードする

![Web 1920 – 2.png](https://qiita-image-store.s3.amazonaws.com/0/82779/9c88bb9d-77ac-c4e7-e8c2-ab93283a90ae.png)

## まとめ
個人開発はモチベーションの維持や体調管理が大事だと身にしみて思った。
途中躓いて放心状態だったり、風邪を引いたりして作業が進まない日があったりもした。

とりあえずみんな使ってみて欲しい。

https://onenga.cash
今日から始める！ユースケース入門 どんなもの？どうやって見つけるの？

## はじめに
はじめてユースケースを書こう！と思った時、まず最初にユースケースそのものを、どう発見していけばよいのか、と悩みました。
そんなときに、[古川 正寿(2010)「独習 オブジェクト指向開発 第2版」](https://www.amazon.co.jp/%E7%8B%AC%E7%BF%92-%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E9%96%8B%E7%99%BA-%E7%AC%AC2%E7%89%88-%E5%8F%A4%E5%B7%9D-%E6%AD%A3%E5%AF%BF/dp/4798119628)という素敵な本に出会い、その本の中で、ユースケースの発見について紹介されていた以下の考え方

「的確にユースケースを発見するために重要になるのが、システム化する業務やサービスの区切り（独立性）を発見していくことです。」(p,176)
「最初にアクタを考えて、アクタが利用する機能要素を考えていって、ユースケースを発見していくことをお勧めします。」(p,178)

をもとに、自分なりに解釈し、ユースケースを考えてみた記事です。
自分と同じように、はじめてユースケースを考える方の参考に少しでもなれば嬉しいなと思います。
またもし、**自分はこんなふうに考えているよ！ここはもっとこうでは？などあれば教えてください！**

目指せユースケースマスター！オブジェクト指向マスター！:v::sparkles:



## ユースケースとは？
ユースケースは、システムを使う側から見た「提供されるシステムサービス」です。つまり、「このシステムはこんなことができますよ。」というものを表現するものです。
## どうやってユースケースを見つけるの？
いざユースケースを考えてみようとなっても最初はなかなか難しいですよね。
実際に、はじめにで紹介した考え方をもとに、ユースケースを考えてみましょう！

### 業務やサービスの区切り（独立性）を発見していく
システムが導入された後の業務や、現状の業務などを整理してまとめることで、業務(もしくはサービスなど)の区切り（まとまり）を見つけていきます。その区切られた作業から、システムを利用する部分をユースケースとして導き出します。

実際に、注文端末から料理を注文をできるシステムを例に、表で考えてみます。
#### システムが導入された場合の業務の流れを表にまとめてみる

システムが導入された後の業務の流れ

NO|概要|ユースケース（システムを利用するか？）
|:---|:---|:---:|
1|注文を登録する|○
2|注文された料理を表示する|○
3|注文された料理を調理する|✕
4|注文された料理を調理済に変更する|○
5|調理済の注文された料理を表示する|○
6|調理済の注文された料理を客に渡す|✕
7|注文された料理を提供済に変更する|○


#### ユースケースが正しいものなのか確認してみる
アクタとユースケースを組み合わせて、ユースケースが自然な文章になるかどうか検証してみます。
今回は、以下の３種類のアクタを想定して、考えています。

* 客
* キッチン
* ホール

ユースケースとアクターを組み合わせた文章

ユースケース|確認文章
---|---
注文を登録する|客は、注文を登録する。
注文された料理を表示する|キッチンは、注文された料理を表示する。
注文された料理を調理済に変更する|キッチンは、注文された料理を調理済に変更する。
調理済の注文された料理を表示する|ホールは、調理済の注文された料理を表示する。
注文された料理を提供済に変更する|ホールは、注文された料理を提供済に変更する。

業務のまとまりを考えて表にしてみると、こんなふうにいくつかのユースケースらしきものが浮かび上がってきましたよね。
これらのユースケースは、まだまだ正確かつ十分とは言えませんが、ユースケースを考え始めるときに、非常に有用な方法になるのではないかと思います。


### アクタが利用する機能を考える
最初にも述べたように、ユースケースは、システムを使う側（アクタ）から見た「提供されるシステムサービス」です。なので、まずシステムを利用するアクタを考え、「そのアクタが利用する機能はなにかな？」と考えてみます。
先程の例でいうと、
(まずアクタには「客」「キッチン」「ホール」が居るよなあ)○。。:thinking:
（「客」はシステムで何したいかな…注文するよなあ）○。。:thinking:
のように考えていくことになるのではないかと思います。

## ICONIXプロセスの紹介
ICONIXプロセスという開発方法においては、まず最初にドメインモデルを作成するところからはじめ、ドメインモデルの言葉でシステムの使い方を考えていきます。なので、ユースケースを書く前に、まず最初のドメインモデルを考える必要があります。興味のある方はぜひ、[ダグ・ローゼンバーグ,マット・ステファン(2007)「ユースケース駆動開発実践ガイド」](https://www.amazon.co.jp/%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E3%83%80%E3%82%B0%E3%83%BB%E3%83%AD%E3%83%BC%E3%82%BC%E3%83%B3%E3%83%90%E3%83%BC%E3%82%B0-ebook/dp/B01B5MX2TC)を読んでみてください:writing_hand_tone1::sparkles:

## さいごに
なんとなく、ユースケースを考えられる気がしてきましたよね？きっとしてきたはず！
実はこの後、システムさんとアクタさんがどうやってやりとりをしていくかということを「ユースケース記述」というもので詳しく書いていくのですが、そちらについても後々書ければなと思っています。



**いきなり精度の高いユースケースを書くことは困難なので、間違いを恐れず、まずは書いてみて、さまざまな手法で検討を繰り返しながら、ユースケースを洗練させていこう！レッツユースケース！**
SoundCloud SDK,APIのclient_idを取得する方法

## はじめに

SoundCloudにはSoundCloudの音楽やプレイリストなどを操作するためのSDKとAPIが用意されていますが、
それらを使うにはclient idが必要です。
それをどうやって取得するんだという話。

## 結論

**現在はアプリ開発用のclient idの発行はできない。**

SDKやAPIを利用するためのclient_idを取得するためには、アプリケーション登録を行う必要がありますが、
現在は、そのアプリケーション登録フォームが閉まっているため登録できません。
> http://soundcloud.com/you/apps/new

APIリクエスト数が多すぎるために締め切っているようです。
Stackoverflowにある書き込みを見る感じでは２０１６年１２月には閉まっていたようです。
（それから今までずっと閉まり続けているかは不明ですが）

他に方法があれば誰か教えてください…

## 感想
2017年には、Soundcloudは経営難で従業員の４０％を一時解雇したなんていう話もありましたので、
経営状況が良くなるまでSoundCloudのアプリケーション登録ができないかもしれません。

チクショー！:joy:


## 参考

- [StackOverFlow:Getting a SoundCloud API client ID](https://stackoverflow.com/questions/40992480/getting-a-soundcloud-api-client-id)
- [TechRunch:SoundCloudが深刻な危機に――ユーザー生成音楽のストリーミング事業に残された時間は50日](https://jp.techcrunch.com/2017/07/13/20170712soundshroud/)
- [SoundCloud Community:Register new app](https://community.soundcloud.com/trust-safety-229932/register-new-app-7367450)
ひとまず動くwebサイトを作りたい

# webサイト作ってみたい！
### 準備段階の設計図
**[実際のサイト](https://nail.gogomethod.be/policy.html)**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/198985/ae7e1df9-7826-70a1-d3c3-de994e970994.png)

ハッカソンなどに参加していたらなんか作れそうと思ったのが始まりで、
サービスを取り巻くもの全般を一通り触れられたらいいなぁって思っています
今の所全て`AWS`で完結しています

# 作っているサイト
### **[私もネイル](https://nail.gogomethod.be/policy.html)**
ネイルモデルを探すネイリストと無料でネイルを受けたい人をマッチングするサービスです

# 道のり：準備編
まずコードをpushしたら本番反映される環境を作ります
開発環境がないよ問題は無視しました！！


### 開発の流れ
1. `CodeCommit`でコードを入れるリポジトリを準備
2. 公開用の`S3`を準備
3. `CodeBuild`を使って自動的に`html`を`S3`に配置するジョブを作る
4. `CodePipeline`で`CodeCommit`と`CodeBuild`をつなぐ

# 細かい流れ
## CodeCommitの準備
そもそもなぜ`CodeCommit`を使ったかですが、
`CodeCommit`であれば一定以下であれば無料でprivteリポジトリを使用できるからです
また後述しますがCI環境として`CodeCommit`などがあるので、
別途Jenkins Serverなどを立てなくてもCI環境が作れます

`CodeCommit`は以下のページを参考に、
https接続用ユーザーを作ってセットアップしました
[Git 認証情報を使用する HTTPS ユーザー用のセットアップ](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-gc.html)

こんな感じでリポジトリが管理できます
<img width="1440" alt="スクリーンショット 2018-12-31 2.22.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/4a14f3ee-64c3-f19f-2311-e89915a494ce.png">

## 公開用S3の準備
※セキュリティ観点は０のため注意してください
ひとまず好きな名前でバケットを作ります
そしてコンソールから`アクセス権限>バケットポリシー`と進み以下の設定をします。

```json:bucket_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadForGetBucketObjects",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::{{BUCKET_NAME}}/*"
        }
    ]
}
```
すると以下の状態になり全世界からバケットの中身が参照できる状態になります。
（AWSさんから強くお勧めされていない方法のため、
後述予定の`CloudFront`を使った接続方法に早めに切り替えた方がいいです）

<img width="1440" alt="スクリーンショット 2018-12-31 2.27.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/84a8761f-7eaf-049b-c6d2-6d65303ed9e2.png">

## CodeBuildの設定
ここではpush時に動かすジョブを設定していきます
（なんとなく`CodeBuild`を使いましたが`CodeDeploy`を使うべきかもです...）
web側でコマンドを登録する方法とrepository側でコマンドを持つ方法があったのですが、
`Jenkinsfile`に慣れていたこともあって後者を選びました
以下のファイルを先ほど作ったリポジトリに入れました

```yaml:buildspec.yml
version: 0.2
env:
  variables:
    AWS_REGION: "ap-northeast-1"
phases:
  build:
    commands:
    - aws s3 sync ./frontend/ s3://{{BUCKET_NAME}}/ --acl public-read
```

内容は単純で`./frontend/*`に位置するファイルを全てS3直下に移動させます
`./frontend/index.html`などを配置するイメージで作りました

この後AWSコンソールからビルドプロジェクトを作成すれば完成です

## CodePipelineの設定
これでpush＋ビルド開始ボタンでデプロイできる状態になりました
最後にpush発火で動くようにします
やり方としてはAWSコンソールからパイプラインの作成を押して、
SourceとBuildをこれまで作ったものに指定するだけです
そうすると以下の感じになります

<img width="1440" alt="スクリーンショット 2018-12-31 2.47.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/5a5f9bdc-7cb5-dca8-c651-b718b26e8369.png">

これでpushだけでデプロイができるとてもお手軽で危険な環境ができました！
以下のようなURLですぐにデプロイしたページが見られます。
`https://s3-ap-northeast-1.amazonaws.com/{{BUCKET_NAME}}/index.html`

# 準備に関して
セキュリティ的に完全にアウトな環境がですが、
ひとまずネットから自分のページが見れるので結構テンションは上がります
次は`CloudFlont`や`Cognito`周りをまとめようと思います
[ひとまず動くwebサイトを作りたい CloudFront](https://qiita.com/ys_tydy/items/ed054118a10f5a7f61b8)

手探りでやっている状態なのでどしどしご指摘をいただけると嬉しいです！
また思い出しながら書いていったので間違った内容があればすみません。。
jsdoでgame

#概要

ゲームは、嫌いだけど、テンプレート作ってみる。
国産のenchantでやる。

#実現した機能

| 要件  | 実現  |
|:--|:--|
|オープニング画面|○|
|ゲームオーバー画面|○|
|線を引く|○|
|プリロード|○|
|パッド入力|○|
|もう一度|○|
|FPS設定|○|
|残り時間|○|
|スコア表示|○|
| ツイート機能|×|
| データ保存機能|×|
| ランキング機能|×|
| サウンドループ|×|
| プレイ履歴保存機能|×|
| セーブ・ロード機能|×|
| コメント機能|×|

#成果物

http://jsdo.it/ohisama1/S9R7

以上。
中規模向けのMVCモデルを考える

# 前置き
もう少しで開発が一区切りつきそうなので、
苦戦したMVCモデルの扱い方についてまとめます。

担当はIoT機器操作用のwebアプリを作ること。
私がチームに加わる前に、
ある程度アプリは作られていてAngularJSが使われていました。

全担当から業務を引き継いだ時は、大体基本的なモデルのような感じでした。
![MVCモデル.jpg](https://qiita-image-store.s3.amazonaws.com/0/286051/29ad4a81-2d31-13e3-7c73-238c6d4dbf36.jpeg)

ここに、ガンガン機能を追加して行きたいという事だったので
MVCモデルの分割をしていきたいな、と思ったけど
MVCの知識がほぼ0でなかなか上手く行かず。。

本記事では、**試みとつまづいた点、最終的に落ち着いたモデルを記載します。**
お急ぎであれば、[まとめ](#まとめ)を見てください。

# 試み1 - コントローラーの分割
![MVCモデル-経過1.jpg](https://qiita-image-store.s3.amazonaws.com/0/286051/e29e3401-b071-49c2-67d4-63a6f22037ed.jpeg)
## やった事
MVCの分割をググったら、まず１番にコントローラーの分割が出てきたので
**ビューの機能に合わせて愚直にコントローラーを分割した。**

## 困った事
コントローラーだけ分割すると、
機能により、使うモデル使わないモデルが出来て
各コントローラーで不要なモデルを読み込む事になった。
いわゆる**モデルの肥大化**をした。

# 試み2 - モデルの分割
![MVCモデル-経過2.jpg](https://qiita-image-store.s3.amazonaws.com/0/286051/68640d70-571c-9742-5240-4e17d2e313b2.jpeg)

## やった事
モデルが大きくなったので、**機能に合わせてモデルも分割した。**
+各機能で使いたい**共通のモデル**枠も用意した。(MMVCを履き違えた。)

## 困った事
今度は**共通モデルを触るための処理を、各コントローラーに書く**事になってしまった。
変更があった時に各コントローラーに手を入れないといけなくなった。。

# 試み3 - サービスの作成
![MVCモデル-経過3.jpg](https://qiita-image-store.s3.amazonaws.com/0/286051/225365f5-bcd6-b32b-e61e-49998e0932da.jpeg)

## やった事
**共通のモデルを触るようのコントローラーを作成した。**
各機能のコントローラーから共通モデルに変更を加える時は、
共通コントローラーを使うようにした。
**共通モデルに変更があった時は、ブロキャスして各機能のモデルに反映するpush型にした。**
ビューからモデルを見る時は、共通のモデルを直接参照せずに済むようにした。このpush型がスッキリするポイントになったと思う。気に入ってる。

見出しに「サービスの作成」と書いたけど、
共通モデルと共通コントローラーをまとめて、サービスとして機能を提供した。

# まとめ
↓最終的に落ち着いたモデル
![MVCモデル-完成.jpg](https://qiita-image-store.s3.amazonaws.com/0/286051/9ab74c69-6cee-c885-f746-b5e91bdb3339.jpeg)

やって効果的だったこと

* 機能に合わせて、モデル/ビュー/コントローラー全部分割。
* 共通で使うモデル/コントローラーは、サービスorファクトリーにする。
* 共通モデルは、ビューから直で参照しない。各機能のモデルに落とす。  
(ブロキャスpush型オススメ。)
Qiitaでプロフィール画像設定が見つからずストレス爆発！ 設定項目の UI UX

# どこ？


![image](https://user-images.githubusercontent.com/13635059/50552673-8fb6be00-0cdb-11e9-9cb3-6d09b286efb3.png)

# どこ？

![image](https://user-images.githubusercontent.com/13635059/50552678-a2c98e00-0cdb-11e9-8a78-109fa879f122.png)

# ここか！！！

- 「アカウント」項目の中に入っていた
- ブラウザで「画像」と検索しても発見できない‥とは‥
- こうやって記事に書くとさらっとして見えてしまうが、実際にはユーザーはストレス爆発しそうになっている

![image](https://user-images.githubusercontent.com/13635059/50552686-bd036c00-0cdb-11e9-9580-4917760f7c18.png)

# 設定項目はとにかく複雑になりがち

- 大きなアクションは大きく見つけられるようにしよう
- 小さな関心事はネストを深くしたりして、逆に見つけにくい場所にあっても良い
- 回数的にはあまり使われないけれど重要、っていう項目がある、プロフィール画像もその例

# 「画像設定」はユーザーの大いなる関心事

- 名前とプロフィールは自分アバターを表現する2ファクター
- この二項目の設定箇所は近くにあってほしい
- 自分のプロフィール画像をクリックするとアップロードできる、設定に飛べるのは最近の基本的UI


https://github.com/YumaInaura/YumaInaura/issues/66

# 無事changed

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/a50a5bac-0876-89da-594f-296c0fb8f50f.png)








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
2018年 冬 Mac の タッチパッドが押しにくい‥

アウトプット作業に非常に差し支えがある
どんなに優れたUI/UXのサービスでも、僕らのハードウェア側が故障していたら問題
ソフトウェア改善を図るとともに、ハードウェアの理解も深める必要がある

# ハードウェア故障？

それって温度のせいでは
以前もすごく寒い日に、ぜんぜん効かなくなったことが
よく見ると裏側で多少バッテリーが膨張しているけど、温度のほうが関係してそう

# スタバとかに行ってあたたまると

だんだん押しやすくなってくる
俺はにわとりの親か？孵化させる必要があるみたいだ
Macのタッチパッドを少しずつ温めながら迎える朝

# 2018年 MacBook Air買い替えを検討？

まだ頑張っても良いかも
春を待つか、ホッカイロを買ってしのいでも良いかも
ちなみに僕は買いました

https://github.com/YumaInaura/YumaInaura/issues/64








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
mashup awardに、応募してみた。その2

#概要

mashup awardに応募してみた。
ma10だけど。

#写真

![](https://ma10.s3.amazonaws.com/uploads/works/4259/2.jpg)
![](https://ma10.s3.amazonaws.com/uploads/works/4259/1.jpg)

#動画

https://www.youtube.com/watch?v=1HTn73HCVV8

#ma10のリンク

http://ma10.mashupaward.jp/works/4259

#応募内容

自動車のOBD2ライブデータ表示
エンジンは、arduino。
ノートpcの表示には、オープンソースの汎用ECU「megasquirt」用ソフト「tunerstudio」を使用。
データ取得にelm327を使用。

#もう少し詳しく

https://qiita.com/ohisama@github/items/f4dc832ab657ee036027

以上。
React Portalはセット先の中身が残る

ReactのPortalを便利に使っていたのですが、意外な動作をする場面がありました。

## Portalとは

詳しくは[別項に譲ります](https://qiita.com/jkr_2255/items/96d3396420765c595f04)が、Reactのコンポーネントの一部を別なDOM位置にセットできる機能です。

## `render`したときの挙動の違い

ふつうに`ReactDOM.render()`でコンポーネントをセットすると、もともとセット先のDOM要素にあった中身は**削除されます**。

一方で、`ReactDOM.createPortal()`としても、ポータルをセットする先のDOMにあった中身は**そのまま残ります**。この違いには要注意です。

<p data-height="265" data-theme-id="dark" data-slug-hash="jXGQNP" data-default-tab="js,result" data-user="jkr2255" data-pen-title="React Portal test" class="codepen">See the Pen <a href="https://codepen.io/jkr2255/pen/jXGQNP/">React Portal test</a> by Jkr2255 (<a href="https://codepen.io/jkr2255">@jkr2255</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

## どうすればいいか

「中身をクリアしたい」という条件でPortalを使いたい場合、**最初の1回だけ**クリアする必要があります。「コンストラクタでやればいい」と思われるかもしれませんが、React 17で計画されている非同期レンダリングでは、**コンストラクタすら何度も実行されうる**ので、不適当となります。

ということで、クラスコンポーネントではポータルを生成していなければ中身をクリアした上でポータルを作る、関数コンポーネントでは[WeakMapで管理する](https://qiita.com/jkr_2255/items/5306e7b7b264792b9b0d)などの手段が必要かと思います。

## 外部リンク

* [What should portals do when container has a child managed by React? facebook/react#10713](https://github.com/facebook/react/issues/10713)
* [Add support for hydrating portals facebook/react#13097](https://github.com/facebook/react/issues/13097)
Spring Boot + MavenでSpringのバージョンを個別に設定する方法

#はじめに
Spring Bootは各種モジュールの依存関係やコンフィグレーションを設定した状態で配布されており、利用者はすぐに利用可能となる。
とはいえ、パッチ適用等個別にモジュールのバージョンを上げたいケースもある。
ここでは、Springをバージョンアップを例にとり、個別にモジュールのバージョンを上げることを記述する。

#設定方法
具体的な設定方法を確認した後、設定値をどのように確認するのかを記述する。
## 設定方法
プロジェクトのpom.xmlのpropertiesでバージョンを指定する。
下記の例では5.1.2.RELEASEに指定したい場合

``` xml
<properties>
	<spring.version>5.1.2.RELEASE</spring.version>
</properties>
```
#spring.versionの確認方法
Springのバージョンを指定する値がspring.versionであることを確認するためには、Spring Bootの依存関係ファイルを確認すればよい。
確認するためにはMavenのリポジトリの次のパスに依存関係が書かれたファイルがある。中身を見るとspring.versionを指定すると、spring-framework.versionの指定が同時に行われ、spring-framework.versionはspring-coreとspring-framework-bomの設定をしていることがわかる。
さらにspring-framework-bomは各種Spring関連モジュールの設定をしていることがわかる。

``` 
.m2\repository\org\springframework\boot\spring-boot-dependencies\{Spring Bootのバージョン}\spring-boot-dependencies-{Spring Bootのバージョン}.pom
```
上記ファイルの抜粋

``` xml
        <spring.version>5.1.2.RELEASE</spring.version>
        <spring-framework.version>${spring.version}</spring-framework.version>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring-framework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>${spring-framework.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
```

##5.1.2.RELEASEの確認方法
spring.versionにどの値が入るのかについてはMavenRepositoryを確認すればよい。先ほどspring.versionとspring-coreは同じバージョンが入ることが確認できたので、次のサイトからバージョンを確認する。

https://mvnrepository.com/artifact/org.springframework/spring-core

#終わりに
Springバージョンのバージョン指定を例にとったが、同様の方法で個別のモジュールを設定することが可能である。
ただし、利用者が勝手にバージョンを変更しているのでモジュールの参照が多い場合、他モジュールで参照しているものとバージョン整合が取れなくなる可能性があったり動作確認は必要となるので、注意が必要である。
Node.js v11.6.0リリースノート

https://nodejs.org/en/blog/release/v11.6.0/


## cli
- add --max-http-header-size flag
    - コマンドラインでhttpヘッダの最大値を指定できるようになった(デフォルトは8KB)


## crypto
- always accept certificates as public keys
    - 公開鍵証明書が常に利用可能になった
- add key object API
    - KeyObjectクラスが追加された
        - createSecretKey()、createPrivateKey()、createPublicKey()で生成可能
- update root certificates
    - ルート証明書更新、ルート証明書の更新手順のドキュメント追加

## deps
- upgrade to libuv 1.24.1
    - libuvを1.24.0から1.24.1に更新
- upgrade npm to 6.5.0
    - npmを6.4.1から6.5.0に更新

## http
- add maxHeaderSize property
    - httpヘッダの最大値に関するプロパティを追加
Arduinoでクルマのエンジンが動く？　オープンソースECU Speeduino (1)概要

# Speeduinoとは
Arduinoを使い、ローコストなエンジンＥＣＵ(電子制御ユニット）を作るプロジェクトです。:sunglasses:
https://speeduino.com/wiki/index.php/Speeduino
## ハードウエア
### Arduino Mega
- 回転数、空燃比、温度などを計測するセンサと、燃料の噴射量や点火タイミングを制御するため、多数の入出力信号が必要となります。
- Speeduinoでは、I/Oポート数の多いマイコンボードArduino Mega 2560を使用しています。
純正のArduino Megaの他、互換ボードもあれば、Amazonで1500円前後で入手できます。:smile:

### I/Oボード
- [Speeduinoのオンラインショップ](https://speeduino.com/shop/index.php)で、プリント基板と部品実装済みのボードが販売されています。

## ソフトウエア

### ソースコード
- C(一部C++)で記述されています。
- 実際の自動車のECUに比べれば、少ないソースコード量ですが、高速な信号処理とエンジンの様々なバリエーションに対応するため、かなり技巧的につくられています。:open_mouth:
- Githubで公開されています。
https://github.com/noisymime/speeduino

### 適合ツール(チューニングツール、セッティングツール）[TunerStudio](http://tunerstudio.com/index.php/tuner-studio/)
- Speeduinoでは、燃料噴射量や点火タイミングなど、きめ細かなチューニングができます。
しかしながら、パラメータの調整に、ソースコードの修正とマイコンに書き込む作業を繰り返していると、とても時間がかかってしまいます。:pensive:
- Speeduinoでは、EFI社のTuner studioという適合ツールで、エンジンの状態を計測しながら、パラメータのチューニングが行えるよう作られています。
- TunerStudioは、基本機能は無料:smiley:でつかえますが、有償版は59.95$となっています。
http://www.tunerstudio.com/index.php/tuner-studio
- アフターマケット向けECU、[MegaSquirt](http://megasquirt.info/)のセッティングツールとしても使われているツールのようです。

適合についての詳しい内容は、下記サイトが参考になります。:smiley:
いまさら聞けない 適合プロセス入門 
http://monoist.atmarkit.co.jp/mn/articles/1212/10/news005.html

# 最後に
とはいえ、いきなりエンジンとArduinoを接続して動かすのは、少しハードルが高いかもしれません。:pensive:
[次回](https://qiita.com/covao/items/dd8a4640cb13edfbfa33)は、Arduino MegaとTuner studioを使ってSpeeduinoを動作させてみるところについて触れたいと思います。
Bootstrapのグリットシステムについて（自分用まとめ）

##はじめに
bootstrapの基礎知識について見直していた際、個人的に一番あやふやだった『グリッドシステム』について自分なりにまとめてみました。
教材の内容を自分なりに噛み砕いて説明してみましたが、もし何か解釈違い等があればコメント欄までお願いします。

## グリッドシステムとは
デバイスの画面の横幅を均等に分けるガイドライン「グリッド」。
bootstrapの場合は12分割で考えます。
これはスマホ・タブレット・パソコンどの大きさの画面でも変わらないです。

字面だとわかりづらいので図解してみました。（汚めですいません）。![スクリーンショット 2018-12-31 4.09.20.png](https://qiita-image-store.s3.amazonaws.com/0/280579/2a9cda50-c977-74a3-fe94-93e2294ba01f.png)

デバイスが違ってもこの12分割に沿ってレイアウトする事を『グリットシステム』と言います。

<br>

##　グリットシステムを踏まえてのBootstrap内での素材の扱い方
先にこの表を見て下さい.
![スクリーンショット 2018-12-31 4.50.36.png](https://qiita-image-store.s3.amazonaws.com/0/280579/65089408-901c-9769-0af1-1658dbea346e.png)
XS・・・エキストラスモール
SM・・・スモール
MD・・・ミディアム
LG・・・ラージ

グリットシステムを踏まえてのBootstrap内での素材の扱いたい場合。

・12分割中の内どのくらい割り振りたいか。
・なんのデバイスを想定しているか

を踏まえてclassを作成し、グリットシステムを利用します。

例として
![スクリーンショット 2018-12-31 5.45.39.png](https://qiita-image-store.s3.amazonaws.com/0/280579/0cdcbaea-f3c4-513d-1428-e86c4d343c28.png)

この素材をパソコンに１２分割中4つ使って表示させたい場合

![スクリーンショット 2018-12-31 5.51.11.png](https://qiita-image-store.s3.amazonaws.com/0/280579/893c85a0-d725-b973-30fc-431b533eeaae.png)
こんな感じで表示させたい場合は、この素材に対応したタブに

``class = col-lg-4　
``

という感じにclassを割り振ります。

lg の部分が最初に見せた『自分の想定するデバイス』に対応する
『Bootstrapでの扱い』の所です。

『４』の所が12分割の内自分がその素材に対して『割り振りたい分』の数です。


こんな感じでグリットシステムは利用します！

##おわりに
あまり上手く説明できた気がしなかったので良い伝え方をしてるサイトなどがあれば教えてもらいたいです。
よろしくお願いします！
DateFormatを書き間違えて画面に何も表示されなくなった話

# 起きた事

開発中のアプリのホームに何も表示されなくなった。
ホームでは、今月と翌月の予定を表示するのでstartDateとendDateを指定してAPIリクエストを送っていた。
レスポンスが0件だったのでサーバの問題かなと思ったけど、どうもリクエストのパラメータがおかしいようだ。

```json
{
  "start_date" : "2019-12-30",
  "end_date" : "2019-01-31",
}
```

今日は31日なので、end_dateは正しい。
が、start_dateが１年先の12/30になっている。

```swift
startDate.toFormat("YYYY-MM-dd")

> 2019-12-30
```

なんかおかしそう。2018-12-30になっていて欲しい。

# 結論

`YYYY-MM-dd`ではなく、`yyyy-MM-dd`を使わないとだめ

ちらっと調べた感じ`YYYY`は

```
ある年における「最初の木曜日を含む週が、その年の第1週である」というルールで年(西暦)を出力。

例えば 2015/1/1 は木曜日なのでその週の日は日曜日～土曜日まで全て2015年の第1週という解釈になり、 2014/12/28(日曜)～2014/12/31(水曜) の時に YYYY を使うと 2015 を返します。
```
引用：http://d.hatena.ne.jp/nakamura001/20150102/1420213850

つまり、

<img width="1148" alt="スクリーンショット 2018-12-31 6.00.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/24979/9cb36b74-c857-0a0b-69d2-cb1d3e6e1a9b.png">

こんな感じで、該当年の最初の木曜日が含まれている週を全部該当年にするという事。（上の図だと30,31が2019年）


勉強になった、年末こわこわ事件でした。
php-master-changes 2018-12-30

今日はテストコードへの Windows での空きメモリチェック追加、AppVeyor でのテスト実行時のタイムアウト調整、Windows 版ビルドツールでのコンパイラオプションの変更があった！

# 2018-12-30
## weltling: Add memory check to the test
- https://github.com/php/php-src/commit/222fa032d272fb12e390b975d0a544c0e5b5f0da
- [7.2~]
- [#55509](https://bugs.php.net/bug.php?id=55509) 修正時に追加したテストコードで、Windows 用の空きメモリチェックコードを追加
- x86_64 で 2GB 以上のメモリを使う際に SEGV が起きていたバグで、テストコードの SKIPIF セクションで 実行環境に 2.1 GB 以上の空きメモリがあることを [wmic](https://docs.microsoft.com/en-us/windows/desktop/wmisdk/wmic) コマンド経由で確認している

## weltling: Increase timeout for test on AppVeyor
- https://github.com/php/php-src/commit/54a2b42778ff9071820c88b381d72a1b5f0896e9
- [7.2~]
- AppVeyor でのテスト実行時にあるテストケースのタイムアウトを増やす調整をしている

## cmb69: Drop deprecated /Gm compile option
- https://github.com/php/php-src/commit/20de58f51d92660481923c7f795d2e36e9626247
- [7.2~]
- Windows 版のビルドツールで、コンパイラの廃止予定オプション [`/Gm`](https://docs.microsoft.com/en-us/cpp/build/reference/gm-enable-minimal-rebuild?view=vs-2017) の使用をやめた
- 初回コンパイル時にクラス定義の情報を別ファイル DB に持っておいて、クラス定義が変更された場合のみ再コンパイルするようにして、全体のリビルドを高速化するようなオプションだったっぽい（他のコンパイル高速化手段の方が筋が良いというので廃止になったのかな）
Low-Code/No-Code なツールをユーザーに届けるために大事な2つのこと

ジャーニーマン( @beajourneyman )です。

システムインテグレーターでCOBOLプログラマ、SE、PMなどを経て、現在はWebマーケティング(B2Bオウンドメディア/公式Facebookページ)を担当しています。1年半ほど運用を経験した駆け出しのマーケターです。

こちらは [Low-Code/No-Code Advent Calendar 2018](https://qiita.com/advent-calendar/2018/lowcodenocode) の19日目の記事です。

Facebook投稿で非常に近い関係の方が本アドベントカレンダーをお一人で立ち上げたコトを知り、エントリーすることにしました。

## このエントリーの背景

いくつかの Low-Code/No-Code　なツールやミドルウェアをお客様に導入して来た経験から、エンドユーザーさんが実際に自分のモノにし利活用できるステージになること、言うなれば"自走"するために大事なポイントがあると感じていたことから書くことにしました。

いわゆる、Low-Code/No-Code なやってみた系ではないので、導入のコンサルティングや運用フェーズの今でいうカスタマーサクセスに関するテーマになります。

## 大事な2つのこと

古くからある Low-Code/No-Code　なツールで一般的な、EAIやBIなどを過去に導入して来ました。関わったフェーズも、プロジェクトとして担当していたので、プリセールスでツールの提案から実際の運用までと一気通貫です。

その中で、特に大事だと感じた2つのこと、ベースになるマインドと、その先にある"自走"を助けるポイントとなったことを順を追ってご紹介します。

#### ツールでできることの前にお客様の課題に応える

自分が導入を担当し始めた頃は、パッケージツールが売れればそれで良い、後は野となれ山となれという風潮が少なからずありました。そんな時勢では、他社さんに導入してもらったツールでやりたいことが出来ないので、何とかしてくれないか？という相談から、スクラッチでシステム開発を行うこともありました。

時代は変わりました。今はクラウドの出現から「(パッケージツール)所有から(サービス)利用」の流れとなり、いつでも簡単に始められるようになり、かつ試してダメだったら類似した他のサービスを使えば良く、スイッチングコストもほぼゼロと考えて良くなりました。

ここで必要な考え方がカスマターサクセスです。自社ツールを長く、ひいてはファンになって使ってもらうためにはどうしたら良いのか？がキーポイントになりました。売れればいい時代からは隔世の感があります。パッケージベンダーもお客様と並走して、課題解決が出来なければ、高いスイッチングコストという障壁を越えてでも、並走するサービスベンダーへ変わってしまいます。

過去にカスタマーサクセス視点で取り組んだ社内の活動についてまとめてあるのでご興味あればご覧ください。
[<img width="427" alt=スクリーンショット 2018-12-31 3.18.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/155285/43705d52-08ed-7033-4ea4-9c6ce4654033.png">](https://qiita.com/beajourneyman/items/307c2a71fc3d35dd57b2)

自分が体験した"課題に応える"エピソードをご紹介します。お客様はEAIツールを利用したデータ連携基盤を実現しようとされていました。ただ順調とは言えない状態でした。自分はその立て直しのため、途中から任されることになりました。傾聴を通して分かったこと、それは驚くほどシンプルでした。「質問に答えて欲しい」。お客様の抱えている課題、その解決のポイントが質問の答えでした。傾聴し、カスタマーインサイトを得る、そしてお客様の言葉で伝える、このマインドとそこから生まれる関係性があって初めて、目指すべき"自走"への道のりが拓けます。

####　"自走"するための決め手は共通言語

前段で、カスタマーインサイトに触れ、円滑にコミュニケーションができるようになりました。次に行うべきは、ツールを通してそれを語ることです。

抽象的ですね。はい、敢えてそう表現しています。相手の立場で課題解決をする、その目的は何でしょうか？それは  Low-Code/No-Code　なツールを使って、仮にEAIであればお客様自ら縦横無尽なデータ連携を実現することです。無論、前段の取り組みではその状況には至っていません。

ポイントになる「ツールを介して共通言語を話して見せる」とは何でしょうか？具体的にご紹介します。

例えば、お客様は基幹システムのデータAと顧客システムのデータBを◯◯の軸で統合してBIで分析したいとします。何故それが必要なのか？その本質的な意味を理解し、ツール教育の現場で実際にお客様メンバーにリアルな体験として、実装してもらう、ツールのエキスパートが自分たちのデータで語る瞬間です。そして、それをトレースするハンズオンを自らで行う、そして作り切る、お客様自らが価値を実感できる素材で、未知のツールを体験することでグッとツールが身近なモノに、例えるなら"自分ゴト化"します。

「このツールは自分に関係がある」という感覚を掴んでいただけたら"自走"は始まっています。もうお分かりかと思いますがベンダー側が取り組むべきことはひとつ、"並走"です。

少し後日談も添えます。お客様からの電話やメール問い合わせ、「◯◯が出来ました。ありがとうございます。次は□□がやりたいのですが、このヘルプが該当すると思いますが合ってますか？」、勘所を抑えた次への一歩をどんどん進まれていることが分かるやり取りです。

## 最後に…

Low-Code/No-Code なツールは、ITリテラシーのある方にとっては少しの練習で使い始められると思います。しかし、エンドユーザーさんから見れば、非常に敷居の高いことだと経験から感じていました。

その中で、使いこなしてもらうために何ができるか？　見えてきたことが、本エントリーの考え方でした。改めて大事な2つのことをシンプルな言葉でまとめます。

- **お客様の課題を知りカスタマーサクセスマインドで**
- **導入・教育プロセスに"自分ゴト化"してもらう仕掛けを**

最後まで読んでいただきありがとうございます。実際に Low-Code/No-Code なツールをお客様に届けられている方のお役に立てば幸いです。
#obniz と PCA9685  を接続してサーボ16個を制御してみる #大晦日ハッカソン 2018

#　obniz と PCA9685  を接続する
[大晦日ハッカソン](https://qiita.com/t_furu/items/8a28f7dc3a8a4b22e0c8) の進捗記事
# 概要
[obniz](https://obniz.io/) と[PCA9685](https://www.switch-science.com/catalog/961/) という16個のサーボを少ない配線で制御できる基板を利用して
16個のサーボを動かしてみます。

# 手順
1. obniz をWifiに接続する
    1. [クイックスタート](https://obniz.io/doc/quickstart) を参考に 設定しみてみる
    2. マイクロUSBをobnizにつないで電源を入れる <br>![IMAG2296.jpg](https://qiita-image-store.s3.amazonaws.com/0/100147/a725aebc-c42f-8eb5-878c-dd2219ae5eb8.jpeg)
    3. Wi-Fi 設定をして　QRコードが表示される状態にする
    4. `obniz id` を クイックスタートのページのサンプルに入力して実行してみる
    5. 東京の天気が obniz の液晶に表示される
2. PCA9685 と obniz を接続してみる
    1. PCA9685とobnizを接続する 回路を KiCADで設計<br> <img width="506" alt="スクリーンショット 2018-12-31 3.32.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/100147/aa63c5aa-213b-964d-501e-94c98ecd4dce.png">
    2. 回路を参考に基板配置を考える <br> <img width="664" alt="スクリーンショット 2018-12-31 14.18.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/100147/58c4d56e-bfe8-a313-e0f3-63f5b39fe755.png">
    3. 基板作成<br>[写真を挿入]
3. サーボ16個を接続して動かしてみる <br> [動画を挿入]
    1. [PCA9685](https://obniz.io/sdk/parts/PCA9685/README.md?iframe=false) のページを参考に obniz コードを書く
    2. 16個のサーボを接続<br>[写真を挿入]
WebPackでモバイルとデスクトップの切り分けをする


JavaScriptファイルを分ける場合の`webpack.config.js`の設定

entryとoutputを設定してあげるとそれぞれのディレクトリができる

```webpack.config.js
const path = require('path');
...
   entry:{
      desktop: src/js/desktop.js,
      mobile: src/js/mobile.js
    }
   output:{
      path: path.resolve(__dirname, 'dist'),
      filename: '[name]/bundle.js'
    }
...

```
Entry Points
https://webpack.js.org/concepts/entry-points/

Output
https://webpack.js.org/concepts/output/
Space-Trackでほしい衛星を探す

[https://www.space-track.org](https://www.space-track.org)

Space-TrackはURLでフィルタリングできる。

なお、Space-Trackのデータを利用するにはアカウントを作ってログインが必要。

## URL例

### すべての衛星

[https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/EPOCH/>now-30/orderby/NORAD_CAT_ID/format/3le](https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/EPOCH/>now-30/orderby/NORAD_CAT_ID/format/3le)

30日以内に観測されたすべてのデータから、その物体の最新のTLEをThree Line Element形式で表示する。

### 任意の衛星のn日以内のデータ

[https://www.space-track.org/basicspacedata/query/class/tle/NORAD_CAT_ID/25544/EPOCH/>now-30/orderby/epoch/format/3le](https://www.space-track.org/basicspacedata/query/class/tle/NORAD_CAT_ID/25544/EPOCH/%3Enow-30/orderby/epoch/format/3le)

`NORAD_CAT_ID/25544`が衛星番号。
`EPOCH/>now-30`は、`now`が現時点、`-30`でそこから30日前、`>`でより大きい、という意味で、エポックが30日前より大きいデータを表示する、という意味。

### 任意の衛星のすべての過去データ

[https://www.space-track.org/basicspacedata/query/class/tle/NORAD_CAT_ID/25544/orderby/epoch/format/3le](https://www.space-track.org/basicspacedata/query/class/tle/NORAD_CAT_ID/25544/orderby/epoch/format/3le)

EPOCHでのフィルタを外せばいい。
25544は軌道上にいる期間が長いのでかなりでかいファイルを開くことになるので、リンクを踏む際は注意。

### 打ち上げ年/番号

[https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/INTLDES/^18099/EPOCH/>now-30/format/3le](https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/INTLDES/%5E18099/EPOCH/%3Enow-30/format/3le)

`INTLDES/^18099`で「2018年の99回目の打ち上げ」を指定している。
頭に`^`をつけることで前方一致で指定できるっぽいので、それを使っている。

### ヘルプ

HELPのAPIから使用可能なフィルタが探せる。
Request Classesのリンクからフィールド一覧を表示できる。
ただ、フィールド名とかを羅列してあるだけなのでいまいち理解しがたい。

そういうときはXML形式でデータを眺めてみるとわかりやすい。

[https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/NORAD_CAT_ID/25544/format/xml](https://www.space-track.org/basicspacedata/query/class/tle_latest/ORDINAL/1/NORAD_CAT_ID/25544/format/xml)

## 小技

### デブリの除去

すべての物体のデータの中には、大量のデブリが含まれている。執筆時点で17964個ある物体のうち、デブリが10794個と、約6割がデブリになる。
そのまま軌道表示ソフトに入れると「衛星がゴミのようだ！っていうかゴミだらけじゃん。。。」ってなるので、消したい。

そういう場合は、正規表現による置換が可能なエディタを使って、`0 .+DEB.*\n1 .+\n2 .+\n`を削除すれば、名前にDEBを含む軌道要素を一括して削除できる。

### 複数の衛星のTLEから文字列検索

#### カタログ番号

全衛星一覧のテキストファイルから任意の衛星を探す場合。
カタログ番号が判明しているなら、末尾に'U 'をつけて検索する。
もっとも、この方法は軍・政府関係のユーザーは使用できないが、Qiitaを参考にしてる人なら大抵は民間人のハズだから、この手段は有効なはず。

例えばISSを探す場合は`25544U `で探す。
`25544`で探すと、ソコソコの頻度で他の衛星にヒットしてしまう。

#### 打ち上げ年/番

打ち上げた年と何回目かがわかっている場合は、その打ち上げのYear/Numberを使って検索する。
2018年99回目の発射で打ち上げられた物体を探すときに、ただ`18099`と探すと大量に出てくる。
この場合は`U 18099`とすれば、その打ち上げで放出されたすべての物体が得られる。
これも民間人しか使えないのはカタログ番号と同様。

## その他

![image.png](https://qiita-image-store.s3.amazonaws.com/0/264452/4f4bb1e4-c780-53e7-6d73-69a15c786d8c.png)

見ろ！衛星がゴミのようだ！(ゴミは削除済み)。

全体的に散らばっているけど、とくに赤道上に大量の衛星が直線状に連なっている。
静止軌道上には672個の衛星がいるらしい。赤道半径はおよそ42000kmだから、平均割で約400km間隔、実際は粗密があるからそれよりも狭い範囲で連なっている、ということになる。


ちなみに、デブリも含めるとこんな感じ。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/264452/ffa08f30-2740-925a-6bb8-cf44d89f008f.png)
現場の新人教育で新人に知っておいて欲しいこと

# はじめに
[新人プログラマをレビューで殺さない方法](https://qiita.com/hiraike32/items/32840b11536fa1b78621)を読んでいて、
教える側の意図も知ってほしいと思って書きました。

一言で言うと、先輩が見てるのはコードでなく新人の成長です

# 予防線
* 会社とか人によっていろいろだと思いますが、私はこういう意図でやるというのを述べます
* 私はインフラ寄りで、コードレビューとかは稀にやる程度です
* 真摯に受け止めるべきところも多いと思うので自分の行動も改めたいと思っています

# 記事の内容に対して
## 「ドキュメント読んで」について
* 教える側はドキュメントの内容だけを身に着けてほしいのではなく、ドキュメントを読む力を身に着けて欲しいと思っています
* ドキュメントが分からないにもいろいろあると思います。状況をまず先輩に伝えて、先輩に教育方法を考えるチャンスを与えてください
  * ペアリーディング等がベストとは限らないからです。フレームワークの全体像がつかめていないのなら、まずそれを理解できる初心者向けの本や記事で一通り勉強した方がいいのかもしれません。その判断は先輩にやらせればいいと思いますが、判断するための材料として状況を伝えてください。
  * 何が分からないのかもうまく説明できないという状況もあると思いますが、先輩と対話しながらでいいので「自力でドキュメントを読むのに足りないもの」を見つけてください
* もちろん先輩の提示する内容が非効率に感じられ、より良い方法があるなら積極的に提案してください。
* ペアリーディングするのであれば、次はペアリーディングなしでドキュメントが読めるか、無理だとするとまだ何が足りないか、足りないものはどう身に着けるかを先輩と一緒に見つけてください


## 「ちゃんと確認した？」について
* 責めたいわけではありません。別に時間をかけて確認して欲しい訳でもありません。
* 知り合って間もないと新人が「確認せずに仕事するタイプ」なのか「ムチャクチャ確認して仕事するタイプ」なのかも把握できてないです。
* 新人が確認するタイプだとして、確認すべきことをどれだけ意識できてるのかも把握できてなかったりします
* 確認したのであれば、「○○とxxを確認しました。何が足りないですか？」ぐらいで答えておいていいと思います

## 他の内容について
* 殺意なく無意識にやってしまってるだけなので、
それが傷つく行為なのだと教えてあげて下さい

# 記事の内容以外で伝えたいこと
* 先輩も「教育者という観点では新人」だったりします。至らない点もあるかと思いますが、温かい目で見てやってください。納得いかない点は指摘してください（優しめに）。
* うまく結果が出てないだけで、先輩も裏で結構教育について悩んだりしてます。新人だけが苦労している訳ではありません。
* 完璧な先輩も完璧な新人もいないと思うので、とにかく歩み寄ることから始めましょう。話せば分かる。
* 感謝と成長を見せる意思は少しでいいので持ってください
  * やる気もない・成長もしない、という人を教えるのは苦痛です
      * 私は幸いそんな経験ないですが、ぼやいている人を稀に見るので 
* 忙しくて雑な教育になってることもあるかもしれませんが、許してやってください。本当はもっと手厚く教えたいはずです。
IntelliJ IDEAのLinuxへの導入・更新手順

↓ここからバイナリをダウンロードする
[Download IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains](https://www.jetbrains.com/idea/download/#section=linux)

設定例

```sh
tar -xvf ideaIU-2018.3.tar.gz -C /opt/
cd /opt/idea-IU-183.4886.37/bin/
./idea.sh
```

ここまでは普通なんですが、
LinuxのIntelliJを新しいバージョンへ更新する場合、このままだと古いバージョンが立ち上がってしまいますので、
IntelliJを起動後、以下手順で設定を更新する必要があります。

CUIでの起動の場合(`/usr/local/bin/idea`を追加してくれます)
`Tools => Create Command-line Launcher...`

GUIでの起動の場合(ランチャーから起動できるようになる)
`Tools => Create Desktop Entry...`
【小ネタ】並列処理とは何か？そして並列処理と並行処理の違いとは？

# 最初に

本記事は「並列処理」について少し掘り下げた解説記事となります。

プロセスについては→[【小ネタ】プロセスってなんだろう？という話](https://qiita.com/4_mio_11/items/4987be19c31df70bbf28)
スレッドについては→[【小ネタ】スレッドってなんだろう？という話](https://qiita.com/4_mio_11/items/f97a5ac374bd56b6bc22)
非同期については→[Unity非同期完全に理解するための第一歩～非同期処理とは何か～
](https://qiita.com/4_mio_11/items/3a0b06819d9591c5d410)

# 並行処理とは？

並行処理とは、**複数のプロセスが実行可能状態である**ことで、実際には同時にプロセスが動いていなくてもユーザー側から任意で切り替えが行えます。人間の目には同時に処理が行われているように見えますが、マルチタスクOSではシングルコアで各プロセスをナノ秒ごとのタイムスライスで区切って高速に切り替えながら１処理ずつ行なっているのです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/36899/0fa28c6f-77d2-310f-4f4d-c3c39872f738.png)


# 並列処理とは？

並列処理とは、**計算処理系などの比較的小さくて独立した処理を別々のコアで実行する事で複数コアを持つハードウェアのパフォーマンスを引き出すための手法**となります。

この機能を備えているのがUnityであれば「C# Job System」となります。

並列実行ではシステム自体にマルチコアプロセッサが必要となります。つまり、マルチスレッドやマルチプロセスを駆使するアプリを開発したとしても**マルチコアシステムでない場合には並列には実行できません**。

# で、並列処理と並行処理って結局どう違うの？

並行処理は**1つのコアで各プロセスを高速に切り替えて１処理ずつ行なっている**と書きましたね。

これに比べて並列処理は**実際に複数のコアで同時に処理を行なっていること**を指しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/36899/ab37284f-fd05-55b0-f30d-0bafb121f4a1.png)

並行処理では1つのコアに負荷がかかる作業となりますが、並列処理はそれぞれのコアがそれぞれの処理を全力で行うような感じです。

ちなみに非同期は、この二つとは直接的に関係する概念ではありません。非同期は**メインスレッドを止めずに別の処理を行うための手法**であり、これを実現する方法として並列処理・並行処理どちらもあげることができます。並行の場合は厳密には数ナノ秒程度はメインの処理が止まるかもしれませんが、ユーザーから見たときには停止しているように見えず、別の処理を行えているように見えているため、非同期と言っても良いとされています。

# デュアルコアの端末とかは？

PCのデュアルコアと言うのは**1個のCPUに2個のコアが存在する**ため、並列処理が可能です。コア数が二倍になれば、単位時間のうちに二倍の仕事ができるプログラムを組むことで処理速度を二倍にあげられる可能性があります。

その実装方法として、一つは演算器を複数置いて単一命令で並列に計算を行わせる方法です。この方法は複数のデータを並列に処理させるので**データ並列**と呼ばれています。これはSIMD(Single Instruction Multiple Data)と言う種類の命令セットがCPUで提供されているため可能となります。

もう一つの実装方法は、スレッド並列です。これは複数の演算器を起き、各演算器は一つのスレッドを実行します。つまり各スレッドが一つの仕事を担当し、複数のスレッドを並列に実行する方法です。現在の多くのGPUが採用しているSIMT方式は、スレッド並列の実行を行います。

# 並列プログラムの切り分け方

上から順番に処理を行う(逐次)プログラムのソースから切り出せる処理があるのであれば、それをスレッド（または連携して動作するプロセス）へ割り当てることができます。ただし、アプリケーション内の処理全てが独立しているわけではないので、並列プログラムにも逐次実行部分は残ります。処理をスレッドに割り当てるためには、スレッドを実装したライブラリ等が必要となります。

# 並列処理の歴史

2005年以降のマルチコアマイクロプロセッサ時代が来た事によって、並列の概念が開発の状況を変えていきました。C++も標準ライブラリに並列プログラミングをサポートする機能を持っています。C++11では`mutex`などの相互排他処理を実現するベース部分の機能が備わっていましたが、C++17から並行並列の新しいSTLが追加されます。 これにより、並列化をコンパイラに丸投げできるようになり、可搬性も上がるようになります。

現代のCPUはパイプライン化されており、複数の命令が同時に「実行中」になることが可能です。また、GPUは本質的に大規模な計算エンジンであるため、幾千もの計算を並列処理で実行することが可能です。CPUのパフォーマンスも改良され、CPUの計算速度はメモリにアクセスするスピードよりもずっと早くなりつつあります。なので現在のCPUはうまいことメモリへのアクセスによって発生するレイテンシを削減するようなことも行なってくれます。

# 参考

- ゲームエンジンアーキテクチャ(文献)
- GPUを支える技術(文献)
- [イケてるエンジニアになろうシリーズ 〜メモリとプロセスとスレッド編〜](https://moro-archive.hatenablog.com/entry/2014/09/11/013520)
追いかけグラフ（仮）を描画するライブラリを作ってみた

[この動くグラフ](https://www.reddit.com/r/interestingasfuck/comments/9togwf/the_major_world_economies_over_time/)が面白かったので、JSで描画できるようにしてみた。

<img width="1435" alt="スクリーンショット 2018-12-31 2.10.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/33011/bd782418-c2bc-1eb4-b287-76ea405dce32.png">

[上記画像はRedditから引用](https://www.reddit.com/r/interestingasfuck/comments/9togwf/the_major_world_economies_over_time/)（本物はgifアニメです）


## 作ったデモ画像

#### Gross Domestic Product (GDP)

まずは元の画像と同じ内容を再現してみた。GDPの経年推移を描画している。

![gdp.gif](https://qiita-image-store.s3.amazonaws.com/0/33011/7acc3b3d-88de-3717-b944-23d7a635a297.gif)

- [JSFiddleで編集](https://jsfiddle.net/Shinohara/s0nbcq8p/12/)

#### The number of tourists to Japan

こちらは、日本に来る観光客数の経年推移。

![tourists.gif](https://qiita-image-store.s3.amazonaws.com/0/33011/f2293961-bd35-d20c-4f6c-6738e1e23565.gif)

- [JSFiddleで編集](https://jsfiddle.net/Shinohara/5tvLcpxu/13/)

#### ruby-core

ruby-coreメーリングリストに投稿されるメール数の経年推移。

![ruby.gif](https://qiita-image-store.s3.amazonaws.com/0/33011/5da83a86-fd25-babf-366e-f92389c9e688.gif)

## 自分で動かす方法

ソースはすべて[Githubで公開](https://github.com/ts-3156/chasingchart)されており、ライブラリの簡単な使い方はREADMEに書いてある。

ざっくり下記のようなJSを書くと、これまでに見たグラフを描画できる。内部的には[Highcharts](https://www.highcharts.com/)を利用している。

```html
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
<script src="https://ts-3156.github.io/chasingchart/chasingchart-latest.js"></script>

<div id="container" style="min-width: 310px; max-width: 800px; height: 400px; margin: 0 auto"></div>
<button id="button">Start</button>

<script>
    var input = [...];

    var chart = Chasingchart.chart('container');
    chart.setData(input);

    document.getElementById('button').addEventListener("click", function (event) {
        chart.start();
    }, false);
</script>
```

入力データは一例として下記の形式であればOK。こちらも、[JSFiddle](https://jsfiddle.net/Shinohara/pxcawzhr/13/)で試せるようにしてある。

```json
[{
    "data": {"cat1":  500, "cat2":  400, "cat3":  300, "cat4":  200, "cat5":  100},
    "options": {"title": {"text": "Something statistics"}, "subtitle": {"text": "1900"}}
}, {
    "data": {"cat1":  500, "cat2":  550, "cat3":  300, "cat4":  200, "cat5":  100},
    "options": {"title": {"text": "Something statistics"}, "subtitle": {"text": "2000"}}
}]
```

## その他

描画してみたいデータがもしあれば、コメント欄でご連絡いただけるとありがたいです。時間があれば動くグラフを作ってみます。

## 参考リンク

- [Chasingchart](https://github.com/ts-3156/chasingchart) 今回作成したJSライブラリ
- [The Major World Economies Over Time](https://www.reddit.com/r/interestingasfuck/comments/9togwf/the_major_world_economies_over_time/)
- [Highcharts](https://www.highcharts.com/)
ComposerをHomebrewでMac OSに導入する方法

#はじめに

Laravel導入目的で、HombrewでComposerをインストールする際に調べた、Composerの概要と導入手順を簡単にまとめました。


###環境

- `Mac OS Mojave Version 10.14`
- `Homebrew 1.8.6`

#Composerとは
Composer（コンポーザー）は、PHPの開発で使用するライブラリやパッケージを管理する為のツールです。
<img src="http://9ensan.com/blog/wp-content/uploads/2013/01/php-composer-dependency-management-01.png" width=100%>

Composerは作曲者という意味ですが、ロゴは指揮者のアイコンになっています。
以前、Composerの開発者であるJordi Boggiano氏が日本に来日した際に、このように答えています。

Q: composerの単語の意味は作曲者なのに、何故ロゴは指揮者なのか？

<b>A: さほど深い理由はないけど、Google画像検索で調べても、割と指揮者が出てくるし、まあいいんじゃないの。</b>

とのこと。すみません、余談でした。

#Composerの利点
Composerの利点について調べてみた。
前提として[ライブラリ](http://idr-zz.hatenablog.com/entry/2017/12/05/073044)を理解しておくとイメージが掴み易いです。

###1. ライブラリの管理が楽になる
Composerが無い環境では、必要なライブラリを公式サイトにアクセスして、zipファイルをダウンロードしてインストールする必要があります。

この場合、何が問題かと言うと、ダウンロードしたライブラリのバージョンを管理する必要があります。

Composerを利用することで、統一のバージョンでライブラリを利用できるのと、バージョン情報を外部ファイルで管理する必要が無いので楽です。

###2. インストールが楽になる

Composerは、ライブラリのバージョンを指定してダウンロード＆インストールまでを行ってくれるため、コマンド１つでダウンロードからインストールまでをノンストップで行うことができます。

###3. 依存関係の管理が楽になる
例えば、通常は「ライブラリAを使う」といった時、「動かすには別のライブラリBとCが必要」です。
こういった場合、通常はライブラリAとBとC、それぞれ個別にダウンロードしてインストールする必要がありますが、Composerを使うと、「ライブラリAに依存する必要なライブラリBとC」は自動でダウンロードしてインストールしてくれます。

#Composerの必要性
###で、結局なぜLaravelにComposerが必要なの？

これ、一番重要だと思います。

まず、そもそもLaravelのインストールにはComposerがインストールされていることが前提となっています。
次に、Laravelを使うには、Taylor氏以外の方が作ったライブラリも必要になる様です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/310353/355734c9-728b-16a1-bc2e-0bbcbb2577b9.png)

これを1つ1つダウンロードして、バージョン管理するのは大変な作業ですよね・・・。
でもComposerを使えば、これらの問題を全て解消してくれます。

#導入手順
予備知識として、Composerについてざっくり理解したところで、早速導入して行きましょう。
導入は2ステップあれば完了するので、超簡単です。

##1. Composerのインストール

HomebrewでComposerをインストールします。

```
$ brew install composer
```

##2. インストール確認
`composer -V`を入力し、バージョン情報が表示されれば、Composerのインストールは完了です。

```
  ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/

Composer version 1.8.0 2018-12-03 10:31:16

```

#まとめ
- 結局Laravelを使おうが使わまいが、PHP開発においてComposerは重要なツールと理解しました。
- 従って、Composerを理解することが肝要。  （間違っていたらご指摘下さい・・・）
- Composerの使い方についても勉強したら、記事にまとめてみようと思います。
Goのexample関数を使ってドキュメントの管理とテストを同時に行う

#example関数について

Goには、testringパッケージに[example関数](https://golang.org/pkg/testing/#hdr-Examples "example関数")が用意されており、test実行時にexample通りに動作しているか確認することが可能です。
また、Godocにも関数のexampleが追加されるため、コードベースでドキュメント管理することが可能です。

Goでは_test.goで終わるファイルがテストファイルとして認識されます。テストファイルにExampleで始まる関数名を記述するとgodocにexampleが追加され、exampleの結果が正しく動作しているかテストされるようになります。


```go
// display_test.go
package main

import (
	"testing"
)

// Openは　文字列のバイト数分　- が出力される
func ExampleDisplay_Open() {
	d := Display{"yokohama"}
	d.Open()
	// Output: +--------+
}

// display.go
package main

import (
	"fmt"
)

type Display struct {
	str   string
}

func (d Display) Open(str string) {
	fmt.Print("+")
	for i := 0; i < len(d.str); i++ {
		fmt.Print("-")
	}
	fmt.Println("+")
}

```

#example関数名について

ただし、Exampleを記述する際に規則がありtest関数名のように自由な名前をつけられないため注意する必要があります。下記の通り、Exampleで関数名を初め、そのあとに「関数名」もしくは「型名」、「型名_関数名」を指定することが可能です。


>func Example() { ... }
>func ExampleF() { ... }
>func ExampleT() { ... }
>func ExampleT_M() { ... }


#example実行結果
```shell
$ go test -v
=== RUN   ExampleDisplay_Open
--- PASS: ExampleDisplay_Open (0.00s)
PASS
ok  	work/example	0.006s
```

godocにもexampleのコードが反映されます。exampleの内容が正しいかテストも実行されるため、ドキュメントの管理とテストを管理を同時に行うことが可能です。
![スクリーンショット 2018-12-31 1.51.31.png](https://qiita-image-store.s3.amazonaws.com/0/314766/37a5a7da-f683-9257-966e-f519a43655a2.png)


#参考URL
https://blog.golang.org/examples
https://golang.org/pkg/testing/