OmniAICreator/Qiita-1.07M huggingface dataset:
Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）

# 前書き
**Python** と **Qiita API v2** を使用して、Qiita に投稿した自分の記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法を紹介します。

# 実行した環境
+ Windows7 Pro（64bit）
+ Python3.6（Anaconda3）

# 作成したプログラム

### Python のプロラム
`Python`から`Qiita API v2`を使用して、タイトル、 VIEW数 、いいねの数 、ストック数を取得し、標準出力にCSV形式で一覧表示させるプログラムです。

下記プログラムソースの`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`の部分には、自分のアクセストークンで置き換えてください。
アクセストークンは Qiitaページの「設定」－「アプリケーション」－「個人用アクセストークン」から取得可能です。

```python:getview.py
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 11 23:44:00 2019

@author: yasushi-jp
"""

import requests
import json

url = 'https://qiita.com/api/v2/authenticated_user/items'
params = { "page" : "1", "per_page" : "100"}
headers = {"content-type" : "application/json", "Authorization" : "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

res = requests.get(url, headers=headers, params=params)
list = res.json()

total_views_cnt = 0
total_likes_cnt = 0
total_stocks_cnt = 0

print("タイトル, ビューカウント, いいねカウント, ストックカウント")
for item in list:
    item_id = item['id']
    title = item['title']
    likes_cnt = item['likes_count']

    total_likes_cnt += likes_cnt

    url = 'https://qiita.com/api/v2/items/' + item_id
    res = requests.get(url, headers=headers)
    json = res.json()
    views_cnt = json['page_views_count']
    total_views_cnt += views_cnt

    url = 'https://qiita.com/api/v2/items/' + item_id + '/stockers'
    res = requests.get(url, headers=headers)
    users = res.json()
    stocks_cnt = len(users)
    total_stocks_cnt += stocks_cnt

    print(title + ", " + str(views_cnt) + ", " + str(likes_cnt) + ", " + str(stocks_cnt))
    
print("合計, " + str(total_views_cnt) + ", " + str(total_likes_cnt) + ", " + str(total_stocks_cnt))

```

### 起動用のbat

インストールされているPythonにパスを通し、先程作成した`getview.py`を呼び出し、結果をファイルにリダイレクトしています。
「C:\DK\Anaconda3\envs\tf_env」の部分は、Pythonをインストールしたディレクトリに置き換えてください。

```console:getview.bat
@echo off
set PATH=%PATH%;C:\DK\Anaconda3\envs\tf_env
python getview.py > viewcount.csv
pause
```

# 実行
上記で作成した`getview.bat`を実行（ダブルクリック）すると、`viewcount.csv`が作成されます。

# 参考

> [Qiita API v2ドキュメント](https://qiita.com/api/v2/docs "Qiita API v2ドキュメント")
【MySQL】WindowsでMySQLのユーザー作成から権限付与までのメモ【Windows】

#まずユーザーを作ろう

```
mysql -u root -p
>>*******※パスワードを入力
```
###ユーザーを新規作成(注意：''は必要！)

```
#小文字でもおｋ
CREATE USER 'ユーザ名(任意)'@'IP(ホスト名：localhostとか)' IDENTIFIED BY 'パスワード(任意)';
```

###作成したユーザーを確認

```
SELECT user, host FROM mysql.user;
```

###権限の付与(注意：''はいらない！)

```
GRANT [権限] ON [適用対象のデータベース].[適用対象のテーブル] TO ユーザ名@ホスト名;
FLUSH PRIVILEGES;
```
適用対象に関しては、「全範囲（グローバル）」を指定したい場合は、「*.*」と指定

####権限リスト

```
ALL	－	GRANT OPTION（権限の付与）以外の全てを許可する
ALTER	G, D, T	ALTER TABLE（テーブルの変更）の使用を許可する
ALTER ROUTINE	G, D, P	ストアドルーチンの変更・削除を許可する
CREATE	G, D, T	データベースとテーブルの作成を許可する
CREATE ROUTINE	G, D	ストアドルーチンの作成を許可する
CREATE TABLESPACE	G	テーブルスペースとログファイルグループの作成を許可する
CREATE TEMPORARY TABLES	G, D	一時テーブル作成の使用を許可する
CREATE USER	G	ユーザの作成・変更・削除を許可する
CREATE VIEW	G, D, T	ビューの作成や変更を許可する
DELETE	G, D, T	DELETE文の使用を許可する
DROP	G, D, T	DROP文の使用を許可する
EVENT	G, D	イベントスケジューラのイベント作成を許可する
EXECUTE	G, D, T	ストアドルーチンの実行を許可する
GRANT OPTION	G, D, P	権限の付与を許可する
INDEX	G, D, T	インデックスの作成と削除を許可する
INSERT	G, D, T, C	INSERT文の使用を許可する
LOCK TABLES	G, D	SELECT権限を持つテーブルのロックを許可する
PROCESS	G	プロセスリストの表示を許可する
RELOAD	G	FLUSHの使用を許可する
SELECT	G, D, T, C	SELECT文の使用を許可する
SHOW DATABASES	G	SHOW DATABASEで全データベースの表示を許可する
SHUTDOWN	G, D, T	mysqladmin shutdownの使用を許可する
TRIGGER	G, D, T	トリガの作成・削除を許可する
UPDATE	G, D, T, C	UPDATE文の使用を許可する
USAGE	－	「権限なし」を設定する
```


###確認方法(注意：''はいらない！)

```
show grants for ユーザー名@ホスト名;
```
Visual Studio Codeで複数行のタブを一括で削除する方法

## はじめに
　Visual Studio Codeを使っていて、字下げの反対（字上げ？）の方法を調べた時のメモ。

## 方法
　結論から言うと範囲指定して「Shift + Tab」で出来ました。

## 使い所
　例えば関数の中身だけを取り出したい時。
![hello_tab.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537831/58f30bd7-bebf-3743-966c-8b340a11c10b.jpeg)

　範囲を選択し、
![hello_tab2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537831/a38f4307-7e78-2840-5a73-7ef6b0901796.jpeg)

　Shift + Tabを押します。
![hello_tab3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537831/daf08638-ae10-c429-5132-da4363881684.jpeg)

　一括で削除できました。

## おわりに
　初投稿でした。これからも記事を投稿していきたいと思います。
　ご覧いただきありがとうございます。

## 参考URL
- [Deleting tabs when using tabs as spaces](https://stackoverflow.com/questions/3086289/deleting-tabs-when-using-tabs-as-spaces)
MDMTをwindows環境でnpm run buildする際のエラー解消法

## 初めに
fandさんことamagiさんによる[MDMT](https://github.com/fand/mdmt)をWindows環境でせこせこいじっていた訳ですが、
ひと段落したタイミングで`npm run build`したところ、
>'hoge' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

こんな感じのエラーがいっぱい出たので解決法をまとめます。（ある程度わかってる人ならなんとなくこの時点で察せるやつだと思うけど、、、）

## 問題点
結論から言うと、**package.jsonにあるコマンドがwin/mac&linuxで異なること**が原因です。まんまですね。なので、、、

``` json
"scripts": {
        "build": "NODE_ENV=production run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw",
        "build:build": "next build",
        "build:export": "next export -o docs",
        "build:manifest": "node scripts/generate-manifest.js",
        "build:nojekyll": "touch docs/.nojekyll",
        "build:preload": "node scripts/copy-preload.js",
        "build:sw": "workbox generateSW scripts/workbox-config.js",
        "clean": "rm -rf .next docs",
        "lint": "eslint --ext .js,.ts,.tsx pages lib components scripts",
        "start": "next",
        "test": "NODE_ENV=production babel-node test/index.js"
    }
```
このコードを

``` json
"scripts": {
        "build": "SET NODE_ENV=production & run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw",
        "build:build": "next build",
        "build:export": "next export -o docs",
        "build:manifest": "node scripts/generate-manifest.js",
        "build:nojekyll": "copy nul docs\\.nojekyll",
        "build:preload": "node scripts/copy-preload.js",
        "build:sw": "workbox generateSW scripts/workbox-config.js",
        "clean": "rd /s /q .next docs",
        "lint": "eslint --ext .js,.ts,.tsx pages lib components scripts",
        "start": "next",
        "test": "NODE_ENV=production babel-node test/index.js"
    }
```

こうすれば走ります。
具体的に何をどうしたかというと、、、

`NODE_ENV`をwindowsに合わせて`set`と`&`をつけてあげたり、

``` json
"build": "NODE_ENV=production run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw"
```
``` json
"build": "SET NODE_ENV=production & run-s clean build:manifest build:build build:export build:nojekyll build:preload build:sw"
```


`touch`はwindowsにはないので、`copy nul`に変更してあげる。＆ `/`(スラッシュ)だとパス指定できないので`\`(バックスラッシュ)で対応してあげる。

``` json
"build:nojekyll": "touch docs/.nojekyll"
```

``` json
"build:nojekyll": "copy nul docs\\.nojekyll"
```

`rm -rf`もwindowsにはないので、`rd /s /q`で対応

``` json
 "clean": "rm -rf .next docs"
```

``` json
"clean": "rd /s /q .next docs"
```

こんな感じです。参考になれば。
IDE for Gadget Renesas（GR）が立ち上がらない問題　

先日、IDE for GRが立ち上がらくなくなりました。
この問題を解決しましょう。

IDE for GRを立ち上げると、こんな画面が出てきます
![ideforgr-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/58106e54-7f0c-1d98-c871-b511cc866728.jpeg)
ライブラリに問題があるとこんな表示が出てきますが、OKで進めます。
![ideforgr-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/e123fcef-9486-2f5e-1d72-444e814a19fa.jpeg)

立ち上がらないがJavaのみ動いている状態になります。
![ideforgr-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/2516428b-6595-08e2-4ca4-14fc1afcf9be.jpeg)

Arduinoは問題なく立ち上がります。
![ideforgr-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/4475d3a2-17f0-00b1-3934-89ffe002a9c2.jpeg)

そんな時は、IDE for GRがあるフォルダに「portable]というフォルダを作ります。
![ideforgr-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/02817194-0419-eca7-a2ef-2b85a2af1bc3.jpeg)
これで起動するようになります。
![ideforgr-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/724efc4c-c5c6-4b9d-4c72-99c5fc49f948.jpeg)

これはArduinoIDEが立ち上がらないときと同じ手法になります。
Elasticsearch で update 時にドキュメントの配列フィールドに重複せず追加したい

Elasticsearch で update 時にドキュメントの配列フィールドに重複せず追加したい。

参考：[Elasticsearch公式(docs-update)](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html)

確認用のテストデータを以下とする。

```
PUT test/_doc/1
{
    "tags" : ["red"]
}
```

取得するとこんな感じ。

```
GET /test/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "tags" : [
            "red"
          ]
        }
      }
    ]
  }
}
```

「tags」に"green"が存在しない場合に追加する。

```
POST test/_update/1
{
    "script" : {
        "source": "if (!ctx._source.tags.contains(params.tag)) { ctx._source.tags.add(params.tag) }",
        "lang": "painless",
        "params" : {
            "tag" : "green"
        }
    }
}
```

確認のため、もう一度実行する。

```
POST test/_update/1
{
    "script" : {
        "source": "if (!ctx._source.tags.contains(params.tag)) { ctx._source.tags.add(params.tag) }",
        "lang": "painless",
        "params" : {
            "tag" : "green"
        }
    }
}
```

結果：「green」は一つのみ追加されている。

```
GET /test/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "tags" : [
            "red",
            "green"
          ]
        }
      }
    ]
  }
}
```

削除：「green」が存在する場合のみ実行する。

```
POST test/_update/1
{
    "script" : {
        "source": "if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }",
        "lang": "painless",
        "params" : {
            "tag" : "green"
        }
    }
}
```
Media2Cloud 2.0 now live 和訳してみた

##はじめに
2019年12月11日に Jack Wenzinger 氏が掲載された「[Updated 11-December] Media2Cloud 2.0 now live: Increased control, SageMaker Ground Truth integration, and more partner support」を和訳し、まとめました。
本記事は下記リンク参照。

■リンク
[[Updated 11-December] Media2Cloud 2.0 now live: Increased control, SageMaker Ground Truth integration, and more partner support](https://aws.amazon.com/jp/blogs/media/updates-for-media2cloud-increased-control-sagemaker-ground-truth-integration-and-more-partner-support/)


##MEDIA2CLOUD VERSION 2.0 RELEASED
###MEDIA2CLOUD
[Media2Cloud](https://aws.amazon.com/jp/solutions/media2cloud/) は、ビデオコンテンツ管理に必要なデータや画像の確立、そしてクラウド移行のためのワークフローの設定サポートを行うサービスです。コンテンツの取り込み・保存・処理・配信・管理などを、クラウド上で簡単に行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/691e3d15-43fc-a544-2681-20644b2e7a03.png)
Media2Cloud はビデオコンテンツを取り組むために必要な項目を網羅したサービスとなっており、以下の特徴があります。
■ Media2Cloud の特徴

- フレームワークに AWS Machine Learning でビデオ資産のベースラインメタデータを増強するトリガーを含む
- ビデオアセットには、以下の3つの AWS サービスを利用
 - 物体検知や顔認識には Amazon Rekognition
 - 音声テキストの作成には Amazon Transcribe
 - コンテキストメタデータの作成には Amazon Comprehend

Media2Cloud はとてもエラスティックなサービスであるため、同じ要件であれば、同じワークフローを使用して日々の運用とアーカイブの移行をサポートすることができます。そのため、異なるワークフローを作り、キャパシティの対応をする必要がありません。

###WHAT’S NEW
そして、この度 Media2Cloud 2.0 が正式にリリースされました。これによりユーザはより簡単に、そしてより迅速にワークフローを AWS に取り込めるようになりました.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321349/ac491f43-9d84-1e54-7242-e878c0c48716.png)
Media2Cloud に関する新たな追加情報は以下となります。

- 使用する機械学習サービスと、ソースコンテンツに含まれる言語の選択するための構成パネルをサポート
 - 用途に合わせた的確なサービスを選択可能 
- Amazon Rekognition の構成には不適切なビデオ検出機能を追加
- SageMaker GroundTruth を追加し、カスタムフェイスキュレーショントレーニングをサポートするクラウドソーシングツールが提供可能


##まとめ
アップデート情報は以上となります。
名前の通り、メディア関連に特化した新サービスとなっておりますので、メディア業界で AWS の利用を考えている方は、この機会に是非こちらのサービスを利用してみては如何でしょうか。
ワーママエンジニアに必須の家電設備3つ(ビルトイン編)

# はじめに
こんにちは。部署内唯一のワーママエンジニアをしております。
以前Alexaの記事を書いてからだいぶたちましたが
今回は2019 Advent Calendar向けに書いてみたいと思います
(いまだにMarkdownはうまく書けないのでレイアウトが変なところはご容赦ください)
TECHPLAY女子部 Advent Calendar 2019 - Adventar
https://adventar.org/calendars/3984

###家族構成と背景
両親ともIT企業勤務ともにエンジニア職で、娘1人を育てています。
最近家を建てました(いわゆる狭小住宅)。機会がありましたら家を建てるところのおすすめポイントもまとめてみたいです。

#おすすめ家電設備3つ

### ガス衣類乾燥機「乾太くん」
今回家を建てて、ダントツの一番はこれ。
洗濯機の、ではなく、ガスで一気に乾燥させるのがポイントです。
すごく早く乾きます。
乾太くん：カラッと解決 - リンナイhttps://rinnai.jp/lp/kanta/
うちはシーツも乾燥させたかったため、デラックスタイプ(RDT-52SA)を入れました。

保育園では猛烈に着替えをしてきます。
少なくとも1回、乳児だと1日2回以上着替えるときもありますね。
そんなときこれは本当に便利です。正直大革命だと思います。
洗濯物が1h弱ぐらいで全部乾きます。ずっとドライヤーかけてるようなもんですね。すごいです。
こちらは、おそらく家を建てるときにしかつけづらいのかなと思いますが、
あとづけするとより高いので、家を建てるときに必ずつけることをおすすめします。
ただ、かけすぎると衣類は縮むので、下着とか靴下とかタオルとか、こまごましているものを
重点的にかけますが、
緊急のときはぜーんぶかけちゃうときもあります(笑)
上履きもすぐに乾きますし、消臭機能もあるので、ちょっと臭いが気になるものを入れておいて臭いを飛ばしたりとかもできます。

メリット：

- 天気関係なし
- 時間帯関係なし
- 夜中に帰ってきても、明日朝必要なものがすぐ乾かせる
- なによりフワフワな仕上がり

デメリット：

- 衣類には負担をかけるので、デリケートなものには使えない(衣類が縮んだり薄くなったりする)
- 多少音が出る
- 厚物はたまに乾ききらないことがある(バスタオルを大量に入れると厳しい)!

### 「深型」食器洗い乾燥機(食洗機)
こちら、深型というのがポイントです。
通常何も言わないと45㎝の普通の大きさのものがキッチンにビルトインされてしまいますが
幅60㎝にするか、深型にするかは非常に大事だと思います。容量が全然違います。
それにより、まな板、(いいかどうかは置いといて)フライパン、お玉、コップ、大きめのお皿が一気に入ります。
1日1～2回まわしています。皿洗いの手間から解放され、手も荒れないし、好きなコップをどんどんかわるがわる使えるし、ホームパーティーやっても苦じゃありません。
うちは、タカラスタンダードのオフェリアというキッチンにビルトインした
NP-45MD8Wを入れています。
ビルトイン食器洗い乾燥機 | Panasonic
https://sumai.panasonic.jp/dishwasher/
細かいですが、スイッチはぜひ開けたところの上部にあるやつがおすすめです。
側面にあると、料理しながらスイッチに当たってしまい、勝手につくことがあるそうです(母談)

メリット：

- 手荒れ無し
- 夫婦間でどちらが食器洗いするか？を揉めなくなる
- 油が残りやすいプラスチック製のタッパーもピカピカ
- 洗剤をタブレットにすれば、底に投げ入れるだけ
- 空いた時間に子供と遊べる

デメリット：

- 時間がかかる
- 食器の置き方によっては乾燥しきっていないことがある
- 洗えるものとそうでないものをいちいち考えながら食洗器に入れる必要がある
- お椀類は洗い残りが発生しやすい


### 床暖房
2階建て以上の場合は、1Fも2Fも両方つけることを強くおすすめします。
家が寒くても、床暖房を起きる直前から、または寝る直前タイマー設定しておけば
朝も夜も寒さが和らぎます。
それでも寒いときは、30分以内ぐらいでエアコンと併用して、エアコンはすぐ消して
床暖房はつけつづける、みたいなのがちょうどよいです。
ガス設備は、ハウスメーカーで勝手に決めちゃったので選べませんでしたが
Purposeの24号、オートのやつだったと思います。
24号ってなんだ？と思う方、号数は「温水が出せる能力」だと思ってください。
号数が高いほうが床暖＋各所で同時にお湯を使えるので非常に便利ですよ。
メーカーによるのかもしれませんが、パネルの系統は独立して動かせるほうが圧倒的に便利です。
うちは、残念ながらそちらをケチったのでタイマーをONにすると
両系統(リビング側とダイニング側)がついてしまうので、起きたあとに片パネル消してます。

メリット：

- 乾燥しにくい
- 時間帯タイマー(入と切)機能があるためコントロールしやすい
- 家全体を暖めやすい
- 電源を切ってもある程度は暖かい

デメリット：

- 温まるまで時間がかかる
- ガス代はかかる
- 熱源がみえないためついつけっぱなしにしがち
- 床暖対応の床材は少なめで選びにくい(とくに無垢材の場合)


#まとめ

- 乾太くんは家事革命だよ
- 食洗器は大きいほうがいいよ
- 床暖は各階につけよう

エンジニアらしさが全然一つもなくてごめんなさい。
家を建てるときの参考になれば幸いです。

本当は…これらを全部Alexa対応にしたかったけれど
今のところそれはできていないのが残念。

ではまた。
Tomcatとは

学習用資料

###サーバーとは何か?

一言で言うと、リクエストを受け取ってそれに対してレスポンスを返すもの。
例えば、一般的なwebサイトではURLというリクエストをサーバーに送ってhtmlをレスポンスでもらう。
プログラミングにおいて、サーバーを作ろうと思った時言語の中にサーバーを簡単にたてれるものがあるがJavaに関していうとそれは難しい。なので、あらかじめサーバーの機能が入ったものをインストールしてそれと連携してサーバーを作っていく。

###Tomcatとは何か?

Tomcatはサーバーの機能が入ったものでJava Servletと連携しやすくしたものである。
ということで、簡単なサーブレットを作ってみよう。
まずはイクリプスを開く。ここで右上の×ボタンの下がJava EEが青くなっていることに注意。

![java.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/f4ab65fe-1c1f-a8fc-48af-f5876bc606c1.png)


ここで右クリック→New→DynamicProjectでDynamicProjectを作成する。
ProjectNameやTarget runtimeを設定するところがあるので設定する。
TomcatがインストールされてなければTomcatのインストールが必要となる。
ProjectNameは適当に設定するとして、Targetruntimeは自分が選択したTomcatのバージョンを選択しダウンロードしたTomcatファイルと紐づける。

![java2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/f86cecbc-31e5-43bc-0c15-8dc860feb8f5.png)

設定し終えたらfinishを押す。

![java3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/d92d052a-772e-e0ed-393d-8171c1108209.png)

src直下にmainという名前でPackageを作成し、その中に新規でTestというClassNameでServletファイルを作成する。
Package作成、Servletファイル作成どちらも右クリックで行うことができる。

作ったら、上の画像の下にあるServersと書かれているところの下をクリックする。

![java4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/091fccb0-440a-aa06-2e8c-3204c1616fe3.png)

そして、最初にTargetRuntimeで選んだものと一緒のTomcatのVersionをクリックして選択。

![java5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/47f1552c-68cc-50ef-3d62-86de372d39db.png)

Addを押してFinishを押すことでサーバーを作成することができる。

後はサーバーをクリックして、虫マークをクリックすると、サーバーが起動する。
デフォルトだとlocalhost:8080/sample-project/Testをたたくと、レスポンスが返ってくる。
実行結果
![java6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514262/f076da7c-bbae-cea1-238b-b639c99a5d4a.png)
date-fns を Deno から使う

Deno (ディーノ) <img src="https://raw.githubusercontent.com/kt3k/drafts/master/assets/deno.png" width="20"> Advent Calendar 18日目の記事です.

今日は [date-fns][] を Deno から使う話です.

# [date-fns][] とは

<img src="https://raw.githubusercontent.com/kt3k/drafts/master/assets/date-fns/logo.png" />

[date-fns][] はとても機能が豊富な時刻を扱うためのライブラリです. 一昔前は, 時刻といえば [moment](https://momentjs.com/) を使うのが一般的でしたが, 最近では moment のバンドルサイズが大きすぎることや, API のデザインの筋の悪さ(破壊的なメソッドが多い)から moment 代替のライブラリがいくつか活発に開発されています. その中でも人気が高いライブラリの一つが date-fns です.

date-fns は moment や [dayjs](https://github.com/iamkun/dayjs) などと違い, 時刻を表すための独自クラスを持たない点が特徴です. 独自クラスを使わずに JavaScript の builtin 型である Date 型を, API の入出力として使います. つまり date-fns は, ライブラリ内で状態を保持することはなく, 全てが純粋な関数の API として表現されています. この点から date-fns は自身を `日付のための lodash` と表現しています.

具体的な date-fns の使い方を見てみましょう.

```js
import { compareAsc, format } from 'date-fns'

const label = format(new Date(2014, 1, 11), 'yyyy-MM-dd', {})
console.log(label)
//=> '2014-02-11'

const dates = [
  new Date(1995, 6, 2),
  new Date(1987, 1, 11),
  new Date(1989, 6, 10)
]
dates.sort(compareAsc)
console.log(dates)
// => [ 1987-02-10T15:00:00.000Z, 1989-07-09T15:00:00.000Z, 1995-07-01T15:00:00.000Z ]
```

format は Date とフォーマット指定子を受け取って, フォーマット結果を返す関数です. 1引数目に builtin の Date 型を受け取っています.

compareAsc は Date を2つ受け取って, 大小関係を比較します, 上の例では sort の比較関数として利用しています.

この例からも分かるように, date-fns の API は純粋な関数で, Date を入出力として使い, ライブライ自体は状態を持ちません.

# Deno から使うには

date-fns を Deno (ディーノ) から使うには以下のようにして API を import して使います.

```js
import { compareAsc, format } from 'https://deno.land/x/date_fns/index.js'

const label = format(new Date(2014, 1, 11), 'yyyy-MM-dd')
console.log(label)

const dates = [
  new Date(1995, 6, 2),
  new Date(1987, 1, 11),
  new Date(1989, 6, 10)
]
dates.sort(compareAsc)
console.log(dates)
```

(なお, 上の例を `deno eval "コピペ"` のように実行する事も出来ます.)

import 文以外は上の例と同じです. from に指定するモジュールが Deno の場合は `https://deno.land/x/date_fns/index.js` になります. Deno は URL から直接モジュールを import 出来るため, このような指定の仕方になります.

上の例を実行すると分かりますが, この書き方の場合, date-fns 全体を一旦ローカルに全てダウンロードすることになります. これは `https://deno.land/x/date_fns/index.js` というスクリプトが date-fns の全ての API を内部で import しているからです. 次のように import 文を書き換えると, date-fns の必要部分だけを import する事が出来ます.

```js
import compareAsc from 'https://deno.land/x/date_fns/compareAsc/index.js'
import format from 'https://deno.land/x/date_fns/format/index.js'

...
```

# date-fns が Deno から使える理由

date-fns が Deno で使えることは, Deno で本格的な時間の処理が行えることを意味します. 大抵の Web サービスでは, かなりややこしい時間の処理が必要になることが多いため, これは Deno のエコシステムにとって重要な意味があります.

では, date-fns を Deno に移植するために Deno チームはどのくらいの時間をかけたのでしょうか? 実は全く何もしていないのです. date-fns は [src 以下のソースコード](https://github.com/date-fns/date-fns/tree/master/src)をブラウザで直接 import できるようなスタイルでプログラミングしています (npm にはそれを transpile したコードを publish しています). Deno の import は可能な限りブラウザの import と同じルールで path を解決するという方針で作られているため, ブラウザ用の date-fns が Deno でそのまま使えたのでした.

この事実に気づいた @justjavac さんが, Deno のレジストリに date-fns を追加する [PR](https://github.com/denoland/registry/pull/154) を投げた事で, https://deno.land/x/date_fns/ 以下の名前空間で date-fns を利用する事が出来るようになっています.

# まとめ

今日は Deno で date-fns を使う方法を紹介しました.

明日は @sasurau4 さんの Denobook2 を英訳して, 渡米して, 本を届けた話です.

[date-fns]: https://date-fns.org/
font-family: serifのみの指定で日本語明朝体が表示されるかチェックする

canvasにsans-serifとserifで「あ」を描画して差異があるかどうかを見るという方法です。

[デモ](https://ksk1015.github.io/has-jap-serif/)

```javascript:hasJapSerif
function hasJapSerif () {
	const size = 16
	const canvas = document.createElement('canvas')
	const ctx = canvas.getContext('2d')

	canvas.width = size
	canvas.height = size

	ctx.fillStyle = '#000'
	ctx.textAlign = 'start'
	ctx.textBaseline = 'top'

	ctx.font = size + 'px sans-serif'
	ctx.fillText('あ', 0, 0);
	const pixels1 = ctx.getImageData(0, 0, size, size).data

	ctx.clearRect(0, 0, size, size)
	ctx.font = size + 'px serif'
	ctx.fillText('あ', 0, 0);
	const pixels2 = ctx.getImageData(0, 0, size, size).data

	for (let i = 0, ii = size*size*4; i < ii; i++) {
		if (pixels1[i] !== pixels2[i]) {
			return true
		}
	}
	return false
}
```

これを利用して、Androidなど日本語明朝体がバンドルされてないデバイスのみ、日本語明朝体のウェブフォントを読み込むということができます。

```javascript
if (!hasJapSerif()) {
	const link = document.createElement('link')
	link.rel = 'stylesheet'
	link.href = 'https://fonts.googleapis.com/css?family=Noto+Serif+JP'
	document.head.appendChild(link)
}
```

去年のAdvent Calendarで[シンプルにfont-familyを指定したい](https://qiita.com/ksk1015/items/9d2028454ee144c64c60)記事を書きました。

その記事で全ての主要なデバイスで日本語明朝体を表示する方法の一つに、UserAgentを見てAndroidの場合はGoogleFontsのNotoSerifを読み込むという雑なサンプルコードを紹介しました。

その記事を書いた2018年末、そしてこの2019年末も、主要デバイスで日本語明朝体をバンドルしてないのはAndoridだけですが、この判定方法はもちろんスマートではないですし、今後、Androidで日本語明朝体がバンドルされて font-family: serif の指定だけで日本語明朝体が表示されるようになる可能性もあるので、ちゃんとしたものを投稿しました。

わざわざ日本語明朝体がバンドルされてない場合のみウェブフォントを読み込み適用させる方法をとりたいのは、読み込むリソースの容量をできるだけ小さくしたいだけでなく、ウェブサイトのフォントはどのデバイスでもできるだけ同じにするのではなく、そのデバイスにバンドルされてる標準なフォントをできるだけ使う、という考え方をしてるのもあります。
gitpressでブログを作るときに詰まった話（Windows10）

# gitpressでブログを作るときに詰まった話（Windows10）

## gitpressって何なの？
GitHubのリポジトリを誰でも簡単に個人ブログへと変換できる無料のWebサービス。
[gitpress](https://gitpress.io/)

やり方は以下のサイトを参考にしました。
[Pushするだけ！GitHubのリポジトリを個人ブログに変えてくれる【GitPress】を使ってみた！](https://paiza.hatenablog.com/entry/2019/06/19/Push%E3%81%99%E3%82%8B%E3%81%A0%E3%81%91%EF%BC%81GitHub%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E5%80%8B%E4%BA%BA%E3%83%96%E3%83%AD%E3%82%B0%E3%81%AB%E5%A4%89%E3%81%88%E3%81%A6 "GitPress")

## Windowsでの環境構築
・githubアカウントを作成
　[github](https://github.com/)
・GitPressが公式に用意しているテンプレート(ボイラープレート)をフォーク
・GitHubアカウントと連携
・ブログにしたいリポジトリを選択

といった流れです。
参考にした上記サイトではgithub上から新しいファイルを作り、markdownで記事を書いていました。
でもローカルPC上で記事を書いてgithubにpushして記事をアップロードしたいときもありますよね？（無いかな笑）
そんなときはどうするんだろうか。github初心者の私には荷が重いか？？やってみよう。

## ローカルPC上で記事を書いてgithubのリモートリポジトリにpush
まず以下の2つを行います。
・Windows用のGitをinstall
　[Gitダウンロードページ](https://gitforwindows.org/)
・Git GUIで任意のフォルダーにリポジトリ作成
その後、test.mdとして適当にmarkdownで記事を書きます。

```
# こんにちは初投稿です
## これはテストです
あはははは
```

これをgit bashを開いて、githubにpushします。(コマンドプロンプトからでもいけた)

```
#初期化
git init
#コンテンツ（ファイルなど）を見つけてインデックスに追加
git add .
#コミット
git commit -m ‘test’
#リモートリポジトリの登録
git remote add origin "記事を上げるgithubリポジトリのURL(https://github.com/(アカウント名)/boilerplate.git)"
#プッシュ
git push -u origin master
```
```
! [rejected]        master -> master (fetch first)
```


あれ？怒られた？github初心者の私はここでけっこう詰まってしまいました。
いろいろ調べるとこんな記事が。
[git push -u origin masterでrejectにハマる](https://qiita.com/watsuyo_2/items/aa95e54c4974a80123e9)
[git pushがrejectされたときの対応方法](https://www.softel.co.jp/blogs/tech/archives/3569)

この記事のコメントに
>README.mdとか、リモートリポジトリにあって、ちゃんとマージできてなかったから

と書かれていたので、

```
#リモートの変更を取ってきて
git fetch
#マージする
git rebase origin/master
```

これをやった後に、再度以下を実行

```
git init
#コンテンツ（ファイルなど）を見つけてインデックスに追加
git add .
#コミット
git commit -m ‘test’
#プッシュ
git push -u origin master
```
無事以下のようにtest.mdがpushされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542929/dadbff28-bd4b-6374-4324-ef74c6e50bdd.png)

さて、gitpressの自分のページにいってみると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542929/f938ebbe-a23d-79c8-41f1-47ad98afb984.png)

記事ができている！これでブログをはじめられるぜ！
無事ブログをはじめられそうです。（ちゃんと書くかは不明）

## まとめ
gitpressでブログを始めるための流れと、記事をpushする際に詰まった時の対処を書きました。
「技術系の話を書くときはQiitaで良くない？ブログいる？」という話にはお答えできませんのであしからず...。
（業界に関するポエムを書く時とかはブログがいいかも...）
フォームに関する基礎知識をつける　Ruby on Rails

## 新規作成フォームと更新フォーム中身は同じ？でも何かが違う！

**中身 = 入力欄が記載されている_form.html.erbなどのことです**
**違い = action 属性**

下記のような_form.htmlはnewとedit両方に使用されます。(中身は同じ)

```rb

<table class="attr">
    <tr>
        <th><%= form.label :name, "ユーザー名"%></th>
        <td><%= form.text_field :name %></td>
    </tr>
    <tr>
        <th><%= form.label :birthday, "誕生日",
                    for: "member_birthday_li"%></th>
        <td><%= form.date_select :birthday,
                 start_year: 1970, end_year: Time.current.year,
                 use_month_numbers: true%></td>
    </tr>
    <tr>
        <th><%= form.label :email, "メールアドレス"%></th>
        <td><%= form.text_field :email %></td>
    </tr>
    <tr>
        <th>管理者</th>
        <td>
            <%= form.check_box :administrator %>
            <%= form.label :administrator, "管理者" %>
        </td>
    </tr>
</table>
```


```rb
<% @page_title = "会員の新規登録"%>

<h1><%= @page_title%></h1>

<%= form_for @member do |form|%>
    <%= render "form", form: form %>
    <div><%= form.submit %></div>
<%end%>
```

しかしページのソースを確認するとaction属性が違うのです！そもそも遷移しているURLが違うのだから当たり前だろと思うかもしれませんが、初心者の僕からした頭をこんがらせた要因でもありました。
複数人のいるサーバー上で自分のIDでGitにコミットしてプッシュする

# はじめに
複数人のいるサーバー上でGitにコミットした時、本当にあなたがコミットしていますか。
もしかしたら知らないうちに他人の草を生やしてあげている...
そんなことがあるかもしれません。
今回はそんなことを防ぐため、複数人のいるサーバー上で自分のIDでGitにコミットしてプッシュの仕方をメモします。
（ちょっとだけbacklog）

＊これは初心者が書いています。初心者のメモだと思って読んでください。


# 手順
コミットするときに以下を付け足す。
`git commit --author='Author Name <author@git.com>'`

これをプッシュする
`git push -u REMOTENAME BRANCHNAME`

きっとあなたの名前でコミット＆プッシュされているでしょう。
（backlogを使っている人はbacklogにも反映されているでしょう。）


# なぜGitを使うのか
- 誰がどこを直したのかわかる
- こまめにコミットすることで戻りやすい
- バックアップとして使える
- 各自のアカウントを使うことでリポジトリへのアクセスを制御できる
- 差分が見やすい

Gitについての基本的な知識はこちら↓
https://backlog.com/ja/git-tutorial/

# 【超訳】Gitメモ
## git
- gitはコマンド
- gitは記録をしてくれる
- githubはサービス
- リポジトリは情報の塊（フォルダ）
- リポジトリはサーバーじゃない

ざっくり、こんな感じ....
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540578/649356dd-4f83-4818-62e3-07b845b228e9.png)



## gitとbacklog
gitとbacklogの関係がよくわからなかった時の個人的メモ。

- backlogもサービス
- backlogが自分のところにリモートリポジトリを置かせてくれているので、pushするとbacklogに反映される
- github, backlogは記録をクラウド上に持っていてくれる



# さいごに
Gitわかんないけど、いいことたくさんあるみたい...という気持ちをゆるく書いてみました。
何か間違いがあったらご指摘ください。

明日は@blackcokoa さんです！
システム開発で納得感を持って進めるために考えていること

# はじめに
日々、システム開発をする上で、開発内容について納得感を持って進めたいと思っています。
どのような観点で要件について考えれば、納得感を持てるのかまとめました。

# 要件例
TODOアプリを例にして、各観点について説明していきます。
このアプリは世の中の課題解決をスムーズにすることを目的としており、
課題とゴールを入力するフォーマットが特徴です。
<img width="664" alt="article20191214_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243624/7aff0536-84a4-b6ab-ce1f-8cfe69baa0f0.png">

# 要件の実現にかけてもいいコスト感はどれくらいか？

ビジネスとしてサービスを提供する以上、適切なQCDでシステムを開発することが求められます。
あらかじめコスト感について合意することで、ビジネスとして成立するラインの指標を把握します。
コスト感を超過するとき、仕様やシステム設計を作り込み過ぎていることを検知できます。

そのコスト感の程度や根拠によって、ビジネス全体における目的の重要度について把握することができます。

例）

- 早く世の中に出すことでフィードバックを受けることを優先して、1ヶ月のコスト感としたい。

# 期待される成果は何か？

ビジネスとしてサービスを提供する上での指標があるはずで、
今回の要件を実現することでどの指標に寄与する成果を出すのかを把握します。
ビジネスの戦略の中で今回の目的や要件を位置付けることができます。

例）

- KPIとして掲げている利用者数の向上に寄与する。
- 課題解決の研修事業を展開する上で、補助教材となるアプリを開発したい。

# 要件が前提としている事実は何か？
前提を洗い出すことで、目的の背景や思い描くストーリーや世界を聞くことができます。

例）

- 課題とゴールを明確にして行動することで、世の中の課題解決がスムーズになることが前提としてある。

# その事実は十分に検証されているか？
前提とする事実について、根拠の有無を把握し、目的をより明確に知ることができます。

- 十分に検証された事実をもとに成果を出したい
- 前提となる事実を確実なものにするための検証をしたい

例）

- 上記の事実は課題解決の論文を根拠としており、その論文で検証されている。
- 検証された事実をもとにした要件なので、成果を出すことを目的としている。

# 目的を達成するために他に検討したことは何か？
目的を達成するための手段はいろいろあるはずです。
他の手段を検討する中で、目的を達成するためによりコストがかからない手段が見つかるかもしれません。
検討内容と不採用理由について明らかにすることで、今回の手段がよりよいものであることの納得感を得ます。

手段について検討することで、別の前提としている事実が得られたり、
各手段を比較することで、今回の手段のメリットやデメリットが見えてきます。

例）

- TODOアプリという手段が適切か？スケジュール管理アプリのアドオンの方が使ってもらえるのではないか？
- フォーマットを設けることで本当に目的を達成できるのか？形骸化しないか？

# 要件によるリスク
要件によるリスクを把握することで、最悪の事態が発生したときに緊急で対応することへの納得感を得ておきます。

- 期待通りに動作しないときの影響
- スケジュール通りにリリースできなかったときの影響

# まとめ

以上の納得感を得ることで、やらされてる感がなくなります。
また、その要件の背景や考え方に対する深い理解につながると感じました。
やらされてるどころか、よいサービスを提供することに対して貢献している感覚を持てます。

明日は [@weakboson](https://qiita.com/weakboson) さんの「docker build を使わずコンテナの中身をいぢる」です。お楽しみに！
【Unity】NestedPrefabの速度面を検証してみた

この記事は[【unityプロ技②】 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/unityforpro2)の14日目の記事です。

*記事に登場するコードはパブリックドメインです*

#NestedPrefabは爆速である？

Unity2018.3より前から開発していたプロジェクトにおけるフィールドデータで、現在のNestedPrefabのようにプレハブを入れ子にした場合でも子プレハブ側の変更が反映されるようにしたいことがありました。

これを実現するため、プレハブ内には仮オブジェクトを置いておき、実行時にプレハブから生成したものに差し替えるようにしていました。

これをNestedPrefabに移行した際に強く感じたのが **シーンのロードが爆速になった！！** ということです。

*NestedPrefab is 爆速？* 今回はこの仮説をエディタ上で簡単に検証してみました。

#確認環境

- macOS High Sierra 10.13
- プロセッサ 2.6 GHz Intel Core i7 クアッド
- メモリ 8 GB 1600 MHz DDR3
- Unity2019.2.13f1

#Instantiate vs Nested 

まず実行時に生成するパターンですが、以下のようにSerializeFieldに設定したプレハブからInstantiateします。

```csharp
[SerializeField] private GameObject[] prefabs = null;

void Awake()
{
    var t = transform; 
    for (int i = 0; i < prefabs.Length; ++i)
    {
        Instantiate(prefabs[i], t);
    }
}
```

<img width="319" alt="スクリーンショット 2019-12-14 13.59.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530201/cdbe20d0-8d53-fd40-a5ee-b8daeca274ee.png">

Nestedのほうは直接プレハブの中に入れます。Instantiateのほうでは子プレハブをInstantiateするためのスクリプトを付けていることや`Awake()`がコールされることのオーバヘッドで速度差が出るかもしれないので、空のAwakeだけ実装したスクリプトをルートに貼り付けておきました。

<img width="209" alt="スクリーンショット 2019-12-14 14.11.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530201/d9260627-fd9e-44f1-9f73-8393c8cfa5ad.png">
<img width="303" alt="スクリーンショット 2019-12-14 14.14.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530201/b1029c06-dfc0-a668-a6df-fefbd472ce7c.png">

どちらもプレハブのロードには`Resources.Load()`を使用します。また、生成が1個だけだとすぐ終わってしまうので同じプレハブを100個生成します。この条件での検証結果は以下の通りです。

|                    |Serialize & Instantiate|            Nested |
|:-------------------|----------------------:|------------------:|
|Resources.Load()    |                    2ms|                2ms|
|100個生成            |               13〜14ms|          **7〜8ms**|

ロード時間に差はなしでしたが、生成は**40%ほど早くなっていました**。

Instantiateを使用することによるオーバヘッドを考えれば想像がつくことではありましたが、やはり実測値としてもNestedPrefabを利用することで高速化が見込めることは間違いなさそうです。

ここでは子プレハブを参照するのにSerializeFieldを使用していますが、子プレハブもそれぞれ`Resources.Load()`でロードしてくるようなケースではロード時間にも大きな差が出るでしょう。AssetBundleなら尚更です。

#Nested vs Unpack

ついでに子プレハブを全てUnpackして1つのプレハブに統合した場合との比較も行いました。

<img width="179" alt="スクリーンショット 2019-12-14 14.32.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530201/27766a60-8382-8238-d701-b1d3eb7091a4.png">

|                    |          Nested|            Unpack |
|:-------------------|---------------:|------------------:|
|Resources.Load()    |             2ms|                2ms|
|100個生成            |          7〜8ms|              7〜8ms|

こちらは特に差は出ませんでした。どちらの場合でも内部で最大限に最適化されていることが予想できます。

#まとめ
今回の検証ではNestedしているプレハブは5個だけでしたが、僕が爆速になったと体感したフィールドデータはもっと大量のオブジェクトが入っていたので規模が大きくなればなるほどNestedPrefabの恩恵も大きくなるでしょう。

NestedPrefabを含めプレハブのワークフローが改善されたことで利便性がとても向上しましたが、同時にパフォーマンス最適化の面でも活用の幅が広がったように思います。
paizaでkernel開発

#概要

paizaでkernel開発やってみる。

#閃きのイメージ

①　paizaでkernelコンパイルする。
②　どうにかして、windowsに持ってくる。
③　qemuで実行する。
④　①に戻る。

#vistaで動くqemuを探す。

これは、③を実現するため。
動いたのは、以下の2品。

　qemu-0.6.0
  qemu-0.15.1

#qemu起動


```
qemu -fda nano.img
```

#写真

![image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/db13bc51-4f2b-7f51-b849-cedfb95091d0.png)


以上。
CircleCI+ActiveStorageでRspecがコケる(undefined method `upload' for nil:NilClass)

表題の通り。

## 結論から。
### 原因
ActiveStorageの設定ファイルであるstorage.ymlに本番用の保存先(AWS S3)のSecretKeyなどをENV.fetchでセットしていたことが原因。
テスト用の設定しか使わないが、ymlを読んだ際に本番用環境変数もセットされていないとエラーになる。

エラーになるが、Rspecのテストでは
```undefined method `upload' for nil:NilClass```
と表示されてしまうのが鬼門。

### 対応策
config/environments/test.rbで設定している通り、本番用の設定は実際には使わない。
そのためCircleCIの設定で該当の環境変数についてダミーの値をいれておいたらPassした。

## まとめ
Rspecにはエラーメッセージわかりにくい大賞を授与いたします。
Julia(JuliaLang)学習に役立つリンク一覧 2020.01

# 公式サイト

- Home：https://julialang.org/
- Docs
  - en : https://docs.julialang.org/en/v1/
  - ja : https://hshindo.github.io/julia-doc-ja-v0.6/manual/introduction.html
- Github 
  - JuliaLang：https://github.com/JuliaLang/julia
  - IJulia：https://github.com/JuliaLang/IJulia.jl

# Qiita

- [Juliaタグ](https://qiita.com/tags/julia)
- [Juliaことはじめ](https://qiita.com/hironey/items/3f6ee669b5d3c82f0598)
- [Juliaという速くて書きやすい言語をちょっとだけ覗いてみた～](https://qiita.com/sadayuki-matsuno/items/fc5e9ec3894a4b7bfbfb)
- [2019年クリスマスシーズンからプログラミング言語Juliaを始める～](https://qiita.com/SatoshiTerasaki/items/a2f3e4bb0485c1af8254)

# ブログ記事・Webサイト

- [Julia By Example](https://juliabyexample.helpmanual.io/)
- [Python使いをJuliaに引き込むサンプル集](http://www.mwsoft.jp/programming/julia/python_to_julia.html)

# Twitterおすすめハッシュタグ

- [julia言語](https://twitter.com/hashtag/julia%E8%A8%80%E8%AA%9E?src=hash&ref_src=twsrc%5Etfw&amp=)
- [julialang](https://twitter.com/hashtag/julialang)

# 書籍

- [Juliaプログラミングクックブック](https://www.oreilly.co.jp/books/9784873118895/)
    - 読書メモ参考：[Juliaプログラミングクックブックを読んだ感想＠Qiita](https://qiita.com/regonn/items/59ed03ac6304d818b385)

# おまけ

- [Julia vs Python: Which is best for data science](https://www.infoworld.com/article/3241107/julia-vs-python-which-is-best-for-data-science.html)
年末まで毎日webサイトを作り続ける大学生 〜55日目 JavaScriptでインベーダーゲームを作ろうとした〜

##はじめに
こんにちは！@70days_jsです。

インベーダーゲームを作ろうとしました。
失敗して、ビームを出すだけのゲームになってしまいました。
インベーダーはいません。

今日は55日目。(2019/12/12)
よろしくお願いします。

##サイトURL
https://sin2cos21.github.io/day55.html

##やったこと
ビームを出すゲームを作りました。(gif)↓
![test3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516248/e885a3e5-f8d0-c818-7350-27ea764a1606.gif)

gifにある通り、赤いのが自分で、青いのがビームです。
矢印キーで動きます。（←で左、→で右）
エンターでビームを出します。
端まで行くとそれ以上いけないことを示すために機体の色が青くなります。

html（全文）↓

```html
  <body>
    <div id="wrapper">
      <div id="me"></div>
    </div>
  </body>
```

薄い赤の全体部分がid="wrapper"です。
id="me"はビームを出す赤い機体です。

css（全文）↓

```css
body {
  overflow-x: hidden;
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100vw;
  height: 100vh;
}

#wrapper {
  width: 500px;
  height: 500px;
  background-color: rgba(150, 50, 150, 0.3);
  position: relative;
  overflow: hidden;
}
#me {
  width: 50px;
  height: 25px;
  background-color: red;
  position: absolute;
  bottom: 0;
  left: 220px;
}

.beem {
  width: 10px;
  height: 50px;
  background-color: aqua;
  position: absolute;
  bottom: 25px;
  left: 0px;
  animation: go 1s ease 0.5s;
  opacity: 0;
}

@keyframes go {
  0% {
    transform: translateY(0);
  }
  1% {
    transform: translateY(0);
    opacity: 1;
  }
  100% {
    transform: translateY(-450px);
    opacity: 1;
  }
}
```

ビームの移動はアニメーションです。

JavaScript（全文）↓

```javascript
let me = document.getElementById("me");
let wrapper = document.getElementById("wrapper");
document.addEventListener("keydown", logKey);
let kyori = 220;
let idou = 5;

function logKey(e) {
  let myKeyCode = e.keyCode;

  // ← キー
  if (myKeyCode === 37) {
    // 左端
    if (kyori < 5) {
      me.style.backgroundColor = "blue";
    } else {
      me.style.backgroundColor = "red";
      me.style.left = (kyori -= idou) + "px";
      kyori -= 5;
    }
    // → キー
  } else if (myKeyCode === 39) {
    //右端
    if (kyori > 445) {
      me.style.backgroundColor = "blue";
    } else {
      me.style.backgroundColor = "red";
      me.style.left = (kyori += idou) + "px";
      kyori += 5;
    }
  }

  if (myKeyCode === 32) {
    let div = document.createElement("div");
    div.setAttribute("class", "beem");
    div.style.left = kyori + 25 + "px";
    wrapper.appendChild(div);
  }
}
```

keyCodeで矢印とエンターを確認しています。
エンターを押したらdivを作成してビームのクラスをつけると、エンターを押してビームが出るように見えます。

##感想
ビームをcssで実装してしまったので、インベーダーを作ってもpositionを取れないと気づきましたが時すでに遅し。
軽い気持ちで書き始めましたが、ちゃんと前もって考えるべきでした。
同じ轍を踏んでしまった。年末までにインベーダーゲームは絶対に作ります。

最後まで読んでいただきありがとうございます。明日も投稿しますのでよろしくお願いします。
無料レンタルサーバを借りる

#やること
無料レンタルサーバを借りて　ページを公開したい
環境はmacbook pro


# 申し込み
https://www.star.ne.jp/free/

<img width="1027" alt="スクリーンショット 2019-12-11 18.34.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393556/802ccf6b-ceee-09c8-444c-bf40dbf254be.png">


<img width="728" alt="スクリーンショット 2019-12-11 18.34.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393556/3ef7e98f-54fd-f8ab-d0ce-d6d00779e944.png">

会員登録します。

ログイン画面にいけます
<img width="1024" alt="スクリーンショット 2019-12-11 18.36.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393556/8828a136-a9c4-ff61-d79e-7b4b56f0a536.png">


そのあとになぜか申し込みフォームが見つからない
https://secure.netowl.jp/netowl/?action_register_starserver_index=true&plan=free&_ga=2.248136768.618118165.1576056262-1610428980.1576056262

google検索から無料プランのリンクがあったので　こちら

<img width="716" alt="スクリーンショット 2019-12-11 18.47.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393556/15a83dae-f3ae-5da5-b557-87c9fe638b41.png">

IDを入力するとURLが生成される
<img width="910" alt="スクリーンショット 2019-12-11 19.26.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393556/0dcc3ab1-5645-6cc3-849a-78bfa16d2a82.png">
そのURLにアクセスした状態
とりあえずこれでサーバーを借りることはできた
そこにファイル等を送っていく

# サーバにアクセス
 
macでの想定
ターミナル(bash)を使って送信する

`$ brew install tnftp`
ftp通信を行えるようにするコマンド
最近のmacでは　ftp が廃止され　sftpしか使えなくなったが、このサーバはsftpに対応してないため入れる

`$ ftp FTPユーザー名＠FTPホスト名`
でログインできる。
ホスト名　パスワードはメールで通知される

`$ lcd ローカルのパス`ローカルパスの設定
`$ put ローカルのパスにあるファイル名`

でファイルを送ることができる
外資系事業会社のIT部門で働いて思うこと

#はじめに
私はランスタッドのIT部門で働いて５カ月ほどになります。
IT部門に同じ苗字の方が既にいらっしゃったので、みんなからは、やっさんというあだ名で呼ばれています。
現在は、IT企画課という、各メンバーがそれぞれ社内で立ち上がったプロジェクトのPMを担当する部署に所属しています。
今日は、私がどういう経緯で、外資系事業会社のIT部門で働くことになり、そこでどう感じているかについてお話ししたいと思います。

#いままでの経歴
まず最初に、私の経歴をお話ししたいと思います。

はやいもので、私がIT業界でエンジニアとして働き始めてから20年近く経ちました。
最初はCOBOLプログラマーとして、いわゆる金融系システムの開発に携わっておりましたが、その後、転職して、オープン系で.NETやJavaの開発に携わり、また転職して、Web開発に携わり、またまた転職して、Saasプロダクトの開発に携わってきました。

前職でのSaasプロダクトの開発では、お客さんが１社もいないところから開発に携わり、最終的には数百社の顧客がつく製品にいたるまでになりました。
その間、初めて顧客がついた時の喜びや、顧客増加によるパフォーマンス低下問題での待ったなしの対応の苦しみなど、いろんな思いをしながら、たくさんの経験をさせてもらいました。
そして、プロダクトをお客様に提供するということは、営業・マーケ・開発・サポートが密接に連携する必要があるということも知り、その奥深さにやりがいを感じて働いていました。

#転職のきっかけ
前職で７年ほどプロダクト開発をする中で、近年は、製品自体も成熟してきて、大きな追加機能の開発というところはなくなってきており、どちらかというとメンテナンスフェーズに入ってきていました。

自分自身けっこうやり切った思いもあり、昨年くらいから、何か新しいことをやりたいという思いが芽生え始めていたので、今年になって転職活動を開始しました。そうこうしているうちに、エージェントと繋がりを持って、最初は今まで経験してきた、プロダクト開発やSIerで働こうと思い、そのような企業を紹介してもらうよう依頼していました。

そんな中、ある時エージェントから、転職先として事業会社のIT部門という選択肢はありますか？という質問があり、それまではまったく考えていなかったのですが、一度話だけでも聞いてみようかと思い、どこの会社かというのを尋ねたところ、そのエージェントの会社でした。

そんなこんなで、数回面接して内定をいただいたのですが、その中で以下のようなことを感じました。
 
 - 事業会社のIT部門という未経験の領域で新しいチャレンジをするのも面白いのではないか。
 - 面接時にお会いした方々が、皆さん魅力的で自分にない経験を持っておられるので、一緒に働くことで、学ぶことも多いのではないか。
 - スーパーフレックス（コアタイム無し）・服装自由という点が、堅苦しいことを嫌う自分にマッチしているのではないか。

この３つの理由で、最終的に入社することを決めました。

#今感じること
まだ、入社して５カ月ほどですが、そんな中で、今私がいくつか感じているところをお話しします。

###エンドユーザとの距離が近い
今まで働いてきたIT企業では、システムやサービスを提供して、お客さんに対価をもらう、という仕事でしたので、最終的に運用フェーズに入ると、実はあとで使われていないということがわかったりして、そこの歯がゆさを感じることもありました。
しかし、今はエンドユーザであるビジネス部門との距離も近いため、リアルな声（良いことも悪いことどちらも）も聞こえますし、最後まで責任をとりきらないといけないので、その点は大変な部分ではありますが、面白いところでもあると感じています。

###外資系企業の雰囲気
やはり外資系企業なので、外国人の方も多く、日常的に英語が飛び交う環境で、バイリンガルの方も多いです。一部パーリーピーポーっぽい人が多い部署もあったりします。
また、全般的に合理的で、日本の会社にありがちな、どうでもいい無駄な会議とかはあまりなく、自分の時間も他人の時間も大切に使う文化があるように思います。また事業会社のIT部門というと、日本ではいわゆる情シス部門がイメージされるかと思いますが、そういう雰囲気とはだいぶ違って、オープンでフレンドリーな感じです。
そして、やはり英語はできるに越したことはないと思います。

#今後に向けて
現在の自分の課題は、次の３つだと考えています。

- 業務を深く理解すること
- 社内の様々なステークホルダーと密接な関係を築くこと
- 英語を上達すること

どれも一朝一夕でできるものではないので、少しずつですが取り組んでいます。
また１年後2020年のアドベントカレンダーで、これらの課題に対して、どう取り組み、どうなったかをお知らせできればと思います。

もし来年登場しなければ、辞めたか、クビになったかと思っていただければw
PhpStorm で PHPDoc を追加するためのショートカット

`/` + `**` + `Enter`

なお、PHPDocというのは下記のようなものらしい

> PHPDocとは、クラスや関数などのブロックに記述できるDocComment内に記述する書式の通称です。

（参考記事より）

## 参考
https://qiita.com/tadsan/items/72b02339d12120ca37d7
Node.jsから画像をmultipart/form-dataでPOSTするメモ (axios利用)


某APIを試していて、少しハマったのでメモ。
axiosで画像POSTとかを調べると、最近はVue.jsだったりフロントエンド側からPOSTする記事が多く、Node.js側から送るサンプルはあまりヒットしない印象です。

## 環境

Node.js v13.2.0

## 準備

```bash
mkdir myapp
cd myapp
npm init -y
npm i axios form-data
```

こんな感じでaxiosとform-dataを追加インストールです。

## コード

```post.js
'use strict';

const fs = require('fs');
const FormData = require('form-data');
const axios = require('axios');

const url = `https://hogehoge.com/hogehoge`; //ポスト先のエンドポイントURL
const imagePath = `./public/image.png`; //画像のパス
const file = fs.createReadStream(imagePath);

const form = new FormData();
form.append('image', file);

const config = {
    headers: {
        'X-HOGEHOGE-HEADER': 'xxxxxxx', //APIごとのヘッダーなど
        ...form.getHeaders(),
    }
}

axios.post(url, form, config)
    .then(res => console.log(res.data)) //成功時
    .catch(err => console.log(err)); //失敗時
```

## 所感

参考にさせてもらった記事にもありましたが、色々調べてて`form.getHeaders()`の箇所が直感的ではないのでちょっとハマりました。

## 参考

* [Form-Data - npm](https://www.npmjs.com/package/form-data)
* [Node.js + axios で 画像をFormDataでアップロードしようとしてハマった話](https://qiita.com/kazu_death/items/a94ac4ae4d71928920c5)
[iOS] FirstUnlockまでのアプリリソース制限

FirstUnlockとは、iOSデバイスを起動後、ユーザーが初めてロックスクリーンをアンロックすることです。
そのFirstUnlockが行われるまでに、何らかの操作によって、アプリが起動することがあります。

そのとき、アプリのリソースアクセスが、制限されています。

ここでは自分のメモ程度に、その制限事項を簡単にまとめておきます。

## FirstUnlockになる条件

* OS再起動
    * ユーザーによる再起動
    * iOSのバージョンアップによる再起動

## アプリがバックグラウンド起動する条件

* iAP(USB/BT)接続によるAppLaunch

## Storage

以下のストレージのRead/Write権限ありません。アクセスしようとすると`nil`が変えるかパーミッションエラーになります。

* Keychain
* UserDefaults
* Application container内のFiles/Directories

## UIDevice

* `identifierForVendor`が`nil`になる
「AppleIDの設定には数分かかる場合があります」が終わらないときの対応

#「AppleIDの設定には数分かかる場合があります」が終わらない
iPadを新規購入して初期設定するときの話。
既存のAppleIDを入れて、パスワードを入れて、AppleID設定済の端末が手元になかったので、登録済みの電話番号に認証コード送って認証して、

「AppleIDの設定には数分かかる場合があります」

あとは待つだけ！・・・が、いつまで経っても終わらない。
すっかり忘れてて2時間経っても、24時間経っても終わらない。
電源を入れ直しても「AppleIDの設定には数分かかる場合があります」画面のまま。何もできない。。。

#対処法：iPadを強制再起動（電源ボタン+ホームボタン 長押し）
強制リセットすると、「AppleIDの設定には数分かかる場合があります」の画面は消えて、言語選択の画面に！！
諸々設定しなおして、AppleIDの設定部分については手入力ではなく、既存iPhoneを近づけて設定しました。

### 原因は2段階認証のやり方がまずかった？（憶測）
憶測でしかないですが、最初のやり方で怪しかった点といえば、AppleID/パスワード入力後の2段階認証で、既存デバイス(iPhone)でコード受け取れず、携帯電話のSMSに飛ばしたのが原因？もしくはそこでパスコードの入力をミスったか？？



もし、同じような状況に陥ってしまった方の手助けになれば幸い。
親から子へ、子から親へデータを渡す方法


## props
親から子へデータを渡したい場合。
親コンポーネントから送られきた情報によって子コンポーネントの表示を変えたいときなど。


親要素で下記のように記載。

```vue
<template>
//　↓子コンポーネント名　　　　↓渡したいデータ
  <DetailTemplate v-bind="detail" />
</template>


<script>
export default {
  data() {
    return {
      detail: "OK!"
    }
  }
}
</script>
```


子コンポーネントは下記のように記載。

```vue
<template>
  {{ detail }}
</template>


<script>
export default {
  props: {
    dateil: ""
  }
}
</script>
```

これで子コンポーネントでOK！が表示される。


## $emit
子から親へデータを渡したい場合。
子コンポーネント内のボタンを押したりした場合に、親コンポーネントが持つfunctionを発火させたいとき使う。
今回は子コンポーネントにあるselectタグで選択した値を親要素に遷移する＋親要素のfunctionを発火させる処理。

子コンポーネントで下記のように記載。

```vue
<template>
  //@changeはv-on:chengeの省略形。選択すると自身のメソッド、pushButtonが呼び出される。
  <select v-model="selected" @change='changeSelectTab'>
    //選択肢はdataのなかで記載している。今回は関係ないのでdata部分省略。
    <option v-for="option in options" v-bind:value="option.value" v-bind:key="option.value">
      {{ option.text }}
    </option>
  </select>
</template>


<script>
  methods: {
    //pushButtonメソッドを関数にしてしまって、その中で親要素に送るメソッド名と選択した値を第二引数にして送る。
    changeSelectTab: function(){
      this.$emit('selectTab', this.selected)      
    }
  }
</script>

```
親コンポーネントで下記のように記載。

```vue
<template>
  <div>
    //↓子コンポーネント名　↓子コンポーネントで$emit('selectTab')が実行されると親のparentEventが発火。
    <ChildComponent @selectTab="parentEvent"/>
  </div>
</template>


<script>
    methods: {
      //引数には子コンポーネントのthis.selectedが入る。
      parentEvent: function(selected) {
        if (selected === 1) {
          console.log("1が選択されました！")
          });
      }
</script>

```
emitに関してはこの記事参考。
https://qiita.com/shosho/items/b9b24a52dc0cc0fc33f5
Node-REDで宇宙ステーションの現在地を取得し、OpenStreetMap上に可視化してみた

　こんにちは、(株)日立製作所 研究開発グループ サービスコンピューティング研究部の横井一仁です。

　本ドキュメントでは、宇宙ステーションの位置取得するノードを用いて、現在地を世界地図上にリアルタイムにプロットするフローを[Node-RED](https://qiita.com/m-izumi/items/3f5a7a57274fe5a33b48)を用いて作成してみます。

![demo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/2313f0f2-1c54-8476-b197-e935c5b54139.png)

# 必要なノードをインストール

　Node-REDフローエディタの右上のメニューから「設定」->「パレット」->「ノードを追加」を選択し、宇宙ステーションの位置情報を取得するノード[「node-red-contrib-iss-location」](https://flows.nodered.org/node/node-red-contrib-iss-location)をインストールしてください([前回記事](https://qiita.com/kazuhitoyokoi/items/a95fe4f92c03af195732)でオリジナルノードとしてインストール済の場合は本手順は不要)。

　その他、Node-RED上で地図を利用するため、[OpenStreetMap](https://qiita.com/nyampire/items/56361823ae0c2ac68fa2)の世界地図を表示するノード[「node-red-contrib-web-worldmap」](https://flows.nodered.org/node/node-red-contrib-web-worldmap)もインストールしてください。

# 宇宙ステーションの現在地を世界地図に表示するフロー作成

　必要なノードをインストールした後、ワークスペース上にinjectノード、iss-locationノード、changeノード、左側に端子のあるworldmapノードを配置し、順にワイヤーで接続します(node-red-contrib-iss-locationモジュールを用いた場合は、changeノードは不要です)。

![flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/57156d20-2d1f-f4b1-52f5-3af7c5c2a478.png)

　もし正しく位置情報を取得できているか確認したい場合は、iss-locationノードの後ろにさらにdebugノードをつないでください。

　各ノードのノードプロパティの設定以下の通りです。

## (1) injectノードのプロパティ設定

- 繰り返し: 指定した時間間隔
- 時間間隔: 1秒

![injectnode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/a6ad5843-8dfc-7e5a-07c4-0e26d28f459b.png)

## (2) iss-locationノードのプロパティ設定

- メソッド: ISS-Location-Now

![generatednode2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/a9d73b06-d95b-4fed-513f-bee751f06240.png)

## (3) changeノードのプロパティ設定

　iss-locationノードとworldmapノード間で受け渡すメッセージの仕様が異なるため、changeノードを用いて下記の通り3つの値を代入します。

- msg.payload.latへmsg.payload.iss_location.latiduteを代入
- msg.payload.lonへmsg.payload.iss_location.longitudeを代入
- msg.payload.nameへmsg.payload.iss_location.timestampを代入

![changenode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/de196928-9689-06fa-c86b-ee849bfdd01c.png)

## (4) worldmapノードのプロパティ設定

　worldmapノードにおいては、ノードプロパティで新規に設定する項目はありません。

　上記(1)～(4)のプロパティ設定をした後、最後にNode-REDフローエディタの右上にあるデプロイボタンをクリックします。

# 動作確認

　世界地図を表示するには、「http://\<Node-REDのIPアドレス\>:\<ポート番号\>/worldmap」にアクセスします。上手く動作している場合、地図の左上のマイナスボタンをクリックして縮尺を変更すると、現在の宇宙ステーションの位置を確認できます。

![demo2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287766/8b1689ee-0e99-caca-e0cc-d8cadb2b8073.png)

　正しく動作しない場合は、changeノードに設定したパスが正しいか、iss-locationノードのメソッドを選択しているか等を確認してみてください。
Azure Logic Apps で Graph API を扱う

## まえがき

色々触っていると、 Azure Logic Apps から Graph API を扱いたくなる時があります。
やっていきましょう。

## Graph API とは

Microsoft Cloud サービスリソースへのアクセスを可能にする RESTful な API です。
Graph API についての詳細は省略します。気になる人は[この辺のドキュメントを読みましょう。](https://docs.microsoft.com/ja-jp/graph/use-the-api)

## Logic Apps とは

Azure Logic Apps は数百のコネクタを備えた、サーバレスでワークフロー的な統合ソリューションです。
具体的にはこういう感じで

<img width="1331" alt="logicapps.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126264/48b1fddc-43fc-cbdc-d5b6-2dca8b370434.png">

一連のタスクを定義して実行する事が出来ます。
複雑なことをやり始めると大変ではありますが、簡単なタスクをシュッと実現するだけであればとても便利です。

## Azure Logic Apps で Graph API を扱う
先述の通り Azure Logic Apps には数百のコネクタが存在しており、一見 Graph API コネクタも用意されているように錯覚しがちですが、 Graph API コネクタそのものは存在していません。
一応 `Microsoft Graph Security` というコネクタは存在していますが、 Alert や Subscription を操作する事しか出来ず、Graph API 全体の機能を扱うことは出来ません。

しかし、Azure Logic Apps には HTTP コネクタが存在しています。何でもできそうですね。何でもやってしまいましょう。

具体的にはこういう感じです。

<img width="613" alt="http.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126264/e494c1af-ada2-92fe-bb70-f78e5995587e.png">

これでレスポンスを受け取ることが出来ますが、このままでは JSON 文字列が手元に残るだけで、扱いに困ります。
そのため、HTTP リクエストの直後に次のような `JSON 解析` を挟みましょう。JSON の型定義を渡してあげることができます。

<img width="622" alt="http2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126264/ff37d4cf-29e4-7433-be7a-d59db4343f1a.png">

とはいえ上記の画像のような型定義を、API ごとに手で作るのは現実的ではありません。
そこで、 `サンプルのペイロードを使用してスキーマを生成する` という機能を使えば、任意の JSON から型定義を自動で生成することが出来ます。便利ですね。
つまり、同じ API を [Graph Explore](https://developer.microsoft.com/ja-jp/graph/graph-explorer) で叩いてレスポンスの JSON を取得して、結果を `サンプルのペイロードを使用してスキーマを生成する` に流し込めば HTTP リクエストの結果を Logic Apps のデザイナがよしなに解釈して用いる事が出来るようになります。

後はよしなに Slack 連携なんかを編集する時に

<img width="1033" alt="slack.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126264/46eb0851-23c9-779b-05d0-3a6a9007c29c.png">

こんな感じで JSON の中身が良い感じに `動的なコンテンツ` として出てくるので、これを用いてメッセージなどを組み立てると良いでしょう。
かんたんですね！
じゃがいもで理解するモザイクの設定値

# はじめに (なぜじゃがいもなのか)

NEMにはモザイクという機能があります。
モザイクを使うとトークンの発行・流通などを行うことができます。

そのモザイクですが、様々な利用状況に対応できるように発行量などいくつかのプロパティを持っています。
NIS1のものですが、以前[こんな感じ](https://qiita.com/daoka/items/312cbe98c298e3364810#%E3%83%A2%E3%82%B6%E3%82%A4%E3%82%AF)に説明し、今もこれをベースに説明していたりするのですが、あるところでトークン発行の勉強会をやったところ

「よくわからん。**じゃがいも**で説明してくれ」

と言われ、じゃがいもを使って説明したところ、意外に好評だったので、今回**じゃがいも**を使って説明してみたいと思いますw

# 発行量

じゃがいもでいうところの**出荷量**にあたります。

![2e8c3325f9969f616143cf134235deea_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9315/7b91c6c8-c3ff-64dc-7c33-9296f53423cf.jpeg)

# 可分性

じゃがいもを1個単位で扱うのか、1/10単位で扱うのか、1/100単位で扱うのかを決めます。
一番細かくした場合、 *1/1,000,000* 単位 で扱うことができます。

<img width="645" alt="スクリーンショット 2019-12-12 11.07.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9315/ab22e3fc-e5f6-0f9d-fccb-85cc8a2cd09c.png">

# 供給量変更可否

じゃがいもの出荷量を**後から**調整できるか、調整できないかを決めます。

# 譲渡可否

## 譲渡不可の場合

農家からもらったじゃがいもをお裾分けすることができません。

<img width="800" alt="スクリーンショット 2019-12-12 13.23.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9315/d3b560e1-3b4a-9634-d91f-5e05c3fb8997.png">


## 譲渡可の場合

農家からもらったじゃがいもをお裾分けすることができます。

<img width="800" alt="スクリーンショット 2019-12-12 13.23.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9315/0ef29689-85d8-6d0c-658e-afaaa5481392.png">


# 期間

じゃがいもの消費期限を設定します。
期限を過ぎると腐ってなくなります。なお、**永久に腐らずに**食べられる設定もありますw

# モザイク制限

じゃがいもの取引ができる人を制限します

<img width="600" alt="スクリーンショット 2019-12-12 13.31.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9315/61391d1a-edc5-cbbb-c1b2-8466be12f92c.png">


# まとめ

じゃがいも食べたい