OmniAICreator/Qiita-1.07M huggingface dataset:
IBM Cloud Professional SRE v2 受験体験記

# IBM Cloud Professional SRE v2について
IBM Cloud Professional SRE v2は、SREを対象としたIBM Cloudの中級レベルの認定試験です。

https://www.ibm.com/training/certification/C0007801

# 筆者の前提スペック
- IBM Cloudは普段の業務でOpenShift, Watson, DBを使っている程度のライトユーザー
- Professional Architect v5に合格している程度の知識はある（重要）
- SREとしての実務経験はなし
- 英語があまり得意ではない

# 学習教材

### 模擬試験
有料の模擬試験です。試験勉強前に腕試しも兼ねて受験してみましたが、SRE用語が全然分からず不合格でした。
試験終了後にスコアと合わせて、各出題分野における正答率が表示されるため、自分が理解できていない分野を把握するのにもちょうどよいのではないかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134250/af1646b3-cb46-67f9-2a03-a58da94627ea.png)

### ラーニングパス
ラーニングパスが公開されており、こちらに沿って学習を進めていけば問題なく合格できると思います。

https://www.ibm.com/training/path/ibmcloudprofessionalsitereliabilityengineer(sre)v2

本試験でもStudy Guideが提供されていますので、こちらは絶対に一通り読んでおいた方がよいと思いました。
Study Guideに記載されている練習問題から、ほぼそのまま出題された問題が何問かありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134250/829efc7b-ca16-7e4d-f969-6faa6708395e.png)

# 学習方法
だいたい1か月くらいかけて、下記のような流れで学習をすすめました。
1. とりあえず模擬試験を受験して、出題範囲や傾向などをざっくり把握する
2. Study Guideをひととおり眺めて、知らなかった部分や重要そうな部分はメモしておく
3. Study Guideに記載されている問題をひととおり解いてみる

# 試験結果
オンラインで受験し、無事に合格することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134250/1e269d07-682b-381d-e1d3-a02e30a5010e.png)

# 受験した感想
- いつも通り難しかったです（IQ2の感想）
- @teruqさんがおっしゃっていた通りですが、IBM Cloudを普段から使っていて、Professional Architectあたりに受かるレベルの方であれば、Study GuideでSREの部分を少し勉強すれば合格できると思いました。私の場合は、Professional Architectのときに勉強したあたりの知識がなければ、おそらく1発で合格できていなかったと思います（思っていたよりSRE以外の部分も問われるな…という印象でした）
- SRE固有の部分の理解が微妙にフワッとしていたので、GoogleのSRE本などを読んで、ちゃんと補足しておけばよかったな〜〜と思いました（このあとちゃんと読みます）

# 個人的に抑えておいたほうがよいと思った範囲
メモ書き程度ですが、以下のあたりは抑えておくとよいと思いました。
当然ですが、これらが試験に必ず出るという意図ではありませんので、ご注意ください。

- SLA, SLO, SLIの定義や特徴
- Golden Signalの定義
- Postmortemの定義や目的
- IBM Cloudにおけるモニタリングソリューション（Activity Tracker, Cloud Monitoring, Log Analysisなど）の概要
- IBM Security Reference Architectureの概要
- 各種Regulationの概要（GDPR, PCIなど）
- Virtual Serversの種類と特徴（Reserved, Transient, Dedicatedなど）
- IBM Cloud Kubernetes Service, Red Hat OpenShift on IBM Cloudの仕様（わりと細かいところまで押さえておくと◎）
- [IBM Cloud for VMware Mission Critical Workloads](https://www.ibm.com/downloads/cas/QVDBYBR0)の概要
- VPN Gateway, Transit Gatewayの特徴
- Block Storage, File Storage, Object Storageの特徴やユースケース
- Circuit Breaker Pattern, Bulkhead Patternの特徴
- リリース戦略（Blue/Green, Canaryなど）の特徴

# 参考文献
* IBM Cloudの新認定試験IBM Cloud Professional SRE v2を受けてみた

https://qiita.com/teruq/items/4bcc0ae8365c721267cd
Flutter でデモアプリを起動する

Flutter の開発する準備が完了したので、Flutter プロジェクトを新規作成した際に作られるサンプルのアプリを起動します。

環境構築がまだの方は以下の記事を参照してください。

https://qiita.com/kosh1/items/4c39072aac1bb0846849

https://qiita.com/kosh1/items/e8d9a312299aff3261ca

## Flutter プロジェクトの作成
* Android Studio を起動し、New Flutter Projectを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/2a450be6-25e5-bcfd-db21-f7e4c9f24b06.png)
* Flutter SDK Path にインストールした Flutter SDK を設定し、次へを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/dea54c27-fda0-2b43-049a-10919c27a0d2.png)
* プロジェクト名に任意の値を入力し、完了を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/16acdcf8-0b02-e38b-6c1e-dd7e8156e077.png)
* しばらくするとプロジェクトが作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/a2306f1d-8e05-b09c-5cc2-18e42deabc3c.png)

## Android エミュレーターのインストール
アプリを Android で起動するために、Android のエミュレーターをインストールします

1. ツール > Device Manager を選択し、表示された画面から Create device を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/535d6d00-8682-8bc7-5109-d48825f80dd6.png)
1. 表示された画面から好きなデバイスを選び、次へを選択する（ここでは Pixcel 5 を選択します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/00f92323-c616-5287-c978-feac3bdf1386.png)
1. エミュレートしたいAndroid OS のバージョンダウンロードし、次へを選択する（ここではAndroid 12 を選択します）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/b0e8056c-c1c7-d4f0-0daa-5a899ebfdea6.png)
1. デバイス名を任意の値にして、完了を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/4ca3b6f7-93a1-4043-7cb6-032cdab06503.png)
1.インストールしたエミュレーターのデバイス名が表示されるので、▶の実行を選択すると Android のエミュレーターが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/86cb3cd1-d556-ed7a-0cf7-7a0cbb2099ae.png)

## サンプルアプリの起動
1. ▶の実行を選択すると、以下のようなデモアプリが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/44669773-496f-98ac-6cc9-7a0f647ed26a.png)
Qiita 表彰プログラム

Qiita 表彰プログラム

https://qiita.com/qiita-award

Silverがもらえていることはわかった。

Qiitaのバッチ17個になりました。ありがとうございます。

https://qiita.com/kaizen_nagoya/items/656a340e0bf686897a95

10,000 Contributionsで大丈夫らしい。

Goldは、50,000 Contributions らしく、だいぶ先になりそう。

４年で20,000ということは、10年かかりそう。

これを、加速する方法をいくつか検討してみる。

# 流行りの題材を扱う。

dockerで一番ダウンロードが多いのは、全くの素人な題材。
扱えば、反応がある。

1. JavaScript/TypeScript
今年中にJavaScriptかTypeScriptで動くものを作る予定。
動けば、Contributionsが増えることが想定できる。

2. 機械学習/深層学習


3. Python / R
機械学習/深層学習と少しかぶっている。
データサイエンティスト寄り。

4. docker

5. Github/Gitlab/Bitbucket

6. インフラエンジニア
フロントエンドについて書くには経験が少ない。
逆に、経験が少ないことを題材にする手があるかもしれない。

7. 標準化
ISO, IEC, ITU, IEEE, RFC, AUTOSAR

8. 行事参加
行事参加で、増える場合と、横ばい（行事に参加しても参加しなくても常連以外の反応がない）の場合とがある。

#  年間 TOP Contributor
狙わない。５年に１度くらいは、何か機会があるかもしれない。
狙って行ってもいいことはない。
年間 TOP Contributorから学ぶことはいくつかあるはず。

# Diamond

https://qiita.com/jnchito

Ruby, Railsは、あまり力を入れていない。HomebrewのRubyのお世話になっている。
１年に１回はRubyを陽に動かす時の参考にさせていただく。

# Gold

https://qiita.com/rana_kualu

PHPはあまり力を入れていない。１年に１回はPHPを動かす時の参考にさせていただく。

https://qiita.com/hirokidaichi

アジャイルは先進的な人の経験則であって真似てなにかいいことがあるとは限らない。
日本でも能力のあるプログラマが四十年以上前からやっていることばかりかも。

https://qiita.com/suin

夏休みには１０個以上、dockerで動かすことを目標にする。

https://qiita.com/baby-degu

よく読んでから考える。

https://qiita.com/drken

atCoderに取り組むかどうかから考え直す。

https://qiita.com/icoxfog417

自然言語処理は見習いたい。

https://qiita.com/Yametaro

５歳児向け記事を５つは書こう。

# 年間 TOP Contributor

既出を除く。

https://qiita.com/e99h2121

平衡感覚を見習い中。

https://qiita.com/shiracamus

夏休みに１０個動かそう。

https://qiita.com/ucan-lab

夏休みに１０個動かそう。

https://qiita.com/e869120

よく読んでから考える。

# 課題

Qiita 表彰プログラム　などを見て、followだけするIDがたくさんあるかもしれない。

こんなにfollow順番が似てるのってどういう現象＝偽識別子

https://qiita.com/kaizen_nagoya/items/ea0de85a2e5fbcbdd06e

記事を書こう or いいね(LGTM)しよう。followはそれから。

https://qiita.com/kaizen_nagoya/items/3116c6e18b6e0ca6c9fe

との関係を調査中。

# 参考資料

日本最大級のエンジニアコミュニティ「Qiita」が「Qiita 表彰プログラム」を開始　　エイチーム　2021年9月10日 11時00分

https://prtimes.jp/main/html/rd/p/000001954.000001348.html


Qiita表彰プログラムでDIAMOND賞を受賞しました💎

https://blog.jnito.com/entry/2021/11/22/073022


Qiita 表彰プログラム 受賞者一覧 - Qiita

https://ceron.jp/url/qiita.com/qiita-award/users
【Yarn】yarnコマンド一覧

## yarnコマンド一覧
npm                                       | yarn                          |  機能                                      |
---                                       | ---                           | ---                                        |
`npm init`                                | `yarn init`                   | `package.json`生成(対話形式)                 |
`npm init -y`                             | `yarn init -y`                | `package.json`生成(即時)                    |
`npm install`                             | `yarn install`                | `package.json`に記載されたパッケージをインストール  |
`npm i [package@version]`                 | `yarn add [package@version]`  | パッケージのインストール                         |
`npm i -D [package]`                      | `yarn add -D [package]`       | 開発環境にのみインストール                       |
`npm i -g [package]`                      | `yarn global add [package]`   | グローバルインストール                           |        
`npm uninstall [package]`                 | `yarn remove [package]`       | パッケージをアンインストール                       |
`npm uninstall -D [package]`              | `yarn remove [package]`       | 開発環境のパッケージをアンインストール               |
`npm update --global`                     | `yarn global upgrade`         | グローバルのパッケージ全体を更新                  |
`rm -rf node_modules && npm install`      | `yarn upgrade`                | ローカルのパッケージ全体の更新                    |
`npm update [package]`                    | `yarn upgrade [package]`      | ローカルのパッケージの更新                       |
`npm cache clean`                         | `yarn cache clean`            | キャッシュクリア                                |
`npm info [package]`                      | `yarn info [package]`         | パッケージ情報の表示                           |
`npm outdated`                            | `yarn outdated`               | 古いパッケージ一覧の表示                        |
`npm run [script]`                        | `yarn run [script]`           | package.json内scriptに定義されたスクリプトの実行  |
aws-cliを使う際、ECRの2種類のタグに困惑した話

## はじめに

- 「ECRリポジトリのタグ」と「ECRのコンテナイメージのタグ」が紛らわしいという話です。
- ECR初心者だった頃の話です。

## 経緯

- 以前、aws-cliでECRリポジトリを操作する機会がありました。
- やりたかった操作としては「ECR内にあるコンテナイメージに新しいタグをつける」という操作です。
- そこで、aws-cliのecrのページ（<https://docs.aws.amazon.com/cli/latest/reference/ecr/index.html#cli-aws-ecr>）を見ていたところ、`tag-resource`、`untag-resource`というコマンドがありましたので「これで新しいイメージタグを追加できるのか！」と勘違いしていました。

## 結局のところ

- `tag-resource`、`untag-resource`は、**ECRリポジトリ自体にタグをつけるため**のコマンドでした。
(<https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ecr-using-tags.html>)

## 新規タグ付けの方法

新規タグ付けは、現状aws-cliの場合は以下の方法が必要でした。

- イメージマニュフェストの取得
- `put-image`コマンドの`--image-tag`オプションを使い新しいイメージタグでプッシュ
  - (<https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/image-retag.html>)
Mac M1で、isoファイルをusbに焼こうとして、週末が潰れた話

Mac OSで、Linuxの軽量OSのQ4OSをダウンロードして、それを別マシンで起動出来る様に、USBメモリに焼くと言うだけの話なのに、非常に苦労したので、記載しておきます。

＜苦労１＞
自宅にあったバッファローのUSBが、なぜか認識されない。初期化したり、色々としている内に2時間は浪費した。
→ 結局、諦めて、新しいUSBを購入して解決。

＜苦労２＞
Q4OSをDownloadできない。
「Q4OSダウンロード」で検索すると、下記の公式サイトがReferされます。
https://www.q4os.org/dqa007.html#inst
凄い不満なのだが、「ISOファイルダウンロードのリンクはここ。」と書いてあれば良いのだが、"See the next chapter"とかふ勿体ぶっていて、それでいて、Next Chapterにも書いてない。

＞In order to make a fresh Q4OS installation, you need to acquire ISO image file, create bootable USB or DVD/CD media and complete the installation procedure. At first, download the desired ISO image from the downloads section of Q4OS website and create bootable media, see the next chapter.

→ 結局、こちらのサイトからDLできるのですが、「なぜ、公式サイトからDLできないのか？」　と今でも不満。
https://sourceforge.net/projects/q4os/
【後日談】
公式サイトのここをクリックすれば、DLできることが判明した。（微妙に点線がある。分かりにくい。。。）
![0521s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1665829/28147e20-394f-d5e9-4abb-b897aab60071.png)


＜苦労３＞
ISOイメージを、USBメモリに焼くのだけど、Windowsを使っていた時は、いろいろなGUIツールがあり、全く困らなかった。（Imgburnと言うツールを愛用してました。https://freesoft-100.com/review/imgburn.php）
ただ、macには、本当にツールが少ないと言うか、このUnetbootinというツールしかない。
しかも、このUnetbootinであるが、全然、動かない。何度やっても、ピクリとも反応しない。
https://unetbootin.github.io/
この現象ですが、unetbootinのサイトには詳しく書いてないが、おそらく、Mac　M1には対応していないと結論づけました。

→ 結局、Macでは外部ツールに頼るのではなく、コマンドベースでやるしかないと理解した。
ここに詳しく、やり方が書いてあります。
https://blog.mothule.com/linux/linux-write-iso-to-usb-flash-drive

＜Macを業務PCで使う事への考察＞
年初から、業務PCとして、macを使ってますが、それまでは、基本的にWindowsでした。（UbuntuをAWSやGCPで設定してテスト環境を構築することはあったが、あくまでもWindowsがメインでした。）
Windowsは、やはりGUIベースのサードパーティーツールが豊富で非常に使い易いと思う。Macは、Third PartyのツールがWindows程、充実していないし、また、OSベースの利用でも、Terminalを立ち上げてコマンドベースで処理しないとダメな事が多々ある。
従って、Mac使用当初は非常に後悔した。と言うのも、そもそも、もっとレイヤーが上のアプリ開発（Python,JS,Java等を駆使したコーディング）が主戦場なのに、ツールを使いこなす部分で、イチイチ躓く訳ですから。
ただ、今回の＜苦労３＞でも明らかな様に、コマンドベースで設定すると、意外と簡単に出来ると分かった事も事実。
そもそも、MacはUnixに源流を持つので、「GUIはオマケ、CUIを基本とすべし。」と考えれば、Ubuntuとかと同じ使用感になります。そんな訳で、結論として、アプリレイヤーのエンジニアには、Macはそう悪くないかも？と思い始めてます。
デバッグ　解析　参考URLまとめ

https://tcd-theme.com/2019/02/web-errorcode.html

https://www.itmanage.co.jp/column/http-www-request-response-statuscode/

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/400

https://www.sun-m.co.jp/blog/tips/358.html
VBA_02_Dictionary_入れ子_二重_Sample

keyword
---
ディクショナリ
入れ子
二重
dictionaryにdictionaryを追加

Sample Code
---
```vb:Sample Code
Public Sub MySample20220520()

    Dim arrList As Variant
    Dim i As Long: Dim j As Long
    Dim myNameList As Dictionary: Dim myTypeList As Dictionary
    Dim myName As Variant: Dim myType As Variant

    With ThisWorkbook.ActiveSheet
        arrList = .Range("A1").CurrentRegion
    End With
    
    Set myNameList = New Dictionary
    
    For i = LBound(arrList, 1) + 1 To UBound(arrList, 1)
    
        If Not myNameList.Exists(arrList(i, 1)) Then
            
            Set myTypeList = New Dictionary
            
            myNameList.Add arrList(i, 1), myTypeList
            
            Set myTypeList = myNameList.Item(arrList(i, 1))
            
            myTypeList.Add arrList(i, 2), arrList(i, 3)
        
        Else
            
            If myTypeList Is Nothing Then
                Set myTypeList = New Dictionary
            End If
            
            Set myTypeList = myNameList.Item(arrList(i, 1))
            
            If myTypeList.Exists(arrList(i, 2)) Then
                myTypeList.Item(arrList(i, 2)) = myTypeList.Item(arrList(i, 2)) + arrList(i, 3)
            Else
                myTypeList.Add arrList(i, 2), arrList(i, 3)
            End If
        
        End If
    
    Next i
    
    Set myTypeList = New Dictionary
    
    For Each myName In myNameList.Keys
    
        Set myTypeList = myNameList.Item(myName)

        For Each myType In myTypeList.Keys
            Debug.Print myName, myType, myTypeList.Item(myType)
        Next
        
    Next

End Sub
```

Sample Data
---
![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2672288/85d7f102-8888-08be-eed0-072ca5ce2ebc.jpeg)
OutSystemsでgooglemapに追加したマーカーごとにポップアップを表示

## やりたいこと
OutSystemsを使い、googlemapでマーカーをつけたい場所を指定できるようになったはいいが、マーカーをクリックした際に簡易的にマーカーがついている情報を表示するためPopUpを使おうと考えました。

## 課題
PopUpウィジェットを使い、直接AggregateのList.Current.~~のデータを参照しても集計結果を全部取ってきてしまう、、、

## 原因
画面がレンダリングされた後、ポップアップ内の画像ウィジェットは、集計結果セットの最後のアイテム/レコードを指します。したがって、ポップアップを開くときに、ポップアップウィジェット内の画像を、現在選択されている行のBinaryFile値で明示的に更新、再割り当てする必要がある。

## やったこと
PopUp内に直接Aggregateのデータを使うのではなく
PopUpを開くためのClientActionの中でAssignを使ってローカル変数にデータを割り当てる。

## 完成イメージ
マーカーをクリックした後こんな感じのClientActionでポップアップを出す。
![スクリーンショット 2022-05-21 23.40.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1276481/fe59dce6-5868-ac98-7589-6ad07a3c30cf.png)
![スクリーンショット 2022-05-21 23.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1276481/a0fe9647-3e56-379a-7415-6ceaf44c7d27.png)


## 参考情報
https://www.outsystems.com/forums/discussion/71189/showing-popup-image-with-related-id/
ネストを浅くするって難しい

初めて「リーダブルコード」を読んで、個人的に気になった**ネストの入れ子問題**について追加で調べてみました。 
すると、ネストを浅くする際に用いる**早期リターン**について様々な意見がありました。  
調べたことを踏まえて、まとめてみました。

# ネストの深いコードは理解しにくい  

ネストが深いプログラムを見ると括弧が多くて混乱します。
また「条件1がtrueで条件2がfalseで…」のように辿った条件を覚えておかないといけません。  

```php
function judge() {
    if (条件1) {
        // 処理A
        if (条件2) {
            // 処理B
        } else {
            if (条件3) {
                // 処理C
                if (条件4) {
                    // 処理D
                    if (条件5) {
                      // 処理E
                    }
                }
            }
        }
    }
}
```

# 早期リターンでネストを浅くする
上記のコードでなるべくネストを浅くしてみます。


```php
function judge() {
    if (! 条件1) return;
    // 処理A
    if (条件2) {
        // 処理B
        return;
    }
    if (! 条件3) return;
    // 処理C
    if (! 条件4) return;
    // 処理D
    if (! 条件5) return;
    // 処理E
}
```
 
しかし、これは本当にプログラムとして改善されたのでしょうか？

# 結局どうなの？
ネストを浅くしたことによる影響を考えてみます。

## コードが見やすくなった？

括弧の数が減り、横に広がることもなくなりました。  
すっきりして見やすくなったと思います。  

## 覚えておかないといけない条件は減らせた？

> また「条件1がtrueで条件2がfalseで…」のように辿った条件を覚えておかないといけません。  

冒頭で述べた上記の部分についてです。
ガード節を用いることで「条件1がfalse」の場合を以降で考えなくても良くなります。  
ただ結局は「条件1がtrueで…」と考えているのと同義ですので、ネストを浅くしても条件は減っていません。

## コードが理解しやすくなった？

> コードは理解しやすくなければならない  

「リーダブルコード」のはじめに述べられている内容です。  
これが達成できていないのであれば、ネストを浅くしても意味がありません。  

改めて今回の例に挙げたコードを見てみます。  
**else文を使用していた部分が直感的に把握しづらくなっています。**

そこで以下のように書き直してみました。

```php
function judge() {
    if (! 条件1) return;
    // 処理A
    if (条件2) {
        // 処理B
        return;
    } elseif (条件3) {
        // 処理C
        if (! 条件4) return;
        // 処理D
        if (! 条件5) return;
        // 処理E
    }
}
```

当初よりネストが浅くなり、分岐も直感的に把握できる状態になりました。  
（別メソッドに分ければもっと見やすくなりますが、今回はここまで）

# まとめ  

ネストの入れ子問題、およびその解決で用いられる早期リターンについてまとめてみました。    
様々な意見が交わされているということはそれだけ難しい問題ということだと思います。  
経験を積みながら、その場に応じた書き方ができるようになりたいです。 

# 参考文献／サイト

[リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック](https://www.oreilly.co.jp/books/9784873115658/)

[リーダブルコードをさらに改良する（アンチ・アーリーリターン） | Ninton](https://www.ninton.co.jp/archives/8065)

[【書き方】早期リターンの勘違いコード | KAZUPON研究室](https://kazupon.org/if-nest-return/)
Webフロントエンド基礎 前編(1/2) ~2022 日経 デジタル人材向け新卒研修より~

## 本記事の概要

- 本記事は筆者が、**日本経済新聞社**様の「2022年度 デジタル人材向け新卒研修 Webの基礎:後編」を読み、その内容が本当にわかりやすく勉強になったので、自分で改めて(色々省略しながら)書き起こしたものになります
- 内容を２つの記事に分けて投稿します(この記事は前編)

後編はこちら↓

https://qiita.com/akitika/items/659af7c1e783e6a6b16d

## 資料元情報

https://hack.nikkei.com/blog/training2022/

https://docs.google.com/presentation/d/e/2PACX-1vSjF1cp8fAdMKwFkLmtFT66e-UCD6zanO5KLsuRFmWyZ-8c06YQmgWT750Aqai2JfqHRARYWlkDLfaB/pub?slide=id.g122f21c424e_0_109

https://hack.nikkei.com/


## 目次

- Webサイトはどのようにして表示されるか?  
- 伝統的な開発方法                　　　　　
- SPAという考え方
- ReactJSは何を解決するか？   ~~~ 後編(2/2) で記述します
- TypeScriptは何を解決するか？ ~~~
- SSRは何を解決するか？ ~~~
- CDNは何を解決するか？ ~~~

# 結論

- 電子版の初期実装ではテンプレートエンジンを採用していた
- ある時から開発効率・体験を向上させるためにReactを取り入れていた
- 日経ではメディア開発という特性上、SEOとOGP対応が必須であり、SSRを採用している
- SSRのデメリットを解消するためにCDNを採用している

# Webサイトはどのようにして表示されるか?

## Webブラウザが表示される仕組み

Webブラウザは、`HTML / CSS / JS を解釈してコンテンツやサービスを表示する`

- HTML : コンテンツそのものを定義する
    - 文字・画像を表示する
- CSS : コンテンツをスタイリングする
    - 文字の色・位置を変更する
- JS : HTML / CSS を動的に操作する
    - ある条件で文字の大きさ・表示 / 非表示が変わる
    

## WebブラウザがHTML / CSS / JS を取得する仕組み

- Webブラウザは、`サーバーもしくはファイルシステムからHTML / CSS / JSを入手する`
- HTML / CSS / JS はそれぞれURLが示す場所に存在している
- 特にサーバーから入手する方式を**クライアント・サーバーモデル**という

# 伝統的な開発方法

### Webサービスは動的に作られる必要がある

 `HTML / CSS / JS ファイルをサーバーから返してクライアントで表示する方法だけでは、実際のサービス開発は務まらない`

- 例えば何らかの記事であれば、更新順に表示されたり、専門家がコメントしたら即座に反映させる必要がある
- ただリアルタイムなデータのコンテンツをファイルとして配信するのは難しい
- この問題を解決するツールとして伝統的なものは「テンプレートエンジン」「jQuery」が挙げられる

### テンプレートエンジン

- 後からデータを流し込めるテンプレートファイルを用意しておき、サーバーがデータソースにあるデータを流し込んで、コンテンツをつくる方法・ツール

```jsx
<div>

 <p>{{ user.name }}</p>
<span>{{ user.introduction }}</span>

</div>
```

### jQuery

- DOMを操作しやすくするJSライブラリ
- DOMを動的に書き換えやすくする
- サーバーからデータ(≠ファイル)を取得するための機能が備わっている
- JS上で**リアルタイムにデータを取得**して、**コンテンツをブラウザ上で書き換える**ことが可能

# SPAという考え方

## JSを読み込むHTMLさえあれば、HTML / CSS がなくてもWebサービスは作ることができる

→ JSはDOMを操作できるので、JSからHTMLとCSSを作成することが可能だから

## Single Page Application

→ １枚のHTML上で展開されるJSによって構築されたアプリケーション

- これまでページの遷移を実現するためには、複数のHTMLをサーバーに問い合わせて実現していた
- SPAであれば、ページを表現するDOMをブラウザ上でJSから作成し、JSの条件分岐を使って切り替えれば、ページの遷移を実現できる

## SPAのメリット

- パフォーマンスの向上
    - HTMLの読み直しがない
    - コンテンツの部分更新ができてエコ
- コンテンツの全てがJSで管理される
    - HTML / CSS / JS で、共通部分を変数で管理できる
        - 例えば、色を表す変数を作って、スタイリングの世界に持ち込める
    - 条件分岐でコンテンツを制御できる

## SPAの注意点

- HTMLを書かないので、慣れが必要
- 部分更新が不要であれば、無理して入れなくても良い
- 伝統的な方法で解決できない問題を解決するための道具として認識しておいた方が良い(諸説あり)
Android Studio の日本語化

Android Studio は英語表記なので、英語が得意ではない場合扱いにくいので日本語化する
※インストールされているAndroid Studio のバージョン 
```
Android Studio Chipmunk | 2021.2.1
Build #AI-212.5712.43.2112.8512546, built on April 29, 2022
```

## 日本語化のやり方
* [JetBrains](https://plugins.jetbrains.com/plugin/13964-japanese-language-pack------/versions) 公式サイトにアクセスし、日本語言語パックをダウンロードする
インストールしている Android Studio のバージョンが 「Android Studio Chipmunk | 2021.2.1 2.1 212.5712」となっているので、2021の212系最新版バージョンをダウンロードする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/656f4300-c485-7872-79d1-f9d802959ca1.png)
* ダウンロードした「ja.212.324.zip」を解凍し、「C:\Program Files\Android\Android Studio\plugins」に配置する
* Android Studio の Plugins > 右上の歯車 > Install Plugin from Disk を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/91320490-a543-be64-f166-9ac251dc2c52.png)
* 「ja.212.324.jar」を選択し、OKを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/b3f70629-da93-ae54-cecc-bd7d203f2811.png)
* 「Restart IDE」と表示されるので、Android Studio を再起動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/0b36b2e0-2e81-533b-651d-293fcd42b399.png)
* 再起動が完了すると日本語になっています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082287/a00cd954-e4e8-c491-79bc-fe8fe90209cc.png)
Swift・CoreBluetoothで通信を行いメッセージアプリっぽいのを作った4

# 第4回の内容
お久しぶりです。実はしばらく体調を崩していてこちらの記事の続きを書けていませんでした。。。。
大変申し訳ありません。これからはマイペースに勉強したことを記事にしていけたらなと思います。
今回の内容は以下になります。

- 接続したBLEデバイスからデータを読み出す
- 接続したBLEデバイスへデータを書き込む

上記２点を書いていこうと思います。それではレッツゴー

## 接続したBLEデバイスからデータを読み出す(Read)
- ペリフェラル（接続したBLEデバイス）からセントラル(iOSアプリ側)がデータを読み出す通信はReadと呼ばれます。
直感的にはデータを受信すると表現した方がわかりやすいと思います。

## 実装方法
- データ読み出しを開始する
``
peripheral.readValueForCharacteristic(characteristic)
``
上記でキャラクタリスティックの値を取得できます。
- 実例

```
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        
        let characteristics: NSArray = service.characteristics as! NSArray
        print("\(characteristics.count)個のキャラクタリスティックを発見! \(characteristics)")
        
        for obj in characteristics{
            
            if let characteristic = obj as? CBCharacteristic{
                
                // Read専用のキャラクタリスティックに限定して読み出す
                if characteristic.properties == CBCharacteristicProperties.read{
                    peripheral.readValue(for: characteristic)
                }
                // characteristicに送信先のcharacteristicの値を入れる
                self.characteristic = characteristic
                
            }
        }
    }
```

ここでは読み出し可能であることを示すCBCharacteristicPropertyReadと一致するかどうかを判定しています。

## データの読み出し結果を取得する
```
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
        print("読み出し成功！ service uuid: \(characteristic.service!.uuid),characteristic uuid: \(characteristic.uuid), value: \(characteristic.value)")
            return
        }
    }
```

成功すれば上記のようにvalueプロパティより値を取得することができます。

## 接続したBLEデバイスへデータを書き込む(Write)
- 簡単に表現するとデータを送信するということです(雑だなオイ)

- 実装方法
```
peripheral.writeValue(data, for: characteristic!, type: CBCharacteristicWriteType.withResponse)
```
上記で書き込み処理を行います。ここでは任意のタイミングで書き込み処理を呼び出す必要があります。

```
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
        
        if let error = error{
            print("Write失敗...error:\(error)")
            return
        }
        print("Write成功！")
    }
```
書き込み処理が成功すれば「Write成功」、失敗すれば「Write失敗」と出力させます。

久しぶりに記事書きましたが、結構書く力が落ちていますね。。
これからはマイペースに自分らしくやっていこうと思います。
セントラル側の実装は以上になります。
完成したプロジェクトのGithubあげますので興味がある方はこちらをご覧ください。
(https://github.com/Croe2019/BLEApp)
Requirements on Flash Test , No.260, AUTOSAR R21-11(100) CP

Requirements on Flash Test, No.260, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_FlashTest.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term| Description|
|:--|:--|
|ECU |Electric Control Unit
|EOL |End Of Line Often used in the term ‘EOL Programming’ or ‘EOL Configuration’
|CRC| Cyclic Redundancy Check
|MCAL| Microcontroller Abstraction Layer
|MCU |Microcontroller Unit
|NMI| Non maskable interrupt
|OS |Operating System
|DEM| Diagnostic Event Manager
|SFR |Special Function Register
|RTE| Runtime environment
|WP |Work Package
|ECC| Error Correction Code
|STD |Standard
|REQ |Requirement
|UNINIT |Uninitialized (= not initialized)
|signature |Unique calculation result of the content of a specific memory block
|Memory scrubbing| Automatic sequential data reading to trigger detection/verification mechanisms typical ECC.
|Invariable memory| Invariable memory can be program flash, program SRAM, locked cache and ROM
|Background test| Background test is called periodically by a scheduler, and is interruptible. The test is split up over many scheduled tasks.
|Foreground test| Foreground test is called via users call.
|Test interval| Interval of a complete Flash test in background mode 

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[DOC_LAYERED_ARCH] Layered Software Architecture,
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[AUTOSAR_GLOSSARY] Glossary,
AUTOSAR_TR_Glossary.pdf
[SRS_BSW_GENERAL] General Requirements on Basic Software Modules,
AUTOSAR_SRS_BSWGeneral.pdf
[SRS_BSW_SPAL] General Requirements on SPAL,
AUTOSAR_SRS_SPALGeneral.pdf
[SWS_BSW] Specification of Diagnostic Event Manager,
AUTOSAR_SWS_DiagnosticEventManager.pdf
[SWS_BSW] Specification of Default Error Tracer,
AUTOSAR_SWS_DefaultErrorTracer.pdf
[SWS_BSW_MCAL] Specification of RAM Test,
AUTOSAR_SWS_RAMTest.pdf
[SWS_BSW] Specification of ECU state manager,
AUTOSAR_SWS_ECUStateManager.pdf
[TPS_STDT_0078] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
 
＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20220521
Python+Pillowで、任意の文字列を画像で出力する

もし任意の文字列を画像化できれば、たとえばSlackの絵文字ジェネレータを自作するなど、面白い使い道があるかと思い、やってみました。

## 使うもの

- Python
- Pillow
    - [Pillow — Pillow (PIL Fork) 9.1.1 documentation](https://pillow.readthedocs.io/en/stable/)
    - 無い場合は`pip install pillow`で入ります


## サンプルのコード

とりあえず画像を出力する、だけのコードは以下。

``` python
from PIL import Image, ImageDraw, ImageFont

# RGB, 画像サイズ, 背景色を設定
im = Image.new("RGB", (512, 512), (256, 256, 256))

draw = ImageDraw.Draw(im)

# PCローカルのフォントへのパスと、フォントサイズを指定
font = ImageFont.truetype('C:/Windows/Fonts/meiryob.ttc', 140)

# 複数行の文字を出すのに、行ごとリストに入れてforで回す
texts = ["無いぞ、", "知名度。", "SCSK"]

# 文字描画の初期位置（画像左上からx, yだけ離れた位置）
x = 20
y = 0

# 文字の描画
for text in texts:
    # 描画位置、描画する文字、文字色、フォントを指定
    draw.text((x, y), text, fill=(26, 39, 146), font=font)
    y = y + 150

# ファイルに出力
im.save("./image.png")

```

実行すると以下の画像が得られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46492/69ab2e84-6c2d-b513-d2dc-5e8675004050.png)

※元ネタはこれ＞[あるぞ、ITの可能性。SCSK ｜ SCSK株式会社](https://www.scsk.jp/pr/cm/)

ただ、もうちょっとマシにやる余地もあります。

### Draw Multiline Textを使う

[ImageDraw Module — Pillow (PIL Fork) 9.1.1 documentation](https://pillow.readthedocs.io/en/stable/reference/ImageDraw.html#example-draw-multiline-text)

`text`を使って愚直に文字を書き込んでいってもいいのですが、`multiline_text`を使っても実現できます。

コードはこちら。

``` python
from PIL import Image, ImageDraw, ImageFont

# RGB, 画像サイズ, 背景色を設定
im = Image.new("RGB", (512, 512), (256, 256, 256))

draw = ImageDraw.Draw(im)

# PCローカルのフォントへのパスと、フォントサイズを指定
font = ImageFont.truetype('C:/Windows/Fonts/meiryob.ttc', 140)

# 描画位置、描画する文字、文字色、フォントを指定
draw.multiline_text((20, 0), "無いぞ、\n知名度。\nSCSK", fill=(26, 39, 146), font=font)

# ファイルに出力
im.save("./image2.png")

```

改行コードを入れるだけで良く、全体がすっきりしました。

一方、長い文章をいいところで自動で改行させたい等の場合は別の工夫が必要になりそうです。

## 参考

- [python Pillow（PIL)で日本語描画 - Emotion Explorer](https://emotionexplorer.blog.fc2.com/blog-entry-114.html)
- [Create images with Python PIL and Pillow and write text on them](https://code-maven.com/create-images-with-python-pil-pillow)
- [Pythonの画像処理ライブラリPillow(PIL)の使い方 | note.nkmk.me](https://note.nkmk.me/python-pillow-basic/)


## おまけ

知名度ないだけだと怒られそうなのでフォローのために以下画像も作りました。

![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/46492/c4836f62-d55e-0fd0-42eb-e032fda6336a.png)
Specification of Flash Test, No261, AUTOSAR R21-11(99) CP

Specification of Flash Test, No261, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_FlashTest.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)
|Term| Description|
|:--|:--|
|BSW |BasicSoftWare
|PC |PreCompile
|PB| PostBuild
|DEM |Diagnostic Event Manager.
|DET |Default Error Tracer.
|MCU| Micro Controller Unit.
|PLL| Phase Locked Loop.
|ISR |Interrupt Service Routine.
|Background test |Background test is called periodically by a scheduler, and is interruptible. The test is split up over many scheduled tasks.
|Foreground test |Foreground test is called via users call.
|Flash cell| Smallest entity to be addressed, in this case bytes shall be used
|Invariable memory| Invariable memory can be program flash, program SRAM, locked cache and ROM
|Test block |Defined memory area to be tested in foreground and background mode.
|Test interval |Interval of a complete Flash test in background mode
|Test time T|ime for partial test defined within one scheduled task.
|Signature| Unique calculation result of the content of a specific memory block
|Memory block| Defined memory area
|Partial test| Test to be executed in one scheduler interval
|Test Interval Id |Identifier of a test interval, which shall be incremented by each start of a new test interval


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] Specification of Default Error Tracer
AUTOSAR_SWS_DefaultErrorTracer.pdf
[5] Specification of MCU Driver
AUTOSAR_SWS_MCUDriver.pdf
[6] Specification of ECU Configuration,
AUTOSAR_TPS_ECUConfiguration.pdf
[7] Basic Software Module Description Template,
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[8] List of Basic Software Modules
AUTOSAR_TR_BSWModuleList
[9] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221201
オレオレサイト内通貨を作るAPIを作りました

# はじめに
**PS: この記事は1年以上熟成されたまま、放置されていた記事ですもはや何も詳細を覚えていません**

個人的に作っている、あるサイト内でのみ使える専用通貨機能を作りたい。
そのサイトはLINEで使えるBotと今後連携したいので、あらゆる機能はAPIで提供されるようにしたい。
こういう機能は色んなサイトで見かけるし、どっかで公開されてるのではと思ったが、
それっぽいことができる単独のAPIはざっと調べた限り見当たらない。
なので作ってみることにしました。

※以下、サイト内専用通貨を お金 と呼びますが、リアルマネーではありません。


## 説明要らないからコード見せてって方向け
https://github.com/Dosugamea/ToyMoney

## 使用したもの
Python3.6
FastAPI
SQLAlchemy

### ブロックチェーン技術を使わない理由
Ethereumとかのフォークで自作通貨が作れるってのは昔聞いたことがあるんですが、
どうにも構成がめんどくさそう(つまり面倒)、そして個人サイトで使うのでどうせ中央集権
ってことで普通のAPIを作ります。

### Pythonな理由
自分が使い慣れてて簡単に作れそうだからっていうところからです。

### FastAPIな理由
どうもPythonの中では速い([参考](https://qiita.com/bee2/items/0ad260ab9835a2087dae))ようなので 速さは正義ってことから。
今まではFlaskで書いてたんですが、まぁなんとかなるでしょう。

### SQLAlchemyな理由
今までSQLを直書きしてきた反省から導入。
ORMは色々あるようですが、周りでよく聞くのがこれだったので。
ORM使うの初めてなのですが、SQLiteでもMySQLでも同じような書き方ができるそうです。
便利そうですね。

## 作業環境
VSCode
Windows 10

## 動作環境
RaspberryPi 3B
Apache2
gunicorn

## できる機能
- ユーザーは お財布を1つ作れる
- ユーザーは お財布に通貨を持てる
- ユーザーは 他のユーザーに通貨を渡せる(メッセージも付けれる)
- ユーザーは 取引履歴を取得できる
- ユーザーは 自販機から商品を購入できる
- ユーザーは 購入した商品一覧を取得できる
- ユーザーは 所持しているお金のランキングを確認できる
- 管理ユーザーは 商品を販売する自販機を作れる
- 管理ユーザーは 一定期間毎にお金を配るものを作れる
- 管理ユーザーは 取引に手数料を指定できる
- 管理ユーザーは すべての取引履歴を取得できる
- 管理ユーザーは ユーザーの財布を操作できる

## 機能を元に定めたAPIエンドポイント
ユーザー
- /user/wallet/new POST
- /user/wallet GET
- /user/wallet/ranking GET
- /user/transaction/new POST
- /user/transaction GET

自販機
- /machine/list GET
- /machine/<machine_id:int> GET
- /machine/<machine_id:int> PUT
- /machine/<machine_id:int> DELETE
- /machine/<machine_id:int>/product GET
- /machine/<machine_id:int>/product PUT
- /machine/new POST

商品
- /product/list GET
- /product/new POST
- /product/<product_id:int> GET
- /product/<machine_id:int> PUT
- /product/<machine_id:int> DELETE


各作成のエンドポイントを
createにするかnewにするか、なしで直接POSTするか迷ったんですが
個人的にわかりやすいcreateにしました。(どうするのが適切なんだろう)

# 参考にしたサイト
## SQLAlchemyの使い方
https://it-engineer-lab.com/archives/1183
https://qiita.com/tomo0/items/a762b1bc0f192a55eae8
https://qiita.com/ariku/items/75799665acd09520bed2

## FastAPIの使い方
https://qiita.com/bee2/items/75d9c0d7ba20e7a4a0e9
https://fastapi.tiangolo.com/#example

## FastAPIでの認証の作り方
こちらのサイトを参考にしました
https://www.blog.umentu.work/fastapi-bearer-jwt/
https://github.com/umentu/fastapi_bearer

## 思い出したサイト
なんとかPay とかありましたね...
https://xn--pay-k73byfl10a.com/

## 最後に
なんか学校の授業とかでやらされそうなものができてしまった気がする。
どこかの学校の授業課題のお手伝いになれば幸いです(??)
AtCoder Beginner Contest 252 D - Distinct Trio

# 問題

https://atcoder.jp/contests/abc252/tasks/abc252_d

## 1が2つのとき。
例えば、以下の例だと、$_4C_3-2 = 2$と読み解くことができそうなので、そういう感じでやってみたい。

```
4
1 1 2 3
```

とりあえず、引く前の組み合わせ数は$_nC_3$です。ここから引いていくことを考えます。

まず、上の例の1のように、2つのときを考えます。このとき、数字の組み合わせとしては[1,1,x]となるときが、ダメなものです。xは2か3なので、2つです。

## 1が3つのとき。

3つになるとどうなるか考えます。以下の例の最終的な答えが3であることは簡単に分かります。$_5C_3=10$なので、7ぐらい引けると嬉しいことが分かります。

```
5
1 1 1 2 3
```

1が3つあるのでここに注目します。このとき、数字の組み合わせとしては[1,1,x]となるときがダメなものです。xは2か3です。一方で、それぞれの1は区別可能(それぞれはインデックスで管理されているので区別可能です)なので記号をふって1a, 1b, 1cなどとすると、[1a,1b,x], [1b,1c,x], [1c,1a,x]の3パターンがあります。つまり、

$$ _3C_2 \times 2 = 6$$

後、[1a,1b,1c]もダメなパターンです。これは1通りで、$_3C_3$の計算でできそうです。

合計で$6+1=7$になりました。この方法で良さそうです。



## 1がd個のとき。

さて、与えられた数字がn個、重複する数字である1がd個のとき、引くべき数は以下のようになります。左は[1,1,x]を、右は[1,1,1]の個数を数えています。

$$ _dC_2 \times (n-d) + _dC_3$$

## 一般化

さて、ありがたいことに、1がd(>1)個、2がe(>1)個あったとしても、[1,1,x]と[2,2,x]は互いに排反なので、引くべき数はそれぞれ独立に計算できます。つまり、全ての2個以上ある数字に関して$ _dC_2 \times (n-d) + _dC_3$を引いていけば良いだけです。

# 実装例
pythonで雑な実装をしています。ちなみにC言語では無事overflowをしたのでご留意を。

```python

def main():
    N = int(input())
    array_ = list(map(int,input().split()))

    d = {}
    for a in array_:
        if not a in d.keys():
            d[a] = 1
        else:
            d[a]+=1
    
    comp_unique = (N)*(N-1)*(N-2)/(3*2*1)
    for v in d.values():
        if v == 1:
            continue
        d = v
        n = N
        comp_unique -= (d * (d - 1) / 2) * (n - d) + ((d * (d - 1) * (d - 2)) / (3 * 2 * 1))
    
    print(int(comp_unique))

if __name__ == "__main__":
	main()
```
Requirements on Firmware Over-The-Air,  No.944, AUTOSAR R21-11(98) CP

Requirements on Firmware Over-The-Air,  No.944, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_RS_FirmwareOverTheAir.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|FOTA (AUTOSAR) |Firmware Over The Air

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Standardization Template
AUTOSAR_TPS_StandardizationTemplate
[2] Explanation of Firmware Over-The-Air
AUTOSAR_EXP_FirmwareOverTheAir
[3] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[4] Specification of Diagnostic Communication Manager
AUTOSAR_SWS_DiagnosticCommunicationManager
[5] NV Data Handling Guideline
AUTOSAR_EXP_NVDataHandling
[6] Requirements on Memory Services
AUTOSAR_SRS_MemoryServices
[7] Requirements on AUTOSAR Features
AUTOSAR_RS_Features
NV Data Handling Guideline,  No.810, AUTOSAR R21-11(97)

NV Data Handling Guideline,  No.810, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_EXP_NVDataHandling.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|NvM |NVRAM Manager
|NV |Non-volatile
|NVRAM| Non-volatile Random Access Memory
|NVRAM |Block The NVRAM Block is the entire structure, which is needed to administrate and to store a block of NV data.
|NV Block |The NV Block is a Basic Storage Object. It represents the part of a “NVRAM Block” which resides in the NV memory
|RAM Block |The RAM Block is a Basic Storage Object. It represents the part of a “NVRAM Block” which resides in the RAM.
|RAM Mirror |RAM mirrors are NvM internal buffer used for operations that read and write the RAM block of NVRAM blocks with NvMBlockUseSyncMechanism set TRUE.
|ROM Block| The ROM Block is a Basic Storage Object. It represents the part of a “NVRAM Block” which resides in the ROM.
|ROM| Read-Only Memory
|RTE |Runtime Environment
|SW-C| Software Component


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] AUTOSAR Specification for Runtime Environment, AUTOSAR_SWS_RTE.pdf
[2] AUTOSAR Template Specification of Software Component, AUTOSAR_TPS_SoftwareComponentTemplate.pdf
[3] AUTOSAR Specification for NVRAM Manager, AUTOSAR_SWS_NVRAMManager.pdf
[4] AUTOSAR Guide on Mode Management, AUTOSAR_EXP_ModeManagementGuide.pdf
Requirements on RAM Test,  No.114, AUTOSAR R21-11(96) CP

Requirements on RAM Test,  No.114, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SRS_RAMTest.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|ECU| Electric Control Unit
|EOL |End Of Line Often used in the term ‘EOL Programming’ or ‘EOL Configuration’
|MAL |Old name of Microcontroller Abstraction Layer (replaced by MCAL because ‘MAL’ is a french term meaning ‘bad’)
|MCAL |Microcontroller Abstraction Layer
|MCU |Microcontroller Unit
|NMI |Non maskable interrupt
|OS |Operating System
|SPAL |The name of this working group
|SFR |Special Function Register
|RTE| Runtime environment
|WP| Work Package
|STD |Standard
|REQ |Requirement
|UNINIT| Uninitialized (= not initialized)

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Glossary
AUTOSAR_TR_Glossary.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[4] General Requirements on SPAL
AUTOSAR_SRS_SPALGeneral.pdf
[5] Software Standardization Template
AUTOSAR_TPS_StandardizationTemplate.pdf
[6] CEI/IEC 61508-2:2000: Requirements for electrical/electronic/programmable electronic safety-related systems
[7] ISO 26262 (all parts) - Road vehicles - Functional Safety http://www.iso.org
AWS日記41 (AWS CodeArtifact)

# はじめに
今回は [AWS CodeArtifact](https://aws.amazon.com/jp/codeartifact/) を試します。
[コンソールを使用した開始方法](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/getting-started-console.html)を参考にします。
確認のため [CodeBuild](https://aws.amazon.com/jp/codebuild/) で CodeArtifact の npm パッケージを使用します。


# CodeArtifactのリポジトリ・ドメイン作成

![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/7d5a09ee-c7b8-a7f4-be5f-8ccb0d058fbd.jpeg)

![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/ba81bd7e-4dfe-6918-c5b8-0a3ddbf2c2c3.jpeg)

![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/d6106798-b656-61e3-add6-d2152ccbc750.jpeg)

![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/2acd5460-02d6-fe18-64ca-fb9563de034a.jpeg)


# 接続手順の確認

![06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/1e16ab39-ffc2-8ce9-e71d-7741feda3da8.jpeg)

![07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/62bc082d-edab-a536-2b26-4534ce81ad27.jpeg)


# 確認
### 確認用のCodeBuildプロジェクトを作成
![09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/2145bf88-26c5-3b1a-893a-bfe6cc27feb4.jpeg)
 - 「ソースなし」の設定で、上図の通りにビルドコマンドを設定
 - 参考：[CodeArtifact で npm を設定して使用する](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/npm-auth.html)

### ビルドを実行しログを確認
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/0ddffcc2-11af-49ca-ab35-ca15140fa238.jpeg)

 - 「resolved」の値がCodeArtifactで設定したドメインになる

# 削除
### CodeArtifactのリポジトリ削除
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/c3f9ef03-b078-ba77-69ee-0ba8344ea3ea.jpeg)

![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/abf86d7b-b080-a47a-52bd-a72677c8eaf8.jpeg)

 - 今回作成した「demo-repo」、「npm-store」の両方を削除

### CodeArtifactのドメイン削除
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/58f19717-2efa-f53c-b785-cc08fb0fe48a.jpeg)

![15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586707/2258d3e9-cffb-20fd-2906-130adad6a606.jpeg)



# デフォルトの npm レジストリに戻す

 - ローカル環境で AWS CLI コマンドを実行しCodeArtifactに接続した場合、CodeArtifact削除後にnpmレジストリを元に戻します

```bash
npm config set registry https://registry.npmjs.com/
```

# 終わりに
AWS CodeArtifact を試しました。
[サポートされるパッケージ形式](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/packages-overview.html#supported-package-formats)が追加され次第、また試そうと思います。


##### 以下のドキュメントを参考にしました

[コンソールを使用した開始方法](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/getting-started-console.html)

[CodeBuild で npm パッケージを使用する](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/using-npm-packages-in-codebuild.html)

[AWSCodeArtifactの概念](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/codeartifact-concepts.html)

[CodeArtifact で npm を設定して使用する](https://docs.aws.amazon.com/ja_jp/codeartifact/latest/ug/npm-auth.html)

##### 料金・無料利用枠
[AWS CodeArtifact の料金](https://aws.amazon.com/jp/codeartifact/pricing/)

##### 以下のイベントが記事作成の動機になりました
[AWS DevAx::connect シーズン 3 「rethink CI/CD」](https://pages.awscloud.com/JP2022_DevAxconnect_Season3.html?trk=aws_event_page_devaxconnect_s3)
Specification of Time Synchronization over CAN,  No.674, AUTOSAR R21-11(95) CP

Specification of Time Synchronization over CAN,  No.674, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_TimeSyncOverCAN.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|term|Description|
|:--|:--|
|GTM| Global Time Master
|BswM| BSW Mode Manager module
|<Bus>TSyn |Bus specific Time Synchronization module
|CAN FD |Controller Area Network (CAN) - Flexible Data Rate
|CanTSyn |Time Synchronization over CAN module
|CRC |Cyclic Redundancy Checksum
|Debounce| Time Minimum gap between two TX messages with the same PDU
|Det| Default Error Tracer module
|DLC| Data Length Code
|CanIf| CAN interface module
|FUP message| Follow-Up message
|OFNS message |Offset adjustment message
|OFS message| Offset Synchronization message
|OVS| Overflow Seconds value (field in FUP message)
|SC| Sequence Counter in Time Synchronization messages
|SGW |"Synchronized to Gateway" state of Time Synchronization
|StbM |Synchronized Time-Base Manager
|SYNC |message Time Synchronization message
|Timesync |Time Synchronization

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
Glossary も　参考に入れましょう。
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf

[1] Requirements on Time Synchronization
AUTOSAR_RS_TimeSync
[2] Glossary
AUTOSAR_TR_Glossary
[3] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[4] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[5] Specification of Synchronized Time-Base Manager
AUTOSAR_SWS_SynchronizedTimeBaseManager
[6] Specification of CRC Routines
AUTOSAR_SWS_CRCLibrary


 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20220521
Specification of Synchronized Time-Base Manager,  No.421, AUTOSAR R21-11(88) CP

Specification of Synchronized Time-Base Manager,  No.421, 2021-11

https://www.autosar.org/fileadmin/user_upload/standards/classic/21-11/AUTOSAR_SWS_SynchronizedTimeBaseManager.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|(G)TD |(Global) Time Domain
|(G)TM |(Global)Time Master
|<Bus>TSyn |A bus specific Time Synchronization Provider module
|AVB |Audio Video Bridging
|BMCA| Best Master Clock Algorithm
|CAN |Controller Area Network
|CanTSyn |Time Synchronization Provider module for CAN
|DET| Default Error Tracer
|ECU |Electronic Control Unit
|ETH |Ethernet
|EthTSyn |Time Synchronization Provider module for Ethernet
|FR |FlexRay
|FRC |Free running counter
|FrTSyn |Time Synchronization Provider module for FlexRay
|FUP| message Follow-Up message for a Synchronized Time Base
|GM(C) |Grand Master (Clock)
|GTS |Global Time Synchronization
|OFNS| message Time Synchronization message for an Offset Time Base (containing the nanosecond part of the time)
|OFS |message Time Synchronization message for an Offset Time Base
|PTP| Precision Time Protocol
|StbM| Synchronized Time-Base Manager
|SYNC |message Time Synchronization message for a Synchronized Time Base
|TG |Time Gateway
|Timesync |Time Synchronization
|TS |Time Slave
|TSD |Time Sub-domain
|TSP |Time Synchronization Provider

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)

[1] Requirements on Time Synchronization
AUTOSAR_RS_TimeSync.pdf
[2] Layered Software Architecture
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[3] Specification of ECU Configuration
AUTOSAR_TPS_ECUConfiguration.pdf
[4] Specification of Operating System
AUTOSAR_SWS_OS.pdf
[5] Specification of FlexRay Interface
AUTOSAR_SWS_FlexRayInterface.pdf
[6] Specification of CAN Interface
AUTOSAR_SWS_CANInterface.pdf
[7] Virtual Functional Bus
AUTOSAR_EXP_VFB.pdf
[8] Software Component Template
AUTOSAR_TPS_SoftwareComponentTemplate.pdf
[9] Basic Software Module Description Template
AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[10] Specification of TimingExtensions
AUTOSAR_TPS_TimingExtensions.pdf
[13] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral.pdf
[14] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral.pdf
[15] Specification of RTE
AUTOSAR_SWS_RTE.pdf
[16] Complex Driver design and integration guideline
AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf
[17] System Template
AUTOSAR_TPS_SystemTemplate
[19] Guide to BSW Distribution
AUTOSAR_EXP_BSWDistributionGuide.pdf
[18] IEEE Standard 802.1AS™- 30 of March 2011
http://standards.ieee.org/getieee802/download/802.1AS-2011.pdf
Specification of Time Synchronization over Ethernet,  No.676, AUTOSAR R21-11(93) CP

Specification of Time Synchronization over Ethernet,  No.676, 2021-11

https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_TimeSyncOverEthernet.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|(G)TD| (Global) Time Domain
|(G)TM |(Global)Time Master
|<Bus>TSyn |A bus specific Time Synchronization module
|AVB| Audio Video Bridging
|BMCA |Best Master Clock Algorithm
|CID |Company ID (IEEE)
|CRC| Cyclic Redundancy Checksum
|Debounce |Time Minimum gap between sending (Event) messages.
|DEM| Diagnostic Event Manager
|DET| Default Error Tracer
|ETH| Ethernet
|EthTSyn| Time Synchronization Provider module for Ethernet
|Follow_Up |Time transport message (Follow-Up)
|GM(C)| Grand Master (Clock)
|OFS |Offset synchronization
|Pdelay| Propagation / path delay as given in IEEE 802.1AS
|Pdelay_Req| Propagation / path delay request message
|Pdelay_Resp |Propagation / path delay response message
|Pdelay_Resp_Follow_Up| Propagation / path delay Follow-Up message
|PDU |Protocol Data Unit
|PTP |Precision Time Protocol
|StbM|Synchronized Time-Base Manager
|Timesync |Time Synchronization
|Sync| Time synchronization message (Sync)
|TG |Time Gateway
|TLV |Type, Length, Value field (acc. to IEEE 802.1AS)
|TS |Time Slave
|TSD |Time Sub-domain
|VLAN |Virtual Local Area Network

## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
Glossary も　参考に入れましょう。
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf

[1] Time Synchronization Protocol Specification
AUTOSAR_PRS_TimeSyncProtocol
[2] Specification of Synchronized Time-Base Manager
AUTOSAR_SWS_SynchronizedTimeBaseManager
[3] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[4] IEEE Standard 802.1AS-30
http://standards.ieee.org/getieee802/download/802.1AS-2011.pdf
[5] Requirements on Time Synchronization
AUTOSAR_RS_TimeSync
[6] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[7] Specification of CRC Routines
AUTOSAR_SWS_CRCLibrary