OmniAICreator/Qiita-1.07M huggingface dataset:
DBeaverでFirebird embedded Databaseに接続

Databaseを構築するのは面倒。
Embedded(組込)データベースでいい。
でも、SQLiteじゃ不満。
日付型がない。

Firebirdなら日付型もある。
Embeddedでも動く。

DBeaverでFirebird Embedded見に行けないかな。

## 環境

- Windows10 Pro x64
- DBeaver 7.10 installer版
- Firebird 3.05 x64 zip版
- FAManagementStudio ?

完全に僕のところの環境。
DBeaverのインストーラー版はJava Runtimeが入っているのでJava無しで動きます。
MacやLinuxでもほぼ同じことができると思います。

## DBeaverで接続

接続するDatabaseを作っておきます。

[FAManagementStudio](https://github.com/degarashi0913/FAManagementStudio)を使って作っておきましょう。

DBeaverではDatabaseの作成はできません。

DesktopにNEWDB.FDBを作成しておきました。

1. DBeaver上で新しい接続
2. Firebirdを選択
3. 下記のように指定します
4. ![2020-06-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/7717daee-96e3-aeb1-5bea-3a91edb58a19.png)
    5. ホスト：local
    6. ポート: 3050
    7. パス: %USERPROFILE%\Desktop\NEWDB.FDB
    8. ユーザー名:SYSDBA
    9. パスワード：なし
10. 「ドライバーの設定を編集」を押す
    11. ![2020-06-02 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/ea8c16b1-1d7c-968c-ff9d-77c589a38797.png)
12. 「ダウンロードと更新」を押します。
    13. ![2020-06-02 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/6ae8c123-bfeb-6252-017f-e6a4e84162dd.png)
    14. 最新のJDBC Driverを取得しておきます。
    15. DBeaverはJava11を使っているので 4.0.0.java11で動きます。
    16. net.java.dev.jna:jnaも 5.5.0 にしておきましょう。
    17. ダウンロードを押します。
18.  ![2020-06-02 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/ea8c16b1-1d7c-968c-ff9d-77c589a38797.png)
19.  Firebirdが入っているフォルダを指定します。
20.  フォルダを追加を押す
21.  ![2020-06-02 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/bf1f8e67-4fdb-18f4-be14-2ca23ea084d8.png)
22.  上記のようにzipで取得したFirebirdのフォルダを選択します。
23.  これでテスト接続をしてみると下記のようにつながります。
24.  ![2020-06-02 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24550/e6446afa-ffd4-b8ed-4164-145ae2219780.png)

### Q&A

#### Q: DBeaverのサイトじゃfbclient.dllを指定したら動くって書いてあったけど。

あれ嘘だよ。

実際にそれだけ指定しても動かなかったよ。

Firebirdの在りかを丸ごとパス指定してやっと動いたんだ。

DBeaver側もJayBird側もしっかり調べてないんじゃないかと思うんだよね…。

DBeaverのIssueやJayBridのForum眺めても解決策はなかったよ。(´;ω;｀)

#### Q: net.java.dev.jna って必要？

Embedded で繋ぐ場合は絶対必要なんだってよ。

マニュアルにそう書いてあった。

### あんまりお手軽じゃない

繋いでみた結論としてはあんまりお手軽じゃないな。
複数のMecabを別ディレクトリにインストールする(別辞書を使用する場合など)

#複数のMecabを別ディレクトリにインストールする

プロジェクトによっては、Mecabの別バージョンを導入する予定があったり、使用する辞書を使い分けたい場合がある。
同バージョンなら使用する辞書の指定先を都度変えれば問題ないが、別バージョンを導入する際に手間取らないために、ディレクトリ毎にMecabをインストールする手順を記載する。
実行方法は、パスを実行する度に通すためシェルを使用する。

Linux上での想定

```:mecabインストールイメージ
~/Mecab
    |- ver 0996_mecabA
    |    |-A辞書
    |
    |- ver 0996_mecabB
    |    |-B辞書
    |
    |- ver1000_mecabC(Ver1.0は現在存在しないが・・・)
         |-C辞書
```

下記手順で特定ディレクトリにMecabをインストールできる。複数ディレクトリにインストールする場合は下記手順を複数回行う。

```
#事前準備　コンパイラをインストールしておく
$ sudo yum install gcc
$ sudo yum install gcc-c++

#Mecabインストール
#バイナリファイルをダウンロード⇒解凍⇒今回はmecabディレクトリを作成し、そこにインストール⇒シンボリックリンクを実行ファイルと同階層に貼る
$ wget "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE" -O mecab-0.996.tar.gz
$ tar zxvf mecab-0.996.tar.gz
$ mkdir mecab
$ cd mecab-0.996
$ ./configure --prefix=/**path(任意、作成したmecabフォルダ)/mecab --with-charset=utf-8 LDFLAGS=-L/**path(任意、作成したmecabフォルダ)/mecab/lib
$ make && make install
$ ln -s /**path(任意、作成したmecabフォルダ)/mecab/lib/libmecab.so.2 /**path(任意、作成したmecabフォルダ)/mecab/bin

#辞書インストール
#バイナリファイルをダウンロード⇒解凍⇒インストール
$ wget "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM" -O mecab-2.7.0-20070801.tar.gz
$ tar zxvf mecab-2.7.0-20070801.tar.gz
$ cd mecab-2.7.0-20070801
$ ./configure --prefix=/**path(任意、作成したmecabフォルダ)/mecab/lib/mecab/dic --with-charset=utf-8 --with-mecab-config=/**path(任意、作成したmecabフォルダ)/mecab/bin/mecab-config
$ make && make install

#辞書の場所を設定
$ vi /**path(任意、作成したmecabフォルダ)/mecab/etc/mecabrc
～略～
#システム辞書のディレクトリ
dicdir = /**path(任意、作成したmecabフォルダ)/mecab/lib/mecab/dic/ipadic
#ユーザー辞書のディレクトリ(ある場合)
userdic = /**path(任意)/lib/mecab/userdic/***.dic
```

下記シェルで実行。引数に形態素解析を行う文字を入力する。(ファイルを指定したい場合等はシェルを書き換える必要あり)

```
#シェルを用意しシェルを実行する
#!/bin/bash
export PATH="/**path(任意、作成したmecabフォルダ)/mecab/bin:$PATH"
export LD_LIBRARY_PATH="/**path(任意、作成したmecabフォルダ)/mecab/bin:$LD_LIBRARY_PATH"
export MECABRC=/**path(任意、作成したmecabフォルダ)/mecab/etc/mecabrc

echo $1| /**path(任意、作成したmecabフォルダ)/mecab/bin/mecab
```
AWSリソースのパスワード等を、AWS上で管理する

# 何をしたいか
AWSで使用するDBパスワードなどの情報を、外部のパスワード管理ツールや、ましてやコード上で管理せずに、AWSサービスで管理するお話です。
今回はEC2サーバー内から利用するケースで考えます

# EC2で必要とするパスワード、パラメータ

こんなものがあるかと思う

RDS, Aurora
・マスターパスワード
・ユーザーログイン情報
・エンドポイントなどの接続情報

EC2等
・OS内での保存しておきたいconfファイル
・接続情報

# ユースケース
EC2から、RDSへMySQLログインする
ミドルウェア等の設定値を保存しておきたい
etc

#  どこで管理するのか
AWS Systems Managerのパラメータストアを使う

# 必要なプロセス
__踏み台サーバーからRDSへアクセスするケースで考える__

![200531_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/fc410fed-7b0c-29db-0735-2719dfc3b947.png)


## EC2に必要なRoleを当てる
SSMへのアクセスが必要なインスタンスに、Roleをアタッチする

![200531_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/14d61ff8-30a7-481c-2d1b-32a3ba014e91.png)


EC2の場合、以下のポリシーをアタッチ

SSMへの必要な権限（権限を絞る場合）
※リソースもパスでもっと絞れる

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

## パスワードや設定値をパラメーターストアに保存する

![200531_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/c12c928a-67bb-7a9d-1bdc-009729717bce.png)
図の赤線はCLIの場合

### コンソールの場合
SystemsManager > パラメータストア

<img width="628" alt="スクリーンショット 2020-05-30 18.41.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/ee02122f-33d7-de95-d7c8-de367de66f3e.png">
こんな画面で作成

### 設定項目に関して

・**利用枠**
4KBもあれば、JSONパラメータをまるっと保存しても、まあまあ足りる気はするが、8KBに拡張することもできる。
この「詳細」を選択した場合の料金は、パラメータストア APIインタラクション1万回毎に、0.05USD

・**タイプ**
「安全な文字列」は、AWSのKMSというサービスを使った
キーでの暗号化がされる
KMSのキーは、AWS管理のキーか、自身で管理したキーで暗号化するか選べる

### CLIの場合の設定例
・パラメータストアに値を保存
※ "ssm:PutParameter" Actionの許可が別途必要

```
aws ssm put-parameter --name /sample/database/master/user --type "String" --value "user" --description "master username" --region ap-northeast-1
```

今回はRDSのユーザ名とする
名前：/sample/database/master/user
値：user
説明：master username

## 使うとき

![200531_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/406764/6995a14d-6970-4aed-b7b6-9f86e2dedb5a.png)

・パラメータの取得

```
aws ssm describe-parameters --filters "Key=Name, Values=/sample/database/master/user" --region ap-northeast-1
```

因みに今回は「タイプ」をStringで保存したが、暗号化した場合は"kms:Decrypt"の権限も必要。

# 運用のコツ

## パスの管理
パラメータストアの管理は、システムの環境構成によって階層化した保存をしておくと
運用する際や、実際に引っ張ってくるときにとても楽

例
環境名/サーバー名/・・・
/Dev/DBServer/MySQL/db-string
/Stg/DBServer/MySQL/db-string

## IAM Policyの話
使い慣れたら良いのですが、はじめからActionやResourceを絞ると大変な場合もあるので
はじめは緩めに作ってから、権限を絞るのが無難かもしれません。


# SSMの良いところ
今回はパラメータストアだけ挙げましたが、安いし、運用面やセキュリティの観点でたくさんのメリットがあります。
さらに他のAWSサービスとの連携も容易で、例えばCloudFormationでテンプレートを流す際に使用することも可能です。

またちょいちょいメモしていきます。
Mingw-w64のオフライン インストール

g++をオフラインの端末にインストールしたので、その際のメモです。

# ダウンロード&展開
[Mingw-w64ダウンロードページ](https://sourceforge.net/projects/mingw-w64/files/)の中段あたりにあるMinGW-W64 Online Installerの次にあるのが、オフライン インストール用のファイルです。
![ダウンロード画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239172/e2c51b4e-57ca-da59-aa6f-d6e358bc21c5.png)

ファイル名（ex: `x86_64-posix-sjlj`）はオンライン インストーラーを使用したときの選択項目（以下の画面）に対応しています。適切なものを選んでください（私はよく分かりません）。
![online installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239172/c8409915-c482-d81a-7f0a-28a6d6bf69e6.png)

ダウンロードしたファイルをオフラインの端末に移します。ファイルは7z形式で圧縮されていますので、[7-zip](https://www.7-zip.org/download.html)で適当なフォルダーに展開してください（この記事では`D:\UserProgram\mingw64`とします）。


# パスを通す
このままだとパスが通っていないので、環境変数Pathにコンパイラーのパスを追加します。GUIでもできますが、Powershellを使った方法を紹介します。

```powershell:ユーザー単位
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "User")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.exeが含まれているパス
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "User")
```

端末単位で設定するには"User"を"Macine"に置き換えます。この場合、管理者権限が必要になります。

```powershell:端末単位（要管理者権限）
> $envPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
> $envPath += ";D:\UserProgram\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin" #←g++.exeが含まれているパス
> [System.Environment]::SetEnvironmentVariable("Path", $envPath, "Machine")
```


# テスト
動くかどうか試してみましょう。
以下を適当なフォルダーに保存します（この記事では`D:\test`とします）。

```cpp:hello.cpp
#include <iostream>

int main()
{
    std::cout << "Hello!" << std::endl;
}
```

次にPowerShellで以下を実行します。

```powershell:PowerShell
> cd D:\test
> g++ -g hello.cpp -o hello.exe #hello.exeが作成される
> ./hello.exe #作成したhello.exeを実行すると、"Hello!"と表示される
Hello!
```
最後のHello!が表示されれば成功です。やったぜフラン！！

# 参考
- [Windows MinGW開発環境](https://www.torutk.com/projects/swe/wiki/Windows_MinGW開発環境)
- [gfortranのオフラインインストール方法（オンラインインストールに失敗した場合）](https://home.hiroshima-u.ac.jp/rgdlab/rgdl_html/programming/gfortran_install2.htm)
- [【簡単】MinGW-w64のインストール方法【画像多め】](https://yukblog.net/mingw-w64-install/)
KotlinでUTF-8からShiftJISに変換

#KotlinでUTF-8からShiftJISに変換する
あんまり例が無いのと宣言が無いなどのエラーが出るので試行錯誤してみました。

##ShiftJISとは？
ルーターなどへのターミナル接続で使われることがある文字コードです。Androidでは何も考えなくてもUTF-8が標準で使われており、特に考えなくても問題がありません。
しかしShiftJISを使う場合にはShiftJIS特有のことを要求されます。

##ShuftJISの特徴
0～9、A～Z、a～zや半角の記号を1バイトで表現します。いわゆるASCIIコードとも呼ばれる物です。
半角の文字が使用するのは16進数で 20h～7Fh、A0h～FFhの範囲で残りの00h～1Fh、80h～9Fhが拡張コードとして使用されます。※代表例でありこの限りでは無い

|コード|ShiftJIS文字|
|:--:|:--|
|20h|半角空白|
|30h～39h|0～9の半角文字|
|41h～|A～|

サンプルとして**012ABC亜漢字表示**を文字コードで表現します。
なお亜は漢字の1番最初にある漢字、漢字はまあ例として、表示はShiftJIS時代に**5C**という文字コードが原因で散々文字化けを起こしたコードとして使いました。

|Sample|0|1|2|A|B|C|亜|漢|字|表|示|
|:--:|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
|UTF-8|30|31|32|41|42|43|E4 BA 9C|E6 BC A2|E5 AD 97|E8 A1 A8|E7 A4 BA|
|SJIS|30|31|32|41|42|43|88 9F|8A BF||8E 9A||95 5C||8E A6|

ShiftJISは**JISコード**の値をこのコード範囲に収めるように**シフト**処理をしたのでShiftJISと呼ばれています。シフトしないJISコードもサーマルプリンタなどではまだ使われています。

#実際のコード

```sample.kt
        val charset = Charset.forName("SJIS")
        val strUtf = "012ABC亜漢字表示"
        val strSjis = strUtf.toByteArray(charset)
        for(i in 0..strSjis.size-1){
            var c : Byte = strSjis[i]
            var s = "%X".format(c)
            Log.d("Sample","$s")
        }
```

特にライブラリの拡張無しでShiftJISに変換出来ました。**SJIS**を**UTF-8**に変更するとUTF-8のコードになります。

#最後に
Stringに色々な文字コードが入るわけでは無く、String=UTF-8だと思っていた方が良いようです。バイト型の配列にするときに変換をかけることで他の文字コードに対応しています。
その他ファイルへの読み書きの時にも変換出来るようです。

ということは外部ライブラリへ渡す引数がString型だったりするとShiftJISで渡せないような・・・
あとで試して見ます。
【PowerApps】PowerAppsで添付ファイル付きのメールを送信する

#・はじめに#
PowerAppsで添付ファイル付きのメールを送信する方法を説明します。
PowerApps でテキストだけのメールは送信できるけど、添付ファイル付けて送信するにはどうしたらいいんだ！！という場合に、是非参考にして頂けたらと思います。

**※本記事は、はてなブログに移行しました。
　記事は最新化しています。よろしければ下記リンク先をご覧ください。**

　**[くらっちのクラウド日記](https://kurattyodiary.hatenablog.com/entry/PowerAppsSendmail)**
AndroidStuidoのAndroidManifest.xml <application>の黄色背景を消す

こんなやつ
![スクリーンショット 2020-06-02 11.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620387/374f5f1c-1c4c-14e7-a601-80bc4cdf30a3.png)

## 解決策
intent-fielterに
`<action android:name="android.intent.action.VIEW" />`
を追加

```xml:AndroidManifest.xml
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" /> // ここ
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
```
最初から入れといてくれませんかねぇ、眩しいので

## 参考にした記事
https://blog.csdn.net/LJX_ahut/article/details/89711478
【備忘録：HTML/CSS】cssのストック集って持ってたほうがいいよね？-ボタンデザイン編-

## 外部アイコンのようなボタンデザイン
### 通常
<img width="433" alt="スクリーンショット 2020-06-02 11.11.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/b7acf18f-3e2e-1608-bab0-4bf2141e843f.png">
### hover時
<img width="323" alt="スクリーンショット 2020-06-02 11.19.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/b029d98e-11ef-b086-0d77-3457a483e757.png">
上記の外部アイコンみたいな、ボタンリンクをやります。

```html:index.html
<p><a href="#" class="m-btn-external">外部アイコンみたいなボタン</a></p>
``````
```scss:style.scss
.m-btn-external{
  display: block;
  margin: 0 auto;
  padding: 10px;
  max-width: 250px;
  color: #000;
  text-decoration: none;
  text-align: center;
  position: relative;
  border: 1px solid #000;//①まず枠線
  &:before,&:after{//疑似要素で外部アイコン風の線を表現
    content: "";
    display: inline-block;
    position: absolute;
    bottom: -7px;//②ボタンの右下に配置
    right: -7px;//②ボタンの右下に配置
    background: #111;
    transition: all .5s ease;
  }
  &:before{
    width: 100%;//③線の長さ
    height: 1px;//④線の太さ
  }
  &:after{
    width: 1px;//④線の太さ
    height: 100%;//③先の長さ
  }
  &:hover{
    &:before{//⑤hover時に線を短くしていき、ボタンだけにする
      width: 0;
    }
    &:after{//⑤hover時に線を短くしていき、ボタンだけにする
      height: 0;
    }
  }
}
``````
動きが見せられないのですが、hover時はtransitionがかっているので、うざったい動きにならずにいいアクセントを出せるようになっています。
線の太さや色、配置場所を変更できますのでcssで設定できると表現の幅が広がるかと思います。

参考元：
https://note.com/pulpstyle
Bulls and Cowsをシェルプログラムで作成してみた

#はじめに
Bashプログラミングの小ネタとして作成しました。
第6弾です。今回はなかなか手強かったです。

##Bulls and Cowsとは
Bulls and Cowsに関しては[Wikipedia](https://en.wikipedia.org/wiki/Bulls_and_Cows)や[こちら](http://www.papg.com/show?1TLX)をご確認ください。

もともとは文字列当てゲームですが、
今回は数字当てゲームとして作成してみます。

###ソース
```bash
#!/bin/bash

function chkAns {
  bull=0
  cow=0
  num=$1
  dig=$2
  ans=$3

  for i in $(seq 1 $dig)
  do
    for j in $(seq 1 $dig)
    do
      if [[ ${num:i:1} == ${ans:j:1} && $i == $j ]]
      then
#       echo bull: $bull        #for debug
        (( bull = bull + 1 ))
      elif [[ ${num:i:1} == ${ans:j:1} && $i != $j ]]
      then
#       echo cow: $cow          #for debug
        (( cow = cow + 1 ))
      fi
    done
  done

  if (( bull == dig ))
  then
    echo -e "$dig bulls ! You did it !"
    exit
  else
    echo -e "$bull bull and $cow cow."
  fi
}

echo "Welcome 'Bulls and Cows' Game"
echo -e "Please input digits of numbers => \c"
read digits

tmp=$(shuf -i 0-9 -n $digits -z)
answer=${tmp:0:3}

#echo $answer  #for debug

for k in $(seq 1 10)
do
  echo -e "Input $digits numbers of your answer. (${k} time) => \c"
  read num

  chkAns $num $digits $answer
  if (( $k == 10 ))
  then
    echo "You failed 10 times..."
  fi
done

echo -e "The answer is '$answer'"
```
$RANDOMでも良かったですが、~~信用してないので~~採用しませんでした。
代わりに、shufコマンドを使いました。

###実行結果（正解する）
```bash
$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh: 行 39: 警告: command substitution: ignored null byte in input
Input 3 numbers of your answer. (1 time) => 321
2 bull and 0 cow.
Input 3 numbers of your answer. (2 time) => 324
2 bull and 0 cow.
Input 3 numbers of your answer. (3 time) => 325
3 bulls ! You did it !
```
「警告: command substitution: ignored null byte in input」のメッセージは、ヌルバイトが含まれていると出るようです。
ただ、Nullを使わないとN桁の生成が難しかったので無視しています。
良い対処方法があればコメントください。

###実行結果（失敗する）
~~真面目に正解しようとしています。~~

```bash
$ ./bulls_and_cows.sh
Welcome 'Bulls and Cows' Game
Please input digits of numbers => 3
./bulls_and_cows.sh: 行 39: 警告: command substitution: ignored null byte in input
Input 3 numbers of your answer. (1 time) => 345
1 bull and 0 cow.
Input 3 numbers of your answer. (2 time) => 219
1 bull and 0 cow.
Input 3 numbers of your answer. (3 time) => 398
1 bull and 0 cow.
Input 3 numbers of your answer. (4 time) => 470
1 bull and 1 cow.
Input 3 numbers of your answer. (5 time) => 709
1 bull and 0 cow.
Input 3 numbers of your answer. (6 time) => 507
2 bull and 0 cow.
Input 3 numbers of your answer. (7 time) => 504
1 bull and 0 cow.
Input 3 numbers of your answer. (8 time) => 570
1 bull and 1 cow.
Input 3 numbers of your answer. (9 time) => 407
2 bull and 0 cow.
Input 3 numbers of your answer. (10 time) => 307
2 bull and 0 cow.
You failed 10 times...
The answer is '567'
```

#おわりに
このプログラムを作成することで

- 変数
- 変数の操作
- 条件式
- 繰り返し構文
- 関数
- readコマンド
- shuf(シャッフル)コマンド

が理解できました。
git remote 名前変更

# 追加
```bash
$ git remote add new https://github.com/xxxx/xxx.git
```

# 登録確認
```bash
$ git remote -v
new	https://github.com/xxxx/xxx.git (fetch)
new	https://github.com/xxxx/xxx.git (push)
```

# 名前変更
```bash
$ git remote rename new upstream

$ git remote -v
upstream	https://github.com/xxxx/xxx.git (fetch)
upstream	https://github.com/xxxx/xxx.git (push)
```
toio(nodejs)のwebsocketと、python/websocketがつながらない。

# 追記
コードが悪かっただけで接続できたわ

# 課題

toio(nodejs)のwebsocketと、python/websocket,socketが接続できない。

toioとUnity/websocketは接続できる。[検証コード](https://1drv.ms/u/s!ApO4wsxFJBbVuBCeGojtl1ekqOM_?e=95tkVb)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555658/160c8c8b-71ed-548d-7d3a-50b094b671f8.png)

ｘ項目も、同言語ではserver-client接続できている。

検索するとjavascriptはHTML絡みの記事が多いので良くわからない。

# Unity/OpenCV
[*]Unityとtoioで通信をする
[*]Unity/OpenCVでWEBカメラ画像を使う。
[*]WEBカメラ画像のARマーカーを処理する。
【備忘録：HTML/CSS】cssのストック集って持ってたほうがいいよね？-斜線見出し編-

## 見出し下線や左縦線を斜線にする
<img width="396" alt="スクリーンショット 2020-06-02 11.11.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/fcf3321d-2dc3-26e1-5fc6-038f6cd428d8.png">

こんな感じや、
<img width="228" alt="スクリーンショット 2020-06-02 11.02.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/7f4c794e-4fe5-eb62-5ccd-891f4fb35eb5.png">
こんな感じに、よく見出しデザインで下線や左縦線を引いたりしますが、それを斜線にするやりかたです。

以前紹介した、見出しデザインの斜線編です！
https://qiita.com/hayahayahaya/items/e1b737487bc23748f234

```html:index.html
<h2 class="m-heading2-border">斜線の見出し</h2>
```
```scss:style.scss
.m-border{
  background: 
    linear-gradient(
      -45deg,
      transparent 25%,#aaa 25%,
      #aaa 50%,transparent 50%,
      transparent 75%, #aaa 75%
    )
    left bottom/7px 7px repeat-y;
  //-45度の傾きで、25%まで「東名から#aaaに。25%から50%まで#aaaから透明に、50%から75%まで透明から#aaaに。
  //left bottomに配置し、7pxに設定。repeat-yで縦方向に、repeat-xで横方向に。

  padding-left: 15px;//※これは線との余白感を出すために設定しているのでなくても大丈夫です。※
  padding-bottom: 15px;//※これは線との余白感を出すために設定しているのでなくても大丈夫です。※
}
```
これはいろいろ使えそうなcssかと思います。
内容がわかっていれば、色や太さを変更できたりするので、色々調整してみるのもいいかもです。

参考元：
https://note.com/pulpstyle
複数の正規表現にmatchするかの判定

こんな正規表現のバリデーションメソッドがあった時、

```ruby
  def customer_number_valid_format?
    return true if a.blank?
    return true if b.blank?
    binding.pry
  　regex = /\A(\d{5})-?(\d{5})-?(\d{1})-?(\d{2})\z/, /\A(\d{4})-?(\d{3})-?(\d{3})\z/
　　# p regex => [/\A(\d{5})-?(\d{5})-?(\d{1})-?(\d{2})\z/, /\A(\d{4})-?(\d{3})-?(\d{3})\z/]
    return true if regex.blank?
    unless customer_number.match?(regex)　　🌠
      self.errors.add(:customer_number, :invalid_and_confirm, target: 'お客様番号')
    end
  end
```

```ruby
unless customer_number.match?(regex)
```

ここで`customer_number`が`12345-12345-1-12`か`1234-123-123`の時に`true`を返して欲しいが上記コードだと

```ruby
[27] pry(#<Order>)> customer_number.match?(regex)
TypeError: wrong argument type Array (expected Regexp)
```
となる。
`match?`はStringクラスのメソッドだからだね。
https://docs.ruby-lang.org/ja/latest/method/String/i/match=3f.html

## 解決

配列に入ってるどっちかの正規表現にあってるか判定するには`Regexp.union`というものを使うらしい。

```ruby
customer_number.match?(Regexp.union(regex))
```

```ruby
[25] pry(#<Order>)> Regexp.union(regex)
=> /(?-mix:\A(\d{5})-?(\d{5})-?(\d{1})-?(\d{2})\z)|(?-mix:\A(\d{4})-?(\d{3})-?(\d{3})\z)/
# 配列ではなくパイプで繋がれ他文字列になる

[26] pry(#<Order>)> low_voltage_customer_number.match?(Regexp.union(regex))
=> true
```


参考: [配列を渡して正規表現オブジェクトをつくる](https://qiita.com/haazime/items/9b39af6708cc214b2651)
【Python】『涼宮ハルヒの消失』の改変された世界から戻るための緊急脱出プログラムを再現してみた

　
しょーもないものを作ってしまったので供養します。

#作ったもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500402/f04a2bdd-5b09-5c97-639d-8e36ce08afd5.png)
映画『涼宮ハルヒの消失』に出てくる緊急脱出プログラムを再現してみました。
　


![yukin.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500402/2100a0dd-13a0-975b-e600-03b9852cc640.gif)


作中と同様、1文字ずつ順番に文字が出力されます。
　
　

コードの最後は「input()」で終わっているので、エンターキーを押すとプロンプトが消えるようになっています。
作中ではキョンがエンターキーを押した瞬間に改変された世界から戻り、部室にいたはずの面々がいなくなり、PCの画面に写っていたはずのプロンプトが消えていました。

さすがに周囲の人間を消すプログラムは書けませんでしたが、エンターキーでプロンプトが消せるようにしたので、ひとりで遊ぶ分には改変された世界から移動した気分になれます。


#ソースコード
```python
from time import sleep

#引数に与えられた文字をYUKI.Nっぽく表示する
def yuki_n(*message, speed=0.15):
    count = 0 #何行目を出力し終わったあとかを代入する変数
    name = "ＹＵＫＩ. Ｎ＞"

    #1行目の出力に対して行う処理
    msg = message[0]

    #名前を表示
    for s in range(len(name)):
        print(name[0:s+1]+"\r",end="")
        sleep(speed)

    for i in range(len(msg)):
        #行の最後の文字の場合、文末に＿をつけない
        if i == len(msg)-1:
            print(name + msg)
            sleep(speed)
            count += 1

        else:
            print(name + msg[0:i+1],end="")
            print("＿"+"\r",end="")
            sleep(speed)
        
    #2行目以降の出力があれば行う処理
    if len(message) > 1:
        for msg in message[1:]:
            for i in range(len(msg)):
                    #行の最後の文字の場合、文末に＿をつけない
                    if i == len(msg)-1:
                        print("　　　　　　　" + msg)
                        sleep(speed)
                        count += 1

                    else:
                        print("　　　　　　　" + msg[0:i+1],end="")
                        print("＿"+"\r",end="")
                        sleep(speed)
    
    #最後の行を出力し終わったあとに改行する
    if count == len(message):
        print("")


#「Ｒｅａｄｙ？」を表示する
def ready(speed=0.5):
    ready = "Ｒｅａｄｙ？"
    #「_」を点滅させる
    for _ in range(2):
        print("　　　　　　　" + "＿"+"\r",end="")
        sleep(speed)
        print("　　　　　　　" + " "+"\r",end="")
        sleep(speed)
    
    print("　　　　　　　" + "＿"+"\r",end="")
    sleep(speed)

    for s in range(len(ready)):
        print("　　　　　　　" + ready[0:s] + "＿" + "\r",end="")
        sleep(0.15)
    print("　　　　　　　" + ready,end="")


#改行する時は複数の引数としてyuki_n関数ににわたす
yuki_n("これをあなたが読んでいる時、","わたしはわたしではないだろう。")
yuki_n("このメッセージが表示されたということは、","そこにはあなた、わたし、涼宮ハルヒ、朝比奈みくる、","小泉一樹が存在しているはずである。")
yuki_n("それが鍵。","あなたは回答を見つけ出した。")
yuki_n("これは緊急脱出プログラムである。"," ","起動させる場合はエンターキーを、","そうでない場合はそれ以外のキーを選択せよ。"," ","起動させた場合、"\
    ,"あなたは時空修正の機会を得る。","ただし成功は保証できない。","また帰還の保証もできない。")
yuki_n("このプログラムが起動するのは一度きりである。","実行ののち、消去される。"," ","非実行が選択された場合は起動せずに削除される。"," ")
ready()

input()
```

キャリッジリターンを使っただけの簡単なプログラムです。キャリッジリターンの使い方に関しては、『[Pythonでprint関数のターミナル出力を上書きで1行表示する方法](https://dot-blog.jp/news/python-print-overwrite-output/)』が参考になりました。

　

#その他
文字の出力は「yuki_n」という関数にしてあるため、引数に渡す文字次第では、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500402/6ba23636-2b98-5c3e-2809-28135647a338.png)
というようなこともできます。「Ｒｅａｄｙ？」じゃないよ。怖いですね。
【備忘録：HTML/CSS】cssのストック集って持ってたほうがいいよね？-背景ドット、ボタン枠線グラデーション編-

## 背景にドットをcssで敷きつめる
<img width="688" alt="スクリーンショット 2020-06-02 10.30.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/5b654e3e-6d83-f5f6-ba2b-8a5db72a0f9a.png">
一部使う場面があるかもしれませんので、cssにて背景にドットを配置するやりかたです。

```html:index.html
<div class="m-bg-dot">
  <a href="" class="m-btn">ボタンの線を<br>グラデーション</a>
</div>
```
```scss:dot.scss
.m-bg-dot{
  position: relative;//※ボタンを中央に置くための設定なので外して大丈夫です。※
  max-width: 500px;
  min-height: 300px;
  margin: 70px auto;
  background: #f4f4f4;
  background-image: 
    radial-gradient(#ddd 30%,transparent 31%),
    radial-gradient(#ddd 30%,transparent 31%);//①ドットの色を変更
  background-size: 20px 20px;//②ドットの大きさ変更
  background-position: 10px 10px;//③ドットの配置場所
}
```
cssってなんでもできるなと思いました。
## 枠線をグラデーションに
上記キャプチャのボタンです。htmlは変わりないのでcssだけ記載します。

```scss:btn.scss
.m-btn{
  position: absolute;//※ボタンを中央に置くための設定なので外して大丈夫です。※
  top: 50%;//※ボタンを中央に置くための設定なので外して大丈夫です。※
  left: 50%;//※ボタンを中央に置くための設定なので外して大丈夫です。※
  transform: translate(-50%, -50%);//※ボタンを中央に置くための設定なので外して大丈夫です。※
  display: block;
  text-decoration: none;
  color: #000;
  font-weight: bold;
  padding: 20px;
  background: #ededed;
  width: 100%;
  max-width: 300px;
  text-align: center;
  border: 3px solid #ccc;//①まず枠線を引く
  border-image: linear-gradient(125deg, #00a7ff,#053e62) 1/3;
  //②125度に傾いたグラデーション。グラデーションの開始色と終了色。border-image-sliceを1に設定し太さを3pxに。
}
```

参考元：
https://firstlayout.net/border-gradation/
https://note.com/pulpstyle
エラー行が多い…Railsサーバが起動しない２。「autodetect': Could not find a JavaScript runtime. 」

###  <font color='lightblue'>発生した背景</font>
久々にアプリケーションを起動しようとしたところ、アプリが起動しない。
※こちらは「サーバが起動しないこと」の記事を連載しています。

以下のエラーが発生しました：

```
Traceback (most recent call last):
	61: from bin/rails:3:in `<main>'
	60: from bin/rails:3:in `load'
------- 一部割愛
	 3: from /Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/bootsnap-1.4.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require'
	 2: from /Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/execjs-2.7.0/lib/execjs.rb:4:in `<main>'
	 1: from /Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/execjs-2.7.0/lib/execjs.rb:5:in `<module:ExecJS>'
/Users/ichikawadaisuke/projects/krown/vendor/ruby/2.5.0/gems/execjs-2.7.0/lib/execjs/runtimes.rb:58:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
```

###  <font color='lightblue'>対応方法</font>
- ①ローカルで「bundle install --path vendor」を実施してみる

```
Fetching libv8 3.16.14.19
Installing libv8 3.16.14.19 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

In file included from ../src/allocation.cc:33:
../src/utils.h:33:10: fatal error: 'climits' file not found
#include <climits>
         ^~~~~~~~~
1 error generated.
（省略）
```
上記のエラーが発生する。

- ②エラー文言の指示に従い、以下のコマンドを実行する

```
CMD> gem install libv8 -v '3.16.14.19' --source 'https://rubygems.org/'
```
①と同じエラーメッセージが出力され、コマンドに失敗する。

- ③現在、mac-osは「Catalina v10.15.4」を使用している。調べたところ下位互換性がないとの情報があったため、以下コマンドを実行し、互換性をとる。

```
CMD> brew install v8-315
```

brewコマンドを実行し、インストールしたので、ローカルアプリケーションの設定を変更します。

```
CMD>bundle config --local build.therubyracer --with-v8-dir=$(brew --prefix v8-315)
```

最後にbudleインストールをローカルで実行しました。
問題が解決し、Railsサーバが起動出来るようになりました。
AWS -bash: rbenv: コマンドが見つかりませんと表示された時の対処法

# rbenvのインストール

EC2にrootユーザでログインしている状態で、rbenvをインストールするために、以下を行いました。


１. 以下のコマンドをターミナルにて実行

```
git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
```

２. `vi /etc/profile.d/rbenv.sh`にて開いたファイルに、以下を記述

```
export RBENV_ROOT=/usr/local/rbenv 
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
```

３. :wqにて保存
４. `source /etc/profile.d/rbenv.sh`コマンドの実行　←ここの時点で`-bash: rbenv: コマンドが見つかりません`と表示されてしまいます。

解決策:
`cd/usr/local`のコマンドで、usr/localへ移動する。
lsコマンドでファイルの情報を確認。

```
bin  etc  games  include  lib  lib64  libexec  rbenv?  sbin  share  src
```
rbenv?となっており、正しくrbenvがインストールできていなかった。
`mv rbenv? rbenv`コマンドで、rbenv?を削除し、rbenvを追加。
その後、rbenvコマンドが実行できました。
Slackの名前の付け方を！！！これにしてくれ！！！

昔、うちの母親が「LINEやらなくても、メールでいいじゃん、何も困ってないし」
って言ってたけど、違うんだよ！！！！

あなたは困ってないかもしれないけど！！！！こっちはLINEとメールの二度手間なんだよ！！！
連絡する側のコストを考えてくれ！！！！！

って思った記憶があります。
(今は母もLINE使ってます)

そんな、相手に優しいSlackの使い方のお話です。

# 背景

Slackの名前、割とどこでも同じこと喋るので、共有用にメモ

よかったらチームによってアレンジしてください、僕はこれがおすすめ

もっといいのあったら教えてください

# 言いたいこと

Full Nameに、名前や呼び名、あだ名を全部入れる
Display Nameは、漢字名とか、英語名とか
例: 人事部の田中太郎さん(あだ名はてぃーたろさん)の場合
`Full Name: 田中 太郎 たなか たろう t-taro てぃーたろ じんじ jinji`
`Display Name: TaroTanaka`

こうしておくと、どの名前でもメンションが飛ばせるようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35462/28521de7-c30f-8757-0269-d40818c25784.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35462/bc1cca8d-1063-d427-96c9-8a8797ebb50c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35462/50d784fc-dc5e-9ab1-d699-13fea592c2dd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35462/4f95664b-049c-c2f2-b4a7-175781aba768.png)


**Full Nameに平仮名も英語表記も両方入れるのがポイント**

スマホからのメンションだと、平仮名が一番メンション飛ばしやすい
Display Nameは短い方が文章が読みやすい

Full Name、昔は文字制限が結構少なかったけど、今は80文字行けるので、大体の名前行ける

これでお願いします :bow:

### P.S. プログラマ向け

GitHubのintegrationを入れているチームも多いと思うので、その場合はgithubのIDも入れておくととても便利

GitHubの方のIDを入力したときにもメンションが飛ばせるようになるので、
GitHubのintegrationの表示名に対してそのままメンションが送れる感覚になる
Microsoft Flow の“繰り返し”を使うと、いきなり実行される

Microsoft Flowの“繰り返し”を使うと、保存した途端にいきなり実行されてびっくりしたので、メモ。

# 1.保存した途端に実行されるよ
例えば、今が8:10として、こんなの↓↓↓を作成すると、保存した途端にメールが飛ぶ。
![0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417890/7aa69d4c-7e45-1278-3b91-ebf8da365eb5.png)


プレビューからすると、8:15まで待って欲しいところだけれど待たない。
ちなみに8:15になると、予定通りのメールが飛ぶ。

保存した時点で、フローは「スケジュール済み」になるみたい。
![0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417890/d36be2b7-4990-0daf-89b3-b49283f5c28d.png)


# 2.開始時間を指定するよ
つくった途端に動き出すと、夜間バッチとしては不向きなので、開始時刻を指定する。今、日本時間の朝の8:19。標準時は-9なので2020-06-01T23:19Zのはず。
（タイムゾーンを設定しているのも関わらず、開始時刻は標準時基準で記述するっぽい。設定時刻はタイムゾーン準拠なのに）
例えば開始時刻を2020-06-01T23:35Zに指定すれば、今が8:25としても、次の8:30は飛ばして8:45から動くはず。
![0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417890/a3cae98e-b0dd-2a02-0bfc-db7c2e88bf69.png)


期待通りに動いた。

# 3.開発中はどうしよう
保存したらいきなり動き出すのだったら、開発中はどうしたらよいか？
遠い未来を開始時刻にすれば良いんじゃね。
下の例は「遠い未来」にはなっていないけれど...

現在時刻は8:50。
開始時刻を今日の9:00にして、設定時刻を8:10、9:10にする。
今(8:50)保存すると、処理が動くのは以下の３つが考えられる。
(a)保存した時点で、8:10が過ぎているのでその分を実行。
(b)保存した時点で、いきなり実行。
(c)保存した時刻の直近の9:10に実行。
![0004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417890/ce5c4763-cfbd-471b-4be9-f7a2d7356ce6.png)


答えは(c)でした。これで安心して“繰り返し”を使えるね。
![0005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417890/10318905-f335-1097-bd25-a4afcbbd77f3.png)

# 4.それでも心配なら
それでもうっかり動いちゃうんじゃないだろうかと心配なら、“手動でフローをトリガーします”を使って開発し、最後に“繰り返し”と差し替えるという手もある。

微妙に2と3が同じような内容を言い換えただけになっているけれど、両方をまとめた画面を取り直すのが面倒なのでそのままで m(..)m
Android Studio インストールとエミュレータがつかえるようになるまでの備忘録

本機では、Ubuntu18.04.4LTSのOSを使っています。

Android Studioは、Androidアプリを作るためのIDE(統合開発環境)です。
Android Studioそのものは、Ubuntuソフトウェアからインストールすることができます。
インストール後はダイアログに従って進めていけば、使えるようになります。

Android Studioでの作業上、エミュレータを使って製作中のアプリを確認する必要が出てきます。
実機での検証ができれば問題ありませんが、エミュレータを使うことによりOSのバージョンや機種別の検証が可能になります。
今回エミュレータを使うための設定が成功したようなので、備忘録として残しておきます。

※なお、この手順は私自身未だ習熟度が低いため間違い等あるかもしれません。また、BIOSの設定をするので他の先輩諸氏のサイト等の情報も参考にしていただくことをお勧めします。

Ubuntu18.04では、Android Studioのエミュレータを使うにあたり【KVM】という仮想マシンが必要になってきます。

- 手順1：KVMのインストール

```shell:KVMインストール
sudo apt install qemu-kvm
```

```shell:ユーザー（自分）をKVMグループに追加
sudo adduser $USER kvm
```

```shell:KVMグループに追加されたかを確認
grep kvm /etc/group
```

- 手順2：BIOSの設定

1. PCを再起動しBIOS起動
1. Advanced Modeに移動
1. Systemタブのページにある【Intel(R) Virtial Technology】を有効化する

設定が終了したら、Android StudioのAVDマネージャーで設定したエミュレータが使えるようになっています。
MAMPで複数WordPressサイトをバーチャルホストで構築する

example.localとかsample.localのようなURLでWordPressのローカル環境を複数作りたいとき
MAMPのドキュメントルートを切り替えなくてもよくなる

## MAMPをインストールする

https://www.mamp.info/

## .htaccessを有効にする

これをやらないとトップ以外のページが表示できなくなる

https://qiita.com/musica_gatto/items/5dc8d8c8a57b261488c2

## 複数バーチャルホストのローカル環境を作る

https://qiita.com/eryuus1/items/9300e6d56729799bae5d

## .localでサイトに接続するとやたら遅い問題

https://peccu.hatenablog.com/entry/2015/06/18/000000
投稿時にファイルから選択した画像を表示する方法メモ（HTMLファイル上でJS）

Railsで画像投稿時にファイルから選択した画像をその場で確認できる方法。

```ruby:htmlファイル
%img{id:“image-file”}
      :javascript
        document.addEventListener(‘change’, function(e){
          let file = e.target.files[0];
          let fileReader = new FileReader();
          fileReader.onload = function() {
            let dataUri = this.result;
            let img = document.getElementById(‘image-file’);
            img.src = dataUri;
          }
          fileReader.readAsDataURL(file);
        });
```

####・addEventListener さまざまなイベント処理を実行することができるメソッド
####・document Chrome等のブラウザ上で表示されたドキュメントを操作する事
####・change changeイベントを発生
####・target.files ファイルの取得する
####・FileReader ユーザーのコンピューター内にあるファイル (もしくはバッファ上の生データ) をウェブアプリケーションから非同期的に読み込むことが出来る。
####・result　ファイルの内容を返す
####・getElementById 指定された idの属性を持つ、要素の参照を返します
####・readAsDataURL ファイルオブジェクトをData URIに変換するメソッド
【備忘録：HTML/CSS】cssのストック集って持ってたほうがいいよね？-左右にボーダー編-

## よくある左右にボーダーつくやつ
<img width="453" alt="スクリーンショット 2020-06-02 10.16.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/cc37e5b0-99e1-a045-29c5-724780725c84.png">
上記のようによく左右にボーダーがつく見出しやデザインがあります。

これまで、positionとbefore、afterで配置していたのですが、、、
flexを使用して簡単に、そしてテキスト増減を考慮した左右ボーダー見出しが作成できます！

```html:index.html
<h2 class="m-heading2-border">左右にボーダー</h2>
```
```scss:style.scss
.m-heading2-border{
  text-align: center;
  display: flex;
  align-items: center;
  justify-content: center;
  &:before{
    content: "";
    width: 100px;
    height: 1px;
    background: #000;
    margin-right: 10px;
  }
  &:after{
    content: "";
    width: 100px;
    height: 1px;
    background: #000;
    margin-left: 10px;
  }
}
```
見出し本体にflexをかけ、横、縦位置を中央にalign-items: center;、justify-content: center;をかけます。
そして見出しのbefore、afterでボーダーを表現します。
そ、それだけでできます。。
<img width="911" alt="スクリーンショット 2020-06-02 10.21.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/299381dc-53c9-d396-ee49-b30bebf13a28.png">
こんな感じにテキストが多く入っても大丈夫ですし、
<img width="709" alt="スクリーンショット 2020-06-02 10.22.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/a49ebc99-6302-0176-d917-d9c40a0a2b11.png">
こんな感じにテキストに改行が入ってもいけます！

これですと、cssも簡単ですし楽ですね！
みなさんぜひ使用してみてください。

参考元：
https://note.com/pulpstyle
Servlet で JSON を返すときにgzip 転送する


# 動作確認環境
Server: Tomcat 8.5
Client: Google Chrome 20200601最新

# Gzip なしの Response

```java
response.setContentType("application/javascript; charset=utf-8");
PrintWriter out = response.getWriter();
out.println(jsonObj.toString()); // JSON を返す
out.flush();
```

# Gzip で Response

```java
response.setContentType("application/javascript; charset=utf-8");
response.setHeader("Content-Encoding", "gzip"); // Gzip
OutputStream zos = new GZIPOutputStream(response.getOutputStream());
OutputStreamWriter zpw = new OutputStreamWriter(zos, "UTF-8");
BufferedWriter bw = new BufferedWriter(zpw);
bw.write(jsonObj.toString()); // JSON を返す
bw.flush(); // 必要
zos.flush(); // 必要
zos.close(); // 必要

```





以上。
【備忘録：HTML/CSS】cssのストック集って持ってたほうがいいよね？

## 使えるcssデザインストック
### 見出し下線を2配色
<img width="527" alt="スクリーンショット 2020-06-02 10.08.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/2d720b4e-1cbd-b11c-5f82-71c7ff600783.png">

```html:index.html
<h2 class="m-heading2_pseudo-class">お知らせ（before、after）</h2>
<h2 class="m-heading2_borderimage">お知らせ（border-image）</h2>
```
```scss:style.scss
.m-heading2_pseudo-class{
  font-size: 24px;
  position: relative;
  max-width: 400px;
  padding-bottom: 10px;
  &:before{
    content: "";
    position: absolute;
    bottom: 0;
    left: 0;
    width: 80px;
    height: 5px;
    background: #e3bf00;
  }
  &:after{
    content: "";
    position: absolute;
    bottom: 0;
    left: 80px;
    width: calc(100% - 100px);
    height: 5px;
    background: #000;
  }
}
.m-heading2_borderimage{
  border-image: linear-gradient(.25turn,#e3bf00 80px,#111 80px) 1/0 0 5px 0;
  border-bottom: solid;
  max-width: 400px;
  padding-bottom: 10px;
}
```
### 見出し下線を中央で2配色
<p style="width: 100%; text-align:center;">
<img width="638" alt="スクリーンショット 2020-06-02 10.11.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625199/ef7b35ea-23b3-6228-ffe0-8e3b5bfd290e.png">
</p>

```html:index.html
<h2 class="m-heading2_linecenter">お知らせ</h2>
```
```scss:style.scss
.m-heading2_linecenter{
  text-align: center;
  padding-bottom: 10px;
  border-image: linear-gradient(
                90deg,
                #ddd 45%,#e3bf00 45%,
                #e3bf00 55%,#ddd 55%) 1/0 0 5px 0;
  border-bottom: solid;
}
```
参考元：
https://note.com/pulpstyle
【Heroku】デプロイ後にcode=H14 desc="No web processes running"が発生する場合はProcfileを作成して対処すればOK

# 発生したエラー

```
2020-06-02T00:41:22.345388+00:00 heroku[router]:
at=error code=H14 desc="No web processes running"
method=POST path="/xxxx" host=xxxx.herokuapp.com request_id=xxxx
fwd="xx.xx.xx.xx" dyno= connect= service= status=503 bytes= protocol=https
```

## 私の場合
Go/echoで開発しており、メインのアプリの他にアプリケーションのディレクトリ内にmain関数を持つgoファイルを作成してデプロイしたら発生しました。
main関数が2つになり、Herokuがどちらを実行すべきが判定できなくなったんですかね。（適当）

# 対処方法1
[公式ドキュメント](https://devcenter.heroku.com/articles/error-codes#h14-no-web-dynos-running)に基づき、アプリケーションのルートディレクトリで、以下のコマンドを実行する

```
$ heroku ps:scale web=1
```

# 対処方法2
1でダメな場合は、アプリケーションのルートディレクトリで、以下のようにProcfileを作成する

```
$ cd `your-app-dir`
$ echo "web: $(basename `pwd`)" > Procfile
```

## 補足：Procfileとは
[【公式】The Procfile](https://devcenter.heroku.com/articles/procfile)

> Heroku apps include a Procfile that specifies the commands that are executed by the app on startup. You can use a Procfile to declare a variety of process types, including:

# 参考
- [【Heroku】デプロイ後にcode=H14 desc="No web processes running"](https://qiita.com/rebi/items/efd1c36f0a9e46222d80)
- [Heroku への Go 言語製アプリケーションのデプロイと依存パッケージ管理方法の比較](https://qiita.com/nirasan/items/32f2e0fc94ccf123ca55)
気象庁のAtomフィールド(XML電文)をラズパイで取得してツイートさせた話

##何をしたいか
[特務機関NE〇VみたいなTwitterアカウント](https://twitter.com/TYO_Temperature)を完全自己満足で作りたかった
とりあえず地図の自動作成とかは置いておいて気象注意報・警報・地震情報を取得、ツイートさせたい。
##どこから情報を取得するか
[「気象庁防災情報XMLフォーマット形式電文」](http://xml.kishou.go.jp/index.html)とやらが気象庁HPで公開されていたのでありがたく使わせてもらうことに。
取得できるAtomフィードは
・定時：気象に関する情報のうち、天気概況など定時に発表されるもの
・随時：気象に関する情報のうち、警報・注意報など随時発表されるもの
・地震火山：地震、火山に関する情報
・その他：上記３種類のいずれにも属さないもの
のいずれかを選べるので各自好きなのを選んで以下コードの変数「Atom_URL」を置き換えてください。
なお、この記事は「随時：気象に関する情報のうち、警報・注意報など随時発表されるもの」で進めています。
ファイルを複製して変数「Atom_URL」が異なるファイルを作れば複数の情報を取得することも可能です。
##最終的に何ができるか
こういうのができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471662/9e7c0681-1086-1d83-132d-7d7dd7c658fd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471662/5760a905-6ecd-dcb8-86f6-46d866acbfe1.png)

##当方の環境とか
Raspberry Pi 3 Model B+、Python 2.7.16[GCC 8.3.0] on linux2。
##TwitterAPIの取得
まずはここから。このあたりを参考にしてTwitterAPIを取得しておいてください。
https://qiita.com/kazupen2018/items/ff9828cc853ab9c3357e
##feedparserのインストール
```
$ pip install feedparser
```
##情報を取得する
```python:test.py
# coding: utf-8
from twython import Twython, TwythonError
import feedparser

Atom_URL = "http://www.data.jma.go.jp/developer/xml/feed/extra.xml"
news_dic = feedparser.parse(Atom_URL)
latest_entry = news_dic['entries'][0]
rss1 = latest_entry.title + latest_entry.author
rss2 =  latest_entry.content

print (rss1)
print rss2[0]["value"]
```
###実行してみる
```
$ python test.py
```
###実行結果
```
気象警報・注意報函館地方気象台
【渡島・檜山地方気象警報・注意報】注意報を解除します。
```
こんな感じのが出力されることを確認したら次の段階へ。
##取得した情報をツイートする
###Twythonのインストール
```
$ pip install twython
```
###コードを書いてみる
```python:JMA_XML.py
# coding: utf-8
from twython import Twython, TwythonError
# 気象庁Atomフィールド
import feedparser

APP_KEY = "ここに取得したAPP KEYを入力"
APP_SECRET = "ここに取得したAPP SECRETを入力"
OAUTH_TOKEN = "ここに取得したOAUTH TOKENを入力"
OAUTH_TOKEN_SECRET = "ここに取得したOAUTH TOKEN SECRETを入力"

# 気象に関する情報のうち、警報・注意報など随時発表されるもの
Atom_URL = "http://www.data.jma.go.jp/developer/xml/feed/extra.xml"
news_dic = feedparser.parse(Atom_URL)
latest_entry = news_dic['entries'][0]
rss1 =  latest_entry.content
rss2 = rss1[0]["value"]

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

try:
    twitter.update_status(status=rss2)
except TwythonError as e:
    print e
```
(APP_KEY、APP_SECRET、OAUTH_TOKEN、OAUTH_TOKEN_SECRETは各自置き換えてください)
(取得したいAtomフィールドを変えたい場合は変数「Atom_URL」を置き換えてください)
###実行してみる
```
$ python JMA_XML.py
```
###Twitterを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/471662/10a1a446-f23a-cffe-8780-455d3020e24b.png)
このようにツイートされていたら成功です。
FileZilla client(Windows)が起動しない際の対応(真っ白編)

## 状況
何故か起動しなくなることが度々あるのでまとめた。
FileZilla client 3.48.1で確認。それ以前も発生していた。
以下の状態で全く言うことを聞いてくれない。いや、閉じるボタンだけは効く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133456/d24bfa00-75ba-3fa3-6be9-0271f7a41ebd.png)

## 注意
基本的な設定は初期化されてしまう。サイトマネージャの設定は残る。

## 処置
C:\Users\hogeuser\AppData\Roaming\FileZilla を開く。
filezilla.xml を削除。

## あとがき
再インストールでも駄目なのでこの対応。
何が気に入らないのかは分からないが、ひとまずこれで。
Android端末とPCを接続し、PCのchrome DevToolsを利用する方法

## おおまかな手順
1. Androidの開発向けオプションを有効にする
2. USBでPCに接続する
3. PC側のChromeで`chrome://inspect`に接続する

### 操作した環境
- macOS 10.14.6
- Android 9

## 詳細

### 1. Androidの開発向けオプションを有効にする
1. `設定`から`端末情報`の画面に進む
2. 下部にある`ビルド番号`を7回タップすると開発向けオプションが有効になる
3. `設定`から`システム`の画面にいき、`詳細設定`を開く
4. `開発向けオプション`が表示されているのでタップ
5. 少し下に画面スクロールするとある`USBデバッグ`をONにする → `ここ忘れがち`

### 2. USBでPCに接続する
1. USBでPCに接続する
2. Android側で「USBデバッグを許可しますか？」と聞かれるのでOKで許可する
3. Android側のChromeを立ち上げて適当なwebページを表示する

### 3. PC側のChromeで`chrome://inspect`に接続する
1. PC側のChromeを立ち上げ、アドレスに`chrome://inspect`と打ち込み移動
2. 接続している端末名とAndroid側のChromeで開いてるwebページ一覧が表示される
![chrome_dev_inspect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336910/2841179c-7dfe-21f5-01d2-1144d95bd2f3.png)
3. webページ名の下にある`inspect`をクリックするとAndroid側で開いてる画面を開発ツールでいじれるようになる！
![chrome_dev_inspect_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336910/1438d7b3-e7fb-56a6-067c-23fcae4d6573.png)
30分刻みの時刻を動的生成

## 追記
コメントにカッコイイ書き方乗っていますので、ぜひ

---
もっとカッコよくかけないものかね

```javascript
array = Array.prototype.concat.apply(
  [],
  [...Array(24).keys()].map(v => {
    return [
      String(v).padStart(2, '0') + ':' + '00',
      String(v).padStart(2, '0') + ':' + '30'
    ];
  })
);
console.log(array);
```

```javascript:実行結果
[
  '00:00', '00:30', '01:00', '01:30',
  '02:00', '02:30', '03:00', '03:30',
  '04:00', '04:30', '05:00', '05:30',
  '06:00', '06:30', '07:00', '07:30',
  '08:00', '08:30', '09:00', '09:30',
  '10:00', '10:30', '11:00', '11:30',
  '12:00', '12:30', '13:00', '13:30',
  '14:00', '14:30', '15:00', '15:30',
  '16:00', '16:30', '17:00', '17:30',
  '18:00', '18:30', '19:00', '19:30',
  '20:00', '20:30', '21:00', '21:30',
  '22:00', '22:30', '23:00', '23:30'
]
```
Mac で 「 \ 」（バックスラッシュ）を入力する方法

# 結論

Macで日本語キーボードでバックスラッシュ「 \ 」を入力するときは「option(alt)」キーを押しながら「¥」キーを押します。

# 少しだけ補足

## 半角のバックスラッシュ

コンピュータ、とりわけプログラミングを学習するとき、英語の文書にあるサンプルコードを動かしてみて学習する機会が多いと思います。

そのとき、半角のバックスラッシュ「 \ 」が日本のパソコンのキーボードのどこにも印字でされていなくて、バックスラッシュを入力できずに困惑された方も多いと思います。

そこで、日本語環境でバックスラッシュをどのように扱えば良いかをご紹介します。

## Windowsの場合

Windowsでは半角の「¥」がバックスラッシュ「 \ 」に対応します（全角の「￥」ではないです）。ですので、単純に「 \ 」は「¥」に読み替えてください。バックスラッシュ「 \ 」は日本語の環境だと「¥」という文字に置き換わっているとお考えください。バックスラッシュ「 \ 」を見たら脳内で半角文字の「¥」と変換してしまって構いません。

## Mac

Macの場合、日本語環境でもバックスラッシュ「 \ 」と「¥」は区別しているみたいです。

Pythonを勉強するため[Try Jupyter](https://jupyter.org/try)にWebブラウザでアクセスしてPythonコードを動かしていたのですが、「 \ 」の代わりに「¥」を使ったところコードがうまく動きませんでした。

![001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646886/58110403-674e-796f-e22d-2a92ea2aba58.jpeg)

「option(alt)」キーを押しながら「¥」キーを押すと「 \ 」（バックスラッシュ）を入力することができて、プログラムが無事に動作しました。

![002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646886/68b7f37a-2b90-e926-4c5a-2c7b7efa86fa.jpeg)


## 教訓

 - Macでプログラミングするときは、バックスラッシュ「 \ 」に気をつけましょう。「¥」とは区別されています。
 - Macの日本語キーボードでは、バックスラッシュ「 \ 」はoptionキーを押しながら「¥」キーを押すと入力できます。
Java を使ってEclipseのコンソールにカレンダーを表示させてみた。

あくまでメモ用として。
・cal.set(int year,int month-1,1)するときに月が「0から11」⇒「1月から12月」にセットされることを忘れがちだった。
・cal.getActualMaximum(Calendar.DATE)でxxxx年xx月は何日あるのかを知ることができる。
・曜日と日付は配列を使って格納した。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562148/f116ec42-3b4b-622c-b318-b48dfc7a8bd7.png)



・カレンダーを作って出力するクラス
　
package foo;
import java.util.Calendar;
public class Calmaker {

	public void Makecal(int year,int month){
	Calendar cal = Calendar.getInstance();
	//int weekday = cal.get(Calendar.DAY_OF_WEEK);
	//System.out.println(weekday);

	int days[][] = new int[6][7];

	System.out.println("日 月 火 水 木 金 土");
	int row = 0;

	//一日から最終日までループ
	for (int i = 1; i <= cal.getActualMaximum(Calendar.DATE); i++) {
		//日付けをオブジェクトに設定
		cal.clear();
		cal.set(year, month-1, i); //月は0から11で指定されているので、-1してあげる。
		int weekday = cal.get(Calendar.DAY_OF_WEEK);

		//日付を拡張
		days[row][weekday-1] = i ;
		//System.out.println(days[row][weekday-1]);

		if(weekday % 7 ==0) {
			row ++;
		}
	}

	//出力
		for (int k = 0; k < 6; k++) {
			for (int j = 0; j < 7; j++) {

				String res = String.valueOf(days[k][j]);

				if(days[k][j]==0) {
					System.out.print("   ");
				}else if(days[k][j] < 10) {
						System.out.print(" " + res + " ");

				}else if(days[k][j] >= 10) {
					res = res+" ";
					System.out.print(res);
				}
				if(j == 6) {
					System.out.println("\r\n");
				}
			}
		}
	}
}
・メインクラス

package foo;

import java.util.Scanner;

public class Makecal {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		System.out.println("西暦を4桁で入力してください");
		Scanner sc1 = new Scanner(System.in);
		System.out.println("月を1から12で入力してください");
		Scanner sc2 = new Scanner(System.in);

		int year  = sc1.nextInt();
		int month = sc2.nextInt();
		System.out.println("西暦"+year+"年" + month +"月");
		System.out.println("");

		Calmaker clm = new Calmaker();
		clm.Makecal(year,month);
	}

}

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562148/c2883e63-92f2-b1d8-6ef3-bc2b7b275f43.png)


終わり。
AWS EC2で環境構築メモ（初期設定編）

# 特に変わったことはないですが、個人的な健忘録として。

# 操作環境
Windows10 19H1
Terminal (Preview)@PowerShell Core

# AWSの無料アカウントを作成する
特に苦労することなく作れると思います

# EC2インスタンスを作成
無料枠で作成した
東京リージョン
t2.micro
Amazon Linux 2 AMI
30GB ディスク

# キーペアを作成
（適当な名前）.pemをダウンロード
C:\Users\ユーザー名\Documents
に置く。

# SSH接続
Terminal (Preview)を起動
ssh -i "（適当な名前）.pem" ec2-user@パブリック DNS (IPv4)
（インスタンスの作成の右にある接続ボタンから参照可能）
でログイン

# 初期設定

```
#パッケージ更新
$　sudo yum update
#タイムゾーン変更（UTCからJST）
$  timedatectl status
$  sudo timedatectl set-timezone Asia/Tokyo
#日本語ロケール
$  localectl status
$  sudo localectl set-locale LANG=ja_JP.UTF-8
$  sudo localectl set-keymap jp106
```


# ログインユーザー変更
デフォルトのec2-userから変更（ここではtanuki3に変更する）

```
#ユーザー追加
$sudo  useradd tanuki3
#sudo権限の付与
$  sudo usermod -G wheel tanuki3
#ちゃんと出来ているか確認
$ grep wheel /etc/group
#/etc/sudoersの設定
$ sudo visudo
  #一番下の行に追加
 newuser ALL=(ALL) NOPASSWD: ALL
```


# SSHでログインできるようにする

```
#ec2-userのauthorized_keysをtanuki3の.sshディレクトリにコピー
$ sudo rsync -a ~/.ssh/authorized_keys ~tanuki3/.ssh/
#必要なパーミッションの設定
$ sudo chown -R tanuki3:tanuki3 ~tanuki3/.ssh
$ sudo chmod -R go-rwx ~tanuki3/.ssh
#sudoがちゃんと出来るか確認
$ sudo su - tanuki3
$ sudo -s
```


# ec2-userの無効化

```
#/etc/ssh/sshd_configの設定でec2-userのsshログインを禁止
$ sudo vi /etc/ssh/sshd_config
 #一番下の行に追加
 DenyUsers ec2-user
#/etc/ssh/sshd_config設定の反映
$ sudo service sshd reload
```


# sshdのLISTENポート変更
デフォルトのまま（ポート:22）だと危ないので、ポートを適当なものに変更（ここでは10022に変更）

```
#/etc/ssh/sshd_configの編集
Port 22  #追加
Port 10022  #追加
#設定反映
$ sudo service sshd reload

```

#一旦終了

```
$ exit
```


# EC2 Management Console→セキュリティグループからポートを追加
・一旦ポート:22は残しておく
・ポート:10022を追加

# Terminal Previewにて新しいポートでSSH接続

```
$  ssh -i "（適当な名前）.pem" ec2-user@パブリック DNS (IPv4) -p 10022

```

# 接続が確認できたらポート:22を塞ぐ

```
#/etc/ssh/sshd_configの編集
Port 22  #削除
#設定反映
$ sudo service sshd reload

```

# EC2 Management Console→セキュリティグループからポートを削除
・ポート:22を削除

# 参考
https://qiita.com/yangci/items/ef2ab9b6f0d28bad0881
https://qiita.com/nekonoprotocol/items/e1fc5c212bf6a7365f8f

# なお、SSH周りで失敗すると大変です（もしなった場合はこちらを）
https://qiita.com/hardreggaecafe/items/de9bac1d9ba42f25378e
Windows TerminalでSSH用いてVPSにログインしようとしたら怒られた

# 何もしていないのに怒られた

Windows TerminalでSSH用いてVPSにログインしよう。

```
ssh -i "C:\Users\y_tanimachi\Documents\foo.pem" hoge@xxx.xxx.xxx.xxx
```
そしたらもの凄い勢いで怒られた。しかもログインできない。何もしていないのに……。
英語だらけで全く訳わからないが何やら警告が出ているようだ。

```
 WARNING: UNPROTECTED PRIVATE KEY FILE!
```


# 何をしたのか思いだしてみよう

- ノートPCから鍵ファイルを別PCにコピー
- 別PCからWindows Terminalを起動
- SSHでVPSにログイン試行
- にゃーん

# 調べてみよう
ググったら出てきた。
鍵ファイルへのアクセス権限が**「あり過ぎる」**ので危険だから警告が出たらしい。

# どうすればいいのか？
アクセス権限を絞りましょう。以下方法。

- 鍵ファイルを右クリック→プロパティ
- セキュリティを開き、下部の詳細設定をクリック
- 左下の継承の無効化をクリック
- 継承されたアクセス許可を～をクリック→OK→OK
- SYSTEMとAdministrator、自分以外のアカウントを選択し編集をクリック
- 恐らく「フルコントロール」になっているので「読み取りと実行」「読み取り」のみ許可にする

#  もう一度ログイン
VPS上のLinuxにログインできれば解決。そうでないなら、もう一度権限周りを見直してみる。
やっていきましょう。
jQuery1系をWebpackerで流用した話

# 背景
新規開発プロジェクトにてデザインの一部を他アプリから流用したいリクエストがありました｡
そのアプリはjquery1系で動いていたため､そのまま流用しても後述の環境では動かず・・・｡
Chromeの開発者ツールによるデバッグで「$ is not defined」が頻発したりとだいぶハマったので備忘録として残します｡

局所的にjqueryを利用するため､アプリ内におけるグローバル化は実施しておりません｡

# 参考
以下の回答が大変参考になりました！

[Webpackでjqueryなどが認識されない](https://teratail.com/questions/161541)

# 環境
Rails: 6.0.2
Webpacker: 4.2.2
jQuery: 3.5.1
パッケージマネージャ: yarn

## 流用したコード(抜粋)

test.js

```javascript
'use strict';

(function($){
  // 各処理
  var hoge = (function () {
    var $fuga = $('viewのclassまたはｉｄ属性')
    return{
      piyo: function () {
        // 取得したclass,id属性に対してjqueryで実現したい処理
      }
     }
  })();
  $(window).on('load', function(){
    // ページが読み込まれた時に実行するモジュール化された関数たち
    hoge.piyo();
  });

})(jQuery);

```

CDNによるjquery読み込み

test.html

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

## 修正したコード(抜粋)
test.js

```javascript
'use strict';

import $ from 'jquery';

$(function(){
  // 各処理
  var hoge = (function () {
    var $fuga = $('viewのclassまたはｉｄ属性')
    return{
      piyo: function () {
        // 取得したclass,id属性に対してjqueryで実現したい処理
      }
     }
  })();

  $(window).on('load', function(){
    // ページが読み込まれた時に実行するモジュール化された関数たち
    hoge.piyo();
  });
  
});
```

webpackerによるjavascript読み込み

[webpacker管理対象ディレクトリ]/packs/app.js

```javascript
import '../[任意のディレクトリ]/test.js';
```

test.html.slim(要件に従いslimを採用しております)

```html
= javascript_pack_tag 'app'
```