OmniAICreator/Qiita-1.07M huggingface dataset:
【初心者でもわかるDocker入門】Docker実践編（Dockerfileを書こう）

今回はDockerfileについて開設していきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/51447647-ed0b-69d5-6d50-f7fe0931d501.png)

## Dockerfileとは？

Dockerfileとは、ベースイメージに加える変更をコードとして記述したファイルです。このDockerfileを使うことで、簡単にオリジナルのDockerイメージを作成することができます。ちなみに、ベースイメージに加えた変更は、その数だけ新たなイメージを作り、重なっていく仕組みになっています。このイメージ１つ１つのことを「レイヤ」と呼び、Dockerイメージはこのレイヤ（変更イメージ）を重ねて、新たなイメージを作っていきます。そして、Dockerfileはこの「レイヤ」をコード化するための方法になります。


## Dockerfileのメリット

####・ 構築手順をコードとしてファイルに残せる
####・ 構築の修正が簡単
####・ 簡単に共有できる
####・ バージョン管理ができる

このように、インフラの構築をコード化して管理する考え方を「Infrastructure as Code」といいます。

## Dockerfileからイメージの作成&起動

このような構成で作っていきます。今回はすごく簡単にDockerfileからイメージを作成し、コンテナを起動するときにマウントしていきます。http://localhost:81/ にアクセスできるまでいきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/cc8e7333-17d0-2a94-28d4-b3fe283a9a6c.png)

### Dockerfileの作成

```php:index.php
<?php 
  phpinfo();
?>
```

```dockerfile:Dockerfile
FROM php:7.4.15-apache
```

### Dockerfileの内容でイメージをビルドする
＊ Dockerfileのあるディレクトリにて行うことが一般なので . としている
＊ PHPは名前

```
$ docker build -t php .
```
### コンテナの作成と起動

＊ -v (ホスト:コンテナ) とすることでマウントしている。
＊ -p ホストのポートとコンテナのポートに繋げている。

```
$ docker run -d --name phpcontainer -v [絶対パス（・・・/html）]:/var/www/html -p 81:80 php
```
コマンドを実行し、http://localhost:81/　 にアクセスすると下のように表示できれば完成です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/b3e52763-ff09-fa2d-8271-97394e8df426.png" width="50%">
Ruby on Rails でsilimをインストールする方法。基礎文法

Railsの標準テンプレートはERBです。
ERBは通常のHTML形式のファイルにRubyコードを埋め込むためのテンプレートエンジンです。
（HTMLとほぼ同じ見た目で、その中にRubyスクリプトを埋め込むことができる。）

RailsがサポートしているテンプレートエンジンはERBだけではなく、
「Slim」は、ERBよりも簡潔に書くことができるテンプレートエンジンです。

<h2>silimとは</h2>

<pre>
<cite>
Slim は 不可解にならない程度に view の構文を本質的な部品まで減らすことを目指したテンプレート言語です。
標準的な HTML テンプレートからどれだけのものを減らせるか、検証するところから始まりました。
(<, >, 閉じタグなど) 多くの人が Slim に興味を持ったことで, 機能的で柔軟な構文に成長しました。
</cite>
</pre>

viewのスクリプトをシンプルにすることができるテンプレートエンジンなので、
<ul>
<li>終了タグなどを使わないのでスクリプトがシンプル</li>
<li>高速・軽量</li>
</ul>

といったことがメリットとしてあげられると思います。

逆にデメリットとしては、
<ul>
<li>終了タグを使わなくていい分インデントが重要</li>
<li>慣れるまではややこしく感じる？</li>
</ul>

といったことが挙げられると思います。

何でも新しいことにTryする際には、慣れの期間が必要になってくるので、
多少ややこしく感じるのはしょうがないとしても、
インデントを活用することでマークアップする範囲を選択しているので最初のうちは注意が必要です。



<h2>slimをインストールする方法</h2>
Gemファイルに下記コマンドを追加
<pre>
gem "slim-rails　・・・①
gem "html2slim　　・・・②
</pre>

①「slim-rails」はslimのジェネレーターを提供
②「html2slim」はERB形式のファイルをSlim形式に変換

<pre>bundle install</pre>

bundle installすることでgemのインストールは完了

また、view ファイルの中に同じ名前のERBファイルとSlimファイルがある場合には
ERBファイルの方が優先して実行されるので削除しておきましょう。

<h3>ERBファイルをSlimファイルに変換</h3>
<pre>html2slim</pre>
application.html.erbなど元々存在しているファイルの中身を
ERB→Slim形式に変換するためにはgemをインストールするだけでは不十分で、

<pre>
# erbファイルを残して変換
erb2slim 変換するファイルがあるフォルダまたはファイル名

# erbを削除して変換
erb2slim 変換するファイルがあるフォルダまたはファイル名 -d

# erbファイルを残して変換
erb2slim app/views/layouts/application.html.erb
</pre>

ターミナル上でコマンド処理が必要になってきます。

<h2>slimの基本的な構文</h2>
<h3>htmlタグ</h3>
sliｍ形式でhtmlタグを使用する際には<>を使用する必要がないです。
＊使用することもできます。

```ruby:.slim形式
p 段落
a アンカー
img src="画像URL"
</code></pre>
```

```html:.html
<p>段落</p>
<a>アンカー</a>
<img src="画像URL" />
```


<h3>class,idの表記</h3>
クラスは「.」,
idは「＃」で記述することができます。


```ruby:.slim形式
p.title タイトル
p#title タイトル
```

```html:.html
<p class="title">タイトル</p>
<p id="title">タイトル</p>
```

<h3>テキストの書き方</h3>
テキストは「|」で定義します

```ruby:.slim形式
p
  | テスト
```

```html:.html
<p>テキスト</p>
```

スペースがなくタグのすぐ後ろに| を入れると、｜も文字として認識されます。

```ruby:.slim形式
p | テスト
```

```html:.html
<p>| テキスト</p>
```

文字列が長くなってもみやすくすることができます。

```ruby:.slim形式
p | 
    テストテストテストテストテストテストテストテストテスト
    テストテストテストテストテストテストテストテストテスト
```

```html:.html
<p>テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテスト</p>
```

文字列を改行したい時にはbrを使うことで実現することができます。

```ruby:.slim形式
p | 
    テストテストテストテストテストテストテストテスト<br>
    テストテストテストテストテストテストテストテスト<br>
```

```html:.html
<p>テストテストテストテストテストテストテストテスト<br>テストテストテストテストテストテストテストテストテストテスト<br></p>
```

```ruby:.slim形式
p 
  | テストテストテストテストテストテストテストテストテスト
  br
  | テストテストテストテストテストテストテストテストテスト
```


<h3>計算、変数の出力</h3>
変数の代入などの計算には　- ,
変数などを表示させたい時には = を使用します。

```ruby:.slim形式
- sum = 1 + 1
= sum
```

```html:.html
<% sum = 1 + 1 %>
<%= sum %>

```

<h3>コメントアウトの書き方</h3>
コメントアウトは /を記述します。
<pre>/p テキスト</pre>



<h2>参考サイト</h2>
https://pikawaka.com/rails/slim

https://github.com/slim-template/slim/blob/master/README.jp.md

https://qiita.com/ngron/items/c03e68642c2ab77e7283
【初心者でもわかるDocker入門】Docker実践編（NginxのDockerイメージを使ってWebサーバーを立てる）

今回は実際にDockerをより深く理解し、実際に操作してNginxのDockerイメージを使ってWebサーバーを立てるところまでやっていきたいと思います。

![docker.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/b3b0f5dd-c30c-7989-c61a-48249e597991.jpeg)

DockerのイメージはWeb上のDockerHubに公開されています。そこからDockerイメージを取得してくれば、既に必要なミドルウェアなどがインストールされた状態のDockerコンテナを起動でき、すぐに使用することができます。

## NginxのDockerイメージを使ってWebサーバーを立てる

<strong>１、nginxのイメージを取得</strong>

```
　　docker pull nginx
```

<strong>２、取得できているか確認</strong>

```
　docker images
```

<strong>３、コンテナの作成と起動</strong>

```
　　docker run --name some-nginx -d -p 8080:80 nginx
```

<strong>４、コンテナの稼働状況確認</strong>

```
　　docker ps
　　（-aをつけると停止中のコンテナも表示）
```
<strong>５、http://localhost:8080/ で確認する。以下の画面が出ればOK!</strong>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1295942/0d2a906c-6107-eb29-0b22-570d491c602c.png)


## コマンドの解説、その他コマンド

### docker runとは何か？

```
  run = create + start

* createはイメージからコンテナを作る
* startはデフォルトコマンドを実行する
```

#### コンテナを起動する

```
docker start <Container> 
```

#### コンテナの中に入ってコマンドを実行する

```
docker exec -it <Container> <Command>

* exec 起動中のコンテナに入ってコマンドを実行する
* -it コンテナ内で操作できるようにする
```

#### コンテナの停止

```
docker stop <Container>
```

#### コンテナの削除

```
docker rm <Container>
```

#### コンテナの全削除

```
docker system prune
```

#### イメージの削除

```
docker rmi <image>
```
AZ-900 Microsoft Learningセクション２の内容をまとめてみた

🌾個人の勉強のアウトプットとして投稿しているものです🌾
解釈が間違っている可能性があります。ご容赦ください。

### 今回勉強したラーニングパス
Micrtosoft Learning AZ-900ラーニングパス
Azure の基礎 第 2 部:Azure の主要サービスに関する説明
2 時間 40 分
Azure
管理者
初級

https://docs.microsoft.com/ja-jp/learn/modules/azure-compute-fundamentals/


## Azureコンピューティング

Azureコンピューティングとはクラウドでアプリを実行するためのサービスであり、例えばA VMやApp Service、関数アプリが挙げられる。



## Azure Virtual Machines

 Azureが提供するVMは、OSをまとめて制御したり、カスタムソフトウェアを実行したりする場合に使うと良い。

Iaasに当たるため、ソフトウェアの構成や、更新・保守の必要がある。

使用例として「不要になったら簡単に削除できる」、「オンプレ環境の一部を低コストで拡張できる（例えばSharePointのみAzureにする）」、「オンプレで障害が発生した場合の対処」が挙げられる。



## Azure App Service

AzureAppServiceを使うとインフラを意識せずに言語を選んでアプリをデプロイする事ができる。また、Gitリポジトリから自動デプロイが可能になる点がメリットである。

## Azure コンテナ

 VMが１つのOSしか使えないのに対してコンテナは複数のインスタンスを同時実行することが可能である。

Contaner Instanceでコンテナを作成し、Kubernetes Serviceで管理をする。



## Azure Functions

Azure Functionsを使うとサーバーレスで開発する事ができる。

タイマー（時間指定）、HTTPリクエスト、キュー、etcの事前に設定したタイミングでアプリを実行することが可能。使用時は、アプリに加えてトリガーとバインド、メタデータを含む関数を作る。コードが実行された回数・時間だけ課金されるため低コストでアプリを公開できる。

Azureが提供するサーバレスコンピューティングはAzure FunctionsとAzure Logic Appsの二つがある。後者はコードの記述をせずAzureが提供するサービスを組み合わせてロジックを作る。



## Windows Virtual DeskTop

Windows Virtual Desktopを使うと、インターネット経由でクラウドに公開されたWiondwsデスクトップにアクセスすることができる。例えば開発時の個人用Windows環境がAzureから提供できる。認証はAzure ADで管理される。負荷分散として、ユーザーのサインイン時に負荷分散をするか（幅モードという）、 コストを抑えた負荷分散（深さモードという）を設定できる。
深層学習「LSTM＋GRU]

#1. LSTMとは

LSTM（Long Short Term Memory ）とは、勾配消失問題が起こらない構造にしたRNNの一種である。
RNNは、多くの中間層を持つが、この層をLSTMブロックという、長期記憶と短期記憶を司るブロックに置き換えた構造を持つ。実際には、一つのメモリと、三つのゲートから成る。


**勾配消失問題**とは、逆伝搬するときに、出力側から入力側へ、勾配が上手く伝わらなくなること。
中間層が増えれば増えるほど微分値が増える。この際に、シグモイド関数の微分とかが入ると、微分値が0.25以下になり、連鎖律が広がるとどんどん値が小さくなっていく。

逆に、**勾配爆発問題**というのがある。これは逆に、勾配がどんどんどんどん大きくなってしまう状態である。例えば、恒等関数があると、発生する可能性がある。
これを防ぐには、**勾配クリッピング**をする。勾配のノルムが閾値を超えたら、勾配のノルムを閾値に正規化すること。


#2. LSTM全体像

![LSTM.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1436941/0ddac7e5-0a58-80f0-5a47-55b5d875a355.png)



#2.1. CEC

RNNの問題点：シグモイド関数の微分系が、RNNの中間層にあるため、時系列をさかのぼって微分していくと、勾配消失問題が起こる。

RNN問題点の解決策：RNNには、考える機能と記憶する機能が同じ中間層にある。このため、記憶させようと思えば思うほど学習が出来なくなっていた。そこでこの２つを分離して、過去の情報を記憶するためだけのCECというブロックを設ける。

数式的には

以下の式は、時間をさかのぼる前後の勾配の関係を示しているが、これが１よりすくなければ、勾配消失問題が起きる。１より大きければ勾配爆発問題がおきる。１なら何も起こらない。この１を実現するために導入されたものが、CECである。

~~~math
\delta^{t-z-1} =  \delta^{t-z} \left( W f' (u^{t-z-1} ) \right) = 1
~~~

~~~math
\frac{\partial E }{\partial c^{t-1}}
=
\frac{\partial E }{\partial c^{t}} \frac{\partial c^t }{\partial c^{t-1}}
=
\frac{\partial E }{\partial c^{t}} \frac{\partial  }{\partial c^{t-1}} (a^t - c^{t-1} )
=
\frac{\partial E }{\partial c^{t}} 

~~~


##2.2. CECの課題

CECは覚えるだけなので、学習が出来ない。つまりこれはもはやNNではない。
このため、CEC以外に学習する機能ブロック（入力ゲート、出力ゲート、忘却ゲート）が必要である。


##2.3. 入出力ゲート

CECに何を覚えさせるかと、どのように何を使うかを決めるブロックが、入力ゲート、出力ゲートである。

入力ゲートは、時刻tでの入力値と、時刻t-1での出力値を使って、今回の入力値をCECがどう使うかを決める。
出力ゲートは、時刻tでの入力値と、時刻t-1での出力値を使って、今回のCECのデータをどう使うかを決める。

#2.4. 忘却ゲート

問題：CECはずっと情報を貯め続ける。このため、過去の不要な情報によって、判断を誤る場合が出てくる。しかし、覚えるだけなので、過去の情報が削除されない。

解決策：不要な情報を忘れる機能を入れる（忘却ゲート）。今回の入力、前回の出力から、不要な情報を決める。


※出力ゲートでも対応出来そうだが、出力ゲートは、あくまで何をどれだけ使うかだけを決める機能。不要な情報があると、使われる可能性が残る。

#2.5. 覗き穴結合

上記の入力ゲート、出力ゲート、忘却ゲートは、前回の出力と今回の入力を、CECを制御するための判断材料として使っていた。
そして、どうせならCEC自体の情報も、その判断材料の一つに加えてやろうと考える事が出来る。そして、これを実現する仕組みが覗き穴結合である。

覗き穴結合は、CEC自体に重みを掛けて、各ゲートに情報を入力する。しかし、これの効果は大したことはない。


#3. GRU

LSTMは、かなり効果があり有名になったが、その複雑な構造に基づくパラメータ数が多く、計算負荷が高かった。これを改善するのがGRU（Gated Recurrent Unit）である。GRUのほうが、LSTMより計算量が少ない。

![GRU.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1436941/db7465dd-fdf9-a5f4-687c-442d75e7bff8.png)



# 参考

https://github.com/Yagami360/MachineLearning_Exercises_Python_TensorFlow/blob/master/RNN_LSTM_TensorFlow/README.md

https://qiita.com/t_Signull/items/21b82be280b46f467d1b
備忘録)MySQLのlocalhostに接続できないときの対処法の例

# 注釈
　この記事は初投稿であることと共に、自分自身の備忘録として書いているため、他の素晴らしい記事と同じ視点で見ると非常に見苦しいものとなっていると思いますが、ご了承ください。

# MySQLでのエラーコード
　MySQL を使って表の定義文の確認をしており、一度シャットダウンした後に、使用しようとしたところ、以下のようなエラーコードが表示されました。

```
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:***' (***)
```

ローカルホスト上で MySQL サーバが接続できないとエラーを吐いています。

# 試したこと
以下のサイトを参考にしていたので

https://www.dbonline.jp/mysql/#section_connect

そのサイトの
`1.MySQLインストール` に含まれる `・MySQLをWindowsサービスに登録する` からやり直しました。

# 結論
　Windows のサービスとして登録し、管理者コマンドプロンプトにおいて一度は

```
NET START MYSQL80
```

というコマンドを入力して実行したはずなのですが、どういうわけかサービスが停止していました。

そのため、管理者コマンドプロンプトにおいて以下のコマンドを入力すると、

```
C:\WINDOWS\system32>NET START MYSQL80
The MySQL80 service is starting.
The MySQL80 service was started successfully.
```

このようにサービスが実行され、さらに

```
mysql -u root -p
```

と入力し、インストールした際に設定したパスワードを入力すると、


```
C:\Users\USERNAME>mysql -u root -p
Enter password: *
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 
Server version: 8.0.25 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

```

見事MySQLを起動させることができました。
40代おっさんRDSを勉強してみた


## 本記事について

本記事はAWS初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

## RDSとは

マネージド型データベースサービスのこと
EC2にデータベースの高度な機能がついたもの

マネージド型の意味がわからん・・・

ではではマネージドを理解するため下を理解します。

## クラウドのサービスモデルについて

下の図を見てください
![RDS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/9e7770b7-99de-4aba-cf1a-0a936674ba94.png)

上の図で青色のところは自分で管理しないといけないもの
　　　　オレンジ色は管理しなくてよい物（AWSが提供しているものです）

IaaSはOSから上を管理なくてはならないAWSでのEC2が該当する。
PaaSはこれがRDSのモデル。
SaaSはクラウドウォッチ、S3が該当。

PaaSは上の図を見る通り、データとアプリケーションだけを用意する方になっています。
つまりRDSはデータとアプリケーション以外はAWSがマネージド（管理）してくれていると言うことになります。

自分は初学者のため、今までがわからないため、これがどれだけ楽なことかわかりませんが、これがないと自分で管理することはかなり大変みたいです！！

## RDSの機能一覧

### RDS対応エンジン

Aurora（Amazonオリジナル）
PostgreSQL
MySQL
ORACLE
SQL Server
MariaDB

### エンドポイント通信

名前解決で通信できる
障害時など自動で解決できる

### リードレプリカ

参照用と更新用をわけて運用できる
負荷分散ができる

### 自動スナップショット

バックアップの仕組みです

### 自動パッチ

セキュリティのパッチを自動で当ててくれる

### パラメーター設定

GUIで細かい設定ができる

※こちらを従量課金で使用した分で支払うことができることがメリットみたいです。

## Master-Slave構成について

![RDSEC2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/5eb35d3f-b68d-8cbf-bd66-fa667bbcaead.png)

このようにRDSを使わずにEC2に自前でMySQLを構成することも可能なのですがこれだと、もしMySQLがあるEC2に障害が発生したらサービスが停止することになります。（単一障害点）
また冗長化構成もできますが、それだと手間がかかるため、RDSを使用すると良いみたいです。

![RDSEC2Master.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/e527a21c-16ff-8af3-07f8-793695c4278c.png)



上がRDSを使用したMaster-Slave構成になります。
これがなぜ良いかと言うと、Masterが障害が起こった場合、Slaveに切り替わるみたいです。
なぜこのようなことができるかと言うと、最初はエンドポイントとMasterのIPアドレスが紐づいており、Masterの異常を検知したら、自動でエンドポイントのIPアドレスをSlaveのIPアドレスと紐づける仕組みになっています。

## リードレプリカについて

![RDSEC2リードレプリカ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641940/190057a6-99c7-60f5-f84b-3989da120c50.png)


こちらは更新用と参照用にわけて負荷分散するための構成です。
これもRDSだと手軽にできるみたいです
正直、自分は初学者のため、あまりお得感がわからないのですが、本番ではこのように構成していることがあると理解できました。

## 最後に

ふ～～
なんとかRDSがわかった気になりました＞＜
でも、たぶん色々自分で手を動かして、作って見ないと理解がしっかりできないと思います。
今後も精進、がんばるぞ～～

またこの記事は AWS 初学者を導く体系的な動画学習サービス「AWS CloudTech」の課題カリキュラムで作成しました。
<https://aws-cloud-tech.com/>
Class '~~~' has no 'objects' member pylint(no-member)との闘い

大学の課題のシステム開発を行なっていたところ「Class '~~~' has no 'objects' memberpylint(no-member)」というエラーに直面してしまいました．
早速解決法をググってみて以下の通りに手を動かしてみます．
まずターミナルで

```
pip install pylint-django
```
を行い，pylintをインストールします．
その次にVScodeの設定ファイルを開き，（Win: Ctrl+, / Mac: Command+,）、以下の設定値を追加すると良いと書かれていたので素直に追加しました．

```setting.json
"python.linting.pylintArgs": [
    "--load-plugins=pylint_django",
]
```
これで解決、と思いきやDjangoプロジェクト内で大量のエラーが発生してしまいました．
その後解決法がなかなか見つからず、ググり続けていった結果、ある一つの解決法が目にとまりました．
それが，setting.jsonに書いた上記の内容の代わりに下記を追加するという方法です．
こちらでエラーがうまく解消できました。

```setting.json
 "python.linting.pylintArgs": [
        "...<other_settings>...",
        "--load-plugins",
        "pylint_django",
        "--django-settings-module",
        "<your_app>.settings",
 ]
```
応用情報技術者試験 合格体験記 【1ヶ月攻略】

令和3年度春期応用情報技出者試験を受検し、無事合格しましたので、合格までの経緯を共有させていただきます。

まずは受検当時の私について。

- WEB系自社開発企業開発職, 新卒1年目（入社1ヶ月目）
- 学位：学士（経済学）
- 情報系資格：基本情報技術者
- 開発経験：学生時代にベンチャー企業でインターンシップを半年間（フロントエンドの開発に従事）

まとまった時間勉強できるのは学生のうちだけだよなあということで、同年1月に基本情報技術者を取得した流れ（ノリ）で応用情報技術者試験も受けちゃおうということで勉強を開始しました。

基本情報技術者試験合格直後、試しに応用技術者試験の午前問題を解いており、午前試験については合格水準に達するのにさして時間はかからないだろうということは予め想定していました。

したがって、**午後問題の演習を中心とした1ヶ月間の準備期間を設け、試験に臨むこととしました**。

# 学習フロー

`情報収集`

基本情報技術者試験の経験から、やはり午後問題がキモになるだとうと予想していましたので、まずは午後問題の出題のされ方を体感してきました。

[応用情報技術者試験ドットコム](https://www.ap-siken.com/apkakomon.php)の午後問題を１年分を眺め、場合によっては解いてみて、**午後問題の特徴を把握**することに努めました。

これによって、分野によって全く歯が立たない問題から目処が立ちそうな問題までいろいろあるんだなと感じました。加えて、応用情報技術者試験の午後問題はある程度分野の選択の自由度が高いということもあり、どの問題を中心に鍛錬していくかを決めることにしました。

Google Booksのプレビュー機能で[情報処理教科書出るとこだけ!応用情報技術者[午後]](https://www.shoeisha.co.jp/book/detail/9784798160580)という書籍を拝見し、**応用情報技術者試験の午後問題の出題傾向や頻出テーマを一通り把握し**、今後の学習方針をある程度固めました。


`インプット`

学習方針がある程度定まったということで、インプット作業に移りました。

使用した書籍は以下です。

- [令和03年【春期】【秋期】 応用情報技術者 合格教本](https://gihyo.jp/book/2020/978-4-297-11799-3)

午後問題で選択する予定の分野を重点的に、すべての章を一読しました。アウトプットの都度、必要に応じてこちらの書籍に立ち戻るという運用で、学習を進めていきました。


`アウトプット`

[応用情報技術者試験ドットコム](https://www.ap-siken.com/apkakomon.php)を活用し、午後問題を中心に問題演習を進めていきました。**１ヶ月間という勉強期間のほとんどをアウトプットに費やすよう意識しました**。

午前問題の演習については、スキマ時間や午後問題の演習に飽きたとき等に着手するようにしていました。試験直前には、午前問題を一通り時間制限を設けて解くという練習も併せて行いました。

# 問題演習量

`午前問題`

962問：平成26年春期から令和元年秋期までの12回分と少し

`午後問題`

95問：情報セキュリティ, プログラミング, データベース, サービスマネジメント, システム監査を中心に演習

![スクリーンショット 2021-06-27 18.29.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576571/442d613b-bef7-a9aa-cec7-a9368c215a75.png)

---

蛇足ですが、1ヶ月という準備期間のうち半分の期間は学生という身分が剥奪され、労働者になるということで、時間の管理にも気を遣っていました。

勤務時間以外で以下に学習できるかが勝負でしたので、以下のような目標を立て、スプレッドシートでチェックをつけていました。

- 6:00までに起床する
- リモートワーク時は始業時間まで・終業時間後の1時間は学習に充てる
- 出社時は通勤時間の30分間は学習に充てる

![スクリーンショット 2021-06-27 18.29.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/576571/c47e4b6a-1109-1fc5-df59-e8279ed78fb9.png)

*めちゃくちゃ関係ないですが、営業研修で神経衰弱を起こした期間はまったく学習に集中できませんでした。

# おわりに

午前問題77.50点, 午後問題69.00点で合格です。

午後問題の得点が物足りないなあという感じがします。こちらは今後も引き続き意識的に鍛錬していく必要がありますね。

とはいえ、合格水準に達することができたのは素直にうれしく思います。これからも努力していく自信がつきました。

以上になります。
STM32F303K8と温度センサーMCP9701で温度をシリアル出力 (Arduino)


x MCP9701-E/TO 販売コード 103199

x あまり正確では、ない

目的
秋月で売っている安価なMCP9701(約25円)を使って温度を出力する。

構成
MCP9701-E/TO I-03199

説明
MCP9701は、
0℃の時、400mV
1℃あたり19.5mV
精度は、±4℃
電線が引き出しやすい位置のA0をアナログ入力にする
計算には、容量削減の為に浮動小数点となるべく割り算は、使わない
MCP9700は、ファミリー、オフセット500mV、10mV/1℃ 今回は、使わない


```c++



//初期化
void setup()
{

  Serial.begin(9600);

} //setup

//メインループ
void loop()
{

  int s;  //センサーの値
  int n0; //小数点以上

  analogReadResolution(12);
  s = analogRead(A0);

  //電圧を温度に変換 ex 20.0 -> 200 温度の十倍を出力
  s=((  (s)  -496)*27081)>>16;

  //s = 0;   //0  debug
  //s = 200; //20 debug

  //小数点以上と小数点以下を分ける
  n0 =(s/10);      // 小数点以上
  s  =(s-(n0*10)); // 小数点以下

  //温度の小数点以上の表示
  Serial.print(n0);

  //小数点の表示
  Serial.print('.');

  //温度の小数点以下の表示
  Serial.println(s);

  //1秒の待ち
  delay(1000);

} //loop




```
[供養]要件定義勉強メモ

##前書き
どうも仕事で要件定義に近いことをすることになりそうなので、
お勉強がてらメモを取っていく。
誤りがあれば是非指摘して頂きたい。
以下参考文献
https://www.amazon.co.jp/gp/product/B00WHUP7UE/ref=ppx_yo_dt_b_d_asin_title_o05?ie=UTF8&psc=1

##要件定義とは
####要件定義＝発注側と受注側の間で合意された納品条件
噛み砕いて書くと
発注側が依頼を行い、それを受注側が判断し再提案などを行い、お互いに納得の出来る成果物を定めることを要件定義としている。

発注側が依頼を行うだけでは無いのは、様々な理由から不可能なことや代替え手段を提案したほうが良いことがある場合、
受注側からの提案により依頼内容からの変更があるため、このようになっている。

#####要件定義を行うプロセスとして
1. 発注側に要望を出して頂く。
2. 受注側が要望を検討する。
3. 受注側が検討した内容を発注側に伝える。
4. 発注側が伝えられた内容を検討する。
5. 1~4を繰り返す。
6. 検討しつくされた段階で、合意形成となる。

##定義するべき要件
プログラミングを実際に行うために必要となる物を定義していくことが必要となる。
・UI
・機能
・データ
UIは画面と帳票を指す。

機能はViewを除いた大まかな機能一覧になる。
（ボタンを押したら印刷される等UIに結び付いた機能や定期的に実行されるbatのような機能もここに該当する）

データはそのままデータを指す。
例えばECサイトだと商品データとか売り上げデータとかその他もろもろ。



##定義すべき要件の詳細の詰め方
###準備
厳密には要件定義ではないが、要件定義を行うためには以下のものが無いと進まない上に、実際には無いこともあるらしいのでまとめる。

###企画書を作る。
企画書と呼ばれるものが必要になる。
企画書には以下の物が記載されているのが望ましい。
・プロジェクト名称（例：A倉庫の在庫管理プロジェクト）
・プロジェクトの目的（例：現状、Excelで管理している在庫管理を効率的かつミスのないような物にしたい）
・目的達成のための成果物（例：JANによる在庫登録機能、在庫管理機能）
・作る物の説明（例：思いつかなかった）
・成果物を使用する人（例：倉庫内作業員、事務員）
・利用する人が得られる便益（例：効率的かつミスのない作業になるため、時間コストの削減になる）
・作るための体制（例：思いつかなかった）
・期限（例：12ヶ月～18ヶ月）

###全体図を描く。
ユースケース図とシステム連携図と内部連携を一つにして水で薄めた様な図を書く。
詳細を埋めれば埋めるほど良いと思うけど、同じ図にするんじゃなくてある程度分けたほうが良い気がする。


本全部読んだけど要件定義の仕事が流れたので供養になった。
フックとフォーク ― J 言語入門

J 言語の最も面白い機能の一つが、フックとフォークです。

# フック

ちょうど **2 つの連続する verb** があり、その直後に **noun が続いていない**とき、その verb の組を**フック** (hook) と呼びます。

以下がフックの例です。

```j
* |
% +/           NB. (+/) は 1 つの verb
(% +/) 3 16 7  NB. 括弧の外に noun が続いているが、括弧の中身はフック
```

フック `g h` は、次のような動作をする verb を作ります。

- dyad `x (g h) y` は `x g (h y)`
- monad `(g h) y` は `y g (h y)`

```
   g
  / \
x|y  h
     |
     y
```

## 使い方

dyad として *そのまま*使う場合、普通に verb を使っても同じです。

```j
   NB. | (monad) は絶対値を求める
   2 (* |) _3
6
   2 * |_3
6
```

フックの利点は、modifier の被演算子として使うことができることです。

```j
   2&(* |)
2&(* |)
   2&(* |) _3
6
```

一方、monad の場合は、普通に verb を使うのとは**違う動作**をします。

```j
   (% +/) 3 8 5
0.1875 0.5 0.3125
   % +/3 8 5
0.0625
   NB. 同じ動作をさせるには、引数を 2 回書く必要がある
   3 8 5 % +/3 8 5
0.1875 0.5 0.3125
```

フックは式の中で使うときは括弧で囲みます。括弧を付けないと、上の例のように違う意味になってしまいます。ただし、フック自体を変数に代入する場合は括弧は不要です。

```j
   NB. リストの各要素の、全体に対する比率を求める verb
   proportion=: % +/
   proportion 3 8 5
0.1875 0.5 0.3125
```

# フォーク

**フォーク** (fork) は、フックと似ていますが、**3 つ組**の verb です。

```j
* , +
+/ % #
```

フォーク `f g h` は、次のような動作をする verb を作ります。

- dyad `x (f g h) y` は `(x f y) g (x h y)`
- monad `(f g h) y` は `(f y) g (h y)`

```
       g
     /   \
   f       h
 [/]\    [/]\
[x]  y  [x]  y
```

## 使い方

フックとは異なり、括弧の有無で大きな違いがあります。

```j
  NB. (2 * 3) , (2 + 3)
  2 (* , +) 3
6 5
  2 * , + 3
6
```

有名な例ですが、リストの平均値 (算術平均) を求める verb をフォークを使って書くことができます。

```j
   average=: +/ % #
   average 10 7 23
13.3333
```

「総和 (`+/`) 割る (`%`) 要素数 (`#`)」という定義通りの記述になっています。

## noun - verb - verb

フォーク `f g h` の `f` の部分には、noun を使うことも可能です (それ以外の場所には使えません)。

```j
   (1 + i.) 10
1 2 3 4 5 6 7 8 9 10
```

`f y` や `x f y` を実行する代わりに、`f` の値が使われます。

```
  g
 / \
f   h
  [/]\
 [x]  y
```

## cap

`[:` は、cap と呼ばれる verb です。この verb は、実行すると必ずエラーが発生します。

```j
   [:''
|domain error
|       [:''
   0 [: 1
|domain error
|   0    [:1
```

一見使いどころが無さそうに見えますが、フォークの `f` の部分に使うと、**特殊な効果**があります。

```j
   NB. % (1 + 2)
   1 ([: % +) 2
0.333333
```

フォークの `f` 側の部分が削除されて、`@` と同じような動作になります [^1]。このとき、`[:` 自体は**実行されません**。

```
   g
   |
   h
 [/]\
[x]  y
```

# 4 つ以上の verb

verb が 4 つ以上連続する場合も、フォークやフックとして解釈されます。ここでも、**右から左**のルールが適用されます。

```
               (a4 a3 a2 a1) =>                  (a4 (a3 a2 a1))
            (a5 a4 a3 a2 a1) =>               (a5 a4 (a3 a2 a1))
   (a8 a7 a6 a5 a4 a3 a2 a1) =>    (a8 (a7 a6 (a5 a4 (a3 a2 a1))))
(a9 a8 a7 a6 a5 a4 a3 a2 a1) => (a9 a8 (a7 a6 (a5 a4 (a3 a2 a1))))
```

右から順に 3 つ組の verb をフォークとして読んでいき、最後に余りが出た場合は、その部分 (一番左) がフックになります。

# 例

フックとフォークの例をいくつか載せておきます。実行しながら理解を深めましょう。

```j
NB. データ型と値のペア
(;~ datatype) 0 1
(;~ datatype) 'a'

NB. x 以上 y 未満の整数のリスト
NB. ([ + ([: i. -~))
3 ([ + [: i. -~) 12
_2 ([ + [: i. -~) 5

NB. 以下はヒントなし
4 ({ ,) i.3 3
(2 + -)&(1) 3
1 (+ + + + + +) 1
1 (+ + + + + + +) 1
1 (+ + + + + + + +) 1
```

これがスラスラ読めるようになると、J が楽しくなってくると思います。

---

\[ 前 : [代入](https://qiita.com/unsigned-wrong-wrong-int/items/e175f45607e407bb0973) \] \[ [目次](https://qiita.com/unsigned-wrong-wrong-int/items/e15a87999cedfc6b9ced) \] \[ 次 : [explicit definition](https://qiita.com/unsigned-wrong-wrong-int/items/0bc6385d4e640b097651) \]

[^1]: 厳密には `@:` と同じになります。
【React】ReferenceError: Cannot access 'HogeState' before initializationの対処方法

<h2>症状</h2>
reactでnpmstartしたとき、以下エラーメッセージが表示されました。
翻訳すると、「ReferenceError：初期化前に「HogeState」にアクセスできません」でした。

```terminal:エラーメッセージ
Uncaught ReferenceError: Cannot access 'HogeState' before initialization
    at Hoge(Hoge.js:19)
    at renderWithHooks (react-dom.development.js:14985)
    at mountIndeterminateComponent (react-dom.development.js:17811)
    at beginWork (react-dom.development.js:19049)
    at HTMLUnknownElement.callCallback (react-dom.development.js:3945)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:3994)
    at invokeGuardedCallback (react-dom.development.js:4056)
    at beginWork$1 (react-dom.development.js:23964)
    at performUnitOfWork (react-dom.development.js:22776)
    at workLoopSync (react-dom.development.js:22707)
    at renderRootSync (react-dom.development.js:22670)
    at performSyncWorkOnRoot (react-dom.development.js:22293)
    at scheduleUpdateOnFiber (react-dom.development.js:21881)
    at updateContainer (react-dom.development.js:25482)
    at react-dom.development.js:26021
    at unbatchedUpdates (react-dom.development.js:22431)
    at legacyRenderSubtreeIntoContainer (react-dom.development.js:26020)
    at Object.render (react-dom.development.js:26103)
    at Module.<anonymous> (index.js:7)
    at Module../src/index.js (index.js:18)
    at __webpack_require__ (bootstrap:856)
    at fn (bootstrap:150)
    at Object.1 (index.js:41)
    at __webpack_require__ (bootstrap:856)
    at checkDeferredModules (bootstrap:45)
    at Array.webpackJsonpCallback [as push] (bootstrap:32)
    at main.chunk.js:1
```

該当のファイルは以下になります。

```react:Hoge.jsx
import React from "reacrt";

export const Hoge = () => {
   console.log(HogeState);
   const HogeState ~ "HOGE";
   return(
     <div>HogeState</div>
   )

}
```

<h2>解決方法</h2>
変数の宣言個所と参照個所を逆にすることで解決できました。
変数の宣言前にその変数を参照すると、このようなエラーが出るようです。

```react:Hoge.jsx
import React from "reacrt";

export const Hoge = () => {
   const HogeState ~ "HOGE";
   console.log(HogeState);

   return(
     <div>HogeState</div>
   )

}
```


<h2>参考</h2>

https://qiita.com/tetsu-upstr/items/c15fd0408244db16ed44
git　パスが通ってないときの一時的な対処法【win10】

一時的に使うだけであれば
パスを通さなくても、gitのパスを直接指定しても良いと思います。

#対処法
コマンドを打つ際に「git」の部分を
"C:\Program Files\Git\bin\git.exe"
に変えるだけ

##例
```
git init
```
をやりたいなら
<br>

```
"C:\Program Files\Git\bin\git.exe" init
```
とする

#パスの注意点
標準の状態でインスコして

```
C:\Program Files\Git\bin
```
の配下に「git.exe」があるはず
という前提で書いてます
webpackerを使用してBootstrapを導入する際に出たエラーの解決方法。

##起こったエラー

[こちらのサイト](https://qiita.com/kazutosato/items/d47b7705ee545de4cb1a)を参考にyarmでbootstrapとjqueryとpopperをインストールして進めていたが、bootstrapを適用できなかった。

```
$ yarn add jquery bootstrap popper.js
```


サーバーを見てみると、以下のようなメッセージが出ていた。

```terminal
ERROR in ./node_modules/bootstrap/dist/js/bootstrap.esm.js
Module not found: Error: Can't resolve '@popperjs/core' in '/Users/XXX/XXX/XXXX/node_modules/bootstrap/dist/js'
 @ ./node_modules/bootstrap/dist/js/bootstrap.esm.js 60:0-41 2278:19-25 2297:23-42 3969:15-21 4099:23-42
 @ ./app/javascript/packs/application.js```
```

`@popperjs/core`が見つからないと言われているが、参考サイトではインストールする手順はなかったし、なぜこのようなメッセージが出ているのか分からなかった。


##原因
参考サイトの時点では、Bootstrap4が最新版だったが、Bootstrap5がリリースされたことにより、Bootstrapをインストールした際にBootstrap5がインストールされていた。
それによって起こった環境のずれが原因だったようだ。

##解決策

popperを`$ yarn add popper.js`でインストールしていたが、
`$ yarn add @popperjs/core`でインストールすれば良いことが分かった。

```
$ yarn add jquery bootstrap @popperjs/core
```


##参考サイト
[Rails 6+Webpacker開発環境をJS強者ががっつりセットアップしてみた（翻訳）](https://techracho.bpsinc.jp/hachi8833/2021_05_06/83678)
rubyでpaizaの標準入力を扱う際によく使う関数とその利用例

## よく使う関数
- gets ... 標準入力の取得
- chomp ... 改行コードを取り除いた文字列を生成して返す。(\nとかを取り除く)
- gsub(/\n/, '') .... 第一引数の正規表現に一致する文字列の部分を、第二引数の文字列で置換する。この場合、改行コードを空白に置換する。chompで文字列ごと消え去ることがたまにあるので、その際はgsubで置換するとなんか上手くいきます。
- split('<区切り文字>')...文字列.split('<区切る文字>')で実行すると、区切る文字ごとに文字列が分割され、配列として格納されます。例えば、numbers = '1-2-3-4'.split('-')とするとnumbersの中身は1,2,3,4と区切られた数字が格納されます。
- to_i ... 整数型に変換する
- to_s ... 文字列型に変換する

## 例

### 例1 N行の文字列を配列に格納する
```ruby
#標準入力の例
N
word_1
word_2
.
.
.
word_n
```

```ruby
#実装するコード
N = gets.to_i
words = [] #配列を宣言
N.times do
　words << gets.chomp!
end
```

### 例2 複数の文字列が1行で渡される場合
``` ruby
#標準入力の例
#1行目: 半角スペースで区切られている場合
a_1 a_2 a_3 a_4　
#2行目: ハイフンで区切られている場合
taro-takashi-akemi
```

``` ruby
#実装するコード
array_a = gets.split(' ') #スペースで区切って配列として格納
array_b = gets.split('-') #ハイフンで区切って配列として格納
```
IIS-Tomcat連携でAJPポート無応答

某Webアプリ製品の導入。
いつものばたばたで負荷・性能テストなんて全くなし。

プレ本稼働的位置付けでユーザ使い始めたところで、出ました無応答。

IIS10 - Isapi_Redirector1.2 - Tomcat8.5
※サーバ同居

ユーザ使っているのでサービス再起動とかでとりあえず復旧優先とか
するものだからなかなか原因がつかめない。


# OutOfMemoryError?
No

# Stop the world?
No
※無駄にHeap大きいといった背景はありましたが

#そもそもTomcatの稼働状況は?
あ、http connectorに直接リクエストすると普通に動いてる！
IIS-Tomcat間で詰まっているのか

#Tomcatのacceptor thread枯渇?
事象からググるに
[【真夏の夜のミステリー】Tomcatを殺したのは誰だ？](https://www.atmarkit.co.jp/ait/articles/0708/27/news098.html)
に到達（以前別件でも参照しました。。。既視感）
が、Tomcat側にmaxThreads云々のログなし
特定できていない状態でのトライ&エラーとして
server.xmlにてAJP ConnectorにconnectionTimeoutを指定するも
あえなく再発

#再発時にnetstat 見ると
8009で250個のESTABLISHなTCP接続。250って何? 上述のacceptor threadの
デフォルトの上限とも違うし・・・?
   
すると追加で出力設定をしたIsapi_Redirectorのログが

```:isap_redirect.log
[warn] ajp_get_endpoint::jk_ajp_common.c (3177): Unable to get the free endpoint for worker ajp13w from 250 slots
[error] HttpExtensionProc::jk_isapi_plugin.c (2337): Failed to obtain an endpoint to service request - your connection_pool_size is probably less than the threads in your web server!
```
なるほど250 Slots / connection_pool_size 

# Isapi_Redirectorのworkers.propertiesに関連設定記述なし=デフォルト?
　
　[The Apache Tomcat Connectors - Reference Guide / workers.properties configuration](https://tomcat.apache.org/connectors-doc/reference/workers.html)

あったあった

> connection_pool_size
> (略) For IIS the default value is 250 (before version 1.2.20: 10), (略)
> connection_pool_timeout
> (略) The default value zero disables the closing (infinite timeout).(略) 

以下、connection_pool_timeout設定に注意書きあり
> You should keep this time interval in sync with the keepAliveTimeout attribute (if it is set explicitly) or connectionTimeout attribute of your AJP connector in Tomcat's server.xml. Note however, that the value for mod_jk is given in seconds, the one in server.xml has to use milliseconds.

#設定
connection_pool_size拡張、connection_pool_timeoutを制限。
最終的には他の設定値も含めた最終形を探るも、問題は抑止できた模様。
sizeの問題よりもtimeoutしない設定の方の問題が大きそう。
250はりつきどころか、いくらもたまっていかない。
計算結果で丸め誤差が発生した時に丸める方法

### 参考図書
題名：プロを目指す人のためのRUBY入門
著者： 伊藤淳一

### 

### 現象
``` ruby
puts 0.3*6.0
# => 1.7999999999999998
```
丸め誤差が発生

###　上記のような時に答えを丸める方法
（１）

```ruby
puts 0.3r * 6.0r
# => 9/5
```
分数？となった答えが返ってくるこれに
（２）

```ruby
puts (0.3r * 6.0r).to_f
# => => 1.8
```
「.to_f」浮動小数点数を使用し、変換すると丸まった答えが導き出せる。

### 変数に格納されたものを丸めるとき

```ruby
a = 0.3
b = 6.0
```
上記のように変数に少数を代入してその結果を丸めたいときは
**rationalizeメソット** を使用する


```ruby
a = 0.3
b = 6.0

puts (a.rationalize * b.rationalize).to_f
#=> 1.8
```
上記のようにすれば丸められる。
以前、計算する時に小数点がめっちゃ出るやん、、、
てな事が以前ありましたが、こうすれば良いのだと勉強になりました。


### 別の方法
ちなみに、rationalizeを変数に格納する段階で使用してもいけました。

```ruby
a = 0.3.rationalize
b = 6.0.rationalize

puts (a * b).to_f
#=> 1.8
```
または

```ruby
a = 0.3r
b = 6.0r

puts (a * b).to_f
#=> 1.8
```


<br><br>
### その他
~~floorメソットを使った方法でもいけました~~

```ruby
puts (0.1 * 6.0).floor(2)
# (2)は第2小数点まで表示させますよーという意味です。(3)なら第３小数点まで表示。
```
~~こっちでも同じ結果が吐き出された。~~

floorよりも丸めを行う場合は**round（四捨五入）**が良いとご意見を頂きましたので修正。

```ruby
puts (0.3 * 6.0).floor(2)
puts (0.3 * 6.0).round(2)
#=>1.79
#=>1.8
```

ご意見ありがとうございました。
macでmecab-python3のimport error(Symbol not found)を解決

**環境**
MAC OS  11.3.1 (M1)
HOMEBREW_VERSION: 3.2.0
mecab: stable 0.996 (bottled)
swig: stable 4.0.2 (bottled)
pyenv 1.2.26
python 3.9.4
pip 21.1.3
mecab-python3 Version: 1.0.4

**発生した問題**

importしてmecabを使おうとしたところ・・・

```python
import MeCab
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/__init__.py", line 10, in <module>
    from . import _MeCab
ImportError: dlopen(/Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so, 2): Symbol not found: __ZN5MeCab11createModelEPKc
  Referenced from: /Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so
  Expected in: flat namespace
 in /Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so
```
`Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so`
を実行する際に
`Symbol not found: __ZN5MeCab11createModelEPKc`というエラーが発生。

**otool -Lで依存している共有ライブラリの名前とバージョンを確認する**

```zsh
G1998G@MyMac% otool -L /Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so
/Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so:
	/usr/lib/libmecab.dylib (compatibility version 1.0.0, current version 929.9.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
```

`ls /usr/lib/`したところ、上記3つのdylibファイルは存在しなかった。
探してみたところ私の場合は `/opt/homebrew/lib/`というディレクトリに上記が存在した。

**install_name_tool -changeでパスを置換**

３つの`.dylib`のうち、一番上の`/usr/lib/libmecab.dylib`を
正しいパスの`/opt/homebrew/lib/libmecab.dylib`に置換する。
`install_name_tool -change`を使用。


```zsh
G1998G@MyMac%  install_name_tool -change "/usr/lib/libmecab.dylib" /opt/homebrew/lib/libmecab.dylib /Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so

```
otool -Lで置換されているか確認。

```zsh
G1998G@MyMac% otool -L /Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so
/Users/G1998G/.pyenv/versions/3.9.4/lib/python3.9/site-packages/MeCab/_MeCab.cpython-39-darwin.so:
	/opt/homebrew/lib/libmecab.dylib (compatibility version 1.0.0, current version 929.9.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 905.6.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)
```
置換成功。
残り2つの`.dylib`も同様に対処したところ正常にimportすることができました。
C言語頻出関数まとめ

#本ページの見方
##ライブラリ名(○○.h)
###関数名
- ポイントや作業内容、豆知識

```
コード・説明
```

#C言語頻出関数

- [stdio](#stdio)
 - [printf](#printf)
 - [fopen](#fopen)
- [string](#string)
 - [strcmp](#strcmp)
 - [strcpy](#strcpy)
- [math](#math)
 - [round](#round)

##stdio
###printf()
- 文字を出力する関数。
- 第二引数に変数を指定することで変数の値を表示することが可能。


```c
printf(const char *format, ... );

printf("Hello World!");
 -> Hello World!

int a = 10;
printf("%d日", a);
 -> 10日
```

###fopen()
- ファイルを読み込む関数。
- この関数を利用することでCSVファイルなどから値を読み取ることが可能。
- この関数を利用した後はfclose関数を利用してファイルを閉じる必要がある。

```c
fopen(const char *filename, const char *mode);
 //modeはr（読み取り）, w（書き込み）のいずれかを使う場合が多い。

FILE *file = fopen("ファイルの名前", "r");

fclose(file);
```

##string
###strcmp()
- 文字列を比較する関数。
- ==では比較することのできない文字列を比較してくれる。

```c
strcmp(const char *s1, const char *s2);

char *a = "Qiita";
strcmp("Qiita", a);
 -> Trueを返す
```
###strcpy()
- 文字列をコピーする関数。

```c
char *strcpy(char *s1, const char *s2);
 //s1にs2の文字列をコピーする

char *a;
strcpy(a, "Qiita");
printf("%s", a);
 ->Qiitaと出力される
```
##math
###round()
- 値を四捨五入する関数。
- 切り上げはroundup()関数,切り捨てはrounddown()関数を用いる。

```
round(double x);
 //xの値を四捨五入する

int a = round(3.6);
 ->aに4が格納される
```


より詳しく知りたい方は以下のリンクから(全て英語です)
[C言語ドキュメント](https://devdocs.io/c/)
AtCoder Beginner Contest 207 参戦記

# AtCoder Beginner Contest 207 参戦記

ABC 完で水色中間パフォが出るって、鬼畜セットやな.

## [ABC207A - Repression](https://atcoder.jp/contests/abc207/tasks/abc207_a)

1分半で突破. 3パターンしか無いので、全部計算してしまえばいい.

```python
A, B, C = map(int, input().split())

print(max(A + B, B + C, A + C))
```

## [ABC207B - Hydrate](https://atcoder.jp/contests/abc207/tasks/abc207_b)

8分で突破. B問題としてはかなり難しいのでは. 腐った読みから言えば、B問題はシングルループで解ける問題なので答えは10<sup>7</sup>くらい回せば出るんだろうなあとは思ったんだけど確信がなく、とはいえ 64bit int 以内ではあるだろうということでにぶたんでオーバーキルをした.

```python
A, B, C, D = map(int, input().split())

INF = 10 ** 20

ok = INF
ng = 0
while ok - ng > 1:
    m = ng + (ok - ng) // 2
    if A + B * m <= C * m * D:
        ok = m
    else:
        ng = m

if ok == INF:
    print(-1)
else:
    print(ok)
```

真面目に式変形をすれば A / (CD - B) ≦ x となり、最大 A 回でいいことが分かるようですが、ここまで来たら O(1) で解いちゃうよね.

```python
A, B, C, D = map(int, input().split())

x = C * D - B
if x <= 0:
    print(-1)
else:
    print((A + x - 1) // x)
```

## [ABC207C - Many Segments](https://atcoder.jp/contests/abc207/tasks/abc207_c)

11分で突破. 真面目に開区間と閉区間を場合分けで処理したくないので、閉区間に統一したい. 開区間は要するには 1/∞ だけずれていると思えばいいのだが、まあ今回に限っては 0＜x≦0.5 で代用できるので 0.1 を使って閉区間として解いた. 0.5を採用して、2倍して全て整数でやっても良さそう.

```python
from sys import stdin

readline = stdin.readline

N = int(readline())
tlr = [map(int, readline().split()) for _ in range(N)]

lr = []
for t, l, r in tlr:
    if t == 1:
        lr.append((l, r))
    elif t == 2:
        lr.append((l, r - 0.1))
    elif t == 3:
        lr.append((l + 0.1, r))
    elif t == 4:
        lr.append((l + 0.1, r - 0.1))

result = 0
for i in range(N):
    for j in range(i + 1, N):
        a, b = lr[i]
        c, d = lr[j]
        if c > b or d < a:
            continue
        result += 1
print(result)
```
初めてのQueue（PHP）

# はじめに
PaizaAランクレベルアップ問題集より
[陣取りの結末 (paizaランク B 相当)](https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_camp_step3)

この問題に取り組むにあたり、Queueを学んだため自分用にまとめる。

# 〇キューとスタック
## キュー（Queue）
***先入れ先出し（FIFO:First in First Out）方式のデータ構造***

Queueは、入力されたデータがその順番通りに処理されなければ困る状況で使われる。


## スタック（Stack）
***後入れ先出し（FILO:First in Last Out）方式のデータ構造***


データを追加することを「push」、データを取り出すことを「pop」という。

QueueとStackと聞くと難しく感じるが、取り出す順番が異なるくらいで配列の操作で簡単に実現できる。
そういえば、基本情報の勉強をした時に勉強していた（データの持ち方編）。

***参考「キタミ式イラストIT塾 基本情報技術者 平成31年/01年 p556.557」***


# PHPでのQueueの実装について
`array_push()`と`array_shift()`を使って実装できる。

***・array_push()***
配列の最後に１つ以上の要素を追加する

***・array_shift()***
配列の先頭から要素を一つ取り出す。
取り出した後は、配列内の要素は前にずれる。数値添え字の配列の場合、キーは0から順に新たに振りなおされるが、リテラル（文字）のキーには影響しない

### イメージ画像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381376/8e7a161c-f973-d21f-79c5-6774c8850900.png)

# Paiza問題集 ざっくり解説（自分用）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381376/c51ab3d7-5977-7f7e-9d6f-ca764856c5c3.png)

こちらの問題であればざっくりとした流れは以下のイメージ
1.初期位置の取得しQueueに格納（array_push）
2.Queueから先頭のデータを取り出し（array_shift）、その位置の上下左右が移動可能かどうか判定
→移動可能であれば、移動後の位置を取得しQueueに格納
3.Queueの中身がなくなるまで2を繰り返す。

移動した箇所を「*」に置き換える等の処理は省いているが、大まかな処理の流れはこんな感じ（多分）


# 参考
[【Java】一目でわかるキューとスタック!データ管理をラクにしよう!](https://www.sejuku.net/blog/63202)
[PHPにおけるStackとQueue](https://www.utakata.work/entry/2017/11/10/110000)
[array_push](https://www.php.net/manual/ja/function.array-push.php)
[array_shift](https://www.php.net/manual/ja/function.array-shift.php)
10進数からN進数に変換する / N進数から10進数に変換する

必要になるたびにググっている気がするので、ここらでまとめておきたいと思います。

まずN進数から10進数に変換する場合は`Integer.parseInt`や`Long.parseLong`を利用します。

```
jshell> Integer.parseInt("ABC123", 16)
$1 ==> 11256099
jshell> Long.parseLong("ABC123", 16)
$2 ==> 11256099
```

次に10進数からN進数に変換する場合は`Integer.toString`や`Long.toString`を利用します。

```
jshell> Long.toString(123456, 16)
$1 ==> "1e240"

jshell> Long.toString(123456, 16)
$1 ==> "1e240"
```

応用編として、任意のN進数から別の任意のN進数に変換したい場合は、次のようなイディオムで可能です。

```
jshell> Long.toString(Long.parseLong("ABCD", 16), 8)
$1 ==> "125715"

jshell> Integer.toString(Integer.parseInt("ABCD", 16), 8)
$2 ==> "125715"
```

**環境情報**

```
$ javac -version
javac 16
$ java -version
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment AdoptOpenJDK (build 16+36)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 16+36, mixed mode, sharing)
```
FuelPHP導入から画面表示までのハンズオン(わかりやすいはず)

　
# FulePHP導入から画面表示までのハンズオン

###経緯
>FuelPHPでアプリ開発をする機会があった。Udemyでコース受講後いざ実装を開始すると、Udemy通りに進めるとすごく効率が悪かった。（ファイル作成など）
ただ、phpを触ったことがなかった私からすればUdemyの講座のおかげで実装ができているので感謝しています。
それに、参考記事にあるようなコードが見つからずあっているのかと疑問に思った。
そこで、Railsでやってきた時みたいに、terminalで動かしたくなった。
参考になれば嬉しいです。

では、早速いきましょう！

#FuelPHPの環境構築手順( コマンドライン )

## oilコマンドのインストール

```:terminal
$ curl https://get.fuelphp.com/oil | sh
```

>oilコマンドとは、FuelPHPが提供するコマンドラインツール。oilコマンドを使用することで新規FuelPHPプロジェクトの作成したり、作成したプロジェクトに設定ファイルを作成したりできる。

このとき、curlコマンドが使用できない場合でMacをお使いの方は以下を実行後、再度`oilコマンドのインストール`をしてください。

```:terminal
$ brew install curl
```
##FuelPHPの新規プロジェクト作成
ここで、プロジェクトを作成したディレクトリに移動して以下を実行してください。ここでは、わかりやすいように`作業用ディレクトリを作成`し、そこに`新規プロジェクトの作成`をしていきます。

```:terminal
$ mkdir php
$ cd php
```

以下が新規プロジェクトを作成するコマンドです。

```:terminal
$ oil create < project-name >
```

ここでは、`project-name`を`firstphp`とします。以下のようにしてください。

```:terminal
$ oil create firstphp
```

##ブラウザの表示
ここまでで、エラーが出なければブラウザ表示が可能のはず、、、です。

```:terminal
$ cd firstphp
$ oil server
```

>`cd firstphp` で移動して`oil server`をしてください
oil serverは`oil s`でもいけます。

[http://localhost:8000/][link-1]にアクセスし表示されれば、目標達成です。
[link-1]:http://localhost:8000/

---
#私がやらかしたこと

`oil s`をする前に

```:terminal
$ cd firstphp
```

をしなければいけないことは、参考にした記事にも書いてましたが、強調されているところのみ読んでいたため、少し詰まりました。
でも、これはあるある？なのでしょうか。ググってみると
[私と同じミス][link-2]をしている外国人の先輩を発見！英語ですが、私が読めたので皆さんも読めます。
[link-2]:https://fuelphp.com/forums/discussion/11702/this-is-not-a-valid-fuel-installation-so-oil-is-a-bit-lost-/p1


---
参考記事
>[FuelPHPについて現役エンジニアが解説【初心者向け】
][link-3]すごくわかりやすかったです
[link-3]:https://techacademy.jp/magazine/44910
>['This is not a valid Fuel installation so Oil is a bit lost.'][link-4]が出た時、参考にしました
[link-4]:https://fuelphp.com/forums/discussion/11702/this-is-not-a-valid-fuel-installation-so-oil-is-a-bit-lost-/p1

---

間違っているところあれば、教えてください。
ArduinoをWiFi経由でROS制御する

# はじめに

ArduinoデバイスをWiFi経由でROS制御(Joystick)するための手順をまとめました。

# 環境
- SparkFun ESP32 Thing Plus
- Arduino IDE 1.8.13
- Ubuntu 18.04
- ROS melodic + rosserial

# ROSサーバー側 

## インストール
```bash
$ sudo apt install ros-melodic-rosserial ros-melodic-rosserial-arduino
```

## ROSノードの立ち上げ
joyとrosserialのノードを立ち上げます。

```xml:main.launch
<launch>
  <node pkg="joy" type="joy_node" name="joy_node">
    <param name="autorepeat_rate" value="100" />
  </node> 

  <node pkg="rosserial_python" type="serial_node.py" name="serial_node" args="tcp">
  </node>
</launch>
```

```bash
$ roslaunch main.launch
```

# Arduinoデバイス側
## インストール
ROSサーバ側で以下のコマンドでros_libを生成します。

```bash
$ rosrun rosserial_arduino make_library.py ${PATH_TO_SKETCHBOOK}/libraries
```

## プログラム

以下のようなコードを書きます。

```c++
#include <SPI.h>
#include <WiFi.h>

#define ROSSERIAL_ARDUINO_TCP

#include <ros.h>
#include <sensor_msgs/Joy.h>

void messageCb(const sensor_msgs::Joy&);

const char* ssid = "YOUR SSID";
const char* password = "YOUR PASSWORD";

ros::NodeHandle  nh;
ros::Subscriber<sensor_msgs::Joy> sub("/joy", &messageCb );

// SET YOUR ROSSERIAL SERVER IP & PORT
IPAddress server(192, 168, 1, 100);
uint16_t serverPort = 11411;

void messageCb(const sensor_msgs::Joy& joy) {
  // WRITE YOUR CODES
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(" connected.");
  nh.getHardware()->setConnection(server, serverPort);
  nh.initNode();
  nh.subscribe(sub);
}

void loop()
{
  nh.spinOnce();
  delay(1);
}
```

あとはデバイスにアップロードして実行すれば、ROSのJoyメッセージを受信できます。
MacにJmeterを導入して、Railsでテスト実行してみた

##はじめに

先日、Webで同時にHTTPリクエストが送られた場合の例外処理を実装しました。
その後、実際に同スレッドで同時にHTTPリクエストが送られた場合に正常に動作しているかを確認するためにJmeterを使ったのでメモとして残します。


##Jmeterの環境を構築

###①JDK（Java）をインストール

JDKをbrewでインストール

```terminal
brew install openjdk
```

JDKとは？

>Java Development Kit (JDK) はオラクル（旧サン・マイクロシステムズ）により提供されている、プログラミング言語Javaを使ってJavaアプリケーションおよびその他のソフトウェアコンポーネントを構築するためのソフトウェア開発キット (SDK) および開発環境である。

引用元：[ウィキペディア](https://ja.wikipedia.org/wiki/Java_Development_Kit#:~:text=Java%20Development%20Kit%20(JDK)%20%E3%81%AF,%E3%81%8A%E3%82%88%E3%81%B3%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82)

###②Jmeterをインストール

brew経由でJmeterをインストール

```terminal
brew install jmeter

シンボリックリンクの設定を実行
sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
```

###③Jmeterを起動

Jmeterを起動

```terminal
jmeter
```
![スクリーンショット 2021-06-27 14.47.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/13d1fa94-2544-79da-533e-618ee0c28476.png)

##Jmeterでテストを実行

####①まず日本語に設定

![スクリーンショット 2021-06-27 14.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/86b7448a-6d2e-5667-58be-97ec8c190d1b.png)

####②その後見た目を変更

デフォルトの黒い見た目はカッコイイのですが、テストシナリオを保存できない等のバグが多いので切り替えます。

![スクリーンショット 2021-06-27 14.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/b45c9b1c-9faf-9e37-e2f7-24300d1f3c18.png)

####③テストシナリオを作成

①スレッドグループを作成

![スクリーンショット 2021-06-27 14.58.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/ae16c981-aaa0-7ccc-41b0-370e4f44a653.png)

同時にテスト実行したい回数のスレッドを設定します。

![スクリーンショット 2021-06-27 14.59.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/cd106930-992d-9009-e6ac-039b23734aae.png)

------------

②HTTPリクエストを設定

![スクリーンショット 2021-06-27 15.02.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/9abceb6d-7211-1cc5-3cd8-fa09db95233d.png)

下記写真のようにリクエストに必要な情報を入力します。

![スクリーンショット 2021-06-27 15.07.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/9e8454bf-278f-4899-46af-bdc5786adc8e.png)

HTTPリクエストのボディにJSONでデータを定義します。
ボディデータにパラメータを書くことでオブジェクトも入力できます。

-------------

③HTTPリクエストのヘッダを設定

リクエストによってはヘッダが必要になります。
以下のようにヘッダを設定します。

![スクリーンショット 2021-06-27 15.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/656d0cec-664b-2a0a-2b35-4f3ba114bbed.png)

![スクリーンショット 2021-06-27 16.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/22b6bc73-7801-b9f5-d217-074e27bf68b2.png)


------------

④ベーシック認証がある場合

HTTP認証マネージャーの設定をします

![スクリーンショット 2021-06-27 15.18.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/5c76972e-1c2d-cddd-6585-15842533e91a.png)

![スクリーンショット 2021-06-27 15.19.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/0c7235bb-7eab-71aa-9ff7-c4924cd4ba5d.png)

-------------

⑤結果をツリーで表示

![スクリーンショット 2021-06-27 15.21.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484223/4f788534-882b-2de1-5ba8-cc08fb4956d9.png)

####終わりに

今回は環境構築から簡単なテストシナリオの作成をしました。
参考になれば幸いです。
Ruby シングルクオーテーション「''」とダブルクオーテーション「""」の違い

## 備忘録。

### 参考文献
プロを目指す人のためのRUBY入門　（著者： 伊藤淳一）

### シングルクオーテーション
中身が全て文字列となる
例えば下記のように特殊文字があったとしても文字列として認識される

```ruby
puts 'hello /n world' 
#helloworld
```

### ダブルクオーテーション

```ruby
puts "hello /n world"
#hello
#world 
```
など、特殊文字の効果が適用されたりする。


### どういう時に使う？
特殊文字の効果を適用させたいときに「あれ？何で適用されないんだ？」
と思った時にはこの””と''を見返してみると解決につながるかも
CSSでメディアクエリが効かない原因について

##はじめに
Bootstrapを使ってWEBサイトを作成した際に、
メディアクエリが効かずに解決するまで2日かかったため、
解決するまでに学んだことを備忘録として記録します。

==環境は以下の通りです。==
・Windows10
・Bootstrap　v4.1
・HTML5
・CSS3

##メディアクエリ(＠media)とは？
＠mediaはメディアクエリと呼ばれている。
メディアクエリとは、
スマホやPC、タブレットなどの画面サイズによってレイアウトを変更するレスポンシブデザインを作成する際に頻繁に使用される方法のこと。

##メディアクエリ(＠media)の書き方
```
@media only screen and (〇〇-width:△△px){
    //適用させるcssを記述
}
```
#####○○には、maxかminを記述する。

+ maxの時、「幅が△△px未満」となる。
+ minの時、「幅が△△px以上」となる。

#####△△には、任意の数字を記入する。

#####andと()の間には半角スペースを入れる。
今回私は、andの後ろに半角スペースがなかった為に、メディアクエリが効きませんでした。

#####端末の種類
主に、all・screen・printが使われる。
・all 「全ての端末に一致」
・screen 「PCやスマホ等の画面」
・print　「プリンター」

#####記入例
```
/*　画面幅が768px未満の時、「pc」classは非表示、「sp」classは表示する　*/
@media only screen and (max-width:768px){
    .pc { display: none; }
    .sp { display: block; }
}
```

##メディアクエリ(＠media)が効かなかった時に確認したこと
①viewportを正しく書いているか？
②CSSがそもそもHTML上に読み込まれているか？
③メディアクエリの記述は正しく書かれているか？
④CSSの優先順位について理解しているか？

####1.viewportを正しく書いているか？
メディアクエリはHTMLのheadタグ内にviewportを正しく記述していないと動作しない。
以下を、必ず記述する。　

```html:index.html
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
```

viwportは↓こちらのURL↓に記載してあります。
https://bit.ly/3jhA4QF　

####2.cssがそもそもHTML上に読み込まれているか？
「./style.css」は読み込ませたいCSSファイルの名前です。

```html:index.html
<link href="./style.css" rel="stylesheet" >
```

####3.メディアクエリの記述は正しく書かれているか？
間違えたので何度も言います。
私はandの後ろの半角スペースがなかった為、メディアクエリが効かず２日悩みました。。

```css:style.css
@media only screen and (max-width:768px) {
 .pc { display: none !important; }
 .sp { display: block !important; }
}
```
「!important」 がついているプロパティは最優先して使用される。

####4.CSSの優先順位について理解しているか？
今回、以下の記事でcssの優先順位について再確認する事が出来ました。
https://bit.ly/3y0LYCv

### 参考記事(ありがとうございました。)
・https://yu-z.com/responsive_check/
・https://wemo.tech/839
excel 逆L字の作り方

#初めに
下記の赤枠線で囲ってある逆L字の結合はできるのかどうか、、、、
![逆L字.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/54664dbe-070b-e7d1-0c79-b90152bbac33.png)

答えはできません。:sob::sob::sob:
でも結合してるように見せる方法があるので今回周知していこうと思います。


#手順
####1.罫線を使い逆L字の形にする
このように表にしたいデータがあります。
![逆L字1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/dba3449d-df9a-9d0a-370d-da0075a2ddcb.png)
逆L字にしたいところを罫線を使い囲います。
![逆L字2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/754a6929-9432-d54a-6fe1-a3c42b360732.png)
他は罫線を使い作りたい表にします。
![逆L字3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/ef961af2-feed-71df-5551-f591fb13c65e.png)

####2.背景を白にする
①ツールバーの「表示」を押下
②「表示」を押下
![逆L字4](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/84e0f1f6-2bff-afe8-1c03-f0871013aa9f.png)

③「枠線」のチェックを外す
![逆L字5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/dfcd4ebd-60cc-0b55-ac92-d23453f7dc5d.png)

そしたら線が消えて下記の図のようになります。
![逆L字6](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1387584/4530fde5-f395-dc34-62d9-c265b3a2c6af.png)


#終わり
以上です。
Excelは色々使い方があるので覚えていきたいですね:muscle::muscle::muscle:
移行戦略の６つR

##　はじめに
　こんにちは！今回はDVAを学習してる際に「**６つのR**」というオンプレミスのアプリケーションプログラムをAWSに移行する際に考えられる移行戦略の選択肢について深ぼって学習したいと思いこちらの記事を投稿したいと思います。
　
それではよろしくお願いします！(｡･ω･)ﾉﾞ

##　REHOST：リホスト
　**オンプレの構成をそのままAWSに移行する方法**
　オンプレの仮想マシンから移行する場合は、SMSを使って移行できるケースもある

◆メリット
　・移行を迅速に行い、難易度を下げることが出来る。

◆デメリット
　・クラウドのメリットを生かしづらい。

◆感じたこと
　確かにオンプレの構成をそのままクラウドに移行するとなるとすごい楽だと思う。ただクラウドの特性を活かしづらいのも確かだなぁと

##　REPLATFORM：リプラットフォーム
　**プロググラムコードを変更せずに最適化を検討した移行方法**

◆メリット
　・高可用性を実現し、データベースの運用管理の負担も軽減することができる。プログラムの変更はないので、移行が簡単。ソフトウェアのバージョンアップなどがあっても対応しやすいしこれまでと同じ運用で対応ができる。

◆デメリット
　・AWS各サービスの知識が必要。ソフトウェアの性能、機能に依存する。時間ベースのコストが継続的に発生する（AWSは従量課金制のため）。

◆感じたこと
　・デメリットと書いたがこれはほぼ無いようなものだと思った。しょうがなくね！？

##　REPURCHASE：再購入
　**製品やサービスの再検討をする移行方法**

◆メリット
　・アカウント利用コストに置き換えて運用コストをなくす

◆デメリット
　・利用者にサービスの使い方を教える必要がある

◆感じたこと
　・マニュアルを渡す。もしくはｇｇってもらう。

##　REFACTOR：リファクタリング/再設計
　**プログラムのカスタマイズ、作り直しをする移行方法**
　
◆メリット
　・クラウドに最適化されて、そのメリットをフルに活かした設計ができる

◆デメリット
　・開発コストや時間が必要

◆感じたこと
　・最適化されたうえで移行できるが知識や技術が足らないと時間がかかりそうだなと。勉強と業務頑張る！　

##　RETIRE：廃止
　**そのままの意味。廃止**
　
##　RETAIN：保持
　**移行せずにオンプレミスで運用を継続**

##　All-inとハイブリッド
　**All-in**：すべてのリソースをAWSで実行する方式。
　**ハイブリッド**：AWSとオンプレミスの両方を使う設計のこと。

##　おわり
今回は６つのRについて少しアウトプットしました。
クラウドの特徴を活かした移行方法や全く活かさない移行方法様々あるなと。その中で移行する際にもAWSの知識や技術があればクライアントに良い提案ができるなぁと感じました。
まずは経験を積み重ねていきたいと思います！！！！

(｡･ω･)ﾉﾞばいばい
GCEでスケジュールを作成する時の権限設定（IAMと管理）

# とりあえずスケジュールを作成する
スケジュールを作成する時に、**インスタントと合わせたゾーン**を選択し、狙い通りのインスタンスが選択できて一安心。
と思ってたら、こんなエラーが出ちゃいました。
`Compute Engine System service account service-*******@compute-system.iam.gserviceaccount.com needs to have・・・
compute.instances.start,compute.instances.stop`

## 権限を付与する
権限無いから付与してちょ。的な内容だったので**IAMと管理**から該当のアカウントを探すも見つからず。１時間迷った挙句、表の右上にある**「Google提供のロール付与を含みます」**にチェックを入れると表示されちゃいました。
![image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24113/5eeb0295-b357-6936-3cf2-af9e54ae069d.jpeg)
後は、「Computeインスタンス管理者（V1）」を選択してあげれば完了です。