OmniAICreator/Qiita-1.07M huggingface dataset:
Android アプリで自身のバージョン番号を取得する

## 概要
- Android アプリで自身のバージョン番号を取得する

## Java によるサンプルコード

```java
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

public class AppInfo {

  public String getVersionName(Activity activity) {

    try {
      // Java パッケージ名を取得
      // android.content.Context#getPackageName
      String name = activity.getPackageName();

      // インストールされているアプリケーションパッケージの
      // 情報を取得するためのオブジェクトを取得
      // android.content.Context#getPackageManager
      PackageManager pm = activity.getPackageManager();

      // アプリケーションパッケージの情報を取得
      PackageInfo info = pm.getPackageInfo(name, PackageManager.GET_META_DATA);

      // バージョン番号の文字列を返す
      return info.versionName;

    } catch (PackageManager.NameNotFoundException e) {
      e.printStackTrace();
      return null;
    }
  }
}
```

## バージョン番号についての公式資料

[アプリのバージョニング  \|  Android Developers](https://developer.android.com/studio/publish/versioning?hl=ja)

> versionName - ユーザーに表示されるバージョン番号として使用される文字列。この値は、未加工の文字列または文字列リソースへの参照として設定できます。
> この値は文字列であり、アプリのバージョンを <メジャー>.<マイナー>.<ポイント> 文字列として、または他のタイプの絶対または相対バージョン識別子として記述できます。versionName はユーザーへの表示のみを目的としています。

[アプリのバージョニング  \|  Android Developers](https://developer.android.com/studio/publish/versioning?hl=ja)

> Android フレームワークには、アプリのバージョン情報をシステムに照会するための API が用意されています。バージョン情報を取得するには、getPackageInfo(java.lang.String, int) メソッド（PackageManager に含まれています）を使用します。

## 参考資料

- [アプリのバージョニング  \|  Android Developers](https://developer.android.com/studio/publish/versioning?hl=ja)
- [\<manifest\>  \|  Android Developers](https://developer.android.com/guide/topics/manifest/manifest-element?hl=ja)
- [Activity  \|  Android Developers](https://developer.android.com/reference/android/app/Activity)
- [PackageManager  \|  Android Developers](https://developer.android.com/reference/android/content/pm/PackageManager.html)
- [PackageInfo  \|  Android Developers](https://developer.android.com/reference/android/content/pm/PackageInfo.html)
CentOS 6にNginx 1.10をインストール（SCL）

# はじめに

Software Collection(SCL)を利用してCentOS6にNginx1.10をインストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)
参考：[Quick Start — Software Collections](https://www.softwarecollections.org/en/docs/)

## サポート

本手法で導入した場合、[Red Hat Software Collections Product Life Cycle - Red Hat Customer Portal](https://access.redhat.com/support/policy/updates/rhscl)より、2020-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### レポジトリ登録

```shell-session
# yum install -y centos-release-scl
```

### インストール

```shell-session
# cat /etc/redhat-release
CentOS release 6.10 (Final)

# yum install -y rh-nginx110
# scl enable rh-nginx110 bash
... 略
```

### nginx起動/停止

```shell-session
# service rh-nginx110-nginx start
Starting nginx:                                            [  OK  ]

# service rh-nginx110-nginx status
nginx (pid 191) is running...
```

```shell-session
# service rh-nginx110-nginx stop
Stopping nginx:                                            [  OK  ]

# service rh-nginx110-nginx status
nginx is stopped
```

### nginx自動起動設定/設定解除

```shell-session
# chkconfig rh-nginx110-nginx on

# chkconfig --list  rh-nginx110-nginx
rh-nginx110-nginx        0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

```shell-session
# chkconfig rh-nginx110-nginx off

# chkconfig --list  rh-nginx110-nginx
rh-nginx110-nginx        0:off   1:off   2:off   3:off   4:off   5:off   6:off
```

### 各種確認

```shell-session
# which nginx
/opt/rh/rh-nginx110/root/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.10.2

# yum info rh-nginx110
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * centos-sclo-rh: ty1.mirror.newmediaexpress.com
 * centos-sclo-sclo: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
Installed Packages
Name        : rh-nginx110
Arch        : x86_64
Version     : 1.10
Release     : 8.el6
Size        : 0.0
Repo        : installed
From repo   : centos-sclo-rh
Summary     : Package that installs rh-nginx110
License     : GPLv2+
Description : This is the main package for rh-nginx110 Software Collection.
```
CentOS 6にNginx 1.8をインストール（SCL）

# はじめに

Software Collection(SCL)を利用してCentOS6にNginx1.8をインストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)
参考：[Quick Start — Software Collections](https://www.softwarecollections.org/en/docs/)

## サポート

本手法で導入した場合、[Red Hat Software Collections Product Life Cycle - Red Hat Customer Portal](https://access.redhat.com/support/policy/updates/rhscl)より、2018-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### レポジトリ登録

```shell-session
# yum install -y centos-release-scl
```

### インストール

```shell-session
# cat /etc/redhat-release
CentOS release 6.10 (Final)

# yum install -y rh-nginx18
# scl enable rh-nginx18 bash
... 略
```

### nginx起動/停止

```shell-session
# service rh-nginx18-nginx start
Starting nginx:                                            [  OK  ]

# service rh-nginx18-nginx status
nginx (pid 190) is running...
```

```shell-session
# service rh-nginx18-nginx stop
Stopping nginx:                                            [  OK  ]

# service rh-nginx18-nginx status
nginx is stopped
```

### nginx自動起動設定/設定解除

```shell-session
# chkconfig rh-nginx18-nginx on

# chkconfig --list  rh-nginx18-nginx
rh-nginx18-nginx        0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

```shell-session
# chkconfig rh-nginx18-nginx off

# chkconfig --list  rh-nginx18-nginx
rh-nginx18-nginx        0:off   1:off   2:off   3:off   4:off   5:off   6:off
```

### 各種確認

```shell-session
# which nginx
/opt/rh/rh-nginx18/root/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.8.1

# yum info rh-nginx18
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * centos-sclo-rh: ty1.mirror.newmediaexpress.com
 * centos-sclo-sclo: ty1.mirror.newmediaexpress.com
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
Installed Packages
Name        : rh-nginx18
Arch        : x86_64
Version     : 2.1
Release     : 4.el6
Size        : 0.0
Repo        : installed
From repo   : centos-sclo-rh
Summary     : Package that installs rh-nginx18
License     : GPLv2+
Description : This is the main package for rh-nginx18 Software Collection.
```
ポケットミクのデジタル出力を調べる

#ポケットミクというかYMW820 (NSX1)のデジタル出力を試みたい
学研「大人の科学」付録の「歌うキーボード・ポケットミク」をイヤフォン出力からPCで録音するとノイズが乗ります(グラウンドループノイズと指摘している方々もいます)。ポケットミクから直接、デジタル録音できるようにしたらノイズは気にしなくてよくなるのではないか？という動機の下、どこからデジタル出力がでているか調べてみた。
![pokemiku.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/61191734-384c-53b7-3bf8-e4e459303250.jpeg)

##YMW820のマニュアルを探す
以前はYAHAMAのサイトに置かれていたYMW820(LSI) のマニュアル(3MW820A20)には下のような記述があります。このデジタルオーディオ出力2系統の両方またはいずれかが該当するだろう、と想像。
![ymw820_f1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/224a5f9d-3879-4ae7-d90d-0c4fb0021d79.png)
##デジタルオーディオ#2
ポケットミクを調べると、デジタルオーディオ#2の三つの信号(BCLK2, LRCK2, SDO2)が該当し、マイコンに接続されて内部でDA変換してスピーカーを鳴らす、という構成の様。ちなみにこれらの信号は IOVDD2=3.0V (3.3Vではない)で動いているようす。
![ymw820_f2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/f70c49a1-9160-5fa5-a63d-0056432d26dd.png)
##信号の引き出し
YMW820は0.5mmピッチのQFPなので、φ0.25mmポリウレタン線で隣とショートしないように注意深く半田付け。熟練の技が必要ですな。(二度とやりたくないレベル)。普通の銅線・撚り線では絶対に無理だ。
![ymw820-pcm5102.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/03f81b0d-73c2-1b44-3b50-63f93928ffc9.jpeg)
写真右にはPCM5102AのDA変換ボード。フォーマットは後述。GNDとVcc(5V)はポケットミクの基板から拝借。5102の基板上のLDOで5V→3.3V変換しているようだ。

##オーディオデータフォーマット
ロジアナでBCLK2, LRCK2, SDO2 (Pin No. 33,34,35)を観察するとこのようになっている。
![nsx39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/3eb10f60-782d-c8da-82f7-5a6f6f6dd2ca.png)
これを見るにI2Sではなく、次のフォーマットと予想:

| | |
|:-:|:-:|
|Sampling Frequency|44.1KHz|
|Bit clock Frequency|2.1168MHz (48fs)|
|Channel  |2      |
|Bit      |16bit (2's complement)  |
|Format   |Left-justified|

他のADコンバータから、相当するタイミングチャートを拝借。ポケットミクは☆が該当しそう。
![LJ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513938/c65c5489-5b24-fda9-cfb2-52dc941acf2e.png)

サンプリング周波数(fs)は 44.1KHz なので、ビットクロックは2chｘ24bit分だから 2x24 = 48fs。すなわち 2116.8KHzがビットクロックとなる。
Left-justified = 左詰め。MSBが上位ビット、LSBは下位ビットで16bit並んだ後に0が8bit続いている。16+8=24bit。
2's complement＝2の補数。正数は 32767~0 (0x7fff~0x0000)、負数は -32768~-1 (0x8000~0xffff)。上のロジアナの画像はちょう正→負に値が変わるところかなと思う。

##ノイズ
上の写真の接続(PCM5102のフォーマットはLJ = left-justifiedにする)で、ちゃんと音が鳴ることも確認。ただし、たまに片チャンネルだけ大きなクリックノイズ(ボツ！という音)が入る。YMW820が3.0V信号に対してPCM5102が3.3V駆動のため、信号を拾うタイミングがずれたか、拾えなかったことがあるのではないかと推測。手持ちの測定器では測れないので原因特定までには至らず。(オシロスコープほしい...)

##まとめ
YMW820のBCLK2, LRCK2, SDO2 (Pin No. 33,34,35)を電圧変換などすればうまく外に取り出せそうということが分かった。
I2Sであれば1チップでUSB-audioとして取り出せるが(cf. CP2104)、残念ながら 16bit, 48fs, left-justifiedなので、今後は何か変換するマイコンを組み込むことで実現できないか検討してみる。
USB-audio で吸い上げるにしても、USBで48MHz使用、デジタルオーディオデータで 44.1KHz使用とちょっと複雑な構成になりそうな予感...。
pgpool-Ⅱ「invalid watchdog configuration. other pgpools setting is not defined」が発生した場合の対処

# はじめに

pgpoolの起動時に下記のようなエラーが発生した場合の対処例を記載する。

```bash
$ pgpool -n -f /etc/pgpool-II/pgpool.conf >& /tmp/pgpool.log &

$ cat /tmp/pgpool.log
FATAL:  invalid watchdog configuration. other pgpools setting is not defined
```

---

# 対処法

エラーメッセージの通りで、watch_dogが有効になっているが、リモートのpgpoolホストが指定されていない場合に上記のエラーが発生する。

/etc/pgpool-II/pgpool.confに下記のような設定を追記する。

```bash
other_pgpool_hostname0 = '192.168.10.2' # <- リモートホストのアドレス、またはホスト名を指定
other_pgpool_port0 = 9999
other_wd_port0 = 9000
```
【MySQL】サブクエリは何もの？(初心者向け)

# サブクエリは何もの？

次のSQL勉強会のため、
何を準備するか考えると、【サブクエリ】が出たので、
サブクエリを説明します。

## サブクエリは?

一つのクエリの中に含まれているもう一つのクエリです。
サブクエリは、メインクエリがサブクエリを含む従属的な関係です。
何度ものクエリを実行しなければならない結果を、
簡単に結果を得ることができます。

### 注意事項

- サブクエリを括弧で囲んで使う。
- サブクエリの中でOrder Byは使用できない。
- 演算子の右側で使う。

### 使い方

- Selectで

SELECT句でサブクエリを書く場合に、サブクエリの結果の値は1つしか出力されません。

```
SELECT
member_id,
status,
(SELECT AVG(money) FROM Exchange) AS M
FROM Member
```

- Fromで

Fromには、テーブル名を指名しますが、
Fromにテーブルの代わりに、サブクエリを使うと、サブクエリで参照された値をテーブルのように活用することができます。

```
SELECT
member_id,
status,
FROM
(SELECT * FROM  Exchange)
```

- Whereで

```
Select
member_id
FROM Member
WHERE money IN(SELECT money FROM Exchange WHERE status = 1 AND money > 1000)
```

## サブクエリ VS JOIN

JOINは、すべてのテーブルが対等な関係で、JOINしたすべてのカラムを使うのが可能。
サブクエリは、メインクエリのカラムは自由に利用できますが、
メインクエリはサブクエリのカラムを利用できない。
【メモ】Vue CLI でホットリロードが効かない

VueCLIからプロジェクトを作成し

毎回`npm run serve`して、止めてを繰り返してたのですが調べると
`serve`のコマンドである`vue-cli-service serve`はホットリロード(保存したら自動的にロードされる)が搭載されていた模様

なぜかホットリロード効かなかったのですが、

`vue.config.js`に`webpack`のオプションを追加したらかかるようになりました

```js:vue.config.js
module.exports = {
  configureWebpack: {
    devServer: {
      watchOptions: {
        poll: true
      }
    }
  }
}

```
CUI環境でGUIアプリを作れるようにする

VM上でGUIアプリを作る際の環境づくりにてこずったのでメモとして残しておきます。
WSLの記事はありましたがVagrant+VirtualBoxでの記事は見当たらなかったので。

今回はtkinterを使います。

# 環境
OS(ホスト): Windos10
OS(ゲスト): CentOS 7.5
Python 3.7
VagrantとVirtualBoxを使っています。
Pythonのインストールにはpyenvを使っています。

# ホスト側
## Vagrantfileの書き換え
Vagrantfileにpublic_networkの設定を加えます

```..Vagrantifle
config.vm.network :public_network, ip: "192.168.xx.xx", bridged: "en1: Wi-Fi(AirPort)"

```

## Xmingのインストールと設定
[ここ](https://ja.osdn.net/projects/sfnet_xming/)からXming-6-9-0-31-setup.exeとXming-fonts-7-7-0-10-setup.exeをダウンロードしてインストールします。

インストール後、`C:\Program Files (x86)\Xming\X0.hosts`を編集します。

```X0.hosts
localhost
# VMのIPアドレス
192.168.xx.xx
```

# ゲスト側
## pythonとtkinterのインストール

```
# pythonのインストール
$ pyenv install 3.7.4
$ pyenv global 3.7.4
$ pyenv rehash

# tkinterのインストール
$ sudo yum -y install tk-devel
```

## displayの指定
.bash_profileにdisplayの設定を記入します。

```.bash_profile
# ホストのIPアドレス
export DISPLAY=192.168.zz.zz:0.0
```
記入後設定を反映させるため`source .bash_profile`を実行すればOK

`python -m tkinter`と打ってウインドウが出てくれば環境構築完了です。
CSS 6


わあ、前回から１週間放置してましたのね。

取り急ぎ、HTMLの基礎編とCSSの基礎編終わりました。

別のHTML基礎を動画で見てるけど、前より言ってることわかる気がする、、、
20％くらい(;^ω^)

分かるだけいいですよね。
ばばっと勉強しちゃいます。
macの環境構築を自動化するメモ(その１)

# 環境構築前準備
今使っているMacの環境を再現できるようにする

## Brewfileの準備

まずは自分が入れたアプリケーション一覽を作成する
下記コマンドでホームディレクトリに`.Brewfile`が作られる。

```
brew bundle dump --global --force --describe
``` 

コマンドのとなりの オプションは下記説明を引用すると

```
The --force option will allow an existing Brewfile to be overwritten as well. The --describe option will output a description comment above each line. The --no-restart option will prevent restart_service from being added to brew lines with running services.
```

`--force`はBrewfileの強制上書き ` --describe`はいれたアプリケーションの説明を加えてくれるようにしておいた。`--global`は'~.Brewfile'をつかってくれるということらしい

### 作成されたBrewfile

```.Brewfile
tap "homebrew/bundle"
tap "homebrew/cask"
tap "homebrew/core"
tap "mono0926/license-plist"
# User-friendly command-line shell for UNIX-like operating systems
brew "fish"
# Command-line fuzzy finder written in Go
brew "fzf"
# Distributed revision control system
brew "git"
# Git extension for versioning large files
brew "git-lfs"
# Open source programming language to build simple/reliable/efficient software
brew "go"
# Mac App Store command-line interface
brew "mas"
# Node.js version manager
brew "nodebrew"
# Simplistic interactive filtering tool
brew "peco"
# Python dependency management tool
brew "pipenv"
# PNG image optimizing utility
brew "pngquant"
# Ruby version manager
brew "rbenv"
# Text interface for Git repositories
brew "tig"
# A license list generator of all your dependencies for iOS applications
brew "mono0926/license-plist/license-plist"
mas "co.nimbusweb.nimbuscapture", id: 1125725441
mas "com.apple.dt.Xcode", id: 497799835
mas "com.apple.iWork.Keynote", id: 409183694
mas "com.pearlmountainsoft.PicGIFLite", id: 844918735
```

### メモ
`mas`でリスト化されているものは、Mac App Storeで入れたものである
アンイストールは、コマンドが無くどうすれば良いのかわからず困ったが、ゴミ箱にいらないアプリケーションを放り込んだらリストから消えたのでこれで良いのだと思われる。

## 参考文献
[homebrew-bundle公式GitHub](https://github.com/Homebrew/homebrew-bundle)
[mas-cli/mas](https://github.com/mas-cli/mas/tree/v1.4.0)
[brew bundleでMacのアプリをまとめてインストール・管理](https://qiita.com/vochicong/items/f20afc89a6847cd58f0f)
JavaScript で diff (通信なし、ローカルで完結)

Javascript と HTML で diff を表示します。
行単位のみやワード単位のみのサンプルはネットでちょくちょく見かけていたのですが、「行単位の差分を表示した上で類似行の差分も表示する」のが欲しかったので、作ってみました。
Ecmascript 6 以降の機能を使用しているので、IE11では動きません。
FirefoxかChromeかEdgeをご利用ください。

2020/04/05 いろいろ修正しました。

* 単語区切りで、小書き仮名拡張 (Unicode 12)、統合漢字 Extention G (Unicode 13) に対応してみた。
……ついでにsurrogate pair判定のバグを修正 orz
* Chrome, Firefox, Edge, Opera で Optional Chaining が使用可能になったので、Optional Chaining で書けるところを書き直し。
* indent heuristic の処理を修正。１行だけの差異行は、境界位置をずらさないようにした。

2020/07/17 さらに修正しました。

 * 変更行のマーカーを「*」から「!」に変更。
 * 変数のスペルミスを修正。
 * 統合漢字 Extention G の判定を修正。

2021/01/08 さらに修正しました。

 * 片仮名合字「トモ」U+2A708 の判定処理を追加。

2021/09/05 さらに修正しました。

 * 改行の区切り判定を改善。

2022/08/06

 * 現物をGitHub Pagesに掲載しました。ソースコードは、ブラウザの「ページのソースを表示」メニューなどでご覧ください。
 * [https://stonee-k.github.io/my_archives/diff_orz.html](https://stonee-k.github.io/my_archives/diff_orz.html) 


内部の仕様に関する解説は、ページ最下部のリンクからどうぞ。
Debian 10にNginx 1.14をインストール（OS標準）

# はじめに

Debian10にNginxを標準インストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.14.2

# apt show nginx
Package: nginx
Version: 1.14.2-2+deb10u1
Priority: optional
Section: httpd
Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@alioth-lists.debian.net>
Installed-Size: 100 kB
Depends: nginx-full (<< 1.14.2-2+deb10u1.1~) | nginx-light (<< 1.14.2-2+deb10u1.1~) | nginx-extras (<< 1.14.2-2+deb10u1.1~), nginx-full (>= 1.14.2-2+deb10u1) | nginx-light (>= 1.14.2-2+deb10u1) | nginx-extras (>= 1.14.2-2+deb10u1)
Homepage: https://nginx.net
Tag: implemented-in::c, interface::daemon, network::server, network::service,
 protocol::http, role::program, use::proxying
Download-Size: 88.3 kB
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages
Description: small, powerful, scalable web/proxy server
```
Django, OperationalErrorの解決方法

Djangoで作成したアプリケーションをサーバー(今回は**heroku**)にデプロイする際に発生するエラーの一つの**OperationalError**というものについて解決方法と解説をしていきたいと思います。(使用するPCは**mac**)

#No such table: テーブル名
エラー文を読んでいくと、上記のように記述されているかと思います。恐らくDjangoで何かしらのアプリケーションを作った場合、最初に**models.py**からDBを設計したかと思うので**テーブル**は存在しているはずです。ではなぜデプロイ時には**models.py**のテーブルは反映されないのでしょうか？

##sqliteは本番環境では使えない
**models.py**はDBの管理システム（RDBMS）として**sqlite**を使用しています。**ローカル環境**においてはsqliteで動くのですが、本番環境ではこの管理システムは利用できません。この理由としては**sqlite**の特性の問題、**gitignore**の問題の二つがあります。前者は詳しい説明をしている方が数名いましたので説明を省きます。
後者の**gitignore**とは、特定のファイルを**gitの管理外**に置ける設定ができるファイルです。基本的にWebアプリケーションを**サーバー**にあげる際、まずgitにプッシュして、プッシュしたものを**サーバー**が読み取りブラウザ上に表示させます。その際**コンフリクト**を防ぐため**開発メンバー固有のファイル**は追跡対象から外し、プッシュします。**この追跡対象外**に特定ファイルを指定できるのが**gitignore**です。
**開発メンバー固有のファイル**を具体的に述べると、今回の場合だと**開発段階でDBで生成されたデータ**です。そのため、**gitignoreのテンプレート**には**sqlite**が記載されています。
結果としてサーバー側は**テーブル**を認識できないので**OperationalError**が出てしまいます。

##解決方法、PostgreSQLを使う
そこで解決方法としては**PostgreSQL**を今回は使うこととしました。**heroku**において**PostgreSQL**を扱うにはまず**ローカル環境**にインストールする必要がありますので[PostgreSQL](https://postgresapp.com/)をインストールしましょう。またコマンドライン上で操作するために以下のコマンドをターミナルに打ち込みます。
`$ sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp`

これで**ローカル環境**において**PostgreSQL**がインストールできました。この時点で**heroku**は**データベース**を作ってくれているはずですが、万が一作成されていなかった場合は以下のコマンドで作って下さい。
`$ heroku addons:create heroku-postgresql:hobby-dev`
それではテーブルを作成していきます。ただその前にDjangoのアプリケーションがデータベースと連携できるように**django-heroku**をインストールしていきます。
`pip install django-heroku`
このパッケージは自動的に**データベースのURL**を設定、加えてstatic assetsを**gunicorn**に繋げてくれます。（よく発生するエラーの対処法は以下に記載します）これを実際にDjangoのWebアプリケーションに繋げるには**settings.py**に以下のように記載してください。

```python:settings.py
import django_heroku
django_heroku.settings(locals())
```
これで連携完了です！最後にコミットして、**heroku**にプッシュしましょう！
DBの問題はこれで解決します！
(*requirements.txtを最新のものにしてからコミット、プッシュをするのを忘れずに)

##django-herokuをインストールした際にエラーが出た場合
よく発生するエラーとしてpsycopg2をインストールしようとsetup.pyを動かす時に出てくるものがあります。（かなりの長文で出てくるので一瞬パニックになります笑）解決方法は以下に記載します。
`pip install psycopg2-binary`
`sudo xcode-select -switch /Library/Developer/CommandLineTools`
これで恐らく**django-heroku**をインストールできます。

##最後に
読んでくださった方はありがとうございます。
初めて書く記事ですので、もし誤り、ミスを発見した場合はコメントで連絡ください。
ArchLinuxでUnityGreeter

# やりたいこと
ArchLinuxのAURには`lightdm-unity-greeter`というパッケージがあります。
このパッケージはUbuntu16.04で利用されているログイン画面（Greeter）です。
しかしこのパッケージはUbuntu用のためかArchLinuxでは正常にインストールできません（無理やりインストールする方法はあるのでしょうが。）

ふとWikiを見ているとUnityGreeterから派生したSlickGreeterというものを見つけたのでインストールしました。

# インストール

```bash
yay -S  lightdm-slick-greeter
```
AURから入れてください。

# 適用

## しっかりと追加されたか確認します。

```bash
ls /usr/share/xgreeters/
```
出力結果に`lightdm-slick-greeter`があればインストール成功です。

## 適用する。

`/etc/lightdm/lightdm.conf`をroot権限で編集します。

```
...
greeter-session=lightdm-slick-greeter
...
```
上のように編集した後、保存してLightDMを再起動します。


```bash
sudo systemctl restart lightdm.service
```

再起動するとなぜかエラーで起動しなくなることがあるのですが、lightdm-slick-greeterを再インストールすると治りました。
[メモ]railsのwhere句でor的な意味で複数条件を指定する書き方

絶対忘れると思ったので個人的なメモとして。

whereの中で条件をorの意味で複数指定したいときは

`where(status: [0,1])`

で、statusが0か1のレコードを取得できる。
Node.jsをAmazonLinuxにインストール

# 8系のNodeJsのインストール

```
$ curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash -
$ sudo yum -y install nodejs

# インストールバージョンの確認
$ node --version
v8.9.4
$ npm --version
5.6.0
```

# 10系のNodeJsのインストール

```
$ curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash -
$ sudo yum -y install nodejs

# インストールバージョンの確認
$ node --version
v10.16.0
$ npm --version
6.9.0
```

# yarnのインストール

```
$ sudo curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
$ sudo yum install yarn
```
Debian 9にNginx 1.10をインストール（OS標準）

# はじめに

Debian9にNginxを標準インストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.10.3

# apt show nginx
Package: nginx
Version: 1.10.3-1+deb9u3
Priority: optional
Section: httpd
Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Installed-Size: 94.2 kB
Depends: nginx-full (<< 1.10.3-1+deb9u3.1~) | nginx-light (<< 1.10.3-1+deb9u3.1~) | nginx-extras (<< 1.10.3-1+deb9u3.1~), nginx-full (>= 1.10.3-1+deb9u3) | nginx-light (>= 1.10.3-1+deb9u3) | nginx-extras (>= 1.10.3-1+deb9u3)
Homepage: http://nginx.net
Tag: implemented-in::c, interface::daemon, network::server, network::service,
 protocol::http, role::program, use::proxying
Download-Size: 81.8 kB
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian stretch/main amd64 Packages
Description: small, powerful, scalable web/proxy server
# Rails 6 で materialize-sass を使う方法

`materialize-sass`を使おうと思ったら意外とハマってしまったので、
簡単ですが導入方法をメモしておきます。

#### `gem`のinstall

`Gemfile`に`gem`を追加します

```Gemfile:Gemfile
gem 'materialize-sass', '~> 1.0.0'
gem 'material_icons'
```

いつものようにinstall

```sh:Terminal
bundle install
```

#### `scss`ファイルでimport

`app/assets/stylesheets/application.scss`で`materialize`スタイルをimportします

```scss:app/assets/stylesheets/application.scss
@import "materialize";
```

以上で`materialize-sass`が使えるはずです！

`config/webpack/environment.js`で定数を定義して
`app/javascript/packs/application.js`で`require`します

```js:config/webpack/environment.js
const materialize = require('materialize')
```
`javascript`でも`require`する手順がいろんなところに書いてあるんですが、エラーがおきて正しく動かなかったです。
いまいち正しい書き方がわからなかったです。

`javascript`で`require`するなら`yarn`でインストールしないといけない気がするので、
多分必要ないんじゃないかと思ってるんですが、もしわかる人がいたら教えてください。
Debian 8にNginx 1.6をインストール（OS標準）

# はじめに

Debian8にNginxを標準インストール
親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.6.2

# apt show nginx
Package: nginx
Version: 1.6.2-5+deb8u6
Installed-Size: 102 kB
Maintainer: Kartik Mistry <kartik@debian.org>
Depends: nginx-full (>= 1.6.2-5+deb8u6) | nginx-light (>= 1.6.2-5+deb8u6) | nginx-extras (>= 1.6.2-5+deb8u6), nginx-full (<< 1.6.2-5+deb8u6.1~) | nginx-light (<< 1.6.2-5+deb8u6.1~) | nginx-extras (<< 1.6.2-5+deb8u6.1~)
Homepage: http://nginx.net
Section: httpd
Priority: optional
Download-Size: 72.9 kB
APT-Manual-Installed: yes
APT-Sources: http://security.debian.org/debian-security/ jessie/updates/main amd64 Packages
Description: small, powerful, scalable web/proxy server

N: There is 1 additional record. Please use the '-a' switch to see it

# apt show nginx -a
Package: nginx
Version: 1.6.2-5+deb8u6
Installed-Size: 102 kB
Maintainer: Kartik Mistry <kartik@debian.org>
Depends: nginx-full (>= 1.6.2-5+deb8u6) | nginx-light (>= 1.6.2-5+deb8u6) | nginx-extras (>= 1.6.2-5+deb8u6), nginx-full (<< 1.6.2-5+deb8u6.1~) | nginx-light (<< 1.6.2-5+deb8u6.1~) | nginx-extras (<< 1.6.2-5+deb8u6.1~)
Homepage: http://nginx.net
Section: httpd
Priority: optional
Download-Size: 72.9 kB
APT-Manual-Installed: yes
APT-Sources: http://security.debian.org/debian-security/ jessie/updates/main amd64 Packages
Description: small, powerful, scalable web/proxy server

Package: nginx
Version: 1.6.2-5+deb8u5
Installed-Size: 102 kB
Maintainer: Kartik Mistry <kartik@debian.org>
Depends: nginx-full (>= 1.6.2-5+deb8u5) | nginx-light (>= 1.6.2-5+deb8u5) | nginx-extras (>= 1.6.2-5+deb8u5), nginx-full (<< 1.6.2-5+deb8u5.1~) | nginx-light (<< 1.6.2-5+deb8u5.1~) | nginx-extras (<< 1.6.2-5+deb8u5.1~)
Homepage: http://nginx.net
Tag: implemented-in::c, interface::daemon, network::server, network::service,
 protocol::http, role::program, use::proxying
Section: httpd
Priority: optional
Download-Size: 72.6 kB
APT-Sources: http://deb.debian.org/debian/ jessie/main amd64 Packages
Description: small, powerful, scalable web/proxy server
```
#rsec でメソッドチェーンしているメソッド実行を expect / allow でモックする例 ( ActionMailer でのメール送信とか) ( #Rails  #ruby )

こんなのどうやってモックするの？

```rb
ActionMailer::Base.email(subject: 'YES').deliver
```

.email はモックできても、 email の結果が nil になるので .deliver で落ちる。

# こうだ。

呼び出し結果に deliver メソッドを持つインスタンスを返す。

```rb
expect(ActionMailer::Base).to receive(:email).and_return double(deliver: nil)
```


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2593








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Mac OSX Mojave にアップデートしたら音がでなくなった場合（対象者かなり限定）

# はじめに

この記事は、Mac OSX Mojave または Catalina にアップデートした際に下記の症状が起こった場合のトラブルシューティングです。

- YouTube などの動画がカクカクして本体から音がでない、映像は見えるが音が途切れ途切れになる
- iTune, QuickTime などで音楽ファイルが再生できない、またはアプリが落ちる
- その他、サウンド系アプリやオーサライズソフトでデバイス等は問題なくみえているのに音が出ない
- 起動時のジャーンの音は出る（注意：最近のMacはこの起動音はそもそも出なくなっています）
- [ハードウェアテスト(Apple Diagnostics）](https://support.apple.com/ja-jp/HT202731) をしても問題はない

上記の症状に対してが対象です。そして重要なのが、下記の条件に合致する場合に対応します。

- Mac OSX Sierra, High Sierra から Mojave (10.14.x) または Catalina (10.15.x) にアップデート、または、クリーンインストール後にデータ移行した場合
- **過去または現在、ソニー のDACアンプ UDA-1 を使っていた（る）**

この[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/)を使っていたMacなのかどうかが、貴方にとって本記事が有効かどうかの分かれ道です。もし、[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/) を使っていなかったのならば、他に原因があります。恐らく、入れていたアプリのドライバーが悪さしている可能性がありますので、探ってみてください。

[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/)を使っていた貴方、良かったですね！以下の対応で直ります（たぶん）。

# 原因である UDA-1 プラグインをアンインストールする

1. [UDA-1ドライバーダウンロード](https://www.sony.jp/support/netjuke/download/driver-uda1-mac/)のページからUDA-1 USB端子用 ドライバー(SONY_USB_DAC_Amp_Driver_(Mac)_V1.1.dmg）をダウンロード
2. SONY_USB_DAC_Amp_Driver_(Mac)_V1.1.dmg を展開すると出てくるアンインストーラー "SONY USB DAC Amplifier Uninstall" を実行
3. 再起動
4. 確認！無事に音がなりましたか？

# Links

- [macOS Mojaveにアップデートすると音声再生が止まる(fumiさん)](https://graphitelog.net/2018/09/macos-mojave_coreaudiod/)
- [Apple Comunity:macOS 10.14.2 QuickTime Playerが予期しない理由で終了します](https://discussionsjapan.apple.com/thread/110214396)

# おわりに
この原因を見つけるまで、本当に何度OSを入れたりアプリを削除したりの試行錯誤をしたかわかりません。Mojave のアップデートが出るたびに繰り返しては、直ってなくてため息。音がならないというだけでは様々な原因や対処方法がネット上でも見つかります（英語圏含む）。

ようやく上記の記事を発見し、以前 [ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/)を使っていたのを思い出し無事に解決しました。

現在、[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/) は発売中止になっており、ドライバーも一度アップデートしたきりです。よって、同じトラブルに巻き込まれる人は少ないと思いますが、中古で[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/)はまだ流通しています。うっかり、ドライバーをいれると音がでなくなる可能性がありますのでご注意ください。

引き続き[ソニー DACアンプ UDA-1](https://www.sony.jp/system-stereo/products/UDA-1/) を Mojave, Catalina 上で DAC 経由で使えるかどうかは、既に UDA-1 を売り [Olasonic NANO-DA1](https://www.olasonic.jp/product/?id=1526450199-982715)に乗換えてしまったので確認できません。申し訳ありません。OS標準のドライバーで動くことを望みます。
（Olasonic NANO-DA1 はドライバーインストール不要で動きます）

なお、同軸COAXIALや光OPTで繋ぐ場合は当然 UDA-1 でも問題ないでしょう。
A-FrameでCSS Flexboxライクなレイアウトで日本語対応なUIを作った

# はじめに

OculusQuest 用に WebVR + [A-Frame](https://aframe.io/) で何か作るとき，簡単なUIが欲しくなることが多いのですが，WebGL上で動いてA-Frameと相性の良いUIフレームワークがなかなか見つからなかったので実装しました．

最初は他のライブラリに頼りつつ足りないものを自作していたら，いつの間にか色々作ってしまったので同じようなことで困っている誰かの助けになればと思います．

# A-Frame xyLayout

作ったやつです．
https://github.com/binzume/aframe-xylayout

以下のような特徴があります．

- 素直なレイアウトコンポーネント
  - CSS Flexbox風のレイアウトコンポーネント
  - 幅と高さを持ったオブジェクトなら何でも配置できます
- 日本語入力できるソフトウェアキーボード
  - フォーカスがあたってるDOM要素にKeyboardEventを送る汎用的な挙動
  - 物理キーボードでの入力にも対応しています
  - [Google CGI API for Japanese Input](https://www.google.co.jp/ime/cgiapi.html) を使っています
- UIコンポーネント
  - ラベル，ボタン，トグルスイッチ，ドロップダウンリスト，スライダ，スクロール，テキストボックス等
  - ドラッグして移動できるウインドウも入ってます
- シンプル
  - A-Frame(とTHREE.js)のみに依存
  - コンパクト (約35kB)

プロトタイピング用に使ってるので，UIコンポーネントの見た目はまだ粗が多いです．


## 利用方法

- [README](https://github.com/binzume/aframe-xylayout/blob/master/README.md)にコンポーネントの一覧は書いてありますが，説明はほぼ無いので，以下のデモのhtmlを参照してください．
- 今後も破壊的な変更が加わる予感がするのとnpmパッケージも公開してないので，とりあえずは [xylayout-all.min.js](https://binzume.github.io/aframe-xylayout/dist/xylayout-all.min.js) をダウンロードして使うのが良いと思います．
- MIT Licenseです．


## デモ

- [Layout](https://binzume.github.io/aframe-xylayout/examples/layout.html)
  - 箱を並べる．動作確認用
- [UI Components](https://binzume.github.io/aframe-xylayout/examples/window.html)
  - UIコンポーネント色々
- [Virtual keyboard](https://binzume.github.io/aframe-xylayout/examples/keyboard.html)
  - テキストボックス＋ソフトウェアキーボード
- [Google search box](https://binzume.github.io/aframe-xylayout/examples/google.html)
  - ただの検索ボックス．作業スペースに一つ浮かべておくと便利


![ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/8c7d04b9-0714-3e54-88fa-cb00174fac39.png)
![keyboard.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/7bdb1bdf-e11f-5713-bd4c-51e625689979.gif)
![layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/702f9245-cb52-eb93-3b1e-1c698fb8a469.png)

## ほしかったもの

### 日本語対応

3Dで日本語を表示するとだいたい面倒なことになりますが，深く考えず「とりあえず」日本語を表示できる仕組みが欲しいです．

今回実装したものはマルチバイト文字が含まれているとCanvasを使ったレンダリングにフォールバックするだけなので，見た目はあまりきれいじゃないです．解像度は設定できますが，真面目にきれいなレンダリング結果を求めるなら必要な文字のMSDFフォント等を用意する必要があります．


### 扱いやすいレイアウトの仕様

試行錯誤の結果，CSS Flexboxもどきになりました．とりあえずレイアウト機能の仕様で悩んだらFlexboxにしておけばよいという学びを得ました．

### なるべく普通の挙動のキー入力

よくあるソフトウェアキーボードは同じライブラリ内で提供されているテキストボックス専用に作られてたりするのですが，キー入力を受け付ける処理がそのライブラリ専用になってしまって微妙な気分になります．

なるべく通常のDOMのように扱いたかったのと物理キーボードも同じ処理で完結させたいので，フォーカスあたってるDOM要素にKeyboardEventを送るだけの実装になっています．

日本語変換もKeyboardEventを横取りして変換済みのテキストを送り直す仕組みなのでOculus QuestにBluetooth等で接続した物理キーボードでも同様に日本語入力できます．

# 他のライブラリ


使ってみたり動かしてみて，良さげだったやつ．

### A-Frame Material Kit

https://github.com/etiennepinchon/aframe-material

- マテリアルデザイン
- レイアウト機能はない
- 開発止まってる

### aframe-gui

https://github.com/rdub80/aframe-gui

- シンプル
- Flexboxのサブセット
- 今回作ったやつに一番近い

### AFRAME Material Collection

https://github.com/the-expanse/aframe-material-collection

- [Yoga Layout engine](https://yogalayout.com/) ベース
- UI周りが一通り揃っている
- RenderTextureに描画するので平らなUI

### aframe-layout-component

https://github.com/supermedium/superframe/tree/master/components/layout/

- 便利ライブラリ集のsuperframeの一部
- レイアウト機能のみ
- UI向きではない
SDカードリーダ/ライタ　ベンチマーク

## 【序文】
いつ購入したのか自分でも覚えていないような古い SDカードリーダ/ライタを使い続けていたけど流石に最近調子が悪い。
USB3.0版のパフォーマンスにも興味があったので買い換えた。
ベンチマークを記録に残す。

## 【環境】
| 対象 | 説明 | URL |
| ---- | ---- | ---- |
| BSCRSDU2WH | USB2.0接続 SDカードリーダ/ライタ | https://www.buffalo.jp/product/detail/bscrsdu2wh.html |
| KE-CRS3 | USB3.0接続 SDカードリーダ/ライタ | https://www.lmt-inc.jp/products/kellner_11.html |
| M203 | 32G microSDカード | https://jp.toshiba-memory.com/product/microsd/muj/index_j.htm |
母艦は Windows10。

## 【ベンチマーク】
| 対象 | 読込 | 書込 |
| ---- | ---- | ---- |
| BSCRSDU2WH | 21.50 | 17.41 | 
| KE-CRS3 | 88.60 | 21.97 |

**BSCRSDU2WH**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/c61e23bf-5aa3-f645-b27d-02d322e8721a.png" width=30%>

**KE-CRS3**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254888/2d3167f9-a7bd-7601-a400-4b401293b553.png" width=30%>

読み込みは4倍程度速くなったけど、書き込みは2割増し程度という残念な感じ。

最新の [Raspbian Buster with desktop(10.1)](https://qiita.com/god19/items/a3d76434ee24d2001923 "Raspbian Buster with desktop") を [balenaEtcher(v1.5.58)](https://qiita.com/god19/items/a3d76434ee24d2001923 "balenaEtcher") で書き込みに要した時間も計測（validating の時間含む）。

| 機器 | 書込時間 |
| ---- | ---- | ---- |
| BSCRSDU2WH | 約7分 | 
| KE-CRS3 | 約5分 |

千円程度の製品だとこんなもん？
ただ、microSD のバックアップを取る際は体感でも分かる程速くなった。
それと、実は最初は別の microSDカードでベンチマークを計り、その時はもっと数字が悪かった。microSDカードの性能に依存する部分もあると思う。

## 【余談】
今回購入した製品のパッケージに、USB3.0 は USB2.0 の10倍のスピードと謳っているのはちょっと作為的だと思う。
確かにそれは事実なんだけど、SDカード自体の読み込み、書き込みのパフォーマンスはそこまで良くないから、そんなスピードは出ない。じゃあ実測としてどの程度の違いがあるのかな？　というのがベンチマークを行った動機。

それと SDカードって容量の規格も色々あるけど（SD、SDHC、SDXC、SDUC）、スピードの規格もいわゆる Class10 以外にも、UHS の UHS Speed Class1 とか、アプリケーションパフォーマンスクラスの Class1（A1）とか屋上屋を重ねて複雑怪奇。
Linux 上で認識される際のデバイス名、mmcblk ってのも大人の事情でマルチメディアカードとして認識しているからだとか、そこら辺の事情も複雑。
後、USB3.0 も無かったことにされているそうで、正しくは USB3.1 Gen1 だとか。もう少し何とかならないものかね。年寄りにはついていけないよ。
JavaScriptではてなブックマークの興味ないブックマークをミュートする

普段はReactNativeでiOSアプリを開発してます

今回は、自分にとって興味のない技術もブックマーク一覧に出てしまうことから
そうしたブックマークをミュートにしてより自分にとって都合のいい情報だけを手に入れようと試みました

JavaScriptであるため、クラスやIDの含まれたHTMLとテキストさえあれば様々なサイトにも応用できるかと思われますが

よく情報収拾として使っているはてなブックマークのみを対象にしましたに基づき解決するシステムを組んだので知見を紹介します

##拡張機能
[Muting Hatenabookmark](https://chrome.google.com/webstore/detail/muting-hatenabookmark/ajakimbnnkaihkckoolhgajbgplflook)





自分にとって興味のない技術もブックマーク一覧に出てしまうため
なお、クラスやIDの含まれたHTMLとテキストさえあれば様々なサイトにも応用できるかと思われますが今回はよく情報収拾として使っているはてなブックマークのみを対象にしました

##ブックマークに適応するHTML要素を削除する処理　
```background.js
$(document).bind('DOMNodeInserted', function() {
  //DomNodeInsertedでJavaScriptで要素が追加された時にfunctionが機能します
  $("消したい要素").each(function(){
    textInElement = $(this).text()
	if(textInElement.match(/消したい要素に含まれる言葉/g)){
  	    $(this).hide()//言葉が合っていれば要素を消す
    }
　})
});
```



##使い方
インストールするだけ

デフォルトではCSSがミュート対象となっているので、ミュートキーワードを追加削除したい場合は拡張機能アイコンを右クリックしオプションで、行えます


なおこの拡張機能はプロトタイプであるためミュートONOFF切り替えは現時点ではできません
OFFしたい場合は、この拡張機能を削除してください



利用した意見、感想などよろしくお願いします
HPC とはなんじゃらほいほい？そのいち -HPCと並列処理-

# HPCって何だろう?
ちょっと他人に説明するのに困ったので、自分なりの解釈でカキコ。
High Performance Computing の略をさすことが多く、日本語にすると高性能計算です。

## 並列処理の必要性
HPC を語るのに必要なものとして並列処理が挙げられます。
これは、色々日常生活に置き換えて例示されることが多いです。
私がよく使うのが「田植えの速さを競う」ことに例えることです。

1. 田植えをするのに二つ方式があったとします。
    1. 最新鋭田植え機を1日30万円で借りてくる。
    2. 田植えのできる人を「お弁当とお茶を出すから」と言って16人集めてくる。
2. この二つの方法のどちらが速く田植えをできるでしょうか。

という問題があったときに、どちらを選べばいいでしょうか？

例えば、田植え機が10分で田植えを終えると仮定したときに、
人間1人でその田んぼを2時間かけて植え終わるとします。
1人で2時間ですが、2人なら最速で1時間、4人なら30分、8人で15分、16人で7.5分と
16人集めたら田植え機よりも速く終えることができるようになります。

うまくいけば松花堂弁当と玉露を出しても田植え機よりも安く速い時間で終わりにすることができます。

これが並列処理の基本です。

つまり、ひとつの仕事を速くすることを目的に、仕事を細分化してそれぞれに処理を割り当てることをさします。

## HPCは何でもありの世界？

では、これを現実の計算機の世界で考えてみると、
・田植え機→超高級CPUを使った計算機。
・人手→安価なCPUをたくさん使った計算機。
なのです。

ですが、HPCは金に糸目をつけず田植え機を16台集めて並列処理をしているようなものです。
しかし、田植え機同士が田んぼの中を所せましと動くとどうなるか？もちろん相当広ければ話は別ですが、
狭い田んぼに16台も田植え機が走ると衝突して大変なことになりますよね？

そこで、必要なもののひとつが、うまく動かすための指示、つまりプログラムなのです。

…と、今日はここまで。続きはまた…。
Schema validation failed with the following errors: Data path “.builders['app-shell']” should have required property 'class'が発生した

#エラー
（以下全文）

```
Schema validation failed with the following errors:
  Data path ".builders['app-shell']" should have required property 'class'.
Error: Schema validation failed with the following errors:
  Data path ".builders['app-shell']" should have required property 'class'.
    at MergeMapSubscriber.project (/Users/uparupa/hogre/node_modules/@angular/cli/node_modules/@angular-devkit/core/src/workspace/workspace.js:173:42)
    at MergeMapSubscriber._tryNext (/Users/uparupa/hoge/node_modules/rxjs/internal/operators/mergeMap.js:69:27)
    at MergeMapSubscriber._next (/Users/uparupa/hoge/node_modules/rxjs/internal/operators/mergeMap.js:59:18)
    at MergeMapSubscriber.Subscriber.next (/Users/uparupa/hoge/node_modules/rxjs/internal/Subscriber.js:66:18)
    at MergeMapSubscriber.notifyNext (/Users/uparupa/hoge/node_modules/rxjs/internal/operators/mergeMap.js:92:26)
    at InnerSubscriber._next (/Users/uparupa/hoge/node_modules/rxjs/internal/InnerSubscriber.js:28:21)
    at InnerSubscriber.Subscriber.next (/Users/uparupa/hoge/node_modules/rxjs/internal/Subscriber.js:66:18)
    at MapSubscriber._next (/Users/uparupa/hoge/node_modules/rxjs/internal/operators/map.js:55:26)
    at MapSubscriber.Subscriber.next (/Users/uparupa/hoge/node_modules/rxjs/internal/Subscriber.js:66:18)
    at SwitchMapSubscriber.notifyNext (/Users/uparupa/hoge/node_modules/rxjs/internal/operators/switchMap.js:86:26)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! hoge@0.0.0 start: `ng serve`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the osarchive@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
```
#解決
angular.jsonのbuilderを下記に変更

```:angular.json
"@angular-devkit/build-angular": "^0.10.0",
```
その後

```bash
$ npm install
$ ng update @angular/cli @angular/core
$ npm audit fix
```
を実行すると僕の環境では直りました...ご参考までに...
git labでpushすると「protocol error: bad line length 8192」エラーになる。

# エラーの内容

機械学習教師データの大量画像ファイルをpushするとエラーになる。

```
Enumerating objects: 50423, done.
Counting objects: 100% (50423/50423), done.
Delta compression using up to 32 threads
Compressing objects: 100% (49817/49817), done.
fatal: protocol error: bad line length 8192
fatal: the remote end hung up unexpectedly
fatal: sha1 file '<stdout>' write error: Broken pipe
error: failed to push some refs to 'http://xxx.xxx.xxx.xxx/xxxx/xxxxx.git'
```

他のリポジトリはOKなので、意味がわからない。。
postBuffer = 10485760000
な極端に大きな値にしてもダメ
length 8192ってURLの限界？とおもった。sshでつなげばいいんじゃない？

# 対処

結果的にsshでした。
HTTPでcloneすると大量のファイル数に対応できないみたい。

キーを作成
centosで```ssh-keygen -t rsa -f id_rsa```を実行してキーを作る。
id_rsa以外の名前にすると動きません。
任意の名前にしたい場合.ssh/configを作ってあげる必要がある。
privateキーをWindowsのユーザープロファイルの[.ssh]フォルダへ格納する。

publicキーをgitlabのユーザーに登録。

cloneしたリポジトリの
.git\configをsshのurlにする

```
[remote "origin"]
	url = git@ごにょ:gonyo/ごにょ.git
```



# TortoiseGit

TortoiseGitの設定をsshで使えるようにするため、「設定＞ネットワーク、SSHクライアント」を
`C:\Program Files\Git\usr\bin\ssh.exe`に変更する。
↑は私の環境なので実際のssh.exeを探して設定する。
macOSをcatalinaにアップデートしたときの個人的不具合まとめ(10月14日時点)

#きっかけ
 僕「catalinaがリリースされた！アップデートしたろ」
↓不具合発生
周囲の人達A「あーあ」
周囲の人達B「いわんこっちゃない」
周囲の人達C「あほやん」

#問題が起きた環境

・macbook pro (13-inch, 2017)
・2.3 GHz Intel Core i5
・メモリ 8 GB

2017年製macbook proのタッチバー無しの安いモデルです

#起きた不具合と対処法
##sshの設定が消えた

UNIX系ではだいたいsshのクライアント側の設定が"/etc/ssh/ssh_config"または"~/.ssh/config"等に記述されるが、僕の環境では前者のほうに記述していた(多段sshとか)

アップデート後に普段通り他のネットワークにアクセスしようとしたら...
 僕「ログインできねぇ...」

↓対処法
・普通に記述し直した

##gnuplotのラベル類がめちゃくちゃに
研究での測定データをグラフ化する時に重宝していた
pdfで出力するとラベル類がめちゃくちゃになっちまった...

↓アップデート前　　　　　　　　　　　　　↓アップデート後
<img width="161" alt="befor.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/d878240b-de11-569e-5871-dd62242f66a7.png">　　　　　　<img width="102" alt="after.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513034/ea683887-e97c-0a59-0215-5897e331b573.png">



↓対処法
・Pythonのpandas,numpy,matplotlib等で代用
なんとなくPythonのほうが処理が速い気がするので今度からPython使います
gnuplotはデータ数が多い3次元プロットとかやると固まることが多かったしなぁ

###〜追記〜

@ygmin さんより、macOS用のバイナリをインストールすることでこの問題が解決できるようです。
↓バイナリはこのサイトからダウンロード
https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X

少なくとも僕の環境ではうまくいきました。
多分他の環境でも大丈夫だと思います。
貴重な情報ありがとうございます。


##inkscapeが起動不可能に
まあアップデートする前から動作は不安定だったけど
現行の安定版(0.92.4)が起動不可能になってまった...

↓対処法
・あれこれ試してbeta版(1.0beta1)を入れてみた結果無事起動してくれた
でも動作は結構不安定...

##Arduino IDEも最新版にアップデートしないとダメ (追記)

アップデートする前のバージョンを忘れてしまったけど起動しなくなった

以前のバージョンはともかくとして、とりあえず最新バージョン(1.8.10)は問題なく動作してる
対応早くていいっすね



#最後に
OS自体は以前と変わらず不安定な感じは無い
ちょくちょく対応出来てないアプリがあるって感じ
上に挙げた以外のアプリは今のところ問題は無いようである

原因が分かる方は教えてくださると大変ありがたいです
Jaeger で分散トレーシングをはじめる

# 分散トレーシング

## 導入前の課題

- マイクロサービスアーキテクチャが拡大した際にサービス同士の依存関係を把握するのに時間がかかる
- 分散サービスが肥大化するごとに障害が発生した際の特定やデバッグが困難になる

## 分散トレーシングとは
- サービス間通信を追跡して情報収集を行うこと
- サービス間に跨った障害解析
- 複雑なサービスの呼び出し関係の把握
- パフォーマンスのボトルネックの特定

# OpenTracing
分散トレーシングの標準仕様規格

- トレース情報のデータフォーマット
- データ収集用バックエンドのためのAPI仕様

# OpenCensus

- メトリック収集および分散トレーシングを行うためのライブラリ集
- Google社が社内で利用しているメトリック収集およびトレーシングのライブラリ集であるCensusのオープンソース実装
- データを収集するところまでの役割を持っていて、グラフ化したり分析したりするのは他のトレーシング/モニタリングサービスの役割

# OpenTelemetry

- CNCF Incubating Project
    - [OpenTelemetry | Cloud Native Computing Foundation](https://www.cncf.io/projects/opentelemetry/)
    
- 上記の OpenTracing と OpenCensus マージプロジェクトであり、各々の正式な後継版
    - [Migrating from OpenTracing](https://opentelemetry.io/docs/migration/opentracing/)

## トレース情報の概念モデル
- トレース
- スパン
- スパンコンテキスト

![スクリーンショット 2022-08-10 16.46.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238769/1336aafd-3830-a7b9-7ac4-cfc6d2d81ce1.png)

### トレース

- 連鎖的に実行される一連のサービスの呼び出しを追跡して記録したトレース情報
- 階層構造を持ったスパンの集合体

### スパン

- 個々のサービスがリクエストを受け、それに応答するまでの単位

### スパンコンテキスト

- 複数のスパンを連鎖的なサービス呼び出しとして関連づけるための識別子となる情報
- サービスからサービスを呼び出す際にスパンコンテキストを伝播させることによって複数のスパンを関連づけられる

# Jaeger

- OpenTelemetry 互換の分散トレーシングシステム
- CNCF Graduated (最も成熟したレベル)
- [Jaeger | Cloud Native Computing Foundation](https://www.cncf.io/projects/jaeger/)

## 開発元

- Uber

## 影響を受けたサービス

- Google Dapper
- Zipkin

## 仕様

- スパンの生成は各アプリケーション内で行う
- Istioを使っている場合はistio-proxy(Envoy)がJaeger-collectorにスパンの送信を行う

## Architecture

![スクリーンショット 2022-08-10 17.13.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238769/c53965c5-9697-d408-e12e-a6b0d927a31d.png)


## istio が導入されている場合

- istio-proxy が jaeger collector にスパン情報を送付する
- アプリケーションの改変を最小限に抑えることができる
- アプリケーションの***改変をゼロにすることはできない***
    - スパンコンテキストを伝播するための情報を他のサービス呼び出しの際にリクエストヘッダに付与する作業
    - カスタムヘッダ
        - `x-request-id`
        - `x-b3-traceid`
        - `x-b3-spanid`
        - `x-b3-parentspanid`
        - `x-b3-sampled`
        - `x-b3-flags`
        - `x-ot-span-context`
    - Ingress-Gateway を通して流入したリクエストには Header 情報が付与されている
link_toの書き方パターンのまとめ

##はじめに
RailsでECサイトをつくっているときに、 `link_to`の書き方でつまづいたので、いくつかのパターンをまとめてみました。

##環境
・MacOS High Sierra バージョン10.13.4
・Rails 5.2.1

##link_toのいろいろな書き方
###◆urlを使う
例
`<%= link_to “Qiita”, “https://qiita.com” %>`

###◆パスを使う
例
`<%= link_to “Tシャツ”, product_path %>`

###◆クラスを指定する
例
`<%= link_to “Tシャツ”, product_path , class: “btn viewBtn” %>`

###◆囲う
例
`<%= link_to product_path(product.id) do %>
　<h2><%= product.name %></h2>
　<h3><%= product.display_price %></h3>
<% end %>`

##おわりに
`link_to`は、けっこう使う頻度が高かったので、いろんな書き方のパターンについてまとめてみましたが、まだまだ覚えることがたくさんありそうです！


##参考
[ActionView::Helpers::UrlHelper - Rails API - Ruby on Rails]
(https://api.rubyonrails.org/v5.2.3/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to)
XCode11でSwiftUIのチュートリアルをやってみた（読みながら進めることをお勧めします）

## まずは公式のチュートリアルサイトを開きます
#　[公式(英語です）](https://developer.apple.com/tutorials/swiftui/creating-and-combining-views "チュートリアル")
その通りにやろうとすると微妙に違うところがあるので、そこを中心に解説します。
# Section 1は問題ないと思います。![スクリーンショット 2019-10-14 18.19.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435405/5aba43fc-c3dc-286f-e8ee-bf4ed36d05c2.png)
![スクリーンショット 2019-10-14 18.53.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435405/8f5ee05f-4431-a257-7bc7-b161d03206ab.png)
ここでResumeというボタンを押さないとこの後の意味がわかりません。
# Section2です
![スクリーンショット 2019-10-14 18.28.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435405/eb4ef8fd-04f0-1adc-b99a-7386c761711c.png)
わかりづらいですが、Hello Worldという文字をクリックして選択状態にしてから、Command+クリックをするとこのメニューが表示されます。
説明ではInspectとなっていますが、最新のXcodeでは「Show SwiftUI Inspector...」となっています。
# Section3
エディタへの入力操作はUndoできますが、クリックしての操作はUndoできないので気をつけないと訳が分からなくなります（笑）
Canvasへの描画はその通りにならないことが多いのでシュミレーターでの実行をお勧めします。
# Section4
画像は先にAssets.xcassetsをダブルクリックして開いてそこにドラッグ&ドロップで追加します。
# Section5
CanvasにMapが表示されて少し感動できます（笑）

# 一応目標通りの物が出来上がりました！！！
date型の値をハッシュのkeyにした時に日付と時刻を繋ぐ「T」がきえる

##原因
rubyでdate型をハッシュのkeyにした時にto_sされて消えてしまうのかもしれない

date型を文字列へ変換したい時にはフォーマット指定指定したほうがいいかも

##対策
to_sできる？
日付を文字列に変換するのはあまり得策ではない

strftimeでフォーマット指定すべき

```ruby:
# マニュアルのdeleted_atをフォーマット指定してフォルダとの値を比べる
deleted_datas = []
delete_users.each do | deleted_user |
  format_date = (deleted_user.deleted_at).strftime("%Y/%m/%d %H:%M:%S")
  deleted_datas << deleted_user if folders_date[format_date].blank?
end
```

まとめ
deleted_atの見比べする時に「T」が抜けて値が違うからエラーおきてました
もしもっと良き方法があればオシエテクダサイ
Kubernetes上のJenkinsのSetupWizardで「Calling the listener of the allowed exception 'updates.jenkins.io'」が出た場合はkubeadm initからやり直すこと

#事象
Kubernetes上でJenkinsのPodをdeployした場合に初期セットアップWizardで下記エラーが出る場合がある。

```shell
Calling the listener of the allowed exception 'updates.jenkins.io' at the attempt #1 to do the action check updates server
```

#原因
kubeadm initする際のオプションが足りない

##誤
```shell
kubeadm init --pod-network-cidr=10.244.0.0/16
```

##正
```shell
kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
```
【AWSエラー】クラスターを削除できません - CloudFormationスタックの削除がタイプアウトになりました。

このエラーでかなりハマった。

# 現象
cloud formationから削除が効かないし、ECSからのクラスタ削除が効かない。


<img width="771" alt="スクリーンショット 2019-10-14 19.46.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/256c6f71-a267-6cf7-1ef1-aa4e76fe4cdb.png">

# 解決策

vpcネットワークとかインターネットゲートウェイとか個別に消した。
多分どっかで整合性が合わなくなってるので
一旦個別に消してからCloud Formationを再度削除すると消えた。
クラスタも消せた。


数日消せないでお金かかった気がするが仕方ない。


<hr>

# TIPS

リソースグループから検索しに行くと今存在してるリソース一覧が見れる。
一個一個リージョンとサービス立ち上げて見に行かなくても、リソースを検索したらよし。
検索して、いらないリソースがあれば消せば良い。



<img width="393" alt="スクリーンショット 2019-10-14 20.03.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/62306ac6-0059-d1cc-4934-1576d8fe6fbe.png">

[リージョン一覧](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)

<img width="814" alt="スクリーンショット 2019-10-14 20.04.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/ffd0a288-3807-74e9-50e9-f3d4e11072ae.png">

<img width="626" alt="スクリーンショット 2019-10-14 20.04.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64334/c7ab17c6-ac36-e757-7e33-95404d7b430f.png">
2019年のWebフロントエンド技術学び(TypeScript, Next.js, GraphQL, etc.)

## 追記

続き :arrow_down_small: 

- [「手っ取り早くWebフロントエンド + WebAPIを作り始める方法2020」メモ](https://qiita.com/mazgi/items/6377888d4f3cdeccbb2e)
    - [Web Frontend を Next.js + TypeScript で書いて Docker でビルドする](https://mazgi.github.io/posts/2020.01/dockerized-typescript-nextjs-project/)
    - [Web APIをTypeScriptで書いてDockerでビルドする](https://mazgi.github.io/posts/2020.01/dockerized-typescript-webapi-project/)

----

機会があって最近Webフロントエンド開発に入門したので雑メモです。
あくまで自分で触った範囲の話なので網羅性は限定的です。
理解の客観的な誤りはコメントなどいただけると喜びます :sparkles: 

## TypeScript

- 型ありJavaScript
- コンパイル(トランスパイル)するとJavaScriptになる
- 単に「文字列型」だけではなく「”mysql” か “sqlite” だけ」みたいな縛りを表現できる
- 「文字列か数値」など柔軟な表現もできる
- まとまった型だけを定義する方法に type と interface があるが差はだいぶ減ってきている模様
    - いまいち使い分けわかってない
    - 私は今のところ型だと思えばtype、I/Fだと思えばinterface使ってる
- いわゆるOO言語のようにClass書ける
    - 最近のJavaScript(ECMAScript)知らないので、ECMAScriptとTypeScriptの差分がよくわかってない

## SPA, SSR, Next.js

- SPA == Single Page Application
- SSR == Server-Side Rendering
- SPAはかっこいいが404ページが作れないなど制限もある
    - "not found"と表示はできるが、status 404を返すことが原理的にできない
- SSR組み合わせるとちゃんと404返せる
    - Status 404返した後でJSでかっこよくページ表示するのは自由
- 検索エンジン対策はGoogleさんに限ってはもはやSSR不要
    - “Googlebot now runs the latest Chromium rendering engine when rendering pages for Search.”
        - https://webmasters.googleblog.com/2019/05/the-new-evergreen-googlebot.html
    - なんとGoogleさんのbotはWebページをちゃんとレンダリングしてクロールしてる
- 個人的なSSRのモチベーションは2つ
    - ちゃんとステータスコード返したい
    - SlackやSNSに貼ったときにOG表示されてほしい
- SPAとSSRを同時にやろうとしたけどなかなか難しかった
    - 私は主にwebpackで死んだ
- そこでNext.jsですよ
    - https://nextjs.org
    - SPAっぽく作りながらSSRもサポートしてくれる
    - Reactで書ける
    - フロントエンドのroutingをディレクトリツリーで書けるので初心者には楽
- Next.jsとよく間違えたやつにNuxt.jsがある
    - https://nuxtjs.org
    - 全く別もの、解決してる問題のレイヤーは近そう
    - こちらはVueベース

## Webpack

- JSを中心に各種リソースを文字通りpackしてくれる仕組み
- loaderなどを組み合わせて設定する
    - 「TypeScriptをtranspileするならts-loader」など
- 概念は単純なんだが組み合わせるものが多すぎてよく負ける
- フロントエンドについてはNext.js使うとある程度隠蔽してくれるので楽

## Redux

- 「イマドキなGlobal変数の入れ物」と理解した
- フロントエンドで使う
- ただし各所から読み書きしてカオスにならない仕組みがある
- 変数に階層作ることができるので「これはUI用」「これはリソース用」など分けて設計すべし
    - UI用: drawerの開閉状態, etc.
    - リソース用: テーブルで表示する実データ, etc.

## ORM

- 個人的に触ってみたのはSequelizeとTypeORM
    - https://sequelize.org
    - https://typeorm.io/#/
    - どちらもmigrationなどもある程度サポートあり開発には困らない印象
    - 本番運用は未知数、まぁ高負荷な本番でORMのmigrationそのまま使えることなんてきっと稀ですよ😇
- 好みとしてはしばらくTypeORM一択だと思う
    - SequelizeでTypeScriptなかなか大変そうだった
- TypeORMはTypeScriptでClass書いてpublic変数にアノテーション付けてくだけなので馴染みがある人には楽

## GraphQL

- https://graphql.org
- REST以外の選択肢として提示されたフロントエンド←→BFFのプロトコル
    - 別にどこで使ってもいい
- RESTのエンドポイント命名に疲れた方に
- 要は「ER図そのまんまクエリにすればええやろ」的発想
    - 人類はなぜ今までこれに気づかなかったのか
    - もちろんDBの内容と関係なくエンティティを定義して扱える
- 難点は「エンティティの定義をあちこちで」やりがちなこと
    - フロントエンドとBFFで同じ定義使いたい
    - ORMとI/Fでエンティティ定義を共通化するソリューションとしてはTypeORM+TypeGraphQLがある
        - https://typegraphql.ml
- 「認証とかどうすんの?」と思ってたが普通に書けた
    - ログインはmutationとして書く
    - 以降認証状態の検証はリクエストヘッダにtokenなり埋めとけばいい
    - 当初混乱したけど慣れたらふつーふつー