OmniAICreator/Qiita-1.07M huggingface dataset:
【Android】adbのデモモードを使って、ステータスバーをキレイにする方法

Android端末では、ステータスバーからアプリの通知などが一目で確認でき、便利ですよね。

ただ、画面のスクリーンショットを見た際に、ステータスバーがゴチャゴチャしていると、微妙な気持ちになることもあります。

例えばこんなスクリーンショットがあった場合…
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/83906fd5-38a1-a2bd-0def-4163d66f0116.png" width=300 />
↑ 「なんかいっぱい通知来ているし、充電33％だからそろそろ充電したほうが良さそう」など…



そこでこの記事では、adbのデモモードを使って、ステータスバーをキレイにする方法をご紹介したいと思います。

[Demo Mode for the Android System UI](https://android.googlesource.com/platform/frameworks/base/+/master/packages/SystemUI/docs/demo_mode.md)

デモモードを使うと、↓のようにキレイにできます。

| Before | After |
|:-:|:-:|
|![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/2003cbd4-6d66-e911-1fda-ce5f300d688a.png)|![after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/cfeeb0d5-59c6-2550-b9d2-68d43c1c8509.png)|

# adbコマンド

まず、下記のコマンドでデモモードを有効にします。

```
$ adb shell settings put global sysui_demo_allowed 1
```

有効になった後、 `com.android.systemui.demo` のBroadcastで適宜オプションを指定し、ステータスバーの状態を変更させることが可能です。

```
// 時間表示を変更。この例では00:00で表示。
$ adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0000

// ネットワーク表示を変更。この例ではWi-Fiを表示。
$ adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4

// バッテリー表示を変更。この例では100％で表示。
$ adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false

// アプリの通知を変更。この例ではアプリの通知を非表示に設定。
$ adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
```

デモモードを終了するには下記コマンドを実行すると解除できます。

```
$ adb shell am broadcast -a com.android.systemui.demo -e command exit
```

実際に使う場合には、シェルにaliasや関数を作るのが良いかと思います。

```config.fish
function enterDemoMode
    adb shell settings put global sysui_demo_allowed 1
    adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0000
    adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4
    adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false
    adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
end

function exitDemoMode
    adb shell am broadcast -a com.android.systemui.demo -e command exit
end
```

# 使ってみる
実際にコマンドを実行した際の端末の様子です。
時間やバッテリーの表示が変わり、アプリの通知も消えていることがわかるかと思います。
![movie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/a306a38a-94f7-b85b-9200-b2c92f8265dc.gif)

これでステータスバーがキレイな状態でスクリーンショットを撮ることができますね:relaxed:
プログラミング日記

2021/02/03

今日はなかなか集中できたと思う！
やっとFacebookクローン入った〜〜
Twitter3日かかったから、これも3日間までに終わらせたい。

一人メンターさんでいっつも丁寧に教えてくれる人いるんだけど
どんだけ私がわからんくても嫌な顔せず教えてくれて
その人のおかげと言っても過言ではないくらい少しずつ理解できてるヽ(；▽；)
専属になってくれないかな。
まだまだ完璧に理解するには時間かかるやろうけどこのままもっと頑張ろう。

今日まとめたノート
まだ曖昧な部分あるけど少しずつ理解していこ。
https://www.evernote.com/shard/s542/sh/5dbc3fb5-ce7b-6c1a-6b91-6de1e20acb02/9d235f8f7f92c69928756a4197fabc3c

あとは、Amazonで購入したBoYataのパソコンスタンドめちゃくちゃよくて
テンション上がった。あるのとないの全然違う、、

というか日記といえどQiitにこんなポンコツ内容書いていいのか？
はてなブログとかに移行した方がいいのかな、、考えよ。
AtCoder 生活104日目

[前回](https://qiita.com/flandrescarlet237/items/b791cc998a6cf88223ec)

#104日目
今日はC問題2問とD問題を3問ときました。

|問題|難易度|自力で解けた|かかった時間|
|:-:|:-:|:-:|---|---|
|ABC109|C|◯|14分37秒|
|ABC116|C|◯|33分22秒|
|ABC190|D|✕|89分50秒|

##[ABC109_C](https://atcoder.jp/contests/abc109/tasks/abc109_c)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;

const int INF = 2e9;

int main(){
    int N,X;
    cin >> N >> X;
    vector<int> r(N);
    rep(i,N){
        int a;
        cin >> a;
        r[i] = abs(X - a);
    }
    int ans = gcd(r[0],r[1]);
    for(int i = 2;i<N;i++){
        ans = gcd(ans,r[i]);
    }
    cout << ans << endl;
}

```

解くのにかかった時間：14分37秒


##[ABC116_C](https://atcoder.jp/contests/abc116/tasks/abc116_c)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;

const int INF = 2e9;

int main(){
    int n;
    cin >> n;
    int ans = 0;
    int h = 0;
    rep(i,n) {
        int a;
        cin >> a;
        if(a==0)h= 0;
        else{
            if(a <= h){
                h = a;
                continue;
            }
            ans += a - h;
            h = max(h,a);
        }
    }
    cout << ans << endl;
}

```

解くのにかかった時間：33分22秒


##[ABC190_D](https://atcoder.jp/contests/abc190/tasks/abc190_d)

```c++

#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
using namespace std;
using ll = long long;
using pii = pair<int,int>;

const int INF = 2e9;

int main(){
    ll n;
    cin >> n;
    ll n2 = 2*n;
    int ans = 0;
    auto check = [&](ll l){
        ll tmp = n2/l - l + 1;
        if(abs(tmp)%2 == 0) ans++;
    };
    for(ll x = 1;x*x < n2;x++){
        if(n2%x) continue;
        ll y = n2/x;
        check(x);
        if(x != y)check(y);
    }
    cout << ans << endl;
}

```

解くのにかかった時間：89分50秒
感想：数学的発想ができなかった。


###最後に
久々にやったけど最近の灰色bit全探索やり始めてきて難易度が高くなってきた気がする。
railsチュートリアルでいきなり躓いた記録

railsを学習しようと思って早速railsチュートリアルを読んでみたけど１ページ目で躓く失態を犯してしまったためこれ以上被害者を出さないためにもメモしておきます。

ちなみにrailsチュートリアルではCloud9を用いてるけど自分はデスクトップにディレクトリを作成してrailsをインストールしました。

参考記事
https://qiita.com/yokota02210301/items/46f44af5787a1a492bd4
https://qiita.com/okohs/items/ced3c3de30af1035242d
https://qiita.com/techpit-jp/items/1bcd0f4106330b5b827c

###早速インストールしてみる

```
gem install rails -v 6.0.3
```

を実行してみるものの

```
ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied @ rb_sysopen - /Users/(ユーザー名)/.rbenv/versions/2.7.2/lib/ruby/gems/2.7.0/gems/rails-6.0.3/README.md

```

###解決方法

以下を実行

```
$ sudo chown -R (ユーザー名):staff /Users/(ユーザー名)/.rbenv
```
もう一度gem install rails -v 6.0.3してみると

```
Successfully installed rails-6.0.3
1 gem installed
```
いけました

```
＄ rails -v
Rails 6.0.3
```

###yarnのインストール

早速以下のコマンドを実行してみる

```
＄ npm install --global yarn
```
```
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
(略)
```
また躓いた。。。
こちらの問題に関しては以下の記事が大変参考になりました。
https://qiita.com/okohs/items/ced3c3de30af1035242d
こちらの記事の対策１を行った後でnpm install -g yarnしてみると

```
> yarn@1.22.10 preinstall /usr/local/lib/node_modules/yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)

/usr/local/bin/yarn -> /usr/local/lib/node_modules/yarn/bin/yarn.js
/usr/local/bin/yarnpkg -> /usr/local/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.22.10
added 1 package in 0.535s
```
yarn -vで確認

```
$ yarn -v
1.22.10
```

###gemのインストール

以下、アプリのトップディレクトリ上でコマンドを実行する。
(railsチュートリアルでいうhello_app上)

```
$ bundle install
```

すると

```
(略)
try passing them all to `bundle update`
```
bundle updateしてねということなので

```
$ bundle update
```
すると結構長めのプログラムが実行される

```
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 12.3.3 (was 13.0.3)
Installing rake 12.3.3 (was 13.0.3)
(略)
```


この状態でrails s してみるとPlease run rails webpacker:installという「webpackerインストールしてね」的なメッセージが出る

###webpackerのインストール

```
$ bundle exec rails webpacker:install

(略)
Webpacker successfully installed 🎉 🍰
```

これで再びrails s してみると

```

=> Booting Puma
=> Rails 6.0.3 application starting in development 
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.6 (ruby 2.7.2-p137), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000

```

127.0.0.1:3000にアクセスしてみると

![スクリーンショット 2021-02-03 22.30.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635864/bfecc7c1-35fd-603c-1997-8cb4f820b927.png)

無事にローカルでrailsを動かすことができました。
色々調べながら必要なツールをインストールする必要があって結構初心者殺しじゃないですかねこれ。。。笑

これからrailsの学習記録を投稿していこうと思います。
iphoneアプリ開発者になるために自分に課した課題と発信していくこと

# iphoneアプリ開発者になりたい！
という気持ちだけで、はじめた記事です。
以下のことを発信します。
たまたまみてくださった方への読みやすさを考慮する余裕なんて今はありません。
課題終了後、読みやすさを考えてリライトするかもしれません。

##自分に課したものは、、、「毎日やる」
### 1日目〜5日目
1日１個、しょーもなくていいからアプリを作る。作ったら発信する。それを５日間続ける。
**もし上記ができたら、次のステップへ進む。**

### 6日目〜10日目
1日２個、依然、しょーもないアプリを作る。作ったら発信する。それを５日間続ける。
きっとこの辺りで、身体が繰り返しやってきたことを覚えてくる。と思われる。
**ここまできたら次のステップへ進む**

### 11日目〜30日目
１日１個。自分にとって新しい機能を盛り込んだアプリを作る。作ったら発信する。それを20日続ける。

今日は2021年２月３日。
今日からスタートっしょ！

Qiitaの書きかたも勉強しなきゃ。
phpでの時間の扱い


phpで日付，時間を使ったので忘れないようにメモ

##概要
phpを日付を使用する際には，**DateTime**と**DateTimeImmutable**オブジェクトがある．
基本的には同様の振る舞いをするが，加算/減算する際には振る舞いが異なる．

* **DateTime**：オブジェクトそのものを変更する
* **DateTimeImmutable**：変更したオブジェクトを返す

![スクリーンショット 2021-02-10 22.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/514625/bf0e92b2-4f47-dbc5-2306-d33b644900f3.png)
日付処理で主にやりたいこと

1. 今の年月日取得
2. 日付型の演算（2種類）
3. 日付型から一部のみ取得（年など）(文字列を日付に変換)


### 1.日付型の取得
DateTimeオブジェクトの作成．引数を入れなければ現在に時刻から作成

```php5

$date_obj = new Date()
//DateTime Object
//(
//    [date] => 2021-02-03 13:20:16.977190
//    [timezone_type] => 3
//    [timezone] => UTC
//)

$date_obj2 = new DateTime('2020-01-01');
(
    [date] => 2020-01-01 00:00:00.000000
    [timezone_type] => 3
    [timezone] => UTC
)
```

### 2-1. 日付型の演算
modifyを噛ませる．（オブジェクトの中身が上書きされることに注意）

```php5
$date_obj->modify('+1 years');  // 2022-02-03
$date_obj->modify('+1 months'); // 2022-03-03
$date_obj->modify('+1 days');   // 2022-03-04

```
### 2-2. 日付型の演算
DateTimeImmutableオブジェクトの場合はDateInterval()，add()，sub()を使用する．（返り値がある）
日付同士の差については，DateTimeInterface::diff() を使用するが省略．

```php5
$date_obj = new DateTimeImmutable('2020-01-01');
// 加算，減算する間隔を定義
// P:Period, Y:year, M:month, D:day
$interval1 = new DateInterval('P1Y'); //1年
$interval2 = new DateInterval('P1M'); //1ヶ月
$interval3 = new DateInterval('P1D'); //1日

//加算add()，減算sub()を使用
$next_year = $date_obj->add($interval1);       //2021-01-01
$before_month = $date_obj->sub($interval2); //2019-12-01

```

### 日付型から一部のみ取得（年など）

```php
$date_obj->format('Y') //2022
$date_obj->format('M') //Mar
$date_obj->format('m') //03
$date_obj->format('d') //02
$date_obj->format('D') //Fri

```
### UNIXタイムスタンプの取得
UNIXタイムスタンプは，1970年1月1日午前0時0分0秒から形式的な経過秒数


```php5

$date_obj2->getTimestamp() //1577887268
```

## 参考
https://www.php.net/manual/ja/class.datetime.php
https://www.php.net/manual/ja/datetimeimmutable.add.php
https://www.php.net/manual/ja/class.dateinterval.php
5大装置、CPUの役割

# はじめに

基本情報技術者試験の学習中です。
今回はCPUを中心としたハードウェア間の関連性について、備忘録としてまとめます。

# コンピュータの5大装置
コンピュータは下記の5つのハードウェアで構成されています。

1. **制御装置**
プログラムの命令を解釈し、他の装置へ指示を出すことで
コンピュータ全体の動作を制御する。

1. **演算装置**
算術論理演算装置(ALU:Aritymetic and Logic Unit)とも呼ばれる。
プログラム内の命令に基づき、四則演算をはじめとする計算やデータの演算処理を行う。

1. **記憶装置**
**3-1 主記憶装置**
動作するために必要なプログラムやデータを一時的に記憶。
「作業台・作業場所」のイメージ。
【例】メモリ
※コンピュータ本体の電源を切ると、装置内の内容は消える<br>
**3-2 補助記憶装置**
プログラムやデータを長期的に保存。
【例】ハードディスク、CD-ROM等の光メディア
※コンピュータ本体の電源を切っても、内容は残る

1. **入力装置**
プログラムや外部からのデータをコンピュータに入力する。
【例】マウス、キーボード、スキャナなど

1. **出力装置**
コンピュータのデータ(処理結果)を出力する。
【例】
ディスプレイ：コンピュータの内部データを画面へ映し出すことで出力
プリンタ：コンピュータの内部データを紙へ印刷することで出力


# CPUとは
## CPU:Central Processing Unit
**「中央処理装置」**と呼ばれる部品で、コンピュータの中枢(脳みそ)に当たる部分です。
５大装置のうちの、制御と演算の2点の役割を持ちます。

メモリからデータを読み込むことで、ユーザーがアプリケーションソフトなどを通じて出した命令を解釈し、実行していきます。

## CPUを中心とした、データやプログラムの流れ

![.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/813419/8296a031-79a8-33ed-d976-2698179cddc1.png)

図の様に、**各装置への命令は制御装置から伝達**されます。
また、**データやプログラムはメモリを経由**して各装置へ流れていきます。

通常、プログラムは補助記憶装置に納められています。
CPUが直接やりとりするのはメモリであるため、実行時にはまず

①予めプログラムをメモリ上に読み込ませる
↓
②CPUがメモリ上から、命令を一つずつ取り出す

という流れを踏んでいます。
上記の①を**「プログラム内蔵方式(プログラム記憶方式)」**、
②を**「逐次制御方式」**と呼びます。

この2つの方式を利用したコンピュータを**「ノイマン型コンピュータ」**と呼び、
現在利用されているコンピュータのほとんどがこちらに当たります。




# 終わりに/感想

引っ越しでかなり時間が空いてしまいました…

CPUとメモリは運命共同体という訳でした。
プログラミングを中心に行って来ましたが、基本情報技術者試験の学習を通じ
コンピュータそのものについても理解を深めたいと思います。

初学者で拙い記事ですが、少しでもお役に立てると嬉しく思います。
最後まで読んでいただき、誠にありがとうございました。



## 参考文献・記事
[キタミ式イラストIT塾 基本情報技術者 令和2年/きたみりゅうじ 技術評論社
](https://www.amazon.co.jp/%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88IT%E5%A1%BE-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E4%BB%A4%E5%92%8C02%E5%B9%B4-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93-%E3%81%8D%E3%81%9F%E3%81%BF%E3%82%8A%E3%82%85%E3%81%86%E3%81%98/dp/4297110210)
[コンピュータの5大装置とCPUについて/KENスクールブログ](https://www.kenschool.jp/blog/?p=5572)
[プログラミング入門者向け：コンピュータの５大装置を解説](https://daeudaeu.com/devices/)
[IT用語辞典 e-Words/ノイマン型コンピュータ 【von Neumann architecture】 ストアードプログラム方式](https://e-words.jp/w/%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%E5%9E%8B%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF.html)
heroku環境でのSendGridが上手くいかない

<h2>はじめに</h2>
お疲れ様です。TaYです:open_hands:

現在phpでのECサイト作成が完了したため、外部公開用にherokuを利用しています。
DB構築なども済み、あとは注文後のメール送信で終わり！！なのですが。。。


**heroku環境ではmb_send_mailが使えない！！**


てなわけでSendGridを用いようと色々試行錯誤しました。

参考にさせていただいた記事はこちら↓
https://qiita.com/yukio_4192/items/71ce0839ae8899b07c35

<h2>原因</h2>
上記の手順通りやってみたんですが、そもそもSendGridの規約？が変わっていたので上手くいきません:sweat:

[SendGridの該当ページ](https://support.sendgrid.kke.co.jp/hc/ja/articles/900004682143--%E9%87%8D%E8%A6%81-API%E3%82%AD%E3%83%BC%E8%AA%8D%E8%A8%BC%E3%81%8A%E3%82%88%E3%81%B3%E4%BA%8C%E8%A6%81%E7%B4%A0%E8%AA%8D%E8%A8%BC%E3%81%8C%E5%BF%85%E9%A0%88%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99)

要するに認証方法変わったから各自対応してね〜って感じ。

これに関しては結構最近の話のためか対処方についての記事などもなく。。。

しばらく様子見することにしたいと思います。

では今日はこの辺で:wave:
面接での技術質問の反省②

#はじめに
[昨日の投稿](https://qiita.com/TerToEer_sho/items/92de60d90e5496d0b2e1)の続きです。

##ActiveRecodeによるSQL文
ActiveRecodeのallによってどのようなSQL文が生成されているか、ターミナルに表示されるログで確かめてみました。

```ruby
def show
  user = User.all
end
```
上記のように、コントローラーで記述されていたとすると…

```bash

SELECT `users`.* FROM `users`
```
こんな感じでSQL文が生成されていました。
`FROM`の後にあるテーブル名から、
`SELECT`の後にあるデータを取ってきた。
と読み取れます。
`*`は全てということ。
つまり、
<font color=red>「usersテーブルから、そのテーブルにある情報、
まるっとぜーんぶもってきたよ！」</font>
と、いうことです。

あ、そりゃ面接官のエンジニアも、質問したくなるわけだな…
とってくる情報に無駄が多すぎる！！
しかも、その理由を答えられなかったし…
勉強不足過ぎる。

テーブルにある全ての情報というと、
昨日のAmazonの例で言うと、
全ての商品の名前、写真、出品している店舗、値段、出品した日時、大きさ…
挙げたら、霧がないくらい…

そのページで扱わないなら、最小限でいいですよね。

##とりあえずの解決方法

話を戻すと、
ユーザー情報の名前だけが欲しい場合は、

```ruby
def show
  user = User.select(:name)
end
```
`all`ではなく、`select(:カラム名)`とすれば、いい！！！

##最後に
現場では、あまり`all`は使わないのかなぁ…
必要な情報だけとってくる方が、そりゃいいよな…
となると、Railsを通して、データベースを扱っている以上、
SQlの知識って、とっても大事なのでは！？
ちゃんと勉強して、せめて読めるようになろう！
SQLについて、触らず嫌いだったかもしれません。
Rsilsアプリケーション新規作成手順（忘備録）

#導入
Ruby on Rails での新規アプリケーションの製作手順をまとめたものです。

#開発環境
ruby '2.6.5'
rails '6.0.0'

#実装
```:ターミナル
% cd ~/projects
```
```:ターミナル
% rails _6.0.0_ new farm-chef -d mysql
```
```:ターミナル
% cd farm-chef
```
この段階でVSコードを開き、database.ymlのencoding: utf8に修正

次にデータベースを生成します。

```:ターミナル
% rails db:create
```

ここまでの作業をGitHubでプッシュ（first commit）します。

サーバーを起動してローカルホストアクセスし、以下の画面のようになっているか確認します。![スクリーンショット 2021-02-03 22.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/792954/4cc6dc5c-c0a3-d27a-6d39-4a25e096e4ab.png)

##コントローラー作成
コントローラーと一緒にindexのアクションも作ります。

```:ターミナル
% rails g controller posts index
```

次にルーティングを設定します。
この設定は、ローカルホストにアクセスした際、「Yay! You're on Rails!」の画面ではなくpostのindexに遷移するための設定です。

```ruby:routes.rb
root to:'posts#index'
```
設定により、以下の画面が表示されます。
![スクリーンショット 2021-02-03 22.57.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/792954/7657b27d-0b35-2241-0483-02e562d43cd7.png)

これでアプリケーションが正しく動作していることが確認できました。

次回はユーザー管理機能の実装を行います。
[Bootstrap4] 画像・サイジング

#画像
class: "image-fluid"
親要素に合わせてレスポンシブ対応

class: "img-thumbnail"
1pxのボーダーが付く

class: "rounded"
角が少し丸くなる

class: "rounded-circle"
画像全体が丸くなる

class: "rounded-lg"
ほんの少しだけ半径の大きい丸になる

class: "rounded-pill"
カプセル型の丸になる

#サイジング
class: "w-25"　　　　　　　　　　wは横幅、hにすると高さのサイズが変わる

class: "w-50"

class: "w-75"　　　　　　　　　　数字は%換算

class: "w-100"

class: "w-auto"　　　　　　　　　autoは自動算出した幅

`image`
class: "mw-100"　　　　　　　　画像の横幅が画面幅に追従（いつでも横幅ぴったし）

div class="container-fluid" style="height: 300px;"
　class: "mh-100"
/div　　　　　　　　　　　　　　　高さが親要素に追従
【2021年版】RaspberryPi4 + Ubuntu20.4 + SoftEther VPN Bridge 環境構築

# はじめに

- RaspberryPi4をSoftEther VPNの拠点間接続HUBとして構築する
- ここでは、Ubuntuのインストールと、SoftEther Bridgeインストールまでを記述する
- VPN HUBの設定はSoftEtherのGUIでカスケード接続するだけなので割愛（気が向いたら） 
- 有線接続のみを利用し、Wifiは利用しない

## Ubuntuのインストール

- 以下のURLからRasberry Pi Imagerをダウンロードしてインストール  
  https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#2-prepare-the-sd-card
- Rasberry Pi Imager を起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143127/f2c44ed9-5f5d-31f1-21b8-2d45fd685dde.png)
- [CHOOSE OS]をUBUNTU SERVER 20.04.1 LTS(RPI 3/4) 、[CHOOSE SD CARD]を消えていいSDカードを接続して[WRITE]を実行
- 完了したら、以下のファイルを自分の環境にあわせて修正  
  
[cloud init - Networking Config Version 2](https://cloudinit.readthedocs.io/en/latest/topics/network-config-format-v2.html#)

  ```text:network-config
# 修正例
version: 2
ethernets:
  eth0:
    dhcp4: false
    dhcp6: false
    addresses: [192.168.0.8/24, 172.30.0.119/24, 10.1.0.21/24]
    gateway4: 192.168.0.1
    nameservers:
      addresses: [8.8.8.8, 1.1.1.1, 8.8.4.4]
  ```

  [cloud init - Cloud config examples](https://cloudinit.readthedocs.io/en/latest/topics/examples.html)

  ```text:user-data
# 修正例
chpasswd:
  expire: true
  list:
  - hoge:hogepas123
system_info:
  default_user:
    name: hoge
# Enable password authentication with the SSH daemon
ssh_pwauth: false
ssh_authorized_keys:
- ssh-rsa AAAAB..... rsa-key-of-hoge
timezone: Asia/Tokyo
  ```

- SDカードをRasberryPi4にセットして起動
- SSHで設定したIPアドレスにアクセスできることを確認
- OSのインストール/apt update/apt upgradeが走っているので終わるまで待つ（だいぶ長い）
- ps aux | grep -i apt でaptがいなくなっていたら終わっていると思われるので作業を継続  
  終わっていないとapt installでwaitingとなり継続できない

## SoftEtherのインストール
- 以下のコマンドを実行する  

```shell
$ sudo apt install gcc make unzip
$ sudo apt install build-essential
$ sudo apt install libreadline-dev libssl-dev libncurses-dev libz-dev
$ wget http://jp.softether-download.com/files/softether/v4.34-9744-beta-2020.03.20-tree/Source_Code/softether-src-v4.34-9744-beta.zip
$ unzip softether-src-v4.34-9744-beta.zip
$ cd v4.34-9744/
$ vim src/Cedar/Server.c   # bool SiIsEnterpriseFunctionsRestrictedOnOpenSource(CEDAR *c) のreturn を false にする
$ chmod +x ./configure
$ vim Makefile   # 4箇所の -m64 オプションを削除
$ make
$ sudo make install
$ sudo vim /etc/systemd/system/vpnbridge.service # 修正内容は後述
$ sudo systemctl daemon-reload
$ sudo systemctl start vpnbridge
$ sudo systemctl enable vpnbridge
```

```text:vpnbridge.service
[Unit]
Description=SoftEther VPN Bridge
After=network.target network-online.target

[Service]
ExecStart=/usr/bin/vpnbridge start
ExecStop=/usr/bin/vpnbridge stop
Type=forking
RestartSec=4s

[Install]
WantedBy=multi-user.target
```
## SoftEtherの設定
- GUIで行いましょう。カスケードのブリッジ作成時に、うまく行かないときはマシンを再起動したら動くことがあります。

## 感謝・参考URL
- 以下の記事をみてSoftEtherの設定を行いました。ありがとうございます。  
  [Ubuntu 20.04 arm64bit on Raspberrypi 4にSoftetherを導入する](https://qiita.com/Shachihoko/items/543eea4c95153c719224)
【Git】commitを増やさずpushする方法

プロジェクトで、基本的に1PR１コミットというgitflowを運用しています。
普段は、1回のプルリクエストに対して何度も何度もcommitを繰り返していました。
が、それはあまりよろしくないみたいなので、コミットを増やさずにpushする方法をメモしておきます。


## これまで僕がやっていたpushするまでの流れ

```
$ git add .
```
これで変更を加えたファイルをインデックスに追加する。

```
$git commit -m "first-commit"
```
git commit -m でコミットメッセージをつける。

```
$git push origin feature/users
```
とか、いう感じでorigin（リモートリポジトリ）にfeature/usersブランチをpushする。
その後、GithubもしくはGitlabでPR（プルリクエスト）を作成し、レビュー依頼をする。

## 変更をしたとき、もしくは自分で気づいて修正をしたとき
これまではPRを作成し、だれかにコードレビューをしてもらった後や自分でコードを見返した時に細かなミスを見つけたときに変更を加えたらもう一度上の流れを繰り返して、新たなコミットメッセージとともにpushしていました。

でも、本来それはあまりよろしくない行為らしい。今更気づいた。

それで、じゃあそういう変更をしたときにどうするのか・・・・・・・・・・・・・・・・・・

```
$git add .
```
これは変わらない。変更を加えたファイルをインデックスに追加する。

そしてここからが重要！！！！！！！！

```
$git commit --amend --no-edit
```
こういうコミットのコマンドを打つ。これで、直前のコミットに変更を付け加えることができるらしい。ちなみに、amendは編集とかそういう感じの意味とのこと。さらには、--no-editはよくわからないが、エディターをたちあげずに済むらしい。詳しい方いたらおしえてください。

これで、直前のコミットに変更を加えたら

```
$git push origin feature/users -f
```
これで強制pushをする。

この流れがいいらしい。
Herokuへのデプロイができないエラー：Could not detect rake tasks の改善。

# 概要
こちらは前項の続きになります。
[Herokuへのデプロイができないエラー：Failed to install gems via Bundler. の改善。](https://qiita.com/Miyayan/items/fb71e39701e1b80bd09f)

ただ、別のエラーになりますので、「Could not detect rake tasks」と出た方は、こちら単独でもご参考にしていただければ幸いです。

使用環境
Ruby on Rails
Ruby 2.6.5
bundler (default2.2.3, 2.1.4)

# 経緯
Herokuへのデプロイ

```
% git push heroku master
```
を実施したところ下記のようなエラーが出ました。

```
 Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
```

# 仮説と試したこと

### $ bundle exec rake -Pの実施。
プロンプトがbashのものになっていますが、私の環境はzshですので、__**%**__です。
したがって、エラーの表記通り下記を試してみましたが、だめでした。

```
% bundle exec rake -P
```

##### またもbundlerがおかしい？？

# 解決方法

前項にてこのアプリにはHerokuに対応したbundler 2.1.4を導入しています。

```
% bundler -v
Bundler 2.1.4
```
一度アンインストールして再インストールを試みます。

```
% gem uninstall bundler
```
すると、下記のように弾かれました。

```
Gem bundler-2.2.3 cannot be uninstalled because it is a default gem
Remove executables:
	bundler

in addition to the gem? [Yn]  y
Removing bundler
Successfully uninstalled bundler-2.1.4
```
※in addition to the gem? [Yn]ではイエスを意味する「y」を打ち込んでます。

どうもbundler 2.2.3がデフォルト設定されており、アンインストールできるのは2.1.4だけのようでした。
ではこのデフォルト設定を解除して、2.1.4だけを使えるようにしたら、Herokuへのデプロイができるのではないでしょうか。

###### ①gemのパスを確認。

```
% gem environment
〜中略〜
 - INSTALLATION DIRECTORY: /Users/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
〜中略〜
```
###### ②上記パスまで、カレントディレクトリを移動

```
% cd /Users/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
% ls
〜中略〜		specifications
```
###### ③specificationsの中にdefaultがあることを確認。

```
% cd specifications
% ls
〜中略〜　　　　　default
```
###### ④defaultの削除

```
% rm -rf default
```
###### ⑤一度ホームディレクトリに戻り、gemのリストまでディレクトリ移動し、gem listを確認。

```
% cd /Users/ユーザー名/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
% gem list
```

ここでbundlerの確認をしますが、仮説の時点で一度bundler 2.1.4はアンインストールされています。
かつ、この⑤の手順でdefaultが削除されましたので、gem listのなかにbundlerの記述はないはずです。

###### ⑥デプロイしたいアプリケーションまでディレクトリ移動し、再度bundler 2.1.4をインストール

```
% gem install bundler -v 2.1.4
```
インストールに成功し、ここでgem listを確認すると

```
bundler (2.1.4)
```
しっかりdefault 2.2.3が消えている上に2.1.4が無事残っています。
###### ⑦念のために、一度bundle installします。

```
% bundle install
```

###### ⑧gitに一度プッシュした上で、Herokuへデプロイ！！！！！

```
% git push heroku master
〜中略〜
remote: Verifying deploy... done.
```

#####　無事通りました！！

# 考察
前項と続けて、どちらもbundlerに関するエラーでした。
特に、gemのなかでdefault設定のものがあると、解除するのに結構手間取ることがわかりました。
これ以降はgemのエラーでは手こずる事はないといいのですが・・・。


どなたかのご参考になれば幸いです。
ここまでご覧いただいた方、ありがとうございました。
GLSZM : Gray Level Size Zone Matrix

# Gray Level Size Zone Matrix

グレーレベルゾーンは、同じグレーレベルを共有する接続ボクセル領域の数として定義されます。
接続しているか否かの判断は、指定距離が1ピクセルの場合、ある中心ピクセルの8近傍（3Dでは26近傍）内にあるかどうかでBlobかどうかを判断します。
GLSZMは、元画像のうち、元画像が持つ画素値ごとに、その画素値を中心とした接続領域数を、接続領域のピクセル個数ごとにまとめた表です。

![GLSZM.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379410/3689ccfc-09d7-f994-fc18-a9d287b753d8.png)

# Reference
* https://en.wikipedia.org/wiki/Gray_level_size_zone_matrix
[ruby]クラスメソッドとインスタンスメソッドの違い

#初めに
クラスメソッドとインスタンスメソッドの違いがあいまいだったのでアウトプットさせてもらいます

#クラスメソッドとは
クラスから実行できるメソッドです
クラス内で　def self.メソッド名 end でクラスメソッドを定義

```ruby
class Muscle
  def self.muscle1
    puts "大胸筋が歩いてる"
  end
end

Muscle.muscle1

#実行結果　
大胸筋が歩いてる
```

Muscle.muscleでクラス内のメソッドを呼べるのを確認しました

メソッドを class << self 〜 end で囲むと、メソッド名の先頭に self. をつけない形でクラスメソッドを作ることもできます。

```ruby
class Muscle 
  class << self
    def muscle1
      puts "大胸筋が歩いてる"
    end

    def muscle2
      puts "大胸筋が走ってる"
    end
  end
end

Muscle.muscle1
Muscle.muscle2

#実行結果
 大胸筋が歩いてる
 大胸筋が走ってる
```

#インスタンス変数とは
インスタンスメソッドはインスタンスから実行できるメソッド
メソッドはクラス内で def メソッド名 〜 end で定義できる。
インスタンス.メソッド名で呼び出せる

```ruby
class Muscle 
    def muscle1
      puts "大胸筋が歩いてる"
    end 
end

muscle = Muscle.new
muscle.muscle1

#実行結果
大胸筋が歩いてる
```

muscle = Muscle.new で『Muscle』クラスからインスタンスを作成し、『muscle』変数に代入しています
次に muscle.muscle1 でインス
タンスからメソッドが呼び出せることが確認できました

#まとめ
クラスメソッドは、クラスから実行できる
インスタンスメソッドは、インスタンスから実行できる
クラスメソッドは、クラス内で def self.メソッド名 〜 end
インスタンスメソッドは、クラス内で def メソッド名 〜 end
【備忘録】Railsのインストールがエラーになってしまったら

プログラミング初心者ですが、
railsのターミナルへのインストールを実行してみました。
ちゃんとインストールできたかどうか
rails -vを実行して確認すると、
以下のようなエラーが表示されてしまいました・・・。

#エラーメッセージ
`Rails is not currently installed on this system. To get the latest version, simply type:`


    $ sudo gem install rails

`You can then rerun your "rails" command.`

#エラーが解消したコマンド
`% sudo gem install railties && rbenv rehash`
`% brew install rbenv ruby-build`
怠惰な人に贈る「M1 MacでOpenCV」

# ※注意
2021/03/11 現在、この方法で入れたopencvをimportするとPythonが落ちます。
今日遭遇したところで原因がわかっていないので解決するまではこの方法は使えません。

# TL;DR
```sh
$ brew install opencv
```

# 説明
Appleが発売したM1チップを載せたMac製品で `pip` を使って `opencv-python` を入れようとすると失敗します。Qiitaにある記事を色々と読み漁って見ると対策は「Dockerを使う」あるいは「condaを入れてビルドする」という内容ばかりです。「PreviewのDocker入れるのはちょっとな......」とか「condaで環境汚したくないな......」 という極めて怠惰な私は一人で勝手にゴネてました。

ところがよくよく見てみたらHomebrewの `opencv` Formula が入るっぽいので入れてみたら普通に使えたので、これが一番ラクです。環境を汚すことなく OpenCV が使えます。やったね。
iPhone 12 mini でノッチ部分（上部のくぼみ）が見切れてしまう問題の解消方法

#目次
1.　はじめに
2.　解消方法
3.　まとめ


#はじめに
iPhoneのノッチ部分とは、iPhoneの上にあるくぼみ部分のことです。
![スクリーンショット 2021-02-03 22.33.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/f41a96fd-770f-1503-9e1b-0ea3c99799ec.png)

Visualizerの古いバージョンでビルドをすると、
このくぼみに対応しておらずレイアウトが崩れてしまうことがあります。

レイアウトが崩れた例：
![きれてる.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/819b47b3-680e-6888-036a-4a472b07aeb4.jpeg)

くぼみ部分に入り込んで表示されており、
レイアウトが崩れていることがわかるかと思います。

#解消方法
iPhone 12 miniに対応するためには、
**Visualizerのバージョンをver8.4.122以上にバージョンアップする**ことで解消することができます。

バージョンアップの方法はこちらをご参照ください。
https://qiita.com/Kony_Team/items/9623c054c3f3b122621f

バージョンアップ後に、
ビルドを行うと以下の通り正しいレイアウトで表示されるようになります。
![きれてない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a2284c4e-d721-552a-40eb-b0b42a43a660.jpeg)

今回のように、新端末でレイアウトが崩れてしまう場合などは、
Visualizerのバージョンをアップグレードすることで解決することがありますので、
試してみてくださいね！

#まとめ
Konyでは新しくリリースされた端末や新しい技術に対応するよう、
定期的にバージョンアップ版をリリースしていますので、
今回のように新しいデバイスで不具合がある場合などは、
最新のバージョンがアップされていないかチェックしてみると良いですね:relaxed:

Visualizerリリース情報：https://basecamp.temenos.com/s/releasedetails
ある日、目が覚めたらMySQLが「Can't connect to MySQL server on '127.0.0.1'(10061)」になっていた時の備忘録

# localhost:3306で接続しようとしたけど無理ってなってました
何故いきなり。
あなた先月までは何事もなく元気に動いていたじゃない。
![こんなエラー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/0ec32f86-0cc2-dbbb-cffc-595676d4b9a0.png "今回はMySQLのWorkbenchから接続時に出たこんな感じのエラー")

# とりあえず状況把握
なんかのきっかけでファイアウォールの設定変わったちゃったのか？と思って念のために見に行く。
ちなみにOSはWindows10です。
![FireWall.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/ec55e81d-a140-b4c8-57e4-80777215a6cb.png "おるやんけ")
 
普通にあるやん。
 
ってことで、ここは悪くない。

PowerShellから下記をたたいて確認する。

```powershell:powershell
netstat -naop TCP | Select-String '(PID|:3306)'
```

**実行結果**
![何も出ない.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/ac5dde83-85fa-6ed7-0702-677b937416e3.png "おらんやんけ")

何も出ない………

そもそもサービスが起動してないらしいので、コントロールパネル>管理ツール>サービスからサービスを……

![サービスにない.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/bbb31585-30e8-ba6c-cf1c-1632a4d59758.png "MYSQLがサービスから家出してた。っていうかもしかしたら最初からいなかったのかもしれねぇ")

起動できない。

ていうかそもそもサービスがない。

# サービスに追加→サービス開始で解決
今回は5.6を使っていたので、コマンドプロンプトを管理者として実行して下記を実行。

```winbatch:管理者：コマンドプロンプト
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld" --install MYSQL56
```

実行後にサービス起動したかったので、下記も。

```winbatch:管理者：コマンドプロンプト
net start MYSQL56
```

実行結果
![サービスに追加して起動.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/72659797-ddbf-9195-204c-5222065240e9.png "実行結果")

サービス一覧へもちゃんと表示されます。
![ちゃんと出てきました.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241926/a0b42eba-2ac1-89a6-0667-80f6a8d3a4af.png "お帰りMYSQLサービスちゃん")

無事にWorkbenchからも起動できることを確認しました。
エラーログ追えていないので、どうしていきなり起動できなくなったのかはまだ不明ですが、調べてみると一定数同じことで悩んでる方がいたっぽいので、備忘がてらまとめさせていただきました。
プライベートサブネットにあるEC2に接続するときは踏み台サーバを使おう！

#はじめに

Sler歴3年、インフラ未経験の私がAWS CloudTechという動画学習サービスに参加し、
AWSエンジニアを目指すための備忘録となります:fire:

#環境

・Windows10

#構築してみた

第1弾はVPCというネットワークの箱を作って、そこにEC2サーバを2台立ててみました。
※構築するまでの手順は割愛させて頂きます。

![VPC構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1079008/716c5ec0-dcc3-31d4-4ecf-760a1c713fcf.png)


Public subnet側にあるEC2には問題なく接続完了、
そしてPrivate側にあるEC2に接続しようと思っても、なかなか接続できない。。


#原因
NATgatewayに付与したElasticIPアドレスにssh接続しようとしていました。笑

構成図を見ると、NATgatwayからPrivate subnet側にあるEC2に接続できそうなのですが、NATgatwayは**片方向のみ**つまりPrivate側のEC2→インターネット側の通信しか許可していないんです。


そのため一度Public subnet側にあるEC2に接続してから、Private側にあるEC2に接続します。
※この時のPublic subnet側にあるEC2を**踏み台サーバ**といいます。


#踏み台サーバ経由で接続してみた

1.Public subnet側にあるEC2にssh接続し、鍵ファイルをEC2に転送します。
　Teratermの場合、左上の「ファイル」「SSH SCP」で転送できます。（もちろんscpコマンドでもOK)

![2021-02-03 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1079008/4a7e461f-762b-5709-0768-5c8ee810f9f3.png)
![Teraterm.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1079008/98974e31-ec5e-ae48-aca6-5749b3787427.png)
鍵ファイルが転送できたことを確認できました！



2.鍵ファイルを用いて、sshコマンドで接続してみます。
![Teraterm2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1079008/db98828b-26da-78d7-0a6c-96d84e71f640.png)

うん？何やらエラーメッセージが。。:scream:
初心者にとって、エラーメッセージほど怖いものはありません。
確認したところ、ただの打ち間違いでした。「ec2user」→「ec2-user」


もう一度sshコマンドで接続してみます。
![Teraterm3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1079008/f3b7e3c1-94ed-2ddb-7302-482da48b94c5.png)

接続できました！！！
自分で立てたサーバに接続できただけでも一歩前進できた気がしますね:blush:

#最後に

作成したEC2やNatgatwayは忘れないうちに削除しちゃいましょう。
ElasticIPアドレスの解放も忘れずに。（解放されていないと課金対象になります。）


この記事はAWS初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
https://aws-cloud-tech.com

AWSってなに？っていうインフラ未経験の方（つまり私）から自分の知識を発散したい！という上級者の方まで
様々な方たちが交流できる場になっています:hugging:
興味がある方は、一緒にAWSを学んでいきましょう～～！
[生産性向上]エクセルの便利機能まとめ

新卒で１年ほどエンジニアをやって来ましたが、「プログラミングができる」ことよりも、「より早く（生産性高く）」「問題解決するための方法」を身につける方が圧倒的に大切だと感じています。
今回は自身が「生産性を高めるため」「問題解決するため」に役立った考え方・知識・スキルの一つである「エクセルの便利機能」についてまとめました。

#Excelのショートカットキー#
初心者レベルから全て記載しました。
良く使うもので忘れがちなものは太字にしています。

| キー① | キー② | キー③ | キー④ | できること |
| :---: | :---: | :---: | :---: | :---: |
| ctrl | a | |  | 全選択 |
| ctrl | c |  |  | コピー |
| ctrl | v |  |  | 貼り付け |
| ctrl | s |  |  | 保存 |
| ctrl | Shift | 矢印 |  | [アクティブセルと同じ列または行で空白以外の最後のセルまで選択範囲を拡張する](https://office-hack.com/excel/shortcutkey-row-column-selection/) |
| ctrl | [ |  |  | **アクティブセルを直接参照する数式を含むセルのみを選ぶ** |
| ctrl | delete |  |  | **行の末尾までテキストを削除する** |
| ctrl | n |  |  | 新しい空白のブックを作成する |
| F7 |  |  |  | **スペルチェック（校閲）** |
| F2 |  |  |  | セルの編集 |
| Tab |  |  |  | 右のセルに移動 |
| Shift | Tab |  |  | 左のセルに移動 |
| Shift | 矢印 |  |  | 選択範囲を1セルずつ上下左右に拡張する |
| ctrl | 9 |  |  | **選択した行を非表示** |
| ctrl | ０ |  |  | **選択した列を非表示** |
| ctrl | D |  |  | 文字を下にコピー |
| ctrl | R |  |  | 文字を右にコピー |
| ctrl | ; |  |  | 現在の日付を入力 |
| ctrl | : |  |  | **現在の時刻を入力** |
| Alt | H | B | A | 格子状に罫線を引く |
| Alt | H | B | E | **罫線を削除** |
| Alt | H | B | P | **上に罫線を引く** |
| Alt | H | B | O | **下に罫線を引く** |
| Alt | H | B | L | 左に罫線を引く |
| Alt | H | B | R | 右に罫線を引く |
| ctrl | Shift | & |  | **周囲に枠線をつける** |
| Alt | H | O | R | シート名の変更 |
| Alt | 数字 |  |  | クイックアクセスツールバーに設定した操作が可能。左から順に１２３・・・と対応している。 |
| ctrl | 5 |  |  | 取り消し線 |
|F4||||**直前の操作を繰り返す**|
|**Alt**|**↓**|||**縦列のセルデータを一覧から入力**|
|**Alt**|**Shift**|**+**|**=**|**合計を入力**|
|**Alt**|**↓**|  |  |**プルダウンを開く**|
|**Ctrl**|**PgUp**|  |  |**同じブックの前のシートを開く**|
|**Ctrl**|**PgDn**|  |  |**同じブックの次のシートを開く**|
もっとマスターしたい人はこちらをどうぞ
[246個のExcelショートカットキー一覧表（Windows版）PDF有](https://office-hack.com/excel/shortcutkey-list/)
↑定期的に更新されており、最新の情報が手に入りやすいです。

#Excelのクイックアクセスツールバー#
デフォルトでは「上書き保存」「元に戻る」「やり直し」がありますが、こちらも自由に設定可能です。
自身がよく使うものを設定することをお勧めします。

ちなみに自分はデフォルトのものに加え、以下のものを設定しています。
・「塗りつぶしの色」
・「フォントの色」
・「値の貼り付け」
・「シートの行を挿入」
・「シートの行を削除」
・「シートの列を挿入」
・「シートの列を削除」
・「罫線」
・「校閲」

また、こちらに設定したものは[Alt]+[数字]でショートカットキーで操作する事ができます。
クイックアクセスツールバーに設定したものの左から１２３・・・と採番されます。
これを覚えることで「よく使う操作」を「速く」実施できますね。

登録の仕方はこちらを参考にしてください。
https://office-hack.com/excel/quick-access-toolbar/

#最後に#
まだまだ今後追記予定です。
もっと便利な機能やショートカットがあれば教えてください〜！
ではまた！
Tronxy XY-2 titanの電源ファンを直す

XY-2、なぜかは分かりませんが、購入から半年経たずに、やたら電源のファンが唸るようになりました。

んじゃあ交換しようかとするんですが・・・

60mm×60mm 15mm厚　14V

という何とも中途半端なスペックです。
（PC用としては割と60mm角は多いものの、動作電圧が12Vが多く、DCDC付けたりと、ひと手間必要）


となると怪しげな中華製を個人輸入か・・・というところですが、秋月でちょうどいいのが売ってます。


https://akizukidenshi.com/catalog/g/gP-02438/

※定格は20Vですが、6Vから回り出すので、14Vでも動いてます。



壊れてメーカー保証もキレた・・・のなら、あくまでも自己責任で交換になりますが、選択肢としてはアリかと。
ROSの勉強　第5弾：アクションと定義

# #プログラミング ROS< アクションと定義 >

##はじめに
1つの参考書に沿って，ROS(Robot Operating System)を難なく扱えるようになることが目的である．改めて初めから学び，復習も兼ねながら学習を進めていくこととする．その第5弾として，アクションと定義を扱う．


##環境
#####仮想環境
|||
|:-:|:--|
|ソフト|VMware Workstation 15|
|実装RAM|2 GB|
|OS|Ubuntu 64 ビット|
|isoファイル|ubuntu-mate-20.04.1-desktop-amd64.iso|

#####コンピュータ
|||
|:-:|:--|
|デバイス|MSI|
|プロセッサ|Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz|
|実装RAM|8.00 GB (7.89 GB 使用可能)|
|OS|Windows (Windows 10 Home, バージョン：1909)|

#####ROS
|||
|:-:|:--|
|Distribution|noetic|
|プログラミング言語|Python 3.8.5|

##アクションとは？
サービスでは苦手な**時間のかかるゴール指向のタスクを実装するのに最も適した方法**．サービスが同期的であるのに対して**アクションは非同期的**である．アクションの中身は複数のトピックで構成されている．そのトピックには，ゴール，リザルト，フィードバックなどがある．以下にそれらのトピックのイメージを示す．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/5f691217-a7e4-d2b5-cbaf-b0a390f34639.png)
**フィードバックの役割**：
・ゴールに対する進歩状況の更新に使われる
・ゴールを取り消す仕組みも用意

##アクションの定義
アクション定義ファイル（.action）：
　　ゴール，リザルト，フィードバックのメッセージフォーマットをもつ．

ここでは，自作タイマー用のアクション定義ファイルを例とする．以下に示すのは，その定義ファイルである．
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/2b6b06cb-8087-a06e-328b-ba439164912b.png)

メッセージやサービス同様，package.xmlファイルとCMakeList.txtファイルの一部をアクション定義のために変更し，``catkin_make``を``~/catkin_ws``において，実行することで，アクション定義を完了させる．完了後，``rosmsgs list | grep Timer``として，定義されていることを確認する．そのときの様子を次に示す．
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951300/0d5ac6be-5b13-b649-6ff2-bbebfd69e0b6.png)
パッケージ名の後ろにいろいろな名前でアクションが作成されていることが分かる．これで，アクションの定義は完了である．

##感想
改めてしっかりとアクションについて学び，トピックの組み合わせと捉えられたことで，アクションの扱いづらそうなイメージを払拭できたと思う．次回は今回定義したアクションを利用することで，アクションの扱いへの理解をより深められることを期待する．

##参考文献
プログラミングROS Pythonによるロボットアプリケーション開発
　　　　　　　　Morgan Quigley, Brian Gerkey, William D.Smart 著
　　　　　　　　　　　　　　　　　　　　　　　河田　卓志　監訳
　　　　　　　　　　  　松田　晃一，福地　正樹，由谷　哲夫　訳
　　　　　　　　　　　　　　　　　　オイラリー・ジャパン　発行
matplotlibを使って複数の画像を表示させる自作関数

複数の画像をmatplotlibで表示させる関数です。備忘録として残します。

# ソースコード
```
import cv2
import matplotlib.pyplot as plt

def imgShow(imgList, row_num = 1):
    img_num = len(imgList)
    
    if img_num == 1:
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.imshow(imgList[0])
    
    else:
        fig, axes = plt.subplots(row_num, round(img_num / row_num))
        ax = axes.ravel()
        for i in range(img_num):
            ax[i].imshow(imgList[i])

    plt.show()
```

## コードの説明
imgShow関数の引数に画像のリストと表示させたい行数(初期値は1行)を入れます。
imgListはリストなので、1枚表示の際にも[img]とリストの形で入れます。

## 具体例
```
# 画像1枚を表示させる場合
img = cv2.imread('0_.png')
imgShow([img]) # n=1は省略
```
![test1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073157/aa823133-c48b-84b3-a172-66c045117de4.png)

```
# 画像2枚を表示させる場合
img = cv2.imread('0_.png')
img1 = cv2.imread('1_.png')
imgShow([img, img1])
```
![test1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073157/d8e5433b-91e4-e6d8-2954-ff4cd56443ba.png)

```
# 画像4枚を表示させる場合
img = cv2.imread('0_.png')
img1 = cv2.imread('1_.png')
img2 = cv2.imread('2_.png')
img3 = cv2.imread('3_.png')
imgShow([img, img1, img2, img3], 2) # 2行で表示させたいのでrow_num=2としている
```
![test3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073157/accba42f-033d-abd9-5cdc-90edbfb0d1b9.png)


今回初めて投稿しました。今後も自分が使っていて便利だと思う関数をちょくちょく投稿していきたいと思います。
Herokuへのデプロイができないエラー：Failed to install gems via Bundler. の改善。

# 概要
本記事はタイトルのエラーの改善にはつながりましたが、また別のエラーが発生しました。

後編【Herokuへのデプロイができない。Could not detect rake tasks
】へ続きます。

この２つの記事で、無事デプロイに至りましたので、記事としてまとめます。

使用環境
Ruby on Rails
Ruby　Ver.2.6.5
bundler default2.2.3

# 経緯

```
% git push heroku master
```

Herokuへのデプロイを試みたところ、下記のようなエラーで弾かれました。

```
Failed to install gems via Bundler.
```

# 仮説と試したこと

### bundlerがおかしい？
エラー記載の通り、GemfileとGemfile.lockを疑いました。
とりあえず
```
% bundle install
```
実行後、再度デプロイ！

結果はだめでした。改善せず。

# 解決方法
一度bundlerをアンインストールしてみて、再インストールを行いました。

```
% gem uninstall bundler
```
すると

```
Gem bundler-2.2.3 cannot be uninstalled because it is a default gem
```

と弾かれました。
どうやらbundler 2.2.3がデフォルト設定となっていたようです。

このアプリケーションにおいてはHerokuに適したバージョンにしたいので、

```
% gem install bundler -v 2.1.4
% bundle install
% bundler -v
Bundler version 2.1.4
```

とりあえずbundlerのバージョンが2.1.4にダウングレードされています。
GemfileやGemfile.lockの記述が変わっているのであれば、一度Gitにプッシュして、再度Herokuへのデプロイを行います。

```
% git push heroku master
```


結果、「Failed to install gems via Bundler.」は改善しました。


# その後・・・

処理が続いていき、ようやくデプロイできるかーと安堵した瞬間、奴は現れました。

```
 Could not detect rake tasks
remote:  !     ensure you can run `$ bundle exec rake -P` against your app
remote:  !     and using the production group of your Gemfile.
```

つづく
[Herokuへのデプロイができないエラー：Could not detect rake tasks の改善。](https://qiita.com/Miyayan/items/082ec4a449fef9564e62)
Salesforce Classic での Pardot を使用した対ビジネスマーケティングの自動化 ⇒ Pardot リードスコアリングと評価 (Salesforce Classic) ⇒ リード評価の自動化

１．リード評価のしきい値には何を指定する必要がありますか?
２．リード評価のしきい値を設定する目的は何ですか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634241/456e2f16-016f-10c5-1380-3443521d6e39.png)
【AWS】ソリューションアーキテクト – プロフェッショナル(SAP)合格記

#はじめに
AWS 認定ソリューションアーキテクト – プロフェッショナル(SAP)に合格した(2020-09-11)ので、合格までの道のりを残しておこうと思います。

CLF合格記は以下をご覧ください。
[【AWS】クラウドプラクティショナー(CLF)合格記](https://qiita.com/nnydtmg157/items/6c66a23d6b4c544cfcb2)
SAA合格記は以下をご覧ください。
[【AWS】ソリューションアーキテクト-アソシエイト(SAA)合格記](https://qiita.com/nnydtmg157/items/5705410a0b31f1d5a89d)
SOA合格記は以下をご覧ください。
[【AWS】SysOpsアドミニストレーター-アソシエイト(SOA)合格記](https://qiita.com/nnydtmg157/items/ba86af83ae400bbcb82b)
DVA合格記は以下をご覧ください。
[【AWS】Developer-アソシエイト(DVA)合格記](https://qiita.com/nnydtmg157/items/b75384e15c70d1bb6775)

SAPはDVAの合格後すぐに勉強を始めました。
AWS認定試験は範囲が被る部分が多いので、複数資格取得を目指すなら、継続して勉強することをおススメします。

SAPは特にSAA・SOAの上位資格となっていますが、DVAの範囲も若干出てきますので、デベロッパーの学習はしておいて損はないと思います。(そこまで深くはないので、サービスがわかっていれば十分です。)

#What's SAP?
まずは、SAP試験について
[AWS 認定ソリューションアーキテクト – プロフェッショナル](https://aws.amazon.com/jp/certification/certified-solutions-architect-professional/)

上記サイトによると、認定によって検証される能力は以下のようです。

* AWS で、動的なスケーラビリティ、高可用性、耐障害性、信頼性を備えたアプリケーションを設計し、デプロイする
* 提示された要件に基づくアプリケーションの設計とデプロイに適した AWS のサービスを選択する
* AWS で複雑な多層アプリケーションを移行する
* AWS でエンタープライズ規模のスケーラブルな運用を設計し、デプロイする
* コストコントロール戦略を導入する

また、2年以上の実践経験が推奨されていますが、未経験の私でも、何とか合格はできるので、じっくり学習を進めてください。
ただし、アソシエイトレベルからもう一段踏み込んだコストコントロール・要件把握が必要になりますので、その点は意識して対策していけば良いと思います。


#試験に向けて
基本的にはSAAと同じ手法をとっていきました。(研修への参加はしていません。)
問題⇒解説⇒BlackBelt⇒問題⇒・・・の流れは変わりません。
ただし、今まで以上にコスト効率などへの最適な構成を意識して学習しました。

###公式サンプル問題
これはCLFと変わらず事前に受けて現状のレベルの確認をします。
私は70％ほどの出来でした。

###ホワイトペーパーを読む
CLFと同じくホワイトペーパーを読みました。

###Black Beltを読む
こちらもCLFと同じくBlack Beltを読みました。

###問題を解く
[AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/)

こちらのサイトは一問ごとに解説が表示され、都度確認ができ、BlackBeltやホワイトペーパーへのリンクもあるので、勉強しやすかったです。

個人のハンズオンでは実践できる範囲が限られているので、机上での学習がメインになります。
問題文の構成図を素早くイメージして、最適解を導く訓練をしましょう。

#試験当日
上記対策を計2週間(延べ20時間程度)行い、試験に臨みました。

結果は、819点(720点以上で合格)で合格でした。


#感想
問題文が非常に長くなりますので、時間配分は注意してください。
まずは全部の問題を解ききって、見直しフラグなどで上手に見直すことが大切だと感じました。
試験時間も長いので、うまく集中力を切らさない工夫をしてください。
私の場合は、1.5時間で問題の7割解くイメージで試験に挑み、ここで一息つくことにしました。大切なのは焦った状態で問題に向き合わないことですので、ご自身に合ったものを上記サイトやUdemyなどの問題集で調整しておくと、安心して挑めると思います。

最後まで読んでいただきありがとうございます。
SPRESENSE ボードのバッテリー電圧を Ambient で監視する

Sony Spresense ボードでバッテリー電圧を取得する方法が分かったので共有します！

## LowPower ライブラリ

Spresense Arduino の `LowPower` ライブラリの中に `getVoltage()` 関数を見つけました。

```cpp:LowPower.h
/**
 * @class LowPowerClass
 * @brief This provides the features fo the power saving
 *
 */
class LowPowerClass
{
public:

  /**
   * @brief Get the sensed battery voltage on CXD5247
   * @return sensed voltage [mV]
   */
  int getVoltage(void);

};
```
使い方はこれだけです。単位ミリボルトの値が返ってきます。

```cpp
#include <LowPower.h>

  int mvolt = LowPower.getVoltage();

```

## 回路図

[ハードウェア設計資料](https://developer.sony.com/develop/spresense/docs/hw_design_ja.html) から Spresense メインボードの回路図をみると、
`VBAT_VS` すなわち `ACP_PWR` の電圧が取れるようです。
![VBAT_VS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432852/f7d0d83f-a5bc-74a7-287e-839f3fd6368a.png)

もう少し回路図を追っていくと、
① USB から電源供給するパスと、② Battery から供給するパスの 2 系統がありました。

- ① USB から電源供給する場合、`ACP_PWR` は LDO を介して常時 4V になります
- ② Battery 供給の場合は、そのままバッテリーの電圧値が読み取れそうです  
  Battery 供給とは [メインボードに対する外部電源の供給方法](https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_メインボードに対する外部電源の供給方法) に書いてある方法です

## 実験

220mAh程度の小型バッテリーをつないで、取得した電圧を定期的に [Ambient](https://ambidata.io) に送信します。

[LTE 拡張ボード](https://www.switch-science.com/catalog/5999/)を使って Ambient に送信してみた結果です。
![VBAT-LTE.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432852/0dc389cd-1807-4ea4-6cff-b3576d7324db.png)

[Wi-Fi add-onボード](https://www.switch-science.com/catalog/4042/)を使って Ambient に送信してみた結果です。
![VBAT-WiFI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432852/a94d7121-32e7-9d22-e751-16a9baae65a6.png)

iS110Bの[Wi-Fi add-onボード](https://idy-design.com/product/is110b.html)の結果はこちらです。
![WiFi-GS2200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/432852/eb6263df-56ac-a2aa-223d-3356336e66a8.png)


良い感じにバッテリーの電圧カーブが取れました。バッテリー接続でもちゃんと動作してそうです。



今回はLTEもWiFiも常時ONで通信しているケースなのでバッテリーの持ち時間は 5~7h程度でしたが、次回はそれぞれ省電力モードに入れてどれくらいバッテリーが持つのか確認してみようと思います。

## 参考

Ambient へ送信するライブラリはここにあるものを使わせて頂きました。
https://github.com/TE-YoshinoriOota/Ambient_SpresenseLTEM
https://github.com/tomorrow56/SPRESENSE_ESP8266
Reactでポートフォリオ作ってみた 報告編 - 作品はまだないけれど -

# はじめに
Reactを勉強し始めて、初めてサイトを作成したので公開してみました。
**Note**：技術的な解説はしてません。コメントがあれば、解説しようかな？と思います。解説が必要なものがあれば、[3. 使用した技術要素](#3-使用した技術要素)をベースにコメントください！


# 目次
[1. 成果物](#1. 成果物)
[2. プログラムソース](#2-プログラムソース)
[3. 使用した技術要素](#3-使用した技術要素)
[4. 所感](#4-所感)

## 1. 成果物
[WKAMUY.PAGES](https://wkamuy.github.io/portfolio/)

## 2. プログラムソース

[WKAMUY.PAGE's GitHub Repository](https://github.com/wkamuy/portfolio)

## 3. 使用した技術要素

* 言語：Typescript
* Javascriptライブラリ：React
* State管理：Redux
* ルーティング：React Router
* UIフレームワーク：Material-ui
* Github Pagesへのデプロイ：gh-pages

## 4. 所感
今まで、JQueryでガチャガチャしてたんですが、改めてReactに入門して、とても便利だなと思いました。ただやっぱり、初期学習コストがかかる印象。ある程度、勉強したら手を動かして悩みながら学ぶのが良さそうですね。まだまだ、追加したい機能がたくさんあるので、少しずつ更新します!!
Glassmorphism CSS Generator で簡単にすりガラス効果のあるCSSを作る

## Glassmorphism CSS Generator とは？
[ここ](https://glassmorphism.com/)

## 使用感
こんな感じにすりガラス効果のあるCSSを作れる
<p class="codepen" data-height="500" data-theme-id="dark" data-default-tab="css,result" data-user="noouchi" data-slug-hash="WNoQGda" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Glassmorphism Sample">
  <span>See the Pen <a href="https://codepen.io/noouchi/pen/WNoQGda">
  Glassmorphism Sample</a> by noouchi (<a href="https://codepen.io/noouchi">@noouchi</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

## 作り方
Glassmorphism CSS Generatorにアクセスするとおもむろに弄れそうな項目があるのでいじいじする

![スクリーンショット 2021-02-03 21.40.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246580/39baab6f-a9e9-7d88-a6a9-b1a173dfc7b7.png)

↓
![スクリーンショット 2021-02-03 21.42.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246580/18343f54-d8ab-5faa-5d65-0a8bfb1c3e35.png)

CSSも同期して生成されるのでよしなに使おう🎉
Rails アプリをHerokuにデプロイする方法

# 本記事の内容と目的
- 内容は、作成したアプリをHerokuにデプロイする方法と更新方法です。
- Herokuへのデプロイをスムーズにできるようにする事を目的とします。

# RailsアプリをHerokuにデプロイ
- まずはデプロイするアプリのディレクトリまで移動します。

```Linux
% cd ~/projects/"アプリ名"
```

- 次にターミナルのコマンド操作でHerokuにログインします。

```Linux
% heroku login --interactive

  => Email:
# メールアドレスを入力し、エンターキーを押す

  => Password:
# パスワードを入力して、エンターキーを押す
```

- 次にアプリをHerokuへデプロイする為に必要なGemをインストールします。
- アプリのGemfileにの末尾に下記のように記述しましょう。
- 下記Gemはrailsのバージョンが４以前でのみ必要があったようです。
- バージョン５以降は必要ないとのことでした、、、すみません。
- 詳しくは、Herokuの公式に記載があります。
- https://devcenter.heroku.com/articles/getting-started-with-rails6
- 以前のバージョンでは、Herokuのロギングを有効にする為に下記Gemを使われていたそうですが、Rails のバージョン５以降では必要ないそうです！

```Ruby
group :production do
  gem 'rails_12factor'
end
```

- 記述が終わったらターミナルでインストールを実行しましょう。
- 今回はMySQL2を使用する為、Herokuのデフォルト設定であるClearDBをアドオンしてから、MySQL２の環境を構築します。


```Linux
% bundle install

% git add .

% git commit -m "gem rails_12factorの追加"
#↑Gemのインストールとそれをマスターリポジトリに反映している。

% heroku create "アプリ名" 

% heroku addons:add cleardb
#↑MySQL2を構築する為、clearDBをアドオンする

% heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`
#↑ClearDBのURLを変数に格納する、MySQL２を構築する際に必要。

% heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}
#↑MySQL2の環境を構築する
```

- ここまでで、Heroku上でMySQL2の構築ができました。
- Herokuにアプリをデプロイする為に、アプリのMaster.keyをHeroku上にセットする必要があります。


##### ※アプリのMaster.keyとは：
- 外部に漏らしたくない情報を扱うファイルであるcredential.yml.encの対になるファイルで、credential.yml.encを復号して記述内容を確認することができます。
- デプロイする本番環境でもcredential.yml.encを使用できるようにするには、Master.keyを本番環境のHeroku上で設定する必要があります。
- Heroku上にMaster.keyを設定する際は、外部に漏れないように環境変数で設定します。

それでは早速Master.keyを設定していきましょう！

```Linux
% heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
#↑RailsのMaster.keyがconfigディレクトリ上にある為、catコマンドで読み取って、RAILS_MASTER_KEYという環境変数に格納しています。
```

- Master.keyを設定できたのでこれでデプロイができます。
- ターミナルの下記コマンドでデプロイしていきます。

```Linux
% git push heroku master
#↑Gitで管理しているリモートリポジトリをHerokuにデプロイします。

% heroku run rails db:migrate
#↑Heroku上で構築したデータベースにマイグレーションを実行します。

```

- これでデプロイは完了です！お疲れ様でした！！
こんどう　私が意識し続けている19の思考 　まとめ


##１、出来る出来ないではなく、「どのようにしたら出来るか」を一番に考える
##２、難しい事は簡単に、「簡単な事こそ難しく」考える
##３、人間的成長を常に考える
##４、チャンスとはチャレンジであり、「チェンジ」である
##５、常に前向きにポジティブに考える
##６、目的は自分の思いを実現させる事であって「自分で行うこと」ではない
##７、当たり前のことを「当たり前に出来る人間」になる
##８、人に優しく自分に厳しく
##９、身体の健康が一番の資産
##１０、創り上げたものが自己満足に終わっていないかを常に考える
##11、仕事は溜めない、後でするは「一生しない」こと
##１２、人の話は最後の最後まで聴く
##１３、自分の着用するモノには常に意識する
##１４、気に入られる人間ではなくて「信頼される人間」になる
##１５、物事を多面的に、表裏一体と考える
##１６、物事には原理原則があり、全てには理由があると考える
##１７、見るではなく「視る」、聞くではなく「聴く」を心がける
##１８、命令ではなく「使命」で動くようにする
##１９、自尊心は捨てて、「プライド」を持つようにする

---
##参考文献
私が意識し続けている19の思考 〜Twitterフォロワー５万人の爆速リーマンの思考とは？〜 Kindle版
ビルトイン関数(文字列を扱う関数)

文字列に関するビルトイン関数についてです。
strlen() 関数を使用することで文字列の文字数を得ることができます。

```php:main.php
<?php
$input = ' hoge_hoge  ';
echo strlen($input) . PHP_EOL;
```

```:ターミナル
~ $ php main.php
12
```
$input = ' hoge_hoge  ';が空白含め１２文字あることがわかります。
しかし、空白や改行を除去した文字数を得たい場合には trim() 関数を使えば、前後の空白や改行を除去することができます。

```php:main.php
<?php
$input = ' hoge_hoge  ';
$input = trim($input);

echo strlen($input) . PHP_EOL;
```

```:ターミナル
~ $ php main.php
9
```

次に文字列の検索を行います。
strpos() の関数を使用し、文字列の中に _ があるかどうか調べます。

```php:main.php
<?php
$input = ' hoge_hoge  ';
$input = trim($input);

echo strpos($input, '_') . PHP_EOL;
```

```:ターミナル
~ $ php main.php
4
```
最初に _ が見つかった位置を教えてくれますが、位置は０から始まりますので、出力は４文字目になります。

次に置換をしていきます。文字列の _ を - に置き換えます。
この時に使用するのが str_replace()を使用します。
str_replace('置換前', '置換後', どこの文字列か)という記述をします。

```php:main.php
$input = ' hoge_hoge  ';
$input = trim($input);

$input = str_replace('_', '-', $input);
echo $input . PHP_EOL;
```
```:ターミナル
~ $ php main.php
hoge-hoge
```

##文字列が日本語の場合は注意が必要

```php:main.php
<?php

$input = ' こんにちは  ';
$input = trim($input);

echo mb_strlen($input) . PHP_EOL;
echo mb_strpos($input, 'に') . PHP_EOL;

$input = str_replace('にち', 'ばん', $input); 
echo $input . PHP_EOL;
```
```:ターミナル
~ $ php main.php
5
2
こんばんは
```

strlen() や strpos() で日本語を扱うにはマルチバイトに対応した別の関数を使う必要があります。
mb_strlen(), mb_strpos() を使います。
【AWS】Developer-アソシエイト(DVA)合格記

#はじめに
AWS認定試験-Developer-アソシエイト(DVA)に合格した(2020-08-29)ので、合格までの道のりを残しておこうと思います。

CLF合格記は以下をご覧ください。
[【AWS】クラウドプラクティショナー(CLF)合格記](https://qiita.com/nnydtmg157/items/6c66a23d6b4c544cfcb2)
SAA合格記は以下をご覧ください。
[【AWS】ソリューションアーキテクト-アソシエイト(SAA)合格記](https://qiita.com/nnydtmg157/items/5705410a0b31f1d5a89d)
SOA合格記は以下をご覧ください。
[【AWS】SysOpsアドミニストレーター-アソシエイト(SOA)合格記](https://qiita.com/nnydtmg157/items/ba86af83ae400bbcb82b)

DVAはSOAの合格後すぐに勉強を始めました。
AWS認定試験は範囲が被る部分が多いので、複数資格取得を目指すなら、継続して勉強することをおススメします。

#What's DVA?
まずは、DVA試験について
[AWS 認定 デベロッパー – アソシエイト](https://aws.amazon.com/jp/certification/certified-developer-associate/)

上記サイトによると、認定によって検証される能力は以下のようです。

* AWS の主要なサービス、使用方法、AWS の基本アーキテクチャのベストプラクティスについて理解していること
* AWS を使用するクラウドベースのアプリケーションの開発、デプロイ、デバッグについて習熟していること

DVAはSAA、SOAよりも開発者向けのcodeシリーズなどが良く出題されたイメージがあります。(当たり前かもしれないですが。。。)
効率的に開発を進めるために、どのソリューションが最適かを把握することが大切です。


#試験に向けて
基本的にはSAAと同じ手法をとっていきました。(研修への参加はしていません。)

###公式サンプル問題
これはCLFと変わらず事前に受けて現状のレベルの確認をします。
私は50％ほどの出来でした。

###ホワイトペーパーを読む
CLFと同じくホワイトペーパーを読みました。

###Black Beltを読む
こちらもCLFと同じくBlack Beltを読みました。

###問題を解く
[AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/)

こちらのサイトは一問ごとに解説が表示され、都度確認ができ、BlackBeltやホワイトペーパーへのリンクもあるので、勉強しやすかったです。
また、問題⇒解説⇒BlackBelt⇒問題⇒・・・と繰り返すことで、必要な知識を定着させることができました。

#試験当日
上記対策を計2週間(延べ20時間程度)行い、試験に臨みました。

結果は、829点(720点以上で合格)で合格でした。


#感想
先ほども書いた通り、開発者向けの問題が多いです。
Codeシリーズの学習は必須です。
デプロイについても学習しておくことをおススメします。例えば、

* デプロイ前にレビューを入れるためにはどうすれば良いか
* デプロイの種類で最適なものは何か

などなど。

最後まで読んでいただきありがとうございます。