OmniAICreator/Qiita-1.07M huggingface dataset:
Qiitaを始める僕なりの理由。

#記念すべき初投稿！！
こんにちは、たにーです。
Qiitaで初投稿になります！

**現在、WEBエンジニアになるため、勉強中です。**

可能な限り毎日、投稿できるようにしたいなーと。

経験者の方からすると、初歩的な内容ばかりでつまらないと感じたり
誤情報を発信してしまうかもしれません、、、。（なるべく誤情報ないよう頑張ります）

エンジニアで既に働かれている皆さん、温かい目で見守ってください:joy:
よければアドバイス等も頂けたらと嬉しいです！！

#私がQiitaを始めた理由
せっかくなので、簡単に私がQiitaを使ってみようと思った経緯について話します。

<details><summary>`21年1月学習開始`</summary><div>

<br>21年1月からエンジニアを目指すためにプログラミング学習を始めています。過去に少し触れた事がありますが、ほほ初心者だと思います。。。

なので、Progateや本やYoutubeだったり、色々模索しながらの学習という状況です。下記は、現在私が学習で使用しているものです。※上から順に使用頻度順になっています。
<ul><li>Progate(アプリ)</li><li>Progate(WEB)</li><li>1冊ですべて身につくHTML & CSSとWebデザイン入門講座</li><li>ドットインストール</li></ol>
</div></detail>

<details><summary>`身についているのか不安`</summary><div>
先ほどの参考書？で学習を進めていますが、なかなか身についている実感が無い。それはそうだと思います。人は体験・経験するのが一番身につくのが早いと思っていますから。
<br>
こんな言葉もあります。
<br>
**「机上の勉強」より「実戦での勉強」**
<br>
机の上で、参考書やペンを握って勉強することも大切です。
ただ、それよりもそれを実際に使う実戦（現場）に出て勉強（活用）したほうが圧倒的にそのスキルの身に付くスピードが違います。圧倒的に。
<br>
机上ばかりではいけない。何か実戦で、もしくはそれに近いもので机上とは異なった勉強をしなくては！と思いました。

そこで、思いつくのは
「Qiitaを使ったアウトプット」でした。

</div></detail>

<details><summary>`駆け出しに不足しているのは、アウトプット`</summary><div>
人の記憶の定着率は、インプットだけでは定着しずらいと言われているそうです。そこから復習（何回も目にする）や、相手に教える、使う（アウトプット）をすることによってインプットだけよりも、格段に定着率がグンッと伸びるみたいです。
<br>
個人的にTwitterで駆け出しエンジニアの皆さん（私もですが、、、）を見ていると、Progateや参考書の学習しているけど、アウトプット出来ているかと言うと、あまり出来ていないと思います。
<br>
Twitterでのアウトプットもいいと思います。手軽に短時間で文字化してツイート。他にも同じ志をもった人からも激励ももらえると思いますしね。アウトプット以外にも得られるものは大きいです。
<br>
、、、でもなんか物足りないのとアウトプット効果が薄いのでは？と感じてしまった。だったら、Twitter＋Qiitaでアウトプットすればいいのでは？と。
<br>
なので、これから学習したことをQiitaでアウトプットして行くと決めました。（私の過去の経験でもアウトプットが一番大切とわかっているので。）

</div></detail>

<details><summary>`今後のルーティーン`</summary><div>
今後は、下記の流れで１日を終えるようにします。
**インプット：学習
アウトプット：投稿（Twitter、Qiita等で）**
<br>
</div></detail>
#最後に

このコロナの中、本当にWEBエンジニア（転職）が出来るのか不安でしょうがないです。
ましては、文系の道を進んできた人間である＋少し心配性のところもあるので。

**「あなたの努力/実力次第ですよ。」**
　⇨おっしゃる通りです。間違い無いです(笑)

**「そんな不安がっている時間があるなら
   その時間で1個でも多くインプット、アウトプットしなさい。」**
　⇨正論すぎて何にも言えません。先生ありがとうございます。(笑)

やはり日々に積み重ねが大切なので、
毎日コツコツ着実に学習してスキル向上目指し頑張ります！！！！


<br>
以上、たにーでした。
<br>
【Xcode】画像をフォルダ管理したい

## Xcodeさんは画像のファイル名が被っていなければ、よしなに対応してくれる

例えば`Assets.xcassets`に以下のように画像を格納します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513179/161d0d40-2678-89d2-dfb1-e9ffa22d93f3.png)

この場合、以下のようにソースを書けばよしなにとってくれます


```
Image("news")  // ./Assets.xcassets/news　を表示
Image("01d")  // ./Assets.xcassets/WeatherIcons/01d　を表示
```


## よしなに読み込ませない
なんか嫌なので、ここのProvide namespaceにチェックをいれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513179/4daee58c-cf09-37d5-ca07-32111e24e49c.png)


すると以下の書き方で画像をよびだせるようになる。

```
Image("news")  // ./Assets.xcassets/news　を表示
Image("WeatherIcons/01d")  // ./Assets.xcassets/WeatherIcons/01d　を表示
```

「嫌」以外の理由をつけるならば同じファイル名の画像を使いたい時などでしょうか。
Amplify 学習資料


## AWS 公式 Slideshare

[20200520 AWS Black Belt Online Seminar AWS Amplify](https://www2.slideshare.net/AmazonWebServicesJapan/20200520-aws-black-belt-online-seminar-aws-amplify-234663231)

[AWS Black Belt Online Seminar AWS Amplify]
(https://www2.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-aws-amplify-122274815)

[[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開…]
(https://www2.slideshare.net/AmazonWebServicesJapan/cto-night-day-2019-aws-amplify-webmobile-serverless)


## AWS 公式ハンズオン

[AWS Amplifyハンズオン with Vue.js :: Amplifyハンズオン with Vue.js]
(http://educationhub-6b2905c0-43df-11ea-b56d-b55afd1e96dc.s3-website-us-east-1.amazonaws.com/)

[【お手軽ハンズオンで AWS を学ぶ】AWS Amplify で Todo アプリを作ろう！ AWS AppSync ＆ Amazon DynamoDB によるリアルタイムメッセージング | AWS Startup ブログ]
(https://aws.amazon.com/jp/blogs/startup/event-report-amplify-handson/)

[AWS 怠惰なプログラマ向けお手軽アプリ開発手法 2019]
(https://feature-ai-service.dma9ecr5ksxts.amplifyapp.com/amplify/)


## その他ブログ
[React + Amplify + AppSync + DynamoDB でサーバレスなWebアプリを作成する公式チュートリアルをやってみた | Developers.IO]
(https://dev.classmethod.jp/articles/react-amplify-appsync-dynamodb-tutorial/ )

## 書籍 (Booth)

[AWS Amplify Console 実践入門](https://booth.pm/ja/items/2376840)

[実践 Vue.jsでスマホ アプリをつくろう](https://booth.pm/ja/items/2368546)

[React x Amplify で始めるサーバーレス アプリケーション開発](https://booth.pm/ja/items/1555055)

[AmplifyとAppSyncで作るサーバーレス開発入門](https://booth.pm/ja/items/1574736)
Notionとdraw.ioを連携させる

## やりたい事

- Notion に図を埋め込みたい
- Google Drive内で draw.io を使ったお絵描きができるのでそれを使いたい

## ダメな方法

- Notion側からGoogle Driveのリンクを指定する

白いページが表示されるだけの悲しい結果になります

## うまくいく方法

- draw.io側で "File > Embed > Notion..." を選択する

![スクリーンショット 2021-01-19 1.17.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99635/b5ac3404-6bef-c2b9-2aba-94a35716013b.png)

- `Edit` のオプションが "Make a Copy" になっているのでここを "Custom..." に変更しておく（Custom URLはそのまま）
- "Create" するとURLが発行されるので、Notion側からEmbed link (`/embed`) すると良い感じに連携される

完
Reactを触ってみる（その1）

## 動機: フロントエンド、ガッツリやってみたい！
- 普段はサーバーサイドエンジニアとして、主にPHP/Javaで開発することが多いのですが、JavaScriptでゴリゴリにフロント動かしてみたい！という欲求が昔からありました。かつ、どうせだったら「**altJS**」（alternative JavaScript）× 「**JSフレームワーク**」を使ってみたい！という思いがあり、今回Javascriptをガッツリ触ってみることにしました。

## フレームワーク何にしようか問題
- さて、JavaScriptをガッツリやっていくのはいいとして、どういう組み合わせを選ぶか？日本のGoogleトレンドを見てみると、以下のような結果に。

**<順位>**
React > Vue > Angular

**【参考】**
[React,Vue,Angularのトレンド比較（日本）](https://trends.google.com/trends/explore?geo=JP&q=React,Vue,Angular)

ふむふむ。結構ReactとVueが拮抗してますね。もっとよく調べてみると、世界の有名サービスは軒並みReactで作られている、かつグローバルではReactのシェアのほうが高い。（Vue.jsもコミュニティがかなり頑張っているので、結構いい勝負ではあるようです）悩んだんですが、Reactを以前から触ってみたかったので、今回の学習では「**React**」を学ぶことにしました。

## 何はともあれ触ってみる: 開発環境構築

- 開発環境PC: Windows10 Home

**Node.jsのインストール**  
まずPCに「**Node.js**」をインストール。そもそも、React使うのに何でNode.jsインストールする必要があるんだっけ？今一度整理。

- **Node.js**
  - JavaScriptをRubyやPythonと同じようにPCのターミナル上で動かすことができるようにするためのソフトウェア。JavaScriptをサーバーサイド言語として使えるようになる。
  - **npm**: Node.jsの為に作られたパッケージ管理システム。Node Package Managerの略。パッケージのインストール・アップデート・アンインストールだけでなく、リポジトリ機能も完備。
  - フロントエンド用のパッケージを提供するのにも用いられるようになる。**Javascriptのパッケージ管理はnpmを使う。**

  以下のリンクの記事を参考にWindowsマシンにNode.jsを入れていきます。

**【参考】**
[Windows 10へNode.jsをインストールする](https://qiita.com/echolimitless/items/83f8658cf855de04b9ce)

**Visual Studio Codeのインストール** 
React開発元のデフォルト開発環境でもあるらしい「VS Code」をインストール。

## プロジェクトの作成 ~ Hello World!まで
- Create React App（CRA）でプロジェクト（スケルトン）を作成する。適当なディレクトリで以下のコマンドを実行。

```
npx create-react-app hello-world --template typescript
```
今回はaltJSに「**TypeScript**」を使います。

- Create React App
  - **react**: React本体パッケージ
  - **react-dom**: DOMを抽象化してReactから操作できるようにするレンダラーのパッケージ
  - **react-scripts**: 50個以上のパッケージ群を隠蔽してくれる。

コマンド実行が終わると、最後にメッセージが表示されるので、言われた通りに実行する。

```
$cd hello-world
$npm start
```
- コマンドを実行すると、ローカルにHTTPサーバーが3000番ポートで立ち上がってアプリが起動されてる！ブラウザにデフォルト画面が表示されました。

http://localhost:3000/

- Hello World!と表示させる為、App.tsxを編集

```
import React from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Hello World!
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}
export default App;
```
- Reactで作られるアプリケーションは全て「**コンポーネント（Component）**」の組み合わせで構成される
- Reactではコンポーネントの実装は関数またはクラスで定義する


## まとめ
- 第一回はいったんこれにて満足ｗ
今後、参考にしている本を読み進めて、さらに理解を深めていきます。 

> 参考
> 『りあクト！ TypeScript で始めるつらくない React 開発 第3.1版』
> https://booth.pm/ja/items/2368045
EC2インスタンス起動後に「DeleteOnTermination」を変更する

EC2インスタンス起動後に「DeleteOnTermination」を変更する

⓪対象のインスタンスの詳細を調べる
マネジメントコンソールから、「DeleteOnTermination」を変更したいEBSがアタッチされているEC2インスタンスの詳細を調べる。記録しておく情報は以下の通り。
・対象EBSがアタッチされているEC2インスタンスのインスタンスID
・対象EBSのデバイス名

①インスタンスの状態を調べる
以下のコマンドをAWS CLIから入力して、ボリューム情報を参照する。
```aws ec2 describe-instances --instance-id <インスタンスID> --query Reservations[].Instances[].BlockDeviceMappings[]
```

②①で表示された内容から以下の内容を確認する。
・⓪で確認した対象EBSのデバイス名
・⓪で確認した対象EBSのデバイス名の「DeleteOnTermination」の値（boolean）

③「DeleteOnTermination」の値を更新する
以下のコマンドをAWS CLIから入力して、ボリューム情報を更新する。
 ```aws ec2 modify-instance-attribute --instance-id <インスタンスID> --block-device-mappings DeviceName=<デバイス名>,Ebs={DeleteOnTermination=<false or true>}
```
※この時、IAMでEC2インスタンスを変更できるロールを保持していること。

④インスタンスの状態を調べる
以下のコマンドをAWS CLIから入力して、ボリューム情報を参照する。
```aws ec2 describe-instances --instance-id <インスタンスID> --query Reservations[].Instances[].BlockDeviceMappings[]
```
Collection Groupでサブコレクションをまとめてクエリ[Firestore]

Collection Groupを使うと、**異なるドキュメント配下の同名のサブコレクションをまとめて**クエリできます。

たとえば、

```
preference collection：県
　/document(京都、大阪、名古屋、岡山)
　　/specialty collection：名物
　　　/document([name:八ツ橋, type:sweet] [name: たこ焼き, type: meal] [name:ひつまぶし, type: meal] [name:きびだんご, type: sweet])
```
という階層があったときに、

specialty collectionは別々のpreferenceドキュメントに属していますが、specialtyのくくりでまとめてクエリできます。

#手順

###1,セキュリティルールを追加

グループコレクションでクエリを行うには、途中までのパスがワイルドカードになったruleをFirestoreに追加します。

```
match /{path=**}/specialty/{document} {
  allow read: if true;
}
```

###2,グループコレクションでクエリしてみる

Swiftの例は以下。他の言語は[公式ドキュメント](https://firebase.google.com/docs/firestore/query-data/queries?hl=ja)参照。

```swift
let db = Firestore.firestore()

db.collectionGroup("specialty").whereField("type", isEqualTo: "sweet").getDocuments { (snapshot, error) in
    // ...
}
```

このクエリは失敗します。
なぜなら、Collection Group queryをサポートする Index をFirestore に追加する必要があるからです。

###3,Index を追加
上記クエリを実行すると、**コンソールログにクエリに必要なインデックスを追加するためのリンクが表示されます。
ブラウザからそのリンクを開くと、必要なインデックスが自動で追加されます。**
Firestoreコンソールから手動で追加することもできます。

３までの手順を実行して、改めて2，のクエリを実行すると、specialtyコレクションのスイーツタイプをもつドキュメントのスナップショットが得られます。

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
NoSQLデータベース とは

## 勉強前イメージ

SQLを使わないデータベースってそのままのイメージしかない

## 調査

### NoSQLデータベース とは

Not only SQLの略で、
SQLを使用せずに使用するDBを指す分類用語のこと。
ビッグデータなどの分野で利用されることが多い
NoSQLとしては代表的なものでBigTableやDynamoDBがあります。

### RDB(リレーショナルデータベース)との違い

- 高速な処理

NoSQLではシンプルな構造にすることによって高速な処理をすることが出来ます。
例えばRDBであれば整合性のためのトランザクションを行っていますが、NoSQLではトランザクションが存在しません。

- 拡張性がある

RDBでは基本1台のサーバで動作するような設計になっていますが、データ量の増加に伴い処理性能が足りず低速になってしまいます。
NoSQLではスケールアウトがしやすく、拡張性が高い点がメリットになります。

### 4種類のデータモデル

NoSQLには大きく4種類のデータモデルがあります。
テーブル構造に固定することなく、さまざまな形式のデータをそのまま格納することが出来ます。

- キーバリュー型

キーとバリューのみのシンプルな組み合わせのモデルで、
データモデルがシンプルであることからデータを分割可能、
また応答速度が早くスケールアウトに最適なのが特徴です。

- カラム指向型

キーバリュー型にカラムの概念をもたせたモデルで、
行に付与されたキーが複数のカラムを持つことが出来ます。
カラム数は動的に追加が可能になります。

- ドキュメント指向型

JSONやXML形式で記述されたドキュメントの形で管理するモデルで、
ドキュメントは階層構造を持たず、相互の関係を横並びに管理します。
スキーマレスで格納することが出来ます。

- グラフ型

データとデータ間のつながりを管理するモデルで、
ノード、リレーションシップ(繋がり)、プロパティ(繋がりの関係性)で構成されており、
全体でグラフを生成シます。

### 3種類のアーキテクチャ

アーキテクチャは3種類になります。

- マスタ型

分散するデータベースのクラスタのノードのうち、メタ情報など管理するマスタノードが存在するアーキテクチャ。
マスタが全体の管理を行うので、対障害性を上げる必要がある

- P2P型

分散するデータベースのクラスタで、構成するノードすべて同等の役割を持つアーキテクチャ。
耐障害性への偏りがなく、スケールアウトがしやすい。

- イネーブラ型

他との組み合わせによって効果を発揮する。

## 勉強後イメージ

実は結構NoSQLのDBってあるんだなぁって感じ。
アーキテクチャのマスタ型・P2P型はよくみるなぁって思った。
分類用語だからふわっとしてるけど、ちゃんとDB触ったら分類がイメージできるんだろうな。。。

## 参考

- [NoSQLとは？従来のDBとの違いやメリット、活用事例を解説](https://products.sint.co.jp/topsic/blog/nosql)
- [NoSQLについて勉強する。](https://qiita.com/t_nakayama0714/items/0ff7644666f0122cfba1)
- [【超入門】RDBとNoSQLの違いに着目！NoSQLに求めるものとは？](https://tech-blog.rakus.co.jp/entry/20180919/nosql/bigdata)
- [NoSQLとは？](https://japan.zdnet.com/keyword/NoSQL/)
Pardot のリード生成 (Salesforce Classic) ⇒ Pardot でのプロスペクトとビジターの処理方法について

１．Pardot のメールは誰に送信されますか?
２．トラッキングコードは Pardot のどのオブジェクトにありますか?
３．Web サイトを訪問した匿名のビジターが Pardot のプロスペクトになるために必要なことは何ですか?
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634241/b51585d7-28b4-ce36-af8c-92cba8b17013.png)
【Laravel】.envを編集したが、migration時に反映されなかった


#事象
Laravelのmigrationを掛けたかった。
しかし.envのDB名が間違っていたため、修正をかけたが、反映されず修正前のDB名でエラーが出た。

###変更前

```text:.env
~
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=before #修正前
DB_USERNAME=root
DB_PASSWORD=
~
```


###変更後

```text:.env
~
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=after #修正後
DB_USERNAME=root
DB_PASSWORD=
~
```

しかし、beforeのDB名でエラー出力されました。

```
$ php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [1049] Unknown database 'before' (SQL: select * from information_schema.tables where table_schema = before and table_name = migrations and table_type = 'BASE TABLE')

  at /Library/WebServer/Documents/laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
    665|         // If an exception occurs when attempting to run a query, we'll format the error
    666|         // message to include the bindings with SQL, which will make this exception a
    667|         // lot more helpful to the developer instead of just the database's errors.
    668|         catch (Exception $e) {
  > 669|             throw new QueryException(
    670|                 $query, $this->prepareBindings($bindings), $e
    671|             );
    672|         }
    673| 

  Exception trace:

  1   Doctrine\DBAL\Driver\PDOException::("SQLSTATE[HY000] [1049] Unknown database 'before'")
      /Library/WebServer/Documents/laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31

  2   PDOException::("SQLSTATE[HY000] [1049] Unknown database 'before'")
      /Library/WebServer/Documents/laravel/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27

  Please use the argument -v to see more details.
$
```



#解決策
config(?)のキャッシュクリア

```
$ php artisan config:clear
Configuration cache cleared!
```


参考：Laravel キャッシュクリア系コマンドなど
https://qiita.com/Ping/items/10ada8d069e13d729701
curlコマンドのオプション一覧

curlコマンドを打つときにオプションをつけることがよくあるため、調べて備忘録として残します。
今後、新しいコマンドを使用する場合は都度更新していこうと思います。

## -X
　リクエストメソッドを指定

　TODO: 実際のリクエストとレスポンスを記載する

## -d
　リクエストメソッドがPOST時のパラメータを指定

　※パラメータはjsonとかXMLを指定できる
　　content-Typeヘッダがapplication/xml, application/jsonなどになる

　curl -X POST -d '{"name": "ken"}' https://example.com


## -L

 リダイレクトさせたい場合

　curl -X GET -L https://example.com

## -s
　レスポンスの結果だけを表示させたい

　普通にcurlを実行すると標準エラーを出力に以下のようにレスポンスの時間などが表示される

## -o
　通常では実行結果として取得するHTMLは標準出力に表示されるが、ファイルに出力することもできる

　curl -o /tmp/example.html https://example.com

## -w “%{http_code}
　オプションでステータスコードを表示

## -b 
　保存クッキーの送信
令和２年度データベーススペシャリスト試験受験レポート

## 前書き
令和２年度データベーススペシャリスト試験を受験した記録です。
勉強スケジュールや雑感を残します。

※令和２年度の春季試験は、新型コロナウィルスの影響で中止となり、データベーススペシャリストを含むいくつかの試験は秋季に開催されました。

## 当時のスキル
Webアプリケーションなど開発を３年。基礎的なIT知識と、DB操作は経験がある状態。
ただ、普段はフレームワークやGUIを通してしかDBに触れないため、物理的な知識はほとんどありません。（これは受験後もかわりませんでしたが。。。。）
DBスペシャリスト試験は初回の受験です。
前提として、２年前に応用情報技術者試験に合格しています。そのため午前Ⅰ試験は免除です。

## 教材

### [データベーススペシャリストドットコム](https://www.db-siken.com/kakomon/02_aki/)

主に、午前２（選択式）の対策のために利用しました。
また、知識分野がどんなものか知るため、受験勉強をはじめた初期に利用しました。

DBスペシャリストという分野にピンとこない方は、とりあえず過去問道場で20問くらい見てみるのがいいと思います。

### [徹底攻略 データベーススペシャリスト教科書 令和2年度(書籍)](https://book.impress.co.jp/books/1119101047)

過去問をやってみると、ベースの知識が足りないことが分かったので購入。

## 学習記録
* 1月
  * 受験勉強の開始。通勤時と帰宅時の電車で過去問を眺めるようになります。このころの正答率は4割程度です。

* 3月あたり
  * 春季試験中止の発表。正直勉強が間に合ってなかったで助かりました。

* 5月～7月
    * 秋季試験に向けて再度受験勉強を開始。このタイミングで、教科書を購入しました。
    * ひとまず過去問を解くのをやめて、教科書を読みすすめていた時期です。1日平均10ページくらいでした。応用もですが、資格試験の教科書はとても分厚いです。焦らずじっくり読めるくらいの期間を用意したいですね。教科書は２週しました。
* 8月上旬
    * 過去問を１回分解きます。足りない部分を認識するためです。この時の結果は、午前Ⅱ6割、午後I4割、午後Ⅱ５割ほどだったと思います。まだ合格できる成績ではありません。
* 8月中旬～9月
    * このあたりで、受験としての対策にシフトしました。過去問をメイン教材にして、１週間に１年分くらいのペースで進めます。５年分くらいやると、よく出る問題や、その年だけ特殊だった問題というところが見えてきます。また、難しい年、簡単な年というのもあるので、一通り経験しておきます。（平均点等を参考にする）
* 10月上旬（受験1～2週間前）
    * 週末１日使って、実際の受験日と同じ時程で過去問を解きました。データベーススペシャリスト試験は、1日に午前Ⅰ、Ⅱ、午後Ⅰ、Ⅱと、4つの試験を受ける長期戦です。試験時間は合わせて300分もあります。休日の午前に頭を使う感覚、長い間座って集中する感覚など、確認しておきました。この時の結果は、午前Ⅱ8割、午後Ⅰ6割、午後Ⅱ7割でした。
    * このへんはおまじないな部分もありますが、シミュレーションとしての精度が高いほど、同じパフォーマンスを確認できるかなというところです。どんな状況でも同じパフォーマンスが出せるメンタル強者は、実力を確認するために、こんな面倒なことは不要です。
* 10月18日
    * 受験日は、受けるだけです。試験会場は初めての場所でしたので、近所を調べたりしました。コンビニは遠いから昼飯は持って行ったほうがいいとか、そんなことです。前日の勉強は、苦手な午後Ⅰの過去問を解きました。

## 結果

| 試験| 得点|
|:----------:|:------------:|
| 午後Ⅱ|76点|
| 午後Ⅰ|69点|
| 午後Ⅱ|90点|

合格しました。

## 要点
* 長くゆっくり勉強するほうが日常を邪魔しないので、楽。
* 模試は、そのあとの勉強の指針になるので、やったほうがいい。
* 模試はできるだけ実際の受験を想定すると、本番に緊張しなくて済む。

## あとがき
平均すると、1日40分ほどの勉強時間を半年間、勉強しない日もあったので、総計は80~100時間くらいでしょうか。

設計の業務をもっとやってみたいという思いがあり、知識を身に着けるため受験しました。

受験勉強を通じて多少はDBやDB設計に詳しくなった気もしますが、実際の業務に生かせるかというと、微妙です。現実は、あるべき姿を実装できない様々な事情があります。

どちらかというと、業務でDBたくさん触ってるから、試しに受けてみるか、ぐらいの順番の方がいいかもしれないですね。
クリップボードに一瞬で現在時刻（日時）を入れる方法

### 方法

ファイル名を入力する時に、yymmdd_hhmm って感じの形式で日付をよく入力する人向けのスクリプトです。

```now.bat
@echo off
set /p x="%date:~2,2%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%" <nul | clip
```

これを、ユーザのディレクトリ（※）直下に入れて
（※ 例：C:\Users\myname\）

`Win+R → now と打つ → Enterキー`

これで、現在の日付が yymmdd_hhmm 形式でクリップボードにコピーされます。


### 備考

* set /p ～ <nul を使わないと、改行が入力されてしまいます。（また、仕様外の動作なので、バージョンによって変わる可能性も）
* ダブルクォーテーションで囲まないと、末尾にスペースが入ってしまいます。
* コマンドの中身を工夫すれば、yyyymmdd とか色々作れます。
* "now" だけでいいのは、コマンドプロンプトをユーザ権限で起動すると、カレントディレクトリが自身のユーザフォルダ（%USERPROFILE%）になっているからです。管理者権限で起動した場合はこのディレクトリにならないはずなので、その場合は %SystemRoot% か %SystemRoot%\system32 配下に置いてください。
* 同様に別ユーザーでも実行したい場合は、環境変数の通っている %SystemRoot% か %SystemRoot%\system32 配下に置いてください（例：C:\Windows\）。


### 参考

改行しないechoコマンドもどき - ITエンジニアの技術メモ
https://akrad.hatenablog.com/entry/2018/09/16/162045

改行コード・空白を付加しないでクリップボードに格納する方法 - teratail
https://teratail.com/questions/136612

dateコマンドでバックアップファイル作成時にファイル名に日付_時間を付ける (LinuxとWindows用) - Qiita
https://qiita.com/na0AaooQ/items/c26b637261d9962f981f
【Laravel】【mac】ドキュメントルートにしかアクセスできない

#環境
macOS Catalina 10.15.7

```
$ apachectl -v
Server version: Apache/2.4.41 (Unix)
```

```
$ php artisan --version
Laravel Framework 6.20.12
```

#事象
ドキュメントルート以外のページにアクセスできない。
(404 Not Foundとなる)

#解決策
```
$ sudo vim /etc/apache2/httpd.conf
~
LoadModule rewrite_module libexec/apache2/mod_rewrite.so ->このコメントアウトを外す
~
$ sudo apachectl restart
```

これだけで治りました。

ご参考：https://qiita.com/u-akihiro/items/c7a5bb38c34858d00c2a
Ubuntu版のご投稿ですが、内容はほぼ一緒です。
OpenFOAMにおける非定常境界条件の設定方法

#はじめに 
本記事ではOpenFOAM v8での__非定常境界条件（time-varying boundary condition）__の設定方法、特に速度変動の設定についてまとめます。元記事は、Foundationの[こちらのページ](https://cfd.direct/openfoam/user-guide/v8-boundaries/#x25-1770005.2)になります。

なお、以下では`pimpleFoam/pitzDaily`を使用しています。

## 速度一定
```c++:0/U
    inlet
    {
        type            fixedValue;
        value           uniform (10 0 0);
    }
```

## sine周期

![sine.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227359/eaf2e624-602d-8b81-05f3-d8c4a5a480a7.gif)


```c++:0/U
    inlet
    {
        type            uniformFixedValue;
        uniformValue    sine;
        uniformValueCoeffs
        {
            frequency       10;
            scale           (1 0 0);
            amplitude       (2 0 0);
            level           (10 0 0);
        }
    }
```

## 方形波

![square.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227359/e02dea2c-6092-7c0e-54f3-336c0610bf1c.gif)


```c++:0/U
    inlet
    {
        type         uniformFixedValue;
        uniformValue
        {
    ¦       type             square;
    ¦       frequency        10;
    ¦       scale            (1 0 0);  // Scale factor for wave
    ¦       amplitude        (3 0 0);
    ¦       level            (10 0 0);  // Offset
        }
    }
```

## テーブル

![table.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227359/52e6c7b5-5428-698f-2ae1-8575c4113f37.gif)

### 0/Uでの入力

```c++:0/U
   inlet
   {
      type            uniformFixedValue;
      uniformValue    table
      (
        (0 (0.0 0 0))
        (0.1 (1 0 0))
        (0.2 (2 0 0))
        (0.3 (3 0 0))
        (0.4 (4 0 0))
        (0.5 (5 0 0))
        (0.6 (4 0 0))
        (0.7 (3 0 0))
        (0.8 (2 0 0))
        (0.9 (1 0 0))
        (1.0 (0 0 0))
       );
       outOfBounds   clamp;
   }
```
Tableで規定された以降の条件は、Tableの最終時刻の値が反映されるようです。
これをリピートしたいなどは、`outOfBounds`の設定を`repeat;`や`error`、`warn`にします。

### ファイルでの入力

```c++:0/U
    inlet
    {
        type         uniformFixedValue;
        uniformValue
        {
            type             tableFile;
            file             "./0/dataTable.txt";
        }
    }
```

```csvs:dataTable.txt
(
        (0 (0.0 0 0))
        (0.1 (1 0 0))
        (0.2 (2 0 0))
        (0.3 (3 0 0))
        (0.4 (4 0 0))
        (0.5 (5 0 0))
        (0.6 (4 0 0))
        (0.7 (3 0 0))
        (0.8 (2 0 0))
        (0.9 (1 0 0))
        (1.0 (0 0 0))
);
```

テーブルファイルの記載方法は、[こちら](https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1Function1Types_1_1TableFile.html)を参考にすると良いです。


#


# まとめ
主要なものだけですが、非定常境界条件の設定方法をまとめてみました。
以前のバージョンではcsvの読み込みができていたのですが、v8では`tableFile`に統合されてしまったようです。chemkinファイルの直接の読み込みもできなくなっていますし、Foundationの開発方針が反映されているのでしょうか・・・。なくさなくても・・・と思わなくもないです。

# 参考サイト
- https://cfd-greenmarket.tumblr.com/post/181456273682/time-varying-transient-boundary-conditions
- https://cfd.direct/openfoam/user-guide/v8-boundaries/#x25-1770005.2
俺の論理演算子、条件演算子

こんにちは、フロントエンドエンジニアの[てりー](https://twitter.com/teriteri_code)です。
僕の詳しいプロフィールは[こちら](https://terrblog.com/about/)

TypeScriptを仕事で使いこなしたい人、TypeScriptの知識に不安がある人に向けて、具体的な勉強方法のロードマップをまとめました。


https://terrblog.com/react-typescript-how-to-master/


# 演算子
javaScriptで定義されている演算子は様々あります。
[JavaScript primer演算子](https://jsprimer.net/basic/operator/)

その中でReactでよく用いる演算子をまとめました。
# 論理演算子
##AND演算子（&&）
左辺がtrueなら右辺を。
左辺がfalseならそのまま左辺を返します。

## OR演算子（||）
&&の逆で左辺がtrueなら左辺を。falseなら右辺を返します。

#条件演算子
条件式　? trueの時の評価式　：flseの時の評価式

```javascript

const a = 3;
const b = 7;
const inNum = true;
console.log(inNum ? a : b); // aが評価されて「3」出力

```

## !! TypeScriptのオプショナル用の打ち消し

!!を付ける事で ``boolean | undefined``を``boolean``にすることが出来る。

オプショナルで``a?:boolean;``と定義してエラーが出ている時などは、これで対応できます。
【Git】基本コマンド



#はじめに
この記事には、Gitを使う際よく使う基本的なコマンドをまとめました。
⚠️当方初学のため認識違いがある可能性大です
誤りを見つけた際はコメントにて指摘していただけると幸いです🙇‍♀️🙇‍♂️


#参考文献
この記事は以下の情報を参考にして執筆しました。

- [GitHub実践入門](https://www.amazon.co.jp/GitHub%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-Pull-Request%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E3%81%AE%E5%A4%89%E9%9D%A9-PRESS-plus/dp/477416366X)
- [SAMURAI ENGINEER Blog](https://www.sejuku.net/blog/category/development-environment/git)


#目次
1. git init - リポジトリを初期化
2. git status - リポジトリの状態を確認
3. git add - ステージ領域へファイルを追加
4. git commit - リポジトリの歴史を記録
5. git log - コミットログを確認
6. git diff - 変更差分を確認
7. git branch - ブランチを一覧表示
8. git checkout -b - ブランチを作成し、切り替える
9. git merge - ブランチをマージ
10. git log --graph - ブランチを視覚的に確認する
11. git reset - 歴史を戻る
12. git commit --amend - コミットメッセージを修正
13. git rebase -i - 歴史を押しつぶして改変
14. git remote add - リモートリポジトリを登録
15. git push - リモートリポジトリへ送信
16. git clone - リモートリポジトリを取得
17. git pull - 最新のリモートリポジトリブランチを取得


#1. git init - リポジトリを初期化
リポジトリを新規に作成するときに使用するコマンド。 
initコマンドを実行すると、現在のディレクトリまたは指定したディレクトリに「. git」というリポジトリを構成するディレクトリが作成される。

#2. git status - リポジトリの状態を確認
現在の状況を確認するためのコマンド。 
具体的にはファイルの追加や修正、addでインデックスに登録など、現在どのような状態かを確認することができる。 

#3. git add - ステージ領域へファイルを追加
Gitのaddコマンドは追加されたファイルなどをバージョン管理の対象として追加するコマンド。

#4. git commit - リポジトリの歴史を記録
追加・変更したファイルをGitに登録するためのコマンド。
通常のファイル操作では変更した内容を上書き保存すれば、ファイルの内容が変更されるが、Gitのリポジトリに変更内容を登録（保存）するためには、git commitを使用する必要がある。

#5. git log - コミットログを確認
リポジトリの中に記録してあるコミット履歴（プログラムの変更履歴）を確認することができるコマンド。

#6. git diff - 変更差分を確認
異なるコミットと作業ツリーの比較するコマンド。
オプションにより、インデックス、任意のコミットなど対象を任意に指定できる。

#7. git branch - ブランチを一覧表示
ブランチ名の一覧を表示するとともに、現在のブランチを確認するためのコマンド。

#8. git checkout -b - ブランチを作成し、切り替える
新しくブランチを作成し、現在のブランチから新しいブランチに切り替えるコマンド。

#9. git merge - ブランチをマージ
現在のブランチ(HEADの指している場所)へ、他のブランチの更新を取り込むコマンド。

#10. git log --graph - ブランチを視覚的に確認する
コミットログをグラフでわかりやすく表示するコマンド。

#11. git reset - 歴史を戻る
Gitでコミットした内容を取り消すためのコマンド。
主にローカルリポジトリに対して行う。

#12. git commit --amend - コミットメッセージを修正
直前のコミットメッセージを修正するためのコマンド。

#13. git rebase -i - 歴史を押しつぶして改変
ミスがある歴史とその修正の歴史を含めてあたかもミスがなかったように改ざんするコマンド。

#14. git remote add - リモートリポジトリを登録
ローカルリポジトリにリモートリポジトリを登録するためのコマンド。

#15. git push - リモートリポジトリへ送信
現在のブランチのローカルリポジトリの内容をリモートリポジトリに送信するためのコマンド。

#16. git clone - リモートリポジトリを取得
既存のリポジトリをターゲットとして使用するGitコマンドラインユーティリティで、ターゲットリポジトリのクローンまたはコピーを作成するコマンド。

#17. git pull - 最新のリモートリポジトリブランチを取得
リモートリポジトリの最新の状態をローカルリポジトリに反映させるためのコマンド。
超入門！C#のクラスとインスタンス

# クラス
c#におけるクラスとは、簡単に言うと、各々で定義する処理を目的や種類別にまとめておける仕組みで、ものづくりの設計図によく例えられます。

- どの変数が、何を記録しているのか？
- どのメソッドが、どんな処理を行うのか？

といった事がわかりやすくなるメリットがあります。
実際のクラス定義は以下の様に行います。

```c#
class Actor{
    string name;
}
```

これで、string型のnameという変数を持ったクラスを宣言できました。
変数nameの様に、クラスが持つ変数を「メンバー変数」と呼びます。
今回の場合、メンバー変数を一緒に宣言する事で、nameという情報を持ったActorの設計図と作ったことになります。

### また、C#において、クラスは絶対的なルールとして扱われます。
その為、クラスを作らずに変数やメソッドを定義する事はできません。
この様に変数やメソッドをはじめとする要素それぞれが目的を持ち、グループ分けされる様な構造の言語をオブジェクト指向言語と言います。


オブジェクト指向に関しては、例えばC#で、Unityなどのゲームエンジンで開発する際は、特にわかりやすいかもしれません。
ゲーム上では、シーン上に出現する物体を、プレイヤーキャラクターや、敵キャラクター、背景、動作、音楽の様な、各々の目的と特性を持ったオブジェクトとして扱う為、役割が明確ですね。

# インスタンス
さて、クラスというグループを作り、物を作る設計図ができました。
この中に実際のボタンやキャラクターなどのオブジェクトを流し込んでいきます。


ここで、インスタンスという物を説明します。
一言で言うと、キャラクターの様な、クラスを元に作られた実体がインスタンスです。
具体的には、new演算子を用いて以下の様に生成します。

```c#

Actor act = new Actor();
```


何をやっているのかを解説すると、以下の様になります。

```
クラス名　インスタンス名　＝　new クラス名();
```


ここで、C#における変数の宣言方法を思い出してください。

```
型 変数名 = 値;
```
というコードで変数に値を代入するというルールがあります。
これはインスタンスを生成する際にも同様で、
new演算子を用いてインスタンス生成する際の、最初のクラス名は、データ型に相当します。

つまり、何が起きているのかというと
クラスを生成すると、そのクラスに対応した新しい型が出来上がるのです。

その為、インスタンスを生成すると、「クラス生成時に同時に生まれた新しい型」の変数に
「新しいインスタンス」が値として代入されます。


ここまでで、クラスの宣言と、からのインスタンスが生成されました。
クラスと一緒に、メンバー変数も宣言していますので、メンバー変数の中身も代入しましょう。


先ほどインスタンスを代入した変数actに対して、以下の様にするとメンバー変数nameに値を代入できます。

```c#
act.name = "太郎";
```
これで、Actorクラスから太郎というnameを持ったインスタンスが出来上がりました。
React17 Babel7.12.12で、HTML CDN を使ってReactアプリ試作環境を作る

# はじめに
タイトルの通りです。

React16 CDN でHelloWorld JSXありなし両方 - Qiita
https://qiita.com/standard-software/items/0cdbcdb2a6d6355c946b

上記記事の最新バージョンです。

先の記事では、HTMLファイル単独でした。今度はjsファイルを別にして開発します。

あとで書きますが、HTML ファイルと Jsファイルを別々にするので、Webサーバーを使って開発する必要があります。

# ファイル

ファイルです。

```html
<!DOCTYPE html>
<html>
  <head>

    <script src="https://unpkg.com/react@17/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
    <script src="./Button.js" type="text/babel"></script>
    <script src="./Application.js" type="text/babel"></script>

  </head>
  <body>
    <div id="root"></div>

  </body>
</html>

```

```js:Application.js
class Application extends React.Component {

  constructor(props) {
    super(props);

    this.state = {
      counter: 0,
    }

    this.onClick = this.onClick.bind(this);
  }

  onClick() {
    let { counter } = this.state;
    counter += 1;
    this.setState({ counter });
  }

  render() {
    return (
      <div>
        <span>{this.state.counter}</span>
        <Button
          onClick={this.onClick}
          text={this.state.counter}
        />
      </div>
    );
  }
}

ReactDOM.render(<Application />,
  document.getElementById('root'));
```

```js:Button.js
class Button extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <button
        onClick={this.props.onClick}
      >
        {this.props.text}
      </button>
    );
  }
}
```

これらを同一フォルダに配置して、Webサーバー経由で起動してください。

すごく簡単ですが次のようなボタンを押すと、テキストとボタンテキストがカウントアップされるページが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96423/e485420b-781e-0b04-7aa9-a00b705931e1.png)


Webサーバーを起動するには次の記事などご参考ください。

ライブリロード(ファイル更新監視)してくれるWebサーバー browser-sync のはじめの一歩 - Qiita
https://qiita.com/standard-software/items/7a1d237133f0fe7961fd

node.js http-serverコマンドでwebサーバーを起動する - Qiita
https://qiita.com/standard-software/items/1afe7b64c4c644fdd9e4

# ローカルファイルでブラウザ起動はできない

HTMLをローカルファイルとしてブラウザ起動だと次のようなエラーが出てしまうのでご注意ください。
jsファイルが他のサイトにあるから動かないよ、というエラーです。

画面はWindowsです。

```
Access to XMLHttpRequest at 'file:///C:/.../Button.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.
babel.min.js:1 GET file:///C:/.../Button.js net::ERR_FAILED
(anonymous) @ babel.min.js:1
yq @ babel.min.js:1
(anonymous) @ babel.min.js:1
Cq @ babel.min.js:1
kq @ babel.min.js:1
index.html:1 Access to XMLHttpRequest at 'file:///C:/.../Application.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.
babel.min.js:1 GET file:///C:/.../Application.js net::ERR_FAILED
```
JavaScriptコードがHTMLファイル内にかかれていれば、ローカルファイル起動でも動くのですが、jsファイルがHTMLファイルと別になっていると、ローカルファイル起動では動きません。

以上です。
M1 Mac Homebrew,Tensorflow,keras,pillow,...etc導入

M1搭載Macにて現時点で躓いてきた点がいくつもあったので一応残す（長くなりそう）


2021.01.24 追記
結局M1でやりたいこと全てやるには、M1に対応するのを待ったほうが
良さそうだったので、とりあえず、X86向けの仮想環境を作成してそこでpython動かす
が、途中までやったのはそのままにしたい為、x86用仮想環境を作成したので
どう作るかわからない方は、以下記事を参考にとりあえずの仮想環境を作成してみて下さい
https://qiita.com/inosuke-hashibira/items/690b5792e39d07daab8e

#目次
#####①:TensorFlow macos導入時に公式からpythonダウンロードしていて厄介なことになった
#####②:pipが効かない(homebrew)
#####③:Kerasがimportできない(解決したが何かと曖昧)
#####④:Pillowがimportできない(matplotlibがinstallできない)
----------------
順番にどう解決していったかリアルを載せます

---
#####①:TensorFlow macos導入時に公式からpythonダウンロードしていて厄介なことになった

これに関しては、すでに記事にしているので以下の記事参考ください
↓↓
https://qiita.com/inosuke-hashibira/items/0d0e50d4e49fc2f78b42
（ざっくり言うと、余分なpythonの消し方です）

---

#####②:pipが効かない(homebrew)
これに関してもすでに記事にしているので以下を参考ください
↓↓
https://qiita.com/inosuke-hashibira/items/ba7e0e5579f66389f8d7

---

#####③:Kerasがimportできない(from tensorflow import keras)
(環境python3.8.2)
これがかなり曖昧。
自分がこれに引っかかっていた状況としては、
・https://qiita.com/tomoyaeibu/items/46f2f3384a370df71d5e
　上記の記事にて、TensorFlow macosインストール済み（仮想環境も構築）
・②にて、ターミナルをRosettaを使用して開く設定になっている

やったこと
1.ターミナルを「Rosetta使用して開く」を解除
2.①の時と同じやり方、同じインストール先でもう一度TensorFlow macos入れる
　　(binフォルダが更新される)※下記コードが①記事と同じコードです

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/apple/tensorflow_macos/master/scripts/download_and_install.sh)"
```

3.brewでpython3.9インストール（関係ないはず）
　結局3.8.2使用してるし関係ないはず...homebrew updataみたいな文言が出たからもしかしたら...
4.reboot(再起動)

以上の４つがやったことです
Rosettaは最初に外し、2のをやって念の為３をやって、これまた念の為４をやって,ダメでまた2をやったら
みたいに半ばヤケクソにやってたらできました。笑
わかる方、いたらコメントください。笑

---

④Pillowがimport出来ない(matplotlibがインストールできない)

```
pip3 install matplotlib
```
(上記によりpillow8.1.0が一緒に入ります)
で上手くいかないといった記事をよく見かけましたが自分は問題なく行きました
しかし、
from PIL import Image
でエラーを吐きました(libjpegと言うものが必要)
そこで行うのが以下のコマンドです

```
brew install libjpeg
```

確認で

```
brew list
```

でjpegがあれば正常にインストールできて
from PIL import Image　これも上手くいくと思います

おそらく、pip3 instal matplotlib が失敗した人もこれで解決するかな。多分

ちなみに
###brew installの時は、ターミナルを、Rosettaを使用して開いていて
###pip installの時は、Rosetta解除してます

何か解決できないことや
事細かにわかったことがあれば教えて下さい
基本情報技術者 出題率100％ 稼働率

#【基本情報技術者 出題率100％ 稼働率】

インプレスさんの基本情報技術者過去問題集を参考にさせていただき、稼働率について学習しました。

##稼働率

<strong>システムの運用時間全体のうち, 実際にシステムが稼働している時間の割合</strong>
稼働率は、システムの可用性の指標になる。

稼働率 = 稼働時間 / 運用時間

##MTBF と MTTR

MTBF（Mean Time Between Failures） = 平均故障間隔
　→システムが前回故障してから、次に故障するまでの間隔の平均。
　　長いほど、信頼性が高いといえる。

MTTR（Mean Time To Repair） = 平均修理時間
　→システムの修理にかかる時間の平均。
　　短いほど。保守性が高いといえる。

稼働率 = MTBF / MTBF + MTTR

##直列システムの稼働率

稼働率 = 稼働率A × 稼働率B

##並列システムの稼働率

稼働率 = 1 - (1 - 稼働率A) × (1 - 稼働率B)

##問

MTBFが100時間で、MTTRが10時間の装置がある。
この装置を二つ直列に接続したシステムの稼働率は幾らか。

45 / 45 + 5 = 0.9
0.9 × 0.9 = 0.81

###参考

インプレスさん ありがとうございました。
[かんたん合格 基本情報技術者過去問題集 令和2年度秋期](https://www.amazon.co.jp/PDF%E3%83%BB%E3%82%B9%E3%83%9E%E3%83%9B%E5%8D%98%E8%AA%9E%E5%B8%B3%E4%BB%98-%E3%81%8B%E3%82%93%E3%81%9F%E3%82%93%E5%90%88%E6%A0%BC-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E9%81%8E%E5%8E%BB%E5%95%8F%E9%A1%8C%E9%9B%86-%E4%BB%A4%E5%92%8C2%E5%B9%B4%E5%BA%A6%E7%A7%8B%E6%9C%9F/dp/4295008885/ref=sr_1_1?adgrpid=60125268664&dchild=1&gclid=EAIaIQobChMIvM_u_del7gIVEARgCh2O6wANEAAYASAAEgLhvPD_BwE&hvadid=338520213528&hvdev=c&hvlocphy=9053306&hvnetw=s&hvqmt=b&hvrand=338671243856392765&hvtargid=kwd-298566975786&hydadcr=26606_10270258&jp-ad-ap=0&keywords=%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85+%E9%81%8E%E5%8E%BB%E5%95%8F%E9%A1%8C%E9%9B%86&qid=1610979983&s=books&sr=1-1&tag=googhydr-22)
deviseコントローラーで出逢ったsuperについて調べてみた

#はじめに
ユーザー管理でdeviseを使っています。コントローラーをいじっていると、メソッドの中に`super`とだけ記述があるメソッドがあったので、疑問に思い、調べてみました。

##deviseのコントローラー

```bash
rails g devise:controllers user
```
でコントローラーを生成しています。

```ruby:user/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
  （略）
  def update
    super
  end
  （略）
end
```
どうやら、`Devise::RegistrationsController`クラスから継承されているようです。
いくつかのメソッドの中に`super`が存在します。

##superとは
ずばり、<font color=red>superは、継承元のメソッドを呼び出すことができるメソッド</font>です。
上記のコントローラーを例にすると、
`Devise::RegistrationsController`にもupdateメソッドが記述されており、
この`Users::RegistrationsController`でも同じ処理をすることができるということです。

###他の例では…
以下は調べている中で、よく見かけた説明です。

```ruby
class Tennis
  def ball
    puts "Tennisball"
  end
end

class Sports < Tennis
  def ball
    super
    puts "balls"
  end
end

sports = Sports.new
sports.ball
#=>Tennisball
sports = Sports.new
sports.ball
#=>balls
```
自分で例えとして作ったら、意味不なコードになりました…
要は、継承後に同じ名前でメソッドを作っても、superを使えば、オーバーライドする前の処理を呼び出すことができるということです。
【Nuxt.js】v-data-tableにリンクを埋め込む

v-data-table内ではNuxt-linkがうまく機能しなくて困っていましたが、
v-btnに「:to=」でリンクを仕込めました。
アイコン型のリンクする場合、v-btnの中にv-iconを組み込む。



```
<v-data-table
 :headers="headers"
 :items="指定したいテーブル"
  item-key="id"
>
  <template v-slot:[`item.actions`]="{ item }">
    <v-btn
      icon
      :to="'/任意のリンク' + item.id"
      nuxt    
     >
     　<v-icon dark>
        mdi-pencil
       </v-icon>
    </v-btn>
  </template>
</v-data-table>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264619/06b618b5-da75-2a0b-b92d-26bd15b1187b.png)

◆header部

```
headers() {
        return [ 
　　　　　　※他の項目は省略しています
             {
            text: '操作',
            value: 'actions',
            sortable:false,
             }
          ]}
```

◆バージョン情報
　"nuxt": "^2.0.0"
　"vue": "^2.6.12"
　"@nuxtjs/vuetify": "^1.11.2"
~w(one two three)    Elixir

# はじめに
- [Elixir](https://elixir-lang.org/)楽しんでいますか:bangbang::bangbang::bangbang:
- これはご存知の方も多いとはおもいますがご紹介しておきます

# ~w
```elixir
iex> ~w(one two three) 
["one", "two", "three"]

iex> ~w(one two three) === ["one", "two", "three"]
true
```

なわけです。

- ドキュメントは https://hexdocs.pm/elixir/Kernel.html#sigil_w/2 です
- [~W](https://hexdocs.pm/elixir/Kernel.html#sigil_W/2) もあります
    - https://hexdocs.pm/elixir/Kernel.html#sigil_W/2
- [~w](https://hexdocs.pm/elixir/Kernel.html#sigil_w/2)のほうは、`#{変数}`ってのがあったときに展開されます
  - [~W](https://hexdocs.pm/elixir/Kernel.html#sigil_W/2)のほうは展開されないわけです


# Wrapping Up 🎍🎍🎍🎍🎍
- 今日は、[autoracex #3](https://autoracex.connpass.com/event/201887/)を開催していました
    - [たった一人のオリンピック](https://www.amazon.co.jp/dp/4040823869)状態です
    - [autoracex](https://autoracex.connpass.com/)ってなに？
        - https://autoracex.connpass.com/
        - 私がたちあげた[Elixir](https://elixir-lang.org/)のリモートもくもく会です
        - テーマ曲は[Elixir](https://elixir-lang.org/)の紫色にちなんで、もちろん[セクシャルバイオレットNo.1](https://www.youtube.com/watch?v=mCdbIwyVcuE)です
        - 第1回はなんとなんと日本マイクロソフト賞を受賞しちゃったりなんちゃったりしました:tada::tada::tada:
            - [autoracex はじめました (Elixir)](https://qiita.com/torifukukaiou/items/a519d326934a37ded9d9)
            - [#Qiitaアドカレ 日本マイクロソフト賞 5 名 (Azure x Python, Cloud Native)](https://qiita.com/chomado/items/7d1f757f18c5b442fadd#%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88%E8%B3%9E-%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE-aspnet-core-%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%99%E3%82%8B-%E3%82%92%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-torifukukaiou-%E3%81%95%E3%82%93) -- @chomado さん
- 23:00過ぎちゃったけど[Elixir](https://elixir-lang.org/)のことなんにもやっていなくてそれじゃあ開催したことにならんでしょ！　と急造で記事をこさえました
- Enjoy [Elixir](https://elixir-lang.org/) :rocket::rocket::rocket:
[Swift]定数と変数

#[Swift]定数と変数
定数と変数は値の一時的な保存に使います。
処理の結果を保存することによって、後続の処理で再利用できます。
変数は値の再代入が可能ですが、定数は一度代入したら値を変更することはできません。

##宣言方法
変数はvarで定数はletを使います。

```
var 変数名:型名
let 変数名:型名
```
変数名aとbに3を代入します。
Int型で宣言します。

```
var a:Int=3
let b:Int=3
```
#値の代入方法
次に、aとbに1を代入します。

```
a=1//1
b=1//コンパイルエラー
```
結果を見たら一目瞭然ですが、aに1を代入することは可能ですが,bに1を代入することはできません。
WinSCP で SSH 秘密鍵を使ったサーバへの接続方法

# WinSCP を使ってみよう

WinSCP は、SCP・SFTP などのセキュアにファイル交換をする仕組みを持った GUI のツールです。

今回はインストールが無事終わったところから始めます。

また、SSH の鍵を作成する方法は

https://qiita.com/evakichi/items/4f5aa91cd39615d011c2

を参考にしてくださってもよいでしょう。

## データを交換したいサイト(サーバ)の記入

まずは。データを交換(転送など)したいサイト(相手方サーバ)の登録をします。

WinSCP を開くとまずはこんな画面が出ます。
![WinSCP1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/08b939d4-b2fe-4fc8-cc5c-f7361c345062.png)
左上の「新しいサイト」を選択して。

①に接続したいサーバ名もしくは IP アドレスを記入します。
②に接続先で使用するユーザ名を記入します。

![WinSCP2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/24691f86-1279-1ed0-9df1-4f8d63e7d05c.png)

例えば、こんな感じ。

## SSH 秘密鍵の登録

次に、秘密鍵を登録します。

パスワード記載欄(今回はここでは記入しません)の下に「設定」というボタンがあります。
![WinSCP3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/26ed2172-86b9-b35d-d513-2bf87ff54fc0.png)
③そこの中から「設定」を選択します。

すると、次のような画面が出ますので
![WinSCP4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/c3972b14-fc4f-6cbc-491b-95eadc4308da.png)
④「SSH」→「認証」を選択します。

そうすると、次の画面になりますのでここの

![WinSCP5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/8a680a83-1cec-8fb8-9c45-ea12bf26bc84.png)
⑤「秘密鍵」のところの「...」をクリックします。
![WinSCP6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/1dc723a1-15eb-5a1c-29d8-5c9c339a921b.png)

そうしたら、秘密鍵の場所を聞いてきますのでサーバに登録している SSH 公開鍵と対になっている秘密鍵「.ppk」ファイルを選択して、「開く」をクリックします。

![WinSCP7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/3560f820-7a11-564e-78c5-c09f468f714a.png)
これで、登録完了です。「OK」を押してこの画面を閉じます。

## いつでも使いやすいように保存
そしたら、このサーバの設定を保存しましょう。

![WinSCP8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/5a755a50-3b42-fbec-a275-7b047ebe41ee.png)
先ほど指定したサーバの情報の下にある
⑥保存ボタンをクリックします。

そうすれば、つぎのようなダイアログが出てくるので、
![WinSCP9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/40e36735-e3b7-722b-b64c-3c49245eeef0.png)
セッションの保存名を決めて「OK」ボタンを押します。

## つなげてみよう
![WinSCP10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/73659bda-e4f7-9369-8ef3-073ce8dcccf2.png)
先ほど保存したセッション名を選択して「ログイン」ボタンを押します。

![WinSCP11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494348/b9287a26-e60e-7e76-7f62-7c09e32ae323.png)
そして、サイトにアクセスるためのパスフレーズを聞いてきたらその指示の通りにパスフレーズを入力していただければ
めでたく接続となります。
Railsで個人開発してたら、Railsがめっちゃ叩かれて辛みだった話

こんにちは、だむはです。

去年の12月に個人開発している「sister」というサービスをリリースしたのですが、開発中にRails叩きがおこり、辛みだったので、その時のことをかこうと思います。ちなみに、サービスはまだベータ版です。

##「sister」ってどんなサービス？
「sister」は一言で言うと、IT業界に特化した女性向けのキャリア/スキルシェアサービスです。MENTAから多大なる影響を受けています。MENTAは「師弟関係」、sisterは上下関係をもたない「姉妹関係」と言う部分でシスターフット大切にしていこう！って感じです。

興味があったらみてってください。
[あなたのsisterを探そう](https://sisterwith.com)

##環境

sisterの開発はこんな感じです。

・Ruby
・Rails
・Stripe
・AWS S3
・Heroku
ちなみにローカルはDockerです。

はい、フロントエンドにモダンな技術も使ってないし、インフラもAWS使ってないです

##なぜこの環境なの？

それは、純粋に私が一番使える言語がRailsだったからです！
Herokuはデプロイ楽だし、お金の管理がしやすいからです！
理由はこれだけ！

##開発期間

2020年9月〜12月の約４ヶ月くらいです。
実はもともとポートフォリオとして、少しだけ作って放置していたものをベースに作りました。

作業量としてはこんな感じです。
・仕事終わりに3時間くらい週３
・土日4−5時間（やったりやらなかったり）

だらだらやっても終わらんと思って、12月に入り、今年中にリリースすると決めてからは、ほぼ毎日夜中まで実装してました。

##事件は突然起きる、、、

12月の中旬くらいに突如、Twitterのトレンドに「Rails」があがったのです。
Twitterで定期的に起こる、Railsフルボッコ現象でした。。。

###不安になる私
実はsister開発中も何回か「Railsはオワコン」とかの記事を見ていたので、私も、フロントエンドにReactで、Firebaseを導入しようとしてみたり、AWSに環境構築しなおそうかなとか考えてみたり、いろいろとTryしてみようとしたのですが、全て諦めました。

諦めた理由は、時間をかければ取り入れられますが、私が技術力不足で新しいことを取り入れようとすると、インプットにかなり時間をとられるので、サービスリリースを最優先しようと判断したからです。

しかし、、、
12月中旬、、、
Twitterのトレンドに「Rails」があがるほどのフルボッコ、、、

さすがに、うわーやばいのかなー、、Railsで開発するのやばいのかなーーと不安が再熱してしまいました。

私はどっちかというと、技術にめっちゃ興味がある方ではないのですが、やっぱりエンジニアとして、モダンな技術は使いたいし、sisterをリリースしたときに「どんな技術使ってるんですか？」と聞かれたら、モダンな技術つかってますって言ってみたい。

###私は立ち止まって考えた

私は立ち止まって考えてみました。

自分は何がしたいんだ？目的はなんだ？
個人開発は技術力向上が目的なのか？
新しい技術を使うために始めたのか？

**違うだろ！！**
**自分が作りたいサービスがあって、それを世にリリースしたいからだろ！！**

と、本来の目的を思い出しました。

ちゃんと説明すると、
**「モダンな技術を身につけることではなく、サービスをリリースすることがいちばんの目的」**
ということです。

###そして私はリリースまで駆け抜けた

12月中旬の出来事だったので、ここで新しい技術を導入することはリリースを遅らせることにつながるのもありましたし、サービスをまずリリースすることが目的だったので、雑念を消して、寄り道せず、リリースまで駆け抜けることができました。

こうして、「sister ベータ版」は無事、12月中にリリースされたのでした。

##エンジニアと個人開発

「sister」開発中は、エンジニアとしての自分と個人開発者としての自分が葛藤していました。
もちろん、個人開発者はエンジニアなんですけど、違う部分としては自分が開発しているサービスをどうしたいのかが最優先なのかなって、個人開発しながら思いました。

エンジニアとしては、モダンな技術使いたい！流行ってる技術使いたい！って気持ちがあるけど、**実際ユーザーが使う時って、裏で何使ってるか全く気にしてないよね？って部分です。**

##最後に
現在、「sister ベータ版」はリリースして３週間くらいたっていて、80人以上の方にご登録いただいています。

IT業界に特化した女性向けのサービスと言うこともあり、ターゲット層の母数自体が少ないため、最初は20ー30人くらいかな〜と予想していたのですが、予想より反響があったので、嬉しいです。改修がんばろう！ってなります。

ベータ版としてミニマムで早くリリースすることで、ユーザーの反応を早めにみれたのが、本当良かったかなと思ってます。

結論、どんなときも、何を目的をするかがいちばん大事。
そして、個人開発で学べることは多い！

最後まで、読んでいただきありがとうございました！


##おまけ
「sister ベータ版」もよろしくお願いします！
[あなたのsisterを探そう](https://sisterwith.com)
【C#における変数と型変換（キャスト）】

# 変数の宣言と代入

C#では、変数に値を代入する際に、変数名の前にデータ型の種類を記載する必要があります。

```c#
int x = 123;
float y = 42.195f;
```
この場合、変数xに123というint型の値を代入しています。


なお、実数を扱うfloat型の場合、値の末尾にfを記述し、値がfloat型である事をさらに明記します。
(実数を扱う別の型である'double型'等と明確に区別する為)
末尾の記述はデータ型ごとにルールがあるので、都度、調べてみてください。

また、今回の様に宣言と代入を同時に行う際には”変数の初期化”と呼びます。


# 変数の型変換（キャスト）
変数に値を代入する際には、異なる型の値を代入することはできません。
その為、以下の様なコードではエラーが発生します。

```
(誤った例)
int y = 42.195f;
```

このエラーを解消するために用いるのが、” 型変換（別名：キャスト) ” です。
型変換により、異なる型の値を別の型に変換して代入できます。

実際の型変換のコードは以下の通りです。

```
(正しい例)
int z = (int)42.195f;

または、
float y = 42.195f;
int z = (int)y;
```


これで、float型で扱うべき値をint型に変換して、変数zに代入することができました。
(int型として宣言された変数zを呼び出すと、小数点以下は切り捨てられますが、これはエラーではありません。)

また、型変換はどんな型同士でも可能というわけではありません。
数値同士の型変換など、関連性のある型同士に限りますので注意が必要です。
リーダブルコード読んで意識していきたいことをまとめる part4

[前回](https://qiita.com/gal1996/items/3cbba8f42c2364e8109b)の続き

# 8章　巨大な式を分割する

## 説明変数を導入する。
例えば、ifの条件式のところに `if(name == "hoge")` と書くところを `isNameHoge = name == "hoge"; if(isNameHoge)` と書くと条件式が読みやすくなる。ここでは条件が簡単なのであまり効果はわからないが、条件が複雑な時にはコードが読みやすくなる。

## ド・モルガンの法則を使う
ド・モルガンの法則を使うと `!(a || b)` を `(!a && !b)` と書き換えられる。これはどっちの方が読みやすいかを考えて使うのが良さそう。必ずしも分配した方（後者の条件）が読みやすいとも限らないし読みやすい方をその場に応じて選ぶのが良さそう。けど、前者を脳味噌で理解すると `aまたはbでない` ってなっていまいちパッとこないかも。後者のが基本的には読みやすいのかな。。

# 9章　変数と読みやすさ

## 一度だけ書き込む変数を使う
これは極力値はイミュータブルの方がいいよねという話。よくある話だし自分はgoとscalaをよく書くのでscalaの方でよく触れる。けど、golangではあんまりそういう考え方ないなーと思ってgolangではどういう考えなのか気になったから今度調べてみらい。
9章は割と意識できてることが多かった。基本的に脳味噌にスタックしておかなきゃいけない情報を減らしたっていうことがメインで話されてた気がする。

# 10章　無関係の下位問題を抽出する

## アプリケーションコードから、低レベルな処理を関数として切り出す
例えば、複数地点の情報を持った場所の情報の配列あるとする。これらの中から最も近い2点を見つけるアプリケーションコードがあった時に、それぞれの2地点間の計算ロジックは「複数地点の中から最も近い2点を見つける」という本質からはずれてくる。こういった本質（いわゆるビジネスロジック的な？）ものとずれてくるものを関数として切り出してアプリケーションコードを純粋にきれいに保つ。それ以外にも、アプリケーション固有でなく完全に汎用的な関数を切り出したり、使いづらいインターフェースのラッパーを自作してアプリケーションコードが汚れていくのを防ぐことができる。

今日はこの辺で。
Amazon Braket のゲート型量子コンピュータで指定できる量子回路

# この記事について
- メモです。
- Amazon Braketにおいてゲート型量子コンピュータであるIonQ、Rigetti Aspen-8と量子シミュレータであるSV1シミュレータでどんな量子回路を使うことができるかを確認する方法を示します。
- 記事作成日は 2021/01/18のものなのでその時に使えている量子回路群を示しています。

また、量子コンピュータ関係の他の記事は、下記で紹介しています。

https://qiita.com/shnchr/items/41fa7fd1284d74007a7c

# AmazonBraketで指定できる回路群の確認
最低限 AwsDeviceをimportする必要があります。
どのデバイスを使うか指定する必要があります。
確認したいデバイスがある場合は下のソースコードでコメントアウトを外してください。

```python
# SV1の指定
device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")

# Rigetti Aspen-8の指定
#device = AwsDevice("arn:aws:braket:::device/qpu/rigetti/Aspen-8")

# IonQの指定
# device = AwsDevice("arn:aws:braket:::device/qpu/ionq/ionQdevice")
```

あとは以下のコードを実行するだけで確認できます。

```python
device_properties = device.properties
device_operations = device_properties.dict()['action']['braket.ir.jaqcd.program']['supportedOperations']
print('Quantum Gates supported by this device:\n',device_operations)
```

# 比較
比較してみます。
上記のソースコードで確認したいデバイスでコメントを外してください。
それぞれの回路で以下のような量子回路セットを表現できます。

SV1

```
['ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'cy', 'cz', 'h', 'i', 'iswap', 'pswap', 'phaseshift', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'unitary', 'v', 'vi', 'x', 'xx', 'xy', 'y', 'yy', 'z', 'zz']
```

Rigetti Aspen-8

```
['cz', 'xy', 'ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'h', 'i', 'iswap', 'phaseshift', 'pswap', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'x', 'y', 'z']
```

IonQ

```
['x', 'y', 'z', 'rx', 'ry', 'rz', 'h', 'cnot', 's', 'si', 't', 'ti', 'v', 'vi', 'xx', 'yy', 'zz', 'swap', 'i']
```

回路設計をする際には是非参考にしてみてください。
ListTileでBoxFit.coverを指定したのにサムネイルが拡大されない問題の対処


FlutterのListTileはマテリアルデザインに沿ったリストを作成するのに便利ですが、leadingに画像を配置するとBoxFit.coverを指定しているのにもかかわらずサムネイルが思ったように拡大しません。（高さに制限がかかっているらしい？）

```dart:listtile.dart
child: ListTile(
        leading: Container(
          child: Image.network(listModel.thumbnail, fit: BoxFit.cover,),
        ),
```

<img width="300" alt="list1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133311/bcc38f1d-2c66-ac8a-1d2c-e152b4effe3d.png">

サムネイルを拡大したい場合はRowとColumnを使います。
Rowで縦に区切るイメージです。画像のサイズはContainerのwidthとheightで変更します。

```dart:row.dart
child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Container(
            width: 90,
            height: 90,
            child: Image.network(listModel.thumbnail, fit: BoxFit.cover),
          ),
```

<img width="300" alt="list2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133311/2fcc36c9-1e0e-54f9-44d7-1ad5e194143f.png">

この記事を書くにあたって作成したサンプルコードを置いておきます。
https://gist.github.com/Hecatier/2c73c29a15f284340e4ffffd5a1d3f1f
GASでシフト自動作成ソフト作ってみた

作成したスプレッドシート↓↓
https://docs.google.com/spreadsheets/d/1D1Shq5GaVnSMqiSf3hxXynWdYd79-gQXjZP221GnVQ4/edit?usp=sharing

-仕様-

従業員は
R(レギュラー)、H(派遣)、P(パート)、A(アルバイト)の４種類
Rは基本営業時間内でシフトタイム、それ以外は希望時間内で早(早番)、中(中番)、遅(遅番)に振り分ける

それぞれに希望休(日)、希望休(曜)、有給、週何回出勤、勤務時間の入力欄を準備その入力内容をもとにシフトを作っていく。

シート(月予定表)の「シフト作成ボタン」を押して月の出勤日を作成、
その後ドロップダウンリストで作成したい日数分(最大7日)の日にちを選択し「日にちシフト作成ボタン」を押して日にちごとのシフトを作成。

-改善点-
少人数であれば問題なく動くが人数が多くなるにつれてエラーが出やすくなる。　→　元々のアルゴリズムを考え直さないといけない。
AWS認定試験(SAA-C02)の合格談

AWS 認定 ソリューションアーキテクト – アソシエイト(SAA-C02)に合格できたので、
勉強や合格までの道のりを備忘録として記載します。

#はじめに
**受験時期**：2020年12月
**試験**：AWS 認定 ソリューションアーキテクト – アソシエイト(SAA-C02)(⇒以後**SAA**)
**試験形態**：試験センターにて受験
**試験時の知識レベル**：[Udemy教材](https://www.udemy.com/course/aws-associate/)の疑似問題で正答率50%

#AWS認定試験の試験歴
1度SSAに落ちた後、AWS 認定 クラウドプラクティショナー(以後**CLF**)を受験し合格、
その後SAAを再度受験し合格という流れで今に至ります。

<dt>2019年4月～2019年12月<dd>SAA(SAA-C01)の勉強期間</dd></dt>
<dt>2019年12月<dd>SSA(SAA-C01)受験⇒不合格(正答率は約半分)</dd></dt>
<dt>2019年12月～2020年1月<dd>目標をSAA(SAA-C01)からCLFに切り替えて勉強</dd></dt>
<dt>2020年1月<dd>CLF受験⇒合格(合格点ギリギリ)</dd></dt>
<dt>2020年5月~12月(1月～4月はブランク)<dd>SAAの勉強期間</dd></dt>
<dt>2020年12月<dd>SAA受験⇒合格(合格点ギリギリ)</dd></dt>

#背景
AWS認定試験の勉強を始める前(2019年4月以前)の知識としては、
仕事でAWSは使用しているが、触るのはコンソールからインスタンスの開始、停止のみで
あまり概念などもわかっていない状況から開始しました。
また、基礎となるクラウドやネットワークの知識もほぼない状態でした。。。
（VPN？、VPC？、DNS？とかも何のことかわからないぐらい）

#試験勉強
いろいろな教材(公式Blackbelt、試験対策本、試験対策問題集、Udemy等々、
他の方も記事を投稿しているような教材のため割愛します。)を使って勉強してきたので、
ここではSAA試験近くに行ったの追い込みで勉強を記載いたします。

１．[Udemy「【SAA-C02版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）」](https://www.udemy.com/course/aws-knan/)
　問題1つ1つを問題を解く＋回答確認で10分程度かけて、問題の解答が納得するまで調べてました。

２．[koiwaクラブ](https://aws.koiwaclub.com/)
　１．と同じ要領で進めました。
　問題の正解以外の選択肢について、どういう問題文だったらこの選択肢になるか？を考えながら解いていました。
　例：求められているのが「可用性」なのか「コスト」なのか「利用頻度」等々
　新しい問題を重点的に行うのがおすすめです。私が勉強していた時は140が最新だったため、130~140を重点的に行っていました。



#試験本番
**１．「後で確認フラグ」つける**
　「なんかやった気がするけど思い出せない」や「時間かかりそう」という
　問題は”後で確認フラグ”(右上にボタンがある)を立てて飛ばしていました。
　⇒似た問題が結構あるので、他の問題を解くことで思い出せたりします

**２．「まったくわからない」問題は一旦は未回答(一番最後に解く)**
　こちらはフラグも立てず未回答のままにし、最後の見直し時に回答しました。
　（試験には見返し画面が最終的表示されるのですが、そこで”後で確認フラグ”や
　”未回答”の問題を一覧で確認できます。）
　⇒「まったくわからない」問題は考えても集中力や時間を削られるので、
　　一番最後に見て、当てずっぽうやメタ読みで回答しました

**３．試験の進め方**
　とりあえず一通り問題を全部解く(約60分)
　↓
　見返し画面で”後で確認フラグ”を見直す(約20分)(私は5問ぐらいつけていました)
　↓
　見返し画面で「まったくわからない」問題を当てずっぽうやメタ読み(約10分)(私は3問ぐらい未回答にしてました)
　↓
　終了(40分ぐらい余っていました)

**４．試験の前日は早く寝る、朝ごはんは少量食べて試験はAMに(これが大事なのは私だけかもしれないです)**


#これをやっておけばよかった
**S3のコストと種類について特に重要でした。**
>・S3 標準
>・S3 Intelligent - Tiering
>・S3 標準 - 低頻度アクセス(S3 標準 – IA)
>・S3 1 ゾーン - IA
>・S3 Glacier
>・S3 Glacier Deep Archive

個人的にここは押さえておきたかった　(私は「コスト順」と「取り出し時間」がざっくりとしかわかっていなかったです。)
　　　取り出しにお金がかかるのはどれ？
　　　コスト順は？
　　　可用性の違いは？
　　　取り出し時間は？
　　　それぞれのユースケースは？

#最後に
SAAは私の中で、疑似問題で9割取れるぐらいに知識がないと合格は
難しいだろうと思っていいましたが、疑似問題で5割程度の知識でも
無事合格することができました。

もし、合格できなさそうだなと思って受験する人も、あきらめず頑張ってみるのもいいかと思います。

以上、SAAを取ろうと思っている方や気になっている方の参考になれば幸いです。