OmniAICreator/Qiita-1.07M huggingface dataset:
Quiverのショートカットキー

# はじめに
Quiverのショートカットキーをよく忘れてしまい、何度も何度もググっているので、よく使うやつは一覧化してまとめておこうかなと思った次第...

# ショートカットキー

## File
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/6cd555d9-bcf0-c941-183f-a1a181eeb74a.png)

|概要|キー|
|---|---|
|新規ノート作成|⌘N
|新規ノートブック作成|⌘⇧N
|Quiverを閉じる|⌘W
|Quiverを開く|⌘S

## Edit -> Find

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/b865b649-5ced-5eb0-8d8f-9c2dcef0b85e.png)

|概要|キー|
|---|---|
|開いているノートから検索|⌘f|
|全てのノートから検索|⌘⌥f|
|次の検索候補に進む|⌘G|
|前の検索候補に戻る|⌘⇧G|

## View

### Layout

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/2ffe1a76-55a9-9e3b-aa1c-bd128c097f18.png)

よく使うのはサイドバーのtoggle。

|概要|キー|
|---|---|
|Single Pane|⌘1|
|Two Panes|⌘2|
|Three Pane|⌘3|
|Toggle Sidebar|⌘0|

### Note View

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/a535b683-6b2f-3097-6ff9-0907d477aa62.png)

|概要|キー|
|---|---|
|エディターのみ|⌘4|
|プレビューのみ|⌘5|
|エディター・プレビューの両方|⌘6|

### Note
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/202faec0-8d34-857d-5033-cb5e60aa4cc7.png)

使ったことあるものだけ記載。
「Toggle Editor/Preview」は、Note Viewのショートカットキーでも十分。

|概要|キー|
|---|---|
|Show Floating Preview|^⌘P|
|Delete Note|⌘⌫|

## Cell

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241481/d37f5fd9-be72-eba2-75ba-094cf7a9fa77.png)

セル操作は毎度ググって時間を無駄にしている気がする。
個人的な重要ポイント。

|概要|キー|
|---|---|
|新規セル追加|⇧↩|
|新規セルを上に追加|⇧⌘↩|
|セル分割|⌥⌘↩|
|コードセルに変換|⌥⌘2|
|マークダウンセルに変換|⌥⌘3|
|LaTeXセルに変換|⌥⌘4|
|ダイアグラムセルに変換|⌥⌘5|
|セルを上に移動|⌥⌘↑|
|セルを下に移動|⌥⌘↓|
RaspberryPi_zeroにwifiドングル(WLI-UC-GNM2S)を挿してネットワーク接続する

# 目的
wifiモジュール付きのRaspberryPi zero W を購入するつもりが、
wifiモジュールが付いていないRaspberryPi zeroを購入してしまいました。

> [Raspberry Pi Zero v1.3 スターターキット（16GB版）](https://www.amazon.co.jp/gp/product/B077VD87HQ/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1)

どうしてもネットワークに繋がないと不便である一方、
wifiドングルにもRaspberryPiとの相性問題があるようで、今回はwifi接続に使ったwifiドングル名含めて記載しておきたいと思いました。

# 準備

Raspberry Pi Zero
[BUFFALO USB-wifiモジュール WLI-UC-GNM2S](https://www.amazon.co.jp/BUFFALO-エアステーション-USB2-0用-親機・子機同時モード対応-WLI-UC-GNM2S/dp/B071DRF9FN)
マイクロUSB端子のUSBハブ
その他（Raspberry Pi Zeroスターターキットに含まれる周辺機器）

# テスト

ドングルをささないとRaspberryPi GUI右上アイコンが×になり"No wireless interfaces found"と表示されます。また、ifconfigからwlan0が見付からないです。

<img width="305" alt="スクリーンショット 2019-05-06 17.12.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/d793233f-3cac-9b48-ba40-e739f820f0b5.png">


```
  $ ifconfig
  →wlan0がない
```

ドングルをさすとRaspberryPi GUI右上の×マークがwifiありマークになり、
ifconfigからwlan0が見付かります。

<img width="54" alt="スクリーンショット 2019-05-06 17.15.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/2295e506-3afb-2821-f90c-210a28ff7b9d.png">


```
  $ ifconfig
  →wlan0がある
```

接続したドングルと通信できている場合は青LEDが点灯するようです。
<img width="74" alt="スクリーンショット 2019-05-06 17.10.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/8ef112aa-4a29-16f9-9a17-cd3427e9fbad.png">


その後はWifi接続してブラウザ等からネットワーク接続できることを確認できればOK
BUFFALO USB-wifiモジュール WLI-UC-GNM2S以外は試していませんのでご注意下さい。

# 参考
[Raspberry Pi Zero v1.3 スターターキット（16GB版）](https://www.amazon.co.jp/gp/product/B077VD87HQ/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&psc=1)
[「Raspberry Pi Zero W」もSDカード・ブートにしてみた。](http://rdstyle.cocolog-nifty.com/gm/2017/08/raspberry-pi-ze.html)
[BUFFALO WLI-UC-GNM2S](https://www.amazon.co.jp/BUFFALO-エアステーション-USB2-0用-親機・子機同時モード対応-WLI-UC-GNM2S/dp/B071DRF9FN)
[無線LAN子機WLI-UC-GNMを接続していると毎回管理者権限の確認ポップアップが表示されるので、その対処方法](https://www.google.com/search?q=BUFFALO+USB-wifi%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB+WLI-UC-GNM2S&client=safari&rls=en&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjMiJv4uYbiAhWMWbwKHafZDH8Q_AUIDygC&biw=1349&bih=714#imgrc=1NQR3kykYJjoNM:)
[Raspberry Pi 3 cannot set up WiFi network](https://www.raspberrypi.org/forums/viewtopic.php?t=189889)
[Raspbian のWi-Fi設定（Raspberry Pi 初期設定）](https://raspida.com/wifi4raspbian)
SQLiteで昇順・降順にソートする方法

#概要
データベースから値を取得するとき、昇順・降順にソートしてから取得ができる
※前提条件として、SQLiteOpenHelperを使用してデータベースに値が入っていること

#使い方
|               number |    title    |
|:-----------------|------------------:|
| 15           |              ABCD |
| 67          |            EFGH|
| 22          |            IJKL|
| 12          |            MNOP|

例えば上記のようにデータベース(DB)に値があったとする

```
        if(helper == null){
            helper = new TestOpenHelper(getActivity().getApplicationContext());
        }

        if(db == null){
            db = helper.getReadableDatabase();
        }
        Cursor cursor = db.query(
                "testdb",
                new String[] { "number","title" },
                null, //selection
                null, //selectionArgs
                null, //groupBy
                null, //having
                null, //orderBy
        );
```
登録順にDBを取得するだけならこの方法で良い。


##order Byに指定する(ソート)
```
        if(helper == null){
            helper = new TestOpenHelper(getActivity().getApplicationContext());
        }

        if(db == null){
            db = helper.getReadableDatabase();
        }

        String order_by = "number ASC"; //ソートしたい値,昇順(ASC)か降順(DESC)か

        Cursor cursor = db.query(
                "testdb",
                new String[] { "number","title" },
                null, //selection
                null, //selectionArgs
                null, //groupBy
                null, //having
                order_by
        );
```
Cursorに値を代入する時にorder Byに指定する
→昇順はASC、降順はDESCを指定するだけ！


#その後(おまけ)
```
        //データリストを回す
        cursor.moveToFirst();
        for (int i = 0; i < cursor.getCount(); i++) {
　　　　　　　//ここに任意の処理を書く
            cursor.moveToNext();
        }
        cursor.close();
```
よく使う、ソート後のデータを取得する方法をメモ。
Could not find generator xxx. Maybe you meant xxx

## 背景

Gemfile に新しい gem を追加後 bundle update して rails generate コマンドを打ってみたけど認識されなかった。


    $ rails g serializer book
    Running via Spring preloader in process 16248
    Could not find generator 'serializer'. Maybe you meant 'helper', 'erb:mailer' or 'mailer'
    Run `rails generate --help` for more options.

## 対応

spring stop と打ちました。

    $ spring stop

成功。

    $ rails g serializer book
    Running via Spring preloader in process 16372
          create  app/serializers/book_serializer.rb

ちなみに Spring も元通り動いています。

    $ spring status
    Spring is running:

## Rails Spring

[spring](https://github.com/rails/spring) 

>Spring is a Rails application preloader. It speeds up development by keeping your application running in the background so you don't need to boot it every time you run a test, rake task or migration.

普段全く意識していなかったのですが、バックグラウンドで動いてくれているアプリケーションプリローダーのようです。
Rails 4.1 で標準になったようです。

## 参考

- [Could not find generator devise:install](https://github.com/plataformatec/devise/issues/753)
調べものする前に…

明日からまた仕事です．
休み明けで色々と忘れていそうですが，検索するのが面倒なのでリンクをまとめました．

# HTML+CSS+JS
- [MDN Web Docs](https://developer.mozilla.org/ja/)  
 ブラウザFirefoxを開発するMozillaによる，Web標準ドキュメント．  
 以下が主要なページである．  
 - [HTMLリファレンス｜MDN](https://developer.mozilla.org/ja/docs/Web/HTML/Reference)  
 - [CSSリファレンス｜MDN](https://developer.mozilla.org/ja/docs/Web/CSS/Reference) 
 - [JavaScriptリファレンス｜MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference) 
- 命名補助：[codic](https://codic.jp/)

## CSS
- [webliker](https://webliker.info)  
 CSSで忘れやすいことが分かりやすくまとめられている．
 - [CSSのセレクタ40個を総まとめ](https://webliker.info/07370/)
 - [paddingとmarginの違い](https://webliker.info/50549/)
 - [ショートハンド](https://webliker.info/css-short-hand/)

## JavaScript
- [JavaScriptの入門書 #jsprimer](https://jsprimer.net/)  
 ECMAScript 2015をベースにJSを学べる，GitBookを用いた電子書籍形式のWebサイト.

## jQuery
- [jQuery API Documentation](https://api.jquery.com/)

## Bootstrap
- [Bootstrap 4.3 公式Doc](https://getbootstrap.com/docs/4.3/getting-started/introduction/)

# SQL
- [SQLデータベース｜TECHSCORE](https://www.techscore.com/tech/sql/index.html/)

# Excel/VBA
- [Office TANAKA](http://officetanaka.net/index.stm)

# Slack
- [リマインダ―の設定](https://get.slack.help/hc/ja/articles/208423427-Set-a-reminder)
link_to deleteメソッドがGetメソッドで送られる。


#Rails 5.1 link_to deleteメソッドがGetメソッドになる。

ある日、deviseでログアウトを作って、

```
 <%= link_to 'ログアウト', destroy_user_session_path, method: :delete %>
```

ログアウトを試してみたら、ルーティングエラーが起きた。
そして何故か、ログを見てみたらGetでアクセスしている。


html見ても

```
<a rel="nofollow" data-method="delete" href="/users/sign_out">ログアウト</a>
```

しっかりdeleteになってる。



#解決方法



##rails-ujs

ruby on rails 5.0まではjqueryに依存していてjquery-ujsを使ってたらしいですが、5.1以降ではもうjqueryに依存していないので、rails-ujsを使うそうです。

```
$ yarn add rails-ujs
```

application.jsに追加。

```app/javascript/packs/application.js(webpacker)

(省略)...

import Rails from 'rails-ujs'
Rails.start()
```

または、

```app/assets/javascripts/application.js
//= require rails-ujs
```


自分の場合はこれで直りました。

#参考にさせて頂きました。
[Rails 5.1を使うならSprocketsは捨ててwebpackを使おう](https://qiita.com/park-jh/items/dd279b6addf2c29202c3)
#django shell でスクリプトファイルを直接実行する

```
python manage.py shell < script.py
```
or

```
cat script.py | python manage.py shell
```

# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
matplotlibのbackendを変更する

備忘録としてmatplotlibのbackendの変更方法を残しておきます．

# 現在のbackendを確認する
デフォルトのbackendは，`matplotlibrc`に記述されています．
`matplotlibrc`の居場所は`python`を実行して，以下のコマンドを打つことで確認できます．

```
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
```

次に，`matplotlibrc`内で以下のようにbackendが設定されている箇所を探します．

```
backend      : Qt4Agg
```

# backendを変更する
最後に，`matplotlibrc`を以下のように変更することでbackendを変更できます．

```
# backend      : Qt4Agg
backend      : TkAgg
```
【Windows】Visual Studio CodeにおいてターミナルをPowershellからコマンドプロンプトに変更する


はじめてvscodeを利用し、わからないことが多く、戸惑う場面が多いです。
今回は、コマンドを入力するたびに、

```
用語 'rails' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が
正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
```

と言われてしまったため、検索したところ、なにやらpower shellというものが絡んでいることによるメッセージとのことで下記のとおり解決方法を記載してみました。


##統合ターミナルがpowershellになっていたことが原因

[【Visual Studio Code 1.2以降】統合TerminalをコマンドプロンプトからPowerShellに変更する (Windows版)](https://blogs.msdn.microsoft.com/ayatokura/2016/06/10/vscode_terminal_powershell/)

このような記事を見つけました。
こちらは、ターミナルをコマンドプロンプトからpowershellに変更したい場合という記事でしたが、Windowsの場合、デフォルトでpowershellになっており、今回のようなコマンドレットはありませんという表示があったのかなと思います。

そこで、このような記事を見つけました。
[WindowsのVisual Studio Codeでコマンドプロンプトを利用する](https://blanche-toile.com/web/visualstudiocode-cmd-powershell)
上記の逆バージョンですね。
画像つきで非常にわかりやすい記事でしたので、こちらに従い、コマンドプロンプトに変更したいと思います。

##解決手順

１　まず、メニューの「ファイル」→「基本設定」→「設定」→「ユーザー設定」を選択して、設定ファイルを開きます。
vscodeが英語表記になっており、場所がわからない場合は、[こちら](https://qiita.com/ntkgcj/items/e77331932c7983dea830)を参考に日本語化してください。

２　検索メニューにterminalと入力し、でてきたIntegrated > Shell: Windows」の項目に、コマンドプロンプトの場所のフルパスを入力します。
フルパスはwindowsであれば以下のとおりです。

`C:\Windows\System32\cmd.exe`に書き換える。

![スクリーンショット (441)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256858/e18c20c0-a780-c3d7-b729-49014ccb9a7e.jpeg)



３　コマンドプロンプトが開けるか確認する
新しいターミナルを開きましょう。すると、以下のとおりcmdが選べるようになっています。

![スクリーンショット (442).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256858/abc74362-f34d-3376-ae39-a00ee520e5c2.png)

![スクリーンショット (443)_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256858/ff16c2e3-56e1-263d-d5c1-0171fc81be0a.jpeg)




４　再度、さきほどの「rails s」を入力してみると

```
'rails' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

このような親しんだ表記に変わりました。
このエラーが出てしまう理由は、また別な問題になると思いますので、今回は以上となります。



##はじめて知ったこと（CUIツール=CLIツール、GUIツール、powershell）
ターミナルで使用するものをCUIツールと呼ぶことをはじめて知りました。
また、powershellもはじめて知りました。検索してみると、比較的単純な命令文しか書けないコマンドプロンプトよりも、さらにレベルアップしたもの。とのこと。

また、**CUIツールとは、キャラクターユーザーインターフェースといいます。これは、テキストや文字のみを入力して操作するアプリケーションのことで、CLI（コマンドラインツール）ともいいます。**

それとは対照的に、**マウスなどで操作する普通のアプリケーションのことを、GUIツール（グラフィカルユーザーインターフェース）といいます。**

勉強するたびに新しいことを発見できればいいなと思います。
IT用語の中国語訳一覧

この頃、中国語のTechサイトをよく見るようになったので、IT用語をまとめようと思います。
もし間違いがあったら、コメントしてください。


## 機器

|中国語     |ピンイン　　　|日本語訳    |英訳　　　|
|---|---|---|---|
|鼠标|shǔ biāo|マウス|mouse|
|键盘|jiàn pán|キーボード|Keyboard|
|手机|shŏu jī|携帯電話|Cell phone(mobile phone)|
|电缆（电缆线）|diàn lǎn（diàn lǎn xià）|ケーブル|Cable|
|屏幕|píng mù|ディスプレイ|Display|
|电脑|diàn nǎo|パソコン|Computer|
|手机套|shŏu jī tào|スマホケース（カバー）|Mobile phone cover|
|设备|shè bèi|デバイス|Device|
|光盘|guāng pán|CD|Compact disk(CD)|
|硬盘|yìng pán|ハードディスク(HDD)|Hard disk |
|U盘|U-pán|USBメモリ|USB flash Drive|

## インターネット

|中国語  |ピンイン|日本語訳  |英訳|
|---|---|---|---|
|浏览器|liú lǎn qì|ブラウザ|web browser|
|上传|shàng chuán|アップロード|upload|
|下载|xià zài|ダウンロード|download|
|安装|ān zhuāng|インストール|install|
|卸载|xiè zài|アンインストール|uninstall|
|程序|chéng xù|プログラム|program|
|编程|biān chéng|プログラミングをする|to program|
|软件|ruǎn jiàn|ソフトウェア|software|
|开机|kāi jī|起動する、電源を入れる|start computer, power-on|
|关机|guān jī|電源を落とす（シャットダウン）|shut down, power-off|
|系统|xì tŏng|システム|system|
|邮箱|yóu xiāng|Eメールアドレス|Email address|
|二维码|èr wéi mǎ|QRコード、二次元バーコード|QR code, two-dimensional barcode|
|扫码|sǎo mǎ|コードをスキャンする|to scan a QR code or barcode|
|扫描|sǎo miáo|スキャンする|scan|
|网页|wǎng yè|ウェブページ|web page|
|网络|wǎng luò|ネットワーク、インターネット|network, Internet|
|安卓|ān zhuó|Android|Android(operating system for mobile devices)|

## 開発

|中国語  |ピンイン|日本語訳  |英訳|
|---|---|---|---|
|源代码|yuán dài mǎ|ソースコード|source code|
|编程|biān chéng|プログラム|program|
|框架|kuàng jià|フレームワーク|framework|
|别名|bié míng|エイリアス|alias|
|函数|hán shù|関数|function|
|组件|zŭ jiàn|コンポーネント|component|

## 固有名詞

|中国語  |ピンイン|日本語訳  |英訳|
|---|---|---|---|
|百度|bǎi dù|バイドゥ（検索エンジン大手）|Baidu|
|阿里巴巴|ā lǐ bā bā|アリババ（大手ショッピングサイトTaobaoの運営会社）|Alibaba|
|腾讯|téng xùn|テンセント|Tencent|
|字节跳动|zì jié tiào dòng|バイトダンス（tiktokの運営会社）|ByteDance|
|微信|wēi xìn|WeChat（LINEのようなメッセージアプリ）|WeChat(mobile text and voice messaging service developed by Tencent)|
|BAT||中国の大手IT企業（百度，阿里巴巴，腾讯）の頭文字から|BAT(Baidu, Alibaba, Tencent)|
|苹果公司|píng guŏ gōng sī|アップル（企業名）|Apple Inc.|
|谷歌|gŭ gē|グーグル|Google company and search engine|
線形代数入門

#スカラーとベクトル

<dl>
  <dt>スカラー</dt>
  <dd>通常の(単独の)数</dd>
  <dt>ベクトル</dt>
  <dd>大きさと向きを持つ</dd>
</dl>

ベクトルは **大きさ** と **向き** を持つため、スカラーの組として表現される。例えば大きさが1、向きがx軸から-45度のベクトルc、および大きさ1、向きがx軸から+60度のベクトルdは次のように表される。

```math
\vec{c} =
\begin{pmatrix}
\frac{1}{\sqrt{2}} \\
-\frac{1}{\sqrt{2}} \\
\end{pmatrix} \\
\vec{d} =
\begin{pmatrix}
\frac{1}{2} \\
\frac{\sqrt{3}}{2}
\end{pmatrix}
```

#行列
* スカラーを表形式に並べたもの
* ベクトルを並べたもの、ベクトルのベクトルと考えることもできる

例えば上記のベクトルcとベクトルdを並べた行列Cは下記のように表される。

```math
\boldsymbol{C} =
\begin{pmatrix}
\frac{1}{\sqrt{2}} & \frac{1}{2} \\
-\frac{1}{\sqrt{2}} & \frac{\sqrt{3}}{2}
\end{pmatrix}
```

#転置行列
m 行 n 列の行列 A に対して A の (i, j) 要素と (j, i) 要素を入れ替えた n 行 m 列の行列、つまり対角線で成分を折り返した行列を転置行列と呼ぶ。行列Aを例にすると、2行1列と1行2列の要素を入れ替えたものとなる。1行1列と2行2列の要素はi=jのため入れ替える必要がない。Cの転置行列Dは下記となる。

```math
\boldsymbol{D} =
\boldsymbol{C^T} =
\begin{pmatrix}
\frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\
\frac{1}{2} & \frac{\sqrt{3}}{2}
\end{pmatrix}
```

#行列の積
行列Aとスカラー &lambda; の積は下記となる。

```math
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix} \lambda = \lambda
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix} =
\begin{pmatrix}
\lambda a_{11} & \lambda a_{12} \\
\lambda a_{21} & \lambda a_{22}
\end{pmatrix}

```

行列同士の積の例として、2行2列の行列同士の計算を下記に表す。

```math
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12} \\
b_{21} & b_{22}
\end{pmatrix} =
\begin{pmatrix}
a_{11}b_{11} + a_{12}b_{21} & a_{11}b_{12} + a_{12}b_{22} \\
a_{21}b_{11} + a_{22}b_{21} & a_{21}b_{12} + a_{22}b_{22}
\end{pmatrix}
```

このため行列同士の積では交換法則が成立しないことがある。

```math
\boldsymbol{A}\boldsymbol{B} \neq \boldsymbol{B}\boldsymbol{A}
```

ただし分配、結合法則は成立する。

```math
(\boldsymbol{A}\boldsymbol{B})\boldsymbol{C} =
 \boldsymbol{A}(\boldsymbol{B}\boldsymbol{C}) \\
(\boldsymbol{A} + \boldsymbol{B}) \boldsymbol{C} =
 \boldsymbol{A}\boldsymbol{C} + \boldsymbol{B}\boldsymbol{C}

```

#逆行列
行列はその対角成分に1が並び、他は全て0となる行列を単位行列(I)という。

```math
a_{ij} = \left\{
\begin{array}{}
1 & (i = j) \\
0 & (i \neq j)
\end{array}
\right. \\
\boldsymbol{I} = 
\begin{pmatrix}
1 & 0 & \cdots & 0 \\
0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \cdots & 1
\end{pmatrix}
```

下記が成り立つとき、BをAの逆行列と呼ぶ。

```math
\boldsymbol{A}\boldsymbol{B} =
\boldsymbol{I} =
\boldsymbol{B}\boldsymbol{A} \\
\boldsymbol{A^{-1}} = \boldsymbol{B}
```

#連立n次方程式と行列
行列式を使うと連立n次方程式を簡潔に表現できる。例えば下記の連立2次方程式を考える。

```math
\frac{1}{\sqrt{2}}x - \frac{1}{\sqrt{2}}y = 1 \\
\frac{1}{2}x + \frac{1}{\sqrt{3}}y = 2
```

ベクトルx、ベクトルbを下記とする。

```math
\vec{x} =
\begin{pmatrix}
x \\ y
\end{pmatrix} \\
\vec{b} =
\begin{pmatrix}
1 \\ 2
\end{pmatrix}
```

すると上記の連立方程式は下記のように表される。ただし行列Dは上記で求めた行列Cの転置行列とする。

```math
\boldsymbol{D}\vec{x} = \vec{b}
```

さらに解xは下記のように表される。

```math
\vec{x} = \boldsymbol{D^{-1}}\vec{b}
```
実験２

<img width="1440" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/eb4053e0-33da-c6df-41a1-da09fa9a1cfb.png">
<img width="1440" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/e3a894b6-5b76-b04e-113c-495d11f40302.png">
<img width="1440" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/bd29db07-4e46-4524-beb5-c06a08ad722e.png">
<img width="1440" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/348a2e27-b8dc-aa4a-f9f3-56d7d38edec7.png">
<img width="1440" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/02216eef-6247-046d-2b91-42d9f04f565e.png">
<img width="1440" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251197/853a71d7-f551-3535-7871-4b5ca84b04b1.png">
Rails チュートリアル  第10章　学習内容のメモ

#第10章ユーザーの更新・表示・削除
##10.1 ユーザーを更新する
- ユーザー名やメールアドレスを編集するときに、毎回パスワードを入力しなくて良い仕様にする。
- パスワードがnilでも更新できるように、userモデルのバリデーションを追加する必要がある。

`validates :password, presence: true, length: { minimum: 6 }, allow_nil: true`

- allow_nil: trueの追加したとしても、has_secure_passwordによって、新規ユーザ登録時に存在性の検証が行われる（もともとhas_secure_passwordとpresence: trueという存在性を検証する２つのバリデーションが存在していた）

##10.2 認可
- 認証＝サイトのユーザーを識別すること
- 認可＝ユーザーが実行可能な操作を管理すること
- 第８章で認証の機能は構築したが、認可の機能は未実装  
⇨どのユーザでもあらゆるアクションにアクセスできる。URLを直接編集し、別のユーザの設定変更が可能となっている
- ユーザーにログインを要求し、かつ自分以外のユーザー情報を変更できないように制御する
- 具体的には、before_action（何らかの処理が実行される直前に特定のメソッドを実行する）に以下のlogged_in_userメソッドを追加する。

```app/controllers/users_controller.rb
    # ログイン済みユーザーかどうか確認
    def logged_in_user
      unless logged_in?
        flash[:danger] = "Please log in."
        redirect_to login_url
      end
    end
end
```
今更ながらSlackBotを作ってみた：Incoming Webhooks

SlackBotを作ってきましたが、これがいよいよ最後です。
　[今更ながらSlackBotを作ってみた](https://qiita.com/poruruba/items/ac147fbf0de92f6fad42)
　[今更ながらSlackBotを作ってみた：Slach Commands](https://qiita.com/poruruba/items/b386247d8ace78488f67)
　[今更ながらSlackBotを作ってみた：Interactive Components](https://qiita.com/poruruba/items/759f0eaba798d90419ea)
　[今更ながらSlackBotを作ってみた：ダイアログ](https://qiita.com/poruruba/items/d0e0852715687ea10bcf)

今回はIncomming Webhooksです。
いつでも好きな時に、特定のチャネルや特定のユーザにメッセージを送信します。

以下が参考になります。

Incoming Webhooks
　https://api.slack.com/incoming-webhooks

#Incoming Webhooksを有効にする

いつもの、Setting－Basic Informationを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a9612ccb-631f-4bf6-2d8a-aba0044f3063.png)

Incoming Webhooksを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/b011fb07-8028-6626-bb55-4e2de318cfcc.png)

Activate Incoming WebhooksをOnにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/61adbd29-b0ad-5a52-0642-b86a45d84336.png)

次に、下の方にある「Add New Webhhooks to Workspace」リンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/b14f6c97-edd9-67b4-ba98-189f1c986503.png)

投稿先として、メッセージを送信したいチャネルまたはユーザ名を選択し、許可するボタンを押下します。
例えば、最初に作ったチャネル#testprojectを選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/6b5a45b2-9ba6-8d7e-3737-6079ff219c5c.png)

そうすると、Webhook URLのテーブルに先ほどのチャネルとURLが追加されているのがわかります。Webhook URLは後で使うので覚えておきます。

#サーバ側の実装

Incoming Webhookによるメッセージ送信するきっかけとして、前回の投稿で作ったアンケートへの回答があった時としたいと思います。

app.submissionは変更、それ以外は追加です。

```controllers\slack_testbot\index.js
const WEBHOOK_URL_INCOMING = 【Webhook URL】;


app.submission(async (body, web) =>{
    var message = {
        "text": '回答ありがとうございました。',
    };
    app.responseMessage(body.response_url, message );

    app.responseMessage(WEBHOOK_URL_INCOMING, { text: body.user.name + 'さんがアンケートに回答しました。' });
});
```

【Webhook URL】の部分をさきほど生成されたIncoming WebhookのWebhook URLに置き換えます。

#動作確認

今回も、AndroidのSlackアプリで動作確認しました。

こんな感じで入力して、送信すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/4b290af9-759f-85d6-eeac-65016f40c004.png)

レスポンスメッセージを受信しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/5ba727e3-4356-1179-5542-4344db5f2eca.png)

ここまでは以前と同じですが、チャネル#testprojectにもメッセージが届いています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/a60c4ede-e31f-3241-e46d-b37b1e3a1c8d.png)
 
以上
各ウインドウサイズ別で指定できるpaddingとmarginのscss

uikitの書き方でのpaddingとmarginが指定できるscssコードです。

child指定もできます。

````scss:_padding_margin.scss
$direction: "", -left, -right, -top, -bottom;
$padding_margin: padding, margin;
$margin_size: (
        '':20px,
        -small:10px,
        -medium:40px,
        -large:40px,
        -xlarge:70px,
        -auto:auto,
);
$margin_big_size: (
        -large:70px,
        -xlarge:140px
);
$padding_size: (
        '':30px,
        -small:15px,
        -large:30px);
$padding_big_size: (
        '':40px,
        -large:70px);

$childs: (
        '':'',
        -child:' > *'
);

$window_size: (
        "":0,
        \@s: 640px,
        \@m: 960px,
        \@l: 1200px,
        \@xl: 1600px,
);

@mixin padding_or_margin($mode,$ele,$w_s:'',$remove_flag:true) {
   $important: '';
   @if $w_s=='' and $mode==margin {
      $important: !important;
   }
   @each $d in $direction {
      @if ($remove_flag) {
         .uk-#{$mode}-remove#{$d}#{$w_s} {
            #{$mode}#{$d}: 0 !important;
         }
      }
      @each $child, $c_ele in $childs {
         @each $e_s, $e_px in $ele {
            .uk#{$child}-#{$mode}#{$e_s}#{$d}#{$w_s}#{$c_ele} {
               #{$mode}#{$d}: $e_px #{$important};
            }
         }
      }

   }
}

@each $p_m in $padding_margin {
   $target: $margin_size;
   $target_big: $margin_big_size;
   @if ($p_m == padding) {
      $target: $padding_size;
      $target_big: $padding_big_size;
   }
   @each $w_s, $w_px in $window_size {
      @if $w_s=='' {
         /**nomal#{$w_s}#{$p_m}}**/
         @include padding_or_margin($p_m, $target, $w_s);
         @if ($w_px<1200) {
            @media (min-width: 1200px) {
               @include padding_or_margin($p_m, $target_big, $w_s, false);
            }
         }
      } @else if ($w_s!='') {
         @media (min-width: $w_px) {
            @if ($w_px<1200) {
               @include padding_or_margin($p_m, $target, $w_s);
               @media (min-width: 1200px) {
                  @include padding_or_margin($p_m, $target_big, $w_s, false);
               }
            } @else {
               @include padding_or_margin($p_m, $target_big, $w_s);
            }
         }
      }

   }
}



````
SQL Server on Azure VM　/　SQL Databaseのお役たちリンク集


## SQL Server on Azure VM

###  SQL Server on Azure VM概要

Azure Portal で Windows SQL Server 仮想マシンをプロビジョニングする方法
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/sql/virtual-machines-windows-portal-sql-server-provision

Azure の Windows 仮想マシン上で実行されている SQL Server についてよく寄せられる質問
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-iaas-faq


###  SQL Server on Azure 料金について

SQL Server Azure VM の料金ガイダンス
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-server-pricing-guidance

### SQL Server on Azure VMでのストレージ構成について

Storage Configuration Guidelines for SQL Server on Azure VM
https://blogs.msdn.microsoft.com/sqlserverstorageengine/2018/09/25/storage-configuration-guidelines-for-sql-server-on-azure-vm/


### 照合順序について

照合順序 – 文字の比較と並び順 (その 1)
https://blogs.msdn.microsoft.com/jpsql/2016/07/26/1-3/

## SQL Database

###  SQL Database概要

SQL Server 2014 自習書シリーズ （HTML 版）「No.5 Microsoft Azure SQL Database 入門」
http://www.sqlquality.com/Self2014/Self2014_AzureSQLDB/Text/mokuji.html


【はじめてシリーズ】はじめての Azure SQL Database【1/27更新】
https://blogs.partner.microsoft.com/mpn-japan/2019/01/27/azure-sql-database-101-movie/?ln=ja-jp

###  SQL Serverとの比較

機能の比較:Azure SQL Database と SQL Server
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-features


###  Azure SQL Database の購入モデル

Azure SQL Database の購入モデル
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-purchase-models

SQL Database の DTU と vCore をざっくり比較してみる 
https://blog.engineer-memo.com/2018/04/09/sql-database-%E3%81%AE-dtu-%E3%81%A8-vcore-%E3%82%92%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B/


###  Azure SQL Database バックアップ・リカバリ

自動バックアップ
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-automated-backups

データベースの自動バックアップを使用した Azure SQL データベースの復旧
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-recovery-using-backups


### アプリケーションからの利用

SQL Database クライアント アプリケーションの SQL エラー コード:データベース接続エラーとその他の問題
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-develop-error-messages


### パフォーマンス

パフォーマンスに関する推奨事項の検索と適用
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-advisor-portal

Detectable types of query performance bottlenecks in Azure SQL Database
https://docs.microsoft.com/en-us/azure/azure-sql/identify-query-performance-issues

Monitoring Microsoft Azure SQL Database and Azure SQL Managed Instance performance using dynamic management views
https://docs.microsoft.com/en-us/azure/azure-sql/database/monitoring-with-dmvs


###  セキュリティ

Azure SQL Database と Azure Synapse Analytics に対するプライベート リンク
https://docs.microsoft.com/ja-jp/azure/sql-database/sql-database-private-endpoint-overview

Azure Private Link のよく寄せられる質問 (FAQ)
https://docs.microsoft.com/ja-jp/azure/private-link/private-link-faq
hyperapp V1のComponentがTypeScript3.2以降に対応していない問題と対策

hyperapp V1のComponentは現時点で**TypeScript3.2以降に対応していません。**

このため、普通に最新のhyperapp V1 (1.2.9) とTypeScript (本記事の執筆時点で3.4.5) をインストールして、Componentを使用したコードをビルドしようとすると、ビルドエラーが発生します。

# 再現手順

たとえば、[naoki tomitaさん作成のhyperapp V1サンプルコード](https://github.com/naoki-tomita/hyper-sample/blob/master/index.tsx)を、最新のTypeScriptをインストールした上でビルドすると、下記のようなエラーが発生します。
（下記実行例は、node.js、git、yarnがインストールされていることを前提としています）

```
$ git clone https://github.com/naoki-tomita/hyper-sample
$ cd hyper-sample
$ yarn
(このときにpackage.jsonの記述に従い、TypeScript 3.2.2がインストールされる)

$ yarn tsc -p .
yarn run v1.15.2
$ C:\temp\hyper-sample\node_modules\.bin\tsc -p .
index.tsx:31:5 - error TS2605: JSX element type 'VNode<Attributes> | View<State, Actions>' is not a constructor function for JSX elements.
  Type 'View<State, Actions>' is missing the following properties from type 'Element': nodeName, children, key

31     <Up by={2} />
       ~~~~~~~~~~~~~

index.tsx:32:5 - error TS2605: JSX element type 'VNode<Attributes> | View<State, Actions>' is not a constructor function for JSX elements.
  Type 'View<State, Actions>' is not assignable to type 'Element'.

32     <Down by={1} />
       ~~~~~~~~~~~~~~~

index.tsx:33:5 - error TS2605: JSX element type 'VNode<{}> | View<State, Actions>' is not a constructor function for JSX elements.
  Type 'View<State, Actions>' is not assignable to type 'Element'.

33     <Double />
       ~~~~~~~~~~


Found 3 errors.
```


# 対策

naoki tomitaさんの修正版fork (improve-types-for-ts3.2.2 ブランチ) を使用することで、TypeScript 3.2以降でもhyperapp V1を使用することが可能です。

たとえば、yarnを使用しているのであれば、下記コマンドでnaoki tomitaさんの修正版forkをインストールし、ビルド時にエラーが発生しないようになります。

```
$ yarn add https://github.com/naoki-tomita/hyperapp#improve-types-for-ts3.2.2
```

（package.jsonにも修正版forkをインストールするように記録されるため、次回以降は`yarn`の実行だけでインストール可能です）

hyperapp V1のソースに上記の修正版forkが取り込まれればこの問題は解決すると思うのですが、今のところは作者のjorgebucaran氏が新バージョンであるV2へ尽力されているため（[→参考Issue](https://github.com/jorgebucaran/hyperapp/issues/788)）、V1への対応はかなり後になるか、もしくはこのままサポート対象外となってしまうことも予想されます。
そのため、当面は状況を見守りつつ、naoki tomitaさんの修正版forkを感謝しながら:pray_tone1:使用させていただくしかないのではないかと思われます。
カッコいいフォントを読み込もうとした話

# カッコいいフォントを読み込もうとした話

わし
「GW10連休とか、暇すぎて脳みそ溶けちゃうから、勉強も兼ねて __Node.js__ でWebアプリケーション作ろっと・・・。」
(・・・せっかく作るなら、カッコいいフォント使いたいなあ）

## フォントの設定方法
フォントは、デフォルトでブラウザが対応しているものもあれば、そうでないものも存在する。
大概、~~(ちょっと意味の分からない形をした)~~カッチョええデザインのフォントは対応していなかったりするので、サイトから拾って来ます。

### 無料サイトからフォントファイルを拾って来る
以下にサイトを載せておきますが、当然のことながら各ファイルが __商用利用可能かどうかはご自身でキチンと確認してくださいね？__

- 参考にしたサイト
    - [2019年用、日本語のフリーフォント377種類のまとめ -商用サイトだけでなく紙や同人誌などの利用も明記](https://coliss.com/articles/freebies/japanese-free-fonts-for-2019.html)

ダウンロードすると、こんな感じの拡張子のファイルが手に入るはずです。

- hogehoge.ttf
- hugahuga.otf
- ...etc


### フォントファイルの読み込みをCSSで設定する
拾ってきたフォントファイルを以下の感じでCSSに設定します。

```css
@font-face{
    // font-familyで呼び出す際に使用するフォント名を指定
    font-family: 'hugahuga';
    // 呼び出し時にデフォルトでfont-styleを指定可能
    font-style:normal;
    // 同上、font-weightも指定可能
    font-weight: unset;
    // 読み込むフォントファイルを指定
    src:url('/hugahuga.ttf');
}
```

# 結果！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264107/6358b96a-90bc-34b3-e124-4629f2cdad4c.png)


わし
（あれ・・・？なんか文字が思ったのと違うけど・・・？どういうことやねん(；・∀・)
開発者支援ツールで確認してみるかあ。。。ポチっ[F12]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264107/9fde1d85-ae7e-553e-184b-656d7d6a0caa.png)

わし
「__ファイルが重すぎて読み込めてない・・・だと？？__」

# 総括
特にローカルで見ている分には問題ないですが、独自フォントの読み込みは__通信容量を馬鹿みたいに食ってしまいそう__ですね。
デザインのために速度や容量を食いすぎるのは問題があると言わざるを得ない・・・。

やっぱり、安心・安定の__"游ゴシック"__先生か__"メイリオ"__先輩にしておくのが無難だね！！

ちなみに、__アルファベットだけなら高速です！__ ※(26 ✕ 2 + 記号)だから、日本語より圧倒的に数が少ない
日本語ファイルが重い原因ですので、__使用する文字を限定して読み込む__などの工夫をすれば、もっと早くできます

- 使用する文字を限定する記事
    - https://www.evoworx.co.jp/blog/pagespeed/
Google翻訳API  ( #GCP ) が HTML翻訳でコードブロック内の改行やらインデントを壊しやがるので #python で泣く泣く対応したスクリプト例

# concept

- `<pre></pre>` の中身を URLエンコードしておく
- Google翻訳にかける
- `<pre></pre>` の中身を URLデコードする

以上。


# python

```py
#!/usr/bin/env python3

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

import os, sys, requests, json, fileinput, re, uuid
import urllib.parse

resource_message = sys.stdin.read()

from_language = os.environ.get('FROM') if os.environ.get('FROM') else 'ja'
to_language = os.environ.get('TO') if os.environ.get('TO') else 'en'
translate_format = 'html'

def match_and_encode(match):
  return match.group(1) + urllib.parse.quote(match.group(2)) + match.group(3)

def convert_codeblocks(resource_message):
  resource_message = re.sub(r'(<pre>(?:<code>)?)(.+?)((?:</code>)?</pre>)', match_and_encode, resource_message, flags=re.DOTALL)

  return resource_message

def match_and_decode(match):
  return match.group(1) + urllib.parse.unquote(match.group(2)) + match.group(3)

def revert_codeblocks(resource_message):
  resource_message = re.sub(r'(<pre>(?:<code>)?)(.+?)((?:</code>)?</pre>)', match_and_decode, resource_message, flags=re.DOTALL)

  return resource_message

def google_translate(resource_message):
  data = {
    'q': resource_message,
    'source': from_language,
    'target': to_language,
    'format': translate_format
  }

  url = 'https://translation.googleapis.com/language/translate/v2'
  token = os.environ['TOKEN']

  headers = {
   'Authorization': 'Bearer {}'.format(token),
   'Content-Type': 'application/json',
  }

  res = requests.post(url, headers=headers, json=data)

  return(res.json()['data']['translations'][0]['translatedText'])

resource_message = convert_codeblocks(resource_message)
resource_message = google_translate(resource_message)
resource_message = revert_codeblocks(resource_message)

print(resource_message)
```

# HTML

```
<h1>Title</h1>

plain text

<pre><code>
print('Not translate in codes')
print(1)
print(2)
</code></pre>

plain text

<pre><code>
def ex():
  print(4)
  print(5)
</code></pre>

```

# exe


```
$ cat fixtures/english-codes.html | TOKEN=[GCP_TOKEN] FROM=en TO=ja ./translate-html-raw.py
<h1>タイトル</h1>平文<pre> <code>
print('Not translate in codes')
print(1)
print(2)
</code> </pre>平文<pre> <code>
def ex():
  print(4)
  print(5)
</code> </pre>

```



# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【Kotlin】okhttp3でログを出力する

API通信まわりの実装をする際は、ログを見れたほうが作業が捗りますよね。
今回はokhttp3を使ってログを出力する方法をご紹介します。

* macOS: 10.14.1
* Android Studio: 3.4
* kotlin: 1.3.21

# 手順
## build.gradleへの追加
`logging-interceptor`を追加します。

```groovy:app/build.gradle
def okhttp_version = '3.11.0'
implementation "com.squareup.okhttp3:okhttp:$okhttp_version"
implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version" // ログ出力に必要
```

## OkHttpClientの設定
ランタイムなどの設定と一緒に、`.addInterceptor...`の箇所を追加します。

```kotlin
init {
    val okHttpClient = OkHttpClient.Builder()
        .connectTimeout(20, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        // ログを出力させる設定
        .addInterceptor(HttpLoggingInterceptor().apply {
            level = HttpLoggingInterceptor.Level.BODY
        })
        .build()
}
```
手順は以上です。

# 出力してみる
<img width="1000" alt="スクリーンショット 2019-05-06 15.42.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/133ba712-35cc-6b2a-f64e-f7edc38f61c5.png">
こんな感じで、Logcatに`D/OkHttp:`のメッセージが吐き出されるようになれば成功です。
通信したURLや、GET/POST、ステータスコードや受け取ったレスポンスなど、色々表示してくれて便利です。

※もし手順通りに設定したにもかかわらずログが出力されない場合は、通信以前のところ（例えばインターネット通信の許可をしていないとか）でつまずいている可能性があるので確認してみてください。

# 参考
* [okhttp/okhttp-logging-interceptor at master · square/okhttp · GitHub](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor)
* [Android Retrofit2とMoshi - Qiita](https://qiita.com/yoppie_x/items/bbc0ca7a4c8a4b29e141)
「裁判手続等のIT化に向けた取りまとめ」について

裁判手続等のIT化に向けた取りまとめ ―「3つのe」の実現に向けて―平成30年3月30日 裁判手続等のIT化検討会
https://www.kantei.go.jp/jp/singi/keizaisaisei/saiban/pdf/report.pdf

裁判所がfaxをやめるだけなのか?
https://qiita.com/water_boy_tokyo/items/2e65989e416f7140bc5c

を拝見してkaitei文書を知った。

以下、ページ数だけの引用は、「裁判手続等のIT化に向けた取りまとめ」から

p.2
>民事訴訟法により、民事訴訟手続における電話会議システムやテレビ会議シ ステムの利用等の運用

p.2
>平成16年の民 事訴訟法改正により、オンライン申立て等を可能とする規定が設けられており (民事訴訟法132条の10等)

p.2
>「督促手続オンラインシステム」が導入さ れ、年間9万件以上利用される

# 疑問点１
p.2
>民事訴訟一般に関しては、平成16年以降、一部の手続につきオンライン申立て等を可能とする試行を特定庁で実施したものの、利用実績に乏しかった

利用しにくかったから利用実績がなかったかの分析がない。
利用者の意見の整理がない。

# 疑問点２
p.4
>紙媒体が前提となっている訴訟記録が電子化されることにより、審理が分かりやすく、また、記録保管等に要するコストの軽減も可能になることなどが指摘された。

電子媒体になることにより、法律解釈の幅、可能性に関する分析が高度化できるおとを示唆しないのはなぜか。

# 文書履歴(document history)
ver. 0.01 初稿 20190516
ver. 0.04 URL追記　20230308
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
RESTful vs GraphQL

# GraphQLとは
まずGraphQLとは、API作成の仕組みとしてRESTの代わりに使えます。クライアント側からサービスに必要なデータをあらかじめ記述し取得できるAPIのためのクエリ言語です。

# RESTful vs GraphQL

複数回のREST APIを叩くことで欲しいデータが手に入れます。例えば、

 1. GET /users/{id} - user情報を取得する

 2. GET /users/{id}/posts - userに紐づいてるpost情報を取得

 3. 请求/users/{id}/followers，userに紐づいてるfollower情報を取得

イメージ図は以下となります：
![rest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255229/1fd948bb-dc19-f3f1-bd11-0be0ce379ae3.png)

GraphQLを使うなら、一回だけでuser情報、post情報、follower情報を取得できます：

![graphQL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255229/f4432844-5dfb-3384-6373-1030c96edfac.png)
引用元：[GraphQL vs REST - A comparison](https://www.howtographql.com/basics/1-graphql-is-the-better-rest/)

# GraphQLを何故使うのか
一言いうなら、クライアント側欲しいデータ != REST APIのリスポンスデータという問題を解決するためです。

## REST APIの改善すべきところ
### いらないデータがREST APIのリスポンスに含まれています
  例えば、ユーザー情報リスト画面を作成する時に、ユーザー情報を取得するため /user という エンドポイント をアクセスし、リスポンスを取得できますが、誕生日や住所などの画面にいらない情報もたくさん含まれ、無駄になります。

### REST APIのリスポンスデータから取得するデータが足りない
  例えば、ユーザー情報リスト画面を作成する時に、画面表示に必要な情報「性別」がREST APIのリスポンスに含まれていなければ、まだ他のエンドポイントにアクセスし（例えば/uesr/{id}/detail）、足りていない分を取得する面倒を起こします。

# まとめ
今回はGraphQLについて簡単にまとめましたが、GraphQLを導入することでAPIサーバの実装が難しくなるのではないかという懸念を次回に解消していこうと思います。
Github の更新

# Githubの更新
プロジェクトを作り込み、更新しようとしたとき迷ってしまったので、書き留めておこうと思う

```:Terminal
$ git add .
$ git commit -m "comment"
$ git push https://github.com/ooooo/xxxxx.git
```

addでgitに新規ファイルの追加
commitで更新
pushでgithubを更新

これであっているのか?
まだ理解が足りてない気がする.
間違っていたら、教えてください
uGUIでボタン選択時の色をスプリクトで変更する。

uGUIは便利。
なんだけれども、ボタンイベント時の色変更(Color Tint)は減算なので、思った色に変更できない事が多い。(デフォルトを黒背景にした時とか特に)
なので、選択時にImageの色を直接変更できるようにした。
イベントシステムのcurrentSelectedGameObjecで現在選択しているオブジェクトを取得できるのがポイント。
```this.GetComponent<EventSystem>().currentSelectedGameObjec```
と使おう。

下記成果スプリクト。

```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UniRx.Triggers;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class button_select_push : MonoBehaviour
{
    private GameObject old_obj =null;

    // Start is called before the first frame update
    void Start()
    {
        var select_color = this.UpdateAsObservable()
            .Select(_ =>this.GetComponent<EventSystem>().currentSelectedGameObject)
            .Where(x=> x !=old_obj)
            .Subscribe(x => {
                if(old_obj != null)
                {
                    old_obj.GetComponent<Image>().color = new Color(0f, 0f, 0f, 1f);
                }
                x.GetComponent<Image>().color = new Color(0f, 0.9f, 0f, 1f);
                old_obj = x;
            });

    }


}
```
MonacaでAndroidのアップロード鍵で既存アプリが更新できなくなった時の対応

# はじめに
最近、[Monaca](https://ja.monaca.io/)でAndroidアプリを更新したときにGoogle Play アプリ署名が有効にしたためにハマったことのメモを残しておきます。
Google Play アプリ署名の仕組みについては[こちら](https://support.google.com/googleplay/android-developer/answer/7384423)をご覧ください。

# MonacaのAndroidキーストアのエクスポート
MonacaのクラウドIDEのメニューから、Androidキーストア設定を開いて、キーストアをエクスポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/f3f6740e-0cb7-29b7-acd3-4325efff69e4.png)

# アップロード鍵の作成とキーストアの更新
ダウンロードしたキーストアファイル **keystore.private** にアップロード鍵を更新します。


アップロード鍵は、Google Play アプリ署名を有効にするときに作成するか、後で [**リリース管理**] > [**アプリの署名**] にアクセスして作成できます。

アップロード鍵を作成する際は下記をご参照ください。

1. Android Developers サイトの手順に沿ってアップロード鍵を作成します。鍵は安全な場所に保管してください。
2. アップロード鍵の証明書を PEM 形式でエクスポートします。以下の下線付きの引数を置き換えてください。
``$ keytool -export -rfc -keystore keystore.private -alias jp.linedesign -file upload_cert.der
``

3. リリース プロセス中、指示に沿って、証明書をアップロードして Google に登録します。

### アップロード鍵を使用すると:
* アップロード鍵はアプリ作成者の認証する目的でのみ Google に登録されます。
* アップロードした APK は、ユーザーに送信される前に署名が削除されます。

# MonacaのAndroidキーストアのインポート
最後にMonacaのクラウドIDEのメニューから、Androidキーストア設定を開いて、キーストアをインポートすると完了です。
Error: Cannot find module '@babel/core'

#前提
gulpでbabelを使ってコンパイルしたい。
ということでインストールを進めたがエラーが出た。

#エラーメッセージ

```error.log
Error: Cannot find module '@babel/core'
```

#対処法
当初以下のコマンドを実行するも状況は変わらず

```installbabelcore.shell
npm install --save-dev babel-core babel-preset-env
```

babel7以上の以下のコマンドを実行

```installbabelcore7.shell
npm install --save-dev @babel/core @babel/preset-env
```

無事@babel/coreがnode_modulesディレクトリにインストールされ
gulpからbabelでコンパイルが通るようになった。

#環境
gulp4.0.1

#参考URL
インストール時参考にさせていただきました。
https://qiita.com/gigazombie/items/4227cdf25580a6c539f8

エラーメッセージで参考にさせていただきました。
https://github.com/babel/gulp-babel/issues/124
【Ruby on Rails】混同しやすいredirect_toとrenderの動きと引数

# はじめに
Qiita初投稿なので最初に少しだけ。

1か月ほど前にプログラミングの独学をし始め、現在はHTMLとCSSの基礎を終えて簡単なLPやサイトであれば模写してjQueryで軽く動きを付けられるくらいのレベルです。

恥ずかしながら現在ProgateでRuby on Railsを学習中です。
このレベルでQiitaに記事を書くのは大変申し訳なく思いますが、理解するのに少し時間がかかった点について、頭の中にあるふんわりとした概念を言語化して理解を定着させるためにも文章としてまとめたいと思います。

自身のインプットの質を高めるためのアウトプットですが、これからプログラミングを独学される方は多いと思うので、そういった方たちに向けても書いていきます。

また、まだまだプログラミング入門者ゆえに記述内容が間違っているかもしれないので、そういった場合はご指摘いただけると幸いです。

# 今回躓いた点
僕が今回躓いたのは、`redirect_to`と`render`の引数がどちらともURLだと間違って理解していたためにエラーを発生してしまい少し躓きました。

**`redirect_to`は引数に"URL"を指定する*のに対して、renderは"フォルダ名/ファイル名"を指定します。**

```ruby:qiita.rb
redirect_to("/posts/index")  #「/posts/index」というURLを指定している
render("posts/index")  #「postsフォルダ内にあるindexファイル」を直接指定している
```

ちなみに、`render("/posts/index")`でも動作します。URLとして記述したのに動作していたことが今回の間違った理解につながっていました。

躓いたことによって、それぞれの引数が全く別のものを指していることを理解すると同時に、この二つのメソッドの動きについてもしっかりと理解できました。

今回は各メソッドの内側の動きについて書いていきます。

# redirect_toとrenderは表面上の動きは似ているが内部の動きは大きく異なる
先ほども述べましたが、`redirect_to`と`render`は表面上の動きは確かに似ていますが、表示するまでの内部の動作が大きく異なります。

どういう事かというと、例えば、引数をこんな感じで取る場合を考えてみましょう。

```ruby:qiita.rb
# どちらとも表面上は「edit.html.erb」というビューを表示
redirect_to("/posts/index")
render("posts/index")
```

両者ともに表面上は「`edit.html.erb`」というビューを表示させます。(URL:/posts/indexのルーティングがindexアクションになっている場合。基本的にはこうなっていると思います。)

しかし、表面上は「edit.html.erb」を表示するだけですが、その内部の動きは全く異なります。

## Railsの表示の仕組み

内部の動きの違いについて説明する前に、Railsにおける表示の仕組みについて軽く押さえたいと思います。
Railsでは、ブラウザからHTMLファイルを要求された際に以下の順番でHTMLをブラウザに渡します。
**①ルーティング
②コントローラのアクション
③ビュー**

**ルーティング**は、指定されたURLから**どのコントローラ**の**どのアクション**で処理をするのかを決定する対応表のような役割を持っています。
そして、ルーティングによって指定されたコントローラのアクションはコントローラと同じ名前のフォルダからアクション名と同じ**ビュー(HTMLファイル)**をブラウザに返してます。

## redirect_toメソッドの実際の動き
表示までの大まかな流れが分かったところで話を戻します。
`redirect_to("/posts/index")`と`render("posts/index")`は両者ともに表面上は「edit.html.erb」というビューを表示させますが、その内部の動きは大きく異なります。

`redirect_to`は指定したURLに転送するメソッドです。

URLを指定するので、先ほど説明した**「①ルーティングを通って→②アクションを決定して→③ビューを表示する」**という流れでビューを表示し、ブラウザからURLを指定された時と同じ動きをします。

## renderメソッドの実際の動き
一方、`render`は**ルーティングやアクションを経由せずに直接ビューを表示することができます。**

ルーティングとアクションを経由せず直接ビューを表示するので、renderメソッドと同じアクション内で定義した＠変数をビューで使える点が`redirect_to`との大きな違いです。


# まとめ


- `redirect_to`の引数は「"URL"」でrenderの引数は「"フォルダ名/ファイル名"」
- `redirect_to`メソッドは引数でURLを指定するのでルーティングからアクションを通してビューを表示する
- `render`メソッドは引数で直接ビューを指定して表示するため、ルーティング→アクションを経由しないので`render`メソッドと同じアクション内で定義した＠変数をビューで使うことができる
slite3に分析対象データを高速に登録したいときの注意点

## 概要
- データ分析で元データをテキストファイルのまま扱っていたが、テキストファイルだと処理のたびに読み込み時間がかかり嫌になってきた。
- dbに入れてしまえば集計も簡単なのにと思い始めた。
- MySQLやPostgreSQLを立てるのも面倒なので、sqlite3に入れることにした
- pythonを使ってINSERTの時間が短くなるように工夫した。740,746件のデータを1分以内にINSERTできた。

## create table
- 処理対象データ(テキストファイル)を項目に分けて格納することにした。
- 集計しやすくするため、年月日のカラムも作成した。
- ハンドリングしやすくするため項番も入れた。
- データが増えたら、create tableしなおす予定で進めた。
- そのために、insert時間はトイタイム(10分前後)以内にしたい

```

import sqlite3

db_file = 'db.sqlite3'

drop_table = 'drop table logs'
create_table = 'create table logs("index" integaer, log text, log_type text, date text,ipaddress text, ...)'

db = sqlite3.connect(db_file)
dbc = db.cursor()
#dbc.executr(drop_table)
dbc.executr(create_table)
db.commit()
dbc.close()
db.close()

```

## insert(execute板)
- 処理対象データは、740,746件ある。
- テストで1,000件登録してみた
- 約90秒かかった
- ざっくり740倍すると、66,600秒。3,600秒で割ると約18時間。待ってられない。

```

import sqlite3

logs = getLogLines('./log')
db_file = 'db.sqlite3'

insert_sub = 'insert into logs ("index", log, log_type, date, ipaddress, ...)'
select_sub = 'select log from logs where date=? and ipaddress=?'

db = sqlite3.connect(db_file)
dbc = db.cursor()

max = len(logs)
for index, log in enumerate(logs):
    dbc.execute(select_sub, [ log[1], log[2] ])
    data = dbc.fetchall()
    if 0 == len(data):
        insert_list = createInsertList(log)
        dbc.executr(insert_sub,insert_list)
        print( index, '/', max)
    
db.commit()
dbc.close()
db.close()

```

## insert(executemany板)
- 調べた結果、まとめてinsertするexecutemanyが早いと判った。
- 10,000件まとめて実行するプログラムを書いて時間を計ってみた。
- 入っているかの確認も今回は除いてみた。
- 結果、12秒くらいで740,746件がINSERT出来た。5,000倍くらい早い。
- 有無判定を入れてもトイレタイムで終わりそう。

```

import sqlite3

logs = getLogLines('./log')
db_file = 'db.sqlite3'

insert_sub = 'insert into logs ("index", log, log_type, date, ipaddress, ...)'
select_sub = 'select log from logs where date=? and ipaddress=?'

db = sqlite3.connect(db_file)
dbc = db.cursor()

multiple_insert_list = {]}
for index, log in enumerate(logs):
    insert_list = createInsertList(log)
    multiple_insert_list.append(insert_list)
    mod = index % 10000
    if 0 == mod:
        if 0 != len(multiple_insert_list):
            dbc.executr(insert_sub, multiple_insert_list)
            multiple_insert_list = []

dbc.executr(insert_sub, multiple_insert_list)
    
db.commit()
dbc.close()
db.close()

```

## まとめ
- pythonでsqlite3にまとめてINSERTするときは、executemanyで1,000～10,000件をまとめてあげるのがお勧めです。
ComposerをmacOS Sierra 10.12にインストールする


##注意
公式サイトのスクリプトを使用してください。
https://getcomposer.org/download/


##インストール
###composer-setup.phpをコピーする（現在のディレクトリにcomposer-setup.phpが作成される）
```terminal:input
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
```

###composer-setup.phpのハッシュ値を生成してファイルが改ざんされていないことを確かめる

```terminal:input
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
```
```terminal:output
Installer verified
```

###composer-setup.phpを実行する（composer.pharが作成される）
```terminal:input
php composer-setup.php
```
```terminal:output
All settings correct for using Composer
Downloading...

Composer (version 1.8.5) successfully installed to: /Users/<ユーザー名>/composer.phar
Use it: php composer.phar
```



###composer-setup.phpを削除する
```terminal:input
php -r "unlink('composer-setup.php');"
```


###composer.pharを/usr/local/bin/composerに移動させる

```terminal:input
sudo mv composer.phar /usr/local/bin/composer
```

###動作確認
```terminal:input
composer --version
```

```terminal:output
Composer version 1.8.5 2019-04-09 17:46:47
```
PHP Warning: require(/path/to/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php): failed to open stream: No such file or directory in /path/to/vendor/composer/autoload_real.php on line 66となったときの対応方法

- 環境
    - macOS Mojave バージョン10.14.4
    - PHP 7.3.1 (cli)
    - Composer version 1.8.0

# 事象 : Laravelのバージョンを確認しようとしたら怒られた。
```bash
$ php artisan -V
PHP Warning:  require(/path/to/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php): failed to open stream: No such file or directory in /path/to/vendor/composer/autoload_real.php on line 66

Warning: require(/path/to/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php): failed to open stream: No such file or directory in /path/to/vendor/composer/autoload_real.php on line 66
PHP Fatal error:  require(): Failed opening required '/path/to/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php' (include_path='.:/usr/local/Cellar/php/7.3.1/share/php/pear') in /path/to/vendor/composer/autoload_real.php on line 66

Fatal error: require(): Failed opening required '/path/to/vendor/composer/../symfony/polyfill-mbstring/bootstrap.php' (include_path='.:/usr/local/Cellar/php/7.3.1/share/php/pear') in /path/to/vendor/composer/autoload_real.php on line 66
```

# 原因 : 必要なファイルが`vender`ディレクトリにないから
[symfony - laravel on cpanel raise error for autoload_real.php on line 66 - Stack Overflow](https://stackoverflow.com/questions/51246384/laravel-on-cpanel-raise-error-for-autoload-real-php-on-line-66/51300545)

## 対応 : `composer update`する
```bash
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 77 installs, 4 updates, 0 removals
... 省略 ...
  - Installing symfony/polyfill-mbstring (v1.11.0): Loading from cache
... 省略 ...
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.

# 治りました。
$ php artisan -V
Laravel Framework 5.7.28
```

### この間は問題なかったのに・・・なぜ？
```bash:ちょっと前の結果
$ php artisan -V
Laravel Framework 5.8.14
```
何かが更新でもされたのだろうか？それともなにかやったのを忘却しているのだろうか？