OmniAICreator/Qiita-1.07M huggingface dataset:
Windows OSの設定値変更のショートカットをまとめてみた

## はじめに
現職で大量のWindows serverの設定値を変更することになりました。
考えれば、もっといい方法があるんでしょうけど、いったん手動で設定値の変更をすることに
例えば、お客さんから”それぞれの設定項目を写真として提出してくれ”など依頼があった際は、以下の用法が役に立つかもしれません。

## 作業概要
今回は以下の作業を実施します。
①インスタンスの構築
➁SSMを使用して、必要な役割と機能のインストール
③OSにRDPし、それぞれの設定変更

#### インスタンスの構築
せっかくなのでCLIを使用してみました。

https://blog.serverworks.co.jp/cli-experience-with-cloudshell-part02

#### SSMを使用して、必要な役割と機能のインストール
今回構築するEC2はCloudwatchの監視対象であるため、以下のリンクに従ってエージェントのインストールを実行します。

https://www.sunnycloud.jp/column/20210912-01/


#### OSにRDPし、それぞれの設定変更
本来ならUserdataとか使えば良いのでしょうか、ここでは丁寧に一つずつ実施していきます。
といっても詳細は記載できないので、ここでは便利ショートカットについてまとめます。

①インターネットのプロパティを開く
→ncpa.cpl                

②役割と機能のインストール
わざわざRDPしなくても、セッションマネージャーからのSSH接続で役割と機能のインストールが可能です。
 

https://dev.classmethod.jp/articles/some-ways-to-install-windows-roles-and-features/

ちなみにこちらのコマンドでインストールされているサービスと機能一覧を取得できます。
```
PS> Get-WindowsFeature | Where-object {$_.Installed -eq $True} | Format-List DisplayName
```

③システムの詳細設定(システムのプロパティ）

sysdm.cpl

 

https://bizlog.tech/windows-run-sysdm/

 

④レジストリ（NTPサーバについて確認）

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\

 

⑤ローカルセキュリティポリシー
secpol.msc


⑥ローカルグループポリシー

gpedit.msc

 

⑦イベントビューア

EVENTVWR. MSC

 

⑧　cmd→systeminfo

 

⑨　services.msc


## おわりに
以上です。
今後便利なショートカットがあれば、随時追加していきます。
AWS CDK利用の準備備忘録

CDKを利用してバックエンドを構築するためにやった準備段階の備忘録。
基本的に
・TypeScript
・Yarn
を利用してます。

#### CDKインストール
しなきゃ話が始まらない。
`$ yarn global add aws-cdk`
一度インストールすれば、毎回インストールはいらない。
ただしバージョンアップは自動的にされないので、改めて使用する前には
`$ yarn global upgrade aws-cdk`
で最新版へアップグレードすること。

#### プロジェクト作成
新しいCDKプロジェクトを作成するには、まず空のディレクトリが必要になる。
`$ mkdir sample-dir && cd sample-dir`で
プロジェクトを管理したいディレクトリの作成及びそのディレクトリへの移動を行う。
ディレクトリに移動したところで、ようやくプロジェクトの作成となる。
`$ cdk init app --language=typescript`のように
使用したいテンプレート・言語を指定すればディレクトリ内にCDKが構築される。
`$ cdk init`とだけ入力すると
以下のようにテンプレートの一覧が出力されるので、作成する前に確認しても損はない。

```PowerShell:
$ cdk init

Available templates:
* app: Template for a CDK Application #基本的なCDKのAPPテンプレート
   └─ cdk init app --language=[csharp|fsharp|go|java|javascript|python|typescript]
* lib: Template for a CDK Construct Library #CDKコンストラクトライブラリのテンプレート
   └─ cdk init lib --language=typescript
* sample-app: Example CDK Application with some constructs #サンプル付きCDKのAPPテンプレート
   └─ cdk init sample-app --language=[csharp|fsharp|go|java|javascript|python|typescript]
```
サンプルなしで構築するなら`$ cdk init app --language=typescript`
サンプルありで構築するなら`$ cdk init sample-app --language=typescript`
ライブラリのみ作成なら`$ cdk init lib --language=typescript`
を入力すれば、それぞれに応じたテンプレートが作成される。

#### アプリケーションの作成へ
initコマンドによって、ディレクトリの中には以下が作成される。
```
├ bin
│ └ sample-dir.ts
├ cdk.json
├ jest.config.js
├ lib
│ └ sample-dir-stack.ts
├ package.json
├ package-lock.json
├ README.md
├ test
│ └ sample-dir.test.ts
└ tsconfig.json
```

あとは構築したプロジェクトの中で、必要に応じてライブラリ・モジュールを入れてStackを作成していく。

#### 頻出コマンド記録
CDKを使う上でよく利用するコマンドのメモ。
```
cdk init –language ：初期化
cdk bootstrap ：CDKのキットをCfnスタックとしてデプロイ　※最初に一回だけ実行
cdk ls *** ：指定されたStackをリスト
cdk diff *** ：既存Stackとの差異を表示
cdk synth *** ：Cfnテンプレートを出力
cdk deploy *** ：Stackをデプロイ
cdk destroy *** ：Stackを破棄
```
Azure Pipeline Templatesを使って共通の処理を切り出す

## Azure Pipeline Templatesとは
templateを利用するとPipeline上での再利用可能なコンテンツ、ロジックなどを定義することができます。
template実行時にパラメーターを渡すことができ、パラメーターによって処理を変えたり、ループ処理をする際に便利です。

さらにtemplateを実行する際は、別のリポジトリからでも実行でき、共通処理を完全に独立させることも可能です。

## やってみよう

### template側の実装
前回の記事のコードを流用してtemplateを定義してみます。

https://qiita.com/Yosuke_Sakaue/items/bae3475feaedacb25606

```yaml
parameters:
  - name: values
    type: object
    default: [] 

steps:
- ${{ each value in parameters.values }}:
  - powershell: |
      Write-Host "##vso[task.setvariable variable=sql;]$(TYPE $(Build.SourcesDirectory)\${{value}})"
    displayName: 'Expand SQL file ${{value}}'
    
  - task: SqlAzureDacpacDeployment@1
    displayName: 'Deploy procedure ${{value}}'
    inputs:
      azureSubscription: "<service connection name>"
      AuthenticationType: 'server'
      ServerName: $(SERVER_NAME)
      DatabaseName: $(DB_NAME)
      sqlUsername: $(USER_NAME)
      sqlPassword: $(PASSWORD)
      deployType: InlineSqlTask
      sqlInline: $(sql)

```

- `parameters`に受け取るパラメーターを定義します
- `${{ each value in parameters.values }}:`でループ処理が書けます


### 呼び出し側の実装

```yaml
trigger:
- main

variables:
- group: DB_VALUE 

resources:
  repositories:
  - repository: template-repo
    type: git
    name: <Project Name>/<Repository Name>
    ref: refs/heads/main

pool: windows-latest

steps:
  - template: template.yml@template-repo
    parameters:
      values: ["test.sql", "test2.sql"]
```

- `resources`にtemplateがあるリポジトリを定義します
    - 参照するリポジトリが同じDevOpsワークスペースにある場合は名前だけで参照できます
    - 別のワークスペースやGithubなどを参照する場合はendpointにサービスコネクションを指定する必要があります（https://learn.microsoft.com/ja-jp/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops）
- templateの呼び出しは`ファイル名@resourcesで定義したリポジトリ名`で呼びだすことができます

## 参考
https://learn.microsoft.com/ja-jp/azure/devops/pipelines/process/templates?view=azure-devops
TypeScript: ESモジュールのTypeScriptをNodeで直接動かす方法

TypeScriptをコンパイルのステップなしに、Node.jsで動かす方法として、よく知られているものに[ts-node]があります。ts-nodeはnodeコマンドのようなノリでTypeScriptファイルを実行できます。

```shell
# JavaScriptファイルの実行
node hoge.js

# TypeScriptファイルの実行
npx ts-node hoge.ts
```

ts-nodeがサポートしているのは、モジュールシステムがCommonJSのTypeScriptのみです。ES Modules(ESM)のTypeScriptはうまく動きません。

## tsxならESM版TypeScriptを動かせる

ts-nodeの競合ツールに、[tsx]というものがあります。これを使うと、ES ModulesのTypeScriptが楽に実行できます。

[tsx]: https://github.com/esbuild-kit/tsx

```shell
npx tsx hoge.ts
```

ts-nodeで苦労して動かしていたESMが嘘のように簡単に動きます。

ちなみに、tsxというのは、TypeScript Executeの略です。
AZ-305合格記(2022/12/28投稿)

# はじめに
この度MicrosoftのAZ-305試験(Azure Solutions Architect Expert)を年末駆け込み受験してきましたので、勉強した内容と受験した感想を書いておきます。
※この記事の内容かなり薄いです

# 前提
- AZ-900/AZ-104/AZ-700は取得済み
- AzureはAPIMを少し触ったぐらい
- AWSの実務経験あり
- AWS認定は全て取っています(詳細は[こちら](https://qiita.com/handy-dd18/items/d21d914bf1c475d777f2))

# 学習内容
## ①Udemy
今回は学習のアプローチを今までの試験とは変えて、以下のUdemyの模擬問題を買って解きながら不明点を調べるやり方で学習しました。
55問×6回分の問題が入っているので、これだけでも十分学ぶことができました。

- [AZ-305: Designing Azure Infrastructure Solutions Exam 2022](https://www.udemy.com/course/az-304-microsoft-azure-architect-design-exam-practice-tests/learn/quiz/5322932#learning-tools)

## ②公式ラーニングパス
あとは以下ページの下の方にあるラーニングパスのうち、Udemy問題で間違えた問題に関連するページを読むなどもしました。
ラーニングパスは一から全部見ようとするとかなりの時間がかかるので、ここ最近は勉強時間が中々取れなかったのもあって、必要なページだけ最小限で済むようにしました。

- [試験 AZ-305: Microsoft Azure Infrastructure Solutions の設計](https://learn.microsoft.com/ja-jp/certifications/exams/az-305)

# 受験した感想
この数カ月はほとんど勉強時間が取れなかったので、今回は不合格になる前提で問題に慣れる目的で受験してました。
合格できたのは、AZ-104で学習したAAD周りの内容を覚えていたこととAzureサービスとAWSサービスの対照表をある程度覚えていたので、そこから選択肢を絞れたことが大きいと思います。
正直次受験したら合格する気はしません。。

# 受験結果
710/700点と合格点ギリギリの結果でした。

# おわりに
試験を予約した当初は、ラーニングパスをベースに日々少しずつ勉強して、1ヶ月ぐらいで受験する予定でしたが、色々あってどんどん後ろにずれていって、気づいたら年末のこの時期になってました。
運のよかっただけでしたが、一応合格できたので2022年の終わりとしては良い気分で終われそうです。

内容薄すぎて何も参考にならなそうですが、少しでも誰かの参考になっていれば幸いです。
[javascript]Dateで日付の比較をする時は日付のフォーマットに気をつけようという話

多分出尽くしてるネタだとは思うけど、ハマったので備忘録として投稿。

# あらすじ

以下のコードを実行したところ、

```javascript
var currentDate = new Date('2022/12/01');

var startDate = new Date('2022-12-01');
var endDate = new Date('2022-12-31');

if (startDate <= currentDate && currentDate <= endDate) {
  alert('師走です')
} else {
  alert('師走じゃないです')
}
```

アラートに `師走じゃないです` が出力された。
!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?

# 何故こんな動きになったか？

Chrome だと `YYYY-MM-DD` だと時間が9時間ずれる不具合があるみたいです。

```javascript
console.log(new Date('2022-12-01')); // Thu Dec 01 2022 09:00:00 GMT+0900 (日本標準時)
```

ちなみにこれはChrome特有の不具合で、Firefox, IE 11 では再現しないようです。
https://kenzauros.com/blog/new-date-makes-wrong-date-with-javascript/
( 勝手に参照させていただきました。ありがとうございます　:bow:  )

# 対処方法

### 1: 日付のフォーマットを `YYYY/MM/DD` で統一する

```javascript
var currentDate = new Date('2022/12/01');

var startDate = new Date('2022/12/01');
var endDate = new Date('2022/12/31');

if (startDate <= currentDate && currentDate <= endDate) {
  alert('師走です')
} else {
  alert('師走じゃないです')
}
```

- 少なくとも `Chrome` `Firefox` `IE 11` では問題なく動く
- 他のブラウザでどう動くかわからないし上記ブラウザでも将来的に仕様が変わる可能性があるのでちょっと不安
  - [MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/Date) によると ISO 8601 形式を推奨してる模様(他のフォーマットだと各ブラウザでの挙動が保証されてないため)

### 2: ISO8601 フォーマットを使う

```javascript
var currentDate = new Date('2022-12-01T00:00:00+09:00');

var startDate = new Date('2022-12-01T00:00:00+09:00');
var endDate = new Date('2022-12-31T00:00:00+09:00');

if (startDate <= currentDate && currentDate <= endDate) {
  alert('師走です')
} else {
  alert('師走じゃないです')
}
```

- 国際規格なので、ブラウザ間での挙動の違いがないはず
- JST前提で `+09:00` 決め打ちしたけど海外からのアクセスを想定する場合は適宜 `+09:00` の変更が必要


---

js の Date は辛い :innocent:
Amazon GuardDuty RDS Protectionについて調べてみた

# はじめに
re:Invent 2022のリリースの中でGuardDutyの新機能としてRDS Protectionが発表されました(プレビュー)。GuardDutyはEC2やS3、VPCフローログ、DNSログ、CloudTrail管理ログなどを継続的にモニタリングする事で悪意あるアクティビティを調査してくれる脅威検知サービスです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-guardduty-rds-protection-preview/

今回のリリースではそのモニタリング対象としてRDSが追加されたという内容になります。まだプレビューでGAはされていませんが、具体的に何をしてくれるものなのかを再確認する意味も含めて調べてみようと思い、その記録として書いていきます。

# RDS Protectionがしてくれること
- AuroraDBインスタンスへの**ログインアクティビティの監視**
- 疑わしいアクティビティの検出(不正アクセスなど)
- 侵害された可能性のあるDBインスタンスに関するレポートの生成

# 対象
サポートされているRDSは、現時点では以下のAuroraDBバージョンに限定されます。

|DBエンジン|バージョン|
|---|---|
|Aurora MySQL| 2.10.2 および 3.2.1 以降|
|Aurora PostgreSQL|10.17、11.12、12.7、13.3、および 14.3 以降|

# 検出結果タイプ
GuardDuty RDS Protectionは2種類の検出結果タイプをサポートしています。

|検出結果タイプ|重大度|概要|想定する原因|対応|
|---|---|---|---|---|
|CredentialAccess:RDS/<br>AnomalousBehavior.**SuccessfulLogin**|中|ユーザーが**異常な方法**でRDSデータベースに**正常にログインしました**。|RDSのなどロール侵害、資格情報の漏洩|パスワード変更、侵害されたユーザによって実行されたアクティビティの調査|
|CredentialAccess:RDS/<br>AnomalousBehavior.**FailedLogin**|低|RDSデータベースで**異常なログイン試行の失敗が1回以上観察されました**。|悪意ある者からのブルートフォースなどのによる攻撃|アクセスポリシーやNW構成、SGなどの見直し|

# 有効化
新規アカウントであればGuardDutyそのものを有効化した時点でRDS Protectionも自動的に有効化されますが、既存アカウントの場合はコンソール上で有効化する必要があります。※2022/12時点

![スクリーンショット_2023-01-03_22_26_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/ec99f3eb-a7da-4156-7046-7f6d8677d972.png)

:::note warn
初めてRDS Protectionを有効にする場合や、新しく作成されたデータベースインスタンスがある場合は、**通常の動作のベースラインを設定するために最大2週間の学習期間が必要です**。その間、異常なログイン結果が関連付けられていない可能性があります。
:::

# RDS Protectionによる調査結果
具体的にどういったレポートが出力されるのかパッと全容が分かるものが見つけられなかったので参考にre:Inventにて発表された内容として以下が挙げられます。

![スクリーンショット 2023-01-03 23.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/2c8b24c4-a98f-419f-0c0d-8632028acbfb.png)

- 異常な動作がログイン成功か失敗か
- ユーザやDB、アプリケーション名、DBにアクセスしたASN
- 不正アクセスされたDBと不正アクセスに関与したユーザの詳細
- DBに不正アクセスしたIPアドレス、国、ASN

# 侵害されたデータベースの修復
AWSはGuardDuty RDS Protectionにて脅威検知したDBに対して、それぞれ以下の方法で修復を推奨としておりました。

## 成功したログインイベントで侵害された可能性のあるデータベースに対して
1. 影響を受けるデータベースとユーザーの特定
    1. レポートにより、影響を受けるDBの名前と対応するユーザーの詳細を確認
1. 動作が予期されたものか予期しないものかを確認
1. データベースインスタンスへのアクセスを制限
    1. 疑わしいアカウントやユーザのDBアクセスを制限
1. アクセスされた情報を特定
    1. 監査ログを確認
    1. アクセスされた可能性のある情報を特定
    1. 機密情報などがアクセスまたは変更されたかどうかを確認

## 失敗したログインイベントでデータベースが侵害された可能性がある場合
1. 影響を受けるデータベースとユーザーを特定
    1. レポートにより、影響を受けるDBの名前と対応するユーザーの詳細を確認
1. 失敗したログイン試行の原因を特定
    1. レポートにより、IPアドレスとASN組織を特定
1. この動作が予期しないものであることを確認
    1. プリケーションの構成が間違っていないか
    1. 接続を繰り返し試行しているかどうか
    1. DBがパブリックに公開されているか
    1. インフラ構成が誤っているかどうか
1. DBへのアクセスを制限
1. このアクティビティの原因を分析して可能性のある手順を特定

## 侵害された可能性のある資格情報に対して
1. レポートの**resource.rdsDbUserDetails**より、ユーザ詳細(ユーザー名、使用したアプリケーション、アクセスしたデータベース、SSL バージョン、認証方法)を確認
1. 資格情報の保護パターン
    1. 特定ユーザーのアクセスを取り消すか、パスワードをローテーション
    1. Secrets Managerを使用して、データベースのシークレットを安全に保存し、自動的にローテーション
    1. IAMデータベース認証を使用して、パスワードを必要とせずにDBユーザーのアクセスを管理
    
## ネットワークアクセスを制限する場合
1. レポートの**resource.rdsDbInstanceDetails.dbSecurityGroups**により、セキュリティグループの精査
1. NACLの再構成

# まとめ
GuardDutyのRDS Protection機能について調査してみました。ベースライン確立までに最大2週間かかるということで、実際の不正ログインレポートを確認するところまでやりたかったですが持ち越しとなりました。まだプレビューではありますがDBへの不正ログインを脅威検知できる素晴らしい機能ですので、GAされたら是非とも必須導入としていきたいですね。
ITP1_7_B How many ways?の自分的まとめ（Python）

ITP1_7_B How many ways?の問題の解説を復習としてまとめようと思い書いていきます。

ここからアクセスできます。

https://onlinejudge.u-aizu.ac.jp/problems/ITP1_7_B

# ①考え方
1~nまでの数の中から重複のないように3つ選び、その総和がxになったケースを数えるプログラムを書くことでACになります。
ではどのようにしたらよいでしょうか？
ここで真っ先に思いついて欲しいのが
#### <font color="Red">**全探索 !!**</font>
これを使うことで解くことができます。
あと考えやすいっていうのもありますね。

ではここから全探索を使って考えていきましょう！
整数i, j, kを用意します。
どのように探索するかと言いますと
1 <= i <= n, 
i+1 <= j <= n, 
j+1 <= k <= n
の範囲を探索します。
その中でi+j+k = xになるケースを数えることで解くことが出来ました。
jとkはなんで1からじゃないの？って話なんですが、重複なしで選びたいので、 i < j < kとなるようにしておきたいからです。

でここからなんですが、もっと軽くしたい（計算量を小さくしたい）と思います。
どのようにするかというと、
kを探索しないようにすることです。
えっ、どういうこと？って思いますよね。
でもできるんです。
このことにお気づきでしょうか？
<font color="Red">**i, j, xが決まっているのでkは一意に定まる**</font>
ということです。
なのでkを求めてそれがj < k <= nであるケースを数えることでACになります。
よって、O(N^3) → O(N^2)に軽くすることができました。

最初に解説したものはsolution1に、先程解説したものはsolution2に実装例が載っています。言語はPythonです。

# ②提出したコード

### solution1
```python:solution1
ans = 0
while True:
    n, x = map(int, input().split())
    if n == 0 and x == 0:
        break
    for i in range(1, n+1):
        for j in range(i+1, n+1):
            for k in range(j+1, n+1):
                if i + j + k == x:
                    ans += 1
    print(ans)
    ans = 0
```

### solution2
```python:solution2
ans = 0
while True:
    n, x = map(int, input().split())
    if n == 0 and x == 0:
        break
    for i in range(1, n):
        for j in range(i+1, n):
            k = x - i - j
            if i < j < k and k <= n:
                ans += 1
    print(ans)
    ans = 0
```

# ③まとめ
この問題は全探索とはどんなものかというのを理解するのにとっておきの問題だと思いますので、是非解いてみてください。参考文献に問題のリンクと自分がよく閲覧している記事を紹介しておきます。

# ④参考文献
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_7_B

https://qiita.com/e869120/items/eb50fdaece12be418faa#%E5%85%A8%E6%8E%A2%E7%B4%A2%E5%85%A8%E5%88%97%E6%8C%99
Vue.js devtools を production mode で実行する

# 環境

* Vue.js - 3.2.13

# 結論

こうする

```js:vue.config.js
const { defineConfig } = require("@vue/cli-service");

module.exports = defineConfig({
//...
  chainWebpack: (config) =>
    config.plugin("feature-flags").use(require("webpack").DefinePlugin, [
      {
        __VUE_PROD_DEVTOOLS__: JSON.stringify(true),
      },
    ]),
//...
});
```

# 参考
7年前にEC-CUBE 2の脆弱性を発見したときのメモ

下書き7年前っていうのが残っていたので公開しておく。
危険度「中」だから直してない人も結構居るんじゃないかなと思って公開せずにいたのだった。

シンプルなCSRFだけど、管理画面からPHPを編集できる系のCMSだと実質何でもできてしまう。こういうのってPHPあるあるだよねえ…。Javaには無いだろうし、RubyとかPerlとかもあまり無さそう。チェックしてないだけかもわからんが。
HTMLにちょっとした動的コードをPHPで埋め込む、デザイン用HTMLをアップする感覚でPHPをアップする、っていう文化があるからだろうか。


----

[クロスサイトリクエストフォージェリの脆弱性 2015年 10月 23日](https://www.ec-cube.net/info/weakness/weakness.php?id=63)
これを修正していたら、あ、直ってないじゃんっていう。

それで報告して
[クロスサイトリクエストフォージェリの脆弱性 2015年 11月 13日](https://www.ec-cube.net/info/weakness/weakness.php?id=64)
こちらに更新された。

自分は特に脆弱性に詳しいっていうわけではないけれども、ただ単にちゃんと脆弱性が直ったかどうか確認していたら見つけた。コミュニティが小さいとかPHPに詳しい人はEC-CUBE使ってないとかがあって、こういうのに気付ける人が他に居なかったのかな。


ざっと見た感じ、クロスサイト〜〜の脆弱性は危険度「中」になっている。
でもEC-CUBEはWordPressのように管理画面からコンテンツを変更できるんだよね…。
しかもWordPressみたいに特殊なプラグインを入れずにPHPコードが書ける。

まあ日本専用だと簡単に攻撃されないだろうけど、スルーしていた危険度が低い過去の脆弱性も全部見直して本当に直っているか確認した方がいい気がした。
iPhoneで横向きにした際に画面いっぱいに表示したい

主題のiPhoneX以降のあたりのデバイスで横向き（landscape）にした際、
左右に白い余白が見えちゃう問題とその解決策


![iPhone.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884345/c2db853b-3f9a-d851-4bf7-44a76dc4967a.jpeg)




## 画面の比率が違う
iPhoneX以降、表示領域が画面いっぱい（縦横比19.5:9）と
カメラからタッチパネル部分までの表示領域(縦横比16:9)の
2タイプが主流の昨今ですが、画面の縦横比が異なるが為に
如何にメディアクエリでフルレスポンシブ対応をしていようと
横向きに傾けた時に左右に余白ができてしまう場合があります。

横向き対応をしていなくてもサイトの表示には問題ないのですが
ごく稀にこの横向きでも画面いっぱいに表示させてほしいと言われることがあります。

## 画面いっぱいに表示させる方法

htmlファイル側のhead内のviewportに`viewport-fit=cover`を追加します。

```index.html
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
```

これでiPhoneX以降の横向きの際、画面いっぱいに表示することができます。


## セーフエリアも意識する

横いっぱいに表示できるようになったものの
このままだと触った場所によっては変にページリンクに飛んでしまったりと
思わぬ操作を引き起こしてしまいます。

そうならないように横向きいっぱいにする際は
セーフエリアを確認しつつenv()やpaddingなどで余白を作りレイアウトを調整をお勧めします。


### 参考
[Appleのレイアウトガイド（英語）](https://developer.apple.com/design/human-interface-guidelines/foundations/layout/)
[env()について](https://developer.mozilla.org/ja/docs/Web/CSS/env)
選択範囲のテキストを取得していろいろするためのクローム拡張サンプル

「～をgoogleで検索」の右クリックメニュー(コンテキストメニュー)を再現しました。汎用性があると思い、ソースコードを公開します。

![memo4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686678/68b12c37-ae64-d471-b9f6-6b4d1b3274cc.jpeg)
※私の期待したユースケース

マニフェストがv2(2021年までのブログ記事に散見)だとコードが動かなくなってしまっており、いろいろサンプルコードが動かなくなってしまっており、バージョンアップも簡単ではないので、材料集めに苦労しました。
というわけで作ったものを公開しますので誰かの種になりますように。

ちなみに下記のサンプルもおすすめです。
https://github.com/GoogleChrome/chrome-extensions-samples

```json:manifest.josn
{
    "manifest_version": 3,
    "name": "nantoka-Search",
    "description": "選択範囲にあるテキストを取得して、新しいタブを開いて検索したりします。",
    "version": "0.9",
  
    "background": {
      "service_worker": "background.js"
    },
  
    "permissions": [
      "activeTab",
      "contextMenus",
      "scripting",
      "tabs"
    ]
  }

```

```javascript:background.js
const updateContextMenus = async () => {
  await chrome.contextMenus.removeAll();

  chrome.contextMenus.create({
　　　//コンテキストメニューに追加
      id: "nantoka-search",
      title: "???を検索",
      contexts: ["all"]
  });
};

chrome.runtime.onInstalled.addListener(updateContextMenus);
chrome.runtime.onStartup.addListener(updateContextMenus);
chrome.contextMenus.onClicked.addListener((info, tab) => {
  
  var str = info.selectionText;
  chrome.tabs.create({url: "https://kensakusuruyo→/?"+code });
  
});
```

※クローム拡張の仕様を理解しないまま、主にいろんなサイトからコピペしまくって30分ほどで作りました。変なところがあればご指摘ください。
CloudWatchでRailsアプリケーションログの10秒以上の処理を抽出するフィルタの書き方 

# はじめに
医療系クラウドサービスを提供しているレイヤードという会社で働いています。

今回あるサービスのデータベースにおいて`Lock wait timeout exceeded`が発生し、やたら処理時間が長いヤツがいそうだゾ（しかもトランザクションかけてやがる！）、という事で犯人捜しをした時のメモです。

AWSのClowdWatchでRailsのproductionログを対象に「◯秒以上の処理」を検索しました（しょーもなくてごめんなさいw）。
RailsのログでなくてもDBやWebサーバのログ検索も同様に使えると思います。

# 前提
当然ながらClowdWatchにログを上げている前提です。
Railsのログは下図のようになっており矢印のms箇所を検索します。
[![Image from Gyazo](https://i.gyazo.com/38b43cfc7f81df1c54d564b685b6aee9.png)](https://gyazo.com/38b43cfc7f81df1c54d564b685b6aee9)

# 手順
- ClowdWatchの画面で「ログのインサイト」で検索します
- ロググループで検索対象のログを選択したらフィルタを追加して絞り込みます
- 2行目のparseで`q_time`にmsの数値部分を格納します
- 3行目の`q_time*1`で数値にキャストした上で、演算子を利用して検索します（本ログはmsなので画像では10秒以上かかった処理になります）
[![Image from Gyazo](https://i.gyazo.com/2c2dc05ec19f4272822859b4f4acff71.png)](https://gyazo.com/2c2dc05ec19f4272822859b4f4acff71)

# おわりに
弊社のインフラエンジニアの方に教えてもらいました。
私同様に正規表現で検索している方は是非お試しください。

※普通にドキュメントに分り易く書いてあるんです。ごめんて。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html
SEO対策としてnuxt-imageを導入して画像を最適化

## はじめに
nuxt2系を使用したサイトでSEO対策を実施中、初期ロードの速度が遅く、それの原因が画像の読み込みだったため改善を実施することにしました。
nuxt公式の推奨プラグイン、nuxt-imageを使用することにしました。

## 導入
公式ドキュメントを参考に導入していきます。
https://image.nuxtjs.org/

npm経由でインストールします。
`npm install -d @nuxt/image`

設定をコンフィグに記載していきます。

``` nuxt.config.ts
export default {
  modules: [
    '@nuxt/image'
  ],
}
```

``` tsconfig.json
{
  "compilerOptions": {
    "types": [
      "@nuxt/types",
      "@nuxt/image"
    ]
  }
}
```

## 画像最適化
nuxt-imageでは`<nuxt-img>`と`<nuxt-picture>`の二つのタグが使用できます。
それぞれ、`<img>`と`<picture>`の置換です。

``` index.vue
<template>
  <div>
    <nuxt-img
      :src="/images/post_img.jpg"
      placeholder="/images/post_img.jpg"
      :alt="articleTitle"
      loading="lazy"
      :width="imgSize"
      quality="90"
    />
  </div>
</template>

```
### 各オプション
- `src`
画像のソースを指定します。
ローカル画像の場合`static`配下にあるファイルがルートとして認識されます。
`例： :src="/image/hoge.jpg"`
また、外部サイトの画像を使用する際、オプションの`domains`でドメインを許可することにより外部サイトの画像も最適化することができます。


- `placeholder`
`src`で指定した画像が読み込まれる前に表示される画像です。
CLS対策として有効です。

- `alt`
画像の説明を記載します。
SEO観点上設定が必須です。

- `loading`
ロードオプションを指定します。
`loading="lazy"`を指定することでlazyloadが有効になります。
lazyloadを有効化することでページに表示されていない画像の取得を遅らせることができ、初期ロード時の速度向上が見込めます。

- `width/ height`
 画像のwidth/ heightを指定できます。

- `sizes`
レスポンシブでのサイト表示に対応できます。
`例： sizes="sm:10vw md:50vw lg:100vw" `

- `quality`
画像のクオリティを指定します。

- format
画像の配信形式を指定します。指定がない場合、標準の画像フォーマットでの配信となります。

## 共通オプション
コンフィグファイルに共通設定を記載します。
`domains`に許可するドメインを追加することで外部サイトの画像でもnuxt-image側で最適化がされます。
`screens`で各ウインドウサイズを指定することができます。
``` nuxt.config.ts
export default {
  image: {
    domains: [
      'https://example.com'
    ],
    screens: {
      mobile: 320,
      sm: 640,
      md: 768,
      lg: 1024,
      xl: 1280,
      xxl: 1536,
      '2xl': 1536
    }
  }
}
```

## 設定してどれくらい変わったのか
- 設定前
  - ![スクリーンショット 2022-12-20 19.02.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268314/67de4675-1059-f155-e5f2-3b6d0b119f58.png)
- 設定後
  - ![スクリーンショット 2022-12-28 11.42.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268314/3fc51c62-19c4-521c-eeac-8dc3e42a1fe3.png)

画像解像度を小さくすることでファイルサイズを縮小でき、ページロード時の速度がかなり向上しました。
モバイル版での効果がかなり大きく、10KB程度の画像サイズで済むようになりました。
![スクリーンショット 2022-12-28 11.48.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268314/896167a9-b20a-950b-6b85-2c91a7f3392b.png)


元々、Webpでの画像配信を実施していたため、読み込み速度に関してはそこまで問題ないのではないかとかんがえていましたが、最適な画像サイズでの配信を実施が一番速度向上に寄与するようです。
Azure の機能を使って Azure VM のネットワークキャプチャを取る

駆け出しアーキテクトのやまぱんです。
今回は Azure の機能を使って Azure VM のネットワークキャプチャを取る方法についてお伝えします✨

Azure を触り始めて、1年以上経つまで旧来のオンプレ環境でもできる方法でしかネットワークキャプチャをとったことがありませんでした。
Azure の機能、Azure Network Watcher を使うことで、OS にログインすることなく、 Azure Portal 上からの操作だけでキャプチャすることができます。


### 旧来の方法
まず、私が旧来の方法と書いたものは下記を指します。
Azure を触り始めて一年ほどはこの方法でネットワークキャプチャをしていました。

#### Windows 
WindowsであればOSにログインし **netsh コマンド**を使ってキャプチャを取る

* キャプチャ開始
```
netsh trace start capture=yes
```
* キャプチャ終了
```
netsh trace stop
```

#### Linux
Linux であれば OS にログインして **tcpdump コマンド** を使ってキャプチャを取る

* キャプチャ開始
```
tcpdump
```
* キャプチャ終了
> CTRL + C

参考

https://qiita.com/tossh/items/4cd33693965ef231bd2a


### Azure を使ったネットワークキャプチャ方法
さてここからが本題です。

公式 Docs はこちらです。
詳細な設定値などは下記をご覧ください。

https://learn.microsoft.com/ja-jp/azure/network-watcher/network-watcher-packet-capture-manage-portal#start-a-packet-capture

簡単に手順を記載します。

#### 1.Azure Portal で "Network Watcher" を検索し、選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/0dfe75f7-e36e-aed0-d331-c34972f24b59.png)

#### 2.左ペインの "パケットキャプチャ" を選択し、必要に応じて設定値を入れて "パケットキャプチャの開始" を押下。
キャプチャがトリガーされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/35f3d310-bf13-1fd2-b8f3-f25a153c0c08.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/a028b51c-cd1d-bccd-c626-68ff571ebe6d.png)

#### 3. "最新の情報に更新"を押下し、 パケットキャプチャが動いていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2d08d9f8-c46d-1171-8c64-4b9d288ae9b4.png)

キャプチャしたい操作を実施します。


#### 4.キャプチャ停止する
下記の画面ショットの "停止" を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/6cd3cdea-6e4e-5cdb-e9f9-2e6637a07753.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/a14d37e2-bb55-1085-c4db-158a60786bfa.png)

#### 5. "最新の情報に更新"を押下し、キャプチャが停止されたことを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/be54edec-d2bc-4969-2621-af501c3f58bc.png)


#### 6.キャプチャファイルを確認する。
5.の画面の "保存場所" のリンクをクリックする。
遷移先の画面から "ダウンロード" を押下することでキャプチャファイルをダウンロードすることが可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/af47816e-2134-9ee9-55e5-84a92cfa591d.png)

例として今回は下記のようなファイルがダウンロードされました。
```
packetcapture_04_34_35_761.cap
```

cap ファイルなので WireSharkで確認することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/b24e65a9-e62c-ef11-c10b-2845acf7c1bf.png)

:::note info
補足：取得したファイルが cap ファイルで WireSharkで確認することが可能。
:::

### 補足
この Azure Networkwatcher の機能はVM エージェントと連携する機能です。
なので、VM エージェントが対応していない NVA などの特殊な OS やレガシーな OS の場合は利用することができません。
また、ほぼ当たり前ですが、 Azure VM が稼働していない時には取得することができません。
(これは旧来の方法でもOSにログインできないので当然かと思います)

旧来の方法ではコマンドを打ってすぐにキャプチャが開始されたことが分かりますが、この方法ではキャプチャが開始されたことが Azure Portal で確認できるまで数秒かかりります。

とはいえ、モダン使い方をするのであればこの方法を使うのがスマートだと思います。
Azure VM にログインする必要がないので、 Azure Portal でポチポチクリックするだけでキャプチャがとれて楽ちんですし、Azure VM ログインできない人でもネットワークキャプチャを取得することができます。
2022年に学んだスキル

# 初めに
2022年もあと僅かとなってきました。
ということで、2022年に学んだスキルを書いていきたいと思います。
※卒論もやばいですし、項目の詳細を書いていたら長くなるので箇条書きでいきます。
※完全に主観的な項目分けなので、粒度の差や知識量の差、被りには目をつぶってください。

# フロントエンド
- Vue3
    - Composition API
    - Vuex
- Web Storage
    - localSotrage
    - sessionStrage
- indexedDB
- Jamstack
    - 講義にて簡単な静的サイトの作成
# バックエンド
- Express
    - Sequelize（migration,seed,association）
- スクレイピング
    - Seleniumを利用したGoogleの検索結果取得
- TypeScript
    - 実行環境の構築
    - 基本的な構文や記述ルールの把握
    - Reactでの使用
- React
    - 基本的なルーティングや非同期での表示の変更
- GraphQL
    - 少し触っただけなので全然理解はまだです。
- Ruby on Rails
    - 環境構築
    - Active Record
    - erbでのフロント作成
# インフラ
- AWS EC2
    - 初歩的な作成とコマンドう操作のみ
- Docker
    - Docker-composeを用いた、WordPress、Node.js、Rubyの環境構築
# 開発手法や言語学習
- 開発工程
    - 開発の流れ
    - UML（クラス図、シーケンス図）
    - チケットでのタスク管理
    - スプリント
- GO言語
    - 基本的な構文や記述ルールの把握
- Ruby
    - 基本的な構文や記述―ルールの把握

# まとめ
意外とこうやってまとめてみると少ないと感じています。しかし、インターンの中で精度の高い理解だったり、大学の復帰や終活などに時間を割かなければならなかったため、悪くないのかなと思っています。
GitHubのcontributionは300を超えており、前のインターンのものを合わせると確実に365は超えており、平均して1日に1回contributionができたと思います。
来年は就職してエンジニアとして本格的に活動していくので、さらなる技術的なキャッチアップができるように頑張ります。また、noteの投稿も全然できてない現状もあるので、来年はそこにも力を入れたいです。もちろん、Qiitaも。
[noteも見てね](https://note.com/gimanage)
機械学習系の投稿ログ一覧

# はじめに
最近、[量子コンピュータの記事](https://qiita.com/shnchr/items/41fa7fd1284d74007a7c
)ばかり書いていて、機械学習系記事が、
投稿ログに埋もれてしまっている気がするので、過去ログを一覧化しました。
今後、投稿毎にこちらのアップデートしていきたいと思います。

# ML/可視化ライブラリ
### [Shapash](https://qiita.com/tags/shapash)
https://qiita.com/shnchr/items/f7e9aaa5105ba885e8f5

https://qiita.com/shnchr/items/d4d738ab62ff2ae901e5

### [PyCaret](https://qiita.com/tags/pycaret)

https://qiita.com/shnchr/items/c999e471ba940dacfe94

https://qiita.com/shnchr/items/bdd4810b3477aa977413

https://qiita.com/shnchr/items/be21f10748a14a2b3b40

https://qiita.com/shnchr/items/7991f8ca7ae7acf1dad9


### [seaborn](https://qiita.com/tags/seaborn)

https://qiita.com/shnchr/items/4f41bd2c6162707e7e44

## 機械学習　評価指標
https://qiita.com/shnchr/items/a88b1eb2bba8002ecd5d

https://qiita.com/shnchr/items/f5066021b7143566f950

https://qiita.com/shnchr/items/fc321bfe4fca2b8565d7


## ちょいネタ・雑記
https://qiita.com/shnchr/items/ca33b8bec84875af9e16

https://qiita.com/shnchr/items/a22480760ba57039e0e0

https://qiita.com/shnchr/items/2b81e68fe25605a0a633

https://qiita.com/shnchr/items/1f87c330bd6fa4b09a31

https://qiita.com/shnchr/items/bbecc7cf984bf80aee27

# おまけ
なお、量子コンピュータ系の記事投稿一覧はこちら

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

https://qiita.com/advent-calendar/2021/nri_quantum
Power Query ヘルパークエリ詳説 (1) 各パーツの役割

# ヘルパークエリとは
　ExcelやPower BIのPower Queryで、フォルダーを指定してデータを取得しようとすると、いきなりたくさんのクエリが勝手に作成されて「うざ！」とか思ってる人がいると思います。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8ac77ebc-83e0-be59-645f-81594c3e8b53.png"/>


　ヘルパークエリがなぜこのような多数のクエリが必要なのか、どのような役割なのかを解説します。

# ヘルパークエリの役割
　ヘルパークエリは、複数のデータソースの処理を１つの定義を使って行います。その定義が書かれているのは、①「**ファイルの変換**」という関数です。その関数にデータソース名を次々と渡して変換を行い、最期に１つのファイルに纏める作業を行っているのが②「**新しいフォルダー**」というクエリでです。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a5e257a2-3f33-7bfd-a94e-4d2598544ebf.png"/>

 それでは、残りは何をやっているかというと、関数「ファイルの変換」を作成するために必要なパーツとなっています。

<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/17989234-3e32-b493-bd91-d8df50f70011.png"/>


　④「**サンプルファイル**」は、データソースの中から１つをサンプルとして取り出したものです。③「**パラメータ１**」は、このサンプルのデータソース名です。⑤「**サンプルファイルの変換**」では、それを使って変換処理を行っています。

　そして、ここが一番キモとなるところですが、⑤「サンプルファイルの変換」を **関数に変換** したものが①「ファイルの変換」関数です。クエリを右クリックする時に表示される「関数の作成」の動作と同じです。

<img width="200" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/4a280cd2-b56c-7180-8178-d7ddbb763498.png"/>

　親切にも、⑤「サンプルファイルの変換」を編集すると、自動的に①「ファイルの変換」に変更内容が反映されます。
 
 ところが、①「ファイルの変換」を詳細エディタで編集しようとすると、以下のような警告が表示されます。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/a66778c5-f175-04fc-3c61-06944b46715b.png"/>

　この警告を無視して編集すると、⑤「サンプルファイルの変換」と①「ファイルの変換」の同期が切れ、⑤「サンプルファイルの変換」を修正しても①「ファイルの変換」に反映されなくなります。Power Queryについてあまり知らないうちは、直接編集しないほうがよいでしょう。
Nx Consoleでコロン(:)区切りのスクリプトが認識されない

VS Codeの拡張機能の[Nx Console](https://marketplace.visualstudio.com/items?itemName=nrwl.angular-console)で`lint:fix`や`format:fix`のようなコロン区切りのスクリプトを実行するとコロン以降が消えたスクリプトが実行されるのでメモ。

例）`lint:fix`を実行する

```bash
*  実行するタスク: yarn nx run {project}:lint:fix

yarn run v1.22.18
$ node_modules/.bin/nx run {project}:lint:fix

> nx run {project}:lint  [existing outputs match the cache, left as is]
```

`lint:fix`を実行しているにも関わらず、`lint`が実行されます。

## 原因

> Nx generally uses a colon to delimit `nx run {project}:{target}:{configuration}`
, so it interprets the command as a target and configuration.
> 

[https://github.com/nrwl/nx/issues/9232#issuecomment-1067207447](https://github.com/nrwl/nx/issues/9232#issuecomment-1067207447)

つまり、今回の例で言うと`:fix`に当たる部分がtargetではなく、configurationとして認識されるために起こってしまいます。

スクリプトをコマンドラインから実行する場合は、以下のようにすると動きます。

```bash
nx run {project}:\"lint:fix\"
```

ただ、Nx Consoleでは上記のような設定はできません。

## 解決策

スクリプトをコロン区切りではなく、ハイフン区切りに変更すると直ります。

```bash
*  実行するタスク: yarn nx run {project}:lint-fix

yarn run v1.22.18
$ node_modules/.bin/nx run {project}:lint-fix

> nx run {project}:lint-fix  [existing outputs match the cache, left as is]
```

実際、Nxのpackage.jsonのスクリプトは全てハイフン区切りになっていました。

[nx/package.json at master · nrwl/nx](https://github.com/nrwl/nx/blob/master/package.json)

## 参考

[lerna run fails on colon-separated scripts with lerna+Nx](https://github.com/lerna/lerna/issues/3215)
[Command nx run project:command does not work if command contains a colon (:) ](https://github.com/nrwl/nx/issues/9232)
[Make nx run more flexible when using script runner workflow](https://github.com/nrwl/nx/issues/10398)
MacOSでSourcetreeインストール方法 2022

## スペック
* 使用PC： Macbook Pro
* OS：　Mac OS Catalina
* ブラウザ： Google Chrome
* SourceTree使用目的： GitHubを扱うのに慣れているGUI（日本語対応）を使いたいため

## Sourcetree公式サイト

https://www.sourcetreeapp.com/

## 1.公式サイトからダウンロード

Google Chromeで公式サイトにアクセスし、
↓「Download for Mac OS X」をクリック

![スクリーンショット 2022-12-28 12.39.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/b9cc6f5a-89da-daf5-747b-838105f1784d.png)

↓ライセンスとプライバシーポリシーの内容に同意（チェックボックスにチェック）し、「Download」ボタンクリック

![スクリーンショット 2022-12-28 12.39.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/183cfc55-4a50-50d1-3727-ceef8514f022.png)

↓ブラウザの左下にzipファイルがダウンロードされるので
![スクリーンショット 2022-12-28 12.44.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/be41a72a-3cac-ba5d-00ea-37fdf75366d8.png)

↓zipファイルを、開く（展開）
![スクリーンショット 2022-12-28 12.47.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/c73e4207-6955-d96b-a56a-f6d33c40e8a7.png)

↓展開すると、.appファイルができるので、
基本的には、.appファイルをアプリケーションに移動（ドラッグ＆ドロップでOK）して
使いたい時に見つけやすいようにしておいてください。
![スクリーンショット 2022-12-28 12.48.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/69a46dbc-a492-dc9c-82e3-061c77c06cd0.png)

## アプリケーション使用準備

準備ができたら.appファイルをダブルクリックします。

↓「開く」をクリック
![スクリーンショット 2022-12-28 12.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/e23d5b11-459b-8b36-17e1-fa3a852f2c13.png)


↓ここは何も押さず右下の「続行」でOK
 ※Bitbucketと紐づけたい方は設定してください。

![スクリーンショット 2022-12-28 13.26.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/26f0f369-5b57-1171-0d7e-df8fc93ddec8.png)


↓アカウントは設定しなくても先に進めそうですが
名前をメールアドレスを入れるだけなので、ここでやっておいた方がいいと思います。
![スクリーンショット 2022-12-28 13.26.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/6e493b73-5793-6ee9-7f56-c3441bf65f66.png)

入力したら右下の「完了」をクリック


↓こんな感じの画面が出たらひとまずインストールと初期セットアップは完了。

![スクリーンショット 2022-12-28 13.27.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3081621/2067d23e-62cf-0c88-c78d-c4a00bb7ee27.png)
wslでnerves その2

# 概要
wsl(wsl2じゃない)でnervesやってみる。
qemu(x86_64エミュレータ、ラズパイじゃない)でやってみた。

# 写真

![nerves0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f96b2032-252f-979d-efd7-ef8883ff65bb.png)

# 環境
windows 10

# コンパイル手順

```
$ export MIX_TARGET=x86_64

$ mix nerves.new hello_nerves

$ mix deps.get

$ cd hello_nerves

$ mix firmware.image



```


# qemu起動手順

コマンドプロンプトで実行。

```
"C:\Program Files\qemu\qemu-system-x86_64.exe" -drive file="hello_nerves.img",if=virtio,format=raw -net nic,model=virtio -net user,hostfwd=tcp::10022-:22 -serial stdio



```

以上。
フリーランス・個人事業主向け税金どんぶり勘定シートを作りました（2022年版）

# それぞれ秘伝のエクセルシートを持っていると思うけど
税金の問題は避けては通れませんが、毎年ボンヤリとしか見えてこないのが困りもの。
ボンヤリを形づけるために、先輩から秘伝のエクセルシートを貰ったりしている方もいるかと思います。
秘儀伝授じゃないですが、年末のシート整理ついでにたたき台を公開します。
駆け出しの方の役に立てれば幸いです。

特に難しいマクロを駆使したものではなく、セル参照とSUM計算、IF計算程度しか使用していないワンシートのシンプル構造です。
黄色背景の部分を手入力するだけ！
毎年、シートを増やしてつかいやすい！

https://github.com/obwebsys/obwebsys/blob/master/%E5%80%8B%E4%BA%BA%E4%BA%8B%E6%A5%AD%E4%B8%BB%E5%90%91%E3%81%91%E7%A8%8E%E9%87%91%E3%81%A9%E3%82%93%E3%81%B6%E3%82%8A%E5%8B%98%E5%AE%9A%E3%82%B7%E3%83%BC%E3%83%88.xlsx

# 説明
※数字はすべてフィクションのサンプル値であり現実を反映したものではありません。
※住宅ローン控除などは非対応バージョンです。
※あくまで概算を掴むためのドンブリ勘定です。1000万越えの高収入非対応です。
※家事按分は5割計算です。事業比率によってSUMの掛け率を合わせてください。

## 月売上見込みセクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/b6da2b0f-51b6-631c-f135-514130f007e7.png)

売上見込みを記入します。
ボンヤリと毎月これぐらいかなーの値をB、C列に入れてください。

"" 月ごと固定支出見込みセクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/85cce4a9-938a-e001-1e44-9d211eaa7767.png)
B、C列のサンプル項目の値を変えるか、追加削除してボンヤリと毎月の支出を入力していってください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/dbf426e5-1502-caa4-4327-e3ab39c3542b.png)
社会保険料対象、小規模企業共済等掛け金対象、生命保険料対象、医療費対象については別枠で入力していってください。一番上の項目に詰め込まずにサンプル通りに分けて入れてください。よくわからなければいつでもGoogle先生に聞いてね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/c34b0145-2fc5-348c-4211-8ff515f98e81.png)
ここと各控除対象セクションの合計部をセル参照しているので、しっかりチェック推奨。

## 確定申告シミュレーションセクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/249dc95b-e3b8-c10c-5e0b-6411d553b647.png)
いろいろセル参照やら計算やらして自動で表示しています。手入力するのは黄色背景部分のみ。
シート上部を埋めればだいたいの税金額を計算してくれます。ふるさと納税額シミュレーション付き！
最大値を求めるマクロなどは入ってませんので色々値を変えて試そう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/123713e2-e432-be14-1d28-98de1980ff65.png)
セル参照で最大所得控除計算シミュレーション対付き！課税所得額がここまで下げられるかも？という値です。
最大掛け金で生活していけるかはともかく、非課税世帯を目指したい方はここを参考に限界を目指そう。

## 年間実績計算用セクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/a2d20abb-539c-2f09-3417-fe4989b23162.png)
確定申告が近づいた、年末用。全部の値を入れないと動きませんので正確な実績をいれましょう。

## 確定申告シミュレーション実績用セクション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25349/6943aa02-28ec-8e01-dbfe-8b4f30251d40.png)
一応セル参照はしていますが、黄色背景には帳簿ソフトから正確な値をいれましょう。
ボンヤリと考えてた毎月概算からどれだけかけ離れてるかをチェック。
ふるさと納税シミュレーションは別個に対応。
経費を引いた額から実質年収と手取りを求めています。生活レベルにご用心。




大事なことなどで2回言います。

※数字はすべてフィクションのサンプル値であり現実を反映したものではありません。
※住宅ローン控除などは非対応バージョンです。
※あくまで概算を掴むためのドンブリ勘定です。1000万越えの高収入非対応です。
※家事按分は5割計算です。事業比率によってSUMの掛け率を合わせてください。

一応、5年くらいかけて育てたシートを整理したものです。
計算式などは公式のものを見て入れておりますが、ぜんぜん不正確です。
それなりに概算はつかめてきてるかな、、とは思いますが、被害を受けた場合の責任は負いません。独立独歩を心に刻んだエンジニア向けです。
ノークレームノーリターンでお願いします。
今日のElixirSchoolメモ19「実行ファイル」

Elixir Schoolの勉強メモです。

https://elixirschool.com/ja/lessons/intermediate/escripts

## はじめに

Elixirで実行ファイルをビルドするにはescriptを利用する。
escriptはErlangがインストールされているあらゆるシステム上で動作する実行ファイルを生み出します。

実行ファイルのエントリポイント（最初に実行する位置）として扱うモジュールまでを作成する。
まずはmixでプロジェクトを作成する。

```zsh
$ mix new hello
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/hello.ex
* creating test
* creating test/test_helper.exs
* creating test/hello_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd hello
    mix test
```

作成したらhelloディレクトリに移動する。
`lib/cli.exs`ファイルを作成する。

```lib/cli.exs
defmodule Hello.CLI do
  def main(args \\ []) do
    # Do stuff
  end
end
```

次にMixfileを更新する。
`:main_module`を一緒に指定した`:escript`オプションをプロジェクトに組み込む。

```mix.exs
defmodule Hello.MixProject do
  use Mix.Project

  def project do
    [app: :hello, version: "0.0.1", escript: escript()]
  end

  defp escript do
    [main_module: Hello.CLI]
  end
end
```

## 引数の解析

アプリケーションのセットアップが終わったら、コマンドライン引数の解析へ移る。
`OptionPerser.perse/2`と`:switches`オプションを用いて、フラグが真理値であることを示す。

```lib/cli.exs
defmodule Hello.CLI do
  def main(args \\ []) do
    args
    |> parse_args
    |> response
    |> IO.puts()
  end

  defp parse_args(args) do
    {opts, word, _} =
      args
      |> OptionParser.parse(switches: [upcase: :boolean])

    {opts, List.to_string(word)}
  end

  defp response({opts, word}) do
    if opts[:upcase], do: String.upcase(word), else: word
  end
end
```

## ビルド

実行ファイルのビルドをします。

```zsh
$ mix escript.build
Generated hello app
Generated escript hello with MIX_ENV=dev
```

試しに実行してみる。

```zsh
$ ./hello --upcase Hello
HELLO
$ ./hello Hi
Hi
```
MacでSourceTreeの初期化・リセット

## SourceTreeのリセットについて

SourceTree に何らかの問題が発生した場合は
設定を完全に消去する必要しなくては直らない場合があります。
他の部分に原因があった場合は、リセットしても直らないので最終手段として利用しましょう。

設定を消去すると、ブックマークや表示設定などユーザー側で設定したものも消えることに注意してください。必要に応じて、バックアップは取るようにしてください。

### PCから以下を削除

※入っている場所は違う場合がありますので、各自ご確認ください。

* 「アプリケーション」フォルダに入れてある「Sourcetree.app」の削除
* Library/Application Support/に入っている「SourceTree」フォルダの削除

### ターミナルで以下のコマンドを入力

SourceTreeのリセットを行います

```
$ defaults delete com.torusknot.SourceTreeNotMAS
```

### 確認方法
SourceTreeを入れ直した時に、初期設定画面が出たら
リセットが完了していると思われます。

## 参考情報

SourceTree公式

https://confluence.atlassian.com/sourcetreekb/how-to-wipe-sourcetree-preferences-412484640.html
「無限のEnergy呼びさます」Arduino UNOとSSD1306でランダムに点を表示


x だんだんめんどくなったので過去ログを見よ

x タイトルは、「無限のEnergy呼びさます」　Energyは、エナジーと読む



![o_cop291.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e5920526-2127-1335-57d6-a3f97b786cb3.jpeg)



OLED_SSD1306_RAND_TEST1_UNO




```c++



//OLED_SSD1306_RAND_TEST1_UNO


//ヘッダーファイル
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


//定義
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


//初期化
void setup() {

  // I2Cアドレスは使用するディスプレイに合わせて変更する
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);

}//setup


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

  int px,py; //座標
  int ii;    //ループカウンター

  // 画面表示をクリア
  display.fillScreen(BLACK);

  for(ii=0;ii<100;ii++){

    //ランダムの設定
    px = random(128);
    py = random(64);

    // display.drawPixel(座標x, 座標y, 点の色);
    display.drawPixel(px, py, WHITE);

  }//for

  // 描画バッファの内容を画面に表示
  display.display();

  delay(1000); //1秒待つ

}//loop




```
wslでelixir

# 概要
wsl(wsl2じゃない)で、elixirやってみた。

# 環境

windows 10
wsl
ubuntu18.04 lts

# インストール手順

```
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb

$ sudo apt-get update

$ sudo apt-get install esl-erlang

$ sudo apt-get install elixir


```

# 結果

```
$ iex --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]

IEx 1.13.4 (compiled with Erlang/OTP 25)

$ mix --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]

Mix 1.13.4 (compiled with Erlang/OTP 25)

$ elixir --version
Erlang/OTP 25 [erts-13.0.4] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]

Elixir 1.13.4 (compiled with Erlang/OTP 25)

```

以上。
おすすめ記事まとめ

https://tech-blog.abeja.asia/entry/advent-2023-day17?utm_source=pocket_saves#fnref:1
 https://qiita.com/osw_nuco/items/a5d7173c1e443030875f
 
 https://i2key.hateblo.jp/entry/2022/12/23/095413

https://www.publickey1.jp/blog/22/webvscodewebassemblypythonwebpython.html

https://qiita.com/hirokidaichi/items/53f0865398829bdebef1

https://qiita.com/KUMAN/items/d591c6cc1842d83efb43

https://qiita.com/KUMAN/items/8cee8e33628850fd4e29

https://qiita.com/KUMAN/items/8cee8e33628850fd4e29

https://qiita.com/y-okudera/items/0b57830d2f56d1d51692

https://zenn.dev/kumackey/articles/d20221029-a38eb4bebc3272

https://note.com/n0mimono/n/nb8525f5f2acf
pipコマンドが認識されなくなったときの対処法

# The “'pip' is not recognized as an internal or external command“
pipに限らずよくあります。
**内部・外部コマンドとして認識されない系エラー** です。
パスが通ってないことが原因 (であることが多い) ですが、今まで普通に使えてたのに急にこのエラー吐かれてちょっとびっくりしました。

パスも長いので、備忘録的にまとめました。
こんな雑な記事で誰かのエラーを救えたらそれ以上の幸せはありません。

ちなみにWindows10を使用しています。

# 解決策
## 1. まずは本当にパスが原因か調べよう
1. `Win + R` で [ファイル名を指定して実行] を開く
1. `cmd` と入力
1. コマンドプロンプトが起動するので、`echo %PATH%` と入力し、今通っているパスを確認する
1. `Python xx\Scripts\` みたいな文字列があればパスは通ってます (xはPythonのバージョンによるので、39とか310とか)


ここで通っていた人は **3. 修正** に、通ってなかった人は **2. pipをPATHに追加しよう** へどうぞ

## 2. pipをPATHに追加しよう
1. `Win + R` で [ファイル名を指定して実行] を開く
1. `sysdm.cpl` と入力、[システムのプロパティ] にアクセスできます
1. **詳細設定** > **環境変数**
1. **システム変数** > **Path** を選択し、**編集** をクリック
1. **新規** をクリックし、インストールパスを追加
1. これでpipコマンドが通るようになればOK


:::note info
**インストールパスについて**
デフォルトはどうやら `C:\Users\"user-name"\AppData\Programs\Python\Python xx\Scripts` らしい
自分のパスは `C:\Users\"my-name"\AppData\Local\Programs\Python\Python39\Scripts` だった
:::

## 3. 修正
そもそもpipというのは、Pythonのパッケージを管理してるツールです。
ということもあり、Pythonをインストールしたときにpipも一緒にインストールされることがあります。
ですが一部のPythonインストーラだと、デフォルトインストールからpipを除外してあることもあるんです。
じゃあそのデフォルトで外してあるやつを、一緒にインストールされるように修正しようぜ、ってことで下記
1. `Win + R` で [ファイル名を指定して実行] を開く
1. `appwiz.cpl` と入力、[プログラムと機能] にアクセスできます
1. **Python 3.x ([32 or 64]bit)** を右クリックし、**変更** を選択
1. **修正** をクリック
1. **[pip]のチェックボックスにチェック** を入れ、**次へ**
1. **インストール** をクリック
1. これで通るはず...

これでも通らない場合はたぶんPythonを再インストールするのが良いと思うので、そうしてください (投げやり)
一応、簡単な再インストール手順も書いておきます

## 4. Pythonの再インストール
1. `Win + R` で [ファイル名を指定して実行] を開く
1. `appwiz.cpl` と入力、[プログラムと機能] にアクセスできます
1. **Python 3.x ([32 or 64]bit)** を右クリックし、**アンインストール** を選択
1. 一度PCを再起動します
1. [Python公式](https://www.python.org/)から任意のインストーラを落としてきます
1. インストーラを起動し、**[Python 3.x を PATH に追加]のチェックボックスにチェック** が入っていることを確認します
1. **[インストールのカスタマイズ]** を選択
1. **[pip]のチェックボックスにチェック** が入っていることを確認し、**次へ**
1. **インストール** をクリック
1. PC再起動

# さいごに
これでも解決しない場合の対処法は僕はやったことがないので、本とかネットとかで調べたら出てくるかもしれません...

「このやり方も良いぞ！」などあれば教えていただけますと泣いて喜びます
slackでチャンネルのリンクをコピーする


少しわかりにくい位置にあったので，忘れないようにメモ。

# Mac版アプリ
- リンクを取得したいチャンネルで右クリック => コピー => リンクをコピー


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950855/94ee8a49-096a-52fb-e4d4-c0e22d1ff90a.png)

# 参考
[SlackでチャンネルのURLを取得する](https://qiita.com/YumaInaura/items/f080fdcd9a75ede6ebc0)
【覚悟】find, find_by, whereの違い【備忘録】

# find, find_by, whereの違い
この前足元をすくわれたので、もう間違えないという覚悟の備忘録。
基礎的な内容だからこそ今一度。

## findメソッド
**モデルのidで検索してデータを取得できる。**
idでしか検索ができないため、取得対象のデータのidが具体的にわかっている場面で使用する。

該当するデータが存在しない場合は、`ActiveRecord::RecordNotFound`が返ってくる。

## find_byメソッド
**モデルのid以外でも検索条件としてデータを取得できる。**
複数条件を指定できるが、返ってくるデータは最初にヒットした1件のみ

該当するデータがない場合は、`nil`が返ってくる。


## whereメソッド
**モデルのid以外でも検索条件としてデータを取得できる。**
該当するデータが全て返ってくる。

該当するデータがない場合は、空の配列が返ってくる。

### 注意
**whereはActiveRecord::Relationを返す**。これは検索クエリを組み立てるもので、find, find_byの返す検索結果のオブジェクトとは異なる。

## 一覧表
| | id以外の検索 | 返ってくるレコード数 | 該当レコードが存在しない場合 |
| -------- | -------- | -------- | -------- | 
| find    | え!!id以外で検索を!? (不可) | 1     | エラー |
| find_by | 出来らあっ！ | 1 | nil |
| where | 出来らあっ！ | 複数 | 空の配列 |





## 参考
[find、find_by、whereの違い](https://qiita.com/tsuchinoko_run/items/f3926caaec461cfa1ca3)
【JavaScript】超絶初心者のための配列・連想配列の基本構文

# 配列・連想配列

## 配列

### 宣言

* 空で宣言
```javascript
const array = [];
```

* 値を入れて宣言
```javascript
const array = ["ナルト","サスケ","サクラ"];
```
***

## 連想配列

### 宣言

* 空で宣言
```javascript
const array = {};
```

* 値を入れて宣言
```javascript
const array = {name:"ナルト", gender:"男", team:"第7班"};
```
***

## 追加

* パターン1
```javascript
array.pet = "九尾";
```

* パターン2
```javascript
array['pet'] = "九尾";
```
Visual Studio 2022でMFCを利用したVisual Studio 2019のソリューションをビルドする

# 課題
Visual Studio 2022(v143)でMFCを利用したVisual studio 2019(v142)のソリューションをビルドしようとしても、エラーが出てビルドできない。

# 原因
Visual Studio Installerを利用したインストール時に"C++を含むデスクトップ開発"を選んでも、v143用のMFC(とATL)しか入らないため。

![c++によるデスクトップ開発.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083784/260e282c-1c88-34dc-d2f5-059a9aba7fd5.png)

# 対応策
Visual Studio Installerで"個別のコンポーネント"を選択し、v142用のMFC(とATL)をインストールする。

![個別のコンポーネント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083784/f5958b91-0dc3-c55d-5580-b5748d5a3818.png)

# 参考
https://learn.microsoft.com/ja-jp/visualstudio/install/workload-component-id-vs-build-tools?view=vs-2022
文系卒2年目インフラエンジニアのLPIC102受験備忘録

# 自己紹介
初投稿なので自己紹介から
文系大卒、中小勤めの2年目のインフラエンジニアです。
業務ではAWSを利用した構築案件に関わっており、常駐先に上司はいないので基本的には自分で調べながら学習をしております。

今年度何も資格取得が出来ておらず、反省して2月までにLPIC303およびAWS SCSの取得を目指しております。
やはり理系卒と比較した際に文系卒はITの基礎知識が不足しているので、資格などを利用して少しでも知識を取り入れていきたいです。

電車などの移動時間、空き時間にスマホで自分の考えを整理したいということでQiitaを始めることにしました。つまり自分用の備忘録的な立ち位置です。後半は空き時間に書いたメモをそのまま貼っつけますので、読みにくい点も多々あるかと思いますがご容赦ください。

保持資格...AWS CLF,SAA,SAP(全て昨年度取得)

# 102について
さて、ここから本題です。
今回、私は101ではなく102から取得しました。深い理由があるわけではなく、単に101に不合格となったからです。
そして実は102も1度不合格になっているのですが、、また101に戻るのも癪だったので102から受験しました。
ちゃんと準備してから受験すればこのようなことは起こらないはずです。


まあ過程はともあれ、、合格したのでヨシとします。
ちなみに不合格時は460点、そこから約10日後の試験で660点でした。対策としては、苦手分野を中心にPing-tを300問ほど追加で解きました。10日ありましたが、不合格から対策をしたのはほぼ休日3日分になります。

以下、今回と今後の対策です。メモ書きなのでデスマス調が消えます。


# 102受験前やったこと
あずき本1周、白本1周
これは朝の時間で終わらせた
7:00-9:00の時間で出社前にカフェに行き、前日読んだあずき本の章を白本で問題演習、その後次の日解く分のあずき本を読むという流れで7章分だったので7日かけて終わらせた

ping-t
これは平日の空き時間と業務後にしようと思っていたが、実際は休日を中心に演習した
実際にがっつり演習したのは休日の3日間だ
分野別に未演習もしくはミスした問題のみに絞り、約600問中500問をヒットまで持っていった
平日の昼夜に200問、最後の休日3日間で300問演習した感じだ
10問ずつ演習し、過去5回分の平均をエクセルで出力、平均点の低い分野を中心に演習を行なった
最終的な正解率は全分野平均で77%だった

苦手な分野は解説部分のスクショを撮り、いくつか並べてPCのデスクトップ壁紙に設定して暇なときに目に入るようにした
具体的にはbashの環境設定ファイルを壁紙にした

以下、余談。
集中の仕方を身につけた、目に力が入っているときは無意識に集中してしまっている、何もない時にこの状態だと集中力を浪費して後々頭が回らなくなる
逆に意識的に集中したい場面では目に力を入れると集中しやすい

休日の学習時間は貴重なので試験に使うのは勿体無い気もする、平日の朝8:30から受験するのが最も良いかもしれない


# 試験中思ったこと
newaliasesのとこでオプション含め記載せよとあったので混乱したが、sendmailにオプションで同じことができるらしい、その対策だったみたい
次回の試験からは惑わされず、自信を持って回答する
やはり2割ほどは見たことない難問が出題された
しかし今まで学んだことから推測できるものもあったので、ビビらず進める


# 反省
良かった点
朝にあずきと白本をさらっとやるのは導入として良かった、自分の場合いきなりping-tでは初見の用語が多すぎて拒否反応が起こるはず
エクセルで分野別に平均点管理したこと、不得意分野が可視化できて非常によかった
早寝早起きしたこと、朝の集中力は凄い


悪かった点
平日もっと気軽にping-tを回すべきだった、10問ずつにしているので回し始めればすぐ終わるが、回すまでに謎の労力がかかってしまっている
寿司打をやるくらい気軽に回せるようにしたい
日常でどうでも良いこと、どうにもならないことに気を使いすぎた
電車や待ち時間などの時間の使い方、スマホでqiitaに投稿する記事を書く



# 次に向けての計画
年末年始の休暇が7日間ある、ここで101と201を完成させたい
101と201はあずきと白本をそれぞれ1周ずつしているので、残るはping-tのみ
今回の反省から休日は1日100問ほど進むことがわかった
平日は朝に次の試験、202と303のあずき、白本を進めるので昼夜で少しずつしかできないはず
年末年始を有効活用したい


101と201は同じ日に受験しようとしていたが、今回受験して非常に疲れたので、1日に2つはやめた方が良い気がする、日曜と月曜に受験する

ここまで読んでくださってありがとうございました！
まずは101と201取得に努めたいと思います！:santa_tone2:
[python] ISO8601 UTC文字列からJST datetime変換

# pythonでUTC文字列をJST datetimeへ切り替える方法

```python:
from datetime import datetime, timezone, timedelta

str_utc = '2022-12-05T04:58:38Z'
dt_jst = datetime.strptime(str_utc, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone(timedelta(hours=0))).astimezone(tz=timezone(timedelta(hours=+9)))
print('{}'.format(dt_jst.strftime('%Y-%m-%d %H:%M:%S %z')))
```
以下出力
```
2022-12-05 13:58:38 +0900
```

1. strptimeだとtimezoneが付けられないので[replace](https://docs.python.org/ja/3/library/datetime.html#datetime.datetime.replace)を利用してtimezoneとしてUTCを無理やりセット
1. [astimezone](https://docs.python.org/ja/3/library/datetime.html#datetime.datetime.astimezone)を利用してtimezoneをJST(+0900)へ切り替え
アルゴリズム実技検定(PAST) 第11回 G問題 Python解答例(木の判定)

Supershipの名畑です。
今年も残り3日半ですね。

[アルゴリズム実技検定(PAST)](https://past.atcoder.jp/)の過去問シリーズです。第11回G問題の私の解答例(Python3)を公開します。

:::note info
「そもそもアルゴリズム実技検定ってなんですか？」という方は[こちらの記事](https://qiita.com/nabata/items/0421f20e8ec849ee70ad)を合わせてご覧いただけますと幸いです。
:::

## 第11回 G問題 木の判定

### 問題

[G - 木の判定](https://atcoder.jp/contests/past202206-open/tasks/past202206_g)

### 言語

- Python (3.8.2)

### 解答例

グラフにおける木の条件を

- すべての頂点が連結している
- 閉路を持たない

とすると**辺数がN-1であること**が問題で保証されているため、前者が満たされれば後者も満たされる。

```
N = int(input())

# 各頂点が他の頂点と連結されているかどうかを格納
tree = [False] * (N + 1)

for i in range(N - 1):
    a, b = map(int, input().split())

    # aとbを連結済みとする
    tree[a] = True
    tree[b] = True

tree[0] = True  # 頂点0は存在しないためTrueにしておく
for val in tree:
    if not val:
        print("No")
        exit()
print("Yes")
```

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。

是非ともよろしくお願いいたします。