OmniAICreator/Qiita-1.07M huggingface dataset:
NodeEditorで選択順に並べる


この記事は[**Maya Advent Calender 2019**](https://qiita.com/advent-calendar/2019/Maya)の9日目の記事です。

# はじめに
NodeEditorでノードを任意の順番に並べる私が発見したやり方を書きと思います。

NodeEditorで複数のノードを表示すると、よくわからない順番で表示されてしまい。複数のノードを順番にコネクトしたい時などに間違いを起こしやすいと思い、任意の順番に並べる方法を調べてみました。
標準で名前順とか選択順とか、階層順に並べる方法があったらゴメンナサイ。やり方教えてください。
標準でのやり方が分からなかったので、みつけた裏技になります。
（今回のMayaのバージョンは2017を使用しています。ほかのバージョン、環境ではではうまくいかないかもしれません。裏技なのでご了承ください。）

# 手順
ノードを選択した順番に並べる手動でやる手順は以下のようになります。

1. **NodeEditor**を開きます。
2. **nodeEdSyncedSelection**を有効にします。（左から2番目のアイコンです。）
3. **Add to Graph on Create**を有効にします。（南京錠風アイコンを開いた状態にします。）
4. 並べたい順番に選択します。
5. 選択したままセットを作成します。（Create>Sets>set)
6. セットを削除します。

すると選択した順に並んでくれます。うまくいかない場合もありますが、
（5.の選択したままセットを作成）を数回を繰り返すと大抵並んでくれるようです。
一つづつドラッグしてで並べなおすよりは楽ですかね？

# Pythonスクリプトにする
以上の手順に少し手を加え、パイソンスクリプトにしてみました。

- Description：　NodeEditor で　選択ノードを階層順に並べなおします。
- コマンド：　〇〇.sort_OnNodeEditor(mod=cmds.getModifiers(),n=5)
- 引数説明：
- 
　　　　　　mod=0　階層順　(dagノードはシェイプとトランフォームを分けて並べ、dagノード以外は名前順に並べます)
　　　　　　mod=1　名前順
　　　　　　mod=4　選択順
　　　　　　n=5　　（セット作成の）繰り返し回数

```Python
import maya.cmds as cmds
import maya.mel as mel
def sort_OnNodeEditor(mod=0,n=5):
    ned=mel.eval('getCurrentNodeEditor')
    if ned:
        if mod==0:
            Selected =cmds.ls(sl=1,l=1)
            dag=[I for I in cmds.ls(dag=1,l=1) if I in Selected]
            tr=cmds.ls(dag,tr=1,l=1)
            dep=[I for I in Selected if I not in dag]
            dag=[I for I in dag if I not in tr]
            cmds.select(tr,dag,sorted(dep),ne=1)
        elif mod==1:
            cmds.select(sorted(cmds.ls(sl=1,l=1)),ne=1)
        for i in range(n):
            set=cmds.sets(n='NodeEditorIsBug_Set')
            cmds.nodeEditor(ned,e=1,addNode=set)
            cmds.nodeEditor(ned,e=1,layout=1)
        cmds.refresh(f=1)
        for I in cmds.ls('NodeEditorIsBug_Set*'):
            Con=cmds.listConnections(I,d=0,p=1,c=1)
            for j in range(0,len(Con),2):cmds.disconnectAttr(Con[j+1],Con[j])
        if cmds.objExists('NodeEditorIsBug_Set*'):cmds.delete('NodeEditorIsBug_Set*')
```
それでは時間が来たので。失礼いたします。
命名法が一定の時間である場合のリスト作成

こんにちは。

今回は[前回の記事::「気象データの"ある程度の完成度"を持つ図の描画コードの紹介」](https://qiita.com/Toyo_Daichi/items/0baab03f77984699d714)で説明できなかった点を紹介したいと思います。

##はじめに

[気象業務支援センター](http://www.jmbsc.or.jp/jp/online/f-online0.html)から取得する気象データは国際気象機関が定めるフォーマットに従っています（GRIB2形式）。

これらのデータは時間解像度ごとに、それぞれの時刻で命名されています。

##リストの作成コード
今回はデータが一定の時間間隔で命名されている場合に、役立つlist作成を共有させていただきます。

```python:time_list.py

def preparating_data(self, yyyy, mm, dd, hh):
  time_list = []
  num_time_list = len(time_list)
	
  month_thirtyone = [ 1, 3, 5, 7, 8, 10, 12 ]
  month_thirty    = [ 4, 6, 9, 11 ]
  month_twntynine = [ 2 ]

  while num_time_list < 13:
     time_list.append(str(yyyy) + str('%02d' % mm) + str('%02d' % dd) + str('%02d' % hh) + '00')
     #1桁の数字には、0を加える処置
     hh = hh - 6

     if hh < 0 and dd == 1:
        mm, hh = mm - 1, 18
        if mm in month_thirty:
           dd = 30
     elif mm in month_thirtyone:
        dd = 31
     elif mm in month_twntynine:
     #うるう年の考慮

        if yyyy % 4 == 0:
           dd = 28
        else:
           dd =29

     elif hh < 0:
        dd, hh = dd - 1, 18

     num_time_list += 1

return time_list
```

以上です。

最後まで見ていただき、ありがとうございました。

##参考
・PHPでライブラリを使わず独力でGRIB2（気象バイナリデータ）を読む
https://qiita.com/miyawa-tarou/items/e4eff81dfcac527572e5

・気象×Python　〜全国合成レーダー〜
https://qiita.com/OSAKO/items/ef042f80ec63dd288225
.nodebrewからnへの移行をやってみた

かれこれnodeを触っておらず、nodebrewの存在を忘れていた状態でした。
アップデートしてもバージョンが変わらず、頭空っぽにして作業していたので笑、『[Node.jsとnpmをアップデートする方法](https://parashuto.com/rriver/tools/updating-node-js-and-npm)』という記事を参考にnを入れてアップデートを行うも(当然)上手くいかずwhichしてnodeのパスを見ると`.nodebrew`が経由されたことを知り、そこで思い出しましたw

あまりnodeを使わないので、このまま`$ n --stable`か`$ n --latest`で管理しようと思いnodebrewを消し、nに移行することにした際のまとめです。

## 注意事項

参考にされる際は、**自己責任**でお願いします。

この移行作業を行うことでnpmインストールしたライブラリまで消えてしまうため、削除する際に何をインストールしていたのか確認し、移行した後に再度入れなおしてください。
その際におそらく前のバージョンが新しいnodeでサポート外になり、サポートされている新しめなバージョンがインストールされることになると考えられます。

## 環境

* MacBookPro Mojave 10.14
    * `nodebrew`と`n`が入っており環境変数で`.nodebrew`を見るように固定している

```
$ sudo n --stable
12.13.1

$ node -v
v8.9.4

$ which node
/Users/gremito/.nodebrew/current/bin/node

$ less ~/.bash_profile
...
export PATH="${HOME}/.nodebrew/current/bin:$PATH"
...
```

## 移行作業
作業は簡単でnodebrewを消すだけ

```
$ rm -fr .nodebrew

$ vi ~/.bash_profile
# .nodebrewの設定を削除
$ source ~/.bash_profile

$ node -v
v12.13.1
$ which node
/usr/local/bin/node
```
Figma で透過 PNG にカラーオーバーレイをかけるには

例えばこんな透過 PNG のロゴがあったとして

![Frame 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29490/c21e5c8f-bf4c-e9c6-144e-9141e752d36f.png)

暗い背景に置きたい場合、

![Frame 13 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29490/6aaf1702-5974-0587-0f14-a1385dc503d9.png)

ロゴを単色にして配置したかったりします。

Photoshop ではレイヤーパネルからカラーオーバーレイを使って任意の単色にすることができますが、 Figma にはそういった機能は見当たりません。そんな時はマスクを使うと目的の操作ができます。

![image 24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29490/25bdbacb-317e-bd04-95f4-438f13d2f212.png)

通常は画像の下にマスクしたい領域を配置するのですが、この場合は逆で、画像の上に**塗りつぶしたい色**の矩形を配置します。それぞれレイヤーを選択した上で、[control + M]か、

![Mask Group.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29490/5f72a53b-9256-901b-d194-d830644b9357.png)

中央上に表示されるマスクボタンを押下しましょう。

すると、

![Frame 13 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29490/d3970d56-a918-5d7d-982b-9d62c5470c61.png)

目的の色に塗りつぶされました。

（ロゴを塗りつぶす際はレギュレーションをキチンと確認し、問題ないかクライアントの確認を取った上で対応しましょう）
基本情報8週目(12/09週)

# 目標と結果
### 目標
- 参考書をみる。
- 基礎理論とアルゴリズムの勉強を続ける。
    - 時間管理、工数管理も忘れずに。
- [基本情報技術者試験ドットコム](https://www.fe-siken.com/)を使う。
    - (午後問題もカバーされてる)
- 独習ゼミの解説動画を観てみる。
- 午後で通用する様に内容を理解する。

### 結果

- 午前免除の結果が出て、自己採点通り合格だった。
- 今まで何となくしか知らなかった午後試験の概要を掘り下げた。
    - 2020年から試験にいくつかの変更点がある。
        - 13問中7問から11問中5問解答へ。
        - COBOLからPythonへ。
        - ***アルゴリズムとプログラミングが50点配点へ。***

![](https://www.fe-siken.com/img/03.png)
引用元　https://www.fe-siken.com/fekeisiki.html

# 振り返り
### Keep
- 道場は継続。

### Problem
- アルゴリズムとプログラミングが50点配点になるのは非常に厳しい。
    - 対策が必要。
- 大学での活動は1月末までなのでそれまでは基本情報の勉強はスローペースでやっていく。
 
### Try
- まずは独習ゼミのアセスメントを受ける。
- 午後試験用の計画を立てる。
IoT初心者がAIスピーカーを作った話

IoTLT Advent Calendar 2019の9日目を担当していますTakeshiです。
11月のIoTLT勉強会に初参加した時にたまたま[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)を頂けたので、IoTとは無縁だった私がIoTに挑戦してみました。
(時間なくてAIスピーカー完成させるところまでいけませんでした（泣）。出来たら更新するので待っていてもらえると嬉しいです…)

#私の経験
- 研究：ロボット制御，機構設計
- プログラミング：arduino, C++, Python(どれも軽く動かすためだけの技術しか持ってないです)
- 電子回路初心者
 
#使用部品
秋月電子通商で購入できるものが大半です。以下にまとめます。

- Raspberry3 B+
- USBマイク
- 市販の普通のスピーカー(僕は家にあるイヤホンジャックついているやつで代用しました)
- ブレッドボード
- タクトスイッチ (スイッチは何でもいいです)
- ジャンパ線 (オスオス，オスメス)

#Lチカとスイッチの動作確認
基本的には、[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)に則っているのでぜひ書籍を購入して挑戦していただきたいのですが、簡単に紹介いたします。
初めて電子回路に触る人はとりあえず経験しておくことになると思います。
今回は、単に光るだけのものと、押したら光るものを紹介します。
ただのLチカです。(簡単ですがこれからすべてが始まると思っています)
https://media.giphy.com/media/Q6xGe547yr2uXJ9Juy/giphy.gif

スイッチ押してLチカ
https://media.giphy.com/media/Y3vrAutvvEHgGHTvSy/giphy.gif
#AIスピーカーの動作確認
Lチカと同様で[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)に則っていますので簡単に紹介させていただきます。
なぜかgoogle assistantへの接続がうまくいかず、いろいろいじっていたら沼にはまってしまったので、とりあえず今回は、録音してそれを音声で出力できたというところまでにしておきます。(IoTできていない…)
録音再生
https://media.giphy.com/media/TJTbDv7UmAnaPjV6Tl/giphy.gif

youtube
https://youtu.be/JJd9v1LigOc

スイッチとの連携
https://media.giphy.com/media/PnPLYmqRlTvA9Lpndq/giphy.gif

youtube
https://youtu.be/flS5QnmEg8Y
#やってみた感想
[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)がとてもわかりやすく作業がはかどった。(さすがに読み飛ばしながら1日でAIスピーカーを作るのは難しかった…)
ただ、今回の取り組みでIoTやAIスピーカーに今まで以上に興味を持てたし、今後これらの発展形を随時やっていこうと思うので、その時には更新します。
[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)にもAIスピーカーを使ったロボット開発や自動議事録作成機などの紹介もありますので、今後は自分のオリジナルの何かを作って、記事にしていけたらと思っています。

PS. ソースコードは[Raspberry Pi + AI 電子工作超入門](https://www.amazon.co.jp/Raspberry-Pi-＋-AI-電子工作超入門（仮）/dp/4800712459/ref=nodl_)に書いてあるものをそのまま使った部分が多かったので、著作権の問題上載せるのはよくないかと思って載せませんでした。問題なかったらコメントいただきたいです。
Amazon ElastiCache ノードのタイプ変更

# ElastiCache Redisのスケールダウン
品質の高いアプリケーションを提供するには、必要不可欠なElastiCacheですが、適切なノードの数とタイプを選ばないとコストが高くついてしまうので、利用状態をみつつノードのスケールダウンを実施した時のメモ

## リソースの利用状態の確認
下記のメトリックスを確認する

- CPU使用率
- スワップの使用率
- メモリの使用率
- ネットワーク帯域
 - ノードのタイプによっては帯域で詰まることがある（意外と盲点）

## 利用状態
CPUメモリ共に10%くらいしか使っていない、ネットワーク帯域もそこまで多くないということでサイズダウンを決定


## 手順
1. 手動でバックアップ
 - アクションからバックアップを選択
<img width="1348" alt="スクリーンショット 2019-11-13 22.43.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/aab06404-9d82-18e5-f9fc-fbd06095d3b0.png">

 - バックアップ名の入力しバックアップを作成する
<img width="1348" alt="スクリーンショット 2019-11-13 22.46.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/8c7268d5-7ba5-9788-75d5-02b08c7d8db4.png">

 - バックアップの所で少し待つと、ステータスがavailableになる
<img width="1351" alt="スクリーンショット 2019-11-13 22.50.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/e2bc338c-01bc-af92-e71b-4d8a256e7332.png">

2. バックアップから復元
 - チェックボックスをチェックし、リストアボタンをクリックする
<img width="1352" alt="スクリーンショット 2019-11-13 22.52.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/a3925998-1c05-b82c-f2dc-7bc1d60c849f.png">

 - フォームが表示されるので適切に記載
<img width="1462" alt="スクリーンショット 2019-11-13 22.52.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/80486ffe-b70b-c21b-8534-2aff78139864.png">
 - Redis一覧に復元したクラスターが現れる
<img width="1346" alt="スクリーンショット 2019-11-13 22.53.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/aa754a2b-846c-a2b1-8a2f-60f40824e4b1.png">

3. 復元したクラスターの確認
 - 新しいエンドポイントが作成される
<img width="1354" alt="スクリーンショット 2019-11-13 23.03.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/525769/0f0cd00a-aa2c-ce1d-6848-965d4f0d0721.png">


## 注意点
- 復元したクラスターはエンドポイントが変わるので、アプリの変更が必要
- バックアップからアプリのエンドポイント変更までの間に新旧のクラスターでデータの差分が発生するので考慮が必要な場合がある

## 参考
- https://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-2017-amazon-elasticache-84060910#26
- https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/Scaling.RedisReplGrps.ScaleDown.html
Windows 版 Inkcscape で GIMP XCF形式で保存する

「InkscapeからGIMPにデータ持っていくのはどうするの？」
（手元のUbuntuで確認しながら）「XCF形式で保存したらいいでしょう」
「GIMP パレット形式？？」
「いや、XCF形式形式が選べるでしょう？ ・・・え゛っ？」


ほんとだ、WindowsだとXCF形式の選択肢が無い？？？


![inkscape1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/29f545c5-c7ef-25e8-7077-3e2b20cdb006.png)


調べました。
どうやらGIMPのパスが通っているとここのメニューにXCF形式保存が出現するらしい。

cf.,
「InkscapeでGIMP XCFファイルを出力する作業メモ」
https://ch.nicovideo.jp/suwatoh/blomaga/ar444773

ということで、まずはPathを通します。
Windows10だと「コントロールパネル」-「ユーザーアカウント」-「環境変数の変更」から設定。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4f140d8f-fbfe-2161-5089-4757c496b852.png)

カレントユーザーの環境変数でいいかな・・・


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/dc761dea-2b93-41cc-2fcc-4a8d9b4b67f0.png)
「編集」を押して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4f3bd316-2121-8f6b-d531-85c985c98192.png)

「%PROGRAMFILES%GIMP 2bin」
を追加する


更にgimp.exe名でgimp-2.10.exeが起動するようにする。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/4d97b858-d093-877d-201b-07a6f0230a4d.png)

コマンドプロンプトを管理者モードで起動してハードリンクを追加

fsutil hardlink create "%PROGRAMFILES%\GIMP 2\bin\gimp.exe" "%PROGRAMFILES%\GIMP 2\bin\gimp-2.10.exe"

以下のように出力できるようになりました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/bc6e9503-dbb0-efe4-c609-fdc09a2f268b.png)
【Wordpress】この記事は役にたちましたか？で使えるwordpressのプラグイン「Helpful」の使い方

記事の終わりに「この記事は役にたちましたか？」と表示させるのに便利なプラグインを紹介します。

アンケート形式のプラグインはいろいろ試して見たのですが、
[・WP-Polls](https://ja.wordpress.org/plugins/wp-polls/)
[・Democracy Poll](https://ja.wordpress.org/plugins/democracy-poll/)
上記のプラグインはアンケートは簡単に作れるのですが、そこまでの高機能は必要とせず。
[・Anyway-Feedback](https://wordpress.org/plugins/anyway-feedback/)
こちらは日本語プラグインですが、更新がとまっており不具合がでている様子。

「はい」、「いいえ」だけを選択し、いいえを押したときに意見がもらえるような機能はないのかなと探していたところ[Helpful](https://wordpress.org/plugins/helpful/)というプラグインを発見しました。

このプラグイン、Feedbackをもらうのに非常に優れています。

## Helpfulのインストール
まず、wordpressのプラグインから【Helpful】で検索するか、
https://wordpress.org/plugins/helpful/
こちらのURLからダウンロードしてください。

インストールが完了すると有効化してください。

有効化するとサイドバーにHelpfulという項目が出てきます。

## Helpfulの機能
「Feedback」、「Setting」とでてくるので「Setting」のほうを選択してください。
下記に表示されているのがそれぞれの機能になります。

| Helpfulの機能 | 機能説明 | 
|:-----------------|:------------------|
| Start | スタート画面 |
| Texts | プラグインの基本設定 |
| Details | 機能のカスタマイズ |
| Design | デザイン | 
| Feedback | フィードバックの処理 | 
| System | データのリセット | 

導入するとこんな感じの画面になります。
#### ダッシュボード
<img width="502" alt="スクリーンショット 2019-12-09 12.24.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163786/6b074284-a447-4ff9-e589-f2a37ae0f5eb.png">

#### Helpful 設定画面

※アップデートが頻繁に行われているのでUIがしょっちゅう変わります。
Unity2019.2から起動するエディタでコード補完(オートコンプリート)を有効にする

# 状況

UnityのAssetsから直接`.cs`ファイルを開いた際、エディタ上でオートコンプリートが効かず、ものすごく困りました。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171600/d3cad97d-d644-c1a2-ea92-8130ff98ca78.png)

`MonoBehavior`クラスが認識されず、VSCode/VisualStudio2019の両方でオートコンプリートが無効。なんでや。


# 環境

以下の通りです。

**Unity**
2019.2.13f

**VSCode**
10.40.2

**VisualStudio2019**
Communityのちょっと前のやつ


# 解決方法

### **VisualStudioの場合**

[【Unity】Visual Studioのインテリセンス（自動補完や候補予測）が効かない場合の対処法](http://hikaruryugaku.hatenablog.com/entry/2019/02/11/142300)

[UnityでVisualStudio2017のIntelliSenseが動作しなくなる問題を解決する](https://qiita.com/tak/items/c2454c8db3c65f715642)

リンク先の通りにやったらできた！圧倒的感謝。

自分の環境の場合、VS2019のバージョンを**16.4.0**に上げただけでいけた。


### VSCodeの場合

[今日からUnity + Visual Studio Codeを用いた快適な開発生活(随時更新中)](https://qiita.com/4_mio_11/items/e7b0a5e65c89ac9d6d7f)

こちらに記載のあるアセットを入れてみましたが、解決に至らず。

[MonoBehaviour Snippets](https://marketplace.visualstudio.com/items?itemName=zrachod.mono-snippets)という拡張機能を追加してみたら、それっぽくはなりました。
相変わらず`MonoBehavior`クラスは認識されないので、根本的な解決にはなってない。

解決でき次第、追記したい。。

**2019/12/20 追記**
https://code.visualstudio.com/docs/other/unity
ひとまずこれでいけた。

<br>

### 追記

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/171600/d3cad97d-d644-c1a2-ea92-8130ff98ca78.png)

上部に載せた画像をもう1度見てもらうとわかるのですが、
`MonoBehavior`クラス、VSCodeでも認識されていました😭
(補完は効いていましたが、色々いれた拡張機能のおかげかと。。)

じゃあ一体、画像に出ている下線は何？ということになるのですが、きちんとメッセージを見ると、

```console
"Behaviour": Unknown word.
```

とのこと。

以前入れた拡張機能の[Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)が、そんなワードは知らんと教えてくれていただけでした。これは恥ずかしい。

ちなみにこの単語、2種類のスペリングがあるらしく、
`Behaviour`はイギリス英語、`Behavior`はアメリカ英語らしいです。

結局、`Behaviour`が、[Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker)の辞書に登録されていなかっただけ、というオチ。
登録されていない単語はホワイトリストに追加で解決しました。。

拡張機能、とっても便利ですが、入れたものはちゃんと把握しようと思いました。

**参考：**
[VSCode に Code Spell Checker を導入して typo と戦う](https://qiita.com/diescake/items/98c5a099e85775cd917d)
[BEHAVIORとBEHAVIOURの違い](http://xn--4gr220a4mai87h0bd42o.com/behavior%E3%81%A8behaviour%E3%81%AE%E9%81%95%E3%81%84/)
メールアドレスの自動収集：セールスリードを集める

元記事：https://www.octoparse.jp/blog/geathering-sales-leads/

#セールスリードとは？

セールスリードとは、自社の商品やサービスを購入する可能性が高い人であり、販売プロセスの初期段階と見なされます。つまり、セールスリードは、潜在的・将来的に顧客となる見込みのある人々です。

それでは、どのようにこれらの見込み客を見つけて連絡を繋げるのは一番の問題です。

 

#セールスリードを収集するには？

この質問にに対する答えは：お金OR 知識　です。十分なお金があれば、電話番号やメールアドレスなどセールスリードのデータベースを購入することができます。ただし、私が知る限り、マーケティングのコストを考慮して、ほとんどの人はこの問題を解決するために2番目のオプションを選択します。つまり、知識（技術手法）を利用します。

この記事では、専門知識を活かして、セールスリードを数分で取得する方法を紹介します。

 

##1. Python

Pythonは、スクリプトを書く際に英語の文法を採用しているため、最も簡単なプログラミング言語と見なされています。

ただし、誰もがスクリプトの意味を読んで理解することはできますが、ルールを事前に学習しないと、スムーズに動作させることはまだそれほど簡単ではありません。それに、Webサイトの構造が異なるため、すべてのサイトをカバーできない場合があります。 

とりあえず、以下の4つのステップでやってみましょう！

**Step 1: [Python](https://www.python.org/)をダウンロードし、インストールします。**

**Step 2: オープンソースWebサイトである[Github](https://gist.github.com/dhruvbaldawa/1476680/bc58a7bafbf9c4da9a9c03273c55045c4cb4bacd)から適当なPythonスクリプトをコピーし、Pythonに直接貼り付けます。**
![python.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/fd28a723-bd8e-6ef2-9812-0ed8379cb3ef.png)

**Step 3: 必要に応じてスクリプトを編集します。たとえば、この場合、URLを入力する必要があります。**

**Step 4: 「Run Module」をクリックして、必要なデータの抽出を始めます。**

<img width="592" alt="python2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/3c59229e-5589-9ea6-de1d-deb1301919a5.png">



Pythonといえば、 [Kite](https://kite.com/)という優れたツールをお勧めします。Atom、PyCharm、Sublime、VS Code、Vimで利用できるPythonのコード補完やってくれます。

 

##2. Email Extractor（Chrome拡張機能）

[Email Extractor](https://chrome.google.com/webstore/detail/email-extractor/jdianbbpnakhcmfkcckaboohfgnngfcc?hl=en) は、Chromeの拡張機能で、誰もがChromeブラウザに追加してデータを抽出するのに非常に便利です。以下のの動画チュートリアルはGoogleの検索結果からメールアドレスを抽出する方法を紹介しています。

ただし、Email Extractorにはいくつかの制限があります。まず、一度に1ページからしかメールを抽出できません。つまり、ページネーションを手動で実行しなければならないため、大量の抽出に制限がかかりました。次に、抽出したデータをローカルに直接エクスポートできないため、コピペの作業をしなければなりません。
https://youtu.be/0mMYE8yqNKI
 

##3. Octoparse
[Octoparse](https://www.octoparse.jp/)は、データを抽出する非常に強力な[Webスクレイピングツール](https://www.octoparse.jp/blog/the-10-best-web-scraping-tools/)です。コーディングを必要とせずに誰でもクリックで直接データを取得できます。たとえば、Octoparse[タスクテンプレート](https://www.octoparse.jp/blog/a-revolutionary-web-scraping-software-to-boost-your-business-easier/)を使用して、iダウンページからセールスリードを簡単に収集できます。
![タスクテンプレート.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262932/39c0ae3b-d2bd-c02c-2fbb-42d7f115eedb.gif)


もちろん、テンプレートが事前に設定されたため、必要に応じて編集できません。その場合は、抽出クローラーを編集できるカスタマイズモードを利用する必要があります。

 

 

#セールスリードの活用は？

ここでは、抽出したメールアドレスを活用するケースを挙げます。

##1. マーケティングオートメーション

MailChimpなどの自動化メールツールを利用して、見込み顧客に営業メールを送信し、単純作業を自動化し、時間を大幅に節約できます。

##2. ディスプレイ広告を実施する

ディスプレイ広告とはWebサイト内の広告枠に表示される動画・画像・テキストのみの広告のことです。見込み顧客に適当なディスプレイ広告を設定して、購買欲を高めることができます。
運転免許証の中身について+読み取るときの注意点

# 運転免許証の中身について+読み取るときの注意点

こんにちは…でいい時間なのかな？

10月あたりにiOSアプリの開発環境に触る機会がありCoreNFCを用いる事になったのでせっかくだから、得た知見を保存するためにQiitaに投稿を決意しました。



今回はCoreNFC関連ということで、現在treastrain氏(https://qiita.com/treastrain) が現在取り扱っている運転免許証についての注意事項等を記載していきます。



## 運転免許証の仕様について

- [運転免許証公開技術仕様(Ver008)](https://www.npa.go.jp/laws/notification/koutuu/menkyo/menkyo20190403_070.pdf)

　取得できる内容についてや、Application Protocol Data Unit (**APDU**) コマンドについてはまた機会があれば記載させていただきます。(参照する場合、章-ページで表させていただきます)

　今回フォーカスを当てるのはデータの**形式**についてです

書いてる途中に[変換処理を書いた記事](https://qiita.com/treastrain/items/58e69a1d82dccde48770)が公開されていたのでソフトめに仕様について説明できればと思います

説明する要素

- JIS X 0201
- JIS X 0208
- JPEG2000



## JIS関連

### JIS X 0201

- 日本産業企画(**JIS**)に収録されている文字コード規格

  - 制定しているのは日本産業標準調査会([JISC](https://www.jisc.go.jp/app/jis/general/GnrJISSearch.html))

- 7ビット及び8ビットを用いた情報交換用符号化集合

- **ASCⅡ**文字集合をベースに作成されている

主に使う要素は

- 数字:`0x30`(0)～`0x39`(9)
- 英字
    - 大文字:`0x41`(A)～`0x5A`(Z)
    - 小文字:`0x61`(a)～`0x7A`(z)
- 片仮名:`0xB1`(ｱ)～`0xDD`(ﾝ)

  これらがメインになると思います。

  運転免許証の処理では主に数字を取り扱いますが、(DF01/EF07格納)署名検証の発行者名や主体者名は**英字**や**スペース**、**ドットマーク**が利用されるので注意(技術仕様2-9ページ参照)



### JIS X 0208

- 0201と同様にJISが制定している
- 7ビット及び8ビットの**2バイト**情報交換用符号化漢字集合
  - 漢字集合:漢字6,335文字及びラテン文字、ひらがな等の524文字の非漢字が含まれる集合のこと
- 符号化方式には以下3種類を用いてる
  - Shift-JIS
  - EUC-JP
  - ISO-2022-JP
- 住所や本籍、名前や免許条件に用いられる
- JIS X 0201と比べると、利用できる文字が多い
- 1983年と1990年にJIS83, JIS90制定時に一部文字が**変更**されている
- 実装例は[こちら](https://qiita.com/treastrain/items/58e69a1d82dccde48770) を参照してください…



## JPEG 2000

- Joint Photographic Experts Groupによって開発された画像のデータフォーマット形式（[公式](https://jpeg.org/jpeg2000/index.html)）
- Macでは標準だが他OSだと**標準対応していない**
  - 2000年ころに規格されているが2019年現在でも少ない ⇒ 通常のJPEGよりも処理時間が増加されることが対応されない原因？
- JPEGとは圧縮アルゴリズムを離散コサイン変換からウェーブレット変換に変えた関係で、**ブロックノイズ**を解消することができている
- WindowsやAndroidで利用するには時間がかかりそうだが、iOS開発であれば`UIImageView`にバイナリを突っ込むだけで表示が可能





## 読み取るときの注意点

　すでにいろいろなところで書かれているが、パスワード(PIN)を間違えないこと！！！**3回失敗**することで免許証の中身がロックされて、解除には各都道府県公安委員会の権限になる(仕様2-5ページ参照)

失効された免許証とかでテストをしている人は…**復帰が効かない可能性が高い**（あくまで予想だが、すでに失効したものを復帰させる理由がないですし…）。プログラムとして事前にできそうなノーマルな対応策は

- 各PIN認証でエラーを確認して、どちらを**間違えたか**を確認できるようにする
- 桁数が違った場合はPIN認証前に処理を止める（事前に止めることで再試行の回数を減らさない）

　おそらく、ほとんどの方が思いつくであろう物ですが、保険及び自分の再確認のために記載しておきます。



## まとめ

- 運転免許証の内部データはバイナリだけでなく他の仕様も存在する
- 特にJPEG2000はiOS標準対応しているため、他OS等よりは開発の容易さが高いと思われる
- PINは3回失敗でロック。解除の手続きが
面倒
時間がかかることもあるので注意する



　簡易に記載しましたが「CoreNFC」ができて初めて使用を見て「なんだこの符号フォーマット！？！？」といったかたの一助になればと思います。何かありましたらコメントまでお願いします。遅筆ですがお返事致します
バケット一覧を見せずにS3を使わせる方法

# はじめに
S3をIAMユーザに使わせるときに、バケット一覧を見せたくない。という要望は多いと思います。
[CyberDuck](https://cyberduck.io/)とかサードパーティのソフトを使うことなく、
ブラウザのみでマネジメントコンソールからアクセスさせたい。

このような場合、いろいろググってもListAllMyBucketsの権限は必須であり、
バケット一覧が見えてしまうのは仕方がないという情報が割と多くヒットするのですが、
この権限を与えずともマネジメントコンソールから利用できるということに気が付きました。

# 手順
一言で言うと、 __IAMユーザにはバケット以下に直結するURLを通知する__ だけです。
早速作ってみましょう。

## バケットを作る
適当な名前でバケットを作ります。
IAMユーザにはこのバケットにのみアクセスさせることとします。

## ポリシーを作る
適当な名前でポリシーを作ります。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::バケット名/",
                "arn:aws:s3:::バケット名/*"
            ]
        }
    ]
}
```
このような感じで先ほど作成したバケットにのみ権限を与えます。
`"s3:List*"`を与えているのでListAllMyBucketsも含まれているようにも思えますが、
Resourceでバケット名を制限しているので実質的に無効であり、
__ListAllMyBucketsは与えていない__ ことに注目です。
ここではReadOnly的な感じで権限を与えていますが、
要望に応じて適宜変更してください。

## IAMユーザを作る
適当なIAMユーザを作り、ID/パスワードを発行します。
このIAMユーザには先ほど作ったポリシーを与えます。

## 連絡する
ここが重要なのですが、
利用者にURLを伝えるときにはS3のバケットのURLを伝えます。
`https://s3.console.aws.amazon.com/s3/buckets/バケット名/`

このURLにアクセスするとIAMのログイン画面が表示され、
ログインに成功するとバケットの中身が表示されます。
もちろん、ディレクトリを上にさかのぼってバケットの一覧を表示させようとすると
Access Deny となってはじかれます。


# 参考  
[ユーザーに Amazon S3 コンソールのアクセスを特定のバケットのみに付与する方法は?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-console-access-certain-bucket/)
TOPでGeomtry Instanceを制御する

去年のアドベントカレンダーで書いた[TouchDesignerでGPGPU Particle Systemを作るVol.2応用編](https://qiita.com/ToyoshiMorioka/items/6ef51cf9d4b0ba880d64)の更新版になります。

以前、TouchDesignerでGPGPU Particle Systemを作るには若干のGLSLを書く必要がありました。
しかし現在のTouchDesignerではGeometry COMPが直接TOPを取り込めるようになったため、GLSLなしでGPGPU Particle Systemを組むことができます。Constant、Phong、PBRなどのシェーディングも自由に付け替え可能。便利。

サンプルコードは[こちら](https://github.com/ToyoshiMorioka/GeomteryByTOPAnimation)になります。
あとは説明。

# Particleの向きを進行方向に向けたい
これをするにはSpeed（進行方向のベクトル）を計算して持っておきます。
SpeedをGeometry COMPのRotate to Vectorの項に入れてしまえば進行方向を向かせることができます。
なので、Accel、Speed、Positionを個別に持つようなEngineを作っておきましょう。

![TouchDesigner 2019.33840_ C__Users_02oz_Documents_TouchDesigner_GeometryByTOPAnimation_GeometryByTOPAnimation.toe_ 2019_12_09 11_48_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152718/a65ecbd7-b0f5-5f43-cc4e-1d9ac565faf1.png)

また、通常、ベクトルの計算には任意のベクトル以外に初期のベクトルが必要ですが、TouchDesignerの場合は(x,y,z)=(0,0,1)のZ方向に寝た単位ベクトルのようです。
方向性のあるオブジェクトを利用する場合は注意してください。

![TouchDesigner 2019.33840_ C__Users_02oz_Documents_TouchDesigner_GeometryByTOPAnimation_GeometryByTOPAnimation.toe_ 2019_12_09 11_52_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152718/680c2f20-a8fc-9ce4-014e-47d9199227fd.png)

# Particleを1粒単位でリセットしたい
去年はGLSLを書いていましたが、実はこれもノンコーディングで行けます。Matte TOPを使います。
リセットしたいParticleが参照するピクセルだけ白、もしくは黒が入る2値化されたTOPをMatte TOPに食わせることで『Feedback TOPの値を継続利用するか、それともリセットするか』を個別に指定できます。

![TouchDesigner 2019.33840_ C__Users_02oz_Documents_TouchDesigner_GeometryByTOPAnimation_GeometryByTOPAnimation.toe_ 2019_12_09 11_54_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152718/459c4595-2ee4-1e24-ba4b-a7548be33bea.png)


# Particleを定期的にリセットしたい
ここはほぼ去年のと同じです。GLSLがMatte TOPに変わったくらい。
ランダムで加齢していって一定値以上になったらリセットトリガーを吐いて死んで0からカウントをしなおす、ループするTOPのシステムを組みます。
![TouchDesigner 2019.33840_ C__Users_02oz_Documents_TouchDesigner_GeometryByTOPAnimation_GeometryByTOPAnimation.toe_ 2019_12_09 11_53_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152718/a4b1012c-5c26-f0ef-7c57-98e35162d1ec.png)

# 初期のParticleは小さくしたい、死にそうになると色を暗くしたい
Particleの寿命のTOPにLookup TOPを当てて、RAMP TOPを使うことで色やスケールを制御できるようになります。

![TouchDesigner 2019.33840_ C__Users_02oz_Documents_TouchDesigner_GeometryByTOPAnimation_GeometryByTOPAnimation.toe_ 2019_12_09 12_04_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/152718/a4a95fc3-7df0-bf23-25c3-37f23e0f97b8.png)

以上！
本当は1LinerなGLSL TOPを使って色々やるやつを書きたかった・・・。
「certbot」と「certbot-auto」どちらを使うべき？


Difference between certbot and certbot-auto
https://stackoverflow.com/questions/53337530/difference-between-certbot-and-certbot-auto

から
IMPORTANT: What you need to know about TLS-SNI validation issues
https://community.letsencrypt.org/t/important-what-you-need-to-know-about-tls-sni-validation-issues/50811

```
If you use Certbot in its automatic Nginx or Apache modes, you need to upgrade to version 0.21 2.4k in order to issue certificates for new domain names. 
If you use the certbot or letsencrypt command, you are using packages provided by your operating system vendor, which are often slow to update. 
If this is the case, you should probably switch to certbot-auto 2.3k, which provides the latest version of Certbot on a variety of operating systems.
```

を確認すると、cerbot-auto を使うべきかな？
マンガでわかる Decorator

![65C5274A-86E4-491E-B3ED-F58B695D30F9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11525/9364504d-183d-4520-a761-93ebc0efb04f.png)

よーしあとはこれをかぶせるだけで、左右に動いたりチカチカしたりして目立つぞー。ようこそ私のホームページへ。あなたは counter.gif 番目のお客様です(キラキラ)。うーん、若い人材はたぶんインターネット老人会ネタには食いつかないよ。

ちょっとさみしい機能に皮をかぶせて、透過的にリッチな振る舞いを得られるようにするのが Decorator パターンです。

もとのインスタンスはそのままでオッケー。もとの要素を内部に持つ `<marquee>` や `<blink>` 装飾つきのタグで、もとあった場所を差し替え。装飾付きでも同じ型なので、外から見た扱いは同じだからおかしくなる心配なし。本来の機能に委譲 (穴あきパネル) してあれば、たぶん機能の本質は失われてないからデグレにはならない。

Python の文法には、関数にかぶせて振る舞いを拡張するデコレーターがありますが、まさにそれが、**関数というオブジェクト** に対する Decorator です。

視覚的な飾り付けでなくても、前後でログを取れるようにしたり、リソースアクセスへの排他制御をしたりも、Decorator パターンの形をしていることがあります。

本質以外の煩雑な仕事を、取り外しできる透過的なものに分離する、関心の分離ですね。アスペクト指向プログラミングほど透明ではないので、インスタンス関係のコンフィグには変更が必要だけど、特別な機構のない素朴なオブジェクト指向だけでやってるのがこのパターンのいいところです。

いわゆるラッパークラスです。だけど、同じラッパークラスの [Adapter](https://qiita.com/tanakahisateru/items/866f8938781984c98ef6) とは異なるパターンです。Adapter は「右と左の端子形状が合わなくてつながらないから、両端に異なるタイプの端子を設けてつなぐ」ラッパー、Decorator は「右と左の端子がすでにかみ合っているところに、それと同じ形の端子を付けた装置を割り込ませる」ラッパー。同じ構造に見えても、その目的が違うことに注意してください。
CloudFrontで爆速コンテンツに大変身させるお話

#CloudFrontで無駄なアクセスを無くそう
おはようございます．
突然ですが，皆さんは"Slack"使ってますか？
![slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543591/ff18d5e5-706c-8f98-a791-8a00033862b6.png)

Slackってただチャット出来るくらいなのになんであんなに人気なんでしょうかね．

LINEでよくね？

まあ，オプションで色々便利に出来ますが，正直使いこなせてる人はあまり見かけません．

多分，「高性能だから」と誰かが言ったから取り敢えず使ってるんじゃないですか？

Slackの素晴らしさはオプションだけでなく，
世界中どこにいても爆速なレスポンスの速さです．
![ダウンロード.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543591/0871f642-3bc4-ddef-0a08-57a439206855.jpeg)



Slackの速さの秘密はCloudFrontです．


日本人以外も対象としたサービスの場合，それはそれは爆速になります．
日本向けサービスだとしても，キャッシュから高速にコンテンツを配信します．

SEOにも関係してくる超重要なサービスなので是非理解してください．

##CloudFrontってなんだ
AWSが展開するCDN(コンテンツデリバリーサービス)
高性能な配信を可能にするサービスとなっております．

###なんで高性能な配信になるの？
図を見てください
![スクリーンショット 2019-12-09 10.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543591/9fbd7ddd-e055-ead3-f70a-58e711e721d0.png)
(図 : blackbeltより引用)

普段私たちがサービスを使う流れは，
ドメイン名問い合わせ -> DNSによりオリジンのIPアドレスに変換　->オリジンサーバーへアクセス->レスポンス
というのが従来の流れ．

しかし，CloudFrontでは図の四角形のように，

**位置情報を知るDBを作る**(位置情報DB)
**エッジと呼ばれるサーバーを作る**（Edge location）

という二点を担っています

###ストーリー

私たち)ねえねえ，位置情報DBさん，一番近いエッジサーバーはどこ？

位置情報DB)あんたに最も近いエッジサーバーはTokyoだぞ．

私たち)ありがとう行ってきます!

エッジ)よくきたな!キャッシュデータあるからこれ持って帰れよ！！

私たち)ありがとう！これでサービスが見れるわ！！

エッジさんがキャッシュを持っていなかったら，
エッジ)ちょい待ち！オリジンに聞いてみるわ！

となるわけです．

なので，
**位置情報を渡して一番近いエッジを探す**
**レスポンスをエッジからもらう**
これがCloudFrontです


##セキュリティ面
![ダウンロード (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/543591/0b18eecb-20fe-be55-d439-fa6f6093ceb6.jpeg)

ここまでの話だと，サービスに関係する通信は2つ

1.クライアント⇄エッジサーバー
2.エッジサーバー⇄オリジンサーバー

1の場合，cloudfront.netのドメインを使えば，標準でSSL化出来ます
ただ，多くは独自ドメインを利用すると思います．
なのでSSL証明書をインポートすればOK

2の場合，
なにによってオリジンサーバーが実装されているかで変わります．

S3 ... CloudFront側で「Viewer Protocol Policy」を「HTTPS only」に変更する.

S3静的ウェブサイトホスティング ... HTTPS通信出来ません．

カスタムオリジン ...「Origin Protocol Porlcy」を「HTTPS only」に変更し，SSL証明書をインポート

###署名付きURLも発行できる!
有効期限のあるURLも発行できます．
Amazon primeの期間限定ビデオ的なことも出来ます．
時間指定すればいいだけなので，超簡単．


##オリジンサーバーが最も格となる
これをいたずらされたらマズイです．従業員にいじらせない．
保護をしなければなりません．

S3ならS3バケットの設定からOAI(Origin Access Identity)を利用しCloudFrontとの通信のみを許可させます．

S3静的ウェブサイトホスティングでは，注意が必要です．
パブリックに見られても良いもののみを配信しましょう．

カスタムオリジンは，カスタムヘッダー設定でCloudFrontのみアクセス出来ます．


とまあ，これでほぼ全て説明した気がします．



まあ，大きなIT企業なんかはインフラ専門がいるからその辺やってくれてそうだけど，
フリーの人は勉強しておきたい分野の一つでしょう!
[初心者向け]Custom Classが追加できない場合

Xcodeで画面遷移を作る際、Custom Classに自分が作成したクラスが出てこない
<img width="274" alt="スクリーンショット 2019-12-09 11.32.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381405/a2d94b9f-5c25-1e74-0315-3d170be411df.png">

##解決方法

画像の所（Setting View Controller）をクリックする
<img width="1167" alt="スクリーンショット 2019-12-09 11.43.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381405/35e3da3c-ca13-f5dd-2581-a54d12fe0c90.png">


画面右側のプレビューからクリックして選択しているとViewが選択された状態になってしまうため、自分が作ったクラスが出てこない！ってなる（なってた）


Xcode version 11.2.1
【Unity】inspectorでクラスを設定する。

# クラスをInspectorに表示する。
```csharp
[System.Serializable]
public class SkillEntity
{
    public Skill.Target target;
    public Skill.Timing timing;
    public Skill.Type type;
    public int lineTimeSpan;
    public List<int> argument;
}
```
・「System.Serializable」属性をクラスに設定する。
golangでk8sクラスターのDeploymentをscale

題名の通り、golangでk8sクラスターのDeploymentをscaleさせます。

例えば定常運用(閉局)時に、以下のコードを改変してFaaSに登録しておけば1クリックでpodの数を0個にスケールさせることができます。(その場合FaaS用のService Accountをk8sクラスタに作成して権限を絞ったroleを作成/割り当てを行うことが望ましいかと思います)

まずはコードの依存関係です。

```go
package main
import (
        "fmt"
        "net/http"
        "io/ioutil"
        "crypto/x509"
        "crypto/tls"
        "encoding/json"
        "strings"
)
```

以下、メイン関数です。
(以下コード中のAPIサーバーのエンドポイントの変数`apiserver`、証明書パスの変数`crtpath`、トークンの変数`token`については[こちら](https://qiita.com/sota0113/items/42b8d2cd53190c9c5bb7#%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97)を参照してください。リンク先で、それぞれ`APISERVER`、`CRTFILE`、`TOKEN`変数で格納しています)


```go
func main () {
        apiserver := "https://192.168.99.100:8443"
        //以下はネームスペースdefaultのデプロイメントnginx-deploymentをスケールさせる例
        namespa
        path := "/apis/apps/v1/namespaces/default/deployments/nginx-deployment/scale"
        endpoint := apiserver+path
        //scaleはPATCHメソッド
        method := "PATCH"
　　　　 //PATCH対象データ。
        data := `{"spec":{"replicas":3}}`
        //PATCH時のContent-Typeはapplication/strategic-merge-patch+json
        ctype := "application/strategic-merge-patch+json"
        //証明書のパス
        crtpath := "/Users/sota-n/.minikube/ca.crt"
        //SAトークン
        token := "xxx..."
        //リクエストに対するリターンとステータスコードを表示。
        respCode,respBody := request(endpoint,method,data,ctype,crtpath,token)
        fmt.Println(respCode)
        fmt.Println(respBody)
}
```

以下がリクエストを発行する関数です。
エラーハンドリングは全て省略しています。

```go
//response bodyとステータスコードを返す関数。
func request (endpoint,method,data,ctype,crtpath,token string) (string,int) {
        //証明書読み取りと構成
        caCert, _ := ioutil.ReadFile(crtpath)

        caCertPool := x509.NewCertPool()
        caCertPool.AppendCertsFromPEM(caCert)

        //リクエスト構成
        req, _ := http.NewRequest(method, endpoint, strings.NewReader(data))
        req.Header.Set("Accept","application/json")
        req.Header.Set("Content-Type",ctype)
        req.Header.Set("Authorization","Bearer "+token)

        tr := &http.Transport{
                TLSClientConfig: &tls.Config{RootCAs: caCertPool,},
        }

        client := &http.Client{
                Transport: tr,
        }

        //リクエスト発行
        resp, _ := client.Do(req)
        defer resp.Body.Close()

        //レスポンス処理
        body, _ := ioutil.ReadAll(resp.Body) //"body" -> []uint8
        var val interface{}
        json.Unmarshal([]byte(body),&val)
        respBody,_ := json.MarshalIndent(val,"","  ")
        return string(respBody),resp.StatusCode
}
```

以上のコードをビルドして実行するか`go run <上のコード>.go`を実行します。
【Nim】とりあえずにむにむするための環境構築


# (ノ)・ω・(ヾ)ﾆﾑﾆﾑ

🎉🎉遅刻しました🎉🎉
~~慌てて急いで書いた~~

[Nim Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nim)の8日目の記事です。

Nimが正式リリースされ、正直なところそれまで聞いたことなかったのですがせっかくなので触ってみたいと思いました。
しかし、環境構築めんどくさいなーと思ってたらDocker Hubに普通にあったのでそれを使ってとにかくNimを書いてみる為の環境を作っていきます。

Docker Hub
https://hub.docker.com/r/nimlang/nim

## 用意するもの
- パソコン(大事)
- git
- Docker
- Docker Compose

## 手順

```bash
$ git clone https://github.com/SUGURUHASEGAWA/nimnim.git
$ cd nimnim
$ docker-compose up -d --build
$ docker-compose exec app nimble init ​
```

はい終わりです。
これでNimプロジェクトと初期コードが生成されるので思う存分にむにむしてください。


## 解説
流石にこれだけではアレなので少しだけ解説していきます。

### docker-compose.yml
``` docker-compose.yml
version: "3.7"
services:
  app:
    build:
      context: ./docker/nim
      dockerfile: Dockerfile
    tty: true //常時起動させたい
    privileged: true
    volumes:
      - ./workspace:/opt/${PROJECT_NAME}
    working_dir: /opt/${PROJECT_NAME}
```
ほぼおまじないレベルの記述です`PROJECT_NAME`は`.env`ファイルに定義されているので好きな名前に書き換えてください。

### Dockerfile
```Dockerfile:Dockerfile
FROM nimlang/nim:latest

RUN apt-get update && apt-get install -y \
  vim \
  curl \
  mingw-w64
```
これもほぼおまじないですね、
Docker Hubにあるコンテナのlatestバージョンを指定していますが、このVerはお好みで変えてください。
また、`mingw-w64`はWindows向けにクロスコンパイルするためにインストールしていますが、今回はとりあえず言語にふれるまでなので割愛します。
~~まだクロスコンパイルをちゃんとやってない~~

クロスコンパイルについては下記ページを参照するといいかも？
https://nim-lang.org/docs/nimc.html

### nimble init
コンテナを起動したら、コンテナ上で`nimble init`を実行してnimのプロジェクトを作成します。
実行すると対話形式でいくつか質問されるのでお好みで設定してください。(基本的に後からでも編集できます)

#### 質問内容
**Your name? [Anonymous]**
自分の名前を入力。
※未入力の場合は`Anonymous`になります。

**Package type?**
Library・・・別アプリケーションに機能を提供するライブラリを作成する場合
Binary・・・エンドユーザ向けのアプリケーションを作成する場合
Hybrid・・・未確認

**Initial version of package? [0.1.0]**
初期Verを設定します
※未入力の場合は`0.1.0`

**Package description? [A new awesome nimble package]**
パッケージの説明を入力。

**Prompt: Package License?**
パッケージのライセンスを選択。
MIT等いくつか選択肢が出てくるのでお好みのものを


### Hello, World!
**※Package typeでBinaryを選択したものとします**

workspace配下のsrcディレクトリ内にあるnimファイルを見てみると以下の様に記述されています

```
# This is just an example to get you started. A typical binary package
# uses this file as the main entry point of the application.

when isMainModule:
  echo("Hello, World!")
```

既にこんにちはしてくれているので、ありがたくこれを使わせてもらいましょう。
※編集する際はこのファイルを基準に記述してください

プロジェクトにビルドは下記コマンドを実行してください

```
docker-compose exec app nimble build
```

コマンドを実行すると、workspace配下にバイナリファイルができているので、実行すると無事こんにちはできます

```
$ ./nimnim
Hello, World!
```

## あとがき
Nimの環境構築は正直Dockerを使わなくてもそこまで難しい手順はありませんが、
最近個人的に使用するPCがコロコロ変わるので、いちいちNimをインストールするのが手間だったので、Dockerでの環境構築をしてみました。
(コンテナ持ってきて起動してるだけなので構築と言っていいものか)

クロスコンパイルはよく分からなくて手つかずですが、とりあえずNim言語を触って見るぶんにはコスト低く初めれるんじゃないかと思います。

(ノ)・ω・(ヾ)ﾆﾑﾆﾑ
【Zsh】ターミナルから爆速で自分のグローバルIPアドレスを調べる方法

# ターミナルから自分のグローバルIPアドレスを調べる
普段作業をしていて自分のグローバルIPアドレスを知りたくなる時があるかと思います。

調べる方法としては「[あなたが現在インターネットに接続しているグローバルIPアドレス確認](https://www.cman.jp/network/support/go_access.cgi)」ここで調べたりするのが有名な方法なんじゃないでしょうか。

ですが、今回はターミナルを用いてグローバルIPアドレスを調べる方法をご紹介します。

## エイリアスを使う

今回はMacのターミナルでZshを使っての方法をご紹介します。

### 環境

- macOS Mojave v.10.14.6
- iTerm2
- Zsh


`.zshrc` に以下を書きます。

```zsh
alias myip="curl http://ipecho.net/plain; echo"
```

そうしたら以下のコマンドを叩いて有効化します。

```
source ~/.zshrc // .zshrcがあるパスをここに書く
```

これで準備は完了です。

## グローバルIPを調べてみる

あとはターミナルで`myip`コマンドを打つだけです。

## 参考

[10 Zsh Tips & Tricks: Configuration, Customization & Usage](https://www.sitepoint.com/zsh-tips-tricks/)
画像アップロードサイト作る

テキスト先頭に書き込み
https://qiita.com/fallout/items/b290e51241911506e692

jquery loadについて
https://www.sejuku.net/blog/42555

php 変数
https://qiita.com/ito_gen/items/0dc64e4d38d98d7acd67
Java Mapをループさせる方法(forEach / 拡張for文)

JavaでMapをループさせる方法をメモ

```java
Map<String, String> map = new HashMap<>();
// mapのkey,valueのset処理は省略

// forEachのパターン
map.forEach((k, v) -> {
    System.out.println(k);
    System.out.println(v);
});

// 拡張for文のパターン
for(Map.Entry<String, String> entry : map.entrySet()){
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}
```

forEachの方がすっきりして見やすいかも。
AtomicDesignについて学んだことメモ

# AtomicDesignとは
- コンポーネント単位で定義していくUIデザインの手法のこと
- UIの構造を5つの段階で考える
    - 最小単位のコンポーネントであるAtoms(原子)からデザインし、Molecules(分子)、Organisms(生体)、Templates(テンプレート)、Pages(ページ)の順にデザインする
    - Atoms(原子)
        - label, input, buttonなどの単位
    - Molecules(分子)
        - Atomsをもとに作成する
        - label, input, buttonをひとまとめにしたsearch unit（検索）などの単位
    - Organisms(生体)
        - Moleculesをもとに作成する
        - AtomsやMoleculesとは違い再利用性があまり求められていないパーツ
        - ロゴ、ナビゲーションバー、検索をひとまとめにしたヘッダーなどの単位
    - Templates(テンプレート)
        - Organismsをもとに作成する
        - ヘッダー、バナー、フッターなどをひとまとめにした単位
    - Pages
        - Templatesに内容を入れ作成されたページ
- 多数の画面において共通使用するUIを作ることができる
- サイト全体のUIを統合された状態に保つことができる
- デザインの変更に対応しやすい

## 参照
- [Atomic DesignとCSS設計 - Atomic Designとは何か | CodeGrid](https://app.codegrid.net/entry/2017-atomic-design-1)
- [Atomic Design を分かったつもりになる | DeNA DESIGN BLOG](https://design.dena.com/design/atomic-design-%E3%82%92%E5%88%86%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%A4%E3%82%82%E3%82%8A%E3%81%AB%E3%81%AA%E3%82%8B/)
- [Atomic Designの考え方と利点・欠点](https://blog.kubosho.com/entry/using-atomic-design)
HYC Innovative Product, 1×48 MEMS Optical Switch

The upcoming 5G application promotes the upgrade of the all-optical network (AON). As a key part of the all-optical network, the ROADM market is expected to usher in rapid growth, especially in metropolitan area networks.

MEMS optical switch is one of the core devices in ROADM. Optical switch is a kind of optical path controlling device, with the ability to control and switch the optical path. MEMS fiber optic switches are based on micro-electro-mechanical system (MEMS) technology, which achieved low insertion loss and highly repeatability by rotating the mirror of MEMS chip. 

Coupled with wavelength selective switch (WSS), MEMS fiber optical switches can configuration flexibility, wavelength independent (enables any wavelength to be added/dropped on any port), direction independent (receive multiple input wavelength channels in different directions), and no conflicts (the ability to download the same wavelength channel from different directions through the same switch). This is of great significance for the flexibility and low cost of network construction. A typical CDC-ROADM technology structure is shown in the figure.

![92.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463940/03598efc-1189-28e1-c998-8ad79024f455.jpeg)

With the rapid development of Internet applications the implementation of ROADM technology based on WSS (Wavelength Selective Switch) + MCS (Multi-Cast Switch) will become an ideal solution in the construction of metropolitan area networks. 1×N MEMS optical switch is an important part of MCS.

Based on the demand for existing business and the demand for future network development, HYC has launched a series of independently developed MEMS technology products, including 1×48 channel MEMS optical switch, MEMS optical switch module integrated with WDM, PLC or PD, and MCS module.

HYC’S 1×48 Optical Switch is based on MEMS (Micro Electro Mechanical System) technology and Free-space Platform. With the features of compact structure, low latency, efficient switching and other features, it is widely used in fiber monitoring system, optical add/drop system and measurement instrument system. 

![91.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463940/7b7b27b5-56e3-7387-e133-6a846d999ee4.jpeg)


HYC is a leading OEM/ODM Fiber Optic Devices Manufacturers & Suppliers and provides advanced fiber optic connectors, adapters, patch cord, PLC splitter, WDM, MEMS optical switch, FTTx  for data center and telecommunication networks.
Chatworkのグループチャットをカテゴリ毎に分ける方法

参画プロジェクトが増えてきたり、客先とのやりとりでチャットワークを使用していると
チャットのグループがどんどん増えてくると思います。

そんな時にグループチャットの名前を一定の命名規則で付けていると
検索窓からある程度便利に検索できたりしますが全ての部屋がそうはいきませんよね？

そんな時に自分のカスタマイズでグループチャットをカテゴリ毎に分けられる設定です。

左上のメニューから「カテゴリ」→「＋」ボタンをクリックします。

<img width="224" alt="スクリーンショット 2019-12-09 11.14.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/452135/cd958d58-37db-28b7-dd18-a11597f8cb77.png">


カテゴリを新規作成モーダルが表示されるので
ここでカテゴリ名とカテゴリに入れたいグループチャットにチェックを入れるだけです。

確認したいカテゴリ毎に表示をフィルタリングできるので余計な情報を消して集中できて便利です。


参照
https://help.chatwork.com/hc/ja/articles/203354300
用語について

レイテンシー
処理速度の遅延。レスポンスの遅いサイトだとレイテンシーが大きいという。

レプリケーション
データの複製（レプリカ）を、他のコンピュータに即座に反映させること。

プロビジョニング
システムを使えるように、サーバーやOSを導入したり、ネットワークの設定をして、準備すること。

クラスター
群。複数のコンピュータを連結して、１大のコンピュータのように稼働させるとか。この束ねることをクラスタリングという。

ストリーム
データの処理を連続的に行うこと。

サプライデータ
供給の意味。供給されたデータ。

スタック
一時的に退避させること。

デプロイ
配置する。配備する。ソフトウエアをネット上で使えるようにすることとか。

R
統計とかに優れたプログラミング言語。エクセルより高機能に使える。
エクセルは行数少ないし、処理速度がくそだから、R使ってみようかな。

Rstudio
R用のIDE。使ったことないからわからない。使ってみたい。

オンデマンド
ユーザーの要求に対して、レスポンスするシステム。Eラーニングとか。

ホスティング
サーバーを借りること。借りたサーバーでシステムを起動させ、サービスを提供する。

ハウジング
サーバーを置く場所を提供する。

トラフィック
一定時間内にネット上で転送されるデータ量

シンボリックリンク
windowsのショートカットみたいなもの

SVG
XMLを使って、画像を図形の集合として表現する記述言語。写真とかはビットマップ形式。こっちはベクター形式。ビットと違って、図形を表す数値の集合として記憶するので、拡大縮小しても画質が落ちない。

DOM(document object model)
HTMLとかXMLとかの書き方。の基準。

バインド
結びつけるって感じ。

Node.js
サーバーサイドで動く、javascriptのこと。フロントサイドの言語だと思うわれがちなjavascriptだけど、サーバーサイドでも使える。
rails s で（http://localhost:3000）が立ち上がらない解決方法

新規アプリ作成に入り、　$ rails new　　のあと
.....

$ rails s　にて localhost:3000　が立ち上がらない場合に解決した方法。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
結論：初心者のため、　「rails s　立ち上がらない　」等の検索を先に行ってみたが、
結局の解決方法は（実行するべきコマンドすらもが）書いてある，という事で、今後の勉強になりました。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

```.............
Webpacker configuration file not found /Users/..../config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - .../config/webpacker.yml (RuntimeError)
```

エラー文の中に、webpackerファイルが無い、インストールするように出た為、

$ rails webpacker:install



```
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
```

すると、今度は　https://yarnpkg.com/lang/en/docs/install/　
からダウンロードするように出る。
$ brew install yarn　　で出来るとサイト内にある為、コマンド実行。

```
You should change the ownership of these directories to your user.sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
```

すると今度は、権限を変えるように出た為、書いてある通りにコマンド実行。
（$ ls -lで　現在の確認を一応行い）
 
 ＄ sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7

(パスワード：入力成功）

$ rails s　成功
無事にいつもの画面が出た。


---
余談

作成したrailsアプリをコピー等してフォルダ移動した場合：
ターミナルで、移動したフォルダに入り、
再度 $　rails　s

＊最近、知識が薄い私は混乱した。
railsを離れ、JavaSprict等で　htmlファイルをネットにひっぱっていた為、そもそも rails　s　を忘れていた。
どこかにPathが書いてある？。。。と錯覚した。そもそも rails　s　でした！！
Rails関連覚え書き

※自分用メモ
※随時更新

##アプリケーション作成
雛形作成
```rails new [application_name]```
バージョン指定をする場合はrails_5.2.4_new
データベースを指定する場合はアプリ名の後に--database=[database]
　→-d [database]でも可能。デフォルトはsqlite
Homebrewの環境をバックアップする

#環境
Mac OS Catalina
バージョン 10.15.1
homebrew

#Brewfileを作成する
```brew bundle dump```

その後、Brewfileをgoogle driveなどに保存する。

#Brewfileを使い、新しいPCにhomebrewで構築した同じ環境を構築する。

最初に、バックアップしたBrewfileがあるディレクトリで、
```brew bundle```
を実行する。

これで、以前のPCとまったく同じ環境を構築できる。