OmniAICreator/Qiita-1.07M huggingface dataset:
Spotify APIを使ったヒット予測3:米津玄師のサブスク解禁はチャートに影響があるのか？

Spotify APIを使って今回は 8/5（水）に米津玄師のサブスク解禁によってチャートにどのような影響があったのか、を可視化してみようと思います。

##髭男、King Gnu、あいみょんに影響はあったのか？
早速チャートを見ていきましょう。

###King Gnu「白日」
![485B2F9A-73AA-4807-847A-5E83EEF734C4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/e26f44d8-c8fc-c59c-4f92-9057014d6b2b.png)

はい、影響ありますね。
矢印の場所が米津玄師がサブスク解禁した8/5（水）です。
それまではトップ10をキープしていたのですが、8/5から急に16位まで下がりました。

###official髭男dism「Pretender」
![ED34C921-5AC6-44E1-A630-12A6B5A88399.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/c816ed92-304d-3725-ad2c-259ab9cc4a0b.png)

こちらも8/5は落としてますが、8/6は再びトップ10内に。
底力がありますね。

###あいみょん「マリーゴールド」
![D7DA9399-5E8F-46F4-BD61-81115C682035.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/5b0917b8-4de8-858f-ad53-5795b05bd4cf.png)

こちらはもともと下がって来てはいましたが、8/5はどかんと順位を落としています。

##1位2位を爆走している「香水」「夜に駆ける」の影響は？
###瑛人「香水」
![17A350C1-1879-495D-AFDD-74ED8F048EBA.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/e34db6c7-fe45-b44e-2391-f54d0abccefc.png)

しばらく2位をキープしつづけている瑛人の香水ですが、微減したものの、8/6には復活。

###YOASOBI「夜に駆ける」
![5A5DC38D-FB9E-4FFC-9D38-B492F3CEF40B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/57a240fe-350f-7a0c-0291-8618264d0f01.png)

こちらも瑛人と同じく、8/5は落としているものの、8/6には復活。

##米津玄師のランキングは？
それでは米津玄師のサブスク解禁におけるランキングを見てみましょう！
最新シングルはどうなったのでしょうか。

###米津玄師「Kanden」
![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/20e763d9-ed5e-b2f8-8201-dab8d7040c68.png)
はいどーん！1位ですね。そのあと少し落としてますが、2位をキープしています。

###米津玄師「Loser」
![1A293EB0-A82C-4F4E-8467-B4429A588B6E.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/c59b7a16-f4f4-f744-3fab-2c366b151541.png)

###米津玄師「Lemon」
![161E2523-C415-48DE-9A32-C93016051E3B.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/ad809cad-4115-c5d0-ae85-7e78af5d2995.png)

###米津玄師「馬と鹿」
![EA365F7C-77AD-4913-A478-D273F1D91C23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661171/8189d121-11b5-7178-82fa-a0ec18a2236e.png)

##まとめ
このあと米津玄師がどこまでチャートに残るのか、そして順位の変動がどのような影響を及ぼすのか、見ていきたいと思います！
ではまた！
Juliaがどうしても並列化したがるときの対処

JuliaはLinearAlgebraを使っていると、勝手に並列化計算で効率化してくれる。
基本的には嬉しいが、CPU資源が限られているときにちょっと制限したい時もある。

**結論を書くと**

```julia:
LinearAlgebra.BLAS.set_num_threads(4)
```
みたいに書くとCPU使用率が制限される。



ちなみに普通に"Julia 並列化"とかで調べると

```shell:
julia -p 4
```

とか

```shell:
export JULIA_NUM_THREADS=4
```

とかするらしいがLinearAlgebraは並列化をやめてくれなかった。
IAMユーザーを請求情報にアクセスさせる

AWSアカウント登録後に外部の方のクレカ情報を登録してもらう際のメモまでに。

## Billing and Cost Managementコンソールへのアクセスのアクティブ化
https://console.aws.amazon.com/billing/home?#/account

アカウントの設定画面をスクロールして「IAM ユーザー/ロールによる請求情報へのアクセス」を編集します。

- [ ]  IAM アクセスのアクティブ化

ここをチェック入れて「更新」を押下します。


## 請求データにアクセス許可を付与する IAM ポリシーを作成する
新たに「BillingFullAccess」ポリシーを作成、適応します。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "aws-portal:*",
            "Resource": "*"
        }
    ]
}
```


## 参考
- [チュートリアル: 請求コンソールへのアクセス権の委任](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/tutorial_billing.html)
- [Billing and Cost Management コンソールへのアクセスのアクティベート](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/control-access-billing.html)
Laravel で Docker 使って開発したいなら Vessel にしておこう 

[Vessel](https://vessel.shippingdocker.com/) そこそこ使ってる人はいるんだろうけど、 [Laradock](https://laradock.io/) 使ってツラいことになってる人がそこそこいそうなので [Vessel](https://vessel.shippingdocker.com/) 使うと楽だよということをに書いておきます。

# Vessel とは

[Vessel](https://vessel.shippingdocker.com/) は簡単に下記環境を Docker で作成することができます。

- PHP7.4
- MySQL 5.7
- Redis
- NodeJS, NPM, Yarn, Gulp

ちょっと自分の環境にあわない（例えばデータベースに PostgreSQL を使っている等）場合は書き換えることができます（各種ファイルがコピーされるだけなので）。おおむね、PHP, データベース, キャッシュストレージ, NodeJS があれば 8〜9 割くらいの現場ではフィットするんじゃないでしょうか。

# 使用にあたっての注意点（追記）

Vessel は https://github.com/shipping-docker/vessel/blob/master/docker-files/docker/node/Dockerfile#L1 で `node:latest` を使っててこのままだとイメージサイズが大きいので変更したほうがよいです。

# インストール

Composerを使ってインストールできます。

```sh
composer require shipping-docker/vessel
```

これはかなり嬉しいですね。 `git submodule add` とかできれば書きたくない。

次に設定ファイルを publish します。

```
php artisan vendor:publish --provider="Vessel\VesselServiceProvider"
```

すると `docker` ディレクトリに Docker の各種ファイル、プロジェクトルートに `docker-compose.yml` と `vessel` というシェルスクリプトがコピーされます。

で最後に

```
bash vessel init
```

とすれば準備完了。簡単ですね。

# 使い方

コンテナを起動するには

```
./vessel start
```

とすればコンテナが起動します。停止するには

```
./vessel stop
```

で停止します。


この `vessel` というシェルスクリプトが上手くできていて、Docker のコマンド（自分はすぐ忘れる）を補ってくれます。例えばコンテナ内で `php artisan xxx` したい時は

```
./vessel artisan xxx (tinker とか make:controller とか)
```

でOKです。上記コマンドは

```
docker-compose exec -u ユーザー名 コンテナ名 php artisan コマンド
```

と同じですが、かなり短くなって覚えやすくなってるのがわかると思います。他にも

```
./vessel test
```

で PHPUnit でテストができたり

```
./vessel node or npm or yarn
```

で各種コマンドが実行できたり

```
./vessel dump
```

で `mysqldump` が実行できたり

```
./vessel mysql
```
で MySQL コマンドが実行できたり

```
./vessel ssh コンテナ名
```

でコンテナに入ったりできます。

あとは…そうですね。私はホストOSがUbuntuなので [dockerでvolumeをマウントしたときのファイルのowner問題](https://qiita.com/yohm/items/047b2e68d008ebb0f001) が発生して困ることが多いのですがこの辺にも対処してくれています。

# まとめ

Docker を開発環境と割り切って使うのであれば [Vessel](https://vessel.shippingdocker.com/) は非常におすすめです。そうでなくても `vessel` ファイルをちょっとカスタマイズして活用するのもいいのではと思います。私は理由があって [Vessel](https://vessel.shippingdocker.com/) が使えない現場でも `vessel` ファイルっぽいものを作って導入しています。

プロジェクトメンバー全員が Docker に習熟していれば必要ないかもしれませんが、私も Docker が得意なわけじゃないのでこういったパッケージがあるのは嬉しいですね。
C言語で競技プログラミング(AtCoder)に挑む場合の入力・変換まとめ

#はじめに
本記事では，C言語で競技プログラミング(主にAtCoder)に挑む場合の入力処理の方法についてまとめます．
さらに，入力したデータを変換したい(例えば，文字列→数字，など)場合の処理についてもまとめます．
もし，もっといい方法を知っている，とか，この入力の場合はどうすればいいですか，とかあればコメント等ください．
(出力はprintfするだけなので，まとめませんでした…)

#目次

* [入力](#入力)
    * [1行1列の数値の場合](#1行1列の数値の場合)
    * [1行複数列の数値の場合](#1行複数列の数値の場合)
    * [1行1列の文字の場合](#1行複数列の数値の場合)
    * [1行の文字列の場合](#1行の文字列の場合)
    * [複数行の場合](#複数行の場合)
* [変換](#変換)
    * [文字列の長さを調べる](#文字列の長さを調べる)
    * [文字から数字への変換](#文字から数字への変換)

#入力

##1行1列の数値の場合

###入力例

$N$
Nは数値
###実装例

```c
int a;
scanf("%d", &a);
```

#####注意
scanfのとき，変数の前に&をつけるのを忘れないように
小数入力の場合は，int→float, %d→%fに変えること．

##1行複数列の数値の場合

###入力例
$N$
$a_0\quad a_1\quad\dots\quad a_N$

Nは数列$a$の長さ
###実装例

```c
int n, a[100];
scanf("%d", &n);
for(int i = 0; i < n; i++){
    scanf("%d", &a[i]);
}
```

#####注意
&を忘れない

##1行1列の文字の場合

###入力例

$C$

Cは1文字(例えば'a'など)

###実装例

```c
char c;
scanf("%c", &c);
```

#####注意
文字の場合は，%cを使う
文字列の場合とは異なるので注意


##1行の文字列の場合

###入力例
S

Sは文字列("abcd", "efg123"など)

###実装例
```c
char s[101];
scanf("%s", s);
```

#####注意
文字列の場合は，&はいらない！！
文字列を入れる配列の長さは，文字の最大長さ＋１にする必要がある(文字列は，最後に終端文字\0が入るため)

##複数行の場合
基本は1行の場合と同じで，for文で回して読みこんでいこう！！

#変換

##文字列の長さを調べる

###やりたいこと
文字列S = "abc"　が与えられたとき，その長さ3を得たい

###実装例

```c
#include <string.h>
```
をしたのち，例えば配列sの長さを調べたい場合は，

```c
n = strlen(s);
```
のように，strlen関数を用いると，文字列の長さnを得られる．

##文字から数字への変換

###やりたいこと
文字を数字に変換したい．
例えば，char型の’3’をint型の3に変換したい

###実装例1
```c
int a;
scanf("%c", &a);
a -= '0';
```

文字を計算する場合，文字コードを数値として考えて計算することになる．
’0’から’9’までの文字コードは連番なので，'0'の文字コードを引いてあげると，文字’0’は0，文字’1’は1，...と数値が得られる．
###実装例2

```c
int d;
char n_list[] = {'0','1','2','3','4','5','6','7','8','9'}, a;
scanf("%c", &a);
for(int i = 0; i < 10; i++){
    if(n_list[i] == a){
        d = i;
        break;
    }
}
```

のように愚直に変換する方法もある．
GitHubに100MB超えのファイルをプッシュしてエラーになった

Railsアプリを開発中に、GitHubにプッシュできなくなりました。
GitHubに100MB制限があることを知らず、少し苦戦しましたので備忘録として。

##エラー

いつもどおり、`git add` `git comit` `git push` と進めるとエラーが出ました。
development.logが100MBを超えてますよ、ということです。

```terminal
・・・
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: Trace: 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File log/development.log is 150.13 MB; this exceeds GitHub's file size limit of 100.00 MB
・・・
```

100MB超ファイルをアップする方法もあるようですが、今回はLogファイルだったので削除する方針で進めます。

**100MB超ファイルをプッシュする方法（参考）**
https://qiita.com/kanaya/items/ad52f25da32cb5aa19e6




##解決手順

1. 巨大ファイルのコミットを取り消す
1. 巨大ファイルを削除（Gitから除外）
1. 再度コミット
1. 再度プッシュ

##1.巨大ファイルのコミットを取り消す

直前のコミットであればこれで取り消せます。

```terminal

$ git reset --hard HEAD
```

直前ではないときは、該当するリビジョンを調べてその1個前まで戻ります。

```terminal
$ git log
コミット履歴がズラッと出るので、該当リビジョンを確認

commit 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0
↑これが該当リビジョンの1個前
```

```terminal

$ git reset --soft 13ec04b062a0cd9bb1a20e6a0b921ec7cf7396c0
```

これで巨大ファイルのコミットの前に戻りました。

##2.巨大ファイルを削除（Gitから除外）

単純に巨大ファイルを削除（中身を空に）してもよいのですが、Railsの仕様上いずれまた100MBを超えることになるのでGitから除外します。

####.gitignoreでGitから除外する

.gitignoreに除外ファイルを追加します。

```text:.gitignore
/log/development.log
```

**.gitignore 書き方（参考）**
https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff

**最初から除外したほうが楽**
このツールで、各言語に最適化された.gitignoreがゲットできます。
https://www.toptal.com/developers/gitignore

##3.再度コミット

あとはいつもどおりと言いたいところですが、ちゃんと除外されているか確認しましょう。
自分はここで何度もやり直しました。

####除外してもコミットされてしまうときは

Gitのキャッシュが残っている場合は、こちらを参考にキャッシュを削除してください。
（ちなみにVS CODEだと、除外ファイルはグレーアウトされます。）
https://qiita.com/fuwamaki/items/3ed021163e50beab7154

##4.再度プッシュ

最後にプッシュすればコンプリートです！
Sidequestのインストールやり方：オキュラスクエストのソフトはめっちゃ高い、もっと安いソフトがないのか？😱

#オキュラスクエストのソフトは高い！！

オッケーじゃあ君は前回の記事を読んで、「よっしゃ、エリックおにいさんみたいにVRを遊びたいと」思ったでしょうｌ
そしてさっそくオキュラスを６万円で買って、ガーディアンを立って、心の中でわくわくゲームを考えているだろう。

![116791756_2446631038963453_7172678761475911316_n.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393501/aec278a8-d6aa-398b-fae0-8f4c98437707.jpeg)


・・・ **HOLY SHITマジでオキュラスクエストのソフトは高い！😱😱😱😱😱😱😱😱**

ほぼすべては２千円、３千円のクラスだ。　たまには無料ソフトもありますが、マジでオキュラスの弱点は、オキュラスクエストを買うと、「オキュラスの世界へようこそ」の無料ソフトとバンドルになってないんだ。
マジで、オキュラスを最初の起動すると、セットアップ中でWifiの情報、Facebookの情報、クレジットカード情報を聞いて・・・
そして新ユーザーはストアページに置くんだ。まじっかよ。

ファミコンを買うと、スーパーマリオはほぼ無料だったでしょ。
ホスピタリティなし！

麻薬の売りも約束を守ってる：**「最初は無料！」**

とりあえず今日の記事に紹介したのは、オキュラスクエストの無料か、小さいお金で楽しめる方法を教えたいと思います

## SideQuestでクエストのアプリをサイドローディング！

オキュラスクエストの公式ストアとは、マーク・ザッカーバーグがOKが出ないと、ストアで売れません！の権利・・・かもしれません。
とりあえ公式ストアに入るのはめっちゃ厳しいです。俺は「自由放任」の派だから、こういうの「キュレーション」に駒がして新入りのビジネスを邪魔するのは嫌いです。

そのため、アマチュア開発者でもクエストのソフトが売れるのストアフロントがあります。それは

**[Sidequestです！！](https://sidequestvr.com/)**

### Sidequestのインストールやり方

俺が分かってる、日本人は英語怖いだから、さっそくハウツーを書きます。

ちなみに、このめっちゃ可愛いユーチューバーは英語ですべてを教えていただきます。勇気が出してみて、ビデオ見ながらやってみてください！

最初のセットアップ（[スクリーンショットはマニュアルの通り見てくださいね。](https://sidequestvr.com/setup-howto )）

1. [Sidequestをダウンロード。Download Sidequestを押してね](https://sidequestvr.com/setup-howto)
2. [オキュラスのダッシュボードにログインして、新しい団体を作るをしてください](https://dashboard.oculus.com/)
3. [Windowsなら、ドライバーをダウンロードして、Zipファイルを解凍してね。`android_winusb.inf`に右クリック＆インストールだ。](https://developer.oculus.com/downloads/package/oculus-adb-drivers/)
4. 上記のすべてやったら「開発者権利」が持っています。オキュラスのスマホアプリか、本体で開発者モードをONしてください。
5. USBのケーブルをつないだら、本体は「USBデバグの権利」を聞いていますね。あれはOKしてください。
6. 最後で、本体でSettings > Quest > More Settings > Unlock Patternのアンロックパターンをオフしてください。

じゃあすべて大丈夫だったら、クエストがパソコンにUSBで繋いだままインストールができます。サイドクエストのアプリの左上のアイコンは緑色はずです。

赤だったら、よくある問題はクエストでスリープモードになっちゃったか、ダイアログが開いています。オキュラスの本体で何かが対応が必要ものがあるかどうか確認してください

もしそれもダメだったら、本体が開発者モードになったら、再起動が必要です。PCとオキュラスの再起動をやってみてください。

![browse.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393501/35fbc827-1e73-c8e9-7e1a-1218a4f6c63f.png)

もしそれができたら、BROWSEを押して、FREEにしてください。そして無料ソフトがすぐにダウンロードができます。

#### インストールしたのに、ゲームはどこ？？？？

インストールができたら、ちょっとアプリの起動するため、ちょっと不明点があるはずです。

1. 本体でライブラリーに開いて
2. 「提供元不明のアプリ」でサイドクエストのアプリがあります。

**普通のメニュー**

![old.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393501/3ce09912-6730-583e-baca-e0cbb70d28ad.jpeg)

左で選べるんだね。

**新ユニバーサルメニュー**

![universal.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/393501/a27deff0-c8f9-29b7-9e6f-ac6f60fff2c6.jpeg)


右上のメニューを開いて、提供元不明のアプリでやっと見つかれます。すごく大変だった！


### おすすめソフト

最後でおすすめソフトを紹介します

- Tea for God　(ロボットの形で、ルームスケールのゲーム！)
- Pavlov　（カウンターストライクみたいなゲーム）
- Hand Physics Lab （コントローラーなしでものを壊すゲーム。マジでいいテックデモだ。これはOculusとバンドルしたら、いいだね！）
- Virtuoso （なんか音楽作れるソフト）
- なんでもいいだから、ダウンロードしてね！

まあそいうことですから、明日もよろしくお願いします！
自動運転(Lidar) ROS/ubuntu

自動運転のキーセンサーとして、Velodyne_Lidar を使うための解説記事です。
ROS/ubuntu　の環境です。

<object data="velodyne_tutrial" type="application/pdf" width="100%" height="100%">
   <p><b>表示されない時の表示</b>: <a href="pdf.pdf">PDF をダウンロード</a>.</p>
</object>
新旧PP変更点

#現象
・PP2018でドライブ指定のURI（C:\Folder\File）が使えなくなった
・PP2018では$(UserDir)が/userdirに変更

#原因
PP2019からファイルアクセス制限が強化

#対策
・Admin PortalのSet up > Server Configurationのページで、File BrowsingをUnrestrictedに変更する
・Maintenance > Manage ServerからApach, Tomcatサービスを再起動する
Mac Book Proを自分好みにカスタマイズする

# はじめに

新しいMacBookPro上に自分が利用する環境を構築する必要があったので、備忘録として記事にしました。

# Mac Book Pro自体の設定
## キーボードの設定

### 認識スピードをあげる
キー入力のリピート速度及びリピート入力の認識までの時間を調節します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/22d87dfc-85d8-60c4-16ef-4cb6c6b0f91e.png)

### ライブ変換機能

個人的に、ライブ変換機能が使いづらいので、オフに設定します。
「入力ソース」の「日本語」の中の「ライブ変換」のチェックボックスをオフにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/3bf58f2c-8b79-0504-97bb-42ea880833cc.png)

### CapsLockキーの変更
個人的に、CapsLockを利用する機会はほぼ無いので、キーの割当をControlに変更しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/c33d14b2-b39e-353f-ba85-ea8c88421bae.png)

## UIの設定

### バッテリーのパーセンテージ表示

バッテリーマークをクリックして割合を表示にチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/401878/9098c3c2-27c5-d6a6-5ffe-cc0f5282ecef.png)

## zshの設定

### Gitのブランチ名を表示するための初期設定

```sh:Gitブランチ名表示設定用設定
% cd
% mkdir .zsh
% curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh -o ~/.zsh/git-completion.zsh
% curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o ~/.zsh/git-prompt.sh
```

### 設定ファイルのコピー

```sh:zsh設定ファイル
# gitのパス指定
export PATH=/usr/local/bin/git:$PATH

# プロキシの設定
export http_proxy=http://XXXXX:8080
export https_proxy=http://XXXXX:8080

# 色使用有効化
autoload -Uz colors
colors

# 補完機能有効化
#fpath=(/usr/local/share/zsh-completions $fpath)
fpath=($(brew --prefix)/share/zsh/site-functions $fpath)
autoload -Uz compinit
compinit

# 日本語ファイルを表示可能にする
setopt print_eight_bit

# ビープ音を無効化
setopt no_beep

# ビープ音の無効化
setopt nolistbeep

# my aliases
alias ls='ls -G'
alias l='ls'
alias la='ls -A'
alias ..='cd ..'
alias o='open'
alias p='pwd'

# Git の設定
## 参考にしたページ
## https://medium.com/@m_yukio/macos-zshでgitのブランチ名を表示させる-fe04afabb5b8
fpath=(~/.zsh $fpath)
if [ -f ${HOME}/.zsh/git-completion.zsh ]; then
       zstyle ':completion:*:*:git:*' script ~/.zsh/git-completion.zsh
fi
if [ -f ${HOME}/.zsh/git-prompt.sh ]; then
       source ${HOME}/.zsh/git-prompt.sh
fi
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto
setopt PROMPT_SUBST ; PS1='[%F{cyan}%m%f@%n %F{green}%c%f]%F{red}$(__git_ps1 " (%s)")%f\$'
```

### ターミナル色の設定
以前から利用していた使い慣れた配色にする

[Solarized - Ethan Schoonover](http://ethanschoonover.com/solarized)を参考に導入する

*Solarized をダウンロード*

下記のコマンドでダウンロードする。

```sh:テーマのダウンロード
git clone https://github.com/tomislav/osx-terminal.app-colors-solarized solarized.git
```

ダウンロードしたものを
[Paloalto]アクセス先のURLを確認する方法

トラブルシュートのとき、以下の方法で利用するURLを確認したりできますの覚書

------------------------------------------------------------
1．Objectsタブ -> セキュリティプロファイル -> URLフィルタリング -> 追加
2．"オーバーライド"タブで以下のように設定します。

ブロックリスト： *
アクション： alert

3．許可ポリシーにURLフィルタリングプロファイルを指定します。
　　→カスタムURLカテゴリの項目は「any」にしてください。
4．コミットを実施
5．URLフィルタリングログからどのURLにアクセスしているかご確認ください。

------------------------------------------------------------
※「*」だけを指定すると、検知したすべてのURLがログに残ります。
※利用するURLをカスタムURLカテゴリに追加して再度ご確認ください。
　URLに不足があると、Webサイトによってはレイアウトが崩れたり正しく表示されない場合もあります。
【Python】Django でHTTPステータスコード403/404/500用の画面を作ってみた

# はじめに
Djangoの参考書で、
**HTTPステータスコード403/404/500用の画面を作る** と言う
セクションがあり、いざ *runserver* しても404エラーを起こしても
カスタマイズした404画面が表示されなかった。

## *DEBUG = True* だと表示されない
ステータスコード403/404/500用の画面を作るには
*templates* ディレクトリの"直下"に
`403.html` `404.html` `500.html` を作成するだけです。

ただ、このまま *runserver* しても
この画面が表示されます。（作った画面と違う...)

![page_not_found.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641252/400b3923-32b7-c738-9b46-ba91fdca21b5.png)

画面下部に
`You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.`
と表示されています。

[DeepL](https://www.deepl.com/translator)で翻訳してみる。

`このエラーが表示されるのは、Django の設定ファイルで DEBUG = True を設定しているからです。これを False に変更すると、Django は標準の 404 ページを表示します。`

*DEBUG = True* だと、ダメっぽい。

## *DEBUG = False* にしてみる
```python:settings.py
DEBUG = True
```
に修正して *runserver* してみる。

### *CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.*
エラーが出てしまったので、解決する。

```python:settings.py
DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1']
```

`ALLOWED_HOSTS = ['127.0.0.1']` を追加して
*runserver* してみる。

無事にカスタマイズした404画面が表示されました。

![page_not_found_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641252/2961216f-413c-cd70-4f9e-9391039633d3.png)

```python:404.html
<h1>ページが見つかりません。</h1>
```

## 参考文献
大変参考になりました。ありがとうございます。

**Djangoでカスタマイズした404ページを表示する**
https://djangobrothers.com/blogs/django_404_page/
お名前.comにて、拡張子htmlのままphpを動かす（レンタルサーバー RSプラン）

初投稿です。

今まで自分が利用したことのあるレンタルサーバーとは異なったため、サポセンに問い合わせたら

>お問い合わせの件につきまして、「.html」ファイルを別の拡張子で
>動作させる場合は.htaccessにて AddHandler など、「.html」ファイル
>をcgiとして実行いただく記述でご利用いただけます。
>
>なお、独自にご準備された.htaccessの設置についてはサポートを
>控えさせていただいております。
>
>具体的な記述や設定方法につきましては、市販の書籍や参考書など
>にてご確認くださいますようお願い申しあげます。

とのことでしたのでインターネットで調べたところ、Qiitaに有益な情報を見つけました。

参照元：[お名前.comにて、拡張子htmlのままphpを動かす](https://qiita.com/taguchinbo/items/bf560c3b6968f9fe69f3)

こちらはお名前.comでも共用サーバー SDプランのことなのか、レンタルサーバー RSプランだとこのままでは動作せず、どなたかが同じように悩んで時間を浪費しないようメモします。

#対処法

基本的に参照元のままです。最低限のみ記載します。

①まず、「.htaccess」に以下を記入（追記）します。※同じです

```.htaccess
Action myphp-cgi /php.cgi
#AddHandler myphp-cgi .html
<Files ~ "^index\.html?$">
  AddHandler myphp-cgi .html .htm
</Files>
```

パーミッションは644でも問題ありませんでした。

②次に、「php.cgi」というファイルを用意し、以下のように記入します。

```php.cgi
#! /usr/bin/bash
exec /usr/bin/php-cgi
```

php-cgiまでのパスが異なります。
参考：[【レンタルサーバー RSプラン】各種パス情報を教えてください](https://help.onamae.com/answer/20164)
パーミッションは700にしました。

いずれのファイルも
文字コード：UTF-8
改行コード：LF
で動作しました。

ディレクトリを変える場合などは参照元などを参考にしてください。
もし引用方法などに間違いなどありましたらご指導いただけたらと思います。

ありがとうございました。
[Angular]テスト用の環境変数を読み込ませる

テスト時にテスト用の環境変数を読み込ませる方法です。

## 準備
```diff:angular.json
"projects": {
  "[project-name]": {
    "architect": {
      "test": {
        "options": {
+         "fileReplacements": [
+           {
+             "replace": "src/environments/environment.ts",
+             "with": "src/environments/environment.test.ts"
+           }
+         ]
        }
      }
    }
  }
}
```

```diff:src/environments/environment.test.ts
+ export const environment = {
+  production: false
+ };
```

## 実行
これで`ng test`実行時に、environment.test.tsが読み込まれます。
Ajax + Python + PostgreSQL のサンプル

## はじめに
 * データベースからデータを取得し、動的なWebページを作成するサンプル

## サンプル
* index.html

```
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js">
</script>

//var data = 10;
//var data_list=['hoge','geho];

function get_data(data, data_list){
  var request = {
    data1 : data,
    data2 : data_list
  };
  $.ajax({
    url: 'get_data.py',
    type: 'POST',
    data: JSON.stringify(request)
  })
  .done(function(data){
    result = JSON.parse(data);
    for (i=0;i<result.length;i++){
      console.log(result[i][0]);
    }
  })
  .fail(function(){
    console.log('failed');
  });
};
```

* get_data.py

```
import sys
import json
import psycopg2

# connect postgreSQL
users = 'postgres'  
dbnames = 'postgres'
passwords = '*******'

conn = psycopg2.connect(" user=" + users +" dbname=" + dbnames +" password=" + passwords)
cur = conn.cursor() 

# index.htmlから飛ばしたデータを取得
recieve = sys.stdin.read()
params = json.loads(recieve)

data = params["data1"]
data_list = params["data2"]

# SQL文を作成し実行
sql = 'select data from dataTbale where (AAA = data) and ((BBB = data_list[0]) or (BBB = data_list[1]))'
cur.execute(sql)
results = cur.fetchall()
conn.commit()

# 後片付け
cur.close()
conn.close()

# index.html側に通知
print('Content-type: text/html\n')
print(json.dumps(results))

```
WindowsでDockerを使ったStorybookでHMRが効かない

## 状況
Windowsのファイルシステム上に存在するdocker-compose.ymlでLinuxコンテナを起動してStorybookを動かしたのですが、HMRが効きませんでした。

## 原因
WindowsとLinuxのファイルシステムの違いにより、ファイルの変更（inotify）をコンテナが検知できないことが原因のようです。

## 回避策
今回は以下の設定をStorybookのwebpack設定に追加して強制的にファイルを監視することにしました。

```javascript:webpack.config.js
module.exports = async ({ config }) => {
  // --中略--
  config.watchOptions = {
    aggregateTimeout: 200,
    poll: 1000
  }
  // --中略--
```

この方法はあまりスマートではないですが、簡単に対策が取れます。
他の対策として[こちら](https://qiita.com/takeshy/items/a8452a9030d063227afa#b%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%81%B4%E3%81%A7polling%E3%81%A7%E6%9B%B4%E6%96%B0%E6%97%A5%E6%99%82%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E5%A4%89%E6%9B%B4%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%81%B4%E3%81%A7%E8%A9%B2%E5%BD%93%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92touch%E3%81%99%E3%82%8B)の記事の回避策も参考になるかもです。状況や環境によってどの策が良いかは変わるかと思います。

## 終わりに
都合につきWindowsを使わなければならないので、WindowsとDockerのさらなる発展を祈っております。。
UIBarButtonItemのSystemItemで使えるUIImageを取得する



#経緯
アプリからTwitterやメモアプリ等の外部アプリに画像など、情報を共有したい時のボタンにアクションボタンを使用したい場合がある
↓こういうやつ
![IMG_7856.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246750/85c14765-0d7b-3d42-988a-2a8658b9e9b0.png)
こういう場合に限らず、画像の横にある本の画像、またはゴミ箱画像とかも使いたい。
UIBarButtonItemだと使えるけど、それからUIImageを引き出す事は基本的にできない…
それに画像をネットから同じような画像を探すにしても、商用利用などを確認するのも面倒すぎる…🤦‍♂️

という事で、UIBarButtonItemのSystemItemからimageだけを使用する方法を共有します💁‍♂️

# 実装
検証環境は下記の通りです
OS：10.15.6
Xcode：11.6
Swift：5.0

早速ですが、実装したコードの紹介をします

``` UIBarButtonItem.SystemItem+extention.swift
extension UIBarButtonItem.SystemItem {
    func image() -> UIImage? {
        let tempItem = UIBarButtonItem(barButtonSystemItem: self,
                                       target: nil,
                                       action: nil)

        let bar = UIToolbar()
        bar.setItems([tempItem],
                     animated: false)
        bar.snapshotView(afterScreenUpdates: true)

        // imageを取得する
        let itemView = tempItem.value(forKey: "view") as! UIView
        for view in itemView.subviews {
            if let button = view as? UIButton,
                let image = button.imageView?.image {
                return image.withRenderingMode(.alwaysTemplate)
            }
        }
        return nil
    }
}
```

使う時はこのように↓

```swift
UIBarButtonItem.SystemItem.action.image()
```
実行結果↓
<img width="446" alt="スクリーンショット 2020-08-12 11.24.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246750/6b0f9092-7770-c638-bd73-d5e567cb81ea.png">
問題なく表示できました〜！☺️

#候補： SF Symbol・systemNameを検討する
そもそも論ですが、iOS13からは**SF Symbol**や**UIImageViewでsystemName**が使用できるようになっています。
使用する方法は以下の通りです。

```swift
// UIKit
UIImageView(systemName: "xxx")

// SwiftUI
Image(systemname: "xxx")
```
この"xxx"に入る文字列は、下記URLよりDLできるSF Symbolアプリから確認できます。
https://developer.apple.com/design/resources/
FigamaやSketch等のデザインツールを利用すると細かくサイズ等を調整したりできるみたいなので
対応できる方はこっちの方がいいと思います。
**※記事投稿時点ではBeta版です**

## 最後に
Twitterのアカウントがありますのでフォローしてくれると嬉しいです！！
[@swift_nita](https://twitter.com/swift_nita)
なお今回のサンプルはGithubに上げていますのでご参考までに！
https://github.com/ni-ta/ButtonItemSystemItem


# 参考
[Use UIBarButtonItem icon in UIButton](https://stackoverflow.com/questions/21187885/use-uibarbuttonitem-icon-in-uibutton/36196295#36196295)
[SF Symbolsの使い方とカスタマイズの仕方](https://kudakurage.hatenadiary.com/entry/2019/10/25/085434)
不具合発生に対するアプローチ１_メモ_20200812

#不具合に対するアプローチ


**１．「完成」の基準**

　　　　時間は有限で、たいていは開発現場で働く場合納期というものがあります。
　　　　納期がやばい！と急いで全機能を作り終えたとしても、バグだらけだったり、仕様と違う動きをするような
　　　　品質の悪いコードでは完成とは言えません。

　　　　具体的には、クラスは仕様通り分存在するけど実際に動かしてみるとバグだらけで変な挙動をするようなもの、
　　　　仕様と少しだけ違う動きをするものもダメです。

　　　　**・進捗**

　　　　開発の進み具合のことを**進捗**といいます。
　　　　この進捗を「０～１００％の１本の直線」のように考えると、つい品質のことを忘れてしまいがちです。

　　　　進捗状況の把握は自分の立ち位置によってかなり考え方が変わると思われますが、
　　　　自分で進捗状況を管理することができる、ということは大きな一歩だと思います。
　　　　マルチタスクになった場合、筆者はエクセルなどで管理しています。まだまだ資料なしにはといった感じですね。

　　　　「進捗管理なんかできて当たり前やろ！」と思われる人もいるかもしれません。
　　　　ですが、実はできない人のほうが多い世の中なのです。なので進捗管理できているなと感じる方は
　　　　自分をほめてあげてください。


　　　　**・スコープ**

　　　　開発すべき範囲(すべてのクラス)のことを**スコープ**といいます。
　　　　筆者は今学習していて初めて知りました。

　　　　スコープと品質の両方に対して進捗度１００％を達成して初めて完成といえます。
　　　　目標とする期間内で完成にこぎつけなければいけません。


![コメント 2020-08-12 110315.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687164/3fc450a3-96be-876b-06d4-98bc57e737b8.png)



**２．品質の高さの度合い**

　　　品質の高さを評価する考え方は無数にありますが、まずは以下の図のように４段階で考えてみましょう。


![コメント 2020-08-12 110316.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687164/a767c4db-e9ae-70bb-e663-f7f980c661b7.png)


　　　　これらの段階は私たち自身が動かして確認してみなければわかりません。
　　　　これらの段階を卒業したかを判断するには、実際に動かしテストをして確認するしかないのです。



本日の記事はいかがでしたでしょうか。
また、間違っているなという知識があればご教示いただけると幸いです。
databricks on AWS deploy手順~その1~

# はじめに
databricks on AWSをdeployするまでの手順をご紹介したいと思います。
databricks on AWSのdeploy完了までには
databricks側とAWS側でいくつかの登録&設定作業が必要となっているため以下3章に分けてご説明いたします。

- その1 databricksアカウントの作成 ← 今回はここ
- その2 AWSアカウントとの連携
- その3 databricks用S3バケットとの連携


# 本題
###➀databricksアカウント登録
では、さっそく本題に参ります。
以下URLから登録画面に飛びます。
https://databricks.com/try-databricks?_ga=2.231496607.1278047542.1597105290-1399252035.1593565763
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/079f5388-c3a2-ffbb-5b89-228717c5a739.png)

必要情報を埋めていきましょう。
How would you describe your role?(あなたは役割なに？)
What is intended use case?(用途は？)
の質問に関しては、正確でなくてOKです。
※当てはまるものがなければ、とりあえず何か選択して先に進みましょう。
すべて記入したら画面下部の「SIGN UP」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/cf1cc416-bacc-4e85-9baa-8c85f3af2028.png)

記入漏れなどがなければ、この画面に進みます。
<img width="960" alt="2020-08-12_10h10_05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/9572be91-4a88-73f1-cfb0-7ea1191a2319.png">
画面下部の
GET STARTED ON 「Azure」OR 「AWS」
でAWSの方をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/96a113b7-f357-69e5-bf45-a49fe3750788.png)

問題がなければ、databricksから以下のメールが届きます。
メール内のリンクを踏んでdatabricksアカウントのパスワード設定画面に飛びます。
※メール内の2つのリンクは同じですので、どちらからでもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/2543940b-16d3-42f8-2119-21c89202def5.png)

パスワード設定画面です。
ここでパスワードを設定します。メモを忘れずに。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/3a85f6fa-f927-e713-c5c5-3dff402e8361.png)

###➁決済情報の登録
パスワード設定が完了し、ログインすると以下画面になります。
画面左部の「Billing Details」欄から決済情報の登録を行います。
必要事項の記入したら「Next Step」をクリックで登録は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593135/c0f37ad6-1fb4-af5b-b10d-d4094e917db1.png)

その1の内容はここまでです。


# おわりに
今回はdatabricksアカウント登録~決済情報の登録までを行いました。
次回「その2」ではAWSアカウントとの連携についての作業を行います。
引き続き頑張っていきましょう。
ひとまずお疲れさまでした。
RPA技術者検定とUCPはどんな方におすすめ？？

こんにちは！Peaceful Morningでインターンをしている高橋です！

以前のRPA HACKのQiitaの投稿で、
**UiPath Certified Professional(UCP)というUiPath社の認定資格とRPA技術者検定という、WinActorの認定資格**について紹介しました！

まだその記事をご覧になってない方はこちらをご覧ください↓
**RPA技術者検定とは？ 概要〜勉強方法まで詳しく解説！**
https://qiita.com/RPAHACK/items/c9efdbbe0f7cd86e4622

**UiPathに認定資格はあるの？基本情報を解説！**
https://qiita.com/RPAHACK/items/399a7bb700a0556ba8ad

今回はそのRPAに関する資格を取っておいた方がいい人はどんな方が当てはまるのか、について紹介していきたいと思います。

取得しようかまよっていた方はこちらを参考にしていただけたらと思います。

まずは、WinActorやUiPathの情報を集めたいという方はこちらがおすすめです↓
**Winactorってどんなツール？という方はこちらをご覧ください↓**
**純国産RPA『WinActor®』とは？歴史～特徴まで完全ガイド**
https://rpahack.com/winactor

**WinActorがさらに進化！ WinActor Ver.7を解説**
https://rpahack.com/winactor_ver7

**UiPath StudioXでCSV/Word/Outlookメールを自動化！**
https://rpahack.com/uipath_studiox_4

**【UiPath StudioXの使い方】Excelを自動化！**
https://rpahack.com/uipath_studiox_3


##RPAの資格はどんな方におすすめ？

ここでは、RPAの資格を持つべきメリットを紹介していきます。

###名刺代わりのアピールポイントが欲しい方
WinActorやUiPathは近年、大企業を中心に導入する企業が増加傾向にあります。大企業への就職や転職へのアピールポイントとして使用するのはいかがでしょうか。

またこれからRPAのフリーランスとして活躍したい方もこの資格検定をもっていると信頼度が高まり、次の案件への足がかりにもなるのではないでしょうか。

RPAは最近企業単位では注目されてはいますが、就活生や転職の方にはまだまだ浸透しきっていないのが現状であると思います。そのため、採用担当の方の目に止まりやすくなると考えます。

###RPAの学習に目標が欲しい方

RPAをはじめてみたものの、意外と難しくて途中で挫折してしまったという方は、もう一度目標をもって、その目標に沿ってRPAを勉強するのはどうでしょうか。

UiPath Certified Professional(UCP)、RPA技術者検定、両者とも段階的な試験となっているので、着実にすすめていきたい方にはおすすめです。

##注意点
UiPath Certified Professional(UCP)に関しては、英語のみでの受験となりますので、ご注意ください。

##まとめ
RPA技術者検定&UiPath認定資格はWinActorやUiPathについて専門性を高めたいと思える人、RPAを始めたはいいけど何か目標が欲しい人、などにおすすめであると考えます。

これからRPAを始めたい方などは、やみくもにRPAをはじめるのではなくこのような検定に受かるための勉強していくことで、ご自身のスキルアップにつながるのではないでしょうか。

またRPAの実力に自信がある方もこの試験をためして、自分の腕試しをしてみるのもよいでしょう。
検索機能の実装

##検索フォームを作成
検索の入力欄とボタンには、フォームを使います。

```index.html.erb
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form| %>
  <%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %>
  <%= form.submit "検索", class: "search-btn" %>
<% end %>
```
##searchアクションのルーティングを設定
```routes.rb
collection do
  get 'search'
end
```
を以下のように追加

```routes.rb
Rails.application.routes.draw do
  devise_for :users
  root to: 'tweets#index'
  resources :tweets do
    resources :comments, only: :create
    collection do
      get 'search'
    end
  end
  resources :users, only: :show
end
```
##検索するメソッドをTweetモデルに定義
```tweet.rb
def self.search(search)
 if search
   Tweet.where('text LIKE(?)', "%#{search}%")
 else
   Tweet.all
 end
end
```
を以下のように追加

```tweet.rb
class Tweet < ApplicationRecord
  validates :text, presence: true
  belongs_to :user
  has_many :comments

  def self.search(search)
    return Tweet.all unless search
    Tweet.where('text LIKE(?)', "%#{search}%")
  end
end
```
##searchアクションをコントローラーに定義
コントローラーに基本の7つのアクションには含まれない、searchアクションを定義します。

```tweets_controller.rb
before_action :move_to_index, except: [:index, :show, :search]

def search
 @tweets = Tweet.search(params[:keyword])
end
```

Tweetモデルに書いたsearchメソッドを呼び出しています。seachメソッドの引数にparams[:keyword]と記述して、検索結果を渡しています。
また、未ログイン状態にトップページへリダイレクトされてしまうことを回避するため、before_actionのexceptオプションに:searchを追加しています。
##検索結果画面のビューを作成しよう
app/views/tweetsディレクトリにsearch.html.erbを作成する。

検索結果を表示するように記述します。

```search.html.erb
<%= form_with(url: search_tweets_path, local: true, method: :get, class: "search-form") do |form| %>
  <%= form.text_field :keyword, placeholder: "投稿を検索する", class: "search-input" %>
  <%= form.submit "検索", class: "search-btn" %>
<% end %>
<div class="contents row">
  <% @tweets.each do |tweet| %>
    <%= render partial: "tweet", locals: { tweet: tweet } %>
  <% end %>
</div>
```
openssh `load pubkey "mykeyfilepath": invalid format`

# 背景

Cygwin の ssh である時から以下の出力が出るようになって気になっていた。
今年（2020年初めくらいから）。

```
$ ssh host
load pubkey "/home/{user}/.ssh/{filename}.pem": invalid format
```

この出力が出るホストと出ないホストがあって、その差が分からなかった。

`~/.ssh/config` で `IdentityFile` で指定したホスト名で ssh していた。


Cygwin や OpenSSH のバージョンは以下

```
$ uname -a
CYGWIN_NT-10.0 PC-MORINO 3.1.6(0.340/5/3) 2020-07-09 08:20 x86_64 Cygwin

$ ssh -V
OpenSSH_8.3p1, OpenSSL 1.1.1f  31 Mar 2020
```

# 解決方法

以下の出力がでているとして...

```
load pubkey "/home/{user}/.ssh/{filename}.pem": invalid format
```

公開鍵をメッセージのファイル名の末尾に `.pub` を付加したファイル名で置くだけ。
`/home/{user}/.ssh/{filename}.pem.pub` 

# 参考情報

* [\[SOLVED\] openssh load pubkey "mykeyfilepath": invalid format / Applications & Desktop Environments / Arch Linux Forums](https://bbs.archlinux.org/viewtopic.php?pid=1909206#p1909206)
【chrome拡張機能】ブラウザの一部分を明るくする

よくyoutubeでホラーゲーム実況(けそポテトのジェイソン動画)を見るが、こういう系のゲームは画面が暗い。
かといってディスプレイを明るくすると目に悪い気がするし、次に白いページを開くと目がちらつく

そこで、動画の画面だけを明るくすれば省電力と目に優しくなる(はず)

というわけでyoutubeの動画の明るさを調整するchrome拡張機能を作っていく

browser_actionとしてアイコンをクリックしたら5段階で明るさが調整される仕様で、6回にクリックしたときは明るさがもとに戻る。

それでは作っていく。

なお、以下のコードはこちらのサイトの雛形を利用しています。
[【結構簡単】ブラウザアクションボタン発火の自作Chrome拡張機能の作り方＆サンプル](http://degitekunote.com/blog/2016/11/02/chrome-extension/)

#manifest.json

```json
{
	"manifest_version": 2,
	"author": "",
	"homepage_url": "http://example.com",
	"name": "明るさ調整",
	"description": "動画を5段階で明るくする",
	"version": "0.1",
	"icons": {
		"32": "icon_32.png",
		"48": "icon_48.png",
		"128": "icon_128.png"
	},
	"content_scripts": [{
		"matches": ["<all_urls>"],
		"js": ["script.js"]
	}],
	"background": {
		"scripts": ["background.js"]
	},
	"browser_action": {
		"default_icon": "icon_32.png",
		"default_title": "明るくする"
	},
	"permissions": [
		"tabs",
		"background",
		"http://*/*",
		"https://*/*"
	]
}
```
必要なmanifest.jsonはこれになる。
とくに目立ったことをしているわけではない

#background.js
```javascript
chrome.browserAction.onClicked.addListener(function(tab) {
	chrome.tabs.sendMessage(tab.id, "Action");
});
```
ここでは拡張機能のアイコンをクリックしたらcontetn_scripthへActionを送っている
#contetn_sctipt
```javascript
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
	if (request == "Action") {
		brightnessChange();
	}
});

function brightnessChange() {
	if(localStorage.lev){
		localStorage.lev=Number(localStorage.lev)+1
		if(localStorage.lev>5){
			localStorage.lev=1
		}
		
	}else{
		localStorage.lev=2;
	}
	console.log(localStorage.lev);
	document.querySelector("video").style.filter="brightness("+localStorage.lev+")"
}
```
ローカルストレージを使って5段階でfilterのbrightness強度を調整している。
#出来栄えは
![activitymore-CF56D8DA-BA16-4BB2-8C60-3A0C923B793A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136271/379f7858-e3c1-2b63-0f22-14d4025fc5e0.png)
1枚目はbrightness100%で5枚目は500%

ホラーゲーム実況などを見るときにはこれを使えばいちいちディベロッパーで調整しなくて済む

#感想
やりたいことは出来たがなんとなくスマートさに欠ける作りになってしまった気がする。
browser_actionのみだと単調に切り替わるだけで面白みが無い
今度はbrightnessをpopupページから操作できるようにしたい。

#参考
[【結構簡単】ブラウザアクションボタン発火の自作Chrome拡張機能の作り方＆サンプル](http://degitekunote.com/blog/2016/11/02/chrome-extension/)
【Rails】deviseで行うアクセス制限にエラーメッセージを表示させる。

# はじめに
deviseを使っていると必ずと言っていいほど使うアクセス制限をかけるためのヘルパーメソッドauthenticate_user!。
制限をかけた際にログイン画面にページ遷移しますが、何も設定をしないとなぜページ遷移したかわかりにくいので「ログインして下さい。」等々エラーメッセージを表示させた方が、ユーザー目線を考慮したサイトにすることができます。

ポートフォリオを作成していた際に、そんな風に思い組み込んだことを備忘録として書き留めておきます。
①エラーメッセージの表示方法
②エラーメッセージの日本語化


## 前提
・gem deviseを使用している。
・before_action :authenticate_user!を使用したいコントローラに記述している。
【参考サイト】
[Rails deviseで使えるようになるヘルパーメソッド一覧](https://qiita.com/tobita0000/items/866de191635e6d74e392)

## ①エラーメッセージの表示方法
authenticate_user!を使用した際に「ログインもしくはサインアップが必要です」のようなメッセージを表示させたい際は、下記記述を任意のviewにしてあげれば出ます。

```ruby:application.html.erb
<%= alert %>
```

上記記述をしてauthenticate_user!が正常に動作した場合、
以下devise.en.ymlの１７行目あたりに記載してあるエラー文が出るはずです。

```ruby:config/locales/devise.en.yml
unauthenticated: "You need to sign in or sign up before continuing."
```

deviseには元々エラー文章が用意されているようなので、
あとはそれを呼び出すための記述をしてあげれば良いわけですね。
簡単簡単！

『...余談』
<%= notice %>を使用すればログイン時に「ログインしました」的な文章を出すことも可能です。
簡単ですね。
## ②エラーメッセージの日本語化
### devise.ja.ymlの導入
先ほどはdevise.en.ymlの中から文章を引っ張ってました。
今回は日本語化するためにdevise.ja.ymlを導入していきます。
（en=english / ja=japaneseの意）

config/localesにdevise.ja.ymlファイルを作成し、
中身は[devise-i18n/ja.yml at master - GitHub](https://github.com/tigrish/devise-i18n/blob/master/rails/locales/ja.yml)からコピペして保存。

### gem 'rails-i18n'のインストール

```ruby:Gemfile
gem 'rails-i18n'
```
上記記述をして、bundle installを実行。
インストールはこれで完了です。

###config/application.rbに記述を追加

```ruby:config/application.rb
config.i18n.default_locale = :ja
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
```
１行目だけでも機能する場合もありますが、しない時もあるらしく、
２行目は必要に応じて記述してください。

以上で、日本語化は完了。

【参考】
[[Rails5] deviseの日本語化について（devise.ja.ymlを入れても効かないとき）](https://qiita.com/after4649/items/9fca98634615ce01b1c7)
Google Colab のインラインに動画を表示する方法

#1.はじめに
　Google Colabのインラインに動画を表示するコードを備忘録として残します。

#2.やり方
　**imageio** で動画を読み込みフレームにばらします。そして、おなじみの **matplotlib** の **animetion** を使ってアニメーション形式にして、 **HTML５**へ送るとインラインに動画を表示できます。

```python
import imageio
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML

# 動画をアニメに変換
def video_anime(video):
    video = imageio.mimread(video)   # フレームにばらす
    fig = plt.figure(figsize=(3,3))  # 表示サイズ指定

    mov = []
    for i in range(len(video)):  # フレームを1枚づつmovにアペンド
        img = plt.imshow(video[i], animated=True)
        plt.axis('off')
        mov.append([img])

    # アニメーション作成        
    anime = animation.ArtistAnimation(fig, mov, interval=50, repeat_delay=1000)
    plt.close()
    return anime

# HTML5でアニメをインラインに動画表示 
HTML(video_anime('./sample/00.mp4').to_html5_video())   
```
![スクリーンショット 2020-08-15 11.04.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/68842e03-45fa-d2cf-f964-141377257d73.png)

#<追記　2021.5.29>
　もっと簡単な方法があったので、サンプルコードを追記します。

```python
# mp4動画の再生
from IPython.display import HTML
from base64 import b64encode

mp4 = open('./sample/00.mp4', 'rb').read()
data_url = 'data:video/mp4;base64,' + b64encode(mp4).decode()
HTML(f"""
<video width="100%" height="100%" controls>
      <source src="{data_url}" type="video/mp4">
</video>""")
```
　こっちの方がシンプルなのでおすすめです。
port forwardingをunix domain socketにbindすると捗る

port forwardingをunix domain socketにbindすると、dockerコンテナ内にvolume mountを通じて持っていけるので便利。
以下、mysqlを例にする。

# コマンド

``` sh
ssh -o StreamLocalBindUnlink=yes -fNL /tmp/sock/db.sock:$DB_HOST:3306 bastion
```

bastionはもちろん、踏み台サーバー
fNオプションは不要であれば外して良い。
`-o StreamLocalBindUnlink=yes` をつけると、指定したpathにunix domain socketが既に存在する場合でも上書きしてforwardingしてくれる。

# dockerコンテナ内での使用

`--volume /tmp/sock:/tmp/sock` 付きでコンテナを起動する。

``` sh
mysql --socket /tmp/sock/db.sock -u ...
```

# curlでも使える

https://qiita.com/toritori0318/items/193df8f749a9c4bda883
ブラウザからアクセスできないのが残念（コンテナ内でブラウザを使うわけではないが、portにbindするのとunix domain socketにbindするのを切り替えるのが面倒くさい）
Lidar 解説　pointcloud/windows10

自動運転のキーセンサーとして、Lidar を使うための解説記事です。
pointcloud/windows10　の環境です。

<object data="velodyne_tutrial" type="application/pdf" width="100%" height="100%">
   <p><b>表示されない時の表示</b>: <a href="pdf.pdf">PDF をダウンロード</a>.</p>
</object>
「初心者向け」GitHub運用②： Project作成

# この記事はこんな方向けです！
**細かいことは置いといて**
・GitHubの基本的な使い方を知りたい!
・GitHubでのチケットベース開発を知りたい！
・Slackと連携の取り方を知りたい！

そんな方への**手っ取り早いハウツーな記事**です

# この記事を読み終えますと、
**OraganizationのTeam単位で、Project管理ができるようになります。**

# いくつか記事を分けます

本記事では**「Projectを作ってみる。」**についてです。

基礎
1. [OrganizationとTeamを作ってみる。](https://qiita.com/kotaro_bayashi/items/dd70fbf14b8bf43143a9)
2. **Projectを作ってみる**
3. [Issueを作ってみる](https://qiita.com/kotaro_bayashi/items/36d10f030c5dfbaaed1c)
4. [他人を招待し、権限付与](https://qiita.com/kotaro_bayashi/items/76a7fd5e5b70b1d04183)

応用
5. [Hubotを使ってみよう〜Heroku自動デプロイまで](https://qiita.com/kotaro_bayashi/items/f82db9620643d0430d0d)
6. [HubotとSlackを連携](https://qiita.com/kotaro_bayashi/items/26ec3ff24a41fa942190)

# Projectを作る
作成済みのOrganizationの中で、Projectを作ります。

- **作成したOrganizationの画面から「Projects」をクリック**
- 表示されたページで「Create a Project」をクリック
![toProject.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534534/8abe0739-3125-22b1-5426-1b98d4bb1619.jpeg)

**Projectの設定をします**

- Templateを選ぶ(Basic以降の選択がおすすめです)
- 紐つけるRepositoryを選ぶ
- 「create project」をクリック
![createProject.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534534/b504bc5a-3c63-26c0-0cab-756678f999ab.jpeg)

# ProjectをTeamに紐つけ
- Teamの画面から「Project」をクリック
- **「add Project」をクリック**
- **先ほど作ったProject名を入力し「add」をクリック**

ここまでステップを踏みますと、Teamの画面では、以下のようになります。
![confirm current status.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534534/b9bd163b-d987-8494-ca9f-92cbc9bab4f7.jpeg)

# まとめ

これで、Projectを作り、Team単位でProjectを管理できるようになりました。
次回では、[Issueを作ってみましょう！](https://qiita.com/kotaro_bayashi/items/36d10f030c5dfbaaed1c)
Ant Design で Table の columns の dataIndex の候補を表示する型

# Ant Design で Table の columns の dataIndex の候補を表示する型

antd の `Table` の `columns` には表示する対象を指定する `dataIndex` がありますが、
これは手動で指定する必要があります。

```ts:no-suggestion
type Data = {
  id: number;
  name: string;
};

export const columns: TableProps<Data>['columns'] = [
  {
    title: 'ID',
    key: 'id',
    // これだと候補がでない
    dataIndex: '',
  }
];
```

![no-suggestion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116435/a36cc689-7c3c-0b62-d434-55cf57c3b0b6.png)

そこで以下のような型を定義することで `dataIndex` の型を指定してみます。

```ts:columns-type
import { ColumnGroupType, ColumnType } from 'antd/lib/table/interface';

type AnyData = Record<string, unknown>;

type RenderReturn<TRecord = AnyData> = ReturnType<
  NonNullable<ColumnType<TRecord>['render']>
>;

type Column<TRecord = AnyData> =
  | (Omit<ColumnGroupType<TRecord>, 'render'> & {
      render?: (
        value: TRecord,
        record: TRecord,
        index: number
      ) => RenderReturn<TRecord>;
    })
  | (ColumnType<TRecord> & {
      dataIndex?: keyof TRecord;
      render?: <T = TRecord>(
        value: T,
        record: TRecord,
        index: number
      ) => RenderReturn<TRecord>;
    });

type Columns<TRecord = AnyData> = Column<TRecord>[];

type Data = {
  id: number;
  name: string;
};

export const columns: Columns<Data> = [
  {
    title: 'ID',
    key: 'id',
    dataIndex: '',
  },
];
```

定義した `Columns` を指定することで `dataIndex` に候補が出るようになりました。

![suggestion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116435/9a9ab42e-c432-b780-07b1-dc34c7ee47a4.png)
OpenFOAMをGCPにインストール

#OpenFOAMとは 
数値解析用のソルバー群。
非圧縮、圧縮流体、熱流体、二相流...等をソルバーを切り替えることで計算できる。

Google Cloud Platform（GCP）上のUbuntuにインストールした。
#環境構築
###GCPの設定
以下より、適当なCompute EngineとStrageを作っておく。
https://console.cloud.google.com/

###sshの設定
sshでGCP上のCompute Engineに接続する。

```
ssh-keygen -t rsa -b 4096 -C "ユーザー名"
cat ~/.ssh/id_rsa.pub
```
表示される鍵をCompute Engine内の"ssh秘密鍵"にコピペ。
すると、以下のコマンドでgcpに接続できる。

```
ssh ユーザー名@インスタンスのipアドレス -i ~/.ssh/id_rsa
```

接続先の情報を`.ssh/config`に書き込むと、以降 `ssh ホスト名`のみで接続できるので便利。

```terminal:config
Host ホスト名
HostName インスタンスのipアドレス
User ユーザー名
Port ポート番号
IdentityFile ~/.ssh/id_rsa
```

###OpenFOAMのインストール
openfoam6 をインストール。

```
sudo sh -c "wget -O - http://dl.openfoam.org/gpg.key | apt-key add -"
sudo apt-get update
sudo apt-get -y install openfoam6
```
OpenFOAMはetc/bashrcを読み込むことで、環境変数を設定することができる。
.bashrcの末尾に下記を追加しておくと、ターミナル起動のたびにbashrcを読み込むようになる。

```terminal:.bashrc
source /opt/openfoam6/etc/basic
```

試しに、適当なチュートリアルをコピーして計算してみる。

```
cp -r /opt/openfoam6/tutorials/incompressible/simpleFoam/motorBike/ .
cd motorBike
./Allrun
```
計算が開始される。

###Google Cloud経由でデータを移動
計算結果はインスタンス上に保存されるため、
そのままではCUI上でしか計算結果を見ることができない。
（数値の確認は可能だが、流れの可視化は厳しい）

一旦、Google Cloudを経由してローカル環境に落とす必要がある。

Google Cloud上の操作をターミナル上から行うために、gsutilをインストールする。
`gcloud Auth login`を入力するとGoogleのアカウント認証画面に遷移する。

```
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud Auth login
```

接続できているか確認。

```
gsutil ls  #すべてのバケットを表示
gsutil ls gs://[バケット名]  #バケット内のファイルを表示
```

先程計算したフォルダをGoogleCloudに移動させる。

```
gsutil cp -r ./motorBike gs://[バケット名]
```
ローカル環境にダウンロードする。

```
gsutil cp -r gs://[バケット名]/motorBike .
```

あとは、ローカル環境上で可視化、結果整理等行う。
###追記（OpenCFD版のインストール）
OpenFOAM-v1912を入れようとしたところ少しハマる。
基本的には下記の通りだが、gcpにデフォルトでmakeが入っていないようで、`sudo make install`で解決した。
（エラーメッセージはちゃんと読むべき...）
https://www.openfoam.com/download/install-source.php

```
sudo apt-get update
sudo apt-get install build-essential tmux emacs git

# ソースをダウンロード
wget "https://sourceforge.net/projects/openfoam/files/v1912/OpenFOAM-v1912.tgz"
wget "https://sourceforge.net/projects/openfoam/files/v1912/ThirdParty-v1912.tgz"
tar -xzf OpenFOAM-v1912.tgz 
tar -xzf ThirdParty-v1912.tgz 

# OpenFOAMフォルダを作成
mkdir OpenFOAM
mv OpenFOAM-v1912 OpenFOAM/
mv ThirdParty-v1912 OpenFOAM/

# 追加インストール
sudo apt install libopenmpi-dev

sudo apt-get install build-essential flex bison cmake zlib1g-dev libboost-system-dev libboost-thread-dev libopenmpi-dev openmpi-bin gnuplot libreadline-dev libncurses-dev libxt-dev 

sudo apt install qt5-default libqt5x11extras5-dev libqt5help5 qtdeclarative5-dev qttools5-dev libqtwebkit-dev freeglut3-dev libqt5opengl5-dev texinfo 

sudo apt-get install libscotch-dev libcgal-dev 

# コンパイル
source ~/OpenFOAM/OpenFOAM-v1912/etc/bashrc
foamSystemCheck
foam
./Allwmake -j -s -l
```

#まとめ
環境整備
試計算、データコピーまで
UnityでスクリプトファイルがVS Codeで開かない

# 問題
Unityのエディタ画面でProjectにあるスクリプトファイルをクリックしてもvs codeで任意のファイル・フォルダが開かなかったり、開けてもVS Codeの拡張が働かない・補完が効かないことがありました。


# 解決
自分で調べても解決できなかったのでUnityお学びグループで質問したところ、@edo_m18 さんに回答いただけました。

> Package ManagerからVisual Studio Code Editorの最新にupdateすると解決すると思います。（古いバージョンが悪さをしていたようです）

https://connect.unity.com/post/5d79a5cfedbc2a126f15ecf2


### バージョンごとの解決法

Unity 2017-2019
→Package ManagerからVisual Studio Code Editorを最新版にupdateすると解決できた

Unity 5.x
→アセットストアからVSCodeをインポートして設定を変更すると解決できた
オープンソースとプライバシー志向の分析ソリューション



![pexels-scott.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229807/743df356-862e-073f-09a5-2526a19f079a.jpeg)



##はじめに

こんにちは streampack チームのメディです。
https://cloudpack.jp/service/option/streampack.html

##Objective ・ 目的
Privacy is an important matter.
I would like to present several open source solutions that respect users privacy and will allow you to improve your business.

プライバシーは重要な問題です。
ユーザーのプライバシーを尊重し、ビジネスの改善を可能にするいくつかのオープンソースソリューションを紹介したいと思います。

###Disclaimer ・ 免責事項
Analytics systems are listed in no particular order.
分析システムは特定の順序でリストされていません。

## Offen
![Screen Shot 2020-07-16 at 10.49.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229807/985f92d8-7408-45fe-f8c5-b20ae67d391b.png)

**From the homepage ・ ホームページから**
>Offen is a fair and open alternative to common web analytics tools. Gain insights while your users have full access to their data. Lightweight, self hosted and free.

>Offenは、一般的なWeb分析ツールの公正でオープンな代替手段です。 ユーザーがデータに完全にアクセスしながら、洞察を得ます。 また、軽量、自己ホスト型で、無料です。

**Key points**

- Privacy friendly
- Transparent and fair
- lightweight

**主な機能**

- プライバシーフレンドリー
- 透明かつ公正
- 軽量


https://github.com/offen/offen

##PostHog
<img width="1433" alt="dashboards-0309f28b408dfd06dcb58fe11fefd185.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229807/407981c5-ef89-4784-0c75-a1d65cd60960.png">

**From the homepage ・ ホームページから**
>Understand your users.
Build a better product.

>ユーザーを理解します。
より良い製品を作ります。

**Key points**

- privacy-focused
- detailed product analytics

**主な機能**

- プライバシー志向
- 詳細な製品分析

https://github.com/posthog/posthog



##Matomo *(formely Piwik)*
![website-graphics-2020-v5-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229807/1b3fcd6d-0aee-1e8b-d1f7-58c464595653.png)



**From the homepage ・ ホームページから**
>Google Analytics alternative that protects your data and your customers' privacy.

>データと顧客のプライバシーを保護するGoogleアナリティクスの代替手段。

**Key points**

- Real time analysis
- Customizable

**主な機能**

- リアルタイム分析
- カスタマイズ可能

https://github.com/matomo-org/matomo

##Fathom
![fathom.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229807/f6d347c1-fc74-c9c4-67ab-44f5003d6039.jpeg)

**From the homepage ・ ホームページから**
>Fathom Analytics is a simpler and more privacy-focused alternative to Google Analytics.


>Fathom Analyticsは、Google Analyticsに代わる、よりシンプルでプライバシー重視の代替手段です。

**Key points:**

- Simple website analysis
- Do not use cookies

**主な機能**

- シンプルなウェブサイト分析
- クッキーを使用しない

https://github.com/usefathom/fathom

###Information sources ・ 情報元
https://github.com/offen/offen
https://github.com/usefathom/fathom
https://github.com/posthog/posthog
https://github.com/matomo-org/matomo
https://www.pexels.com/photo/equipment-pavement-security-security-camera-430208/