OmniAICreator/Qiita-1.07M huggingface dataset:
高卒技能員でも理解した「微分の考え方」

統計学やら機械学習やら学習する中で必ず出てくる1つの壁「微分」

```math
\frac{d}{dx}f(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h} 
```

この公式はある関数をxについて微分してその傾きを表す関数を返す関数です

なんのこっちゃ？……って感じで微分に出てくるこの公式が分からない人に向けた話です。



「微分は｛傾きを求めたいときに使う｝ってのは分かる。けどその程度にしか分からない…。」


wiki曰く
【数学における実変数函数（英語版）の微分（びぶん）、微分係数、微分商または導函数（どうかんすう、英: derivative）は、別の量（独立変数）に依存して決まるある量（函数の値あるいは従属変数）の変化の感度を測るものである。】

と書いているけど、益々分からんくなるわ…そう思う私。

では、話を変えて、この数式は理解できますか？

```math
f(x) = ax
```
グラフで表すなら、こんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588211/cc3fd6d8-27bb-97e4-0a66-e9c7bcd63b87.png)


そう、1次関数です。

aに当たる部分が｛傾き｝を表し、この値が大きくなるほど角度の急なグラフが出来上がるわけです
例えばこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588211/94340865-0274-77f1-c48f-181b2ae4d1b4.png)


この場合のaの部分（傾き）を求める数式を書くと


```math
f(x)=ax\\
a=\frac{f(x)}{x} 
```
という感じにxが分母に、f(x)が分子になります。

ではもう一つ別視点の1次関数を具体例で考えましょう
ある点を(x,y)と置いた場合、
点a(1,2)
点b(2.4)
を通る直線f(x)はどんな式になるか？

皆さん感覚的に

```math
f(x)=2x\\
```
であると導けたはずです。
xが１つ増えるとyが２つ増える。
だから傾き2の直線であると

これを生真面目に式に書くならこうです


```math
a=\frac{f(x)の増加量}{xの増加量}\\
```

```math
a=\frac{4-2}{2-1}\\

a=2
```
ここからようやく本題ですが、微分は雑駁に書くと、ある関数のある部分の傾きを表した関数が分かります。


そしてそれを理解するために、この1次関数の傾きの式が分かれば冒頭の公式の理解は楽勝です。

今回はあるグラフf(x)の丸の部分を例に考えます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588211/093d81fd-d0b1-f520-b39b-9d08bb7b97de.png)

この丸部分を究極に拡大して考えるとほぼ直線になります
この丸部分のある点xとし、そのわずかに隣をhとした場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588211/12203f0c-a55f-cb5a-6e8e-c42829b3f45f.png)
このようになります。
傾きaは2点分かってしまえば、

```math
a=\frac{f(x)の増加量}{xの増加量}\\
```
に当てはめればいいので分母から先に考えましょう

```math
a=\frac{f(x)の増加量}{(x+h)-x}\\
```
```math
a=\frac{f(x)の増加量}{h}\\
```

あとはf(x)です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588211/3cb7769c-4ca5-41b2-177a-c67657c7346e.png)

先の式に代入して

```math
a=\frac{f(x)の増加量}{h}\\
```
```math
a=\frac{f(x+h)-f(x)}{h}\\
```

このhを限りなく0に近づけた場合という意味を数式に
書き加えます

```math
a=\lim_{h \to 0} \frac{f(x+h)-f(x)}{h}\\
```

冒頭の公式

```math
\frac{d}{dx}f(x) = \lim_{h \to 0} \frac{f(x+h)-f(x)}{h} 
```
と同じになりましたね。最も左側部分

```math
\frac{d}{dx}f(x) 
```
というのは「良く分からない関数f(x)をxについて微分するよ」
という微分をやるとき宣言文みたいなものです、そして微分で求まるのは傾きを表す関数です。

その内情は
2点間の距離を元に、1次関数が求まるように当てはめて、傾きが分かるようにした。
というのが、この公式の内容でした。
DB2 トランザクション・ログがフルになったときのログ拡張方法

# 背景
DB2でバッチを実行したところ、

```
SQL0964C データベースのトランザクション・ログがいっぱいです。 SQLSTATE=57011
```

のエラーが発生、現地で即座に対応する必要があったためために、ログ領域の拡張方法を調査、実施しました。


## ログ領域の拡張方法

現在のログ領域の情報をみるために以下のコマンドを実行

```
db2 get db cfg for [DB名]
```

ログ・ファイルのサイズ 
1 次ログ・ファイルの数 
2 次ログ・ファイル数

の部分にログファイルの情報が記載されています。

各パラメータを変更するためのコマンドは以下になります。

```
db2 update db cfg for [DB名] using LOGFILSIZ [新しい値]
db2 update db cfg for [DB名] using LOGPRIMARY [新しい値]
db2 update db cfg for [DB名] using LOGSECOND [新しい値] IMMEDIATE
```

私が現象を解消した際は
ログ・ファイルのサイズ 
2 次ログ・ファイル数

を変更しました。

1年に一回しか実行しないバッチなので、1次ログファイルは拡張せずに2次ログファイルを拡張。
万が一失敗した際にリトライする時間もなかったのでログファイルのサイズも念のため拡張。
実環境では以下のコマンドを実行し解消することを確認しています。

```
db2 update db cfg for [DB名] using LOGFILSIZ 20000
db2 update db cfg for [DB名] using LOGSECOND 50 IMMEDIATE
db2stop force
db2start
```
## その他
元のPGの作りみてトランザクションの、ここ最近担当者の退職に伴い引き継いだ10年前に作成されたシステム
なので解析に時間がかかりそう


## 参考URL

[トランザクション・ログがフル (SQL0964C) になったときの対応 (IM-10-00W)](https://www.ibm.com/support/pages/db2-luw-%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%AD%E3%82%B0%E3%81%8C%E3%83%95%E3%83%AB-sql0964c-%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E5%AF%BE%E5%BF%9C-im-10-00w)
[ログ・ファイルのサイズ構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_10.5.0/com.ibm.db2.luw.admin.config.doc/doc/r0000239.html)
[1 次ログ・ファイル数構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_10.5.0/com.ibm.db2.luw.admin.config.doc/doc/r0000240.html)
[2 次ログ・ファイル数構成パラメーター](https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_10.5.0/com.ibm.db2.luw.admin.config.doc/doc/r0000241.html)
【Rails】N+1問題とは？ includesメソッドで解決する

## N+1問題とは

#### N+1問題とは、大量のSQLが実行されて動作が重くなるという問題。
「全てのレコードを取得する1回+N回分SQLが実行される」ために、N+1問題という。

#### ex.)掲示板一覧ページにアクセスした時
1. 掲示板(Board)のデータををallで取得(１回)
2. その各掲示板を投稿したユーザーの名前を表示させたい。  
→Usersテーブルからデータを取得する必要がある。  
→掲示板の数の分だけusersテーブルから名前を取得するSQLを実行する。  
→掲示板の数が１０個あれば、１０回SQLを実行する。

仮にこれが１万回もSQLを実行した場合、めちゃくちゃ重くなる。  
  
以下のログでは、掲示板を全て取得してから、ユーザーの情報を取得するためのSQLが何度も実行されている。

```sql
Started GET "/boards" for ::1 at 2020-03-20 16:52:47 +0900
Processing by BoardsController#index as HTML
  Rendering boards/index.html.erb within layouts/application
  Board Load (1.2ms)  SELECT "boards".* FROM "boards"
  ↳ app/views/boards/index.html.erb:17
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  ↳ app/views/boards/index.html.erb:34
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]
  ↳ app/views/boards/index.html.erb:34
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 3], ["LIMIT", 1]]
  ↳ app/views/boards/index.html.erb:34
```

## N+1の解決策
・`includes`メソッドで関連するモデルのデータを先に取得しておく。

```ruby
@boards = Board.all.includes(:user)
```

```sql
Started GET "/boards" for ::1 at 2020-03-20 17:19:28 +0900
Processing by BoardsController#index as HTML
  Rendering boards/index.html.erb within layouts/application
  Board Load (0.3ms)  SELECT "boards".* FROM "boards"
  ↳ app/views/boards/index.html.erb:17
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)  [["id", 1], ["id", 2], ["id", 3], ["id", 4], ["id", 5], ["id", 6], ["id", 7], ["id", 8], ["id", 9], ["id", 10]]
  ↳ app/views/boards/index.html.erb:17
  Rendered boards/index.html.erb within layouts/application (51.0ms)
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 10], ["LIMIT", 1]] （※ログイン中のユーザー）
  ↳ app/views/layouts/application.html.erb:13
  Rendered shared/_header.html.erb (2.5ms)
  Rendered shared/_flash_message.html.erb (0.4ms)
  Rendered shared/_footer.html.erb (0.4ms)
Completed 200 OK in 106ms (Views: 102.6ms | ActiveRecord: 0.9ms)
```

これで、仮にeachメソッドで繰り返し表示させた場合でも、毎回SQLを発行せずに済む。

## bulletジェムで、N+1問題を検出

bulletジェムをインストールしておけば、ブラウザ上でn+1問題が発生しているビューを表示したときに、ブラウザにポップアップで警告を出してくれる。


<img width="677" alt="スクリーンショット 2020-04-12 12.05.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576318/a5c48131-e2da-381f-7be3-ab5b8d3f52e8.png">



開発環境にインストールしておけばよい。

```ruby
Gemfile
group :development do
  gem 'bullet'
end
```

ちなみにターミナルのログにも警告を表示してくれて、includesメソッドを使ってくださいね〜って勧めてくれる。
親切だこと。

```terminal
user: funesakisuke
GET /users/124/bookmarks
USE eager loading detected
  Board => [:user]
  Add to your query: .includes([:user])
Call stack
```
#VsCode でキーボード操作で今開いているファイルを削除する ( TimeLine Preview -> Command + Delelete )

- TimeLine Preview を開く
- ファイル名にフォーカスが当たっている状態で Command + Delete ( Backspace ) を打つ

(Macの場合)

![image](https://user-images.githubusercontent.com/13635059/79032463-9bcd4300-7be1-11ea-92ff-8513b068365f.png)

![image](https://user-images.githubusercontent.com/13635059/79032464-9cfe7000-7be1-11ea-897e-d109e4980d29.png)
![image](https://user-images.githubusercontent.com/13635059/79032466-9d970680-7be1-11ea-87b0-b732003f78e2.png)


# Original by Github issue

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








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
COVID-19チャレンジ（フェーズ1）のデータの使い方

次で公開されているデータを、Google Colabotary で使う方法です。
[COVID-19チャレンジ（フェーズ1）](https://signate.jp/competitions/260)

次のような結果を得ます。
![signate_apr12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/c04e0e40-1d9e-4f49-b365-3b5c3b5efe6c.png)

データの取得

```bash
wget --no-check-certificate --output-document=data.csv 'https://docs.google.com/spreadsheets/d/10MFfRQTblbOpuvOs_yjIYgntpMGBg592dL8veXoPpp4/export?gid=0&format=csv'
```

取得したデータの確認

>```bash
more data.csv
```

>```text
$ python
Python 3.8.2 (default, Jul 16 2020, 14:00:26) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> df = pd.read_csv("data.csv")
>>> df.shape
(13048, 32)
```

栃木県のデータの表示

```py
import pandas as pd

df = pd.read_csv("data.csv")
df = df[["都道府県症例番号","確定日","居住都道府県","居住市区町村","年代","性別"]]
df.loc[df['居住都道府県'] == '栃木県']
```

次のページを参考にしました。
>[新型コロナウイルス感染症（COVID-19）のオープンデータをGoogle Colaboratoryで手軽に可視化・分析する方法](https://qiita.com/karaage0703/items/0e24f332dcda7d7730b5)
リモートリポジトリ作成時にREADMEファイルを作り、ローカルリポジトリの内容をpushしようと思ったら苦労したからまとめました。



自分用に備忘録と、自分と同じような初学者のための手助けとなればと思い書きました。
READMEを作成していない場合は、困ったときの手順でもできていましたが、
READMEを作成した場合は試してみてください。



## 環境
OS:Windows10
Gitバージョン:git version 2.26.0.windows.1

## 困ったときの手順

gitとGitHubを使い始めたときは下記の手順により、

1,管理したいフォルダを開き、上部のアドレスバーにcmdと入力しコマンドプロンプト(iOSでいうターミナル??)を表示させる。
表示された画面に下記コードを入力。

```
git init
```

2,管理したいフォルダの内部のファイル、フォルダを選択するために下記コードを入力。

```
git add .
```

3,それらをメッセージ付きでコミットする。

```
git commit -m"メッセージ"
```

4,リモートリポジトリをローカルリポジトリに登録

```

git remote add origin リモートリポジトリ(GitHub)のアドレス
```

5 リモートリポジトリにプッシュ　<strong>ここでエラー</strong>

```
git push origin master
```

## 対処法

「5,リモートリポジトリにプッシュ」の前に下記コードをいれる。


```
git merge --allow-unrelated-histories origin/master
```
【Laravel】FormファサードのsubmitボタンでFontAwesomeを使う

# 個人的に詰まったのでメモとして
bladeテンプレートとLaravelCollectiveを使って、アイコンを使った送信ボタンを作る

```php

<form action="store.php" method="post">
  <button type="submit" class="btn"><i class="fas fa-paper-plane"></i></button>
</form>
```

このformをformファサードを使って書き換えようと思ったら、

```php
<button type="submit" class="btn"><i class="fas fa-paper-plane"></i></button>
```

ここのiタグをネストする方法が分からない。

調べてもなかなか答えが見つからず。

```php
{!! Form::open(['route' => ['store']]) !!}
  {!! Form::button('<i class="fas fa-paper-plane"></i>', ['class' => "btn", 'type' => 'submit']) !!}
{!! Form::close() !!}
```

`Form::submit`を使わず、`Form::button`でvalueをネストさせるiタグにして`'type' => 'submit'`を付加すればできました。
「firebase use --add 」での権限エラーは再ログインで直ります。

# 発生した事象
先日、「firebase use --add」のコマンドで権限エラーとなる事象が発生しました。
「firebase  projects:list 」のコマンドも同様のエラーとなり、firebaseのコマンドが使えていない状態になっていました。

他のかたも同様のエラーが発生するだろうと思いましたので、
簡単にエラーの詳細と解決策を紹介しておきます。

# エラー詳細
```
$ firebase use --add
Error: Failed to list Firebase projects. See firebase-debug.log for more info.
Having trouble? Try again or contact support with contents of firebase-debug.log
```

firebase-debug.log の内容を確認してください。というエラーが表示されたので、確認してみると
下記の通りでした。

```
[debug] [2020-04-11T14:49:58.095Z] FirebaseError: HTTP Error: 401, Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
    at module.exports (/Users/username/.npm_global/lib/node_modules/firebase-tools/lib/responseToError.js:38:12)
    at Request._callback (/Users/username/.npm_global/lib/node_modules/firebase-tools/lib/api.js:40:35)
    at Request.self.callback (/Users/username/.npm_global/lib/node_modules/firebase-tools/node_modules/request/request.js:185:22)
    at Request.emit (events.js:210:5)
    at Request.EventEmitter.emit (domain.js:476:20)
    at Request.<anonymous> (/Users/username/.npm_global/lib/node_modules/firebase-tools/node_modules/request/request.js:1154:10)
    at Request.emit (events.js:210:5)
    at Request.EventEmitter.emit (domain.js:476:20)
    at IncomingMessage.<anonymous> (/Users/username/.npm_global/lib/node_modules/firebase-tools/node_modules/request/request.js:1076:12)
    at Object.onceWrapper (events.js:299:28)
    at IncomingMessage.emit (events.js:215:7)
    at IncomingMessage.EventEmitter.emit (domain.js:476:20)
    at endReadableNT (_stream_readable.js:1183:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)
[error]
```

# 解決方法
調べて見たところ、firebase-toolsを最新化したことで認証がうまくいっていないとのことでした。
一度ログアウトして、再ログインをしたらうまくいくようになりました。

```
$firebase logout
```

```
$firebase login
```


以上、お役にたてば幸いです。
純正律の平均律からの差（セント）を計算

#はじめに
純正律のミとソとラは平均律から14セント下、2セント上、16セント上は覚えてるのですけど、レとファとシは覚えられず、毎回ググってるので、計算方法を覚え書き程度に。
#結果
取り急ぎ結果を
数値は純正律の平均律からの差(セント)

|Do |Re |Mi |Fa|  So |La |Ti |
|---  |---  |---  |--- |--- |--- |--- |
|0 |+4 |-14 |-2|  +2 |-16 |-12 |

#オクターブとは？
基準周波数の２倍が１オクターブ
これは平均律も純正律も同じ。

#平均律とは？
１オクターブ(2倍)を12等分したものが平均律の半音の幅
JavaScript的な表現だとこんな感じ。

```javascript

Math.pow(2,1/12)
```
#セントとは？
平均律での半音を100等分した幅
よって、オクターブの1200等分
JavaScript的な表現だとこんな感じ。

```javascript

Math.pow(2,1/1200)
```
#純正律とは？
１オクターブ(2倍)を整数比で分割したもの。
音の幅は（周波数比は）
半音は16/15だけど全音は幅の広い大全音(9/8)と小全音(9/10)がある。
ドからの周波数比はこんな感じ。

|Do |Re |Mi |Fa|  So |La |Ti |
|---  |---  |---  |--- |--- |--- |--- |
|1|9/8|5/4|4/3|3/2|5/3|15/8 |

#計算してみる
##平均律
平均律で１セント幅

```javascript

cent=Math.pow(2,1/1200); //１セント幅
```

##純正律
純正律は直接的にしか定義できないので

```javascript
pure =[1,9/8,5/4,4/3,3/2,5/3,15/8]; //純正律
```
##純正律の平均律からの差
上記を踏まえて、純正律の平均律からの差（セント）を計算すると

```javascript
<script language="JavaScript">
cent=Math.pow(2,1/1200); //１セント幅
pure =[1,9/8,5/4,4/3,3/2,5/3,15/8]; //純正律
stepNum=[0,2,4,5,7,9,11];           //基準音からの幅　半音１、全音２
stepName=["Do","Re","Mi","Fa","So","La","Ti"]; //音名

for(i=0;i<stepName.length;i++){
  //結果を表示
  document.write(stepName[i] + 
                 Math.round(
                     (Math.log(pure[i])/Math.log(cent) - 
                      stepNum[i]*100))  +
                 "<BR>");
}
</script>
```

#おまけ
マイナーコードの場合、ラが基準音だと考えると
ラをドに読み替えて、全体を16セントあげれば
純正律になるけど、とてもピッチが高くなる
・・・けどいいのだろうか

|Do |Re |Mi♭ |Fa|  So |La♭ |Ti |
|---    |---  |---  |--- |--- |--- |--- |
|0  |+28 |+16 |+20|  +2 |+14 |+18 |
ESlintとPrettierをVSCodeで

##ESlintとは
- 構文解析&コードフォーマットツール
- コードフォーマット機能はPrettierの方が優秀
- 設定ファイルは`.eslintrc.js`
- 設定できる項目が大量にある
    - 関連するプラグインがたくさん出ているので、設定ファイルに細かく指定しなくてもプラグインがよしなに設定してくれる

##Prettierとは
- コードフォーマッター
- ESlintよりフォーマットの精度が高い
- 細かく設定をしなくてもいい感じにしてくれる。
- 構文チェックの機能は無い
- 設定ファイルは`.prettierrc.js`

##VSCodeとの連携
各種拡張機能を入れることで、`.eslintrc.js`や`.prettierrc.js`で設定したルールに従い、問題がある箇所に下線を引いたり、ショートカット一発ですぐに整形することができるようになります。

- [ESlint - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
- [Prettier - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) 

##参考
- [Prettier 入門 ～ESLintとの違いを理解して併用する～ - Qiita](https://qiita.com/soarflat/items/06377f3b96964964a65d)
Ruby on Railsで作るランキング機能。ユーザーが売り上げ金額を入力し、運営が承認し、そして反映、のやり方

Ruby on Railsでランキング機能を実装しようと考えています。
ランキングの順位は売り上げ金額の多い順に１位2位...としていきます。
各ユーザーに売り上げ金額を入力してもらい、こちらが承認してランキングに反映させる、というものを作りたいです。

この部分を事を実現するためにはどの様なフローを取れば良いでしょうか？
管理画面を作る？権限を持つユーザーを作る？とは調べると出てくるのですが
具体的にどうすれば良いのか。わかりません。。。
初、という事でランキングの時はこの考え方、というものが一切ない為質問させて頂きました。

よろしくお願い致します。
テレワーク時代の MacOS X Terminal の Proxy切り替え

先月から本格的な自宅勤務体制が始まりました。

ネットワーク環境が変わると、TerminalのProxy設定やらsshの設定やらを変える必要があり、従来までは、[Mac OS X で ネットワークプロファイルをアクセスポイント名で自動切り替え](https://qiita.com/kobakou/items/93f18aac4334e87f6d04) といった方法をを使っていまいた。多くの場合、場所＝アクセスポイントで良かったのです。このやり方ではWiFiのアクセスポイント名を使ってネットワークプロファイルを切り替えています。なお、 ssh関連も `.ssh/config_no_proxy` `.ssh/config_proxy` でproxyの有無で切り替えています。

ところが、本格的に自宅勤務するようになり、自宅のアクセスポイントでも社内にVPNするようなケースがでてきたため、自宅アクセスポイントに接続していても、ネットワーク環境が社内、というケースがでてきました。

そこで `.bashrc` をこんな感じに変更しました。加えた処理としては、社内ネットワークにいないと疎通しないサーバーにpingをして、その結果も使ってproxy/ssh設定を切り替えます。アクセスポイントを見る処理はなくてもいいのですが、社内でもロケーションによって切り替えしたところがあったので残しています。

```bash
#!/bin/bash

## proxy trigger settings ##
proxy_name=http://internal.company.com:10080
switch_trigger=INTERNALWIFI # アクセスポイントの名前
INTERNAL_SITE=internal.company.com #疎通確認用

# no-proxy env.
ln -fs ~/.ssh/config_no_proxy ~/.ssh/config

# proxy env.
if [ "`networksetup -getairportnetwork  en0  | awk '{print $4}'`" = "$switch_trigger" ]; then
    export http_proxy=$proxy_name
    export https_proxy=$proxy_name
    export ftp_proxy=$proxy_name
    export all_proxy=$proxy_name

    ln -fs ~/.ssh/config_proxy ~/.ssh/config
else
#vpn
  ping ${INTERNAL_SITE} -c 1 >> /dev/null 2>&1
  if [ $? -eq 0 ]; then
      export http_proxy=$proxy_name
      export https_proxy=$proxy_name
      export ftp_proxy=$proxy_name
      export all_proxy=$proxy_name

      ln -fs ~/.ssh/config_proxy ~/.ssh/config
  fi
fi
```

VPNの接続・切断後、ネットワーク設定が変わって、proxy/sshの設定がずれていたら、新規でTerminalを開いて`.bashrc`を動かせばサクッとgithubに繋がるようになりました。めでたしめでたし。

Work from Home の、ご参考になれば幸いです。
【GitHub】git-flowについて

##はじめに
小規模な開発であればほとんど気にならないと思いますが、大規模な開発の場合ルールを決めないでブランチを使っていると、無秩序にブランチの作成やマージが行われ、リポジトリが煩雑になるかなと思います。
これを解決するために「ブランチモデル」というブランチ管理方法が考案されたのですが、まずはその中の1つである「git-flow」について解説したいと思います。

##git-flowとは
git-flowでは、役割が決められた5種類のブランチを切り替えながら開発を進めていきます。
その5種類のgit-flowについて簡単に説明します。

###①masterブランチ
masterブランチは、Gitでリポジトリを新規作成するとデフォルトで作成されるブランチです。
masterブランチに直接コミットしている方も多いと思いますが、git-flowではmasterブランチに直接コミットすることはなく、マージを行うだけのブランチとして扱います。

###②developブランチ
developブランチは、開発の中心となるブランチです。
開発中はdevelopブランチからブランチを切って、作業完了後に再びマージするという作業を繰り返すことになります。
リポジトリを新規作成したときに、masterブランチからdevelopブランチを切っておきます。

###③featureブランチ
featureブランチは、機能の追加や変更、バグフィックスを行うブランチです。
ひとつの変更に対してひとつの featureブランチを切ることになるため、開発中で最も使われるブランチになるでしょう。
基本的に新規で何か機能開発をしたり機能追加をする時はこのブランチを使っていきます。

###④releaseブランチ
releaseブランチは、リリースするために使うブランチです。
developブランチから releaseブランチを切って、そのブランチでリリース作業を行います。
リリース作業が完了後、masterブランチとdevelopブランチにマージして、masterブランチのマージコミットにリリースタグをうちましょう。

###⑤hotfixブランチ
リリースのタイミングで重大な不具合が見つかった場合に使うブランチです。
masterブランチから直接hotfixブランチを切って修正を行いましょう。
修正完了後に masterブランチとdevelopブランチにマージして、リリースタグをうちます。
派生元がmasterになるだけで、操作的にはreleaseブランチと同様です。

##おわりに
いかがでしたでしょうか。
次回は[featureブランチを切ってpushする方法](https://qiita.com/yukachin0414/items/a1439183532d886dc572)についてまとめたいと思います。

参考：[Git-flow ～Gitのブランチモデルを知る～ | バージョン管理システム入門(初心者向け)](https://tracpath.com/bootcamp/learning_git_git_flow.html)
【Unity初心者】ボタンが押せない！対処法2つ

#環境
Unity 2019.3.7f1

#ボタンが押せなくなった！
さっきまでボタン押せてたのに！
なにも消してないし。。。
どういうこと！？
Unityこわれた！？

押せなくなった時には次のことが起きていませんか？
**・ボタンより手前にUIが存在している**
**・テキストなどの透明の部分がボタンにかぶっている**



#対処法
対処法は２つ
**・ヒエラルキー上でボタンが手前にくるように表示順を変更する。**
(詳細はこちらhttps://qiita.com/Maru60014236/items/0ee46dd40f63c7f7186c) 

**・重なっているUIのレイキャストターゲットをOFFにする**


#具体例
**重なっているUIのレイキャストターゲットをOFFにする**
テキストの表示順が手前
かつ
このようにテキストの透明の部分がボタンにかかっているとボタンが押せない状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/df27bb84-3d3b-0675-8bb6-b0ebf4fe2933.png)

**レイキャストターゲットをOFF**
テキストのインスペクターを見てみると
レイキャストターゲットにチェックが入っていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/65a28f33-2b32-a128-a42a-3e323b341f99.png)
チェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/cf1063ba-a9a4-49c7-5934-b0edd7ec5f35.png)
これでボタンが押せるようになります。


レイキャストターゲットが何者なのかはわかっていませんが、
とりあえず解決方法だけ共有します。
リモートワークで心がけていること

## はじめに
昨今の事情により、最低でも一ヵ月の間、リモートワークを行う必要が出たため、なるべく業務が捗る＆ストレスが貯まらない方法を模索しています。
こちらの記事ではリモートワーク初心者の自分が現時点で心がけていることを挙げています。
※リモートワークについての技術的は話ではありません。

##リモートワークで困ったこと

* 公私の区別がつかず、だらだらとしがち
* 運動不足・健康への悪影響が不安

当たり前のことですが私生活の場で業務を行うと、どうしても気が散ってしまい、仕事の進みが悪くなってしまいます。そのせいで長時間だらだらと仕事を続けてしまい、まるで24時間仕事をしている気分になってしまいがちでした。
また、通勤がなくなったことにより、丸一日部屋から出ないような不健康な日も多くなってしまいました。

## 心がけていること
さすがにこの生活を続けるのは心身ともによろしくないので、自分なりに改善を試みています。現在は以下の内容を実践しています。

#### 1. エア出勤
普段の通勤開始時間に散歩に出かけ、業務開始時間に自室に戻るエア出勤。
元々は仕事モードに入るため、服を着替えて業務を行うようにしていたので、その延長線上で実施してみました。
自室に戻ってからは仕事時間と決めて実践してみたところ、意外にもスムーズに仕事モードに切り替えることができ、集中して業務を行うことができました。
また、決まった時間に身支度を整える必要があるので生活のリズムを乱さない上、散歩をすることで多少の運動不足解消ができるようになりました。散歩中に今日の仕事のタスクを整理できるのも良い感じでした。

#### 2. 環境の整備
当然ですが自室は仕事をするために特化した環境ではないので、どうしても職場より効率が悪くなりがちでした。少しでも改善するために以下を実施しました。

・サブディスプレイを用意。
　仕事用のノートPCにサブディスプレイを接続。これだけで作業効率が段違いに良くなりました。
　私は自宅PCのメインディスプレイを流用していますが、TVでもタブレット端末でもOKだと思います。
・椅子を良いものにする。
　長時間座り仕事をすると腰への負担が無視できません。自宅にアーロンチェアでもあれば良いのですが、いきなり高級椅子を購入するのは躊躇われました。そこで、100円ショップで車用のバックレストを購入してみました。メッシュ状のクッション部で腰を支えてくれるので、アーロンチェアぽい座り心地を得られます。コスパは最高なので、椅子周りに不安のある方はおすすめです。

#### 3. 気分転換
一人で仕事をしていると気分が滅入ることもあります。
あまり気分が乗らない時は、意識してチャットツールで雑談を行うようにしています。
Web会議を使って雑談するのも良い気分転換になりました。

また、だらだらとした休憩をしないように、極力自席でのネットサーフィンは避けています。そのかわりに換気と軽い運動を行うようにしています。周りの目を気にせずにスクワットや腕立てをできるのは、リモートワークの良い点だと思います。

## おわりに
先が見通せない時期ですので、心身共に健康でいられるように日々リモートワークについて改善していきたいと思います。

以上
Python VTKを使ってSTLをVoxelメッシュに変換する

# はじめに

STLのCADデータからを符号付距離関数(Signed Distance Function: SDF)を使ってVoxelメッシュ作成します。使ったライブラリはPythonのVTKです。なお、コードは全面的に以下の記事を参考にしました。

- https://qiita.com/torisan_piyopiyo/items/588e607c578b4b00903a

# 環境

Windows 10 home

Anaconda(Python 3.7.6)

VTK 8.2

Paraview 5.4.1(STLとvoxelメッシュの表示に利用）

# CADデータ（STLデータ）

スタンフォードドラゴン。

<img width="332" alt="stanford_dragon_original.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/43a1a139-18ee-7625-7c5c-466fe86e6044.png">


# ソースコード

```python
import vtk

filename = "./dragon.stl"
#stlファイルを読む
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
reader.Update()

#Poly dataを取り出す
poly_data = reader.GetOutput()

#メッシュサイズを決める
cell_dims = [50, 50, 50]#x, y, z

#メッシュグリッドを作成する
#x_min:0 x_max:1, y_min:2,y_max:3,z_min:4,z_max:5
bounds = poly_data.GetBounds()
mesh_pitch = [(bounds[1] - bounds[0])/cell_dims[0],
              (bounds[3] - bounds[2])/cell_dims[1],
              (bounds[5] - bounds[4])/cell_dims[2]]
mins = [bounds[0], bounds[2], bounds[4]]

points = vtk.vtkPoints()
for ix in range(cell_dims[0]+1):
    for iy in range(cell_dims[1]+1):
        for iz in range(cell_dims[2]+1):
            x = ix * mesh_pitch[0] + mins[0]
            y = iy * mesh_pitch[1] + mins[1]
            z = iz * mesh_pitch[2] + mins[2]
            points.InsertNextPoint(x,y,z)
structured_base_mesh = vtk.vtkStructuredGrid()
structured_base_mesh.SetExtent(0, cell_dims[0], 0, cell_dims[1], 0, cell_dims[2])
structured_base_mesh.SetPoints(points)

#構造格子データを非構造格子データに変換する
append = vtk.vtkAppendFilter()
append.AddInputData(structured_base_mesh)
append.Update()
base_mesh = append.GetOutput()

#Voxelの中心を座標を求める
cell_centers = vtk.vtkCellCenters()
cell_centers.SetInputData(base_mesh)
cell_centers.Update()

#STLからVoxelメッシュを作成する 
center_points = cell_centers.GetOutput().GetPoints()
cell_list = vtk.vtkIdList()
sdf = vtk.vtkImplicitPolyDataDistance()
sdf.SetInput(poly_data)
distance_sdf = vtk.vtkDoubleArray()
distance_sdf.SetName("sdf")
for idx in range(center_points.GetNumberOfPoints()):
    current_center = center_points.GetPoint(idx)
    distance = sdf.FunctionValue(current_center)
    distance_sdf.InsertNextValue(distance)
    if distance <= 0:
        cell_list.InsertNextId(idx)

base_mesh.GetCellData().SetScalars(distance_sdf)#SDFの値を追加する

extract_cells = vtk.vtkExtractCells()
extract_cells.SetInputData(base_mesh)
extract_cells.SetCellList(cell_list)
extract_cells.Update()

#VoxelデータをVTKファイルで出力する
writer = vtk.vtkXMLDataSetWriter()
writer.SetFileName("closed_voxel.vtu")
writer.SetInputData(extract_cells.GetOutput())
writer.Update()

#SDFの値を入力した格子データをVTKファイルで出力する
#writer = vtk.vtkXMLDataSetWriter()
#writer.SetFileName("all_voxel.vtu")
#writer.SetInputData(base_mesh)
#writer.Update()

```

<img width="333" alt="stanford_dragon_voxel.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/3c25b3e8-1b90-c16f-1dce-58044b7f81e1.png">
WSLの開始、停止、再起動

WSLのサービス名は`LxssManager`です。
このサービスに対し開始・停止を行うことが、WSLの開始・停止になります。

### 開始
管理者として実行したPowerShellにて、以下のコマンドを実行します。

```
net start LxssManager
```

このコマンドを使わなくても、WSLのターミナルを開くと、自動的にWSLサービスが開始します。

### 停止
管理者として実行したPowerShellにて、以下のコマンドを実行します。

```
net stop LxssManager
```

WSLを使わないときには停止しておくとリソースの節約ができます。

### 再起動
停止＆開始を組み合わせるだけです。

管理者として実行したPowerShellにて、以下のコマンドを実行します。

```
net stop LxssManager
net start LxssManager
```

WSLにインストールしたOSがフリーズした時などに有効です。


以上。
t検定〜1標本の平均の検定

# 1標本の平均の検定
t検定は2つの母集団の平均値に違いがあるかどうかの検定に用いられます。
例えば2人の営業マンの営業成績の平均値や、2種類の薬の効果の平均値に
違いがあるか調べる時にt検定を行います。
標本数が1つの場合もt検定を用いますので、ここでは1標本の平均の検定を
行ってみます。

## t値
t検定ではまずt値を求めます。
t値を端的に表すと

```math
t値= \frac{期待値の差}{分散/サンプルサイズ}
```

になります。以上の式より、

・期待値の差→大きいほどt値が高い
・分散→小さいほどt値が高い
・サンプルサイズ→大きいほどt値が高い

ことがわかります。
t値が大きさは有意差に関わってきます。

## t検定
t値が大きいか小さいかを判定する時にt検定を行います。

手順は

1.　t値からp値を求める
2.　p値が0.05を下回るか判定

になります。
t値が大きければp値は小さくなり、一般的にp値が0.05を下回れば
t値は大きいと判定します。
またサンプルサイズが大きい方がp値が小さくなります。

## p値
「たまたまある事象が発生する確率」をp値と言います。
t検定におけるp値とは、本来差があるとは言えないデータ間で比較して
t値を計算した時、与えられたt値よりも大きな値が「たまたま」出てくる
確率のことです。

## 標準誤差
t値の計算にはサンプルサイズを考慮した標準偏差である標準誤差を使います。

```math
t値= \frac{期待値-0}{標準誤差}
```

標準誤差を式に表すと

```math
\sqrt{{\frac{\frac{1}{n-1} \sum_{i=1}^{n} (x_{i}-u)^2}{n}}} = {\frac{σ}{\sqrt{n}}} \\
```

となります。
nはサンプルサイズ、uは期待値、σは標準偏差を表します。
式を分解してみます。
不偏分散は以下の式になります。

```math
\frac{1}{n-1} \sum_{i=1}^{n} (x_{i}-u)^2 \\
```

サンプリングにより分散は過小評価される傾向があります。
不偏分散では分母を-1することで偏りを減らし、分散を大きくしています。

標準偏差は以下の式になります。

```math
\sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_{i}-u)^2} \\
```

分散はデータを二乗しているため、単位まで二乗になります。
そこで標準偏差は分散の平方根をとることで扱いやすくしています。

## Rによるt検定
例えばあるダイエット食品を被験者に与えてみることにします。
対象の翌月の体重の増減をt_data変数に入れ、t検定を行います。

```R
# テストデータの作成
> t_data = c(-1.2, -1.5, 0.9, 0.3, -1.6, -3.4, -2.2, 1.1, -3.9, -2.1, 3.1, -0.5, -0.2, -2.4, -3.1, -0.3, 1.2, -0.9, -1.4, -1.5)

# t検定
> t.test(t_data)

	One Sample t-test

data:  t_data
t = -2.5305, df = 19, p-value = 0.02038
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 -1.7905678 -0.1694322
sample estimates:
mean of x 
    -0.98
```

テストデータの期待値は-0.98です。
出力は「データの期待値が0と有意に異なっているか」を
t検定した結果となります。

95%信頼区間の範囲は-1.7905678から-0.1694322となります。

p値が0.05を下回っていて、t値が-2.53を「たまたま」下回る確率は
2%程度しかないとわかります。
つまり「データの期待値は有意に0と異なる」といえます。
データは帰無仮説を支持せず、ダイエット食品の効果はあると主張できます。

## プロット
なお、本来は検定を行う前にデータをプロットし視覚的に偏りを見てみることも
重要です。

```R
# ヒストグラム
> hist(x, right=FALSE, col="gray")

# ドット図 
> stripchart(x, pch=16, at=0, method="stack")

# 箱ひげ
> boxplot(x)
```

ヒストグラム
![t01_rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108941/cc988b22-891e-fcd4-64a1-822d4e788bf7.png)

ドット図
![t02_rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108941/6e8cf05c-8962-d99e-3e21-e5d017335082.png)

箱ひげ
![t03_rplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108941/f64f63a2-0cdc-65a4-42a0-5e87b01fe5b1.png)

## 両側検定と片側検定
違うということだけを検定する場合、両側検定を用います。
いずれの方が大きい、効果が上がったという程度も含めた
違いを検定する場合は片側検定を用います。
今回は両側検定を行いました。

## まとめ
平均の検定をする時に標本の数が2つ以下で標本の母分散が等しい場合は
t検定を使います。
今回は標本数が1つの場合だったので、1標本の平均の検定となります。
Vue.js 算出プロパティ概要

Vue.jsの算出プロパティについての学習記録。メソッドや監視プロパティとの使い分けなどをまとめる。

## 算出プロパティ(computed)

テンプレート内に多くのロジックを詰め込むと、コードが肥大化し、メンテナンスが難しくなる。この複雑なロジックに、 **算出プロパティ(`computed`)**を利用する。



以下の例では、算出プロパティ `reversedMessage` を宣言している。これは、プロパティ `vm.reversedMessage` に対する `getter` 関数として利用される。

```html
<div id="example">
  <p>Original message: "{{ message }}"</p>
  <p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
```

```javascript
var vm = new Vue({
  el: '#example',
  data: {
    message: 'Hello'
  },
  computed: {
    // 算出 getter 関数
    reversedMessage: function () {
      // `this` = vm インスタンス
      return this.message.split('').reverse().join('')
    }
  }
})
```

結果:

```
Original message: "Hello"
Computed reversed message: "olleH"
```

通常のプロパティと同様に、テンプレート内の算出プロパティにデータバインドすることもできる。`vm.reversedMessage`は`vm.message`に依存しているため、`vm.message`が更新された際、`vm.reversedMessage`に依存するすべてのバインディングが更新される。

### 算出setter関数

算出プロパティはデフォルトでは `getter` 関数のみだが、 `setter` 関数も利用できる。

以下の例では、`vm.fullName = 'John Doe'` を呼ぶと、`setter` 関数が呼び出され、`vm.firstName` と `vm.lastName` が更新される。

```js
// ...
data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
},
computed: {
  fullName: {
    // getter 関数
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter 関数
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}
// ...
```



## メソッド(methods)との使い分け
  

|                    | メソッド                               | 算出プロパティ                                       |
| ------------------ | -------------------------------------- | ---------------------------------------------------- |
| **実行タイミング** | 再描画の度に、常に実行される。           | リアクティブな依存関係が更新された場合に実行される。 |
| **使い所**         | 実行結果をキャッシングしたくない場合。 | コストの高い計算をキャシングし、負荷を下げたい場合。                   |



リアクティブな依存関係でない(標準ビルトインオプジェクトなどの)場合は、二度と更新が行われない。

```javascript
computed: {
  now: function () {
    return Date.now()
  }
}
```


## 監視プロパティ(watch)との使い分け

監視プロパティ`watch`も、Vueインスタンス上のデータの変更を監視し、反応させることができる。
以下に`watch`と`computed`で同様の処理を記述した例を示す。`watch`の方が、やや冗長な記述となる。


```html
<div id="demo">{{ fullName }}</div>
```

* `watch`を利用する場合

  ```js
  var vm = new Vue({
    el: '#demo',
    data: {
      firstName: 'Foo',
      lastName: 'Bar',
      fullName: 'Foo Bar'
    },
    watch: {
      firstName: function (val) {
        this.fullName = val + ' ' + this.lastName
      },
      lastName: function (val) {
        this.fullName = this.firstName + ' ' + val
      }
    }
  })
  ```

* `computed`を利用する場合

  ```js
  var vm = new Vue({
    el: '#demo',
    data: {
      firstName: 'Foo',
      lastName: 'Bar'
    },
    computed: {
      fullName: function () {
        return this.firstName + ' ' + this.lastName
      }
    }
  })
  ```


`watch`は、非同期処理( API のアクセス)の実行や、処理の実行頻度の制御、最終結果取得までの中間状態の保存のような、算出プロパティでは実現が難しい処理を実現する際に利用する。


## 参考文献

* [Vue.js 公式サイト](https://jp.vuejs.org/v2/guide/computed.html)
文字コードの違いはアプリケーションが吸収する

## 概要
先日、文字コードについて考えているとき、ふと以下のような疑問を持ちました。
>「バイト列は文字コードによって異なるはずなのに、コンピュータはどうやってそれを認識しているのだろう？」

私自身実力不足で、この疑問を持ちましたが、今回は勉強したことをまとめてみました。

## 結論
結論としては、我々が入力するプログラムの文字コードの違いは、コンパイラ等のアプリケーションによって一意のバイト列に変換されるため、**プログラムの文字コードはCPU等のハードウェアに影響を与えないということが言えます。**

### 本来の私の想定
![図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/34594c59-e1fd-03b6-90ce-427f09bc6de8.png)
### 実際の動き
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/bdb3ea8e-2286-6b8a-5538-6e4e9e9c9e85.png)
しかし、よく考えたら**もしアプリケーションが「本来の私の想定」の動きをしているなら、コンパイラはなにをしているんだという話になります。** 改めて私の勉強不足を痛感させられました。

## 実験してみた
### ⓪ 仮説
① あるJavaファイルを別々の場所に計2回保存する。保存の際、それぞれは別の文字コードで保存する。(同じソースだが、違う文字コードで保存されたものができる)
② ①で作成したファイルの差分をバイナリデータで比較すると、**別々の文字コードで保存しているため、差分が確認されるはず**
③ それぞれをclassファイルに変換する
④ それぞれのclassファイルの差分を比較すると、**差分は確認されないはず**

### ① 別々の文字コードで保存した、同じソースを用意する
[HelloWorld.java](https://introcs.cs.princeton.edu/java/11hello/HelloWorld.java.html)を参考に、以下のソースを用意します。

```java:HelloWorld.java
public class HelloWorld {

    public static void main(String[] args) {
        // Prints "Hello, World" to the terminal window.
        System.out.println("Hello, World");
    }

}
```
保存したらそれぞれのファイルの文字コードを確認します。
<img width="774" alt="WS000156.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/c523b1a8-369f-0949-4c7f-578ea04fdcd0.jpeg">
<img width="774" alt="WS000157.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/01cca04c-c9d1-ea7f-0857-b28c20dd731b.jpeg">
ソースは同じですが、文字コードが違っていることがわかります。
### ② ①の差分をとる
<img width="834" alt="WS000159.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/7cf5705a-c99d-1aea-b46a-a01983a1a94a.jpeg">
バイナリデータに差分があることがわかります。
### ③ それぞれをclassファイルにコンパイルする
```:UTF-16のほうをコンパイル
javac -encoding UTF-16 HelloWorld.java
```

```:UTF-8のほうをコンパイル
javac HelloWorld.java
```
### ④ classファイルの差分をとる
<img width="838" alt="WS000161.JPG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617357/cb1f611e-c4c4-51b9-c528-23d38d999da4.jpeg">
差分がない！

### 結果
ソースの文字コードの違いはコンパイラによって吸収され、一意のバイト列に変換されていることがわかりました。

上記の実験はJavaで行いましたが、実際はこの後classファイルがJVMによってマシン語に変換され、CPUがそれをプログラムとして実行するようです。ですので、今回の実験では**我々の入力するインプットの文字コードの違いはclassファイルにコンパイルされる段階でまとめられてしまうことがわかりました。**

参考：
[今さらだけど・・・Javaは2回「コンパイル」されているのを知らなかった！(><)](https://qiita.com/zd6ir7/items/20755a3d33480aa7a6c7)


## まとめ
本来「文字コードによってバイト列は異なるはずなのに、ハードウェアはそれをどう認識しているのだろう」という疑問をもったことから、上記で書いたことを調べてみました。しかし、この疑問も**コンパイラの役割をきちんと理解できていなかったからこそ湧いた疑問なのかもしれません。** あらためてアプリケーションの基本的な事項を勉強しておくことの大切さを実感しました。
PHP　Symfonyの導入！


##Composerを入れる

symfonyが動くディレクトリでターミナルを開いて下記を突っ込みます。

```terminal
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

追記　2020/05/05　16:51
このコマンドを使って入れると、brewの中にもcomposerが入ったりPCの中がごちゃごちゃになる印象です。解決方法はわからないです。


##symfonyを入れる


```terminal
curl -sS https://get.symfony.com/cli/installer | bash
```
上記を打ち終わると、下記のメッセージが出ます。

```terminal
Use it as a local file:
  /Users/xxxxxx/.symfony/bin/symfony

Or add the following line to your shell configuration file:
  export PATH="$HOME/.symfony/bin:$PATH"

Or install it globally on your system:
  mv /Users/xxxxxx/.symfony/bin/symfony /usr/local/bin/symfony

Then start a new shell and run 'symfony'
```

私は下記のやつを選びました。install it globally on your system:ですね。

```terminal
mv /Users/xxxxxx/.symfony/bin/symfony /usr/local/bin/symfony
```

さて、動くか試してみましょう！

```terminal
symfony
```

動いたら
好きなディレクトリに移動して

```terminal
symfony new project_name
```

とします。移動して、

```terminal
cd project_name
```
サーバーを起動します。

```terminal
symfony server:start
```

できた！おめでとうございます！

##おまけ
一度、ctrl + cでキルしてから、symfony serveで立ち上げると、httpsで起動できます。

```terminal
symfony serve
```



##参考
Installing & Setting up the Symfony Framework (Symfony Docs)
https://symfony.com/doc/current/setup.html

Composer
https://getcomposer.org/download/
システム運用の方式

# この記事の目的

継続的なサービス運用をする上でのシステム運用の各方式の概要

# コールドスタンバイ方式

構成や設定が同じサーバなどをあらかじめ用意しておいてバックアップとして用意しておく方式。電源は普段は切っておく。

# ホットスタンバイ方式

構成や設定が同じサーバなどをあらかじめ用意しておいてバックアップとして用意しておく方式。コールドスタンバイ方式と違って電源は普段からつけておくことですぐに切り替えられるようになっている。

# ヘルスチェック

異常がないかをチェックする仕組みのこと。

# ロードバランシング

ホットスタンバイをさらに多くのサーバでやるもので複数台同じ設定のものを用意し、アクセス量などで振り分ける。
【今日のアブストラクト】Neural Turing Machines【論文 DeepL 翻訳】

1 日 1 回 論文の Abstract を DeepL 翻訳の力を借りて読んでいきます.

この記事は自分用のメモみたいなものです.
ほぼ [DeepL](https://www.deepl.com/home) 翻訳でお送りします.
間違いがあれば指摘していだだけると嬉しいです.

翻訳元
[Neural Turing Machines](https://arxiv.org/abs/1410.5401)

# Abstract

### 訳文

我々は, 外部記憶資源と結合させることで, ニューラルネットワークの能力を拡張した. このニューラルネットワークはアテンションプロセスによって相互作用することができる. 組み合わせたシステムは, チューリングマシンやフォン・ノイマンのアーキテクチャに似ているが, エンドツーエンドで微分可能であり, 勾配降下法を用いて効率的に学習することができる. 予備的な結果は, ニューラルチューリングマシンが入力と出力の例からコピー, ソート, 連想想起などの単純なアルゴリズムを推論できることを示している.


### 原文

We extend the capabilities of neural networks by coupling them to external memory resources, which they can interact with by attentional processes. The combined system is analogous to a Turing Machine or Von Neumann architecture but is differentiable end-to-end, allowing it to be efficiently trained with gradient descent. Preliminary results demonstrate that Neural Turing Machines can infer simple algorithms such as copying, sorting, and associative recall from input and output examples.
VS Codeで自分がよく使うコマンドまとめてみた

#環境
・Mac
・VS Code
#コマンド
|コマンド　|実行結果  |
|---|---|
|⌘ + C  |選択位置のコピー  |
|⌘ + V  |ペースト  |
|⌘ + Z  |一つ前の状態に戻す  |
| (⌘+K)+(⌘+C) |選択位置をコメントアウト  |
|(⌘+K)+(⌘+U)  |選択位置のコメントを解除  |
|⌘ + S  |ファイルの保存  |
|⌘ + N |新規ファイル  |
|Option+Shift+↑ |行を上にコピー  |
|Option+Shift+↓ |行を下にコピー  |
|⌘+F  |検索  |
|⌘＋Shift+K |カーソル位置の行を削除  |


#まとめ
今後も追加予定です。
デプロイ後CSSで色をつけていたbackground画像が表示されない件

###環境
サーバサイド
ruby 2.5.7
rails 5.2.4
本番サーバ環境
AWS(EC2,RDS,EIP)

###エラー
topに置いている画像が出てこなかったためブラウザで検証。まさに画像がエラーになっておる。

```styleseet:エラーになっていた箇所.scss
background-image: linear-gradient(to top, rgba(170, 280, 200, 0.8) 0%, rgba(151, 217, 225, 0.7) 100%),image-url('top.jpg');
```
これを

background-image: **image-url('top.jpg'),**linear-gradient(to top, rgba(170, 280, 200, 0.8) 0%, rgba(151, 217, 225, 0.7) 100%);

こうすると画像は表示されるものの、色が表示されなくなる…
そのため、

```:ターミナル
$ cp app/assets/images/top.jpg public/assets/

rails再起動
$ kill $(cat tmp/pids/puma.pid)
$ rails s -e production
```
publicに該当画像をコピーして保存することで、色＋画像の表示が完了。:relaxed:

おしまい
今後作っていきたいもの

##自己紹介
現在新しく大学4年生になる学生です。2月頃までビジネス職で就活をしていました。
が、過去に抱いていた「誰もが夢を諦めないでいい環境を作りたい」
「人や物の秘めた可能性を諦めたくない」というぼんやりとした仰々しい夢を諦めきれず、
より多くの人に影響を与える仕事をしたいと自分の可能性だけを信じて
3月よりエンジニア職での就活に切り替えました。
深掘るとまだ理由はありますが、後に記したいと思います。

####開発環境
*AWS Cloud9*
####使用言語
*Ruby/Ruby on Rails*
*JavaScript(Vue.js)*

を軸に作っています。
プロトタイプを作り次第AWS,Dockerなどの
インフラ周りも学習し整え、UI/UXなどにもこだわった
より実務に近いSPAを制作したいと考えております。
とりあえず現在作っている・作っていきたいものとしては２つ程あります。

###1.「夢を語る場所」としてBucket List
(制作中2020/04/06~)
作ろうと思ったきっかけは、就活やSNSでのマウント合戦に疲れ、
将来仕事をする意味や楽しみを全く見出せなくなっていた時に
友達と実際にBucket Listを行ったことからでした。

忘れていた歌で有名になりたい、カッコいい大人になりたい
親孝行をしたい、旅行に行きたいなど大小様々な夢を語った時
将来的に叶えるために何をしないといけないのか、何がしたいのかが
明確になり、早く行動したくてたまらなくなったからです。

このワクワク感こそ自分を幸せにするための全ての原動力だったと
思い出し、少しでも同じ気持ちになれる人がいればと想いを込めて制作しています。

###2.出荷できない野菜達をマッチングサービスで救いたい
今年（2020年現在）は暖冬だったこともあり、白菜などの野菜が余りに余っていたそうです。
そうでなくても具体的数字を挙げると２００４年と古い情報ではあるものの
『(ちょっと形が悪かったりするだけで)キャベツやレタスなど 1 万 500 トンが
2005 年にはキャベツやダイコン、ハクサイなど 3 万 1200 トンが産地破棄されている』
とのこと。これは依然増え続けています。野菜大好き人間としては見逃せない…。
暖冬、DASH島の「０円食堂」などから廃棄野菜に可能性を感じ、
このサービスを夏までに作ろうと考えています。

###（仮）3.保健所の動物のマッチングサービス
保護犬や保護猫などを無責任に捨てる現状が映る映像を見て、
なんとかして自分も少しでも貢献して、動物の未来を守りたいと
考えています。
これに関しては正直既に出来上がっているサイトがあり、
マッチングサービスに関しては力不足であるものの、
何かしら貢献できるサービスを今後も継続して考えていきます。


##まとめ
私は身近なところから少しずつ課題を解決していくことで
「夢を諦めない社会」を実現していきたいと考えています。
ただその人をサポートするだけが課題解決ではなく
食事、動物などから元気をもらい次の日の活力になる場合もあります。

全てのものは繋がっているという考えのもと、
自分が解決できるかもしれないサービスを積極的に
作っていきたいと考えています。
Dockerを使った開発環境でページネーション機能を作る

# {dockerを使った開発環境でページネーション機能}


今回は有名なgem であるkaminariを使ってページネーション機能を実装する。

## 記事の対象者
・Dockerの環境構築が出来る方
・ページネーション機能を一から知りたい方

###ページネーション機能 とは？？
ページネーション機能とは、大量のデータをviewで表示する際に、全部表示するのではなくページごとに分けて表示する方法である。

## 開発環境
Rails 5.0.0.1
bootstrap 4.0.0
今回はbootstrapを導入し、Dockerの環境構築が済んでいる状態を想定する。



## デモ
###1. gemをインストール

Gemfile内に```gem 'kaminari'```と記述する。
その後以下のコマンドを実行する。

```
$ docker-compose build
$ docker-compose up -d
```


```$ docker-compose build```はgemのインストールやdockerのimageを実行するときに使う。
```$ docker-compose up -d```でコンテナを起動する。

###2. kaminariを使う準備を整える

・kaminariの設定ファイルを作成

```
$ docker-compose exec web bundle exec rails g kaminari:config
```


・kaminariのviewファイルを作成
※今回はBootstrapを使用する。

```
$ docker-compose exec web bundle exec rails g kaminari:views bootstrap4
```
このコマンドを実行するとbootstrap4のページネーションに合わせたデザインが自動で生成される。（便利...！）

###3. コントローラーを設定

kaminariをインストールしたことによりモデルのクラスな対して page メソッドが使用できるようになった。
ここでは掲示板サイトを作ることを目的として　```@board``` というインスタンス変数を使用すると仮定して、

コントローラーのindexアクション内で以下の記述をする。

```
  def index
    @boards = Board.page(params[:page])
  end
```
これにより引数に渡したページに表示するデータを取得できる。
デフォルトでは１ページにつき、25件のデータを取得する。

この時点では、page というパラメーターが渡されることはないため、常に1ページ目が表示される。
そのため、viewを追加して表示できるようにする。

###4. viewを作成する
　kaminariをインストールしたことにより、 pagenate　ヘルパーが使えるようになった。
よってこれを使って```index.html.erb```に以下の記述をする。

```
<%= paginate @boards %>
```
paginate の引数には一覧表示対象を渡す。

viewを確認してみると、
![スクリーンショット 2020-01-09 10.26.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/467829/6993823f-9ba1-4fd0-fad1-0357dd451ff0.png)


となって、ページネーション機能が完成！
【Unity初心者】超簡単！  UIを手前に表示させる方法 

#環境
Unity 2019.3.7f1

#方法
ヒエラルキー上で表示順を変更するだけ。
下にいくほど手前に表示される。

#座標からは調整できない
テキストなどのUIには、下図のようなRectTransformコンポーネントがあり、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/661136db-5cc6-1f76-420c-5fb7c44e98bc.png)





この値を調整することで座標を変えることができます。
カメラに近い方が手前に表示されそう～と思いますよね！？
**しかし!**
**UIの座標**と**表示順**はそれぞれ独立しており、
**座標をいくら変更しても表示順は変わりません！！**

最初、このことがわからなくてず～っと悩みました！


#具体例

以下2つを作成して適当に重ねる
・Text
・Image
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/e956c6cf-afc5-b951-2475-20b0c12cc0c0.png)
TextがImageの後ろに隠れています。
ヒエラルキー上でTextをImageより下に移動させてテキストを全部見えるようにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613985/21a5c068-8c36-d832-4310-ef01122b9143.png)
Textが見えるようになりました！

この表示順についての知識はゲームオブジェクトが同じ座標にあるときにも使えるので覚えておきましょう～。
macでheicを一括でjpgに変換するスクリプト

#はじめに
完全に個人的なメモ

こちらの記事を参考に、ループ化しただけ、忘れそうなのでここに記す。

HEICファイルをJPGファイルに変換する
https://qiita.com/1coin178/items/83098b1be474db3e8bda

#source

```shell:heic2jpeg.sh

echo $1
for f in `\find $1 -type f -name '*.heic'|sort`; do
    echo $f
    sips --setProperty format jpeg $f --out $f.jpg
done

```

こんな感じで呼び出す

```shell
./heic2jpeg.sh  {target folder}
```
SSHポートフォワーディングを使ったテレワークによるFPGA開発(セキュリティ改善)

[前回の記事](https://qiita.com/nahitafu/items/abe34659825722d7e9f0)でセキュリティについての指摘を受けたので、改善策を練ってみました。

# hw_serverへ転送することの脆弱性について

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/a16a1d39-192c-15af-4b03-029cb9b31f40.png)

まず、この方法だと、リモートサーバのIPアドレスと、ポート13121が開いているということがわかってしまうと、誰でも会社のhw_serverにそのまま接続できてしまうということです。

hw_serverは世間一般から見ればマイナーなプログラムで、これを対象に攻撃してくる人はいないでしょうが、おそらく未知の脆弱性をいっぱい持っているから、そんなポートが開いていないほうがよろしいだろうと。

まさにそのとおりだと思います。

# AWSはデフォルトの設定でいこう
そこで、AWSで借りたリモートサーバのポート13121はやっぱり閉じて、AWSはSSH(ポート22)だけを開けておくようにします。要するにデフォルトの設定のままです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/37f03d9e-3075-7914-655f-515b7ec64dea.png)

AWSのログインのための証明書は、会社と自宅の両方のPCで持っておきます。
（もしくはパスワードでログインできるようsshdの設定を変えます。セキュリティ警察の人からクレームが来そうですが(^^

# 自宅でもSSHのポートフォワードを設定
自宅のTeraTermでもSSH転送の設定を行い、ローカルの13121をリモートの13121に転送するようにします。
会社のTeraTermはリモートの13121をローカルの3121に転送するようにするのは前回と同じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/8f3d2ca4-a652-3c5d-7424-41c614f02d44.png)

自宅と会社でSSHポートフォワーディングの向きが逆になる点に注意してください。

このようにすることで、

 * 会社も自宅も、外部のサーバに通常のSSHをしているだけのように見える
 * 会社のNATやファイアーウォールの設定を変えなくても自宅や移動中のモバイルPCから入れるようになる
 * 証明書を持っていない人（あるいはSSHサーバのパスワードをしらない人）はこのトンネルに入れないのでセキュリティ的にもかなり強くなった

# 気になる速度は
XCZU2CGへの書き込みには約2~3秒だったので、体感速度的には低下していません。

ILA (Integrated Logic Analyzer)も問題なく動きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542455/f4b3bc8f-16bd-8ec5-bc82-6d4d360ad1ec.png)

これで安全快適に、テレワークによるFPGA開発ができますね。
PullRequest と Issue を自動で関連付ける(GitHub)

これまで手作業で Pull Request と Issue のマッピングを行っていて、それが面倒でした。
なので、それを自動化する GitHub Action を作ってみたという話です。

# リポジトリ
https://github.com/tkt-actions/add-issue-links

# できること

`feature/issue-2-xxxxxxx` のように Branch名に 関連付けたい Issue の番号を含めることで、 等で PR を作成すると、
<img width="935" alt="Screen Shot 2020-04-12 at 7.20.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/252342/492b3d58-aa89-7e1a-4edf-6729851f14e3.png">
Issue の頭にリンクが自動的に追加されます。

## 使い方

**.github/workflows/** のディレクトリに下記のようなファイルを追加、pushします。

```yml
# add-issue-link.yml
name: 'Add issue link'
on:
  pull_request:
    types: [opened]

jobs:
  issue-link:
    runs-on: ubuntu-latest
    steps:
      - uses: tkt-actions/add-issue-links@v1.0.0
        with:
          repo-token: "${{ secrets.GITHUB_TOKEN }}"
          branch-prefix: "issue-"
```

branch-prefix は自由に指定でき、 **{branch-prefix}{数字}** のような名前のブランチが含まれる Pull Request が作成された時に、この Action が起動します。

branch-prefix を "issue-" とした場合、 **issue-{数字}** 例えば issue-12 のような名前のブランチが該当します。
feature/issue-3_add-action のように他の文字列が含まれても大丈夫です。

# Pull Request のコメントにリンクを追加する Action
説明欄が勝手に編集されるのは気持ち悪い、みたいな方は、こちらを使ってみても良いかもしれないです。
ほぼ同じ仕組みで、こちらは説明欄の編集ではなく、コメントの追加が行われます。
(ほぼ同じというか、この Action を参考に作らせていただきましたm(_ _)m)

https://blog.kentarom.com/getting-started-github-actions/

(本文を編集するか、コメントで追加するか、オプションをつけようか検討中)
Microsoft Stream | 10分でわかる はじめての Microsoft Stream | 動画配信

関連記事は[**「Microsoft Teams の授業での活用」**](https://qiita.com/hisaho/items/12837a169bd6f1d90d5c)をご参照ください。

# はじめに
[**「Microsoft Teams | 10分でできる Microsoft Teams を使った授業 |  録画した動画の公開**」](https://qiita.com/drafts/83c72fd029720586a6a2)では、**Microsoft Stream** を使用して、授業の録画動画の公開の方法に関して解説しました。本記事では、**Microsoft Stream** に関して解説します。

# Microsoft Stream とは

**Microsoft Stream** は、組織内のユーザーが動画を安全にアップロード、視聴、共有できるエンタープライズ ビデオ サービスです。Office 365 のユーザー認証でも利用されている Azure Active Directory と連携して、コンテンツに対するアクセスコントロールを行っていますので、組織内のみのユーザーが閲覧できるクローズドな動画ストリーミングサービスを構築できます。

# Microsoft Stream を使うメリット
- **動画配信システムのオフロード:** LMSなどに組み込むことで動画配信をオフロードすることができます。
- **クローズドなストリーミング環境:** 
  組織内のみに提供できるクローズドなストリーミング環境を提供(動画を外部に一般公開する機能は実装されていません)
- **マルチデバイス対応:** 様々なデバイスで再生可能(使用可能なネットワーク帯域幅とサイズに基づいて、最適なビデオ再生品質を動的に選択し配信されます。→ **通信コスト削減にもなります。**)
- **Microsoft Teams との連携:** Teams会議で録画された動画は、Microsoft Streamに保存されます。Teams内にタブに Microsoft Stream を追加することもできます。

# 動画コンテンツの保存容量は
1テナントに対して固定で **500GB** の固定割り当てと **ユーザー数×0.5GB**の容量が割り当てられます。1万人いるテナントでは、**5.5TB**の記憶領域が割り当てられます。

# 保存領域を増やすことはできるのか
ストレージ領域だけを個別に購入することは可能です。詳しくは[**ここ**](https://docs.microsoft.com/ja-jp/stream/storage-add-on) をご確認ください。500GB あたり $100/月で追加できます。

# 対応している動画フォーマットは
- FLV (AAC コーデック付き) (flv)
- MXF (mxf)
- GXF (gxf)
- MPEG2-PS、MPEG2-TS、3GP (ts、3gpp、3GP、および、.mpg)
- Windows Media Video (WMV)/asf (.wmv, .asf)
- AVI (圧縮していない 8bit/10bit) (.avi)
- MP4 (. mp4,. m4v)/ismv (. ismv)
- Microsoft デジタルビデオレコーディング (dvr) (.dvr-ms)
- Matroska/WebM (mkv)
- WAVE/WAV (.wav)
- QuickTime (.mov)

# 音声ファイルはアップロードできますか(対応している音声フォーマット)
- AAC (AAC-LC、AAC、AAC-HEv2、最大 5.1)
- MPEG レイヤー2
- MP3 (MPEG-2 オーディオレイヤー 3)
- Windows Media オーディオ
- WAV/PCM
- FLAC
- Opus
- Vorbis
- AMR (適応多重レート) ※Non-suport
- AES (SMPTE 33 1M および302M、AES3-2003) ※Non-suport
- Dolby® E ※Non-suport
- Dolby® Digital (AC3) ※Non-suport
- Dolby®デジタルプラス (E-AC3) ※Non-suport

# スマートフォン用のアプリはありますか
- [iOS用](https://apps.apple.com/jp/app/microsoft-stream/id1401013624)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/7886070f-8fdb-ac30-aeb8-5166cc2e0bc8.png)

- [Android用](https://play.google.com/store/apps/details?id=com.microsoft.stream)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78535/eebe2483-49bc-7749-532b-089ac25da138.png)
VSCode で C# の実行環境を整える for Mac

VSCode でC#のコードを書こうとして少し詰まったのでメモ。

# 手順

## 結論

```sh
brew cask install dotnet-sdk

# 依存関係でダウンロードされる mono が重要そうなので、単体ダウンロードでも動くかも(未検証)
brew cask install visual-studio
```

## 詳しい手順

### C# の Extension をインストール
MarketPlace から C# のExtension をインストール。
すると、 `.NET Core` まわりのエラーが出る。

### .NET Core をインストール
brew で sdk をインストール。

```sh
brew cask install dotnet-sdk
```

VSCode に戻ると下記のようなエラーが変わっている。(PCの再起動が必要かも?)

```
# エラーの一部
Error: The reference assemblies for .NETFramework,Version=v4.7.1 were not found.
```

### mono のインストール
`.NETFramework` を入れれば良いのかとおもっていたが、Macにはないらしく、「どうすればええんや」状態になっていた。

調べると、mono(https://www.mono-project.com/) を入れると良いらしい。
mono はクロスプラットフォームで動く .NETFramework みたい。

ただ、それを知る前に VisualStudio を入れてみて、その依存関係で mono が自動的に入って解決した。

```sh
brew cask install visual-studio
```

依存関係で mono-mdk-for-visual-studio が入る。

なので、 mono を直接入れても動くはず。

これで、VSCode を開くとエラーが消えている。(PCの再起動が必要かも?)

### VSCode で C# を書く
ここまでやると、VSCode で C# を書いた時に intelicence が効くようになっているはず。
初心者によるプログラミング学習ログ 288日目

#100日チャレンジの288日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
288日目は、

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>288日目　1.5h<br>・xdデザインカンプからのサイト模写<a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a><a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアと繋がりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a></p>&mdash; ぱぺまぺ@webエンジニアを目指したい社畜 (@yudapinokio) <a href="https://twitter.com/yudapinokio/status/1249090398200270848?ref_src=twsrc%5Etfw">April 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>