OmniAICreator/Qiita-1.07M huggingface dataset:
terraform state lock の解除方法

## はじめに
terraformのstatelockにDynamoDBを使っていて、何かの拍子に意図せずロックされたままの状態になってしまったときのロック解除方法の例を残しておきます。

```
$ terraform plan

Error: Error locking state: Error acquiring the state lock: ConditionalCheckFailedException: The conditional request failed
        status code: 400, request id: HUFMTA4D7PN40H4RVR3PBC2FJVVV4KQNSxxxxxxxxxxx
Lock Info:
  ID:        xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
  Path:      tomy-stg-terraform-state/_/tomy-stg/terraform.tfstate
  Operation: OperationTypePlan
  Who:       tomy103@xxx.local
  Version:   0.11.10
  Created:   2018-12-20 23:46:18.414418 +0000 UTC
  Info:


Terraform acquires a state lock to protect the state from being written
by multiple users at the same time. Please resolve the issue above and try
again. For most commands, you can disable locking with the "-lock=false"
flag, but this is not recommended.
```
こうなると何度terraform apply / plan を実行しても上記Errorで実行できません。

他でterraform apply / plan が実行されていないことが分かっていたのでこのロックを手動で解除します。

```
$ terraform force-unlock xxxxx-xxxxx-xxxxx-xxxxx-xxxxx

Do you really want to force-unlock?
  Terraform will remove the lock on the remote state.
  This will allow local Terraform commands to modify this state, even though it
  may be still be in use. Only 'yes' will be accepted to confirm.

  Enter a value: yes

Terraform state has been successfully unlocked!

The state has been unlocked, and Terraform commands should now be able to
obtain a new lock on the remote state.
```

これでterraform apply / planが実行できるようになりました。

## 参考ドキュメント
https://www.terraform.io/docs/commands/force-unlock.html
【クラス、オブジェクト、インスタンス、メソッド】

#【クラス、オブジェクト、インスタンス、メソッド】

クラス、オブジェクト、インスタンス、メソッドの理解が出来ていないので、まとめてみました。

誤りがあればご指摘よろしくお願い致しますm(__)m

**【クラス、オブジェクト、インスタンス、メソッド】**

クラスは型。オブジェクトを量産するための設計図。

オブジェクトはモノという概念。オブジェクトはクラスを元に作られる。

クラスから作られるオブジェクトがインスタンス。

インスタンスはメソッドを使うことで、色んな振る舞いが出来る。

メソッドは「自身の名前を表示する、自身の文字列の長さを返す」などが出来、クラスに定義することで使用可能になる。

メソッドを定義する場所はクラスであり、インスタンスに対してではない。

作成したインスタンスに対してメソッドを使うには、左辺と右辺を「.」ドットで繋ぐ、ドット記法を用いる。

```
User.new.name
```

といった感じ。

この時、User.newかcreateで先にインスタンスを作って、クラスにnameメソッドを定義していないとnameで名前を呼び出せない。

```
undefined method `name' for nil:NilClass
```

というエラーが出る。

nil(何もない状態）に対してnameというメソッドは使えないよというエラー。

まずはインスタンスの作成と、メソッドの定義をする必要がある。
「バーンダウンチャートを見やすくした話」のその後の話

この記事は、[Business Bank Group Developers Advent Calendar](https://qiita.com/advent-calendar/2018/bbg_developers) 21日目の記事です。

# はじめに
本記事の元ネタの記事は[こちら](https://qiita.com/keitatakahashi/items/5f82a4e2993306ab5e44)です。

以前、バーンダウンチャートを見やすくするJIRAの設定を行ったという記事を書きました。
この設定を行なった直後のスプリントのバーンダウンチャートの見え方について紹介しましたが、
その後の話を書きたいと思います。

# その後どうなったか
その後のスプリントを実施していく中で、**チーム開発にどういう影響があったか**について紹介します。

## チャートを真面目に見るようになった
この改善をする前の状態は、
正直、毎スプリント、バーンダウンチャートが理想線より上にある状況となってしまっていました。
チャートを見ても進捗が進んでいるのか遅れているのかが全くわからない状況で、
チャートを見るという行為自体が形骸化していました。

見やすくなったことで、チャートが有用なものとなり、メンバー全員が**真面目にチャートを見る**ようになりました。

## 進捗を前倒しにする意識が高まった
バーンダウンチャートが、チケットのステータスを変更させるだけで減っていくのが目に見えるため、
作業を前倒しさせてチャートが綺麗に見えるように頑張る、という意識が高まりました。

ここ最近のスプリントでは、以下のチャートのようにスプリントを開始した直後に、
ものすごい勢いでチケットが消化できています。
<img width="1196" alt="burndownchart.png" src="https://qiita-image-store.s3.amazonaws.com/0/238995/f72b6f65-95dd-289a-bba1-6b27eb6f00cd.png">

こういう形で進捗していくと、メンバー全員がとても気持ち良くなれます！

ちょっと余談ですが、上記のチャートの後半は理想線より上振れしています。
これは、スプリントが早く終わったことで途中でチケットを追加したり、
少し重ためのチケットが最後まで残っていたのが理由です。

スプリントを進めていく過程では、いくつかのチケットはスプリントの最後に完了するということは、
メンバー全員が共有されていたため、チャートがこのような曲線になるということは、
予想通りの状況であったと言えます。

## スプリントの作業が早く終わるようになった
前倒しの意識が高まったことで、**「スプリントの作業が早く終わってしまう」**という良い問題(?)が発生するようになりました。
これまで作業が早く終わることはほぼなかったので、これはとても画期的なことです。


# 今後の改善
## チケットの見積精度を上げていく
「スプリントの作業が早く終わった」という話を手放しで喜ぶわけにはいきません。
可能性として、見積精度が甘くて、見積で高いポイントをつけすぎた可能性もあります。
また、逆のパターンとして、思ったより時間がかかってしまったケースもあります。

実績に基づいてチケットの見積の妥当性を検証していく必要がありますが、
現状では、この点がまだ未解決ですが、
**見積と実績のポイントに乖離がある場合は記録として残す**ようにし始めました。

今後、積み重ねた記録を元に、ポイントのベロシティを見直すなどの改善を進めていこうと考えています。
（このあたりも今後記事にするかも・・・）

明日は @kyokoshimizu さんです。よろしくお願いします！
シビックテックに重要なこと

#シビックテックに重要なこと
最近シビックテック界隈では人に寄り添うことが少なくなってきているような気がします。
実はあるブリゲードで経験したことがあったので書いてみようと思います。
##市民主導である
シビックテックとは<strong>市民主導型</strong>で自分たちシビックハッカーは主役ではなくわき役であることをわきまえるべきだと思います。
<strong>初心者が見えたらその人に寄り添う。</strong>
これが重要です。
自分たちは寄り添えたかというと最終的にはその人たちを利用してしまいました。
本来の方向とは別物を作ろうとしてしまったのです。
困った人を助けるツールが本来の目的でした。
もちろんモデレータが必要といったツールの予定でしたが知らない間にモデレートをAIに任せようとする人間に屈する結果となってしまいました。
困ったことを解決するのには自治体と企業と市民が組み合わさってこそできることです。
このツールにはもともとモデレータありきで作っていましたが。
懇親会で方向性を切り替えられてしまい私の手を離れることとなりました。
このツールにはもう一つの局面を持たせる予定でした。
それは災害時に使えるツールとしたかった。
なぜなら実はFacebookやクライシスマップなどクライシスマネージメントがうまくいっていないという現状を自分自身が知っていたのでそれを何とかしたかったのです。
それは震災時や災害時の情報の一元化こそがこのツールの目的だったからです。
##クライシスマッピングとは
意外と知られてませんが一番最初の日本でのクライシスマッピングは東日本大震災です。
これは人力ですべてまとめていたことは誰も知りません。
ちなみに二回目の大島クライシスマッピングは忙しくて出ることができませんでした。
私は第三回目の2014豪雪のクライシスマッピングに参加しましたが実際のところ情報は氾濫し大変でした。
はっきり言って外部の人間が現地の情報を集めるのには限界があります。
TwitterやFacebook・Nexco・国交省・JR・私鉄などの情報集めに奔走しました。
いろんな自治体の首長さんたちとも協力体制を結ぶといった難しい役割をしていました。
これのおかげで災害時に情報を発信し続けることが重要なのを学びました。
このあとは実は熊本大震災・大阪府北部地震・7月の豪雨ともに情報コーディネータとして動いておりました。

##なぜ人を助けるツールを作りたかったのか
今年の二月の豪雪は情報がさらに氾濫しました。
実際に当時働いていた会社の協力会社が福井県坂井市にあり一週間眠らず除雪をしていました。
本心は彼らを助けに行きたかったがいきさつでした。
その時必要になったのが今通れる道路を知ることでした。
それによって自分たちも助かるし携わる自治体・自衛隊・国交省が助かると思ったからです。
自分たちの力を結集し作り上げることと市民に寄り添うことがシビックテックだと思っています。

##どうすべきだったのか
実際に言えばもっと<strong>市民に寄り添うべきだ</strong>と思います。
初心者にとってSlackを使うことも無理だったと思います。
わかりやすいLINEやFacebookMessangerなどでもよかったと思います。
あと<strong>ひっくり返したい奴は打ち合わせに参加してるふり</strong>をするのはだめですね。
<strong>ちゃんと話している人に向き合いましょう。
その人は何か訴えているはずです。
それを解決することが重要です。
これができない人は自分のやりたい事を前に進めていきます。</strong>
自分のやりたいことを進めていっては思い通りにはいきません。
これでは初心者はみんな引きます。
ひかせないための技術これが一番重要なのではと思います。
これの<strong>第一人者はCode For Kanazawaの福島さん</strong>です。
彼が5374.jpを立ち上げたときは興味本位で参加していましたが彼自身が困っていたものを解決するために作っていました。
最終的には全国的に広まっていきました。
今は多くの自治体で5374.jpとそれの類似ソフトが動いています。
類似ソフトもいる物を追加したような形です。
それも自由といったオープンデータ（オープンソース）に沿った形になってきていると思います。
今後は人に向き合い人が参加しやすいCode forのブリゲードを東海地方のみんなと作り上げたいと思っています。
GO+GAE+Middlewareで気をつけたこと

### Handlerはきちんとreturnしないといけない
たいして躓いたわけではないが、MiddelewareHandlerを定義するときはきちんとreturnしておかないと、不要なコードが実行されてしまうということ。


```golang

func loggingMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		log.Println("メインのHandlerの前にここが実行されて次の制御に移るわけだが")
        if true {
		    next.ServeHTTP(w, r)
            log.Println("ここで終わってくれなくて")
            //return 終わらせたければしっかりreturnしないといけない
        }   
        log.Println("その制御から戻ってきてこのコードは実行されてしまう")
		return
	})
}

```
音声チャットボット開発に触れてみた

# はじめに
この記事はSLP KBIT Advent Calendar 2018 の21日目の記事です。
<https://qiita.com/advent-calendar/2018/slp_kbit>  

2018年10月6日(土)に行われたOSC香川にて、株式会社NTTドコモの山崎氏による講演で紹介された
AIエージェント開発基盤に興味を持ったので、良い機会と思って触ってみることにしました。

# 環境と事前準備
- __環境__
    - Windows 10
    - Google Chrome
- __準備物__
    - dアカウントまたはgoogleアカウント

# 概要

### Sebastienについて

株式会社NTTドコモが開発したAIエージェント開発基盤で、
エキスパートエージェントというメインエージェントから呼び出せる
各機能に特化したエージェントの開発ができるサービスです。

### 開発物概要
今回開発したのは、AIエージェント「ししょー」です。
このエージェントは、指定地域の当日の12時頃の天気と気温を返答する機能と、
単語を聞き取って、その単語のWikipedia記事を探す機能を持っています。
また、GUIのみで開発ができ、自分でコードを書くことなく作れるものになっています。
今回は、後述するDeveloper Dashboard上でテストを行う段階まで行いました。

# 開発

#### STEP1 アカウント登録
1. [Expert Agent Developer Dashboard](https://developers.sebastien.ai/)にアクセス
2. 下のページが表示されるので持っているアカウントでログインする
![ログイン画面.png](https://qiita-image-store.s3.amazonaws.com/0/307022/c6c6ac35-b8d8-8b0f-229f-12316351637b.png)

#### STEP2 ボットの開発
1. 下の画像のような画面になるため、Expert Agents → 作成中のボットまたは、新規作成の場合は+のボタンをクリックする
![ログイんごせんたく.png](https://qiita-image-store.s3.amazonaws.com/0/307022/35f0f9c2-9985-cc23-02f0-35b6b9294caf.png)
![エキスパート.png](https://qiita-image-store.s3.amazonaws.com/0/307022/ebe6b4e8-3fcd-3f8c-df84-db9be926e5c2.png)
2. ボットの基本情報として以下の1)~6)を入力、6は省略可
![基本の設定.png](https://qiita-image-store.s3.amazonaws.com/0/307022/2d6191bb-9724-ea32-b6c1-6fad8ce4ce27.png)
3. Intentを設定する  
Intentは予測されるユーザの発話を予め設定しておき、その設定にマッチした場合指定の動作を行うものです。 
設定するべき項目は以下の通りです。
    - Intent名:Intentの名称
    - 鍵となるユーザの発話:その内容にマッチする発話に対応してIntentが動作する
    - 動作終了メッセージ:動作の終了時、出力する
    - 動作:特定の返答を返すか、発話に含まれるEntityをCGSに送信
    - CGS名または返答内容:情報の送信先のCGS名か返答の内容を記述  
![Intent1.png](https://qiita-image-store.s3.amazonaws.com/0/307022/6bd07887-fe59-ffdf-dc0d-ccde7201f0f3.png)  

>CGSとは
CGSはあらかじめ用意されているシステムCGSとユーザが作成するオリジナルCGSがあり、いずれも、
Intentから送信された情報をもとに動作を行うものです。
>

今回は、システムCGSであるweatherBotとWikipediaBotを使用しました。
この様なCGSを利用する際、場所や時間など必ず送信しなければならない情報が存在します。  
この様な情報が抜け落ちている場合などに、その値に規定値をおくか、  
改めて入力を求めるかを設定するのが次のSlotsです。
![slots.png](https://qiita-image-store.s3.amazonaws.com/0/307022/82733cf6-5c64-2ee3-d152-6752cb7abb36.png)
Slotsは左上のRequiredのチェックがはいっているか否かで必要事項が変わります。
共通して名前が必要であり、Entityも必要とします。
最後にチェックが入っている、つまり情報を聞かなければいけない場合では、質問文を、
聞かなくてもいい場合は初期値を必要とします。

これらの設定が終われば、エージェントの__完成__です！

#### STEP3 テスト
作成した情報を保存したら、画面右下に現れる。赤白のチェックボタンをクリックすることで、動作テストをすることができます。
以下画像で、様子を紹介します。
![コンタクト.png](https://qiita-image-store.s3.amazonaws.com/0/307022/7b709d1d-97ab-a286-8f60-c9606e02cb37.png)
ユーザの発話、今回は、Botの呼び出しと天気のIntentの呼び出しをしようとしました。
このままではlocationのデータが足りていないため、Botからはどこなのかという返信が返ってきています。
この状態では、Intentを呼び出しておらず、Slotsも送信されていないので未判定と表示されています。
ここで、地域を送信すると
![あれ、.png](https://qiita-image-store.s3.amazonaws.com/0/307022/2842eab2-9c9d-f5ee-6c8c-886a7f6c2604.png)
あれ、天気の取得に失敗してしまったようです…
しかし動作自体が成立したのでBotが終了メッセージを告げて一連の動作が終了します。  

取得失敗の理由を調べていたのですが、分からないまま締め切りが来てしまいましたので、
正しく動作させることを今後の課題としていきたいと思います。

# 終わりに
今回Sebastienを使用してチャットボットを作ろうとしてみましたが、想像より簡単に自分の欲しいサポートツールを作ることができるということを学びました。結局今回は、完成しなかったのですが、きちんと理由を調べ上げて、完成させたいと思います。
また、今度はオリジナルCGSを作成、利用してBotを作成したいと思います。

# 参考資料
[SEBASTIEN Reference](https://docs.sebastien.ai)
[Sebastienでボットを喋らせて、Clovaとボット同士の会話をさせる](https://qiita.com/hiroka/items/1e034345d5be56c69a34)
【PostGIS】【SpatiaLite】WKTのPOLYGONの頂点を時計回りに記述して正しく動作するか

# 目的

WKT（Well-known text）ではPOLYGONの外側を構成する頂点は反時計回りに書くのがOGC標準で定められているとのこと（[WikipediaのWKTの記事](https://ja.wikipedia.org/wiki/Well-known_text)より）。
でも、常に反時計回りに頂点を書くのが大変なので、時計回りでも正しく動くか簡単に試してみた。

## 確認したバージョン

PostGIS 2.1.3、 SpatiaLite 4.3.0aで確認


# 方法

以下のSQLをPostGIS、SpatiaLiteで実行する。
`clockwise_intersects`、`counterclockwise_intersects`の両者がtrueに相当する値を返すことを期待する。

```sql
SELECT
	ST_Intersects(clockwise, point) AS clockwise_intersects,
	ST_Intersects(counterclockwise, point) AS counterclockwise_intersects
FROM
(
	SELECT
		ST_GeomFromText('POLYGON ((0 1, 1 1, 1 0, 0 0, 0 1))') AS clockwise,
		ST_GeomFromText('POLYGON ((0 1, 0 0, 1 0, 1 1, 0 1))') AS counterclockwise,
		ST_GeomFromText('POINT (0.5 0.5)') AS point
) AS t
;
```

# 結果

## PostGIS 2.1.3

```:出力
 clockwise_intersects | counterclockwise_intersects
----------------------+-----------------------------
 t                    | t
(1 行)

```

両者ともtrueが返された。期待通り！

## SpatiaLite 4.3.0a

```:出力
clockwise_intersects	counterclockwise_intersects
1	1
```

どちらもtrueに相当する1が返された。期待通り！

# まとめ

* WKTでPOLYGONを記述する際、外側の頂点を反時計回り、時計回りの両方で与えてみた。
* `ST_Intersects()`関数の引数とする限り、時計回り/反時計回りとも正しく動作した。
* 今後、正しく動作しないケースが見つかった場合はここでお知らせしたい。
PowerShell v2 で動くNode.jsのバージョンマネージャを作った

これは [PowerShell Advent Calendar 2018](https://qiita.com/advent-calendar/2018/powershell)の21日目の記事です。

# nvmp

clomie/nvmp: Node.js Version Manager running on Powershell v2
https://github.com/clomie/nvmp

Windows向けのPowerShell製Node.jsバージョンマネージャです。

特徴としては、

- **PowerShell v2** で動く
- 管理者権限を必要としない
- インターネットオプションに設定されたProxy設定を使って動作する

つまり、

- 使っているPCがWindows７
- `$PSVersionTable`を確認したら2.0だった
- アカウントに管理者権限がないのでPowerShellエンジンをアップデートできない

という状況でも使えます。

# インストール方法

[README](https://github.com/clomie/nvmp#installation)にある通りです。もちろん`git clone`ではなく、zipをダウンロードして解凍してもOKです。
`install.ps1`を実行すると`nvmp.cmd`へのPATHが通って使えるようになります。

```powershell:インストール方法
PS C:/git/nvmp> . .\install.ps1
```

# 使い方

インストールさえしてしまえば、コマンドプロンプトでも動きます。

![nvmp.gif](https://qiita-image-store.s3.amazonaws.com/0/26489/cbf61e2b-8c2f-3013-9c1e-471b22dc0b02.gif)


## コマンド一覧

その他のコマンドについてはヘルプを見てください。

```
> nvmp help
Node Version Manager by Powershell

Usage:
  nvmp help                       : Show this message
  nvmp install <version> [arch]   : Download and install the specified version of node.js.
                                    Optionally specify whether to install the "x86" or "x64" version (defaults to system arch).
  nvmp uninstall <version> [arch] : Uninstall the specified version of node.js
  nvmp use <version> [arch]       : Switch to use the specified version. Optionally specify x86/x64 architecture.
  nvmp current                    : Show current in-use version of node.js
  nvmp ls                         : List the node.js installations.
  nvmp ls-remote                  : List the installable versions

Example:
  nvmp install v10.9.0     : Install a specific version number of node.js
  nvmp install v10.9.0 x86 : Install a 32-bit version
  nvmp use v10.9.0         : Use the specific version
```

## インストール先のディレクトリ

`%USERPROFILE%\.nvmp\versions`ディレクトリにダウンロードしたzipを展開します。
`nvmp use`コマンドで選択したバージョンに対して、`%USERPROFILE%\.nvmp\current`ディレクトリからジャンクションを張ることでバージョン切り替えを実現しています。

```
%USERPROFILE%
  `- .nvmp
       +- current [-> .\versions\v10.14.2]
       `- versions
            +- v11.4.0
            +- v10.14.2
            +- v8.14.0
            `- v6.15.1
```

## 対応しているNode.jsのバージョン

v4.5.0〜v4.9.1, v6.2.1〜

`https://nodejs.org/dist/$(version)/node-$(version)-win-$(arch).zip`をダウンロードする都合上、それが用意されているバージョンだけに対応しています。バージョン一覧を見ていると、2016年6月あたりからWindows向けzipファイルも配布されるようになった模様です。

元々は`node.exe`を単体でダウンロードして、npmのアーカイブはgithubから別途ダウンロードする実装で、当時はもう少し古いバージョンにも対応していました。
現在は`codeload.github.com`がTLS1.2以外で接続できなくなってしまい、PowerShell v2では`System.net.WebClient`がTLS1.2に対応していないため、実装を見直した経緯があります。

# さいごに

動作検証できる環境にいる限りはメンテしていくつもりです。
今後は`latest`やLTSコードネームによるバージョン指定とかに対応していきたい。

また、2018年になってPowerShell Core 6.0もクロスプラットフォーム向けにリリースされたことですし、v2向けの実装は維持しつつ、最新のバージョンによる実装も試していきたいですね。
高専ロボコン、今年のロボコン、これからのロボコン、私のロボコン

# はじめに
どうも、電気情報工学科のForestと申します。初めてmarkdownをつかうのでなにかおかしくても生暖かい目で見ててだしあす。このアドベントカレンダーは情報系のことが多いなぁ。仕方ないかな。ということで今年のロボコンのことやこれからのロボコンについてをつらつらと語っていきたいと思います。12/16日のことは気にしないでください。台湾にいるときに気付いたんだ、許してくれ。疲れていたんだ。
# そもそもロボコンとは
自分が出たロボコンの正式名は「アイデア対決全国高等専門学校ロボットコンテスト」と呼ばれ、高専3大コンテストのひとつです。ちなみにもう二つは「プロコン」と「デザコン」です。毎年競技課題がかわり、それに合わせてロボットを作ります。この大会には、大きい賞として、ロボットのアイデアがすぐれており完成度の高いロボットに贈られる「ロボコン大賞」とトーナメントを勝ち抜いて全てのロボットの頂点となる「全国優勝」があります。ちなみに、ロボコニスト界隈では優勝よりも大賞の方が名誉だったりします(多分、少なくとも自分はそう思ってる)。今年のロボコンは、「ボトルフリップカフェ」というお題で、センシングを駆使した自動制御を使った自動ロボットと、手動ロボットの二台で設置されたテーブルにボトルを立てていき点数を競う競技でした。詳しくはググってみて。
# 呉高専の愉快なロボットたち
それでは今年に汗と涙と貴重な高校生活の夏休みをささげて作ったロボットたちの話でもしていきたいと思います。これは毎年なんですが、どの高専もAチームとBチームにわかれております。ちなみに自分は今年、Bチームでした。
### Aチーム(チーム名：Vic鳥)
![566991879.379479_Moment.jpg](https://qiita-image-store.s3.amazonaws.com/0/315919/302b4e06-1793-f4cf-1528-9e32522d4af7.jpeg)
はい、これが全国出場を果たしたロボットです。この子の特徴言えばなんといっても2.4mの高さにあるテーブルに驚異の16本を立てるというスゴ技をしてのけるロボットなのです。これは、点数に加算すると、80点となり今年の大会でも**トップクラスの得点力**を誇るロボットです。その様子は[こちらから(youtubeの動画です)](https://youtu.be/DTHkHpIL99g?t=4107)。見てもらっても分かりますけど、得点力がすごいです。しかしこの動画を見てもらった方はわかると思いますが、ロボットが一台しかいないやん、なんでや！キレそう。となる方もいるでしょう。安心してください。なんとこいつは**夢の合体ロボ**なんです。すごいでしょ。上のペットボトルをつかんでるほうが手動ロボット、下のタイヤがついているほうが自動ロボットです。自動ロボットは、ロータリーエンコーダを使った自己位置推定やLRF(laser range finder)と呼ばれるレーザー測距センサを使用してのテーブル検索などをしています。手動ロボットははしご車に使われるベルトと滑車を使った伸縮機構を積んでいます。しかしながら、この子は突然全国大会の予選で動かなくなるトラブルが発生。原因は直前の調整のミスでの重心バランス変化によるものだったらしいです。とても残念でした。自分のお気に入りポイントは、写真にもあるペンギンの「Vic鳥」です。ちなみにこの子はTwitterで活動してる絵師さんに擬人化してもらいました。リンク張っておくのでよろしければどうぞ。(https://twitter.com/d56_daigorou/status/1056208774644424704)
![eb4395e1fe11df91f158051d81ebd5a2-1024x768.jpg](https://qiita-image-store.s3.amazonaws.com/0/315919/b0ef3d74-7082-ab2f-62c8-9bf55845b9df.jpeg)
全国大会でのテストランでの80点成功の様子

### Bチーム(チーム名：Rebloom)
![20987.jpg](https://qiita-image-store.s3.amazonaws.com/0/315919/151e681e-49b3-5ce7-b7ed-cd5c744abdb4.jpeg)
ｶﾜ(・∀・)ｲｲ!! ﾔｯﾀﾈ
やってまいりました我らがBチーム。
うちの特徴と言ったらなんといっても回転する腕です。人の腕に近づけることでより確率良くたたせれるのではと思い制作しました。が、これが地獄の始まりだったのである。初めの試作段階ではかなりいい成績を出してくれたのでこれはいいのではとなり本番の腕の制作そして実験に入りました。夏休みを使ってそれぞれのテーブルのパラメータをとっていました。しかしながら夏休み終盤、突如として今までのパラメータが使えなくなる悲劇が発生。ちょこちょこ腕の仕様変更があったのでそれのせいかと元に戻してもパラメータは戻らず、電源の電圧も確認しながらやってみたが効果なし。本当に、これは原因不明でした。さらに、腕の制御のかなめであるロータリーエンコーダの値が手動ロボットの方だけ突然飛んでしまうバグも発生。これはプログラム側のミスでなく回路側からノイズらしきものが信号線に入ってきていると検証をして分かったのだが、そもそも腕もまわりは自動機も手動機も同じものを使っているのになぜか手動機でしか現れないし、ノイズの発生源と思われるモータドライバを取り換えても発生する始末でこれも未解決のままでした。そして、大会前日のテストランでまたしてもパラメータが消える事態が発生。結局何もできないまま地区大会は予選で負けてしまいました。
#今年のまとめとこれから
A、Bを通してみると結局本番当日に自分の力を発揮できずに負けてしまうという事態でした。このことは、しっかりと重く受け止めていかなければならないと思うところであります。来年からも自動制御という課題は続くそうです。自動制御といっても自分にもこの部活にもまったくもってノウハウがない未知の世界です。これからの世界はAIなどを使ったロボットの自動制御などをする機会が増えてきているいま、しっかりとこのロボコンで技術を身に着けれたらと思います。さて、話は変わりますが自分は自動制御を学ぶ傍ら四輪独立ステアリングという特殊な足回りを開発しています。この話は今度の技術LTで話したいと思っているのでぜひ来てください。とてもロマンのある足回りを皆さんに見せれたらと思っています。お楽しみに。ここまで見てくださりありがとうございました。
webRTCがipadなら繋がるのにiphoneでは繋がらない時の対処法

JavaScriptでwebRTCの`getUserMedia`のコードをコピペしてipadで正常に挙動するのにiphoneではアクセス許可しているのにも関わらず、画面が真っ黒になって`getUserMedia`が渡っていない現象が出て暫く躓いたので対処法のメモ。

```
$(function() {
	navigator.mediaDevices = navigator.mediaDevices || ((navigator.mozGetUserMedia || navigator.webkitGetUserMedia) ? {
   getUserMedia: function(c) {
     return new Promise(function(y, n) {
       (navigator.mozGetUserMedia ||
        navigator.webkitGetUserMedia).call(navigator, c, y, n);
     });
	}
	} : null);
	if (!navigator.mediaDevices) {
	  alert("getUserMedia() not supported.");
	  return;
	} else {
		console.log("success")
	}
	
	var constraints = { audio: false, video: { 
						facingMode: 'environment' 
							}
					};
	navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
	  video = document.getElementById('camera');
	  video.srcObject = stream;
	}).catch(function(err) {
	  console.log(err.name + ": " + err.message);
	});
```

```html
   <video id="camera" autoplay　playsinline="true"></video>
```

`autoplay`の後に`playsinline="true"`を付け加えるだけでOK。
`playsinline`属性がないとiPhoneでは動かないらしい。

＜参考サイト＞
https://qiita.com/tomoyukilabs/items/cb9dd1d3e7eb0cc7f58a
【VR学まとめ】3.4 入力と出力のループ

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の15日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の3章「バーチャルリアリティ・インターフェース」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 3 バーチャルリアリティ・インターフェース

## 3.4 入力と出力のループ

- 入力を処理して出力するまでをリアルタイムに回す必要がある
- 更新周波数
    - センサが毎秒何回データ取得できるか
    - ディスプレイが毎秒何回表示を切り替えられるか
    - 人間は10Hz以上で更新される画像を動画として認識する
    - 深部感覚の力覚刺激は視覚より高速な1000Hz以上が望ましい
- 遅れ(ディレイ)
    - 人間が刺激を受けてから行動に起こすまでの時間が0.2s

# まとめ

人間が知覚するための具体的な数値を知ることが出来ました。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の16日目は[【VR学まとめ】4.1 総論](https://qiita.com/nkjzm/items/be67688ec1969c7bfd65)です。
【VR学まとめ】3.3 出力インターフェース

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の14日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の3章「バーチャルリアリティ・インターフェース」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 3 バーチャルリアリティ・インターフェース

## 3.3 出力インターフェース

- 感覚モダリティ毎に分類できる
- 人間の感覚受容器に人工的な刺激として与える

### 3.3.1 視覚ディスプレイ

- 立体視
    - 2眼式
        - 左右の目の映像を別々に用意する
        - スクリーンの映像を液晶シャッターメガネで分離する方式
        - 偏光メガネで分離する方式
        - パララックスバリア方式
            - スクリーンのスリットで分離する
            - メガネを掛ける必要がない
        - 頭部搭載型ディスプレイ
            - Head Mounted Display: HMD
        - 頭部搭載型プロジェクター
    - 体積走査型
        - 3次元空間の対応する点を発光させる方式
        - LEDアレイ走査型
        - 回転スクリーン式
        - プラズマ発光させる方式
- 没入ディスプレイ
    - 大型平面スクリーン
    - 多面体スクリーン
    - 曲面スクリーン

### 3.3.2 聴覚ディスプレイ

- 立体角分割法
    - ステレオの多チャンネル版
- 音像定位伝達関数合成法
    - バイノーラル再生
        - ヘッドフォン
    - トランスオーラル再生
        - 室内の複数のスピーカー
        - クロストークをキャンセルする必要がある
        - 室伝達関数
        - 頭部伝達関数
- 音場直接合成法
    - スピーカーアレイ
    - すべての場所の3次元音空間を作る
    - キルヒホッフの積分公式
    - 波紋合成法
  

### 3.3.3 前庭感覚ディスプレイ

- 加速度
    - 過渡的成分
        - アクチュエータ
    - 定常的成分
        - 重力の分力成分
- ウォッシュアウト
    - アクチュエータの動作限界を超えないようにする減速動作
- ウォッシュバック
    - こっそり場所を戻すこと

### 3.3.4 味覚ディスプレイ

- 基本五味の組み合わせである程度表現できる
- ストローなどで液体を舌に滴下する
- 衛生管理は必須

### 3.3.5 嗅覚ディスプレイ

- 基本の匂いは見つかっていない
- 拡散と排気が必要

### 3.3.6 体性感覚ディスプレイ

- ハプティックインターフェース
    - 皮膚感覚提示装置
        - 振動子や空気圧、電気刺激
            - 2点弁別閾が大きい場所
        - ピンアレイ方式、空気圧ノズルアレイ
            - 2点弁別閾が小さい場所
            - 圧迫と吸引は区別されない
    - 力覚提示装置
        - 深部感覚を刺激
        - 装着型
            - 多関節マニピュレータ
        - 把持型
            - ペンやボールを握る
        - 対象型

# 3.3.7 他の感覚との複合

- 複数の刺激を提示すると感覚が増す
- 空間的時間的な整合性が必要

### 3.3.8 神経系への直接刺激

- 物理刺激がなくても感覚を生起させることが原理的には可能
- 神経を直接刺激するもの
    - 人工内耳
- 引くに電極を貼り付ける方式
    - 歩行動作を作り出すなど

# まとめ

埋め込む系のディスプレイいくつかあるのすごい、やってみたいですね。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の15日目は[【VR学まとめ】3.4 入力と出力のループ](https://qiita.com/nkjzm/items/076f0fcbf74c6e2213a3)です。
正しさとGo

## はじめに

Goの良いところは、最低限の文法を知っていればコードを上から順番に読むことで詳細を容易に理解できることです。
文法の中にシンタックスシュガーや特別な省略が許されていないため多様な表現になることはありません。

そのためGoを書ければGoの本体と標準ライブラリを読むことができます。

しかし以下の原因により、これらの利点を守ることが難しくなることがあります。

- DSL
- フレームワーク
- 抽象化

これらは設計として新たな制約を課すことで品質向上や実装を容易にするためのものです。
またこれらを採用する論理立てた **正しい** 理由が存在します。

### DSL
DSLを提供するツールとして、DIのための `wire` があります。

GoでDIを実現するためには多くの実装を必要とするため、実装量を減らすためにもDIツールが求められてきました。

これは **正しい** です。

しかし一方でDSLはコードを読む人間に言語以上の知識を求めます。
また詳細な挙動をすべて理解して追うことは難しいです。恐らく `wire` の内部実装をすべて理解して利用している人は少ないでしょう。

### フレームワーク
Goの `net/http`パッケージは一般的なWebフレームワークに比べて機能が少ないためコードが冗長になります。
そのためWebフレームワークが求められてきました。

これは **正しい** です。

しかし一方でWebフレームワークはコードを読む人間に言語以上の知識を求めます。
ときには標準ライブラリのnet/httpとの接続が難しくなることもあります。
また詳細な挙動をすべて理解して追うことは難しいです。恐らく `gin` や `echo` などの内部実装をすべて理解して利用している人は少ないでしょう。

Webフレームワーク以外にもORマッパーやテスト用のアサーションツールなども同様です。


### 抽象化
テスタビリティやSOLID原則のために抽象化することがあります。
Clean ArchitectureのInput Port、Output PortやDDDのレイヤードアーキテクチャのRepositoryなどもこれに該当します。

これは **正しい** です。

しかし一方で抽象化は本質的なロジック以外のコードが増え、コードの可読性を落とすことがあります。
またどうしても完全な動作を理解しようとしたときは抽象化された先の実装を追う必要がでてきます。

## 正しさと悪

これらの制約の **正しさ** は、正しいため反論をすることは難しいです。
またDSL、フレームワーク、抽象化もGoで実装されているため勉強して理解しないことを **悪** とすることが簡単にできます。

しかしこれには毅然として立ち向かう必要があります。

## 正しさとGo

私は、Goは制約の代わりに読みやすさでコード品質を担保することに比重をおいた言語だと考えています。

例えばJavaでは、検査例外により呼び出し側にエラーハンドリングをしなければいけないという制約を課しました。
Goでは必ずerrorを返すだけです。それを `_` で捨てることや受けないこともできてしまうため制約がとても弱いです。しかしほとんどの場合はコードレビューで気がつくことができます。

これだけを聞くと、**「コードレビューは見逃す可能性があるのだから、正しく設計をすることでコンパイル時に気がつけるようにするべきだ」** となり、**Goの姿勢はエンジニアとして正しくない**ように感じます。
そのため他の言語を主軸に置いている人からの批判がGoではどうしても多くなりがちです。

しかし正しさを求めることは **制約の代わりに読みやすさでコード品質を担保する** ということから離れていくことでもあります。

これらを両立してコーディングしていくことがGoを書く上では、他の言語以上に大切になります。

## フレームワークを採用しないことが正しいのか

では、フレームワークを採用しないことが正しいのでしょうか？

以下の場合は採用すべきです。

- 学ぶ範囲を適切に絞れているツールである
- ツールの価値が学習コスト以上にある
- 適切な代替手段がない

```
GRPCは、Protocol Buffersで記述したルールに基づきコードが生成されます。このルールを覚えることは容易です。
またMicroservicesの文脈では、GRPC前提であることが多いため適切な代替手段がありません。

そのため採用するべきです。
```

と言うことはできますが、他のWebフレームワークなどでも同様の **正しさ** を主張することは可能でしょう。

そのため状況と程度の問題であり、最終的にはアーキテクトのセンスに委ねられます。


## まとめ
あるGo本体に近いレイヤーでコードを書いている人から、この **正しさ** を嫌う意見を聞いたことが、この話を考え始めたきっかけです。
逆に他の言語でWebアプリケーションを書いてきた方は、この **正しさ** を好む傾向にあると思います。
私はどちらの意見も間違ってはいないと思います。

ただしインターネット上にはこの **正しさ** が溢れており、新しい技術や目の前の課題を解決してくれるツールは素晴らしく見えます。
そこで新しいツールを導入する際には、一度立ち止まりGoとはこのような言語であったということを思い出し、課題設定が正しいかを改めて考え直してみてください。

それを踏まえてプロダクトと組織のことを考え、長期的に負債を生まないように適切な解決手段を提案しなければなりません。

これらのバランスを考え技術選定できることがアーキテクトの実力の見せ所であり、本当のスキルではないでしょうか。
Chart.jsで線グラフで縦棒を書く方法

```html:index.html
<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title>chartjs-plugin-annotation sandbox</title>
<script src='https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.bundle.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-annotation/0.5.7/chartjs-plugin-annotation.min.js'></script>
<script src='https://cdn.rawgit.com/chartjs/Chart.js/master/samples/utils.js'></script>  
</head>

<body>


  <div style="width: 75%">
    <canvas id="canvas"></canvas>
  </div>


  

<script>
var chartData = {
  labels: ["11月30日 12:00", 
    "11月30日 15:00", 
    "12月1日 00:00", 
    "12月1日 03:00", 
    "12月1日 06:00", 
    "12月1日 09:00", 
    "12月1日 12:00", 
    "12月1日 15:00", 
    "12月1日 18:00", 
    "12月1日 21:00", 
    "12月2日 00:00", 
    "12月2日 03:00"],
  datasets: [
    {
      data: [1008, 1008, 1004, 1006, 1004, 1002, 996, 992, 990, 975, 970, 955]
    }
  ]
};

var options = {
      annotation: {
        annotations: [
          {
            type: "line",
            mode: "vertical",
            scaleID: "x-axis-0",
            value: "11月30日 15:00",
            borderColor: "blue",
            label: {
              content: "1008",
              enabled: true,
              position: "top"
            }
          }
        ]
      }
    };

function main()
{
  var ctx = document.getElementById("canvas").getContext("2d");
  new Chart(ctx, {
    type: "line",
    data: chartData,
    options: options,
  });
}
main();
</script>



</body>

</html>


```
にわかに流行中な「徐々にHover効果」を実装する

通常の**ホバー**は、「オン」と「オフ」のタイミングでのみアクションしますが、
ポインティングデバイス（と要素と）の距離や角度を監視すると、漸進的なマイクロインタラクションを作ることができます。

こういった機能自体は、割と昔からさりげなく使われていたりするかと思いますが、
今回は手軽に使えるように、_proxemics_という名のlibraryを作成しました。

> https://github.com/pokkur/proxemics

## ポインターが画面左端に近づくほどサイドバーが引き出される

![sidebar.gif](https://qiita-image-store.s3.amazonaws.com/0/34660/550f4ad4-4865-f4c3-0936-26915bd31525.gif)

<p data-height="300" data-theme-id="34631" data-slug-hash="ZMVNNZ" data-default-tab="css,result" data-user="pokkur" data-pen-title="Progressive Hover Effect Demo 03" class="codepen">See the Pen <a href="https://codepen.io/pokkur/pen/ZMVNNZ/">Progressive Hover Effect Demo 03</a> by pokkur (<a href="https://codepen.io/pokkur">@pokkur</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

```javascript
Proxemics('.side-bar', {
    territory: 0 // ポインターを検知するテリトリー（半径）
}, (_, Styles) => {
    // 水平距離でのみアクションさせるための変数
    const distanceX = _.distance * Math.max(0, Math.cos(_.radian))
    Styles({
        // サイドバーの横幅（33px）プラス若干分までポインターが水平に接近した時に、サイドバーを全開にさせたい
        transform: `translate(${Math.min(-distanceX + 50, 0)}px, 0)`
    })
})
```

## タイル・ギャラリーのフォーカス表現

![tile4.gif](https://qiita-image-store.s3.amazonaws.com/0/34660/6a459b5e-3f54-876e-f11e-a4d1a6454c2d.gif)

<p data-height="300" data-theme-id="34631" data-slug-hash="MqjOrY" data-default-tab="html,result" data-user="pokkur" data-pen-title="Progressive Hover Effect Demo 01" class="codepen">See the Pen <a href="https://codepen.io/pokkur/pen/MqjOrY/">Progressive Hover Effect Demo 01</a> by pokkur (<a href="https://codepen.io/pokkur">@pokkur</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

```javascript
Proxemics('.prox', {
    territory: 100
}, (_, Styles) => {
    // 対象要素の彩度をポインター距離でコントロール
    Styles({ filter: `saturate(${Math.max(1 - _.distance * .01, 0)})` })

    // ポインターが一定の範囲に近づいた時に、画像の拡大率を変化させる
    const Images = _.el.querySelectorAll('img')
    Array.prototype.forEach.call(Images, (Image) => {
        Image.style.transform = `scale(${Math.max(1, (1 - _.distance * .001) + .2)})`
    })
})
```

## その他色々

> [https://pokkur.github.io/proxemics/](https://pokkur.github.io/proxemics/)

「徐々にHover効果」の使用範囲は当然デスクトップデバイスに限られてしまいますが、
アイデア次第で「わかりやすさ」、「つかいやすさ」などのUX向上を狙える新しめのアプローチのひとつです。
proxemicsをご利用の上、ぜひお試しください〜。
Powershell製ビルドツール Invoke-Build (for 事務屋さん)

この記事は、Powershell Advent Calendar 2018 12/20 の記事です(書いたのは21日ですが気にしないでください)。

# 要点

* 日々の事務作業の中で作成しなくてはいけない大量の Excelファイルに嫌気がさしていた。
* 社内で新しいソフトの導入とかはご法度である中、Powershell はユーザー権限で使ってよしという許可を得た。
* 最初はスクリプト作成で満足していたが、作業同士の依存関係を記述できるようなツールとして Invoke-Build を導入。

# 本文

事務屋さんとして主に「[PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい](https://qiita.com/miyamiya/items/161372111b68bad0744a)」を参考にして xlsxファイルを量産していたわけですが、月次資料の作成とか同じデータからいろんな種類のレポートを作成していて、

「ファイルAを作成するときは、元データとしてBを参照する。もしBが無ければ作る。Aが作成済でもBのタイムスタンプがAより新しければAを更新」

とかいった作業も自動化したくなってきました。

 当初は、[psake](https://github.com/psake/psake) をいじくりましていたのですが、psake では、作業同士の依存関係を記述できない模様。
 ほかに手段はと探していたところ、Invoke-Build に行きあたりました。

公式サイトはこちら。
https://github.com/nightroman/Invoke-Build

## 導入方法

```powershell
Install-Module InvokeBuild
```

で一発!! ……と言いたいところだったんですが、当初は社内PCのPowershellが2.0だったため、メインとなる Invoke-Build.ps1 だけをコピーしてきて使ってました。(今は社内PCもWin10になりましたが、Install-Module を動かすには一手間必要だった)

## 使い方

.build.ps1 というスクリプトに、

```powershell
task 'レポート作成' {
    New-SugoiReport -Path (Convert-Path .)
}
```

といった感じでタスクを書き連ねていき

```powershell
Invoke-Build レポート作成
```

でタスクを実行できます。

入力ファイルと出力ファイルは、

```powershell

$dir = (Convert-Path .)
$input  = Join-Path $dir 元データ.csv
$output = Join-Path $dir レポート.xlsx
# Synopsis: 月次レポートを作成します。
task 'レポート作成' -Inputs $input -Outputs $output {
    New-SugoiReport -Inputs $input -Outputs $output
}
```

といった感じで記述します。

* タスク名がそのまま出力ファイル名、といった仕組みはありません。Inputs は配列でも可ですが、Outputs を配列にすることはできません。
* 出力ファイルが存在しないか、入力ファイルが出力ファイルより新しければタスクが動きます(タイムスタンプで判断)。

タスク同士の依存関係は

```powershell

task '元データ作成' {
   New-MotoData
}

$dir = (Convert-Path .)
$input  = Join-Path $dir 元データ.csv
$output = Join-Path $dir レポート.xlsx
task 'レポート作成' -Inputs $input -Outputs $output '元データ作成', {
    New-SugoiReport -Inputs $input -Outputs $output
}
```

こんな感じです。これで「レポート作成」を実行すると「元データ作成」も呼び出されます。

タスクの記法は

```powershell

$dir = (Convert-Path .)
$input  = Join-Path $dir 元データ.csv
$output = Join-Path $dir レポート.xlsx
task 'レポート作成' @{
    Inputs  = $input
    Outputs = $output
    Jobs    = { New-SugoiReport -Inputs $input -Outputs $output }
}
```

とかでも可です([splatting](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_splatting)というやつですね)。

.build.ps1 のあるフォルダで

```
Invoke-Build ?
```

とすれば定義されているタスクが全て表示されます(Synopsisが定義してあればいっしょに出力されます)。

# その他

* MSBuild との連携機能とかもあるみたいなんですが、事務作業にしか使っていないのでその辺のことはよく分かりません。
* ~~タスクの中からInputsとOutputsを取得することができない(と思う)。これができればビルドスクリプトがもう少しスッキリすると思うんだけど。~~
* 追記 2019/2/6 すいませんードキュメント改めて読んでみたら、タスクの中から \$inputs と \$outputs で依存ファイル名と出力ファイル名取得できたわー。ずっと気付かんかったー。何でできないと思いこんだんだろ……。
音楽という教科を考えてみた

# 私が学校の授業に音楽が「必要」と思う理由
##はじめに
学校の教科に音楽があることに疑問を持っている方、多いんじゃないでしょうか。
朝礼で歌うくらいで良いんじゃないの・・・・確かに・・・・
音楽って、生きて行くのに要る？　そう思う方もいらっしゃるでしょう。　
ですので、これは私が「必要」という思いに至った流れですが、一緒に考えて頂けたら嬉しいです。

##自由７科　
【自由七科（読み）じゆうしちか（英語表記）artes liberales; liberal arts】ってブリタニカにあります。
「リベラル・アーツ」（liberal arts）って言葉、耳にされたことはありませんか？
「人を自由にする学問」という事なのですが、古代ギリシアの，肉体労働から解放された自由人にふさわしい教養をというところが元になります。
マルクス・トゥッリウス・キケロっていう【Marcus Tullius Cicero】（前106～前43） 古代ローマの政治家・雄弁家・哲学者。博学で多才で、その上、雄弁な有名人である彼が、「自由学科」として、７つの科目に限定してこう呼んだのが始まりだそうです。　
7科目は文法・修辞学・弁証法の３学と算術・幾何学・天文学・音楽の４科からなります。　時代の中で、同じ科目でありながらとらえ方が変わってきたようですが、中世の西欧において、必須の教養科目として学ばれてきました。

##六芸
西欧の「自由７科」に対し、中国の六芸(りくげい）「礼、楽、射、御、書、数」というのがありあます。　孔子が論語の中で「子曰く、道に志し、徳に拠り、仁に依り、芸に遊ぶ。」の「芸」は、この「六芸」の事です。　

「礼」は礼儀正しいこと、「楽」は音楽のこと、「射」は弓を射ること、「御」は馬を御すること、「書」は文学、書のこと、「数」は算術を言います。　
特に音楽は楽奏、詩歌、舞踏が含まれます。　

##共通する「音楽」
「自由７科」と「六芸」、どちらも身分のある人が教養としてたしなむものとして「音楽」と「数学」を挙げています。
「音楽」は、西洋、東洋、古代、現代と時代も問わずにあって、「詩歌・舞踏・楽器演奏」と範囲が広く実技についても、形式の違いや変化はありますが、共通して音楽の一部とされてきたことです。　　

更に興味深いのは、「音楽」という科目が学問としても論理的であるという点です。　西洋では数学者ピュタゴラスが、音程が単純な周波数比で成り立っていることを発見して、後世のプラトンや哲学者や天文学者などにも影響を与えました。　自然の創造物や現象を数学的に考察するというものです。　この時代の音楽とは、調和（ハルモニア）の理論であり、調律によって音が協和するように、肉体と精神を調和させることが人間形成において必要だとしています。　この考えが歴史的にある国、地域では「音楽療法」についても医療として現代において受け入れられているのでしょう。　日本でそうならないのは、こうした歴史的な背景が理由かもしれません。　
学校の授業で「肉体と精神を調和」・・・・他の教科には無いメリットです。　体育もそうなのでしょう。

話は教育に戻りますが、こうした歴史から、教育に「音楽」があることは、とても自然なことだと思うのです。　時代に合った形で、過去そうあったように残していくものではないでしょうか。　この西洋、東洋、問わずにある「数学」と「音楽」はコミュニケーション・ツールとしてもきっと活用しやすいはずです。

##楽器演奏は、脳の発達に関係がありそう

楽器を演奏することで思考能力が高まったり、老化を遅らせたり認知症を予防したりできることが最近の脳科学の研究で明らかになっています。　fMRI (functional magnetic resonance imaging) という技術によって、脳への血流動態反応をリアルタイムで観察できるようになりました。　それによれば　楽器演奏時の脳は、脳が全身運動している状態のように活動し、Visual(視覚)・Auditory(聴覚)・Motor(筋肉運動)に関する脳領域が特に活発になることが分かっています。　特に情報伝達が活発にすることによって右脳と左脳をつなぐ脳梁が鍛えられて、双方の役割をスムーズに行えるようにするのだそうです。
【出典】TED-Ed 楽器演奏は脳にどのような効果をもたらすかAnita Collins

ということは、右脳と左脳の役割として、論理的な思考を担当する左脳が行い、創作活動は右脳が行うとされていますが、「音楽」が数学的思考と芸術的直観と切り離せないものであるということから、この脳の活動は古代からの研究と合致していて、すっきりと納得が行く結果だと思いました。

そうであるなら、「楽器演奏」は子ども達にもっとしてもらいたいし、大人もした方が良さそうではありませんか！！！

##　「音楽」「楽器演奏」は既に遺伝子に・・・・
人類は何時から「音楽」「楽器演奏」を知ったのでしょう？
確実に最古の笛と考えられているものはドイツ、ウルム近郊の洞窟から出てきた骨の笛で約36000年前のものであり、現生人類が使用したと考えられているそうです。出典：ウィキペディア
こんなに昔から、人類は楽器を手にしていたのですから、もう楽器演奏、音楽は遺伝子のとても深いところで生き続けてきたということです。　

余談ですが、最近まで私は、漢字の「楽器」が「楽しい器（うつわ）」だからなのだと思っていたのですが、実は「楽しい」の「楽」は楽器を意味する象形文字が源であり、楽器を演奏する時の感情・状態から「たのしい」に「楽」を充てたことを知りました。
つまり、楽器を奏でる気持ちが「たのしい」を表現していたという事になるのですね。

楽器を演奏しなければ、人生の楽しさが解らないのかも・・・・となれば、「音楽」は必要な教科であると私は思った次第です。

#参考情報
リベラルアーツ:[https://ja.wikipedia.org/wiki/リベラルアーツ]
自由７科:[https://kotobank.jp/word/自由７科-77024]
六芸:[https://ja.wikipedia.org/wiki/六芸]
六芸:[https://kotobank.jp/word/六芸-148513]
修辞学:[https://ja.wikipedia.org/wiki/修辞学]
ピュタゴラス音律:[https://ja.wikipedia.org/wiki/ピュタゴラス音律]
音楽と数学:[https://ja.wikipedia.org/wiki/音楽と数学]
16・17世紀のイタリアにおける数学的音楽理論の展開―協和音とその知覚の問題を中心に―大愛 崇晴:[http://www.l.u-tokyo.ac.jp/postgraduate/database/2009/688.html]
TED-Ed 楽器演奏は脳にどのような効果をもたらすかAnita Collins:[https://www.ted.com/talks/anita_collins_how_playing_an_instrument_benefits_your_brain/transcript?language=ja]
fMRI:[https://ja.wikipedia.org/wiki/FMRI]
古代音楽:[https://ja.wikipedia.org/wiki/古代音楽]
【VR学まとめ】3.2 入力インターフェース

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の13日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の3章「バーチャルリアリティ・インターフェース」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 3 バーチャルリアリティ・インターフェース

## 3.2 入力インターフェース

### 3.2.1 物理的特性の計測

#### (1) 位置姿勢と回転角度

- モーションキャプチャ
    - 姿勢計測を行う装置
    - 機械式モーションキャプチャ
        - 角度を計測する
        - ゴリオメータ
            - 外骨格のようなフレームを取り付ける
            - 動きを制約する
        - 人体モデル
            - 関節構造とセンサ位置関係をモデル化したもの
            - ジャイロスコープ
                - 積分誤差
                - ドリフト誤差
            - 加速度センサ
                - MEMS技術
                - 積分誤差
            - 超音波式
            - 磁気式
                - 周囲の金属の影響は避けられない
    - 光学式モーションキャプチャ
        - マーカ式
            - パッシブ型
                - 再帰性反射素材
            - アクティブ型
                - 赤外線LEDが内蔵
        - マーカレス方式

![JPEG image-C02BA673AD81-2.jpeg](https://qiita-image-store.s3.amazonaws.com/0/55365/ef345573-5c59-8fc9-2fbb-4ac1203f52fe.jpeg)
引用元: [バーチャルリアリティ学](https://www.amazon.co.jp/%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%AA%E3%82%A2%E3%83%AA%E3%83%86%E3%82%A3%E5%AD%A6-%E8%88%98-%E6%9A%B2/dp/4904490053)

#### (2) 顔の表情と視線

- 表情
    - 光学式測定
        - 顔中にマーカを配置
    - 特徴点マッチング
- 視線
    - インターフェースとしても利用できる
    - 強膜反射法
        - 角膜(黒目)と強膜(白目)の反射率の違いを利用
    - 角膜反射法
        - 角膜の曲率中心と眼球の回転中心が異なることを利用
    - サーチコイル法
        - コイルを埋め込んだコンタクトレンズを計測
    - EOG法
        - 電位差を計測

### 3.2.2 生理的特性の計測

- 整理指標
    - 心電図(ECG)
    - 精神性発汗
- 筋電図(EMG)
    - 運動の原因である筋肉の活動を計測
    - 針電極を用いた方法
    - 表面筋電図
        - 皮膚上の電極を貼付する
- 脳活動
    - 侵襲計測
        - 脳に針電極を指す
    - 非侵襲計測
        - 脳表面に電極を置き直接ダメージを与えない
    - 脳波(EEG)
    - 脳磁図(MEG)
        - シールドされた部屋で計測する必要あり
    - 機能的核磁気共鳴画像法(fMEI)
        - Bloodという血流量の増加に伴う脳の局所の酸素濃度変化を計測する
        - 金属を近づけられない
    - NIRS
        - 脳活動に伴う血流量の変化
        - VRの評価手法として注目されている
    - PET
        - 体内にトレーサを投与して計測

### 3.2.3 心理的特性の計測

- BMI
    - Brain-Machine Interface
    - 考えただけで操作できる
    - P300

# まとめ

色んな方法で入力をするアプローチが分かりました。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の14日目は[【VR学まとめ】3.3 出力インターフェース](https://qiita.com/nkjzm/items/072aa4c422ef1bdfdbaf)です。
【VR学まとめ】3.1 バーチャルリアリティ・インタフェースの体系

# はじめに

この記事は[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の12日目の記事です。

[バーチャルリアリティ学](https://www.amazon.co.jp/バーチャルリアリティ学-舘-暲/dp/4904490053)の3章「バーチャルリアリティ・インターフェース」の内容をまとめていきます。
書籍の方も是非ご購入いただいた上でご利用ください。

# 3 バーチャルリアリティ・インターフェース

## 3.1 バーチャルリアリティ・インターフェースの体系

- 入出力インターフェース
    - 相互作用する際に接する部分
- 入力インターフェース
    - 認識エンジン
- 出力インターフェース
    - ディスプレイ

| | ハードウェア | ソフトウェア | 
| --- | --- | --- | 
| 入力インターフェース | センサ | 認識エンジン |
| 出力インターフェース | ディスプレイ | ディスプレイドライバ |

- 物理的特性
    - 身体形状や運動
    - 表情や視線も含まれる
- 生理的特性
    - 生体電気信号など
- 心理的特性
    - 質問紙やプロトコル分析が該当するが、センサではない
    - バーチャルリアリティ・インターフェースにおいての観点では、脳活動など
- 社会的特性
    - 本項では除外

# まとめ

インターフェースの種類について整理出来ました。

[一人VR技術者認定試験 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/vr-engineer)の13日目は[【VR学まとめ】3.2 入力インターフェース](https://qiita.com/nkjzm/items/0648f0a7b800cbc6fd2e)です。
メモ:Google Cloud PlatformのGCEがエフェメラル設定の場合に外部IPを取得するコマンド


- gcp(google cloud platform)のGCE（Google Cloud Engine）を、固定IPではなくエフェメラルで使う場合、グローバルIPは起動毎に変わってしまう。
- なので、sshでログインするときや、CiecleCIからansibleを走らせるといった時には、gcloudコマンドでIPアドレスを取得する必要がある。そういった時に、以下のようなコマンドで一発でIPアドレスだけ取れる。
- gcloudコマンドが使えて、login設定済みであること、[jq](https://stedolan.github.io/jq/)が使えることが前提である。

```:command
$ gcloud compute  instances list --filter="name=('server01')" --format=json | jq .[0].networkInterfaces[0].accessConfigs[0].natIP -r
```

- もっと簡単な方法があるかもしれないが、とりあえずこれで取れたのでましな方法が見つかったら更新する。
新 App Store 審査ガイドライン 翻訳&差分ガイド 2018年12月号

# はじめに

これは2018年12月19日付けで変更された App Store 審査ガイドラインの翻訳&差分ガイドです。

[前回](https://qiita.com/midnightSuyama/items/d1addebbc9a620d28eaa)からの主な変更点は、課金アイテムの扱いだけです。

これまで、課金アイテムのプレゼントは明示的に禁止されていましたが、今後は解放されるようです。

あと、これは私も今回初めて気づいたのですが、`SafariViewController` を `SafariViewContoller` とタイポし続けていたようで、5.1.1 (vii) のタイポは2年3ヶ月経過してようやく修正されました。(新規追加された[2016年9月](https://qiita.com/midnightSuyama/items/943b5a9e0af464a6a735)の時点では 5.1.1 (iv) が該当)

# 修正項目

## 3.1.1 In-App Purchase:

### ● 課金アイテムのプレゼントが可能。プレゼントの換金は不可。

> Apps may enable gifting of items that are eligible for in-app purchase to others. Such gifts may only be refunded to the original purchaser and may not be exchanged.

全文変更。プレゼント不可からプレゼント可能に方針変更。

### ● 非サブスクリプションアプリは非消耗型アイテム (Tier 0) で試用期間の提供が可能。事前に試用期間後の制限や価格を明示。

> Non-subscription apps may offer a free time-based trial period before presenting a full unlock option by setting up a Non-Consumable IAP item at Price Tier 0 that follows the naming convention: “XX-day Trial.” Prior to the start of the trial, your app must clearly identify its duration, the content or services that will no longer be accessible when the trial ends, and any downstream charges the user would need to pay for full functionality. Learn more about managing content access and the duration of the trial period using Receipts and Device Check.

`14-day` から `XX-day` に変更。

表記例が変わっただけ。

## 5.1.1 Data Collection and Storage

### (vii) SafariViewController の表示を隠すことや事前同意のない追跡は不可。

> SafariViewController must be used to visibly present information to users; the controller may not be hidden or obscured by other views or layers. Additionally, an app may not use SafariViewController to track users without their knowledge and consent.

`SafariViewContoller` から `SafariViewController` に変更。

タイポの修正だけ。
MessagePackのバイト列をクエリパラメータとしてHTTPリクエストを送る[JS]

MessagePackでエンコードしたバイト列をaxiosでクエリパラメータに含めて送りたかったのですが、ちょっとハマったので書き留めておきます。

## 環境
| |バージョン|
|---|---|
|node |10.12.0|
|axios |0.18.0|
|msgpack-lite| 0.1.26|

## 目標

```.js
const data = [{
	bar: 'bar',
	foo: 'foo',
}]
```
このようなObjectを送ることを考える。

https://msgpack.org/ で確認してみるとこのObjectはMessagePackによって以下のようなバイト列になる。

```
91 82 a3 62 61 72 a3 62 61 72 a3 66 6f 6f a3 66 6f 6f
```

ということはクエリパラメータはこんな感じになってくれると嬉しい。

```
...?data=%91%82%A3bar%A3bar%A3foo%A3foo
```

これはUTF-8でエンコードできるバイトはエンコードし、できないバイトは%を頭につけて16進数として出力する[パーセント・エンコーディング](https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0)です。

## 課題

まず書いたコードはこんな感じ。

```.js
const data = {
	bar: 'bar',
	foo: 'foo',
}

const buf = msgpack.encode(data)

axios.get(
	endpoint,
	{ params: { data: buf } },
)
```

送られたクエリパラメータ

```
...?data=%7B%22type%22:%22Buffer%22,%22data%22:[130,163,98,97,114,163,98,97,114,163,102,111,111,163,102,111,111]%7D
```

BufferのObjectがそのままエンコードされてるっぽい…。

ということで以下のようにBufferをStringに修正してみる。

```.js

const buf = msgpack.encode(data).toString()

axios.get(
    endpoint,
    { params: { data: buf } },
)
```

送られたクエリパラメータ

```
...?data=%EF%BF%BD%EF%BF%BDbar%EF%BF%BDbar%EF%BF%BDfoo%EF%BF%BDfoo
```

ん？UTF-8でエンコードできない部分がなんかすごいことになってる。

調べてみるとエンコード失敗した時の文字列をさらにエンコードしようとしてこうなってしまうらしい…。

([参照](http://www.pppea.com/triflesthings/efbfbd.html))

## 解決策

これではリクエストを受け取った側でmsgpackとしてデコードできないのでどうしたものかと調べてみると、axiosではクエリパラメータのシリアライザをカスタマイズできるらしい。

https://github.com/axios/axios#request-config

実装したコードはこんな感じ。

```.js
const buf = msgpack.encode(data);

axios
  .get(
    endpoint,
    {
      params: { data: buf },
      paramsSerializer: (params) => {  // シリアライザをカスタマイズ
        let result = '';
        for(let k of Object.keys(params)) {
          if (result !== "") {
            result += "&";
          }
          if (params[k] instanceof Buffer) {  // Bufferだけエンコードが失敗しないようにする
            let encodedData = '';
            for (let value of params[k].values()) {
              encodedData += '%' + value.toString(16);
            }
            result += k + "=" + encodedData;
          } else {
            result += k + "=" + encodeURI(params[k]);  // Buffer以外は普通にエンコード
          }
        }
        return result;
      },
  },
);
```

paramsSerializerを指定することによってシリアライザをカスタマイズできました。
内容としてはBufferに対してのみ単純なパーセント・エンコーディングを適用するようにしたものです。

## まとめ

axiosは簡単なことは簡単にできながら、カスタマイズも細かくできるのがいいなと思いました。
他にいい方法があればコメントください！
vue-chartjs馴れ初め


[vue-chartjs](https://vue-chartjs.org/)を使い始めようと思ったけど日本語文献少なかったりで大変だったのでとりあえずnuxtjsでサンプルのグラフを出すところまで記載。

## 参考にした情報
`node_modules/vue-chartjs/src/examples`の中に[公式のサンプルグラフ](https://github.com/apertureless/vue-chartjs)の書き方が一式入っているので基本それを参考にしました。

## 表示手順

### install

```
npm install vue-chartjs chart.js --save
```

### component作成

`components`ディレクトリに`HorizontalBarChart.vue`を作成

```vue:HorizontalBarChart.vue
<script>
import { HorizontalBar } from 'vue-chartjs'

export default {
  extends: HorizontalBar,
  mounted() {
    this.renderChart(
      {
        labels: [
          'January',
          'February',
          'March',
          'April',
          'May',
          'June',
          'July',
          'August',
          'September',
          'October',
          'November',
          'December'
        ],
        datasets: [
          {
            label: 'Data One',
            backgroundColor: '#f87979',
            data: [40, 20, 12, 39, 10, 40, 39, 80, 40, 20, 12, 11]
          }
        ]
      },
      {
        responsive: true,
        maintainAspectRatio: false
      }
    )
  }
}
</script>
```

### component配置

`pages/index.vue`に配置

```vue:index.vue
<template>
  <div>
    <chart-component />
  </div>
</template>

<script>
import Vue from 'vue'
import HorizontalBarChart from '~/components/HorizontalBarChart'

export default {
  components: {
    HorizontalBarChart
  }
}

Vue.component('chart-component', HorizontalBarChart)
</script>
```

### ブラウザ
<img width="1410" alt="スクリーンショット 2018-12-21 2.00.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/219624/b5f7de3f-c8ad-be02-7e03-c3f36c2fee3c.png">

でました。

## 感想
使ってみると結構オサレで簡単そうですね。
「こどものためのジオカーニバル」に出展してきました！

こんにちは、お母さんです。

2018年11月3日・4日、大阪市立自然史博物館で開催された「こどものためのジオカーニバル」に出展してきました。
出展内容は前回の記事でも紹介した『ストームグラスをつくろう！』です。

### 「こどものためのジオ・カーニバル」について
『ジオカーニバル』は、天文・気象・地質・環境・防災などの『地学』をテーマに実験・実習や展示を通して、こどもたち興味・関心を高めてもらうことを目的としたイベントです。
毎年全国各地から多くの団体が出展し、今年は19回目となりました。

私も『ちきゅう教室』として、これまでも出展してきましたが、毎年大盛況のこのイベントで今年は『ストームグラス作り』が実施できることになりとても楽しみにしていました。

### 会場

例年では大阪市立科学館で開催していましたが、今年度から大阪市立自然史博物館との共催での実施となり、今年の会場が自然史博物館になったそうです。

![IMG_2861.JPG](https://qiita-image-store.s3.amazonaws.com/0/296644/3a802065-20f1-cfaa-6113-a93cd49b1858.jpeg)

大阪市立自然史博物館は、長居公園の中にあり、博物館までの道には、、子供たちの目を引くかわいいジオカーニバルのイラストの看板がありました。
この絵は毎年運営委員会の学生さんが描いてくれているそうです。

大阪市立自然史博物館に着くと、ザトウクジラ・マッコウクジラ・ナガスクジラの3頭の迫力満点の骨格標本が出迎えてくれます。
![IMG_2316 (1).JPG](https://qiita-image-store.s3.amazonaws.com/0/296644/44be2ad1-db55-7d0d-13fd-5f4c7d36143a.jpeg)

### ワークショップが始まりました

10時になり、開場とともにたくさんのこどもや大人たちがちきゅう教室のブースへ集まりました。
『これ（ストームグラス作り）に参加したくて、来ました！』と真っ先に私たちのブースへ来てくれてた様子の方も多く、ポスターやチラシを見て楽しみにしてくださっていたんだなあと嬉しくなりました。
1日目は随時受付制としていたため、一人ずつご案内をしましたが、すぐに行列ができてしまい、１日目は1時間待ちとなってしまいました。
２日目は午前と午後に整理券を配布しましたが、どちらも整理券配布開始後すぐにすべてなくなってしまうほどの人気でした。

ジオカーニバルは2日間開催し、セミナー形式・ブース形式に分かれて講座やワークショップが行われます。
セミナーは各回の整理券をそれぞれの開始時間の少し前から配布し、ブースはそれぞれのブースによって参加方法（整理券、随時受付制、入れ替え制など）が決められます。
あらかじめセミナーやブースの整理券を取ったり、長時間待ったりしないと参加できないことも多いので、お客さんは家族で協力しながら参加してくれていることが多いのです。

このイベントの対象は小学生・中学生・高校生・学校関係者・一般の方となっていますが、
最近の傾向では未就学児の参加率もとっても高く、小さなお子様でも参加できるような工夫が必要でした。
今回薬品を使うという事で、子供たちにはマスクとメガネ、手袋をつけてもらい、『実験するんだ！』という緊張感を持って注意事項を守ってもらいながら実験を進めていきました。湯煎も行うため、スタッフと参加者が1対1で体験してもらいます。
![IMG_2312.JPG](https://qiita-image-store.s3.amazonaws.com/0/296644/a9e51b87-d39c-e47c-3589-233d69d12718.jpeg)

ストームグラスづくりは約15分ほどで完成し、作り終わったところで親子に持ち帰ってもらいました。実験後すぐは完全に溶けているので結晶はできていませんが、中の液体の温度が下がってくると少しずつ結晶ができていきます。

![45292600_720098898365142_3636884409677774848_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/296644/bb62ec85-5aa3-cd5d-088f-f204d2ecd58a.jpeg)

未就学児のお子様には保護者の方にそばで手伝っていただきましたが、小さなお子様でも最後まで粘り強く作ることができ、本当によく頑張ってくれたと思います。
最後に観察記録用紙をお渡しし、天気や気温でどんな変化が起こるか、持ち帰ったあとにおうちで観察してもらうことにしました。
![IMG_2868.jpg](https://qiita-image-store.s3.amazonaws.com/0/296644/88bc3342-e335-becf-0a75-aafadd1d6083.jpeg)

参加者の中には、高校や大学の科学サークルで参加し、ぜひ自分たちのところでも作ってみたい！と言ってくださる方もいらっしゃいました。

ジオカーニバル、今年も参加者でにぎわいました。自分たちが出展していると、なかなか他のブースを回ることができないのですが、どのブースもとてもユニークで興味深い出展ばかりです。

持ち帰ったストームグラスで子供たちが天気・気象に興味関心を深めてくれることを願っています。

![IMG_2869.JPG](https://qiita-image-store.s3.amazonaws.com/0/296644/bd564c2a-89d0-bfe9-bbeb-0e8ba26c1fec.jpeg)

次回もお楽しみに！
safariでborder-radiusが動いてない時の解決法

#状況
border-radiusを設定した際、safari上で思うように動いていないってことがありました。

```css
.element {
  border-radius: 50%;
  overflow: hidden;
  width: 100%;
  height: 100%;
}
```
僕の時はこんな感じだったような気がします。(どうでもいい)

#サクッと解決策

**border-radiusがかかっている要素にz-indexをつけるだけ!**

```css
.element {
  z-index: 1; /*僕は1でしたが、多分状況に応じて値を変えても大丈夫かと思います。*/
  border-radius: 50%;
  overflow: hidden;
  width: 100%;
  height: 100%;
}
```

###参考
[Safariでborder-radiusの指定が効かない](http://cly7796.net/wp/css/border-radius-do-not-work-with-safari/#comment-31789)
恐縮ながら、ほぼ同じことを書かせていただいておりますが、この記事にたどり着けず諦める方が出ないよう、qiitaに載せて一人でも多くの方に届けばいいなと思い投稿させていただきました。
元記事作者の方、ありがとうございました。
ターミナルで時間を知らせる

#時刻を知らせる
初歩的なものですが，投稿の練習も兼ねてやってみたいと思います．
（自分の目も含めて）

```python

#coding:utf-8
# まずは，入力した時間になったらターミナルで知らせてくれるものを作ってみる
from datetime import datetime
from time import sleep
print(datetime.now())
my_time_hour=int(input("時間を入力してください:"))
my_time_minute=int(input())
while True:
    h=int(datetime.now().hour)
    m=int(datetime.now().minute)
    s=int(datetime.now().second)
    if my_time_hour == h and my_time_minute==m:
        print(str(h)+":"+str(m))
        print("おしらせします")
        break
    num=60-s#CPUの消費量を抑えるためにために，残りの時間をsleepにする．
    sleep(num)
```

結果：
2018-12-21 01:26:14.396535
時間を入力してください:1
27
1:27
おしらせします

# これからすること
tkinterを使い，GUIでできるようにしていく．
・入力した時間になると，画面に新たなウインドウを生成し，時刻を知らせてくれる．
・また，時刻だけではなく，アラームなどの機能をつけ，入力した時間経つと同じく知らせてくれるようにする．
・できたら->知らせるときに音も同時に鳴らせるようにする
・音を複数つけ，選択できるようにする
VSCodeで .min のファイルを作る

# 準備
**JS & CSS Minifier** をインストールして有効化
![plugin.png](https://qiita-image-store.s3.amazonaws.com/0/139979/645b8ecb-b71f-6cb9-d669-36df612508f7.png)

#手順
左下の **Minify** をクリック
![test.png](https://qiita-image-store.s3.amazonaws.com/0/139979/c3817178-2721-126b-4bbc-1bf2b48f3d43.png)


minify化されたファイルができました！
![test_min.png](https://qiita-image-store.s3.amazonaws.com/0/139979/7ce162fe-3dc8-0db0-277b-d728f5d86efe.png)