OmniAICreator/Qiita-1.07M huggingface dataset:
1on1は対話（ナラティブ・アプローチ）あってこそ

## 散見する形骸的な1on1
前回の「[個人に向き合い自己改善を促す仕組みづくり](https://qiita.com/sol123vv/items/9db2ec709bdd10eedc50)」で、1on1で育てていく相手と密に一緒に課題を考える。っていう話をしましたが、
1on1って「時間をとられる」「それって意味あるの？」「非生産的なんじゃないの」「やっても効果が見えない」なんてネガティブな考えと共にやらなくなることも多々あるんじゃないかと思います。
実際、ぼくも過去そういう経験をしましたし、やってしまったこともあります。

なんで、形骸化したり、効果ないとか言ってやめてしまうのか？
それは「**目的をハッキリせずに、ただやってみてるから**」なんじゃないでしょうか？

ぼくは、この資料がとても共感できたんで、こちらを参考にしつつ独自解釈でお話してみます。
（参考資料：[1on1で使えるコーチングスキルの活かし方](https://speakerdeck.com/tany3/1on1deshi-erukotingusukirufalsehuo-kasifang)）

## 1on1に必要なことは「対話（ナラティブ・アプローチ）」に尽きる
基本は「対話」です。
相手が困っていること、上手くいったこと、思っていることをとにかく「聞く」ことから始まります。
それから、何でそう思ったのか？どうしたいと思っているのか？少しづつ掘り下げて聞いてあげましょう。
そうやって、相手がどうするべきなのかを自分自身で考えて、進むべき方向を見つける手助けに徹しましょう。

簡単に答えを与えてしまったら、**自分の分身にしか育ちません**。
あくまで答えは自分自身で考えて、**そのひとならではのアプローチで歩んでいくことが大事**だと思っています。

それでも、答えの見つからない悩みに衝突することもあるので、その時は少しづつヒントを与えながら、導いてくような姿勢で話しましょう。

これだけに気をつけていれば、自然と相手との信頼関係が深まり、心理的安全性が高まっていくと思います。

とにもかくにも「**対話（ナラティブ・アプローチ）**」で！！

では逆に、やってはいけない1on1って何でしょうか。



## やってはいけない1on1 その１＜ただの進捗確認＞
まず、あまり意味がないと思ってるのは進捗確認です。
やっても悪くはないですけど1~2分で終わせましょう。
進捗なんて、ある程度把握してて当然ですし、把握できる範囲において1on1をやってると思います。把握もできないほど広大な範囲で1on1やる人ってそうそういないですよね。

必要なのは進捗確認ではなく、進捗でいま困っていることを聞いてあげることです。
それに対して、本人がどうしていこうと思ってるのか？を聞きましょう。
答えが出せないほど困っているなら、ヒントを与えたり、そっと導いてあげたら良いと思います。

## やってはいけない1on1 その２＜一方的な会話＞
1on1は、相手との対話の中からヒントや方向性を自分自身で見つけ出させることに意味があります。
それを、自分が一方的に話してしまっては何の対話も生まれませんし、相手は考える力を失い逆効果でしかありません。

## やってはいけない1on1 その３＜ただの指示出し＞
一方的な業務指示をするだけならやる意味がないです。
それは1on1ではなく個別でやりましょう。

## やってはいけない1on1 その４＜ただの叱責＞
業務においての失敗を叱る・注意することについても1on1でやるもんじゃないです。
それも、必要なら個別にやりましょう。
1on1はそういう場ではなく、何でできなかったのかを聞き出して、どうしたら良かったのかを一緒に考える場所だとおもいます。

## やってはいけない1on1 その５＜不定期開催＞
1on1は短時間で定期的にやるからこそ意味があります。
都合が悪くて多少日時をずらすことはあっても、開催をスキップしてしまうようなことは避けましょう。
もうその時点で1on1をやる意義を見失っています。


いかがだったでしょうか？
1on1について見つめ直すきっかけになったらと思います。
Reactの環境構築一覧表

これを見ればReactの環境がパパッと整うので、自分のメモとしても役に立つかなと考えたのでまとめました。

# React

まずはこれですね。

Reactを使うまでにはいろいろ設定をしなければならないのですが、

```
sudo npm install -g create-react-app
```

でインストールして、

```
create-react-app ???
```

としたら、だいたいの環境が完成しています。

(上記は、version 4以上のNode.jsが入っていることが前提となっています)

ちなみに、**???**のところは自分の好きなディレクトリ名を記入してください。

できたら一度

```
cd ???
npm start
```

として、無事にページが立ち上がるかを確認してみて下さい。

# Babel

**create-react-app**を使って環境構築したならば、すでに入っています。

# TypeScript

トランスコンパイラをTypeScriptでも使いたい場合は、

```
npx create-react-app ??? --typescript
cd ???
npm install -D typescript @types/node @types/react @types/react-dom @types/jest
```
としてみて下さい。



# Prettier

文字通りきれいにしてくれます。

```
npm install prettier --save-dev
```

# Eslint

これも**create-react-app**を使って環境構築したならば、すでに入っています。

便利。


# Jest

**create-react-app**を使って環境構築したならば、またしてもすでに入っています。

# enzyme

Enzymeをreactで使用する場合は「**enzyme**」「**enzyme-adapter-react-16**」(reactのバージョンによって**16**のところが変化する)の2つのライブラリが必要なため、

```
npm install enzyme enzyme-adapter-react-16
```
とする。

その後、*create-react-app*で作り出した**src**内に**setupTests.js**を作成します。

そして、

```javascript
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });
```

と書けば初期設定は完了です。
EQのコーチング活用について

## EQを使ったコーチングについて
EQ（心の知能指数）は、簡単に言えば**自己と他者の感情認識力**です。
これをコーチングに使おうと思った理由は、
たった1人でできることがどんどん少なっている現在、どんな職域においてもこの能力が必須になっていて、この能力を自分自身で認識することが第一歩になるかな？と思ったからです。

「彼を知り、己を知れば、百戦殆うからず」という言葉もありますが、
この感情という情報の認知力を問われるのがコミュニケーションであり、その能力値がEQになるのかな。と考えています。

## EQ自己診断
EQの自己診断方法は様々な書籍で紹介されているので参考にしてみてください。
どの書籍でも基本的なやり方は変わらず、4つの分野についての設問に答えてその数値を測るサーベイになります。
ぼくは、簡単にGoogleフォームでサーベイを作りました。

結果はこんな感じで、
![EQ_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4736/8cfb4491-c3cc-f4f2-3738-669e236e6caf.png)
①感情の識別：自己・他社の感情認識能力
②感情の利用：感情をうまく利用できる共感能力
③感情の理解：感情を理解してわかりやすく説明する能力
④感情の調整：感情をコントロールする能力
この4分野になります。

ソーシャルスタイルなんかも自己認識ツールの１つですが、
こちらは、そのひとの行動原理とか価値観に近いものかなと思います。
全く別物なので、両方使ってみるのも良いと思います。

## EQ自己採点から見えるもの
この採点結果からみえるものは、単純な高い低い。ということではなく、
どの分野に対して高く出ているのか、低く出ているのか、というバランスを見ることにあると思います。
どこか１つが高いだけでは、コミュニケーションが円滑に行えるとは言えず、
低くてもバランスが取れている方が優位に働く。と考えています。

上図のぼくの結果の場合、
自分自身、コミュニケーション能力などにおいて他の人に劣るとは思っていないため、
バランス良く数値が出ていることは、その裏付けになっているな。と見ています。

また、ポジションや業務が変わると当然環境変化が起こり、この数値にも大きく影響します。定期的にや、その都度で繰り返し計測してみる方が、より良いコーチングにつながると思います。

## 注意点
このEQ自己採点の扱いの注意点なんですが、
前述の通り、自分を認識することを目的としているため、**絶対に他者と比較するような使い方をしてはいけない**と思います。

何の意味もないです。百害あって一利なしです。

では、4分野において低く出たところをどう改善に導くのか？
簡単なヒントを挙げてみたいと思います。

## ① 感情の識別が低く出た場合
この能力は比較的重要な数値なので、そのひとは全般的にコミュニケーションで困ることが多いかも知れません。
やはり、まずは自己認識から始めましょう。その先にやっと他社の理解が待っています。
そのためには、1on1で一緒にそのひとに向き合って、自分自身から自分のことを見つめ直させることを繰り返すことが、地道ではありますが最短ルートかなと思います。

## ② 感情の利用が低く出た場合
そのひとは、相手の感情を受け止めるのが精一杯で、それをうまく誘導したり変化させることでその場をコントロールすることが苦手だと思います。
重い空気になりにくい雰囲気に誘導するのも1つのテクニックなので身につけておきたいですよね。
そのためには、自分の感情をうまく相手に伝えて、こちらの感情に巻き込ませる事が必要です。これは言葉や言葉の語気だけでなく、表情やジェスチャー、時には冗談などを交えることを意識的にトライしていく必要があります。

## ③ 感情の理解が低く出た場合
そのひとは、相手が正しく見えていないため、相手に向き合う姿勢に変えさせる必要があります。
聞き方からして自分よがりになったり、ましてや自分の話したいことしか話さなかったり。ではこの状況になってしまうので、気をつけさせるようにしましょう。
また、感情を理解するには、相手の言葉だけでなく目やジェスチャーなどの情報からも察知できるのもなので、よく相手を見ることも必要になります。

## ④ 感情の調整が低く出た場合
そのひとには、自分の感情をコントロールしやすくするための、そのひとがイライラしたり落ち込んだりする発端になりやすい起因を聞いてあげて、浮き沈みしそうな時に深呼吸させるとか、そうなりそうな環境を変えてあげて抑止するなどのアプローチが必要になるかなと思います。

---
以上が、EQの自己採点結果を利用したコーチングの参考例になります。
ぼくもまだまだトライしている最中で、足りないこともあると思いますが、
基本的にはこの使い方でコーチングしてあげれば、自己認識から新たな道筋が見えてくると考えています。

ご参考になれば幸いです。
AWS 名前付きプロファイルの設定で詰まったところ

#結論
awsの名前付きプロファイルの設定は、
config：[<font color="red">profile</font> user1]
credentialsの場合：[user1]
のようにConfigの場合はprofileを入れる必要がある

#configにはprofileが必要

~/.aws/config
<pre>
[profile user1]
region=us-east-1
output=text
</pre>

#credentialsにはprofileが必要ない
~/.aws/credentials

<pre>
[user1]
aws_access_key_id=ABCDEFGHIJKLMEXAMPLE
aws_secret_access_key=MAJIDE/MAJIDE/MAJIDE
</pre>

#使い方
--profileで使用する。
<pre>
$ aws s3 --profile user1 ls
</pre>

参考資料
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html
Kotlin を IntelliJ で書き始めて最初の3日間で覚えたショートカットまとめ

# 前提

これまでは主にXcodeでiOSアプリ開発をしてました。
Xcodeもとても便利ですが、IntelliJすごい！となったショートカットを書いていきます。

# 初日

はじめてIntelliJを触る。

### Shift + F12

エディタ画面を最大化する

### 矩形選択

Optionを押しながらドラッグ

### Shift + Shift

クラスやファイルにジャンプしたいときは大体このショートカットでいける。
`UserServiceTest.kt` を調べたいとき、大文字の部分をとって `UST` などと検索すると早い。

### Option + Enter

エディタ上で実行するとIntelliJがいろいろ提案してくれる。
Kotlinらしい書き方を提案してくれたり、そのクラスのテストクラスの雛形を作ってくれたり、とても便利。

### Cmd + N

宣言の上で実行すると、いろいろなものをGenerateするメニューが表示される。
オーバーライドのメソッドを実装したり、テストを実行したり、interfaceの実装部分を自動生成したりしてくれる。

### Cmd + Shift + T

開いているクラスに対するテストクラスにジャンプする。

### Cmd + Shift + A

Actionsを開く。
IntelliJが提供する様々な機能（めっちゃある）を、機能名で検索できる。

### Ctrl + R

直近で実行したコマンド（IntelliJの右上に表示されているもの）を実行する。

### Ctrl + Option + R

直近で実行したコマンドの履歴が表示される。そこから選んで実行する。

### Shift + F6

リファクタリング。関連するところもまとめて変更できる。

# 2日目

### F2

コード上のエラーが出ている箇所にジャンプする。便利。

### Option + F12

下部にターミナルを表示する。

# 3日目

### Cmd + E

直近に利用したファイルを表示する。超便利。このコマンド覚えてIntelliJの使い方が変わった。
`Cmd + E + Enter`でひとつ前に表示したファイルに戻る、という風にしてから効率めちゃあがった。

### Alt + Return

interface定義から実装を自動生成してくれる。
中身は TODO() というのが実装され、実行時にここを通ると未実装であることを教えてくれる。

### Ctrl + G

選択している文字列と同じ文字列をポンポン選択していく。
近くにある変数名を同時に変えたい場合などに使う。便利。

### Cmd + Option + L

インデントを揃える。

### Option + Ctrl + O

不要なimport文を削除する。

### Cmd + N からの K

プロジェクトに新規ファイルを追加する。
`Cmd + N`としたあとに `K` とか打つと、Kotlin classをサッと作れる。

### Option + ↑

カーソルが乗っている付近を選択する。
`Option + ↑`を続けて打つと選択されるスコープが広がっていく。便利

### Cmd + B

カーソルが乗っているクラスやメソッドの定義元へジャンプする。

# その他

エディタのタブ機能をオフにして、`Cmd + E`をつかってファイル間を飛んでいくスタイルが個人的にはよかった。

### エディタのタブ機能をオフにする

`Menu > Preference > Editor > General > Editor Tabs`
を開いて、
`Appearance > Placement`を`None`にする。
openframeworks0.9.8でofxCvを使うときにエラー出た

#環境
Windows10
Visual Studio 2017
openframeworks 0.9.8

#エラーの内容
ofxCvとofxOpenCVを追加したプロジェクトをつくって、何もコードを書かずに実行したらエラーがでた。

```
LNK2001	外部シンボル ""class ofMatrix4x4 __cdecl ofxCv::makeMatrix(class cv::Mat,class cv::Mat)" (?makeMatrix@ofxCv@@YA?AVofMatrix4x4@@VMat@cv@@0@Z)" は未解決です。
LNK2001	外部シンボル ""void __cdecl ofxCv::applyMatrix(class ofMatrix4x4 const &)" (?applyMatrix@ofxCv@@YAXAEBVofMatrix4x4@@@Z)" は未解決です。
LNK1120	2 件の未解決の外部参照
```

#対応
こちらを参考にしました。
https://www.takasay.com/entry/2016/02/24/200941
https://forum.openframeworks.cc/t/ofxfacetracker-error-on-windows/21938

プロジェクトのプロパティ / C/C++ / 出力ファイル / オブジェクトファイル名 を

`$(IntDir)`

から

`$(IntDir)/%(RelativeDir)/`

に変えるとできました。
cmake error 


```shell:ubuntu
 Complete output from command /opt/conda/bin/python -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-1r99cy0b/openjij/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-5p9fk6s8 --python-tag cp37:
```

検索

```web:google.com
Your search - Complete output from command /opt/conda/bin/python -u -c 'import setuptools, tokenize ... - did not match any documents.

Suggestions:

Make sure that all words are spelled correctly.
Try different keywords.
Try more general keywords.
Try fewer keywords.
```

>Complete output from command /opt/conda/bin/python -u -c 'import setuptools
検索



```
# pip install setuptools
Requirement already satisfied: setuptools in /opt/conda/lib/python3.7/site-packages (40.8.0)
```


https://github.com/Homebrew/legacy-homebrew/issues/35052

```
# pip install --upgrade setuptools
Collecting setuptools
  Downloading https://files.pythonhosted.org/packages/ec/51/f45cea425fd5cb0b0380f5b0f048ebc1da5b417e48d304838c02d6288a1e/setuptools-41.0.1-py2.py3-none-any.whl (575kB)
     |████████████████████████████████| 583kB 3.0MB/s 
Installing collected packages: setuptools
  Found existing installation: setuptools 40.8.0
    Uninstalling setuptools-40.8.0:
      Successfully uninstalled setuptools-40.8.0
Successfully installed setuptools-41.0.1
```
スプレッドシートの既存シートをコピーする

```
   /**
     * 既存シートをコピーする
     */
    public function copyToSheet()
    {
        $title = date('Y-m-d');
        $req = new Google_Service_Sheets_CopySheetToAnotherSpreadsheetRequest();
        $req->destinationSpreadsheetId = $this->spreadsheetId;
        $response = $this->service->spreadsheets_sheets->copyTo($this->spreadsheetId, 314550118, $req);
    }
```
Microsoft Flow の [スケジュール] は単なる繰り返し以外の設定も多少はできる

##平日の特定の複数の時刻に実行させたい

Microsoft Flow の [スケジュール] は、一見すると単純に一定の間隔でアクションを実行させる設定しかできないようにも見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/734b8e28-543a-5d55-b983-b8e9e69e92cf.png)

こちらの記事作成時には、[スケジュール] では平日の特定の時刻に実行といった指定ができないのかと思ってしまいました。なので、お弁当屋さんの Tweet をトリガーにしてみた。。。

TITLE: 社員のお弁当の注文を取りまとめて、FAX 送信する LINE WORKS ボット #1
URL: https://qiita.com/iwaohig/items/d66a0c2c1663122f9f84

ですが、"頻度" を [週] や [日] に指定すると、それぞれ [曜日] や [時刻] を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/462a0b8c-5383-dc86-dc32-1f6d260de304.png)

これによって、例えば平日の 12:00 と 15:00 とか、毎日 10:15 と 13:45 のような等間隔ではない実行タイミングを設定することが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/b32be378-5f73-eb64-3ea3-677ff93bb13e.png)
Nuxt.jsの現在のリンクにつく"nuxt-link-active"を"active"へカスタマイズする

[Bootstrap](https://getbootstrap.com/)とかのナビゲーションでよくある、現在のページのリンクのクラスにactiveをつけたい場面。

Nuxt.jshではデフォルトでnuxt-link-activeとなっているので、こいつをactiveにして見たい場合など、CSS Frameworkであるある。

[公式ではlinkActiveClassを使いましょう](https://router.vuejs.org/ja/api/#linkactiveclass)と描いてありますが、慣れていないこともあり直感的にわからなかったので。

Nuxt.jsのルートにある、nuxt.config.jsのファイルにrouter.linkActiveClassの設定を下記のスクリーンショットの様に付け加えます。

![Screen Shot 2019-06-26 at 00.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145550/84a678b8-5be2-c222-09e1-899886c4cc91.png)

今日の反省点は、オブジェクトの階層を間違えて、router.linkActiveClassをhead以下に付け加えていて、どうやっても変更が反映されずに悩んでいた。あと、Nuxt.jsのことがよくわかっていないので、nuxt.config.jsに付け加えるべきところを、layoutのスクリプト部分にexport defaultで設定を押し込んでいたこと。これで30分ほど無駄にしました
Amazon Relational DataBase Serviceについて

# Amazon Relational Database Serviceとは
　通称Amazon RDSと呼ばれています。
　その名の通り、『Amazonがデータベースをサービスとして提供してくれる』というもので面倒なセットアップが全て行われた状態でユーザーはデータベースを利用することができます。
　利用できるデータベースは以下の６種類です。
【Amazon Aurora/PostgreSQL/MySQL/MariaDB/Oracle/Microsoft SQL Server】
  月額は従量課金制で、初期費用も不要となっています。

# EC２とは
　EC2とは、AWSにて選択できる仮想サーバーの名称（ホスト）です。
レンタルサーバーと異なり、従量課金制となっています。
EC2とセットでよく使われる言葉にインスタンスというものがあります。
基本的にインスタンスといえば、EC2より建てられたサーバー（マシン）の一つを指すことが多いようです。
　EC2インスタンスにデータを格納するためのデータベースをインストールすることもできますが、規模が大きくなると容量の圧迫やパフォーマンス低下が懸念されます。

# cloud9とは
　cloud9とは、AWS（Amazon Web Services）にて提供されるEC2インスタンスなどの仮想サーバーにデプロイするための、クラウド型統合開発環境ツールです。
　通常、開発環境といえばテキストエディタやコンパイラなど多岐にわたる機能を個別に揃える必要がありますし、ご自身のパソコンなどローカル環境にインストールすることがほとんどです。
　しかし、cloud9はクラウド型の統合開発環境（IDE）ツールですので、開発に必要な様々な機能を一括して揃えることができ、ブラウザさえあればインストール不要で、どのパソコンからでも同じ環境を利用して開発することができます。

# RDSの役割
　RDSを利用するメリットとして、EC2とは別のクラウド上にデータベースを作成することができるという点が挙げられます。
　RDSとEC2の役割（データベースサーバーとWebサーバー）を分けることによって、負荷が減り、パフォーマンスを安定化させることができます。
　また、Abilability Zone（リージョン内の物理的な隔離場所）を別々にしても管理可能なので、それぞれを同期しておけば片方に障害が発生しても、もう片方で運営できるので安心です。
　ただし、Abilability Zone毎に通信費が発生するため、費用はかさみます。

# EC２⇄S３ストレージ⇄RDS①
S3ストレージとはAWSのサービスの一つで、クラウド型のオブジェクトストレージサービスです（オブジェクトストレージとはオブジェクト、つまりファイル単位で出し入れが可能なストレージのことです）。
正式名称を『Simple Storage Service』と言います。
　主な役割は、ファイルのバックアップ、画像ファイルやCSSファイルなどの静的ファイルの配信、ファイルのバージョン管理などです。　
　事前に容量を決める必要はなくデータを入れた分だけ課金される仕組みで、1GBあたり0.025ドルと格安なだけでなく耐久性も高い点が特徴です。

# EC２⇄S３ストレージ⇄RDS②
　S3ストレージEC2インスタンスのファイルを出し入れするだけでなく、RDSのバックアップ用としても使えます。
　RDSのDBインスタンスの自動バックアップはデフォルトでS3ストレージに作成され、指定した期間データを安全に保持することができます。
　また、スナップショットというユーザー起動型のインスタンスバックアップ（フルバックアップ）をとることが可能で、明示的に削除するまで保持し続けることができます。
　ストレージ使用の増加分に対しての課金のみで、コピーや共有もできます。


### 参考にさせて頂いたサイト
[n2p様](https://n2p.co.jp/blog/tech/serverside/rds/)
[ManagedCloud with AWS様](https://www.bit-drive.ne.jp/managed-cloud/column/column_15.html)
RubyでMySQL2をインストールする必要があったときの対処方法（Mac）

Rubyで新しくプロジェクトを作成するときに下記を実行したところ、`MySQL2`がないと怒られました。

```console
$ rails new scaffold_app -d mysql

（中略）
An error occurred while installing mysql2 (0.5.2), and Bundler cannot
continue.
Make sure that `gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'`
succeeds before bundling.

（略）
```

これに対しての対処を以下にまとめます。

## 環境
- Mac OS Mojave 10.14.5
- Ruby 2.6.3


## Mojave用macOS SDK header追加してみる
Mojave用のmacOS SDK headerの追加を実行しました。

```console
$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
```

参考：[[MacOS Mojave]mysql2のbundle installに失敗してハマった件 - Qiita]([MacOS Mojave]mysql2のbundle installに失敗してハマった件 "https://qiita.com/gengogo5/items/815869416eaee3bb8daa")

## エラーログのコマンドを実行してみる

```console
$ gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/'

Building native extensions. This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed
```

すると、無事に`MySQL2`はインストールできたみたいです。
Hyper-Vの有効/無効を切り替えるバッチファイル

# 目的
Docker for windowsを動かすときにはHyper-Vを有効化する必要がありますが、
Hyper-Vを有効化するとVirtual BoxなどのVMが動いてくれません。
`bcdedit /set hypervisorlaunchtype`というコマンドを使えばコマンドラインで切り替えられますが、
より簡単のためにバッチを作りon offを切り替えられるようにします。
最後の行に記述されているのは再起動をするコマンドです。

# 有効化
```hyper-v-on.bat
@echo off
bcdedit /set hypervisorlaunchtype auto
shutdown /r /t 0
```

# 無効化
```hyper-v-off.bat
@echo off
bcdedit /set hypervisorlaunchtype off
shutdown /r /t 0
```
TortoiseGitとかのアイコンオーバーレイの霊圧が…消えた……？

タイトルはちょっと遊んでみました。

WindowsでGit使うときに便利なTortoiseGit、まれによくアイコンオーバーレイが表示されなくなるんだけど、レジストリエディタでアイコンオーバーレイの設定項目の表示順序を操作すればOK。

# TortoiseGitのアイコンが表示されなくなった

TortoiseGitは入ってるはずなのに、Gitの状態を表すアイコンが何も表示されなくなった。
(アイコンが表示されないだけで、右クリックメニューでは普通にTortoiseGitの操作はできる)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/7a5a6996-2fdf-94dd-b84a-0a1db9acbb27.png)

そんなときは・・・

# Settingsの起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/ef509920-975a-5caf-7b5b-87a4da1e2c7e.png)

# レジストリエディタの起動

普通に`regedit`で起動してもいいけど、ここから起動すると対象キーへすぐアクセスできるので便利。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/bd8af893-9895-691b-c81e-8ee55b5b5e9b.png)

`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers`
このキー以下にある設定項目のうち、先頭から15件(らしい)がWindowsでは有効になる模様。
Dropbox、貴様か…！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/0b146f1e-a9a9-0348-bbb2-8fb8bb1a34cd.png)

というわけで、先頭スペースによって表示順で優先されるように操作されているDropboxさん(私はあまり活用してない)には後ろの方に移動してもらいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/3a2dd6d2-4e28-9d68-530d-f0379a7ff216.png)

こんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/88327a8f-e6d9-75f5-c568-34831f609c70.png)

設定変更したらレジストリエディタを終了し、内容を反映させるために一度Windowsをサインアウトしてサインインしなおす。
(リブートでもOK)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/c6f75b26-472f-9710-8e1d-2b9818b299ae.png)

これで完了🤗


参考: [エクスプローラーのアイコンオーバーレイが表示されない - dondari](https://www.dondari.com/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AC%E3%82%A4%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84)

この「上位15件」というのは検索するとよくヒットするんだけど、情報源はどこにあるのか見つからない…
おまけ：2018年のLightning Talkネタ

###３－１　何をやったか
2018年EXPOのLightning Talkではモーションセンサを用いたデモを行ないました。
加速度センサとジャイロセンサを組み合わせた手法（Invensense社のDMPなど）を用いると、角度（ロール・ピッチ・ヨー角）に関しては、かなり安定します（少なくともデモを行なう程度の時間なら全然、問題ありません）。
ということで、向きを変えて見せるなら飛行機かなと思いました。
モーションセンサからArduinoにI2Cでデータを拾うプログラムは公開されていて、私が使ったMPU-9250のライブラリは[この辺](https://github.com/sparkfun/SparkFun_MPU-9250-DMP_Arduino_Library)を参考にさせていただいています。
ArduinoからMATLABにデータを転送するところは、今年のマウスのデモとほぼ同じ手法です。

###３－２　MATLABでいかに見せるか
ちなみにArduinoでもProcessingというプログラミング環境と組み合わせて3Dのデモはできるようになっています。なので、デモをやろうとすると、そうですね、やっぱりどこかで超えないとつまらないかな、は考えました。
3DのAirplaneモデルは、MATLAB File Exchangeの[こちらのページ](https://jp.mathworks.com/matlabcentral/fileexchange/47967-draw-a-3d-airplane)から使わせていただきました。


###３－３　苦労した点

実際にモーションセンサのデータに合わせて3Dの描画を行なおうとすると、処理が重くて追従しないことがわかりました。
やっぱりリアルタイムについてこないと、面白くないです。
どうやって解決したかと言うと、「飛行機は動かさない」ということになりました。
１回、飛行機を３Ｄで描画したら、もう再描画はしません。
飛行機の代わりにカメラ位置とカメラアングルが動いているんです。
カメラを動かす部分のスクリプトを下記に示します。

```matlab:cameraview.m
ax=gca;%現在のfigure
ax.CameraTarget = [0 0 0];%カメラの対象物の座標
d = 7000;%カメラの初期位置
ax.CameraPosition = [d 0 0];%カメラを初期位置に設定

ax.CameraViewAngle = 8;%カメラを初期角度に設定

[Ybias,Pbias,Rbias] = DPMget(s);%飛行機の姿勢の初期位置取得


for t=1:1000
    [Y,P,R] = DPMget(s);%飛行機の姿勢を取得
    grd=-(Y-Ybias)*(pi/180);
    prd=P*(pi/180);
    qrd=R*(pi/180);
    [Zc,Xc,Yc]=sph2cart(qrd,0,1);
    
    [Yd,Xd,Zd]=sph2cart(grd,prd,d);
    ax.CameraPosition = [Xd Yd Zd];%カメラポジション移動
    
    ax.CameraUpVector = [Xc 0 Zc];%カメラ角度変更
    drawnow;%すぐに描画
end
%以下、略
```
というようにして、カメラを飛行機の周りに飛び回らせて、あたかも
飛行機の向きが変わるように見せています。

以下、デモのムービーです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/IWmS0kDGDC">pic.twitter.com/IWmS0kDGDC</a></p>&mdash; Monzo_N (@n_monzo) <a href="https://twitter.com/n_monzo/status/1139826627876028416?ref_src=twsrc%5Etfw">2019年6月15日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


おつかれさまでした。

[その１にもどる](https://qiita.com/Monzo_N/items/33dd847cea2ce1b6f173)
日本語でOk

 

起
　　最近の変数名は長すぎないか。
承
　　変数名を短くするには、日本語（日式漢字）を使うべし。
転
　　VBA最高。変数名どころか関数名にも漢字が使用できる。
結
　　非関税障壁とも、国際化に逆行しようとも、変数名、関数名に漢字を使うべし。
BottomSheetBehaviorに被っているViewにタッチイベントが貫通しないようにする

タイトルの通り、BottomSheetBehavior の状態を STATE_EXPANDED にしている際にタッチイベントが後ろのViewに貫通していたのでどうしたら防げるかの備忘録になります。
## 開発環境
- macOS Mojave 10.14.4
- Android Studio 3.4.1


## Androidのタッチイベントについて
タッチイベントの詳しい内容に関しては[Android のタッチイベントを理解する(その1)](http://blog.lciel.jp/blog/2013/12/03/android-touch-event/)という記事を参考にしていただければと思います。🙇‍♂️
今回使用するメソッドは、実際にタッチイベントに対して処理する onTouchEvent() です。

## 実装手順
BottomSheetBehavior の onTouchEvent() で画面上のタッチのY座標と BottomSheet に設定している LinearLayout のY座標を比較して、画面上タッチイベントがBottomSheet(LinearLayout) のY座標以上をタッチした場合は onTouchEvent() で true を return してあげると伝播しないようになります。

今回は BottomSheetBehavior のカスタムクラスを作成して、その中の onTouchEvent 内で判定していきたいと思います。

レイアウトファイルなどについては[iOSのハーフモーダルをAndroidでも実装してみた(Kotlin+BottomSheetBehavior)](https://qiita.com/fumiyakawauso/items/1d0fa27aa508a3e0570a)という自分が書いた記事をそのまま使用するので、こちらをみていただければと思います。🙇‍♂️

以下 onTouchEvent 内の処理となります。

```Kotlin
override fun onTouchEvent(parent: CoordinatorLayout, child: T, event: MotionEvent): Boolean {
    // 画面上のタッチ発生位置
    val touchEventY = event.y

    // BottomSheetBehavior の位置
    val bottomSheetY = child.y

    // BottomSheet の範囲をタッチしていた場合はtrueとなるようにしている
    return touchEventY >  bottomSheetY
}
```

実際のコードに関しては[こちら](https://github.com/fumiyatani/BottomSheetSample)にあげていますので、ぜひ参考にしていただければと思います。(リポジトリ名は BottomSheetSampleです。)🙏
実際のコードにはジェスチャー判定や、BottomSheetをタップした時などの処理が入っていますが、基本は変わらないです。

##最後に
かなり駆け足な記事になってしまいすみません。。
眠い中書いてしまったので、日本語がおかしい部分もあると思います。。見直して修正していきます。。🙇‍♂️🙇‍♂️
一応、この記事の考え方を応用すると、BottomSheetをタップした際にBottomSheetの状態をみて、STATE_EXPANDED or STATE_COLLAPSED にするかなどの処理が作れると思いますので、ぜひ参考にしていただければと思います。
また、ここおかしいだろなどありましたらぜひコメントいただければと思います。。😢
見ていただきありがとうございます。🙇‍♂️
CRUD機能と7つのアクションの関係性

#実装におけるそれぞれの役割

**CRUD機能**とは、ほぼ全てのソフトウェアが有する4つの永続的な基本機能の頭文字をそれぞれ並べた用語のことをいう。 その4つの機能とは、Create（生成）、Read（読み取り）、Update（更新）、Delete（削除）を指す。 

**7つのアクション**とは、Railsにおけるコントローラの基本アクションを指す。
具体的には、index、new 、create 、edit 、show 、update 、destroy の7つを指す。
詳しくわ参考記事を参照



#1.Createの実装
##newアクション
newアクションは、これから新しく新規投稿する時にアクションするため、定義するだけでよい。
newアクションが作動すると、新規投稿画面へと移動する。

```ruby

def new
end
```

##createアクション
新規投稿画面から　投稿した際にビューから送られる特定の情報(params,名前や文章などのこと)を受け取り、新たにDBのテーブルに送られる。

```ruby

def create
    Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id)
end
```




#2.Readの実装
##indexアクション　
indexアクションは、DBのあるテーブルの情報を全て取り出す。

```ruby

def index
    @tweets = Tweet.includes(:user)
end
```

##showアクション 
showアクションは、indexアクションの中から、さらに個別の具体的な情報をDBのあるテーブルから取り出す。


```ruby
def show
    @tweet = Tweet.find(params[:id])
    @comments = @tweet.comments.includes(:user)
end
```


#3.Updateの実装　(Createの実装と同じ)
##editアクション　
編集したい情報を指定する。

```ruby
def edit
    @tweet = Tweet.find(params[:id])
end
```

##updateアクション

現在ログイン中のユーザーと編集したい情報のuser_idが一致すれば、updateアクションが作動する。そして、編集内容が更新される処理の流れは、createアクションと同じ


```ruby
 def update
    tweet = Tweet.find(params[:id])
    if tweet.user_id == current_user.id
      tweet.update(tweet_params)
    end
 end
```



#4.Deleteの実装
##destroyアクション

updateアクションと同じ実装



#5.簡易ブログアプリを作成した時のソースコード

```ruby

class TweetsController < ApplicationController
  
  before_action :move_to_index, except: [:index, :show]

  def index
    @tweets = Tweet.includes(:user).page(params[:page]).per(5).order("created_at DESC")
  end

  def new
  end

  def create
    Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id)
  end

  def destroy
    tweet = Tweet.find(params[:id])
    if tweet.user_id == current_user.id
      tweet.destroy
    end
  end

  def edit
    @tweet = Tweet.find(params[:id])
  end

  def update
    tweet = Tweet.find(params[:id])
    if tweet.user_id == current_user.id
      tweet.update(tweet_params)
    end
  end

  def show
    @tweet = Tweet.find(params[:id])
    @comments = @tweet.comments.includes(:user)@comments = @tweet.comments.includes(:user)@comments = @tweet.comments.includes(:user)@comments = @tweet.comments.includes(:user)
  end

  private
  def tweet_params
    params.permit(:image, :text)
  end

  def move_to_index
    redirect_to action: :index unless user_signed_in?
  end
end

```
＜参考記事＞
https://qiita.com/morikuma709/items/5b21e9853c9d6ea70295
https://qiita.com/sainu/items/9419424c68ab135472cf
https://qiita.com/aiorange19/items/d7443f403b77a7c98df0
DBを途中からmysqlに切り替える

今日もまた詰まったところがあったので眠気を我慢して投稿します:sob:

今回rails newをする際にmysqlを指定しなかったため、いつも通りrails g modelを行ってもDBが生成されず踠いていました・・・

メモ程度に残しますので参考にして下さい！

上記に描いた通りなにも指定しないと、sqlite3が標準実装されるので、
まずmysql2をインストールし、既存のsqlite3はコメントアウトします。
※また今回はバージョンを特に指定しなくても切り替えが可能だった。
　Railsのバージョンによっては指定が必要かも。

```ruby:Gemfile

# gem 'sqlite3', '~> 1.4.1'
gem 'mysql2'
```
そしていつも通りコンソールでコマンド実行。

```
$ bundle install
```

次にdatabase.ymlの以下のように記述を変更。
今回は変更前がどうだったか載せるのを忘れてしまったが、とりあえず
adapter: mysql2と host: localhost、  database: ”DBに保存するファイル名”は、
必ず追記または記載の変更をする。

```ruby:database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock
  host: localhost

development:
  <<: *default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: sumple_database
  pool: 5
  username: root
  password:
  host: localhost

test:
  <<: *default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: sumple_database_test
  pool: 5
  username: root
  password:
  host: localhost
```

あとはターミナルでコマンド実行でDBを生成します！

```
$ rails db:create
$ rails db:migrate
```

僕の場合この対応で、SequelProを確認したらきちんとテーブルが設定されていました。
さっきも言ったとおりバージョンによって対応が変わる場合もあります。
もしここ間違ってるとか、補足情報があれば教えて下さい。
警察官の容疑者の取り調べ(Rubyの論理演算子)

警察官は、aとｂ二人の容疑者の取り調べをしている。
両者の証言がTrue、またはFalseであれば、その証言はTrueとする。
しかし、どちらか一方がFalseでTrueであれば、その証言はFalseとする。
以上の結果を出力するメソッドを作る。

```ruby

def police_trouble(a, b)

  if a && b || !a && !b
    puts "True"
  else
    puts "False"
  end

end
```

アルゴリズムの組み立て方

まず、aとbの両者の証言が**True**の条件を考える。

```ruby

a && b   # a かつ b がtrueの時の条件式
```

次に、aとbの両者の証言が**False**の条件を考える。

```ruby

!a && !b   # a かつ b がFalseの時の条件式
```

最後に、上記２つの論理を「または」でつなげる。

```ruby

a && b || !a && !b　　
```

以上で、「両者の証言がTrue、またはFalseであれば、その証言はTrueとする。」の条件式が出来上がる。あとは、これをif文で書くだけ。


＜参考記事＞
・https://docs.ruby-lang.org/ja/latest/doc/symref.html
・http://www.tohoho-web.com/ruby/operators.html
・https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html
お前のXMLライブラリのtext取得関数が何を返すか確認しろ

# 概要
- XMLライブラリのtext取得関数が返す値はライブラリによって意外と違うからちゃんと確認しろ
- XMLのコメントがXMLに何も影響を及ぼさないかというとそんなことはないぞ

# 前振り

とりあえずこの架空言語で書かれたコードを見てほしい

```Ruby
> parseXML("<a><!---->12<!---->34</a>").element("a").text()
```

これ何が返ると思う？
- "12"
- "1234"
- ""

## 実世界の実装では
実装による

### xmllint(shellscript)
```bash
$ echo '<a><!--x-->12<!--y-->34</a>' | xmllint --xpath 'a/text()' -
1234
```
### rexml(ruby)
```Ruby
> REXML::Document.new("<a><!--x-->12<!--y-->34</a>").elements["a"].text
=> "12"
```

### tinyxml2(C++)
```C++
tinyxml2::XMLDocument doc;
doc.Parse("<a><!--x-->12<!--y-->34</a>");
std::cout << doc.FirstChildElement("a")->GetText(); // null
```

## めっちゃざっくりとした解説

- 「コメントは前処理時に消去され、XMLに何ら影響を及ぼさない」というのは必ずしも正しいとは限らない
- text取得関数が何を返すかはライブラリしだい


ライブラリにもよるが、XMLのコメントはコメントノードというものに割り当てられる。
ノードというのは`{element, text, comment, その他XML的要素}` の共通抽象的なものだと理解されるとありがたい

文字列 `"<a><!--x-->12<!--y-->34</a>"` は
構造 `{"a" => [comment("x"),text("12"),comment("y"),text("34")]}` にパースされる

任意のライブラリのtext取得関数は上構造からどうにかして textを返すわけだが
その実装は「最初に見つけたtext」「すべてのtext」「最初のnodeがtextならそれ」「そもそも前処理時にコメントは削除した」などいくつかの可能性が考えられ、つまりライブラリによる


# 結論
お前のXMLライブラリのtext取得関数が何を返すかちゃんと仕様を確認しろ
FactoryBot の使い方

# FactoryBot の使い方

## spec/factories/users.rb　に記述していこう。

**spec/factories/users.rbの全貌**

```ruby:spec/factories/users.rb
FactoryBot.define do
  factory :user do #詳細データが必要ないときは、user だけ作成する
    _account = Faker::Internet.username #データの重複が起きないように数字が１ずつ増えてaccountが生成される。

    name { Faker::Name.name }
    sequence(:account) { |n| "#{n}_#{_account}" } #数字を１ずつ増やすための処理
    sequence(:email) { |n| Faker::Internet.email("#{n}_#{_account}") } #数字を１ずつ増やすための処理

    trait :with_user_detail do #詳細データも必要なときは、user_detail も一緒に作成する
      user_detail #association :user_detail, factory: :user_detail の省略形
    end
  end
end


# 生成する時のコマンド
# user = FactoryBot.create(:user) userデータのみ

# user = FactoryBot.create(:user, :with_user_detail) user_detailsもセットで
```


Faker gem をうまく組み合わせることで、FactoryBot でランダムなデータを作ることができる

## FactoryBot の使い方

### FactoryBot.create

FactoryBot を使ってレコードを作成します。(newからsaveまでやっちゃうって事)

```ruby
# FactoryBot を使う場合
FactoryBot.create(:user)

# 省略形が一般的
create(:user)

# FactoryBot を使わない場合
User.create!(name: "chinju", account: "chinju", email: "chinju@example.com")
```

### FactoryBot.build

FactoryBot を使って、インスタンスを new します。


```ruby
# FactoryBot を使う場合
FactoryBot.build(:user)

# 省略形が一般的
build(:user)

# FactoryBot を使わない場合
User.new(name: "chinju", account: "chinju", email: "chinju@example.com")
```

### FactoryBot.attributes_for

FactoryBot の定義から、値を Hash 形式で受け取ります。

```ruby
# FactoryBot を使う場合
FactoryBot.attribute_for(:user)

# 省略形が一般的
attributes_for(:user)

# FactoryBot を使わない場合
{ name: "chinju", account: "chinju", email: "chinju@example.com" }
```

### ランダムではなく任意で値を設定したい時

```ruby
# name をねこくんで上書き 
FactoryBot.build(:user, name: "ねこくん")

# name に値をいれない
FactoryBot.build(:user, name: nil)
```

テストで活用しよう！！
ファイルI/O由来でUnicodeDecodeErrorが出た時の対処法

## Background
VPSサーバでテキストかjsonを読み込んだ時に`UnicodeDecodeError`とエラーが出ました。 その時の対処方法をまとめます。

## Method

ファイルを開いた時に`encoding='utf-8'`とパラメータを指定する。

```python

import json

dict = {}
with open("sample.txt", encoding='utf-8') as fin:
　　　　dict = json.load(fin)
print(dict)
```

で、エラーが出なくなりました。

公式ページ[python documentation 組み込み関数(open)]
(https://docs.python.org/ja/3.6/library/functions.html#open)でFunctionを調べてみると、

`open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
`

となっていて、パラメータがたくさんあります:anguished:
`open` はよく使うので各パラメータの意味を知っておくと良いかもです。

## Reference
[json.load() function give strange 'UnicodeDecodeError: 'ascii' codec can't decode' error](https://stackoverflow.com/questions/35051867/json-load-function-give-strange-unicodedecodeerror-ascii-codec-cant-decod)
[python documentation 組み込み関数(open)](https://docs.python.org/ja/3.6/library/functions.html#open)
家庭内ネットワーク上で簡単にDNSサービスを利用する

# よーしDNS設定するか->面倒くさい。。。
家でいろんなマシンが動くようになったので、いざDNSを使うかーという気になったのですが。。。
設定作業が面倒くさい。参考：https://webnetforce.net/unbound-dns-server/
筆者は面倒くさがりなのでDNSサーバの設定の作業でさえ面倒くさい。やだやだやだ！

# avahi-daemonを使う
そこでavahi-daemonを使います。
ローカルネットワークであれば、DNSと同様のことが出来る上、設定が簡単なので便利です。

## 概要
* 各マシンにavahi-daemonをインストールする形
* host名は`<名前>.local`という形式になる
* mDNSを利用する
    * ※AndroidはmDNS未対応なので注意

## インストール/設定
ホスト名を付与したいマシン上で以下の作業を実施する。
※Ubuntu 18.04.2LTSで実施しました。
1. avahi-daemonインストール
`sudo apt-get install avahi-daemon`
2. ホスト名を設定します。
`sudo vi /etc/hostname`を実行し、以下のように編集します。

```
hogehoge
```

これで設定終了。

上記であれば`hogehoge.local`というホスト名になります。

## サービス再起動
`sudo service avahi-daemon restart`

## サービスの状態を確認
`sudo service avahi-daemon status`

以下のように表示されていればサービスは動いている。

```
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
   Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-06-26 01:40:27 JST; 50min ago
 Main PID: 769 (avahi-daemon)
   Status: "avahi-daemon 0.7 starting up."
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/avahi-daemon.service
           ├─769 avahi-daemon: running [casper.local]
           └─795 avahi-daemon: chroot helper
```
android x86 7.1でデレステ(Enable native bridge)

houdiniのバージョンを変更する作業が必要。DLしてリネーム（置換）。

環境：android x86_64-7.1-r2

```terminal

$ su

# mkdir /data/arm 
# cd /data/arm 

//houdiniをDL
# wget dl.android-x86.org/houdini/6_x/houdini.sfs ./
# mv houdini.sfs houdini7_x.sfs

# wget dl.android-x86.org/houdini/6_y/houdini.sfs ./
# mv houdini.sfs houdini7_y.sfs

# wget dl.android-x86.org/houdini/6_z/houdini.sfs ./
# mv houdini.sfs houdini7_z.sfs


```

Androidの設定にあるApps compatibility内の「Enable native bridge」にチェックを入れる。
PHPで文字列\nしても改行されない

## 原因
<strong>PHPのクオーテーションはシングルとダブルで動作が異なる。</strong>たまに書くと忘れる。

シングルクオーテーション：変数や特殊文字の置換を<strong>行わない。（そのまま出力）</strong>
ダブルクオーテーション　：変数や特殊文字の置換を<strong>行う。</strong>

## 例
文字列の改行は`"ほげ\n"`
`'ほげ\n'`はだめ
Androidアプリを多言語化する

# はじめに

グローバルに展開するアプリケーションはさまざまな言語環境で動作させる必要があります。
Androidアプリでは簡単に多言語化する仕組みが備わっています。

## 参考

- [Localization](https://developer.android.com/guide/topics/resources/localization.html)

## 環境

- Android Studio 3.4.1

## 手順

文字列リソースはリソースフォルダに次の形式でフォルダを作成して、リソースファイルを作成していきます。

`values-言語コード`

- res/values-en/strings.xml（英語）
- res/values-ja/strings.xml（日本語）

地域別に定義したい場合は次のような形式になります。

`values-言語コード-r国コード`

- res/values-en-rUS/strings.xml（英語-アメリカ合衆国）
- res/values-en-rGB/strings.xml（英語-イギリス）

言語または地域別に作成したstring.xmlに翻訳した文字列リソースを定義すればOKです。簡単ですね。
今回はAndroid Studioのプロジェクトツリーを`Project`に切り替えてフォルダとリソースファイルを追加しました。

サンプルプロジェクトを作成して試してみます。

`res/values/strings.xml`

```xml
<resources>
    <string name="app_name">My Application</string>
    <string name="text">Hello World</string>
</resources>
```

`res/values-ja/strings.xml`

```xml
<resources>
    <string name="app_name">私のアプリケーション</string>
    <string name="text">こんにちは 世界</string>
</resources>
```

`res/layout/activity_main.xml`

```xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/text"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</android.support.constraint.ConstraintLayout>
```

Androidエミュレータを起動して確認。
Androidの表示言語は設定 - システム - 言語と入力 - 言語 から設定できます。

英語のとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270932/00aa8efa-b429-a30f-7955-b0d334e3fb91.png" width=30% />

日本語のとき
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/270932/6ba7c413-ee19-f7e9-792f-19c3d2e6386a.png" width=30% />
Inverse Path Tracing for Joint Material and Lighting Estimation のメモ

Inverse Path Tracing for Joint Material and Lighting Estimation
https://niessnerlab.org/projects/azinovic2019inverse.html

Authors 強い. Last author が Mattias Niesner でより強い.

## 概要

Photograph(RGB) + geometry(segmentation + depth), もしくは RGBD synthetic 画像からマテリアルと照明パラメータを推定する. Stochastic Gradient Descent で最小化問題を解く.

計算は昨今(2019 年時点)の CPU(8 cores)で数分程度.

### 3.1 Light Transport Simulation

Google を救った Eric Veach の博士論文に載っています.

http://graphics.stanford.edu/papers/veach_thesis/

優秀なレンダリング若人さまにおかれましては中学校で読破済みかと存じますね.

## 4. マテリアル

Disney principled BSDF を使う(10 parameters).
Disney principled BSDF ではパラメータが [0.0, 1.0] の範囲にあるので都合がよい.
(ちなみに subsurface には対応していない)

モンテカルロレイトレーサー向け Disney principled BSDF の実装はたとえば PBRT-v3 や Blender/Cycles https://developer.blender.org/D2313 , appleseed renderer などにあります(我々の principled BSDF 実装も, ソースコードを整理し近いうちに公開したい). 

Fresnel 項の扱いが異なっているので注意ください(Blender/Cycles だと OSL ベースなので fresnel は Closure(BSDF) の外で扱う) 

## 微分の計算

論文では数式で示されていて, 実装上は手計算したとあるのみ.

Ray differentials

Tracing Ray Differentials
https://graphics.stanford.edu/papers/trd/

Path differentials

Path differentials and applications
http://graphics.cs.kuleuven.be/publications/PATHDIFF/

あたりが参考になるでしょうか.

openshadinglanguage では Dual で differential geometry(shading point の微分)を扱えるようにしています.

https://github.com/imageworks/OpenShadingLanguage/blob/master/src/include/OSL/dual.h
 
## 総評

アプローチとしてはオーソドックスな感がありますので, 丁寧に微分を計算して実装すれば再現できるものと思われます.
[node.js]Expressでvalidatorjsを使ってバリデーションをかける

はじめまして、PMをやっているtatsukenと申します。はじめまして
研修の一環でvue.js、expressを書くことがあったので、そのことを中心にまとめていきたいと思います。
#はじめに
Expressで[mysql2](https://www.npmjs.com/package/mysql2)や[sequelize](https://www.npmjs.com/package/sequelize)などを使ってデータベースを操作する事が多いと思うのですが、データベースを操作する前にはExpressで受け取ったパラメーターはバリデーションをかける必要があります。
フロントでのバリデーションはユーザー体験を向上させるためのもので、これだけではセキュリティが担保できているとは言えません。そのためサーバーサイドにもバリデーションを掛ける必要があります。
Expressのバリデーションといえば[express-validator](https://www.npmjs.com/package/express-validator)などが有名ですが今回は[validatorjs](https://www.npmjs.com/package/validatorjs)というライブラリを使ってバリデーションをかけていきたいと思います。

##実装
### インストール
`npm install validatorjs -s`
###バリデーション。
バリデーションをかけたいファイルに以下のように記述してみてください

```validation.js
const express = require('express');
const router = express.Router();
const validator = require('validatorjs');
router.post('/image', (req, res) => {
  const data = req.body
  const name = data.name // => 中身は'johndoe'
  const height = data.height // => 中身は 175
  const email = data.email //=> 中身は'johndoe@gmail.com',
  const people = {
    name: name, // => 中身は'johndoe'
    height: height, // => 中身は 175
    email: email //=> 中身は'johndoe@gmail.com',
  }
  let rules = {
    name: 'required|string',//nullはNGかつsting型
    heigh: 'required | integer | max: 1000',//nullはNGかつinteger型かつmaxの値は１０００
    email: 'required|email',//nullはNGかつemailの条件にmatchする
  };
  let validation = new validator(people, rules);//ここでバリデーションを判定している
  if (validation.fails()) {
    res.json({
      status: "error",
      error: validation.errors.all()//ここで詳しいエラー情報が入っている
    })
    return
  }
})
```
###説明
* バリデーションをかける対象(今回なら`const people`)とバリデーションのrule(今回なら`const rules`)をそれぞれobjectで作り、`new validator(people, rules)`で比較していく
* バリデーションルールに関しては`required | integer | max: 1000 `というように自分のかけたいバリデーションルールを列挙することでルールを増やすことができる。
* ルールのすべてを見たい方は[こちら](https://www.npmjs.com/package/validatorjs)をご参照ください。
* もしバリデーションが通れば`validation.fails()`は**false**となり、バリデーションが通らなければvalidation.fails()`は**true**となる
* もしエラーの場合は`validation.errors.all()`にすべてのエラー情報が入っている。

###補足
どの部分がエラーになっているかという情報は必要ない！ただバリデーションが通るかどうか知りたいという方はもっと簡単に実装出来ます。

```validation.js
let data = {
  name: 'John',
  email: 'johndoe@gmail.com',
  age: 28
};
 
let rules = {
  name: 'required',
  email: 'required|email',
  age: 'min:18'
};
 
let validation = new Validator(data, rules);
 
validation.passes(); // true
validation.fails();　//false

```
#最後に
このように[validatorjs](https://www.npmjs.com/package/validatorjs)を使えば直感的にバリデーションをかけることが出来ます。
node.jsでバリデーションをかける際はぜひ一度使ってみてください。
なにか間違いなどありましたら、指摘いただけると幸いです。
Windows Terminalでさくっと背景変更

Windows用の新ターミナルとなるWindows Terminalのプレビュー版がリリースされました。せっかくなので背景に美少女イラストとか貼ってテンション上げたいですね。

### 導入方法

- [ここ](https://www.microsoft.com/ja-jp/p/windows-terminal-preview/9n0dx20hk701)(Microsoft Store)からWindows Terminalアプリを入手

<strong>※入手ボタンを押しても反応しない場合：Windowsのバージョンが古い。「⚠システム要件を確認」からリンクに飛んで、May 2019 Update(1903)以降へのアップデートを実施のこと。</strong>


### 設定変更方法

- 起動し、右上のプルダウンメニューから「Settings」を選択
- JSONファイルを任意のエディタで編集


#### 例:背景の変更

```profiles.json
{
    "globals" : 
    {
        "alwaysShowTabs" : true,
        "defaultProfile" : "{}",
        "initialCols" : 120,
        "initialRows" : 30,
        "keybindings" : 
        [
            {
                "command" : "closeTab",
                "keys" : 
                [
                    "ctrl+w"
                ]
            },
            {
            略
            }
        ],
        "requestedTheme" : "system",
        "showTabsInTitlebar" : true,
        "showTerminalTitleInTitlebar" : true
    },
    "profiles" : 
    [
        {
            "acrylicOpacity" : 0.5,
            "background" : "#012456",
            "closeOnExit" : true,
            下のテーマから使用するnameを選択
            "colorScheme" : "Campbell",
            powershellとかcmdとかwslとか該当するところを選ぶ
            "commandline" : "powershell.exe",
            "cursorColor" : "#FFFFFF",
            "cursorShape" : "bar",
            "fontFace" : "Consolas",
            "fontSize" : 10,
            "guid" : "{}",
            "historySize" : 9001,
            "icon" : "ms-appx:///ProfileIcons/{}.png",
            "name" : "Windows PowerShell",
            "padding" : "0, 0, 0, 0",
            "snapOnInput" : true,
            "startingDirectory" : "%USERPROFILE%",
            "useAcrylic" : false
            背景画像の設定をする場合は追記。Opacityは透過率。
            "backgroundImage" : "C:\\hoge\\bg.jpg",
            "backgroundImageOpacity" : 0.5,

        },
        {
         略
        }
    ],
    "schemes" : 
    [
        {
            "background" : "#0C0C0C",
            "black" : "#0C0C0C",
            "blue" : "#0037DA",
            "brightBlack" : "#767676",
            "brightBlue" : "#3B78FF",
            "brightCyan" : "#61D6D6",
            "brightGreen" : "#16C60C",
            "brightPurple" : "#B4009E",
            "brightRed" : "#E74856",
            "brightWhite" : "#F2F2F2",
            "brightYellow" : "#F9F1A5",
            "cyan" : "#3A96DD",
            基本の文字色はここforegroundの値で変わる
            "foreground" : "#F2F2F2",
            "green" : "#13A10E",
            テーマ名
            "name" : "Campbell",
            "purple" : "#881798",
            "red" : "#C50F1F",
            "white" : "#CCCCCC",
            "yellow" : "#C19C00"
        },
        略
```

Windows Terminalは目下開発中であり、ころころ仕様変更が行われているようです。アップデートにより方法が変わる可能性あり。
null is not an object ( evaluating 'RNGestureHandlerModule.Direction')が表示された時の対処法

#null is not an object ( evaluating 'RNGestureHandlerModule.Direction')が表示された時の対処法

ターミナルで下記のコマンドを実行し、再度ビルドし直す事でなおります。

```console
$react-native link react-native-gesture-handler
```
ワンライナーで書かないnpm script

# 要点
- npm scriptのタスクはjsファイルに書き出せる
- package.jsonに書く場合と違ってコメントが残せる
- デメリットとして書き出した分だけ処理を追うコストがかかる

# 脱gulpに向けて
「フロントの仕事はあまり振られないし、脱gulpはそのうち、そのうち......」
と思っていたら、「そのうち」が来たので、gulpに依存せず、npm scriptでタスクを実現する書き方について調べた。

# シェル！コマンド！ワンライナー！
npm run \<task\> でタスクを実行する方法を調べてみると、package.jsonの `scripts` に処理を書き、npm packageを直接操作する方法が多く見つかった。
この書き方をする場合、各タスクがどんなことをするのかを知るために、package.jsonだけを見ればいい。

しかし、複雑な処理を一つにまとめた場合に、複雑怪奇なワンライナーが生まれてしまう。
例えば、 `browser-sync` を例に挙げるとこんな感じ。

```packege.json
{
    "name": "sample",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "start": "./node_modules/browser-sync/dist/bin.js start --server htdocs --port 8080 --watch ./htdocs --https --open local --no-notify",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "devDependencies": {
        "browser-sync": "^2.26.7"
    }
}
```

オプションが増えるとどうしても見辛くなる。
加えて、ファイル形式がjsonであるが故に、<b>コメントを残すことができない</b>。

# タスクをjsファイルに書き出してみる
上記のタスクをjsファイルに書き出してみると、こんな感じになる。

```main.js
'use strict';

const browserSync = require('browser-sync');

// Can write comment, because this is js file.
browserSync({
    server: {
        baseDir: 'htdocs', // DocumentRoot
        port: 8080,
        watch: true,       // Browser reload, if change target files?
        https: true,       // Is use https?
        open: 'local'      // Which into tab, if reloaded browser?
    },
    files: './htdocs/*',   // Watch taget files.
});
```

package.json側の呼び出しはこんな感じに。

```package.json
{
    "name": "sample",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "start": "node main.js",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "devDependencies": {
        "browser-sync": "^2.26.7"
    }
}
```
`node`コマンドで処理の書いてあるjsファイルを実行するだけの記述になるため、見通しがよくなった。

# その分タスクファイル管理は煩雑に...
この書き方のデメリットは、<b>タスクの数だけjsファイルが増える</b>こと。
引き継ぎ等で初見の場合は、タスク数分のファイルをすべて確認することになるので結構手間かも。

ワンライナーで書くのもいいですが、タスクをファイルに書き出すことができることも知っておくと、柔軟なタスク管理ができると思い、初Qiitaとして本記事を書かせていただきました。
haml 画像挿入

自分用。


      %span.image
        = image_tag src="/assets/visa.svg", size: "49x20"
        = image_tag src="/assets/master-card.svg", size: "34x20"
        = image_tag src="/assets/saison-card.svg", size: "49x20"
        = image_tag src="/assets/jcb.svg", size: "32x20"
        = image_tag src="/assets/american_express.svg", size: "21x20"
        = image_tag src="/assets/dinersclub.svg", size: "32x20"
        = image_tag src="/assets/discover.svg", size: "32x20"
セレクトボックスのアイコンの変更(プルダウンの矢印)

自分の為の備忘録

#セレクトボックスを出す
        .pulldown
          %div
            %select.pulldown__detail{:name => "month" }
              %option{:value => "1"} 01
              %option{:value => "2"} 02
              %option{:value => "3"} 03
              %option{:value => "4"} 04
              %option{:value => "5"} 05
              %option{:value => "6"} 06
              %option{:value => "7"} 07
              %option{:value => "8"} 08
              %option{:value => "9"} 09
              %option{:value => "10"} 10
              %option{:value => "11"} 11
              %option{:value => "12"} 12 
            %span 月
          %div

セレクトボックスに関しては、コピペサイトが多数あるので、そちらから拝借。
月という文字が並列に表示されていなかったが、%divでラッピングして、 %select.pulldown__detaiと%span 月のインデントを調整したらいい感じになった。

これだけだと備え付けの矢印が表示されるので、CSSにアイコンを変えるための記述をする。
<参考>https://gray-code.com/html_css/change-design-for-pulldown-menu/

.pulldown{
  display: block;
  &__detail{
    padding-left: 15px;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-image: url(/assets/chevron-down-solid.svg);
    background-repeat: no-repeat;
    background-size: 10px 30px;
    background-position: right 10px center;  
    font-size: 8px;
    margin-bottom: 10px;
    height: 40px;
    width:100px;
    background-color:white;
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
  }

background-image: url(/assets/chevron-down-solid.svg);は画像が保存されている箇所を指定。
なお、画像はFontAwesomeでsvg形式で保存可能。

1. 変更前

<img width="250" alt="スクリーンショット 2019-06-26 1.26.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442488/44b75ab8-ceca-fba0-8d09-1f388a61821a.png">

2.変更後
<img width="235" alt="スクリーンショット 2019-06-26 1.27.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442488/28bc2fe1-0b9b-71d6-bb33-72cb524b3ffc.png">
DNN_後編1 (演習結果と考察)

#深層学習3-3,4 Jupyter演習　（Section1：再帰型ニューラルネットワークの概念）Section1-1：RNN全体像
[3_1_simple_RNN]
#####【演習実施結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/01bbf0d2-e2cf-ccc4-ae0d-08c573479746.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9d720706-d199-7427-71e1-ce45daf86d7e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/dccb1860-f137-d8ca-0293-fc84a47a14e5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/5ddb87a5-0b7d-d665-1204-a5f58b11f27c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/1a0fa27d-b95d-fc7c-ac09-545025bf6f12.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/fed9f46d-9ad9-9927-31e9-f06997916c66.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/afb3a153-b8ab-3def-c957-943480c0e8eb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/dc43f6e6-156f-64a4-ae2c-1832a890185a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/9f8aa04a-8a31-0c5d-bc25-c8e6e62ee1fc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/0ffd7deb-1238-a870-417b-3eca67ac8e1a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/42a93ba9-1513-bf73-6532-e17c8f2c4b0c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435761/2aabd0d3-af65-05c0-dadf-ec777f782f5a.png)

#####【考察】
・活性化関数にReLUを使った場合、勾配爆発が起ってしまい、学習に失敗した。
・今回初めて活性化関数に、Hyperbolic Tangent関数を適用してみた。Hyperbolic Tangentは、RNNではよく使われる。