OmniAICreator/Qiita-1.07M huggingface dataset:
【With image】 Problem that returns to the initial screen even after restarting after installing CentOS8 (VirtualBox)

This article is aimed at English learning and memorandums.
Since the author is Japanese and supports Japanese, error handling may differ between different overseas versions.
Please note. m (_ _) m

#Background
I tried to install VirtualBox → CentOS8 to touch Linux on Mac, but there was a problem that it returned to the initial screen as if nothing happened even if I installed it many times.
I was stuck for about a day and a half, saying, "Compatibility of Catalina just released? Or setting of security software? Or something damaged during download, or ...".

#Development Environment
・ VirtualBox: 6.0.14 r133895
・ Host OS: MacOS Catalina 10.15
・ Guest OS: CentOS 8.0.1905

#Cause & Solution
The cause was that the HDD priority of the boot media at the time of startup was lower than the optical. (* The image has been modified.)
It seems that the initial screen was displayed (but the capacity was buried by installation) if the HDD was later to select CentOS installed by the boot loader by restarting.

<img width="646" alt="スクリーンショット 2019-12-21 11.29.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434223/c8eaa16e-ece6-28c4-2d10-d45e10fd51cb.png">

#Other
Please point out any mistakes in expression, etc., because they are poor English engineers and they are learning.🙇‍♂️
Thank you for reading!

ありがとうございました！
文言最初の一歩

### 2019.12.31 追記
当初READMEにあったGitHubソース取得などの記載が、npmからの手順になり簡単になりました。
仕切り直し記事コマンドライン編[公開]
(https://qiita.com/libru1/items/6542b45a945fc7fe10cf)しました

### 2019.12.25 追記
右も左もわからず初めて投稿させていただきましたが、バージョンがあがり、npm installになっていたり、make_cmdline無くなっていたり。力不足でまだこのままとさせていただきますが、nodeとマークダウン勉強して更新したいです。あと、リンク誤り訂正しました

## 0.はじめに

初投稿となります

まずは「漢文風プログラミング言語」
__文言__ を紹介させていただきます

[漢文風プログラミング言語「文言」の基本文法を読み解いてみた](https://qiita.com/GandT/items/920af538c0a405199815) - @GandT 

## 導入

[wenyan](http://wenyan-lang.lingdong.works)

[ここ](https://github.com/LingDong-/wenyan-lang)よりソース取得

npm install ではないらしい

## 実行

npm startではないらしい

当方windowsユーザーです

実行方法わからないので

```sh
cd site
ruby -run -e httpd . -p 3000
```

ブラウザより

http://localhost:3000/ide.html
でエディター起動

サンプルアプリ実行

## おわりに

わからなすぎで、実行だけならオンラインからも出来たのですが、縦書きレンダリングとruby出力を夢見て頑張ってみます
Emacsユーザ向けChrome拡張機能を公開してみた

この記事は[Emacs Advent Calendar 2019](https://qiita.com/advent-calendar/2019/emacs) 22日目の記事です

## 概要
[EmacsキーバインドでChromeを操作できるExtension](https://chrome.google.com/webstore/detail/chromemacs/kfdibhbheajeacnkkakomaliggbgndcf)を公開してみたので、その紹介になります。
![Screen Shot 2019-12-21 at 10.03.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122091/a7c79646-6503-7d9b-841e-48b704be0475.png)


## 背景
筆者は以前メインブラウザとしてChromeではなくFirefoxを使っていました。というのもFirefoxにはFiremacsというEmacsユーザ向けのアドオンがあり、Chromeにはそれに代わるものが無かったためです。しかし、[ある破壊的なアップデート](https://ja.wikipedia.org/wiki/Mozilla_Firefox#2017%E5%B9%B4)によりFirefoxのアドオンが軒並み使えなくなっため、Chromeへの移行を余儀なくされたという経緯があります。ただChromeにはEmacsキーバインドでタブ操作やスクローリングを行えるExtensionが当時存在しなかったため、[Vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb)というVimユーザ向けの拡張機能を入れ、設定でキーバインドをEmacs風に書き換えるという面倒なことを行なっていました。そこで、最初からEmacsキーバインドを使えるChrome Extensionがあったら便利なのではと考えたのが公開のきっかけです。

ちなみにVimiumをEmacs風に使う方法に関しては、下記が参考になります。
[ChromeのvimiumでEmacsキーバインドにしてみる](http://swat.hatenadiary.com/entry/2017/07/09/144844)
[Vimium を Emacs ライクにして幸せになる話](http://tsukachu.hatenablog.com/entry/vimium_keymappings_emacs_like)

## 機能
Emacsキーバインドでブラウザの操作を行えます。例えばC-v/M-vでスクロールダウン/アップしたり、C-b/C-fでタブを左右に移動したりなどです。一例を上げると下記のようなキーバインドが使えます。また設定からキーを変更して、自分なりにカスタマイズすることも可能です。

```
# Navigating the current page
    <c-h>       show the help dialog for a list of all available keys
    <c-b>       scroll left
    <c-n>       scroll down
    <c-p>       scroll up
    <c-f>       scroll right
    <c-m-,>     scroll to top of the page
    <c-m-.>     scroll to bottom of the page
    <c-v>       scroll down half a page
    <m-v>       scroll up half a page
    <c-x><c-f>  open a link in the current tab
    <c-x><a-F>  open a link in a new tab
    <m-r>       reload
    <a-s>       view source
    <c-g><c-u>  copy the current url to the clipboard
    <c-g><c-l>  copy a link url to the clipboard
    <c-x>o      cycle forward to the next frame

# Manipulating tabs
    <c-b>          go one tab left
    <c-f>          go one tab right
    <c-x><up>      go to the first tab
    <c-x><down>    go to the last tab
    <c-g><c-t>     create tab
    <c-x>4         duplicate current tab
    <c-x>0         close current tab
    <c-g><c-r>     restore closed tab (i.e. unwind the 'x' command)
    <c-x>b         search through your open tabs
    <c-x>5         move current tab to new window
    <a-p>          pin/unpin current tab
```


## 実装
Extensionの実装としては、[Vimiumのソースコード](https://github.com/philc/vimium)をforkして[キーバインドをEmacs風に書き換えただけ](https://github.com/maeda-kazuya/chromemacs/commit/75c9891fbfc99bf8dc25dfea76822099e490fa5f)です。リポジトリは下記に公開してあるので、修正等必要そうな箇所があれば自由にPR等送って頂ければと思います。
https://github.com/maeda-kazuya/chromemacs

## 注意点
Chromeの仕様のせいか、一部のページ（Chromeの設定画面等）でキーバインドが効かない場合があります。原因は調査中ですが、何らかのショートカットキーと競合しているか、そもそも拡張機能が無効化されている可能性もあります。


## まとめ
その他お気づきの点があれば、下記Github上のIssueに上げて頂ければと思います。元々は自分用に作成したExtensionですが、使いづらい部分等があれば随時改善していきたいと思います。
https://github.com/maeda-kazuya/chromemacs/issues
日本語ファウンデーションズ受講後インタビュー

# はじめに

この投稿はコードクリサリスの[日本語ファウンデーションズ](https://www.codechrysalis.io/foundations)を受講してくださった[鈴木明子さん](https://twitter.com/akokitamura)をインタビューした際の記事です。原文は[こちら](http://codechrysalis.hatenablog.com/entry/2019/11/05/153207)。

受講前のインタビュー記事は[こちら](https://qiita.com/maaaashin324/items/8025eff7bd000803bd2c)。

## Introduction

今回はフリーランスで日本語教師の[鈴木明子さん](https://twitter.com/akokitamura)に[日本語ファウンデーションズ](https://www.codechrysalis.io/foundations)クラス受講後の感想をお伺いしました。
鈴木さん自身プログラミングを学んだ経験は1度もなく、完全な初学者としてFoundationsクラスに参加しました。

![20191211152008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141607/a9f6e0e1-3994-e1e4-0a28-6fe324adaa7a.jpeg)

## ファウンデーションズコースに参加してどうでしたか？

想像以上に濃くて学びが多かったです。始める前は不安でしたが、参加してよかったです。私は普段日本語の教師をしているんですが、自分自身が生徒になって学ぶ機会がなかなかないので、何かを0から学ぶという経験が久しぶりでそれもすごく楽しかったです。

## 初めてのプログラミングはどうでしたか？

授業ではどんどん新しいことを学ぶので、覚えなきゃいけないことがたくさんあってどうやって頭の中で整理していけばいいのか、追いつかない感じがすごく大変でした。

でも今Foundationsコースを終えて、自分自身がこのコースに通う前に想像していた以上に成長したのを実感してすごく達成感を感じています。

クラス最後の課題では私はHTML, CSS, JavaScriptを使って簡単な日本語のクイズを作りました。

私もここまでできるんだと思い、すごく嬉しかったです。

![20191211152144.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141607/c6270b03-f069-eee4-5257-5d8aa65108bc.jpeg)

## このコースで学んだことをどのように生かしたいですか？

もともと日本語教師の仕事にプログラミングの知識を生かしたいということを目標に受講しました。実際に約５週間学んでみて、今ではFoundationsで学んだ知識を絶対に生かせるなと感じています。例えば生徒さんがエンジニアだった場合に「どんなプログラミング言語を使っているんですか？」というようなところから会話を広げることもできる自信が今はあります。これで今まで以上に生徒さんの仕事についてより深い会話ができそうです。

 またIT系のニュース記事もより深く理解して読めるようになりました。日本語読解の授業でITの話題を積極的に取り入れていこうと思っています。

![20191211152245.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141607/2d055dfc-98ea-525e-6a21-9e216ce5d471.jpeg)

## 受講を考えている方々にアドバイスがあればよろしくお願いします。

本当に私みたいに0から始めるとかなりきついと思います。ただそうであってもやり遂げることは無理ではありません。もし興味があるのなら絶対にやってみるべきだと思います。Code Chrysalis をオススメしたい理由は講師がしっかりサポートしてくれるところもそうですが、良い意味で授業が厳しくカリキュラムが充実しているところです。他では得られない達成感を得ることができると思います。

## さいごに

[Code Chrysalis](https://www.codechrysalis.io/)は東京を拠点にした12週間の短期集中型ソフトウェアエンジニア養成学校です。ソフトウェアエンジニアになるための12週間特別集中コース：イマーシブやプログラミング初心者向けの講座もありますので、ぜひ見てみてください。
Raspbian Buster で eth0:1 にスタティックIPを割り当てる

# 環境
- 2019-09-26-Raspbian Buster Lite
- Raspberry Pi 3 Model B

# やりたいこと

eth0 の dhcp クライアント設定を残したままで、169.254ではじまるリンクローカルアドレスレンジでもアクセスできるようにします。
169.254.12.24 を eth0:1 に割り当てたいと考えました。

# 解決法

/etc/rc.local の最後に以下を書きます。


```

ifconfig eth0:1 169.254.12.24
exit 0

```
# 結果

```

pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.42.12  netmask 255.255.255.0  broadcast 192.168.42.255
        inet6 fe80::651b:9046:3a77:39da  prefixlen 64  scopeid 0x20<link>
        inet6 240b:10:a261:a200:39f1:7e0c:58a6:c4b1  prefixlen 64  scopeid 0x0<global>
        ether b8:27:eb:50:88:58  txqueuelen 1000  (Ethernet)
        RX packets 845  bytes 77211 (75.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 602  bytes 85997 (83.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.12.24  netmask 255.255.0.0  broadcast 169.254.255.255
        ether b8:27:eb:50:88:58  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:05:dd:0d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


```
# 問題点

dhcpサーバの挙動でIPアドレスが再割り当てされると、eth0:1も消去されるのではないかな？ RaspberryPiの挙動はまだ確認できてないため、追って報告予定。


# どうしてこんな方法を？

本来なら /etc/dhcpcd.conf や /etc/dhcpcd.exit-hook に書くのだけれど、どうも
RaspberryPi3と Raspbian Busterの組み合わせでは固定IP設定に難があるらしいです。
cf., https://www.raspberrypi.org/forums/viewtopic.php?t=245701#p1577134

また、ip コマンドでのセカンダリアドレスの設定もうまくいかず、結局 rc.local と ifconfig のレガシー組み合わせになりました。
【Vue】S3+CloudFront環境でTOPページ以外をリロードすると開けない

# はじめに
Vue-cliで作成したSPAサイト（Routerでページの振り分けを行っているサイト）をS3＋CloudFront環境で動作させている。この状況でS3で設定しているDefault Topページ以外のページをリロードすると以下のようなエラーが出力されて表示できない。

```
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error data-livestyle-extension="available">
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3A494C8D44686E0B</RequestId>
<HostId>
2Md7g0VQi8VqOpfMODf3ppFzZIWDioRilTv900Mvk6cLBCB5Tia/virxZloyDTQrferhb9PKn/A=
</HostId>
</Error>
```

# 原因
SPAにて指定されているパスが物理パスではなく仮想パスであることが原因の可能性がある。

# 解決策
エラー時のリダイレクト先をindex.htmlにする。
対象のCloudFront>Error Pagesタブ>Custom Error Responseにて以下のように設定する。
<img width="698" alt="スクリーンショット 2019-12-21 11.05.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431401/524999f3-afc9-70d1-b788-e7de45efe3e8.png">


# おわりに
[こちら](https://stackoverflow.com/questions/55089641/the-specified-key-does-not-exist-for-vuejs-app-deployed-on-deployed-on-s3-with)を参考にしました。
【クソアプリ】p5js製のうんちがマウスストーカーするクローム拡張機能を作りました

この記事は[クソアプリ2 Advent Calendar 2019 - Qiita](https://qiita.com/advent-calendar/2019/kuso-app2)の21日目の記事です。

色鮮やかなうんち達💩💩💩が、マウスを追っかけてくるクローム拡張機能を作りました。ブラウザをクリックすると、うんちが増えていきます。

![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/41d33494-70da-9b96-3b27-25241ac8f916.gif)

１つのうんち💩をじっくり観察するGIF
![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/ab6fef47-4018-6658-fb3f-2f04767b0d4c.gif)


クローム拡張機能として、リリースしています🎉
こちらから、ぜひDLしてみて下さい！
→[うんちマウスストーカー - Chrome ウェブストア](https://chrome.google.com/webstore/detail/%E3%81%86%E3%82%93%E3%81%A1%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%B9%E3%83%88%E3%83%BC%E3%82%AB%E3%83%BC/femapdggehojagdpnppgfcnnfbhdlfhh?hl=ja&authuser=1)

ソースはこちらにあります。
→[gurutaka/extension_kuso_mouse_stalker](https://github.com/gurutaka/extension_kuso_mouse_stalker)

ここでは、うんちマウスストーカーの特徴と技術的な話を紹介していきます。

## うんちマウスストーカーの特徴
- うんちはp5js製で手作り
- うんちの先端が絶妙に左右に動く
- 全く役に立たない

## 技術的な話

### クローム拡張機能の作り方
過去に初学者向けにQiitaにまとめています！クローム拡張機能の開発にご興味持った方は、ぜひ参考にしてみてください。
→[Chromeブラウザの拡張機能を作ってみたい初心者向けに開発方法を紹介！【サンプルあり】](https://qiita.com/guru_taka/items/37a90766f4f845e963e5)

またGithuｂに簡単なサンプルもおいてあるので、こちらもお試しください！
→[gurutaka/extensions_hundsOn](https://github.com/gurutaka/extensions_hundsOn)


### ブラウザ上でうんちが動く仕組み

こちらの資料にまとめているので、気になる方はぜひご覧ください。

<img width="912" alt="スクリーンショット_2019_12_08_8_44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/f4e35260-9611-1895-5f9a-7fdcd974c8ae.png">
<iframe src="//www.slideshare.net/slideshow/embed_code/key/dSkQNzJif5B3Up" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/takaguru/chrome-p5js" title="chrome拡張機能で ブラウザにp5jsを召喚！" target="_blank">chrome拡張機能で ブラウザにp5jsを召喚！</a> </strong> from <strong><a href="//www.slideshare.net/takaguru" target="_blank">takaguru</a></strong> </div>


簡単に概要はこちら

- div要素をブラウザに配置
- setupで画面全体にcanvasを配置
- あとはうんちがマウスを追っかけるプログラムを書けばOK！


### うんちの描画

![Untitled.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/1cbb0011-b87a-89b5-fe0b-0ba54978a028.gif)

うんちはp5js(processingをJavaScriptに移植したライブラリ)で書きました。うんちの先端は三角関数で動いてます。

![日々のメモ-10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/235774cf-bae8-07d2-7649-8c316bf6a7ae.jpeg)


### うんちの物理運動

うんちがマウスに到達するまでの動きは、物理運動に従っています。

操舵力を計算して、マウスを追っかけるようにしました。
下図はイメージ図です！

![日々のメモ-10_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/d0d340ff-1695-6447-d447-da382e06bc28.jpeg)

しかし、このままの実装だと、うんちがマウス付近まで全力で向かってくるので、急ブレーキできず、マウス付近で止まりません。なので、ある一定範囲内に近づくと、ブレーキをかけるようにしています。

![日々のメモ-11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/314351/d8e83ff1-28e1-608f-ed88-0a9e2d12deb6.jpeg)

## 最後に

以上になります。昨年に引き続き、今年も全く役に立たないクソアプリができて満足です。
→[おっぱい関数ジェネレーターを作ってみた【初リリース】](https://qiita.com/guru_taka/items/73ce07637a47183527e6)

来年はさらなるクソアプリができるよう、精進して参ります。
ずら〜っと、Railsでデータベースを確認する方法一覧

データベースクライアントの起動
```$ rails dbconsole```

こうなる
```sqlite>```

テーブル一覧の見方
```sqlite> .tables```

指定したテーブルのカラムの確認方法（スキーマの確認）
```.schema テーブル名```

カラムを追加
```$ rails generate migration Addカラム名toテーブル名 カラム名:データ型```

テーブルの中身を確認
```sqlite> select * from テーブル名```

マイグレートファイルをDBに反映
```rails db:migrate```
日本語ファウンデーションズ受講中インタビュー

# はじめに

この投稿はコードクリサリスの[日本語ファウンデーションズ](https://www.codechrysalis.io/foundations)を受講してくださった[鈴木明子さん](https://twitter.com/akokitamura)をインタビューした際の記事です。原文は[こちら](http://codechrysalis.hatenablog.com/entry/2019/11/05/153207)。

受講後のインタビューもあります。[こちら](https://qiita.com/maaaashin324/items/e19efd9e732864389d63)です。

## Introduction

今回はフリーランスで日本語講師の鈴木さんに現在通っている[日本語ファウンデーションズ](https://www.codechrysalis.io/foundations)クラスについてお伺いしました。[鈴木明子さん](https://twitter.com/akokitamura)自身プログラミングを学んだ経験は1度もなく、完全な初学者としてFoundationsクラスに参加しています。

今回は鈴木さんにFoundationsクラスの雰囲気や、初学者からこのコースに参加して感じていることを伺いました。

![20191122141021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141607/b490ab43-07c7-e489-c5f5-354c5af3980c.png)

## このコースに参加しようと思ったきっかけは何でしたか？

私は現在フリーランスの日本語教師をしています。翻訳や通訳の仕事の場合だとその人のそれぞれ専門分野があるんですが、語学教師ってそういうのがあまりないんです。しかし、私は現在ITやゲーム系の会社で主に日本語を教えているので、そういった分野を専門とした日本語教師になりたいと思って、プログラミングを学ぶことにしました。また自分で自分の日本語の仕事に関するWebアプリを作ってみたいというのも心の中にあります。

## プログラミングを始めた時に何か感じたことはありますか？

初めてのクラスで一度の授業でこんなにたくさん学ぶことを知って驚きました。初めの授業が特についていくのが大変で、私だけ理解できてないかもしれないという不安がありました。でも何回か続けていくうちに復習や予習のやり方が少しずつわかるようになってきて、だんだん授業の内容が理解できるようになってきたのが自分の中での大きな変化です。

## 授業やクラスの雰囲気はどうですか？

授業はハードですが、クラスの雰囲気はすごく良いので、私も教師をしている立場上そういう環境を作れるのはすごいなって思っています。土曜に授業があるときは同じクラスの人たちとランチしに行ったりもしています。授業はインタラクティブです。まずその日の授業内容に入る前に最初に復習のスライドがあって、「これ覚えていますか？」というように生徒を指名して発言させます。そのためとても緊張感があります(笑)。ただ、たとえ間違えたとしても間違いは指摘されますが、考えそのものを否定されるようなことは一切ないので答えやすいクラスの雰囲気になっています。

Foundationsクラスのいいところの1つは「まだ今の仕事を辞めるかは決めてないんだけどある程度覚悟を決めて学びにきている」という人に会うことができる点です。みんなそこでいろいろな情報交換を行ったり、刺激を受けたりしています。(ちなみに私は転職は考えてないです。)

またimmersive courseを検討している人も一定数はいるようで、その人たちにとっては学校の雰囲気を知ることができるいい機会なんじゃないかなと思います。Immersive courseに入る前に自分にプログラミングは合っているのか、続ける覚悟があるかを自分で判断する上でとても役立つと思います。

![20191105153120.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141607/77af52d0-cb3b-e7f2-74ba-4cdbbd799398.jpeg)

## Foundations コースは週3回ですが、生活のリズムに合っていますか？

私は小学生の子供が2人いて現在平日朝から16時半まで働いています。仕事は16時半には終わっているので平日19時から始まるクラスにはまったく問題はありません。ただ普段私は22時には寝ているので、授業が終わるのが22時、そこから1時間以上かけて帰るのでそこが大変ですね。あとは宿題の時間をどこで作るか。最近は週何回か朝５時に起きて頑張っています！

## 今大変なことはありますか？

宿題に十分な時間が取れないとついていけなくなってしまうのが1番の心配です。授業の時は理解できても、いざ宿題に取り組むと分からなくて、時間がかかってしまいます。ただ最近は復習や予習のやり方やわかってきたのでとても楽しく学ぶことができています。これからも引き続き頑張ります！

## さいごに

[Code Chrysalis](https://www.codechrysalis.io/)は東京を拠点にした12週間の短期集中型ソフトウェアエンジニア養成学校です。ソフトウェアエンジニアになるための12週間特別集中コース：イマーシブやプログラミング初心者向けの講座もありますので、ぜひ見てみてください。
RestfulなAPI

最近業務でREST APIを作っているのですが、最近までほとんど意識していませんでした…。
自身の備忘録に。

#RestfulAPIとは
>RESTful APIとは、Webシステムを外部から利用するためのプログラムの呼び出し規約（API）の種類の一つで、RESTと呼ばれる設計原則に従って策定されたもの。RESTそのものは適用範囲の広い抽象的なモデルだが、一般的にはRESTの考え方をWeb APIに適用したものをRESTful APIと呼んでいる。
引用： [IT用語辞典 e-Words](http://e-words.jp/w/RESTful_API.html)

一言で言うと、**APIの形式の一つでありRESTという設計原則に則っているもの**になります。
では一体、その設計原則のRESTとは何なのか。

## REST(Representational State Transfer)
- 情報は一つのリクエストで完結し、セッションなどの状態管理を行わない
- HTTPメソッドなど、命令の体系が定義されている
- リソース（URL)指向
- 情報の内部に別の情報やその状態のリンクを含めることができる（HTMLなどで情報を表現する）

上記のような特徴を持っています。
また他の一般的なRESTの特徴として、URLが名詞形であったり、レスポンスがJSON形式で行われたりすることも挙げられます。

## REST成熟度モデル
- レベル0　：　HTTPプロトコルを使用している
- レベル1　：　リソースの概念（URL）を導入している
- レベル2　：　HTTPメソッド（POST,GETなど）を使い分けている
- レベル3　：　HATEOASの概念を導入している

RESTはこのような成熟度モデルを持ち、今時のAPIは一般的に**レベル2**に到達しているものが多いです。
このREST成熟度モデルを参考にすることで、RestfulAPIを設計する際に、自身のAPIがどのレベルにいて、どのように改善させて成熟させていくべきかの指針にすることができます。

# 終わり
今回紹介したものはほんの一部であり、他にもセキュリティやエラー処理に関しても様々な規則が定められています。
ちなみに、RESTAPIとRestfulAPIはほぼ同義として扱われることが多いですが、RestfulAPIは完璧にRESTに準拠しているということを指すようです。

RestfulAPIについてまだまだ情報が多く処理しきれていないので、おいおい整理していきたいなと。

以上！
AWS Systems Manager と EC2 Instance Connect を利用して鍵管理、 Public IP なしで SSH 接続出来る EC2 インスタンス構築

この記事は [Opt Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/opt-technologies) 6 日目の乗っ取り記事です

5 日目の記事は @kadokusei さんの [UTM に VyOS と WireGuard を入れてみる](https://kadokusei.hatenablog.com/entry/2019/12/05/221601) です
7 日目の記事は @peko-858 さんの [【ScalikeJDBC 入門】SQLInterpolation を QueryDSL に書き換えてみた](https://qiita.com/peko-858/items/76f5b3fa114953a9da1e) です

---

# AWS Systems Manager と EC2 Instance Connect を利用して鍵管理、 Public IP なしで SSH 接続出来る EC2 インスタンス構築

## tl;dr

- EC2 Instance Connect コマンドを利用して都度生成した SSH 鍵を EC2 インスタンスへアップロード
- 生成した SSH 鍵を用いて Systems Manager の Session Manager を使って SSH 接続

→SSH 鍵管理なし Public IP なしで EC2 インスタンスへ SSH 接続ができる！最高！

## SSH で繋げる EC2 インスタンスが欲しい！でも・・・

- 素直に作ると Internet Gateway から SSH ポートを開けて PublicIP 割り当てて・・・と地味に大変
- 最近なら AWS Systems Manager Session Manager で SSH 接続が可能だけど、鍵は管理が必要
  - Session Manager から SSH じゃない接続も出来るけど、SSH が使いたい
  - 例えば踏み台サーバーとしてインスタンスを立てておいて、ポートフォワーディングして VPC 内の RDS を直接見たいとか
- 先日出た EC2 Instance Connect を使えば鍵管理はいらないが、PublicIP が必要

あちらを立てればこちらが立たず・・・と思っていましたが、組み合わせれば PublicIP なし鍵管理なしで運用できるのでは！？と思って試してみたら出来たので記録しておきます

## やり方

といってもそんなに手の込んだ事はしてないです
手順としては以下のようなステップになります

- AWS Systems Manager Session Manager 経由で SSH 接続出来るよう設定をしておく
- インスタンスに繋ぎたいときは毎回 SSH 鍵を発行して `aws ec2-instance-connect send-ssh-public-key` コマンドでインスタンスに公開鍵を送る
- SSH 接続する

これだけで簡単に実現できます
既に運用中のインスタンスにも導入簡単なのでサラッと入れちゃって良さそうな気持ちを得ました

## 各種手順解説

### AWS Systems Manager Session Manager 経由で SSH 接続出来るよう設定をしておく

ここに全てが書いてあるのでこの記事のとおりにやるだけ
[AWS Systems Manager セッションマネージャーで SSH・SCP できるようになりました](https://dev.classmethod.jp/cloud/aws/session-manager-launches-tunneling-support-for-ssh-and-scp/)

手順だけ書くと、以下のようになります。実質 SSH コンフィグの設定だけみたいなもんですね、お手軽です

- ホストの SSM エージェントを対応バージョンにアップデート
- クライアントの aws-cli と Session Manager プラグインのアップデート
- SSH コンフィグの設定
  - 以下のように、ホスト名にインスタンス ID を指定したら ssm コマンドに受け流すように記述

```config:~/.ssh/config
host i-_ mi-_
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

````

これでインスタンスが Public なネットワークに公開されていなくても SSH 接続が出来るようになります
ssh コマンド実行の際はホスト名をインスタンス ID で指定して実行すれば OK

### インスタンスに繋ぎたいときは毎回 SSH 鍵を発行して `aws ec2-instance-connect send-ssh-public-key` コマンドでインスタンスに公開鍵を送る

ここに全てが書いてあるので（略）
[EC2 Instance Connect を使用して接続する#独自のキーと SSH クライアントを使用して接続する](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-methods.html#ec2-instance-connect-connecting-aws-cli)

- 普通に ssh-keygen で SSH 鍵を発行
- 発行した SSH 鍵を `aws ec2-instance-connect send-ssh-public-key` コマンドで指定したインスタンスに送る
  - 送った SSH 鍵の有効期限が 60 秒なので注意

毎回手でやるのはいくらなんでもめんどくさいので、スクリプトを書いてコマンド一発で出来るようにしておきたい手順ですね

### SSH 接続する

以下を実行するだけ

```console
ssh -i [作った鍵] ec2-user@[対象のインスタンスのインスタンスID]
````

チームでこの方法を使うなら最初の手順の SSH コンフィグを変更をせずに、ここの ssh コマンドに `-o ProxyCommand # 以下略` を渡してあげて、それをスクリプトとして書いておくほうが導入手順が減るので良さそうですね

# おわりに

ということで AWS で Public IP なしの EC2 インスタンスへ SSH 接続する方法を紹介しました
一昔前は公開鍵を S3 においておいてプロビジョニングやスケールアウト時に配布、みたいな泥臭い方法で実現していたユーザーごとの SSH 接続がごく簡単な手順で実現できました
それに、既に運用中のインスタンスであっても導入は簡単そうなのでメリットは大きいんじゃないかなという感触。使わない手はないですね
いい時代になったものです

AWS はいいぞ！
[PR-500KI]自宅VPN環境を構築しようとしたら設定が表示されなかった話

#ホームゲートウェイ(PR-500KI)を使って自宅VPN環境
ギガが無くなるを防ぐため、公衆無線LANがあるところでは積極的に使いたいのですが、セキュリティ上のリスクがあります。
そこで、VPNで隠蔽してセキュアな通信を行います。

実際の設定に当たっては、以下の記事を参考にさせていただきました。
ありがとうございました。

> ホームゲートウェイ(RT-500KI)でL2TP VPNサーバー設定&クライアント設定(Windows10/iPhone)
> https://qiita.com/fstyle/items/3048027568ea18b8183c

#…表示されない。。。
本来だったら、ここに「VPNサーバ設定」のメニューがあるはずなのですが、表示されません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293420/a7ab11cf-7c32-98cd-1372-3295903b7210.png)

本事象と同じ場合は、以下のように 「基本設定　→　接続先設定（IPv4 PPPoE）」の設定項目がすべてグレーアウトして設定できなくなっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293420/ca26af37-af4a-9171-8571-7a3e67595cec.png)

#私の環境
> プロバイダ：So-net
> 契約コース：So-net 光 プラス 戸建　西日本
> 使用ホームゲートウェイ：PR-500KI

※ PR-600KI、PR-600MI、RX-600KI、RX-600MI、RT-500KI、RT-500MI、RT-400KI、PR-400KI、RV-440KI、PR-400MI、RT-400MI、RV-440MI、RT-400NE、PR-400NE、RV-440NE でも多分同様の手順で設定変更できます。

#解決方法
接続の方式をIPoE方式からPPPoE方式に切り替えます。
IPoEとPPPoEの違いは私も詳しくありませんので、以下記事等を参照してください。

> IPoEとは？PPPoE方式とIPoE方式の違い・メリット 
> https://www.kashi-mo.com/media/8083/#IPoE-2

##1.ルータの裏設定メニューへログインする
http://192.168.1.1:8888/t
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293420/769fcae5-8e74-a7f6-4501-20d6aefb7a04.png)
IPv4設定を押下し、左のメニューから高度な設定へ進みます。

##2.設定の切り替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293420/1b383cda-7890-b4b1-64bf-5006db3d93d6.png)

ここのIPv4の一時停止にチェックを外し、すぐ下の設定ボタンを押下すると完了です。

##3.確認・VPN設定
表の設定画面にもどり、VPN設定が行えることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293420/29d34ad2-d917-d5db-185b-15a902943921.png)

あとは、上記のQiita記事を参照してVPN設定を行えば完了です

#おわりに
我々がIPv6を意識することはまだまだ先のことかと思っていましたが、IPv6関連の設定が原因でハマるとは思いませんでした。次の時代もすぐそこまで来ているのですね。。

IPoEという次世代規格からPPPoEという旧規格に戻すことになるため、本設定をすることで速度が遅くなる場合があります。
また、私の契約しているSo-netは公式で本設定のアナウンスがあったため問題ないかと思いますが、「配信済み事業者ソフトウェア」の設定を変更するため、他プロバイダの場合は勝手に当該設定を変更していいかわかりません。自己責任でお願いします。

> 「v6プラス」 (IPoE方式でのIPv4通信) を無効にする (または有効にする) 方法を知りたい
> https://support.so-net.ne.jp/supportsitedetailpage?id=000013893 



しかし、今まで通りに使えるという前提で契約変更したのに勝手に当該設定を変更するのやめてもらえませんかねS〇-netさん……
HackMDを使って、知識を蓄積しよう

## はじめに

ついにAdvent Calendarの担当日がQiita!!!
~~クリスマス前なのにまだ予定がnullです。~~
はじめまして！DMM WEBCAMPでメンターをしています。
今回はHackMDという<font color="green">無料Webサービス</font>について語ろうと思います。
皆さんは、学校や会社で何を使ってノートをとっていますか？
ルーズリーフや、キャンパスノート、裏紙などさまざまな<strong>紙媒体</strong>でメモをとってはいませんか？
そんなみなさんに朗報があります。
ネット上でメモを取れるWebサービスがあります。

そ・れ・が
<h2>
HackMD
</h2>

## HackMDとは

<font color="green">Markdown記法</font>でノートをとれる・共有できる無料WEBサービスです。
リアルタイムプレビューで表示を確認しながら、Markdown入力を行うことができます。
![adventcalendar.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/913fc53b-5714-3443-2be8-ac3df2329f51.gif)



Facebook, Twitter, GitHub, Dropbox, Googleのアカウントさえ持っていれば、手軽にサインインすることができます。

<h5>
HackMDの大きな特徴に
</h5>
<ul>
<li>パソコン、タブレット、スマホなど様々なプラットフォームからリアルタイムに共同で編集を行うことができる。</li>
<li>ノートを自動保存してくれる</li>
<li>ノート単位でノートに対する権限を変えることができる。</li>
<li>ジャンル別にノートをノートブック風に分別できる</li>
</ul>

などなど素晴らしい魅力が詰まっています。

## ノートを自動保存してくれる
書いた時点で保存されるので、自らが保存処理をする必要がない

## ノート単位でノートに対する権限を変えることができる！！！
`Limited`アイコンをクリックすると、そのノートを誰が読めるのか・書けるのかを設定することができる！！
![スクリーンショット 2019-12-21 9.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/c56ba8b1-681b-73cc-de1d-25bb3ebe7719.png)

![スクリーンショット 2019-12-21 9.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/d8a53e6c-6ab5-e5be-6804-edd018bca2bf.png)


<h3><font color="blue">Read</font> & <font color="green">Write</font></h3>
<ol>
<li>作成者だけ閲覧可(Owners)</li>
<li>サインインしているuserのみが閲覧可(Signed-in users)</li>
<li>全員が閲覧可(Everyone)</li>
</ol>


という`読み・書き`共に各３種類の権限を選べることができます。(defaultでは作成者だけ書き込み可能でみんなが見れるようになっている)
※ URLを他人に教えなければほとんど他人に見られることはないので実質作成者だけが読み・書き可能　
  基本的には共有する目的がなければ、<string>read・write</string>共に`Owners`で設定しておくことを推奨します。
  

## ジャンル別にノートをノートブック風に分別できる
```###### tags: 'ジャンル名' ```
上記の記述を冒頭に書くと下の画像のようにきれいにノートを分別することができる。

![スクリーンショット 2019-12-21 10.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541740/23f965c1-0e66-dd02-1388-9aa348c3c57b.png)


## わかりやすくいうと
<h1><font color ="purple">QiitaのThe myノート version!</font></h1> 

<h1><font color="purple">みんなで読み・書き可能な共有ノート</font></h1>

:military_medal:勉強会やミーティングなどの意見交換の場で大活躍するWebサービスだと思います。
ぜひみなさんも使用してください。

### 補足
Markdownの書き方のリンク貼っときます。
[Marddown書き方メモ](https://qiita.com/Minalinsky_1911/items/b684cfabe0f2fde0c67b)

### 参考資料
[機能紹介-HackMD](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=2ahUKEwiKh8KgyMXmAhVSM94KHcvSAjAQFjABegQIAhAB&url=https%3A%2F%2Fhackmd.io%2Fs%2F4JbKDCN1hx&usg=AOvVaw3rcHw1gbJs-m8xU27VLMbk)
MQL4でCMOを計算する

以前iMAやiBands関数と同じような使い方でRCIを取得できる、iRCI関数を作って記事にしたところ、同じようにCMOを取得したいとのコメントをいただいたので記事にしました。
[MQL4でRCIを計算する](https://qiita.com/bucchi49/items/a08f240b920fc5f90a87)


## iCMO

```cpp
double iCMO(const string symbol, int timeframe, int period, int index)
{
    double up = 0.0;
    double down = 0.0;
    double diff = 0.0;

    for(int i = index + period - 1; i >= index; i--) { 
        diff = iClose(symbol, timeframe, i) - iClose(symbol, timeframe, i + 1); 
        if(diff > 0){ 
            up += diff; 
        } else if(diff < 0) {
            down -= diff;
        }
    }

    if (up + down == 0) {
        return(0);
    }
    
    return(100 * (up - down) / (up + down));
}
```

![CMO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89061/04e8612c-da66-43cb-8251-97f08f6f4c58.png)
上が参考にしたCMOインジケーター、下がiCMO関数で計算したCMOです。
どちらも同じ結果になります。


## 追記
終値の変動がperiod回連続で起こらなかった場合にエラー(Zero divide)となる不具合があったので修正しました。
JavaScriptでデータを整形するときのメモ（継続更新）


faker使えばいいが、素で生成するとき用のメモ。

## 乱数系

### 基本

まず、乱数発生の基本。
下記で、0 < n < 1で生成されるが、単独だと事実上使いみちはない。

```js
console.log(Math.random());

0.15043077282053852
```

よく使うのがMath.floor()と合わせて使う。
以下で0〜9までの値が生成される。

```js
console.log(Math.floor(Math.random() * 10));
```

下記のようにすると、0~4までの値が生成される。

```js
console.log(Math.floor(Math.random() * 5));
```
0ありは配列操作等のときは便利（後述）だが、一般には1を足すことがお多い。

```js
console.log(Math.floor(Math.random() * 10) + 1);
```

これで1~10が生成される。

### 応用

上記を利用してよく利用するのが、

#### 指定範囲の値を生成

例えば15歳から60歳までの値を生成したいときなどは以下のようにする。

```js
console.log(Math.floor(Math.random() * ((60 + 1) - 15)) + 15);

34
```

一般化すると、

```
Math.floor(Math.random() * ((max + 1) - min)) + min
```

という形式となる。

#### 配列の中から値を選ぶ

あとよくあるのが配列の中からランダムに値を選ぶときなど。
下記の場合、gender.length()は2なので0,1が生成される。

```js
const gender = ['女性', '男性'];
console.log(gender[Math.floor(Math.random() * gender.length)]);

女性
```



## （前）0埋め（固定長生成）

おまけですが、生成した値を0埋めして固定長の値にする。

```js
const id = Math.floor(Math.random() * 999) + 1;
console.log(id.toString().padStart(8, "0"));
console.log(id.toString().padEnd(8, "0"));

00000017
17000000
```

>splice使った書き方してましたが、上記の方がモダンというコメントいただきました。そのためのメソッドなので、こちらのほうがいいですね（前埋め、後埋めにも対応できますし）。
Overpass APIのススメ

# Overpass APIのススメ
- [OpenStreetMap Advent Calendar 2019](https://qiita.com/advent-calendar/2019/osmjp)向けの記事です。
- 記事中の地図は全てOpenStreetMap ( © OpenStreetMap contributors )を利用しています。

## Overpass APIとは
- 世界中のみんなが自由に使える地図を描く＆活用するプロジェクト「OpenStreetMap」の地理空間情報を扱うためのAPIです。

### どんなデータがあるの？
- OpenStreetMapに描けるデータは全て扱えます。海岸線からベンチまでOK。
- もちろん「描ける≠描いてある」。無ければ地図に描いて世界にシェアしよう。
- 具体的に扱えるデータについては、[Map Features](https://wiki.openstreetmap.org/wiki/JA:Map_Features)を参照してみてください。

### とりあえず触ってみよう
- [Overpass turbo](https://overpass-turbo.eu/)というWebサイトを使えば、簡単にOverpass APIを使ってみることが出来ます。
- 簡単に説明すると「地図版のコンソール」。そう、WindowsやUnixでおなじみの黒くて文字だらけの地図版です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/d46a8edb-0a39-01cc-b8d6-aec80b6e2615.png)
- 画面の左側にOverpass APIを操作するための言語「Overpass QL」を書く欄があります。
- Overpass QLを書いて「実行」ボタンを押せばOverpass APIの実行結果が右側の地図に表示される仕組みです。
- まずは、日本の都市部へ地図を移動させてください（Google Mapsと同じ要領で地図の移動と拡大縮小が出来ます）。

#### トイレのデータを抜き出してみる
- そして、便利なことにOverpass QLを作る機能まであります。少しズームしてから「ウィザード」ボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/068fa034-c062-77da-2574-bb07c458dbba.png)
- クエリウィザードが表示されるので「toilets」と入力して「クエリを作成して実行」ボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/b12fab1d-245e-78b4-d819-059ddbc5e794.png)
- しばらく待つと地図上に丸いアイコンが表示されます。このアイコンがトイレの位置を表しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/c202887b-30ee-21f1-cf2b-3f3a76b51ce5.png)
- 表示された丸いアイコンをクリックしてみると、トイレの詳細（タグ）が表示されます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/197ebc97-6c5c-715d-d175-733ebffe7500.png)

### トイレの中身（データ）を見てみる
- 画面右上の「データ」タブをクリックしてください。すると地図からデータに表示が切り替わります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216230/b8d8f03b-a1cd-b112-1a69-98dc677e26ff.png)
- JavaScript使いは分かるかと思いますが、Json形式のデータがOverPass APIから帰って来ます。
- 「type: node」は「点（ポイント）」を意味し、latとlonは緯度経度。tagsは[Map Features](https://wiki.openstreetmap.org/wiki/JA:Map_Features)にあるタグが入ります。

### 世界中のトイレ情報が手の内に！
- もちろん、建物や道路、ベンチ、海岸線、鉄道網、マンホール、湖、店舗、寺社仏閣（参道～灯籠含む）、森林（エリア）、樹木（一本）、並木。キリがないほどのデータを入手出来ます。
- そして、それが全てオープンデータとして自由に利用することが出来ます。もちろん、ビジネスでの利用もOK。
- データが無い？それなら描いてみよう。それが誰かの役に立つ。積み上がっていくと大きな価値になります。

## 参考サイト
- もう少し具体的（JavaScriptから使うなど）な方法は、次の機会で公開しようと思います。とりあえず、以下のサイトを参考にすると開発スキルのある方なら使いこなせるかと思います。

### 公式Wiki
- https://wiki.openstreetmap.org/wiki/JA:Overpass_API
    - 日本語版Wikiはあまり更新されていないけど、Overpass API自身があまり更新されていないので、まぁ大丈夫かな。

## まち歩きマップメーカー
- https://armd-02.github.io/mapmaker/
    - Overpass APIを使ったWebサイト。Javascript使いならこれを参考にするとだいたい分かるかと思います。
KivyのUI要素のshow/hide

<b>main.py</b>

```

#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import NumericProperty 

class TestWidget(Widget):
	testTextInput2_Opacity = NumericProperty()
	testTextInput2_size_hint_y = NumericProperty()
	show_hide = 0

	def __init__(self, **kwargs):
		super(TestWidget, self).__init__(**kwargs)
		self.testTextInput2_Opacity = 1
		self.testTextInput2_size_hint_y = 0.2

	def buttonClicked(self):
		if self.show_hide == 0:
			self.ids.box.remove_widget(self.ids.testTextInput2)
			self.ids.box.add_widget(self.ids.testTextInput2, 0)
			self.testTextInput2_Opacity = 0
			self.show_hide = 1
		else:
			self.ids.box.remove_widget(self.ids.testTextInput3)
			self.ids.box.add_widget(self.ids.testTextInput3, 0)
			self.testTextInput2_Opacity = 1
			self.show_hide = 0

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)

    def build(self):
        return TestWidget()

if __name__ == '__main__':
    TestApp().run()
```

<b>test.kv</b>

```

#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import NumericProperty 

class TestWidget(Widget):
	testTextInput2_Opacity = NumericProperty()
	testTextInput2_size_hint_y = NumericProperty()
	show_hide = 0

	def __init__(self, **kwargs):
		super(TestWidget, self).__init__(**kwargs)
		self.testTextInput2_Opacity = 1
		self.testTextInput2_size_hint_y = 0.2

	def buttonClicked(self):
		if self.show_hide == 0:
			self.ids.box.remove_widget(self.ids.testTextInput2)
			self.ids.box.add_widget(self.ids.testTextInput2, 0)
			self.testTextInput2_Opacity = 0
			self.show_hide = 1
		else:
			self.ids.box.remove_widget(self.ids.testTextInput3)
			self.ids.box.add_widget(self.ids.testTextInput3, 0)
			self.testTextInput2_Opacity = 1
			self.show_hide = 0

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)

    def build(self):
        return TestWidget()

if __name__ == '__main__':
    TestApp().run()

```

これで中間の要素をshow/hideできる
なんかあんまり使い方がしっくりこない
自分用メモ
elm-program-testでメンテナンスしやすいテストを作る

この記事は[Elmアドベントカレンダー](https://qiita.com/advent-calendar/2019/elm) 21日目の記事です。

ネタがなくて困っていたところ、ジンジャーさんのこんな投稿を見つけたのでelm-program-testを紹介します。
ジンジャーさんありがとうございます。
https://twitter.com/jinjor/status/1201911801119559685

# elm-program-test とは
[リポジトリ](https://github.com/avh4/elm-program-test/)より引用
>elm-program-test provides a convenient API that works with elm-test (including Test.Html) for testing your Elm programs as complete units.

Elmプログラムのテスト実装に便利なAPIを提供しており、elm-testを内包しています。

[elm-test](https://package.elm-lang.org/packages/elm-explorations/test/latest)がユニットテストやファズテストの実装に便利なAPIを提供しているのに対し、
[elm-program-test](https://package.elm-lang.org/packages/avh4/elm-program-test/latest)はより上位レベルのテスト実装に便利なAPIを提供しています。

一連の操作を行った後に画面状態が期待通りになっているか確認したい場合などが利用例になると思います。

# 何が便利なのか
elm-program-testを使うと、テスト実装が実装コードの仕様変更やリファクタリングに対して堅牢になります。
具体的には、「機能は変わっていないのに、デザインが変わったせいでテスト書き直しになってしまった」のような問題が起こりづらくなります。

実際のテストコードを見てみましょう。
[リポジトリ](https://github.com/avh4/elm-program-test/)からの引用です

```elm
import Test exposing (..)
import Test.Html.Selector exposing (class, text)
import ProgramTest exposing (clickButton, expectViewHas, start)
import MyProgram -- just an imaginary example

exampleProgramTest : Test
exampleProgramTest =
    test "cannot publish without a title" <|
        \() ->
            ProgramTest.createElement
                { init = MyProgram.init
                , update = MyProgram.update
                , view = MyProgram.view
                }
                |> start ()
                |> clickButton "New Post"
                |> clickButton "Publish"
                |> expectViewHas
                    [ class "invalid-article"
                    , text "You must provide a title before publishing"
                    ]
```

いろいろ書いてありますが、テスト内容としてはstart以降です[^1]。読んでみると、New Postボタン、Publishボタンの順で押した場合に、エラーメッセージが出るかどうかを確認するテストのようですね。

ここで注目したいのは、クリックするボタンの位置の指定にタグ構造を使っていない[^2]ことです。これにより、デザインや内部の処理構造を変えてもテストを書き直さなくて済むようになっています。

elm-program-testには今回紹介したボタンクリックのシミュレート以外にも

1. リンクをクリックする
2. inputにテキスト入力する
3. チェックボックスにチェックをつける
4. セレクトボックスの中から選ぶ

といったユーザ操作をシミュレートするための便利な関数があります[^3]。[ガイド](https://elm-program-test.netlify.com/)にEllieによる実装例もあるため、まず使ってみてはいかがでしょうか。

# 参考情報
リポジトリ　https://github.com/avh4/elm-program-test/
ガイド　https://elm-program-test.netlify.com/
Elm Package　https://package.elm-lang.org/packages/avh4/elm-program-test/latest

###### Twitterで質問があったので追記
clickButtonに自動で探してもらえるボタンは以下のパターンのようです
1. buttonのtext部分一致
2. role属性がbuttonになっているタグのtext部分一致
3. formタグ内　buttonのvalue部分一致
4. formタグ内　input type submitのvalue部分一致

[^1]: startの前部分では、Browser.element実装で使われるinit, update, view を渡しています。ProgramTestには、ElmのBrowser.XXに合わせて、createSandbox, createElement, createDocument, createApplicationや、Platform.workerのための createWorkerがあります。
[^2]: [実装](https://github.com/avh4/elm-program-test/blob/master/src/ProgramTest.elm#L823)を見ると、ボタンの実装としてあり得る可能性を列挙しており、その中のどれかであれば自動でボタンを見つけてくれるようです。
[^3]: 他に、[Cmdを使ったテスト](https://elm-program-test.netlify.com/cmds.html)などもできるようですが、現状のElmの仕様ではCmd値を直接検証できないためにテスト用の型を定義する必要があり、コストに見合うかどうかを検討した方がよいと書かれていました。
Pythonで自動ジョブを実行する


Pythonでcronジョブを回すのに何か良いアイデアはないかなと探しいたところ、**APScheduler**というライブラリを見つけた。

基本的にできることは以下のようなところ。

* 開始/終了時間を設定した上でのcronスケジューリング
* 均等間隔でcronを実行
* 設定した日時に1回限り実行

今回は10分おきにAPIを叩いて、情報が取得できた場合はそのデータを保存する的なやつを作る予定だったので、この要件には十分満たしていた。あとは、環境やフレームワークごとにそれぞれSchedulerを起動するメソッドが用意されているので結構便利。

### APSchedulerをインストール
```terminal
$ pip install apscheduler
```

### 処理を書く

```python:app/schedule.py
def hello_world():
  print("Hello World!")

sched = BackgroundScheduler(standalone=True,coalesce=True)
sched.add_job(hello_world, 'interval', minutes=1)
sched.start()
```

これで1分おきに「Hello World!」が表示される。

### 読み込む

Flaskでアプリケーションを作っていたので、`__init__.py`で読み込んであげれば、ローカル環境でも、本番環境（Heroku）でも問題なく動いていた。

```python:app/__init__.py
import app.schedule
```

ライブラリを読んで進めれば何てことはないのだけど、案外日本語の記事がすぐに出てこなかったりもしたので、備忘録的に残しておいた。
threeでshadertoy

# 概要

three.jsでshadertoyのスクリプトを動かす。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/776adc31-03c0-66e3-2abf-9ab80f21ca0f.png)


# 成果物

https://embed.plnkr.co/8rWJtKlOYYQhaRqQOUuU/

以上。
FirestoreでBatch処理


FirestoreではTransaction処理が可能ですが、件数が多い場合はBatch処理を使うほうがいいみたいです。
が、Batch処理には500件以上を一度に処理できないとう制限があるので、その検証と回避方法についてテストしてみます。

## 準備・前提

* membersコレクションを作成して500件以上のデータを作成しておく。
* membersコレクションにはstatusフィールドがあり、基本falseになっている。
* ローカルで実行するnodeスクリプトを想定。


## コード１（500件対応なし）

statusがfalseになっているのをtrueにするバッチ。

```js
const admin = require('firebase-admin');

admin.initializeApp({
    credential: admin.credential.cert('/path/to/key.json'),
    databaseURL: 'https://xxxxxxxxxx.firebase.com',
});

const db = admin.firestore();
//batchインスタンス生成
let batch = db.batch();

(async () => {

    //collectionからデーを取得
    const snapshots = await db.collection("members").get();
    //ループしながら・・・
    const docs = snapshots.docs.map((doc, index) => {

        //update
        batch.update(doc.ref, { status: false })
    });

    //最終commit
    batch.commit();

})()
```

これを実行すると、

```bash
Error: 3 INVALID_ARGUMENT: maximum 500 writes allowed per request
```

というエラーになる。

## コード２（500件対応あり）

500件毎にcommit()を実行して500件制限を回避します。

```diff
const admin = require('firebase-admin');

admin.initializeApp({
    credential: admin.credential.cert('/path/to/key.json'),
    databaseURL: 'https://xxxxxxxxxx.firebase.com',
});

const db = admin.firestore();
//batchインスタンス生成
let batch = db.batch();

(async () => {

    //collectionからデーを取得
    const snapshots = await db.collection("members").get();
    //ループしながら・・・
    const docs = snapshots.docs.map((doc, index) => {

+        //500件毎にcommitしてbatchインスタンスを初期化
+        if ((index + 1) % 500 === 0) {
+            batch.commit(); //新しいインスタンス
+            batch = db.batch(); //新たにインスタンスを生成。
+        }

        //update
        batch.update(doc.ref, { status: false })
    });

    //最終commit
    batch.commit();

})()
```
[入門] 10分で開発！名言表示アプリ for Apple Watch

　この記事は 、[ユアマイスター Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yourmystar) の21日目の記事です。

　こんにちは！ユアマイスターでエンジニアインターンをしている土佐鰹です。
　年末にPRIDE、K1などで盛り上がっていた時代から10年飛んで、RIZINが年末の格闘技放送を定例化してきて嬉しい限りでございます。

　弊社には格闘技のように、長く愛されるサービスを作りたいエンジニアがたくさんいます。その中の1人に、息を吐くように名言を生み出す方がおられます。(以降、Fさん)
　そんなFさんが吐き出す名言を忘れたくないと、過去に弊社では全精力をかけて名言を返してくれるSlackBotを作成しました。
<img width="393" alt="スクリーンショット 2019-12-21 0.42.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/42c1e43f-1d33-9ff4-a60b-18f8776ba89f.png">

　しかし、**Slack**を使うのは仕事モードの時がほとんどですよね。。。
　「遊んでいる時にも時々思い出したいな。。」
　「ジムで自分を追い込んで疲れてる時に癒されたいな。。」
　「エンジニアチームだけずるいな。。」
　(※弊社ではエンジニアチーム以外はSlack以外のツールをメインで使っています)

　そのようなお客様の思いを解決するために、このアプリを作成しました！！

## 実装
　まず、Xcodeで新しいProjectを作り **Watch App** を選択します。
<img width="737" alt="スクリーンショット 2019-12-20 23.42.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/3a085d12-edfe-5ab9-78f2-a2b4150ea146.png">

 **Inerface.storyboard**でAppleWatchのUIを作っています。
今回は*simple is the best*の精神で、**Label**と**Button**のみ追加します。

<img width="1279" alt="スクリーンショット 2019-12-20 23.50.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/97a3f532-c96e-6693-a325-3d8fceeb5b1c.png">

　作成した**Label**から **control**を押しながらInterfaceControllerにスワイプしていきます。
　すると**Label**のNameを設定する画面が出てきますので適当に入力します。今回は名言表示部分なのでmaximumLabelとしました。(**Button**に関しても同様。)
<img width="1279" alt="スクリーンショット 2019-12-20 23.55.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/28861986-6bdb-7f0d-53d8-573fd2206c06.png">

　以上の作業を行うと、以下のようなコードが**InterfaceController.swift**に追加されています。

```
@IBOutlet weak var maximLabel: WKInterfaceLabel!

@IBAction func onTapButton() {
}
```

　この**onTapButton**でボタンが押された際の処理を書いていきます。

　まず、classの先頭で以下のコードを追加します。

```
let maxim_words = [
    "プログラミング言語界のノンシリコンシャンプー",
    "食は質より量",
    "俺の辞書の中にカロリーはない",
    "夕方の12時",
    "もうそろそろグルコサミンの時期かな",
    "1の3乗は1だから"
]
```
　これは名言の中でも、自分が選び抜いた精鋭たちになります。
　この名言たちから、"技術を追い求めている人なのかな"、"太っているのかな"、"足腰が弱いのかな" 等の想像ができると思います。
　謎に包まれたFさんのベールも少しずつ剥がれてきましたね！！

　そして、**onTapButton**の関数でランダムに名言を選んで**Label**に表示する処理を書きます。

```
@IBAction func onTapButton() {
    let maximum_word = self.maxim_words.randomElement()
    maximLabel.setText(maximum_word)
}
```

これで完成です！！！！！！！！！

## View
完成したアプリの起動後画面は以下です。
<img width="198" alt="スクリーンショット 2019-12-21 1.14.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/85862e5c-a52e-a749-a91e-d6786ce3a872.png">


ボタンを押すと次々に名言を吐いてくれます。
<img width="202" alt="スクリーンショット 2019-12-21 0.26.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/02927b84-492b-7a3a-cbc1-bd1d4c2a5a1d.png">
<img width="211" alt="スクリーンショット 2019-12-21 0.26.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215620/6770a208-f41f-3d28-ea03-b01b33c5655d.png">

## 最後に
　これで仕事モードでないOFFの時も名言を思い出すことができます。
　Fさんも自分の名言がみんなに見てもらえて嬉しいことこの上ないはず。

　自分はARKitでARの開発を行なっているのですが、AppleWatchのフレームワークもさほど変わらないことがわかったので、最近買ったAppleWatchで暇があったらアプリを作ってみようかなと思いました。

## 参考記事
[初心者向け】はじめてのApple Watchアプリ](http://min117.hatenablog.com/entry/2017/04/29/122846)
OculusQuest ハンドトラッキングをとりあえず試す

# ついにハンドトラッキングのSDKが実装!
2019年12月20日に待望のOculusQuestのハンドトラッキングのSDKが公開されたのでとりあえずハンドトラッキングを試したい人向け
より詳しい情報は[公式のリファレンス](https://developer.oculus.com/documentation/quest/latest/concepts/unity-handtracking/#setting-up-a-scene)を読んだりすることをお勧めします

この記事は以下の環境での実装です
Unity 2018.4.14f1
OculusIntegration ver 12.0 ( Unityの対象バージョンは 2017.4.30 以上 )

AssetStoreのバージョン情報がバグってる?
既にOculusIntegrationを導入してるプロジェクトだとアップデートするか否かのダイアログに 1.44 とかって書いてあったからこっちが本来のバージョンと思われる

また本記事はOculusQuestのアプリビルドができることを前提としています
参考記事
[0から始めるQuestビルド](https://qiita.com/HhotateA/items/d42f2d2522c1fdd227b9)
[Unityで作ったアプリをOculus Questで動かす](https://qiita.com/pira/items/1c935f30d5ba6c020333)

とりあえず実装完了しててより詳しい情報を知りたい方は↓の参考ページより
[OculusQuest ハンドトラッキングSDKから、指Boneの情報を取得し分析する](https://qiita.com/divideby_zero/items/4949fadb2c60f810b3aa)
[Unity Oculus Quest ハンドトラッキングで5本の指でインタラクションさせる](https://qiita.com/gtk2k/items/24b329a407bf72f9487b)
[OculusQuestのハンドトラッキングについて色々調べてみた](https://qiita.com/Horukasu/items/eb1bc20621d51a85d988)


# 導入手順

### シーンへの配置
- 先ずは空のプロジェクトを作成し、適当なシーンを作成
- OVRCameraRigをシーン上に配置
- OVRCamerarig > TrackingSpace > LeftHandAnchor, RightHandAnchorにOVRHandPrefabを配置する

OVRHandPrefabの場所は下記画像のとおり、OVRCameraRig等のプレハブがあるところに置いてあるので右手、左手それぞれのAnchorにOVRHandPrefabを配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212999/6a9d4761-bc6d-8b9e-4b9e-892f168ae3ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212999/228ecfeb-c9b3-0d44-3f91-d6b054f86949.png)

### パラメータの設定
次にOVRHandPrefabのInspectorを見てみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212999/9ccb7eba-f01b-f894-3494-7e512f964a7e.png)

以下の三つのコンポーネント
**OVRHand** の **HandType**
**OVRSkeleton** の **SkeletonType**
**OVRMesh** の **MeshType**
をそれぞれ左手なら Hand Left、右手なら Hand Right に設定する



次にOVRCameraRigを選択
**OVRManager** の **Hand Tracking Support** のドロップダウンを **Controllers And Hands** または **Hands Only** に設定する
当記事では**Hands Only**に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212999/424c2eb2-1ab6-8f6e-1dba-bab3e0b80fb6.png)

それぞれの設定での動作の違い

**Hands Only**
コントローラ設定でアプリを起動することが出来、その時はコントローラのトラッキングのみ行わる
ハンドトラッキングアプリとして動く、コントローラはトラッキングされない
アプリ中にコントローラのボタンを押下してもハンドトラッキングからコントローラに切り替わることは無い

**Controllers And Hand**
基本的にハンドトラッキングのアプリとして動く、アプリ起動中にコントローラを操作するとコントローラを認識し、以後ハンドトラッキングが切れる( ボタン押下、コントローラ動かしただけでは特に反応しなかった )
アプリを閉じるとコントローラ操作の状態になっており設定から再度手を使うを選択する必要がある

**Controllers Only**
手を使う設定でアプリを起動しようとすると***コントローラが必要です***というダイアログが開きアプリを起動できない
アプリ中は当然ハンドトラッキングは行われない

これらの動作は今後のOculusIntegrationの更新で変わると思われるのであくまで現時点での動作ということで...

# ビルド、そして実機へ...
![handtracking.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212999/be5fdc5f-150b-740a-18c9-fb1f230c1bda.gif)

良し、いい感じ

とりあえず駆け足気味だったがこれでハンドトラッキングをとりあえず試すことが出来た


# 感想
遅延も言われなきゃ気づかないくらいだしトラッキングが切れる時は割と思い切りのいい感じにトラッキングが切れるから不快感はない
トラッキング切れるか否かの境目らへんで手がぐちゃぐちゃになるのが一番いやだからね

コントローラ設定の時にアプリを起動すると初めからコントローラ操作になる、今のところハンドトラッキング -> コントローラは遷移するがコントローラ -> ハンドトラッキングへの遷移はないと思われるてかできるようにしてほしい、うっかりコントローラ操作しちゃったときにホームの設定を直すのは手間なので

ハンドトラッキングのアプリの時はアプリを閉じる方法が特にない、ジェスチャとか何かしらのメニューを自作する必要があると思われる
大石泉すきボタンを作る

# 初めに
大石泉アドカレ、書かなければいけないことは分かっていたんですが図書館の返却期日が目前に迫った本を読んでいたらすっかり忘れており、投稿2時間前に何やるか考え始めました。どうも砒素です。ちなみに読んでいた本は論理的思考がどうたらって本でした。まだ読み終わっていません。返却は明日までです。私も大石泉さんみたいに論理的に生きていきたいものですね。論理的な人といえばどちらかと言えば橘さんですって？確かにそれはそうですが大石泉さんも十分に論理的だと思いますし、ときに論理的じゃない一面を見せてくれるのも彼女の魅力の一つですね。
ところでアドベントカレンダーといえばクリスマスですが、みなさんクリスマスの予定はお決まりですか？私は自宅でゆっくりSchool Daysを見るという義務があるので彼女との予定を作れませんでした。そもそも彼女がいません。もういっそ大石泉さんを彼女にしたいですね。無理ですね。サンタさんへ。ぼくは、くりすますにかのじょがほしいです。ようしたんれいひんこうほうせいなじょせいをかのじょにください。よいこの砒素より。モバのイベントで泉さんと予定作ったぜOhYeahﾍﾞｲﾍﾞ~って人もいるかもしれませんが私はクリスマスはニューウェーブの3人でいて欲しいのでそこに水は差せません。後で写真送って～みたいなレベルですね。写真送って～といえば、大石泉さん絶対事務所内にSlackを布教しようとしてると思うんですよ。PC派ってことでSlack使えたほうがいいですし使っているOSがLinuxならLINE使えないのでなおさらですね。SlackならLinux版デスクトップアプリケーションもありますしブラウザ版もあるので。最近の学校とかだとなんとか委員なんとか委員なんとか部なんとかクラスとかでLINEグループ大量に作ってるとかですがアレ管理辛いと思います。どうやってるんですかね。素直に尊敬します。まあ中学生が写真とかも逐一Slackで送ってくるのもなんとなく夢がなくて変に現実的なのでイヤですね。
内容がなさすぎて初めにのところでかさ増ししようとしてないかって？気のせいです。

# 何やったの
Arduino使って大石泉ボタン作りました。(制作時間5分)
プログラム込みで5分なので内容が薄すぎて死にそうです。

# 使うもの
|物品|個数|
|---|---|
|Arduino Leonardo|1|
|抵抗(抵抗値は適当)|1|
|タクトスイッチ|1|
|ジャンプワイヤ|3|

# 回路
![Untitled Sketch_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322441/edfbbe30-8a22-c7b2-8b50-4b7ba929faeb.png)

Arduino Leonardに13番ピンにごく普通のスイッチを結線しました。別に13じゃなくてもいいです。G
内容があまり無いようなので(笑うところ)プルダウンについて書いておきますと、デジタル回路において回路の0と1を安定するためにつかうものです。

# プログラム
```c

#include <Keyboard.h>
void setup() {
  Keyboard.begin();
  pinMode(13,INPUT);
}
void loop() {
  while(digitalRead(13)==HIGH);
  while(digitalRead(13)==LOW);
  Keyboard.print("ooishiizumisuki ");
  Keyboard.write(KEY_RETURN);
}
```

Twitterに投稿できそうなレベルのコードですね。ぜひ投稿して下さい。投稿した場合多分`#include`がタグになりますね。このタグを占領してやりましょう。

ちょろっとした解説を一応書いておきますと、13番ピンの値を読んでHighならLowになるまで待ってその後"大石泉すき"と出力するようにしています。`KEY_RETURN`はエンターキーです。
最初に`Keyboard.h`のヘッダファイルを読み込まなければいけないこと、このヘッダファイルは一般に広く使われているArduino Unoでは使用できない点に注意をしてください。持ってない人はArduino Leonardo買いましょう。ゲームパッド入力とかできて便利ですよ。寝る前にセットして某ゲームのスロットを一晩中回しておいたりするのに使えます。私の場合は起きたら全部スッてましたが。ゲーム内でも賭け事に弱いのでそろそろ人間を引退したほうがいいのかもしれません。

# 完成例
![IMG_20191220_215224_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322441/f7cf70eb-85a5-bb84-8d48-ffc35fd1efa4.jpeg)
**うおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおああああああああああああああああああああああああ(勢いのありそうな写真と掛け声)**

![コメント 2019-12-20 215655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/322441/1373f47d-ecf8-a085-cf55-b2193d341a6e.png)

Q.これだけ？
A.これだけです。

Q.これだけですか？
A.これだけですね。

Q.実用性は？
A.Not Found...

---
それでは最後に、6秒で考えた渾身のなぞかけを。

```
乙女よ大志を抱け！とかけまして
大石泉とときます
そのこころは？

「おお、意志」
```
---
おしまイズミン。