OmniAICreator/Qiita-1.07M huggingface dataset:
MicroPython ドキュメンテーションの和訳(作業中)を公開します

MicroPython の和訳をダラダラと進めていましたが、まだ途中ながらも公開することにしました。

以下で公開してます。

https://micropython-docs-ja.readthedocs.io/ja/latest/

今のところ最新に追従できていて、以下のようなステータスです。

* pyboard のクイックリファレンスはひととおり訳しました
* ESP8266 のクイックリファレンスもひととおり訳しました
* WiPy (初代CC3200版)のクイックリファレンスは当面、訳す気になりませんし、需要もほとんど無いでしょう
* CPython との違いはひととおり訳しました
* MicroPython 言語については用語集と REPL についてのみ
* ライブラリの訳はまだ 1/3 ぐらい？

自分でもちょっと雑に訳してるなぁと思っていますので、間違いを見つけたら [GitHub](https://github.com/MinoruInachi/micropython/tree/doc-ja) の issues にでも報告してください。

そろそろ MicroPython の次のバージョンが出てきそうな雰囲気です。ESP32版のドキュメンテーション追加の話も出ているようです。ESP32版出てきたら訳のほうも早急にやりたいと思ってます。
打刻を忘れないために

# はじめに

この記事は過去にIPU TOKYOで発表した内容を再編集したものです。

勤怠管理システムが導入され、打刻の習慣がない人は、打刻を忘れることがあると思います。

打刻忘れをしないために、壁紙を工夫したり、Slackの`/remind`コマンドを使う人もいるかもしれません。

ここでは、Macアプリケーションを作って、打刻忘れを防止します。

# 方針

Mac起動時に自動で勤怠管理システムのURLを開きます。
そして、Macのシステム終了時にも自動で勤怠管理システムのURLを開きます。

# ステータスバーに常駐させたい

ステータスバーに常駐するアプリケーションとして作っていきます。
作り方は、過去に投稿した[記事](https://qiita.com/arthur87/items/1998541004853d171088)を参考にします。

![スライド07.jpeg](https://qiita-image-store.s3.amazonaws.com/0/3862/fb6516cb-036e-a8d4-55cd-d9a3ed078844.jpeg)


AppDelegate.swiftを下記のように書き換えます。

```swift:AppDelegate.swift
import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    let url = URL(string: "http://example.com/")
    var cancelOnce = true

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application

        NSWorkspace.shared.open(url!)
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }

    func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
        if cancelOnce {
            cancelOnce = false
            NSWorkspace.shared.open(url!)
            return NSApplication.TerminateReply.terminateCancel
        }

        return NSApplication.TerminateReply.terminateNow
    }
}
```

`applicationDidFinishLaunching`で起動時、`applicationShouldTerminate`にシステム終了時にURLを開きます。
`NSApplication.TerminateReply.terminateCancel`を返すことでシステム終了を中断します。


# 問題発生

実行すると、システム終了時にURLが開かず、そのまま終了してしまいます。

どうやら、ステータスバーに常駐させるためにinfo.plistに追加したLSUIElementが原因のようです。

```
<key>LSUIElement</key>
<true/>
```

ということでこれがあると`func applicationShouldTerminate`が実行されません。
ステータスバー常駐は諦めます。


# 完成

Dockにアイコンが表示されてしまいますが、info.plistに追加したLSUIElementを削除して完成です。

システム終了をするとシステム終了が中断され、URLが開きます。

![015.jpeg](https://qiita-image-store.s3.amazonaws.com/0/3862/23069016-2f33-86f4-ed88-d584f4f94d26.jpeg)



# まとめ

打刻になれるとシステム終了の中断が邪魔になります。
マイグレーションのいろは

####マイグレーションファイルとは？

データベースを生成する際の設計図。
マイグレーションファイルを実行することにより、内容に基づいたテーブルを生成。

<br>
####マイグレーションファイル生成

`（参考例：複写で書けるカーボン紙）`
モデルを生成すると、同時に自動で出来る


``` 
rails g model モデル名
```

<br>
####マイグレーションファイル保存

`（参考例：本用紙は提出、
　　Sublime textは自分の控え）`
カラムの作成など、編集後


```
rake db:migrate
```

<br>
####マイグレーションファイル更新
`（参考例：本用紙を書き換えに行く）`
保存前の状態に戻す

```
rake db:rollback
```
↓
編集
↓

```
rake db:migrate
```

再度保存

<br>

####更新完了しているか確認

```
rake db:migrate:status
```
up：実行済
doun：実行未

```
Status   Migration ID    Migration Name
--------------------------------------------------
   up     20181224001920  Devise create users
 down     20181224001920  Devise create users
```


<br>
<br>
エラー

titleのメソッドがnilになっているので、title methodを定義する必要があるのでしょうか。

ActionView::Template::Error (undefined method `title' for nil:NilClass):

    1: <%= current_user.username %>
    2: 
    3: <h2><%= @post.title %></h2>
    4: <p><%= simple_format @post.body %></p>
    5: <%= image_tag @post.image.url %>
    6: <h3>Comments</h3>
  
app/views/posts/show.html.erb:3:in `_app_views_posts_show_html_erb___160686775430767584_70121551255340'
Ada言語 11日目 while文

#はじめに
while文をやりました。
インクリメントを使用したかったのですが、C言語でいうところの`a=a+1`で実現しました。

#ソースと結果
```main.adb

with Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Text_IO;
use Ada.Integer_Text_IO;

procedure main is

    hennsuu : Integer := 1;

begin

    while hennsuu < 10 loop　-- hennsuu <= 9 と同じ

        Ada.Integer_Text_IO.Put(hennsuu, 1);

        hennsuu := hennsuu + 1;

    end loop;

end main;

```

`実行結果 : 123456789`

ちなみに、C言語の`while(1)`をやろうとして`while 1 loop`としたところ、以下のようなエラーが出ました。
`expected a boolean type`
`found type universal integer`
で、インクリメントの部分を消して、`while hennsuu = 1 loop`で無限ループを試したところ、無限ループにはなったのですが、無限ループだよというワーニングが出ました。
`variable "hennsuu" is not modified in loop body`
`possible infinite loop`

#最後に
基本的な文法はある程度できてきたのでそろそろキーボード入力なんてやってみたいですね。

#日記一覧へ
[Ada言語を習得する日記一覧](https://qiita.com/C_Assembly/items/50a0f9d8542679d92ea8)
Plotly.jsで1つのチャート上でレンジスライダーを実現する

# はじめに
チャートライブラリPlotly.jsでは、チャート上をマウスドラッグすることで参照するx軸の範囲を指定する[レンジスライダー](https://plot.ly/python/time-series/#Time-Series-With-Rangeslider)が実現可能です。
しかしこの方法は、データを表示するチャートと、レンジを指定するチャートの2種類が必要です。
このエントリでは1つのチャート上でレンジスライダーのような範囲指定を簡単に実現する方法を紹介します。
<img width="1815" alt="スクリーンショット 2018-12-24 18.56.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/119348/e759fe57-44cd-904a-bc84-effa00e5bad8.png">

# やり方
layoutにて[selectdirection](https://plot.ly/javascript/reference/#layout-selectdirection)属性を指定します。
従来はdragmodeがselectの時、チャート上でマウスをドラッグした矩形箇所が選択範囲となります。
しかしselectdirectionで'h'と指定することで、水平方向のみが選択可能となり、垂直方向は最上部から最下部まで常に選択状態となります。
結果、レンジスライダーと同じような選択の動作になります。

```javascript
const plotLayout = {
  title: 'Range slider chart',
  dragmode: 'select',
  selectdirection: 'h' // 'h' or 'v' or 'd' or 'any'
};
```

またドラッグ箇所のスタイルを変更するため、plotly_selectingイベントを取得し、ドラッグ箇所を示すDOMのスタイルを指定します。

```javascript
plotDiv.on('plotly_selecting', (eventData) => {
  Plotly.d3.selectAll('.select-line,.select-outline-1,.select-outline-2')
    .style('stroke', 'blue')
    .style('fill', 'rgba(0, 0, 255, 0.1)');
});
```

サンプルコードは下記のとおりです。
<p data-height="265" data-theme-id="0" data-slug-hash="QzvZrK" data-default-tab="js,result" data-user="suzunashi" data-pen-title="Range slider chart" class="codepen">See the Pen <a href="https://codepen.io/suzunashi/pen/QzvZrK/">Range slider chart</a> by Susumu SUZUNASHI (<a href="https://codepen.io/suzunashi">@suzunashi</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
メモ：「３０日でできる！OS自作入門 」15日目

## マルチタスク-1

1) タスクスイッチに挑戦
- 一つのCPUにでも複数のタスクを実行させるために、少しずつ切り替えながら行っているもの
- TSS (タスクステータスセグメント）
- JMP は 内部ではEIPを書き変えられてるもの

```c

struct TSS32 {
	int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3;
	int eip, eflags, eax, ecx, edx, ebx, esp, ebp, esi, edi;
	int es, cs, ss, ds, fs, gs;
	int ldtr, iomap;
};
```

- 一行目はタスクスイッチしても書き換えられない（backlinkは変わる場合がある）
- ldtr, iomap も同じだが、なんでもいいわけではない。ldtr は 0, iomap は0x40000000 に一旦しておく
- タスクスイッチは JMP 命令を使います
    - Near　（EIP) と Far モードがある　（EIP+CS)
    - JMP DWORD 2*8:0x0000001b はファーモード
- ２つのタスクある場合、TSS ２つ作ります。
    - gdt にそれぞれ登録して
    - 第１ステップとしてTRレジスタを切り替え
        - gdt のインデックス番号 * 8 　で LTR 命令を使います。
        - JMPで別のセグメントに移動 JMP 4*8:0
        - TSSレジスタの初期値を指定して上げる必要がある
        - タスクBのスタックを設定

- １０秒後にタスクスイッチさせて反応なくなることを確認

2) もっとタスクスイッチ
- ５秒後にもとのタスク戻す

3) 簡単なマルチタスクをやってみる
- 各タスクごとに関数作るではなく、FARJMP の関数を作ってスイッチする方法
- 2ミリ秒ごとにタスクスイッチ

4) 簡単なマルチタスクをやってみる2
- タスクBに何かを表示させたい
- シートの情報はタスクAしか知らないので、共通のところに置く

５） スピードアップ
- 画面の再描画を１ミリ秒ごとに変更
- カウンタは速いが、画面の描画が遅くなった
- return してはいけない

6) スピード測定
- 一定期間にカウントの差分を出す

![スクリーンショット 2018-12-24 18.47.32.png](https://qiita-image-store.s3.amazonaws.com/0/109145/b0fc9ee4-3fb3-acf9-f7bd-1f56c7b6e05b.png)

7) もっとマルチタスク
- 今はプログラム側からタスクスイッチさせているので本物ではないかもしれない
- プログラム関係なくタスクスイッチするのが本当のマルチタスク
- タスクの中でではなく、inthandler20 でFIFOキューから取り出してタスクスイッチする方法

![window-move2.gif](https://qiita-image-store.s3.amazonaws.com/0/109145/df66dc5d-6ccd-28aa-aa17-50a725043091.gif)

- タスクBの無限ループのカウンタがある割には反応がいいかも
Apache Drillのインストール

やってみたのでメモ

# 前提
- CentOS7
- Java8インストール済み
- Embedded Modeで実行（ブラウザから動かしたいときはDistributed Mode）

# 手順
1. Apache Drillをインストールしたいディレクトリに移動する

    ```
    # cd /opt
    ```

2. Apache Drillのtarファイルをダウンロードする

    ```
    # curl -LkvOf http://ftp.riken.jp/net/apache/drill/drill-1.14.0/apache-drill-1.14.0.tar.gz
    ```

3. tarファイルを展開する

    ```
    # tar -xvzf apache-drill-1.14.0.tar.gz -C drill --strip-components 1
    ```

4. 起動する

    ```
    # /opt/drill/bin/drill-embedded
    ```

# 参考
- [Embedded Mode Prerequisites](https://drill.apache.org/docs/embedded-mode-prerequisites/)
- [Installing Drill on Linux and Mac OS X](https://drill.apache.org/docs/installing-drill-on-linux-and-mac-os-x/)
- [Starting Drill on Linux and Mac OS X](https://drill.apache.org/docs/starting-drill-on-linux-and-mac-os-x/)
[速報] visdomがなぜか使えなくて困っている人へ

# visdomが使えない
Pytorchを使っているみなさん、visdom使ってますよね？
 (tensorboardX派の人もちらほら)

visdomを使うときには、

`pip install visdom`

とかで、パッケージをinstallした後に、

`visdom -port 8098`

`python -m visdom.server -port 8098`

とかで起動すると思いますが、
この際に、layout-bin-packerというスクリプトをダウンロードする仕様になっています。

しかし、visdomの最近のアップーデートで、以下のような404エラーを出すようになってしまいました。

```
Downloading scripts. It might take a while.
ERROR:root:Error 404 while downloading https://unpkg.com/layout-bin-packer@1.4.0
It's Alive!
INFO:root:Application Started
You can navigate to http://localhost:8098
```

実際には公式のissueにも挙げられていてfixされているのですが、pipでインストールできる最新のバージョンには、まだ反映されていません。
https://github.com/facebookresearch/visdom/pull/530

そのため、Visdomを使いたい人は以下の手順で、githubのsourceからインストールしてみてください。無事使えるはずです。(こんな無駄なことを調べるのに時間を割いて欲しくないので、記事にしておきました。。)

## 修正方法 (sourceからinstallするだけ)
1. `pip uninstall visdom`
2. `git clone https://github.com/facebookresearch/visdom.git`
3. `cd visdom`
4. `pip install -e .`

以上です。

### 検索ワード
検索したときにひっかかりそうなワード並べておきます。
[visdom][使えない][画像でない][ダウンロード][エラー]

困ってる人に届け、、、🎅
ebコマンド(awsebcli)のインストール

## 概要
AWSのElastic Beanstalkを使ってみるために、awsebcliコマンドをインストールしてみる

## Homebrew でインストール
macOSを使っているのであればこちらの方が楽そうですね。

```bash:ターミナル
$ brew update
$ brew install awsebcli
$ eb --version
EB CLI 3.14.6 (Python 2.7.1)
```

## pip でインストール (python2.7)
macOSのpython2.7環境で作業しています。

```bash:ターミナル
$ python --version
Python 2.7.15
$ pip install awsebcli --upgrade --user
$ vi ~/.bash_profile
※ `export PATH=LOCAL_PATH:$PATH`を追記
$ source ~/.bash_profile
$ eb --version
EB CLI 3.14.6 (Python 2.7.1)
```
※ --upgrade: すでにインストールされている要件をアップグレード
※ --user: オペレーティングシステムによって使用されるライブラリの変更を避ける
   ( ユーザーディレクトリのサブディレクトリにプログラムをインストール )
※ インストール先 (macOS: ~/Library/Python/3.4/bin)

## pip でインストール (python3.４−３．６)
macOSのpython3.4環境で作業しています。

```bash:ターミナル
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python3 get-pip.py --user
$ pip3 install awsebcli --upgrade --user
$ vi ~/.bash_profile
※ `export PATH=LOCAL_PATH:$PATH`を追記
$ source ~/.bash_profile
$ eb --version
EB CLI 3.14.6 (Python 3.4.1)
```

## windows環境
windowsのpython3.6環境で作業しています。
下記サイトからPython3をインストールする。

**python.org**
https://www.python.org/downloads/

```bash:コマンドプロンプト
# 環境設定（パスを通す）
C:¥> set PATH=%PATH%;C:¥Python36-32
C:¥> set PATH=%PATH%;C:¥Python36-32¥Scripts

# バージョン(python)
C:¥> python -V
Python 3.6.4

# ebコマンドのインストール
C:¥> pip install awsebcli

# バージョン(ebコマンド)
C:¥> eb --version
EB CLI 3.12.3 (Python 3.6.4)
```



## 参考サイト
- [AWSドキュメント - macOS で EB CLI をインストールします](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install-osx.html)
- [AWSドキュメント - EB CLIのインストール](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb-cli3-install.html)
【Blender】３ボタンマウスを２ボタンマウス設定にする（マウス設定）

Blenderでは、ホイール付き３ボタンマウスを推奨しているので、２マウスの設定に変更する

<font color="Magenta">「Alt」+ マウス左ボタンで、３ボタンマウスの中央ボタンになります
※Macは「option」キー
</font>

環境メモ
⭐️Mac OS Mojave バージョン10.14
⭐️Blender v2.79.6
⭐️Mac Book

1.[File]-[User Preferences]を選択する
<img width="636" alt="スクリーンショット 2018-12-24 18.31.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/2e123889-99b2-2e68-0e69-29bf79c66bad.png">

2.[Input]-[Emulate 3 Button Mouse]チェックONする
<img width="797" alt="スクリーンショット 2018-12-24 18.33.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/93155/898a1094-cb0f-0c8f-2c8c-46679bcc78dd.png">
obnizで初学者が苦労したこと

https://obniz.io/users/1085
#１．設定
自宅のWifiでは当初クラウドに接続できなかった。友人宅では接続できるとのことなのでobnizの故障ではないだろうと、ルーターをロジテック製から2ndstreetで980円で購入したCorega製に変更（無線ＬＡＮのＡＰは流用）すると接続できるようになった。どうも相性があるようです。前からiosからはDHCPが効かない状態だったのでルータのDHCPが故障していたと判断。

#２．サンプルプログラムの動作確認
##2.0  Hello World
問題なし。あまりのも簡単すぎてちょっと感動する。

##2.1　ＬＥＤ
ＬＥＤなんて大分では売っていない。抵抗入りなんて特にない、１００均一のダイソーで「ワイヤーライトＬＥＤ点滅」を買って分解して抵抗とＬＥＤを入手。サンプルソースのままで問題なく点灯できる。
さらに、故障したロジテックのルーターから青色LEDを複数部品どりして上記の抵抗経由接続問題なし。サンプルソースをコピーするだけでＬＥＤの数を増やしていけます。抵抗１個でＬＥＤを複数並列でも点灯はしましたが、並列にする時は個別に抵抗を入れるのが正しいようです。
※正月休みに、抵抗入りのLEDを博多天神のカホ無線で買ってきました。８０円（税抜き）でした。
※抵抗とＬＥＤのセットが博多ヨドバシカメラの模型コーナーで売っていたので買ってきました

##2.2 スピーカー
これも１００均一のものを買って来たが分解の過程でスピーカーのエナメルリードを切断してしまった。実験部品としてはあまりにも貧弱。ハードオフで妖怪ウォッチのジャンクを１００円で購入。こちらは頑丈なつくりのスピーカー(サンプルの画像と同じものと思えるもの)がとり出せて、無事テスト完了。妖怪ウォッチは分解も簡単でＬＥＤも１個とれるのでおすすめ。
ＰＣ９８の起動音２０００Ｈｚから１０００Ｈｚを鳴らしてみる。
参考にたページ
https://www.okqubit.net/98tunes/
http://ingtec.nobody.jp/pc98.htm
AP.WAV
http://nalab.mind.meiji.ac.jp/~mk/fourier/python-sound/
に下記を追加してFFTすると
elif samplewidth == 1:
    data = np.frombuffer(buf, dtype='int8')
    data = data / 256.0
![image.png](https://qiita-image-store.s3.amazonaws.com/0/331312/63ee0a10-5bc4-bca3-d9d7-2cda823f8d98.png)

##2.3 学習リモコン
CRM-1というパソコンTVボード用のリモコン装置からリモコン受信器を取り出して接続。
050と書かれている部品だったがネットで検索するとこの写真の基盤についているものと同じで、基盤の表記から
サンプルのOSRB38C9AAと同じピンアサインであるとわかる、サンプルソースそのままで使えた。
![0004302_74ebr35526202003_eax32946001_eax329460012_50pc5d_uc_lg_50_lcd_tv_ir_sensor_lg_lcd_tv_ir_sensor_550.jpeg](https://qiita-image-store.s3.amazonaws.com/0/331312/fda61f98-9036-39f5-bcb5-3d6215497350.jpeg)
発信用は不要になったリモコンから発信用ＬＥＤをとって使った、抵抗はＬＥＤ用のものではだめで、リモコン基盤のチップ抵抗をニッパーで切り出して接続したらうまくいった。チップ抵抗はデジタルテスターで抵抗値をはかっても０オーム、直結と変わらない値。
自室の照明のリモコンを読み込んで、読み込んだデーターを使ってWebページからオンオフできることを確認。

#３今後もサンプルを試していきます。
故障したアンドロイドパッドからカメラやスピーカーをとったのでこれをためしてみみたい。
２０１８年１月４日
カホ無線で以下のパーツを購入
・温度センサー
・磁束センサー
・距離センサー
・赤外線センサー（波長違い）
・光センサー
※ブレッドボードとその配線類
ヨドバシで以下のパーツを購入
・模型用のモーター
・ＬＥＤと抵抗のセット
※クリップ付き配線類
今後は半田ゴテなしでいろいろ試せます。
[PHP]requireで外部のファイルを参照する

```php:index.php
<?php
require 'require.php';
```

↑これで、index.phpからrequire.phpを参照する紐付けができている。


```php:require.php
<?php
$name = 'Riotam';
```

↑呼び出される先のphpファイル、require.phpに変数$nameを用意する。

```php:index.php
<?php
require 'require.php';
echo "Hello! ". $name;
```

↑最後に変数$nameを使った処理を書く。

<img width="287" alt="スクリーンショット 2018-12-24 18.36.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/330623/ac51322d-5e9b-fec6-0561-5cd00b6106d8.png">

↑実行結果。
index.phpで用意していない変数$nameが反映されている。
Nefry BTでGrove Servoを動かしてみる


Groveのコネクタでサーボモータを動くようにしてくれているものがあります。

スイッチサイエンスなどで購入できます。

> [GROVE - サーボモータ](https://www.switch-science.com/catalog/1858/)

いつもSG90で試しててこれは触ったことなかったので試してみます。

このサーボモーターモジュールをNefry BTで使っていきます。ライブラリは1.4.1です。

http://wiki.seeedstudio.com/Grove-Servo/

<img src="https://i.gyazo.com/71ba64ebc5577116e54356d464a65f88.jpg" width="600">

ESP32系だとGroveのWikiにあるサンプルは動かない（はず）なので注意してください。

## ESP32だとArduinoのServoが通常通り使えない

まず、`#include <Servo.h>`がコンパイルが通らないです。

```
警告：ライブラリServoはアーキテクチャ(avr, sam, samd, nrf52, stm32f4)に対応したものであり、アーキテクチャ(esp32)で動作するこのボードとは互換性がないかもしれません。
In file included from /Users/n0bisuke/dotstudio/Arduino/nefrybt/servo/servo_arduino_test/servo_arduino_test.ino:1:0:
/Applications/Arduino.app/Contents/Java/libraries/Servo/src/Servo.h:73:2: error: #error "This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor."
 #error "This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor."
  ^
exit status 1
ボードNefry BT R2 / R3に対するコンパイル時にエラーが発生しました。
```

などのエラーがでます。そういうものなので焦らずいきましょう。

## PWM制御する

代わりにPWMで制御します。

@takudooonくんの[PWM制御をマスターしよう！Node-REDでサーボモータを遠隔制御する方法＆初ハンズオンレポート](https://dotstud.io/blog/nefry-servo-handson-takudooon/)が分かりやすいです。

* D2のGroveピンに接続します。

```servo.ino
//基本Iotは2.4GHz帯を使うこと
#include<Nefry.h>
#include"esp32-hal-ledc.h"

#define SERVO_PIN D2

//PWM信号の周波数をPWMをつくっているクロック周波数で割ったもの
//ledcSetupでPWMの範囲を8bitに設定したとき、0～255　10bitのときは0～1023となる、2進数の話
#define PWM_BITWIDTH 16

//角度 -> PWM
int deg2pw(int deg){
    double ms = ((double) deg - 90.0) * 0.95 / 90.0 + 1.45;
    return (int) (ms / 20.0 * pow(2, PWM_BITWIDTH));
}

void setup() {
  Serial.begin(115200);
//ledcSetup(チャンネル数(0～),周波数(たとえばPWMサイクル20mHzなら50Hzになるという意味(SG90の場合))、分解能は任意(ただし限度はある))
  ledcSetup(0,50,PWM_BITWIDTH);
  ledcAttachPin(SERVO_PIN,0);//left_motor
}

void loop(){
  ledcWrite(0,deg2pw(0));
  delay(800);
  ledcWrite(0,deg2pw(180));
  delay(800);
}
```

deg2pw関数が便利で、角度指定してpwm出力に変えてくれます。たくどんさん神。
loopの中はシャフトが0~180度で回るプログラムになっています。

200度くらいまで動いた雰囲気ですがサンプルコードに180度までが書いてあったので180度くらいで試しています。

SG90もだけど、ハードウェア的に180度くらいまでしか回らないものが多いと思います。

## 試してみる

これで無事に動きましたね。

![](https://i.gyazo.com/dec35f6fa13b6ec521163e33fb30769e.gif)
IT初心者から1年でWeb周りの基礎を学ぶ為にやったこと

### 主な内容
学校でHTMLを触る機会があり、そこでWeb関連に興味を持ったのをキッカケに、のめり込むように勉強してきましたので、この１年間のやってきた事を書きたいと思います。
当初の自分は大雑把に

- フロントエンド
- バックエンド
- インフラ

という三本柱がWebサイトを動かすのに必要な技術なんだなぁと思いました。
(上記を細かくしようと思えばどこまでも細かくなりますが)
当時の無知な自分は「そうか、これが必要な技術なのか〜**じゃあ全部触ろう**」という事になりました。

## 具体的に何をしたのか
下にも詳しく書きましたが、全てにおいて意識したのは学習した事について何かしらの成果物を作ろうと考えました。
以下にそれぞれ何を勉強したのか、最終的な成果物、参考にした本・サイトを書いて行きます。
それぞれに必要な知識は全て本とネットの情報から得て、どうしても分からない時はtwitterで教えて頂くなどしました。

## フロントエンド

- HTML/CSS
- JavaScript
- 成果物：コンテンツを掲載できるような静的Webサイト/ブログ・JSで簡単なゲームや便利アプリっぽいもの

まず基礎中の基礎のHTML/CSSを学びました。
プログラミングに比べて習得難易度が低いため、ある程度ネットで知識を入れた後に
体系的な本を参考にしながらWebサイトの構築を行いました。

参考にした本

- [HTML&CSSとWebデザインが１冊で身につく本](https://gihyo.jp/book/2017/978-4-7741-9064-8)

次にJavaScriptですが、実質初めてのプログラミングだった事もあり、ある程度書けるようになるまでに大幅な時間がかかりました。

参考にした本

- [ライブラリを使う前に読んで欲しいJavaScriptの心得](https://www.shuwasystem.co.jp/book/9784798042633.html)
- [ゲームで学ぶJavaScript入門](https://book.impress.co.jp/books/1115101084)
- [O'REILLY JavaScript](https://www.oreilly.co.jp/books/9784873115733/)

これに加えてネットでES6以降の書き方などの勉強もしました。

最終的にはHTML/CSSで静的なWebサイトと、JSでライフゲームと簡単なアプリ、そしてタイピングゲームを制作しました。

## インフラ
- Linux(CentOS)
- Webサーバ構築(Apache)
- その他(ドメインやネットワーク関連、セキュリティなど)
- 成果物：ブラウザからアクセスできる自宅Webサーバの構築

なぜインフラが先なのかですが、上で作った静的サイトをまず公開したかったからです。
Linuxはおろかコマンドラインの操作さえ初めてに加え、全世界に公開するとなれば必須なセキュリティ対策もやらねばいけないため、こちらも大幅な時間がかかりました。

更に、~~サーバー代をケチりたかった~~ 豊富な知識を得るために、自宅サーバーにしました。

大まかな手順は
サーバー用のPCを組み立て
↓
CentOS7をインストール・セットアップ
↓
Apacheをインストール・公開に向けてセッティング
↓
ドメインの取得・公開
↓
という流れで、上で作ったWebサイトを公開しました。

参考にした本

- [15時間でわかるCentOS集中講座](http://gihyo.jp/book/2015/978-4-7741-7244-6)
- [初めてのWebサーバ Apache](https://nextpublishing.jp/book/8798.html)

参考にしたサイト

- [CentOSで自宅サーバ構築](https://centossrv.com/)

### バックエンド

- PHP
- Ruby
- Ruby on Rails
- 成果物(未完)：静的サイトを動的サイトにする(テンプレートエンジンや、記事投稿のためのCMSモドキなど、色々やりたい)

こちらはPHPかRubyで迷った挙句PHPを勉強していたのですが、Rubyめっちゃ良い言語だよ！オブジェクト指向大事だよ！それを学ぶならRubyだよ！有名なRailsもあるヨ！という言葉に惹かれてRubyを学び始めたら面白くて止められなくなりました。

その後、成果物をどうするか色々考えたのですが ~~Railsがやりたかった~~ FW無しでは実装が重そう・セキュリティ面で怖い部分があるなどの理由によりFWの勉強を優先しました。

上に書いた成果物を現在進行形でインプットしつつ製作中であります。

参考にした本

- [いきなりはじめるPHP](http://www.ric.co.jp/book/contents/book_885.html)
- [プロを目指す人のためのRuby入門](https://gihyo.jp/book/2017/978-4-7741-9397-7)
- [Rubyでわかるオブジェクト指向設計実践ガイド](https://gihyo.jp/book/2016/978-4-7741-8361-9)

参考にしたサイト

- [Rails Tutorial] (https://railstutorial.jp)


## 意識したこと
上にも書きましたが、終始意識していた事は習得した(と思える)技術に関しての何かしらの成果物を作るという事です。
技術の勉強自体は楽しいけれど、やはり何かを作れないと「楽しいけどなんのためにやってるんだコレ...」となったりする時がたまにあります。

自分は昔プログラミングをCやJavaから始めて何かを作れる段階まで行けず挫折した経験があります。
それに比べてWeb系の技術は、比較的簡単に目に見えるものが作れるのでモチベの維持がしやすいなと思っております。
(txtファイルを.htmlに変えてダブルクリックしたらブラウザで表示/実行できるってすごくないですか？僕は一週間くらい感動してました)

## 最後に
色々書きましたが、やはり一番大きいのは「ゼロから自分でコレを作れた！」という安心感・満足感でしょうか。
長期間インプットしてヨシ！となるのも良いと思いますが、自分の性格上「かなり勉強して習得した気がするけど本当に習得したのか...？」みたいな考えが浮かんでしまい夜も寝られなくなるのでこの辺を意識しました。


最後になりますが、多分効率は良くないです()　というか時間かかり過ぎですよね。
何か作りたいものがあって、効率を考えるなら基礎をある程度理解した段階でライブラリやフレームワークを触ったりするのが一番良いかなぁと思います。(Railsなどはこの辺のことを一瞬でやってしまいます)

ですが、この辺の技術は基礎である為、遅かれ早かれ必要になりそうだし、触っておいて損はない部分かな〜とも思います。
基礎を勉強しようとしている初心者の方の参考になれば嬉しいです。

何事も基礎が大事ですよね！

Twitter →　https://twitter.com/Alt70155
Unity 2018.1からBuildPipeline APIは、文字列じゃなくてBuildReportっていうオブジェクトを返すようになった

Unity 2018.1から`BuildPipeline` APIは、文字列じゃなくて`BuildReport`っていうオブジェクトを返すようになりました。

Unity 公式の「[Upgrading to Unity 2018.1](https://docs.unity3d.com/Manual/UpgradeGuide20181.html)」にも載っている変更内容。

`BuildPipeline.BuildPlayer`とか`BuildPipeline.BuildAssetBundles`みたいな`BuildPipeline`系のAPI。

Unity 2017.4まではこれらのメソッドは文字列を返していました。で、この返り値が空だったら結果は成功。空じゃなかったら失敗でエラーメッセージが返ってきました。

で、こららのAPIがUnity 2018.1で改善されて、`BuildReport`っていうオブジェクトを返すようになりました。この中にビルドにまつわるいろいろな情報が入っています。

これは破壊的な変更なので、Unity 2017.4(LTS)などからアップデートする際は、これが原因でコンパイルエラーになることも多いと思います。

単純に成功か失敗した、キャンセルされたかで分岐したい場合はこんな感じで書けばいいです。

```csharp
var report = BuildPipeline.BuildPlayer(...);

if (report.summary.result == BuildResult.Succeeded)
{
    Debug.Log("Succeeded!");
} else if (report.summary.result == BuildResult.Failed){
    Debug.Log("Failed!");
} else if (report.summary.result == BuildResult.Cancelled) {
    Debug.Log("Cancelled!");
} else { // Unknown
    Debug.Log("Unknown!");
}
```

`BuildReport`クラスは、`UnityEditor.Build.Reporting`という名前空間に属し、次のようなメンバを持っています。

* BuildFile[]型のfiles、出力結果のファイル群を司る
    * BuildFile型には、path、role、size
    * roleは`UnityEditor.Build.CommonRoles`に定義されている定数が使われる
* BuildStep[]型のsteps
* StrippingInfo型のstrippingInfo
* BuildSummary型のsummary、まとめ情報が入っている。一例をあげると
    * 開始時刻を司るbuildStartedAt
    * 終了時刻を司るbuildEndedAt
    * 出力結果のパスを司るoutputPath
    * 成否・キャンセルを司るBuildResult
        * BuildResultはenumで次の要素をもつ
            * Unknown
            * Succeeded
            * Failed
            * Cancelled
【AWS VPC入門】1.VPC/Subnet

# 前回までの記事
[【AWS VPC入門】0.概要](https://qiita.com/_Yasuun_/items/ae6b1b7fa3397256ee90)

# 今回のゴール
- AWSコンソール画面からVPCを作成する。
- 作成したVPCにパブリックサブネットとプライベートサブネットを追加する。

# VPC
AWS上で論理的に分離されたネットワークです。
EC2インスタンス等を配置する場合は利用可能なIPアドレスの範囲を決定し、サブネットを作成する必要があります。
AWSではアカウント作成後すぐにEC2インスタンス等が利用可能な状態になっていますが、これはデフォルトのVPCやサブネットの作成をAWS側ですでに完了しているためです。


# サブネット
VPCのIPアドレス領域をさらに切り分けて「サブネット」を作成します。
サブネットは必ずいずれかのアベイラビリティゾーンに配置される必要があります。
今回は「public」と「private」の2種類のサブネットを作成します。


# CIDR
AWS上でのアドレス表記ではCIDR表記が使われています。
ネットワーク部とホスト部を指数を用いて表現しています。
今回は割り当て可能なホスト数が一番多い クラスA `10.0.0.0/16` を利用します。

[IPアドレスの基礎知識](https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6)

# VPCの作成
実際にAWS上でVPCとサブネットを作成していきます。

AWSにログインし、VPCのダッシュボードから「VPC」をタグを選択します。
<img width="1280" alt="スクリーンショット 2018-12-02 18.42.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/4eba87a2-24c3-4b4b-0540-51eb8f2856af.png">

「Create VPC」のボタンからVPCの作成に進みます。
今までにVPCを作成したことがなければ、冒頭で触れたデフォルトVPCのみが存在する状態になっているかと思います。
<img width="1273" alt="スクリーンショット 2018-12-02 18.40.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/cb4e940e-ddd5-1252-ba32-93406ed19c90.png">


以下の内容を入力し`SampleVPC`を作成します。
<img width="1254" alt="スクリーンショット 2018-12-02 19.01.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/197bbd5d-6d1b-fcfc-952f-f69bf97b2e27.png">

| 項目 | 設定値 |内容  |
|---|---|---|
| Name tag  | SampleVPC  | VPC領域の名前  |
| IPv4 CIDR block  |10.0.0.0/16  |割り当てるアドレス領域  |
| IPv6 CIDR block  |No IPv6 CIDR Block  |IPv6利用する場合は指定(今回は不要)  |
| Tenancy  |default  |他ユーザーとハードウェアを共有するかどうか  |


# サブネットの作成
続いて作成したVPCにサブネットを作成していきます。

VPCのダッシュボードから「サブネット」タブを選択し、「サブネットの作成」へ進みます。
<img width="1278" alt="スクリーンショット 2018-12-02 19.08.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/e89c908a-fa68-fb8a-9008-adf21bda1e92.png">

以下の内容を入力しPublic用のサブネットとPrivate用のサブネットを作成します。

<img width="1263" alt="スクリーンショット 2018-12-02 19.11.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/15734/3d68fa20-98de-74c4-90cc-980db07b1e60.png">


| 項目| 内容  | Publicサブネットの設定 | Privateサブネットの設定
|---|---|---|---|---|
| 名前タグ | サブネットの名前  |SamplePublicSubnet |SamplePrivateSubnet
| VPC  | 作成するVPC領域 | 上記で作成したVPC | Publicと同じ
| VPC CIDR  | 上記で指定したVPCのアドレス領域| 指定無し | Publicと同じ
| アベイラビリティーゾーン  | 配置するAZ | ap-northeast-1a | Publicと同じ
| IPv4 CIDR ブロック  | 割り当てるアドレス領域 | 10.0.192.0/26 | 10.0.193.0/26

以上でVPCとサブネットの作成が完了しました。

# 次章
[【AWS VPC入門】2.EC2/Internet Gateway/Route Table](https://qiita.com/_Yasuun_/items/fc6f401eeaf9a3cb7b2c)
【AWS VPC入門】0.概要

# 目的
学習のためVPC環境を解説しながらAWS上に構築していきたいと思います。

# 完成図
最終的に以下のような構成になります。

![AWS Design (1).png](https://qiita-image-store.s3.amazonaws.com/0/15734/1d7c95e6-c6c5-e1e3-3b26-cd633a3a7d00.png)

# 概要
- VPC上には以下のサブネットを作成します。
  - Public Subnet ・・・ WebサーバへSSH接続するための環境
  - Private Subnet ・・・ 実際にWebサーバが配置される環境

- 「Web」 には　Webアプリケーションが配置されたEC2を想定しています。今回はサンプルのためNginxのみをインストールします。

- Private Subnet上に配置されているEC2へはELB経由のアクセスのみ可能としています

- Private Subnet上のインスタンスに必要なツールのインストール等を行うため、踏み台サーバ(Bastion)を経由したSSH接続と、NATゲートウェイ経由のインターネットへのアクセスを可能にしておきます。

- マルチAZについての構築は省略しています。


# 次章

[【AWS VPC入門】1.VPC/Subnet](https://qiita.com/_Yasuun_/items/8677681a21ae7437757f)
強化学習のお勉強

#概要

強化学習で、問題に使用するアルゴリズムを決めたい。
学習が足りなくて、埋められない。

| 問題      |       状態空間 |    行動空間    |方策|アルゴリズム|
|:------------|:--------------|:---------------|:---|:---|
| 三目並べ、迷路、テトリス、囲碁、frozenlake、オセロ、blackjack|     離散 |        離散|あり|Sarsa|	
| 三目並べ、迷路、テトリス、囲碁、frozenlake、オセロ、blackjack  |     離散 |        離散|なし|Q学習|	
|輪投げ、射撃、ダーツ　|離散	|連続|あり	　||
|輪投げ、射撃、ダーツ　|離散	|連続|なし	　||
|倒立振子、cartpole、pendulum、mountaincar、acrobat 　|連続|	離散|あり　　　|PID、Fuzzy|
|倒立振子、cartpole、pendulum、mountaincar、acrobat 　|連続|	離散|なし　　　|DQN|
|ブロック崩し、インベーダー、pong　|連続|	連続|あり　||
|ブロック崩し、インベーダー、pong　|連続|	連続|なし　||
picoCTF2018をやってみた所感

# はじめに
この記事は [NCC Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ncc) 18日目の記事です。

**picoCTF2018をコンペが終わってからCTF初心者が個人的に**やってみた感想などを書いています。
コンペには参加していません。
問題解説ではありません。
ただの個人的意見です。

# そもそものお話

## CTFとは
>Capture The Flag（キャプチャー・ザ・フラッグ）の略称である。

>コンピュータセキュリティの分野におけるキャプチャー・ザ・フラッグ（CTF）は、コンピュータセキュリティ技術の競技である。CTFは通常、参加者に対しコンピュータを守る経験に加え、現実の世界で発見されたサイバー攻撃への対処を学ぶ教育手法として企画されている。「ハッカーコンテスト」「ハッキング大会」「ハッキング技術コンテスト」「ハッカー大会」などとも訳される。[(Wikipedia)](https://ja.wikipedia.org/wiki/キャプチャー・ザ・フラッグ)

つまりは、コンピュータセキュリティ技術やハッキング技術を競う大会です。
詳しいことは[こちら](https://kimiyuki.net/blog/2016/12/02/getting-started-with-ctf/)のうさぎ小屋さんの記事をおすすめします。

## [picoCTF](https://picoctf.com/)とは
>picoCTF is a free computer security game targeted at middle and high school students. The game consists of a series of challenges centered around a unique storyline where participants must reverse engineer, break, hack, decrypt, or do whatever it takes to solve the challenge. The challenges are all set up with the intent of being hacked, making it an excellent, legal way to get hands-on experience.[(picoCTF)](https://picoctf.com/about)

Google先生によると、「picoCTFは無料の中高生向けコンピュータセキュリティゲームです。このゲームは、参加者がリバースエンジニアリング、ブレイク、ハッキング、解読、またはチャレンジを解決するために必要な処理を行う必要がある独自のストーリーラインを中心とした一連の課題から構成されています。挑戦はすべてハッキングの目的で設定されているため、実践的な体験を得るための優れた法的手段です」だそうです。

無料の、比較的初心者向けなCTFという理解でいいと思います。(自分はそうしています)

### ルール
picoCTFでは、問題から`picoCTF{XXXX}`という形の`flag`と呼ばれる文字列を見つけて提出することで、その問題ごとに設定された点数が貰え、チームの合計点数によって順位を争います。

問題には６種類あり、

- Forensics
- General Skills
- Reversing
- Cryptograph
- Web Exploitation
- Binary Exploitation

となっています。

picoCTF2018には[ここから](https://2018game.picoctf.com/)参加できます。

# 感想など

## 始めたきっかけ
この記事を書くきっかけとなったNCCというサークルの夏合宿において、「octf ~onsen-2018-summer-ctf~」というCTFが開催されました。
問題は普通のCTFとは異なり、作問者によると`「セキュリティに関する知識を試すこと」よりも、「協力して同じ問題を解くことで親睦を深める」ことを目標としています。`らしいです。
この催しでは先輩方が問題を作成してくださり、参加者のほとんどが初心者であったにも関わらず、楽しく解くことができました。[(octfについて詳しいことはこちら)](https://note.mu/mayo_nekoneko/n/n9ea430f9671c)
これをきっかけに「CTF楽しい」と思い、その後、先輩方を通じてpicoCTF2018の存在を知りました。

## やってみた
octfをやっていたおかげで(内容的には本当のCTFとは異なるけど)解き方というかちょっとした基礎知識くらいはわかっていたので、入りはそこまで難しくはなかったです。
ちゃんと各項目ごとにwarmup問題が用意されており、それぞれの問題にはヒントも用意されているので、初心者でもかなり楽しく、こんな感じじゃね？みたいに手探りしながら楽しめました。

## 自分なりの勉強法
そうは言っても知識がないから解法を見つけるのがなかなか難しい。
ここではそんな時、わからないなりにどうやって勉強しているかを書きます。

まずは自分で解いてみます。
じっくり考えてみます。
わからなかったらヒントを見ます。
ヒントには使うコマンドのリファレンスのリンクが貼られていることもあります(ただし英語)。
それを見ても見当もつかない時は、他の人の回答を見て学びます。
特に大会型CTFでは開催期間終了後にwriteupという解答集みたいな記事を書いている人がいるので、そういった記事を見ると、その人がどの問題をどうやって解いたかが割としっかり書かれています。
`picoCTF writeup`とかで検索すればたくさんの人がwriteupを書いているので、参考にしながら問題に取り組みます。

この手順を繰り返していきます。

このやり方だと新しいコマンドも手を動かしながら学べるので楽しいです！

ただしwriteupによっては答えが書かれていたり、解答が省略されていたり、全ての問題は網羅されていなかったりします。
人によって解き方も違うので色んな人の記事を読むといいです。

# まとめ
picoCTFはそもそも初心者向けのCTFです。
なので、初めてやるにはもってこいの教材だと思います。
picoでなくてもCTFは楽しいので一度やってみるといいかもです。
解けると賢くなった気がして最高です！

**ここまで読んでいただきありがとうございました！**
【VueとReact:初心者】 Vueの{{ $data }}みたいに ReactでもState表示  JSON.stringfy()  

【*初心者のただのメモです。】

Vue初日 
Vueの{{ $data }}が便利で 
Reactでも表示できないか調べた　。

オブジェクト一覧表示 JSON.stringfy() 
React State 一覧


Vue
https://jsfiddle.net/HarapekoWolf/ehmnt9bc/

React
https://codesandbox.io/s/3y7zz71rv5

```sample.js
 render() {
    const outputTest = JSON.stringify(this.state, undefined, 4);

    return (
        <div>
          <pre>{outputTest}</pre>
        </div>
    );
  }
```

```
{
    "title": "Hello, React!",
    "user": {
        "name": "tom",
        "age": 16
    }
}
```

preタグが機能しないから調べたら
引数でスペース指定できるみたい!!

こんな感じででる!!　詳しくはURL!!
ただそれだけ。
【初心者メモ】Vimのインストールから、最初のファイル作成まで【for Windows】


##Vimをインストールしたきっかけ
私はプログラミングを本格的にはじめて半年ほどの初心者です。
現在独学でrailsを学習していますが、そもそもRubyの基礎的なところを理解しておらず、文法の整理・理解をする必要があると感じました。

そこで、現在、久保秋真さんの「作りながら学ぶRuby入門　第２版」を取り組もうとしているところです。

本の中で、まずはテキストエディタの用意をする必要がある、とあったので、AWSのCloud9でさくさく利用環境の登録を済ませた私はテキストエディタって何だろうというところから始まりました。

推奨されているテキストエディタは複数ありましたが、Vimはネット上でも使っている方をよく見かけたので私も使ってみようとチャレンジしてみました！

また、PATHの通し方に苦戦したため、だれかのお役にたてればと書き記した次第です。



##インストール
[【 For Windows 】ゼロから始めるVimエディタ (インストール編)](https://qiita.com/Futo23/items/21456f8acbad3c6bb442)に記載のとおり進めれば問題ないです。

↓こちらからダウンロード↓
[KaoriYa - Vim](https://www.kaoriya.net/software/vim/)

保存先は　C:\Program Files　にしてください。もしくは、ダウンロードはC直下でもあとから、Program Filesに移動させてください。
※理由はPATHの設定の際Cドライブ直下だとうまくいかなかったからです。


##PATHの設定
[PATHを通すとは？ (Mac OS X)](https://qiita.com/soarflat/items/09be6ab9cd91d366bf71)
PATHを通すとはなんだろうといろいろ調べてみたのですが、「コンピューターにこのファイルはここにあるよ！というのを登録し、ほかのファイル同士で認識させあうこと」と勝手に理解しています。全くの初心者の理解で言葉がめちゃくちゃですが・・・

【設定方法】
１　スタートメニューで「コントロールパネル」を検索

２　コントロールパネルのコントロール パネル\システムとセキュリティ\システムに入る

３　左側のシステムの詳細設定を開き、「環境変数」をクリック
![スクリーンショット (233)_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/256858/e2d2adc6-f007-fc38-6ac4-7b0b15c44b86.jpeg)

４　以下の画面が出るので、「ユーザーの環境変数」においてPATHの追加を行う。

![スクリーンショット (234).png](https://qiita-image-store.s3.amazonaws.com/0/256858/3e0b3320-6d21-22d1-21cd-6dbef2c7191c.png)

これでOK。

##PATHはC:直下だとうまくいかない？
はじめC:直下にVimのディレクトリをおいており、それでPATHを設定しようとしたのですが、うまくいきませんでした。

理由を調べてみたのですが、よくわからず・・・
そんなことないようまくいくよ！やなぜそうなるのかご存知の方がいらっしゃればコメント欄にていただけるとすごく嬉しいです。


##コマンドプロンプトからVimを開く

いよいよVimを開きます。コマンドプロンプト上にて、

１　ファイルを作成したいディレクトリにcd コマンドで移動しましょう。
２　vimと入力、エンター。

![スクリーンショット (241)_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/256858/92a7f0b9-ec27-c19f-957b-f2ff5221add6.jpeg)



開くとこんな画面が出てきます！
ユーザー登録には有料とのことなのでやめました。。。

![スクリーンショット (229).png](https://qiita-image-store.s3.amazonaws.com/0/256858/9a7aa94a-d34d-1d11-9d4d-f6cfeda0fa95.png)



##最初のファイルの作成
Vimの操作の際また苦戦したので、こちらの記事を参考にしました。

・[【Vim使い方】ファイルの作成と開き方、保存の方法。（Mac OS X）](https://original-game.com/vim-mac2/#Vim)
・[知識0から始めるVim講座](https://qiita.com/JpnLavender/items/fabcc79b4ab0d52e1f6d)


```
:w test1.rb
```
と記入し、エンターキーを押す。

![スクリーンショット (237).png](https://qiita-image-store.s3.amazonaws.com/0/256858/8548f1fc-0eb3-d6e6-ee4a-02cf087bf998.png)


できた！以下のように新しいファイルが作成されています。

![スクリーンショット (238).png](https://qiita-image-store.s3.amazonaws.com/0/256858/2b0228e0-a28f-1290-cf29-a13106da50d8.png)

保存が完了しましたので、

```
:q
```

でVimから出ます。

##初心者笑い話
テキストを進める際、**テキストエディタでRubyのプログラムを書くよ**といっているのに、必死にコマンドプロンプトで新しいファイルを作成しようとしていました。

↓ずっとこれがでてました。
**'touch' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。**

調べても全然出てこないので、PATHの設定を何度もやり直したり、今日の午後を無駄にしました・・・お昼寝したあと読み返すとんんん？？？となりひらめきました！
よくこんなことがあります。。。

何か記載に間違いなどありましたらご指摘ください。

##その他参考
[【 For Windows 】ゼロから始めるVimエディタ (インストール編)](https://qiita.com/Futo23/items/21456f8acbad3c6bb442)
Apache Solrのインストール

やってみたのでメモ

# 前提
- CentOS7
- Java8インストール済み

# 手順
1. tarファイルをダウンロードする

    ```sh
    # curl -LkvOf https://ftp.jaist.ac.jp/pub/apache/lucene/solr/8.4.1/solr-8.4.1.tgz
    ```

2. ダウンロードしたtarファイルを展開する

    ```sh
    # tar zxf solr-8.4.1.tgz
    ```

3. 展開してできたディレクトリを`/opt`配下に移動する

    ```sh
    # mv solr-8.4.1 /opt/solr
    ```

4. solr 実行用ユーザを作成する

    ```sh
    # useradd solr
    ```

5. ディレクトリを作成する

    ```sh
    # mkdir -p /var/solr/data
    ```

6. `solr.xml`ファイルを`/var/solr/data`ディレクトリ配下に移動させる

    ```sh
    # mv /opt/solr/server/solr/solr.xml /var/solr/data/
    ```

7. 環境変数を設定する

    ```sh
    # vi /opt/solr/bin/solr.in.sh
    ```
    
    ```sh:solr.in.sh
    SOLR_PID_DIR=/var/solr
    SOLR_HOME=/var/solr/data
    LOG4J_PROPS=/var/solr/log4j2.xml
    SOLR_LOGS_DIR=/var/solr/logs
    ```

8. `/opt/solr`と`/var/solr`の所有者をsolr実行用ユーザに変更する

    ```sh
    # chown -R solr:solr /opt/solr /var/solr
    ```

9. サービスファイルを作成する

    ```sh
    # vi /etc/systemd/system/solr.service
    ```
    
    ```sh:solr.service
    [Unit]
    Description=Apache Solr Service
    
    [Service]
    Type=forking
    User=solr
    EnvironmentFile=/opt/solr/bin/solr.in.sh
    ExecStart=/opt/solr/bin/solr start
    ExecStop=/opt/solr/bin/solr stop
    
    [Install]
    WantedBy=multi-user.target
    ```

10. 再読み込みする

    ```sh
    # systemctl daemon-reload
    ```

11. 起動する

    ```sh
    # systemctl start solr
    ```

12. `http://<IPアドレス>:8983/solr`にブラウザでアクセスする
![Solr管理者画面.png](https://qiita-image-store.s3.amazonaws.com/0/34297/6ab1a2e2-f4bd-0d1f-c656-f159f1d7bacf.png)

# 参考
- [Solr System Requirements](https://lucene.apache.org/solr/guide/8_4/solr-system-requirements.html#solr-system-requirements)
- [Installing Solr](https://lucene.apache.org/solr/guide/8_4/installing-solr.html#installing-solr)
- [freedesktop.org - systemd.exec](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#EnvironmentFile=)
Node.jsでVRChatAPIクライアントを作った

# VRChat APIのNode.jsモジュールをつくり~~ました~~途中
つくりました｡
[vrchat-client](https://github.com/LinaTsukusu/vrchat-client)
初めてTypeScript使ったり､NPMモジュール公開したりした気づきなんかを
`クリスマスイブ`ですが他にやることもないので書いていきます｡


# TypeScriptは良い
今までなんとなく`別にJSでいいし`と思って使わなかったが今回使ってみたら好きになってしまった
いくらでも書かれた内容ではあるが再度自分が思ったことをまとめてみる

## 良いと思った点
### 型指定ができる
- `型指定できるJS`がこんなに書きやすいとは思わなかった
- JSではJSDocでコメントとして書かないといけなかったことがほとんどコード内に埋め込める
  - 型指定でごちゃごちゃすると思ったらむしろスッキリしたコードになる
- そもそも型をわざわざ書くことが少ない
  - 変数宣言は型推論でほとんどどうにかなるのでJSと同じように書きながらIDE補完に肖れる
  - 関数定義時はしっかり書く
- 型の定義､エイリアス定義が楽
  - 細かいObject設定は`Interface`でできるし`type`句でエイリアスも簡単

### Classが思い通り書ける
- JSでは意味わからない制約が多くてクラスが思い通り書けない
- `private`等のアクセス修飾子があり明示的に書きやすい
- フィールド宣言ができる
- `Interface`がある

これだけって?
いやいやめちゃくちゃ変わる｡

## どういうときに使うとよさそうか
- オブジェクト指向的に書く時
- 大きめなシステムを作る時 (特にNodeでサーバサイド実装とか)
- ライブラリとかフレームワーク作る時
  - 使う側はIDEの補完があって使いやすくなる

## もう全部TSでいいんじゃないかな
書いてみてもうJSに戻れなくなりました｡
めんどいから･･･と敬遠している方は一度触ってみるといいと思います｡
以上､ここまでTypeScriptの感想

---

# npmモジュールを公開しようとしたが失敗
初めてnpmモジュールを公開してみようとした･･･が､失敗!
解決したらこの記事を更新していこうと思います｡:bow:

## 原因調査中
- TravisCIのテストがほぼ通らない
  - 何故かテストするたびに結果が違う･･･
- `npm publish`したやつがimportできない
  - tsconfig.jsonを正しく理解できていない気がする

## 使用例
- まだ未完成なのに使って頂けました｡
  - むしろどうやって使ってるのか知りたい :thinking:
  - [GoogleHomeでフレンドの状態がわかるアプリ](https://twitter.com/Shiduki_Saku/status/1076511512766738433)

# まとめ
- TypeScriptはいいぞ
- npmモジュール公開思ったより難しい･･･
AWS Amplify を使ってVuejs にログイン機能を実装する

#### 前提

- aws-cliを導入してuserprofileの設定を行なっていること

#### AmplifyとVueのインストール

今回は全てデフォルトのまま進める

```terminal
$ vue create sample
```

作成されたプロジェクトのルートに移動してAmplifyのプラグインをインストールする

```terminal
$ cd sample
$ npm install --save aws-amplify aws-amplify-vue
```
#### ログインの実装



###### Amplify CLI

```
$ amplify add auth
```

コマンドを実行すると` Do you want to use the default authentication and security configuration?` と聞かれるので `Y`を選択する。

設定した項目をAWS上に反映させる。

```
$ amplify push
```

このコマンドによってAWS上にリソースが作成されたので、これを使ってログイン画面を実装していく。


###### ログイン画面を表示させる

AmplifyをVue上で使うための設定を行う。まずはsrcフォルダにある**main.js**を以下のように変更する。

```js

 import Vue from 'vue'
 import App from 'App.vue'
 import Amplify, * as AmplifyModules from 'aws-amplify'
 import { AmplifyPlugin } from 'aws-amplify-vue'
 import aws_exports from './aws-exports'
 Amplify.configure(aws_exports)
 
 Vue.use(AmplifyPlugin, AmplifyModules)
 
 // It's important that you instantiate the Vue instance after calling Vue.use!
 
 new Vue({
   render: h => h(App)
 }).$mount('#app')
```

続いて**App.vue**にも変更を加える。

```vuejs

<template>
  <div id="app">
    <amplify-authenticator></amplify-authenticator>
  </div>
</template>
<script>
import { Auth } from 'aws-amplify'
export default {
  name: 'app',
  components: {}
}
</script>
```

`$ npm run serve`コマンドを実行して`http://localhost:8080`を見にいくとログイン画面ができている。なんだこれすごい。  
  
  
###### ログアウトボタンを表示させる

このままだとCretae Accountからユーザーを作ってログインしても真っ白のページが表示されるだけなのでログアウトボタンをつける。

```vuejs:App.vue

<template>
  <div id="app">
    <div v-if="!signedIn">
      <amplify-authenticator></amplify-authenticator>
    </div>
    <div v-if="signedIn">
      <amplify-sign-out></amplify-sign-out>
    </div>
  </div>
</template>

<script>
import { AmplifyEventBus } from 'aws-amplify-vue'
import { Auth } from 'aws-amplify'
export default {
  name: 'app',
  components: {},
  data() {
    return {
      signedIn: false
    }
  },
  async beforeCreate() {
    try {
      await Auth.currentAuthenticatedUser()
      this.signedIn = true
    } catch (err) {
      this.signedIn = false
    }
    AmplifyEventBus.$on('authState', info => {
      if (info === 'signedIn') {
        this.signedIn = true
      } else {
        this.signedIn = false
      }
    }); 
  }
}
</script>
```

上のコードではログインの有無を`signedIn`で判断している。
ページが描写される前に`Auth.currentAuthenticatedUser()`でログイン済みかどうかを調べている。
ログインに成功した時、`AmplifyEventBus.$emit('authState', 'signedIn')`が発火されるようになっているので、`AmplifyEventBus.$on`でイベントを受け取り、`signedIn`の状態を切り替えている。

###### いらない項目を非表示にする

標準だとユーザー登録の時に電話番号の入力も求められるが不要な場合もあると思うので消してみる。
ユーザー登録のフォームの表示項目の設定は`Authenticator`componentの子である`SignIn`componentの`SignInConfig`で行う。

```vuejs

<amplify-authenticator v-bind:authConfig="authConfig"></amplify-authenticator>
```

```vuejs

  data() {
    return {
      signedIn: false,
      authConfig: {
        signUpConfig: {
          hiddenDefaults: ['phone_number']
        }
      }
    }
  }
```


###### 参考

- https://aws-amplify.github.io/docs/js/vue
- https://hackernoon.com/how-to-build-serverless-vue-applications-with-aws-amplify-67d16c79e9d6
- https://alligator.io/vuejs/global-event-bus/
技術書典5で買ったスマートスピーカー系の本を読み直した

ごきげんよう

この記事は
**「するめごはんのVUI・スマートスピーカー Advent Calendar 2018」**
の23日目の記事です。

技術書典6に向けて、次にやるならアレをやろうみたいな話がそろそろ僕の周囲でも具体的な話がでてきています。

技術書典5では、「スマートスピーカーを遊びたおす本」を出させて頂きましたが、他にもスマスピ・VUI系の本は技術書典5にて購入していました。

もちろん、1度読みましたが、今回改めて読み直したので、それぞれの内容等にざっくり触れたいと思います。

書評するような立場ではないですし、**100％個人の感想です。**

#そもそも技術書典って何？

今の時期ならコミケが着目される時期で、要するに同人誌即売会です。
それの技術書のみが集まるイベントです。

https://techbookfest.org/

僕が参加した技術書典5は1万人の来場者がいらっしゃいました。

以下では、その場で買ったスマートスピーカー・VUI本に触れていきます。

#1.GoogleHomeプチハック

![DSC_1939_R108_R108.PNG](https://qiita-image-store.s3.amazonaws.com/0/67398/d67eae70-1147-8918-7411-075a15c40a28.png)

入ってすぐのサイボウズさんのブースでまさかの200円。

サイボウズさんなので、kintoneの話なのですが、Google Homeアプリのインストール設定からActions on GoogleやDialogflowの設定までがフルカラーでめっちゃ丁寧に書いてあります。

VUI LT7で会場がサイボウズ社であったこともあり、著者のミケさんの登壇をその場で観させていただきましたし、サイボウズ社の森みたいな会場もすごかったわけです。

が、この本の内容、これ絶対200円じゃない。

プチハックと言いつつも、設定類はできますし、kintoneとの連携はもちろん記載されてます。

Google Homeの設定を知りたい、kintoneと連携したい等のモチベーションがあればイチオシです。


#2.Raspberry PiではじめるDIYスマートホーム



![DSC_1940_R108_R108.PNG](https://qiita-image-store.s3.amazonaws.com/0/67398/c3f68eef-c5ed-7948-f673-9b8884089ed5.png)


表紙これ、怒られないのかと思うんですけども、それはさておいて。

この本はAlexaを使ったスマートホームについて触れています。
そして、タイトル通り、Raspberry Piを使ったスマートホームの話です。

Alexaについても記載がされてますが、スキル作成はNode-REDです。
プログラミングに関する記述はむしろ bash しかないです。

Node-REDの使い方や、Raspberry Piで動かすコード、物理的な環境について語っている本です。

Node-REDでAlexaスキルを扱い方、Raspberry Piなどを使ってセンサー類を扱いたい方にはオススメです。


#3.スマートスピーカーアプリのお品書き

![DSC_1941_R108_R108.PNG](https://qiita-image-store.s3.amazonaws.com/0/67398/fe84d661-6ba2-fab9-94d4-4fce44f4c11d.png)

サインもらってますが、温泉BBAの方々の本です。

内容は大きく分けてVUIデザインの話と、Clovaのスキルの作り方の二部構成です。

VUIのデザイナーをなさっている元木さん記述部分はさすがデザイナーです。
音声アプリの企画の話から対話設計の話まで、大変濃密です。

特筆すべき点は
**音声アシスタント3プラットフォームの機能別比較表**
だと思います。
これの何が良いかというと、本当にこれからVUIをやろうとしたときに、どのプラットフォームで何ができるの？という壁に最初に当たるからです。
それが一目でわかります。

執筆時点での日本とアメリカの比較と、Clovaで何ができるかがまとまっています。

**スキルの履歴書**という発想も僕にはまったくなかったので大変参考になります。

第二部のClovaスキルの作成方法は画面キャプチャが丁寧なのですが、npmのエラー時の対応方法まで記載されているVUI本は他に観たことがないです。

Clovaの画面は変化が激しい状態にありますので、現状とは若干ことなりますが、この本を読んでおけば、スキル作成時に気を付けることが濃縮されている上に、本当に初心者向けに書いてありますので、これからVUIを始めたい方にはオススメです。

巻末の用語集も嬉しい記載です。


#4.俺たちが知りたかったAlexaの話

![DSC_1942_R108_R108.PNG](https://qiita-image-store.s3.amazonaws.com/0/67398/d4aa70e5-d0ff-57f7-993a-ec8e85d3be2d.png)


この本は、とんでもないです。
なんで2000円なんだ。安すぎる。

技術書典5で、**この本だけは絶対に手に入れるつもりでいました。**

Alexaチャンピオンの方々が関わっているというのもありますが、書いた人うんぬんよりも **内容がガチだから** です。

例えば、一般的なVUIのデザインや設計だと「ハッピーパスを作りましょう」という感じですが、そんなレベルではないです。

代替パス、シーンの前提、ヘルプなどのパスについても書いてあります。
Experience flowの話は大変勉強になる上に、他にもダメな例、良い例など非常に具体的です。

デザイン面だけでも濃厚ですが、開発面はより一層深いところまで踏み込んでいます。

・ASK CLI
・SSMLの効果的な使い方
・DynamoDBを扱う場合にask-sdkとaws-sdkのメリデメの比較
・開発手法
・粒度ごとのテスト
・ツール類の紹介

などなど極めて実践的です。
そして、最後にコミュニティの話と、アウトプットの話になっています。

**Alexaでスキルを複数個リリースしてきて、市販本等に物足りなくなってきたら、この本は必読だと思います。**

VUIのデザイン部分は他のプラットフォームでも考え方は同様になると思います。
極めて良書です。


#読んでみて思ったことは

技術書典5は、そもそも僕自身の人生経験として「同人誌即売会」が初でした。
そしていきなり執筆＆編集をやらせてもらい、リアルお仕事にもつながりました。

技術者にとって、本を書くというのは一つの目標だと僕はずっと思っていたわけですが、上記4冊のように様々な人たちが様々な視点で本を書いています。

アウトプットというと、ブログやイベント登壇などが個人的には思いがちなのですが、技術書典に1回本をだしてみると得られることがありますし、自分が経験したからこそ上記の本の「すごさ」がわかる面もあると思います。

というわけで、Qiitaなどのブログ類以外にも、本という形でアウトプットしてみてはいかがでしょうか。


以上。
UDCに参加してみようかな

<a style="text-decoration: none;" href="http://urbandata-challenge.jp/2018submitstart">アーバンデータチャレンジ2018</a>に参加するためのプロダクト作りを開始しました。

##なぜいまそれをやるの？
調査は１２月初旬からはじめました。データ内容の調査や、プロトタイプを作って実装可能かどうか？という検証が終わったので、作品概要の応募締め切り前日に概要を提出し、あとは作るだけです。のこり数週間で。
ここのところ数年にわたって、秋冬は、**「今年中にリリースしないとだめなやつ」**に追われまくって、人としてどうなのというレベルまで忙しい状態が続いていました。今年はすこし余裕があり、時間ができてしまうとやっぱりなんかつくってみたくてうずうずしてきます。

##何をつくるの？
- iOSアプリ、現在地の近くの避難所を表示する</li>
- 実際に足でまわってマーカーをタップする</li>
- 全部回ったらローカルに保存できてオフラインでも見れる。メールで送れる
- オープンデータを利用する

まあ、思いついたのはこのぐらい。

##もうちょっと詳しく
- 自治体ごとに違うフォーマットでもデータの格納がしやすいサーバー側管理画面
- Python,Django
- MongoDB
- Swift
- 綺麗なUIをつくりたい

##きれいなUI？
今まで書いてたのは、スワイプをトリガーとしてアニメーション動かす、という動きで作ってきましたが、途中で止めたりしても徐々にアニメーションが動く様にしないと、って思っています。

<blockquote class="wp-block-quote"><p>あとはインタラクティブなアニメーションを作った場合のハマりどころとして、アプリがバックグラウンドに行ったときなどにアニメーション自体が終了状態になってエフェクトが消えてしまうなどがありますが、そういう場合の対処も網羅されてるのが💯です。　<a href="https://t.co/l8igZOMaJe">https://t.co/l8igZOMaJe</a>— kishikawa katsumi (@k_katsumi) <a href="https://twitter.com/k_katsumi/status/1070874633124032512?ref_src=twsrc%5Etfw">2018年12月7日</a></p></blockquote>

地図のアニメーションもこんな風にしたい
[appealing.](http://app-ealing.com/post/156439546459/lyft)

###が
さっきQiitaの記事でこれみちゃいました
[保育園落ちたアラフォーがプログラミングを学び、2か月でWebサービスを作った話](https://qiita.com/aocory/items/666c22c2c3d75be9ab9a?utm_content=buffere0430&amp;utm_medium=social&amp;utm_source=facebook.com&amp;utm_campaign=buffer)

初めてプログラミングした人が２ヶ月で作ったものとそんなかわらないかもしれない。てか、いいじゃん。このサービス。

ここからどうやって気持ちを持ち直すかだ。
awesome-typescript-loaderはもう使わないようにしよう、その理由



どうも、[sakito](https://twitter.com/__sakito__)です。

いまだにawesome-typescript-loaderを使用している人をちらほら見かけるので、その人たちへもう使わないほうがいいという説明の投稿です。

*　この記事では[TypeScriptのドキュメント](https://github.com/Microsoft/TypeScript)に合わせトランスパイルの言葉は使用せず、コンパイルに統一しています。

## awesome-typescript-loaderはもう使わない
早速なのですが、awesome-typescript-loaderはもう使用しない方が良いです。
簡単な理由としては、[awesome-typescript-loaderのGitHub](https://github.com/s-panferov/awesome-typescript-loader)を見ると分かるのですが、更新が3~5ヶ月程止まっているからです。
webpackやTypeScriptの更新にもう追いついていません。

Issueでは[Typescript 2.9-rcで動かない](https://github.com/s-panferov/awesome-typescript-loader/issues/570)報告や[webpack 4 support](https://github.com/s-panferov/awesome-typescript-loader/issues/534)の報告があり、今だに閉じられていません。
実際に私の環境ではTypeScript v3.2のコンパイルができず、エラーで止まってしまいました。

webpack v4のバージョンにあげるとコンパイル速度が著しく悪くなったと言う報告も複数上がっています。
おまけに作者の返答もありません。

### TypeScript公式のReact&webpackのhandbookに記載があるが？
現在多くの人が目にする[TypeScript公式のReact&webpackのhandbook](https://www.typescriptlang.org/docs/handbook/react-&-webpack.html)では、awesome-typescript-loaderが推奨されており、ここを目にした人がawesome-typescript-loaderを使用していると思います。
しかし、現在handbookのPRに[awesome-typescript-loaderからts-loaderに置き換える修正](https://github.com/Microsoft/TypeScript-Handbook/pull/765)が出ています~~(紛らわしいので早くマージされてほしい)。~~
* 2019/8/16 こちらマージされました！handbookの活動が再開したようです！

### 更新されなくなったのはなぜなのか推測
もともとawesome-typescript-loaderは作者が、ts-loaderを高速化する目的に開発をしたものだと[記載](https://github.com/s-panferov/awesome-typescript-loader#differences-between-ts-loader)があります。
ここからは推測なのですが、ts-loaderが改良を重ね、様々な手法を用いることでコンパイル速度が早くなり、awesome-typescript-loaderよりもコンパイル速度が上がり、不要になったのでメンテが止まったのかもしれません。


## 最後に

awesome-typescript-loaderをいまだに使用している人は、コンパイルがとても遅いと思います。
現在webpack v4でawesome-typescript-loaderを使用している方は、別の方法に変更するだけで、コンパイル速度があがる可能性もあります。
いずれにしろ、今後TypeScriptやwebpackのバージョンがあがるとバグに突き当たるので、awesome-typescript-loaderを使用するのは控えましょう。

awesome-typescript-loaderを使用しているPJにこの投稿を見せれば移行を説得する材料になるかと思います。ぜひ使ってください。

次はts-loaderと@babel/preset-typescriptについて書こうと思います。
スマートスピーカーを使ったおうちハック

# はじめに
この記事は[ロボP Advent Calendar 2018](https://qiita.com/advent-calendar/2018/robop)の24日目の記事です。

ここでは現在お家で構成しているおうちハックの構成をご紹介しようと思います。これやると自宅が快適です。

## 操作する機器
現在わが家では、以下の機器の操作に対応しています。
* エアコン
* 加湿器
* 電気(PHILIPS hue)
* シーリングライト
* 加湿器
* こたつ(厳密に言うとコンセント)
* スピーカー
* お家の鍵


## 使っているもの
* Raspberry Pi
* GoogleHome
* echo dot
* Qrio Lock
* sg90互換っぽいサーボモーター
* WIFIスマートプラグ
* 赤外線LED(と基板)
* HUIS

## どんな感じで作ったか
基本的には以下の記事のシステムをベースに作っています。
https://qiita.com/takjg/items/185083347f887244f8b6
https://scrapbox.io/smart-home/10%E3%83%89%E3%83%AB%E3%81%AERM_Mini3%E3%81%A8Google_Home%E3%81%A7%E5%AE%B6%E9%9B%BB%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

こちらで紹介されているhubotを使い構築してあります。

また、こちらの記事を参考に、赤外線ドライブ回路を組みました。
https://vintagechips.wordpress.com/2013/10/05/%E8%B5%A4%E5%A4%96%E7%B7%9Aled%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E5%9B%9E%E8%B7%AF%E3%81%AE%E6%B1%BA%E5%AE%9A%E7%89%88/

赤外線機器の操作は、上記の記事を見ればできるかと。

加湿器のコントロールは、加湿器の電源ボタンにサーボモータを取り付け、コントロールしています。
raspberrypiのGPIOでコントロールできるスクリプトを書き、以下記事で紹介されている方法でコントロールしました。
https://scrapbox.io/smart-home/UNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92hubot%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B
こんな感じで取り付けてます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/43598/e9567aa1-da14-bc41-55a8-18f76d12eaa6.jpeg" width=20%>

WIFIスマートプラグや、Qrio Lock、PHILIPS hueはgooglehomeやechoで対応済みなのでそのまま使っています。
簡単ですね!
難点があるとすれば、赤外線信号の登録作業が大変・・・ということだけですね。

## トラブルが起きた時
今まで起きたことはないんですが、動かない！ってなったときに困るなーと思ったので、HUISを導入しています。
普段使わないリモコンをたくさん置いておくのはちょっとなーと思ってました。
そんなときに、複数のリモコンをまとめられるリモコンがあるということで試しに使ってます。

http://huis.jp/
<img src="https://qiita-image-store.s3.amazonaws.com/0/43598/23c0ab92-4a58-cb79-7ff9-9137cd45d7d0.jpeg" width=20%>
特にトラブルは起きてないのですが、ちょっと声で操作したくないときとかに便利で使ってます。

## 終わりに
もうすぐアドカレも終わりですね。明日は @ayushio の「間に合わないのでネットワークネタ」です！
きっとすごいんだろうなぁ・・・最後だし。
【Ruby】テキスト内のURLを自動でリンクにしてくれるgem rinkuの導入と使い方【auto_linkの20倍早い】


# はじめに

Railsアプリで以下のような文字列中にあるリンクを
文字列のままではなく自動でリンクに変換しクリックで画面遷移できる様にさせたいと思いました。
※ Railsの`simple_format`メソッドを使用してます。

`simple_format`のリファレンス：http://railsdoc.com/references/simple_format


```erb:sample/test.html.erb

<% text = <<EOL
テキスト
あああhttps://www.google.co.jp/
テキストテキスト
EOL %>

<%= simple_format(text) %>

# ↓出力
# <p>テキスト</p>
# <p>あああhttps://www.google.co.jp/</p>
# <p>テキストテキスト</p>
```


## rinku　とは

`rinku` は自動リンクを行うRubyのgemです。
同様のgemに`rails_auto_link`があります。テキストを解析してリンクに似ているものはすべてHTMLリンクに変換します。
rinkuはC言語で記述されているのでauto_linkより約20倍高速とのことなので、自動リンクを実装したい場合は`rails_auto_link`より`rinku`を使うほうが良さそうです。


## rinku　の使い方

公式ドキュメントはこちら　→　https://github.com/vmg/rinku



1、 gemをインストールします

```console

gem install rinku
```

2、 Gemfileに記述します。

```ruby

gem 'rinku'
```

3、 `bundle install`　を実行します。

```console

bundle install

```

4、 `simple_format` の行に`Rinku.auto_link`を追加

```erb:sample/test.html.erb

<% text = <<EOL
テキスト
あああhttps://www.google.co.jp/
テキストテキスト
EOL %>

<%= Rinku.auto_link(simple_format(text)) %>  # ここを修正

# ↓出力
# <p>テキスト</p>
# <p>あああ<a href="https://www.google.co.jp/">https://www.google.co.jp/</a></p>
# <p>テキストテキスト</p>
```


## その他

こちらの記事にある通り
https://qiita.com/ikm/items/a5f1c6c20f858a175a84

文字列を自動エスケープさせていた場合`raw`をつける

```erb

<%= raw Rinku.auto_link(h(text)) %>
```
インフラエンジニアのための勉強会

文系の私ですが、仕事では、なぜか、システムの運用みたいなことをさせていただいてます。

そんな中で、参考になった本は、
シス管系女子です。

まだまだ、この本を全て理解するには、ほど遠いなレベルだけど、
来年こそは、もっともっとレベルアップして、みんとちゃんみたいな女子になりたいです。

ところで、この記事は、アドベントカレンダー投稿なのですが、

困ったら「インフラエンジニアのための」ってつければなんでもOKです
さあ、ゆるゆると書いてみましょう！

とのことなのですが、実は、本当に困ってます。
何書こうかな。

私が、インフラ勉強会のDiscordを知ったのは、つい最近で、
家からでも勉強会に参加できるという素晴らしさ！

たまーに、日本酒を飲みながら、参加したりしております。

来年は、目標なのですが、参加できる限り、参加したい勉強会です！
もっともっと、インフラエンジニアと名乗れるくらい成長したいので。

まだ、会ったこともないですが、PCを通して勉強会を提供してくださっているインフラエンジニアも皆さま、来年もどうぞよろしくお願いいたします。