OmniAICreator/Qiita-1.07M huggingface dataset:
[TypeScript]型推論を使ってみた

TypeScriptはとりあえず型定義ができればその目標を果たしている。
そのため、今までは冗長な型定義をやり続けてきた。

例えば以下のような例がある。
```ts
type Manual = (number | string | number)[];

const item: Manual = ['infer', 100, false];
```

変更があまりない環境ではあまり問題のないコードである。
しかし、`item`に入るべき型が変わったら？
```ts
type Manual = (number | string | number | string[])[];

const item: Manual = ['infer', 100, false, ['a', 'b']];
```
てさ作業で型を修正しないといけない。

## `infer`を使う
TypeScriptのinferを使うと以下のようなことができる。

```ts
const item = ['hello', 100, false];

type Hello<T> = T extends (infer E)[] ? E[] : never;

const inferredItem : Hello<typeof item> = ['bye'];
```

TypeScriptは有能なので、すでに型推論をしてくれている。
以下はWebStormの画面。灰色の文字が型推論の結果になっている。

![スクリーンショット 2024-07-14 11.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754242/4335facf-b196-fcc1-d6ca-3d99819f00db.png)

`item`の定義時に型が推論されているので、次から同じ型を使うためにはinferを使って自動的に追うことができる。

## おわりに
エラー処理などをしていると、型がいっぱいつくをよく見る。
ある程度はTypeScriptに任せてあげることで変更があった時に毎回修正する必要がなくなって便利。
論文読み：PoseTrack21: A Dataset for Person Search, Multi-Object Tracking, and Multi-Person Pose Tracking

# PoseTrack21: A Dataset for Person Search, Multi-Object Tracking, and Multi-Person Pose Tracking

CVPR 2022

[paper](https://openaccess.thecvf.com/content/CVPR2022/papers/Doring_PoseTrack21_A_Dataset_for_Person_Search_Multi-Object_Tracking_and_Multi-Person_CVPR_2022_paper.pdf)

https://github.com/anDoer/PoseTrack21

## 概要
PoseTrack21は、人検索、マルチオブジェクトトラッキング、複数人姿勢トラッキングのための大規模データセットを提案している．このデータセットは、実世界のシナリオで高い多様性を持つポーズを含み、詳細なアノテーションを提供する．具体的には、関節のオクルージョン、ボックスアノテーション、人物IDが含まれている．このデータセットを使用することで、これらのタスクを統合的に評価し、特にオクルージョンが発生する状況でのパフォーマンス向上が期待される．

## 従来手法との比較
従来のデータセットや手法は、人検索、マルチオブジェクトトラッキング、複数人姿勢推定を個別に評価しており、これらのタスクを統合的に評価することはできなかった．PoseTrack21は、これらのタスクを統合的に扱う初めてのデータセットであり、複数のビデオシーケンスにわたる人物IDや関節のオクルージョンを含む詳細なアノテーションを提供する．これにより、異なるタスク間での知識の共有と統合が可能となり、特にオクルージョンが多いシナリオでのパフォーマンス向上が期待される．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/3ba41f8a-bcc4-adb0-50d9-3e67f4eafb18.png)

:::note info
色々な情報を含むデータセットができると、同じデータセットでの新しい情報の組み合わせによる研究などに繋がり、有用。
:::

## 新規性
PoseTrack21の新規性は以下の点にある：
1. **統合データセット**: 人検索、マルチオブジェクトトラッキング、複数人姿勢トラッキングを統合的に評価できる初めてのデータセット
2. **詳細なアノテーション**: 関節のオクルージョン、ボックスアノテーション、人物IDを含む詳細なアノテーションを提供
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/f17f74de-1757-0e56-1bcb-b313ce7b20c0.png)

## 方法論
PoseTrack21は、以下のステップでアノテーションが行われた：
1. **ボックスアノテーション**: すべてのキーフレームに対してボックスアノテーションを行い、人物の頭部が見えるフレームにアノテーションを追加
2. **ボックス補間と検証**: キーフレーム間のボックスを補間し、別のアノテーターによって検証
3. **無視領域のマーク**: 注釈されていない人物が含まれる無視領域をマークし、誤検出がペナルティを受けないようにする
4. **頭部ボックスのアノテーション**: 検証セットの頭部ボックスをアノテーション
5. **人物IDのアノテーション**: トレーニングおよび検証セットのビデオ全体で一意の人物IDをアノテーション
6. **キーポイントのアノテーション**: すべてのキーフレームのキーポイントをアノテーションし、オクルージョン情報を含める

## 結果と評価
PoseTrack21を使用することで、マルチオブジェクトトラッキングおよび複数人姿勢トラッキングのベースライン手法が評価され、それぞれのタスクで高いパフォーマンスを示した．特に、オクルージョンが発生するシナリオでのパフォーマンスが向上したことが確認された．

## 結論
PoseTrack21は、人検索、マルチオブジェクトトラッキング、複数人姿勢トラッキングを統合的に評価するための新しいデータセットを提供している．詳細なアノテーションと多様なシナリオを含むこのデータセットは、これらの関連タスクの統合と知識の共有を促進し、特にオクルージョンが発生する状況でのパフォーマンス向上が期待される．研究者は、このデータセットを使用して、複数のタスクにまたがる統合的なアプローチを開発し、すべてのタスクで一貫して高いパフォーマンスを実現することが求められる．
F#単体のモジュールの実行方法

# はじめに
忘備録として、F#単体のモジュールの実行方法についてメモしました。

## F#単体の実行方法
以下のコマンドを実行します。
```
$ dotnet fsi [モジュールのファイル名]
```

## 実行例
以下のソースを**test5.fsx**という名前で保存します。
```F#
let name = "衛藤美彩" // string
let age = 31           // int

if age >= 30 then
  System.Console.WriteLine($"name = {name},age= {age}")

```
以下のコマンドを入力して、プログラムを実行する
```
$ dotnet fsi test5.fsx
```

## 結果
![sample1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1055346/bda3d970-a0bf-b8f0-9257-e6e5e9ed6f39.jpeg)

# 最後に
忘備録として記事にしました。
転職した際に"大事だ"と感じた➂つのこと。～友達が立て続けに転職したので書いてみる～ その２

# 概要
こんにちは。きゅうです。
今回は前回の続きで、これまで転職した際に"大事だ"と感じた３つのことの３つ目です。
ですが、その前に１つ目・２つ目も振り返っておきましょう。

①、転職しないとさほど給料は上がらない。
②、大事なのは学歴やITスキルじゃない！大事なのは経歴！！

上記の内容が気になる方はぜひ以下の記事もお読み頂ければと思います。

https://qiita.com/kyuu2197/items/45da684e3fee0c10a0b7


# ③、前職の年収の重要性
ということで、３つ目の「前職の年収の重要性」についてですが、
内定を頂き、入社条件の交渉を行う際か、早ければ最終面接前には転職した後の想定年収を提示いただける場合があります。

その時、当方が耳にタコが出来るくらい言われるのが「前職の年収を考慮して」という言葉です。
要するに、前職の年収より少しだけ向上させますよ。前職の給与がある程度高くないと、高額な給与を頂くことは難しいということです。
もっと言うと、いきなり１千万円アップしたいというのはかなり難しく、通常だと10万～100万、前職を長く勤めていた場合でも、少し増えて200万円～300万円程になると思います。

まあ、会社も慈善事業ではありませんので、よほどその人のスキルが欲しい！！その人に来てもらいたい！！ということが無い限り、高額アップは難しいです。
だって、うちの会社のある年代の社員であれば出来て当然ということを、高額な給与で入社させたりはしませんし、この人がダメでも、同じようなスペックの他の人であれば同じ条件をのむかもしれないので、無理に採用する必要はないですから。

ですので、王道の出来る限り長い年月（最低でも3年以上）同じ会社で勤務し、スキルを磨いて、経歴を積んで、いざ転職に臨むか、何回も転職を繰り返し、少しずつ年収を上げていくしか道は無いかもしれません。。。


# 総括
最後にこれらを踏まえて私のエンジニアライフプランを考えます。

まず、アメリカの海外企業視察の際、ガイドさんに言われたことで一番心に残っている言葉の一つに、「アメリカでは年収7万ドル以下の労働者は低所得者階層に分類されます」という言葉だ。
日本円にすると約1000万円以下は低所得者に分類されるんです！！

それって、日本の何パーセントが低所得者に分類されるんですかね・・・

その上、メジャーリーガーの大谷選手が絶賛した、アメリカの「IN-N-OUT BURGER」のアルバイターの時給を2,500円～3,000円で募集を開始するというニュースもある。
他のハンバーガーショップやほかのアルバイトも引っ張られて時給をアップした場合、より一層日本との賃金格差が広がってしまうでしょう。
そうなると、海外旅行により一層行きづらくなり、見分を広げることすら難しくなる。
ですので、それに負けない年収は頂けるようなエンジニアに私はなりたい。


加えて、世界では生成AIがプログラムを自動で作成できるようになり、日本でも小さい子供にプログラミングを勉強させる家庭も増えてきた。
この現状を考えると、近い将来プログラムを書くプロ、要するにプログラマやテスタという職業はなくなってくるかもしれないし、システムエンジニアという職業も高度な技術を求められるようになり、IT業界の人口は確実に減少してしまうだろう。


さて、私のエンジニアライフプランですが、そうなる前に、他の業界のシステム部に転職するか、
IT業界の人口淘汰が起きても負けないスキルや経験を身に着け、IT業界を走り抜けたいと考えております。
（他業種への転職はかなり難しいので、、、かなりの覚悟が必要と考えますが・・・。）


# 最後に
ということで、今までの転職で"大事だ"と感じたことと、私のエンジニアライフプランを書かせて頂きましたが、これらの経験が少しでも皆様のお役に立てると幸いです。
最後までお読みいただき、ありがとうございました。
論文読み：PoseTrack: A Benchmark for Human Pose Estimation and Tracking

# PoseTrack: A Benchmark for Human Pose Estimation and Tracking
CVPR 2017

[paper](https://openaccess.thecvf.com/content_cvpr_2018/papers/Andriluka_PoseTrack_A_Benchmark_CVPR_2018_paper.pdf)

https://github.com/umariqb/PoseTrack-CVPR2017?tab=readme-ov-file

## 概要
PoseTrackは、ビデオベースのHuman Pose EstimationとArticulated Trackingのための新しい大規模ベンチマークを提案している．
このベンチマークには、次の三つのタスクが含まれる：
1. Single-frameのMulti-Person Pose Estimation
2. 動画におけるMulti-Person Pose Estimation
3. Multi-Person Articulated Tracking

## 従来手法との比較
従来のシステムは、現実的な動画でのMulti-Person Pose EstimationおよびTrackingのパフォーマンスが低く、時間を通じて一貫したBody Pose Trajectoryを出力することに苦労していた．PoseTrackは、これらの問題を解決するために設計されており、以下の点で従来の手法と異なる：
- **大規模なデータセット**: Multi-Personが関与する動画シーケンスを収集し、詳細にAnnotateされたデータセットを提供
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/319692de-777c-ab4a-d6e5-6cf4fa5f40f4.png)

- **評価サーバー**: 評価用のサーバーを提供し、研究コミュニティが統一されたテストセットで評価できるようにする

:::note info
### 評価の手順

1. **テストセットの保持**: テストセットは公開されず、集中評価サーバーが保持しています。研究者はこのテストセットに直接アクセスすることはできません。
2. **モデルの提出**: 研究者は自分のモデルを集中評価サーバーに提出します。
3. **自動評価**: 提出されたモデルは、集中評価サーバー上で自動的に評価されます。これには、テストセットに対する予測の生成と、その予測の精度評価が含まれます。
4. **結果の提供**: 評価結果は、研究者に提供され、モデルの性能を確認することができます。これにより、研究者は自分のモデルが他のモデルとどのように比較されるかを知ることができます。

このようにして、PoseTrackデータセットは効率的かつスケーラブルな評価環境を提供し、研究コミュニティ全体での公平な評価と比較を可能にしています。
:::

## 新規性
PoseTrackの新規性は以下の点にある：
1. **統合タスク**: Single-frameおよび動画シーケンスにおけるMulti-Person Pose EstimationとTrackingを統合的に評価する初めてのベンチマーク
2. **詳細なアノテーション**: Person Track、Body Joint、Ignore Regionなど、詳細なアノテーションを提供
3. **評価プラットフォーム**: 評価サーバーを通じて、一貫した方法での評価を可能にする

## 方法論
PoseTrackのデータ収集とアノテーションプロセスは以下の通り：
1. **データ収集**: 多人数が参加する混雑したシーンを含む動画シーケンスを選定
2. **アノテーション**: Ignore Region、PersonのHead Box、Track ID、Body Poseをアノテート
3. **フレーム選択**: Keyframeの前後のFrameを選定し、動画シーケンス全体にわたってアノテート

## 無視領域のラベル使用目的
Ignore Regionのラベルは、以下の目的で使用される：
- **誤検出のペナルティ回避**: Ignore Region内の誤検出はペナルティの対象としないことで、モデルの性能評価が公平に行われる
- **アノテーション効率の向上**: アノテーターが注力すべき領域を明確にし、効率的にアノテーションを行う
- **モデルのロバスト性の向上**: Ignore Regionを考慮することで、ノイズや干渉に対して強いモデルを訓練する
- **実際のシナリオに近づける**: Ignore Regionの存在により、データセットをより現実的で実用的なものにする

## 結果と評価
PoseTrackを使用した評価では、Multi-Person Pose EstimationおよびTrackingのベースライン手法が評価され、それぞれのタスクで高いパフォーマンスを示した．特に、遮蔽が発生するシナリオでのパフォーマンスが向上したことが確認された．

## 結論
PoseTrackは、ビデオベースのMulti-Person Pose EstimationとArticulated Trackingのための新しい大規模ベンチマークを提供し、これらのタスクを統合的に評価するための基盤を提供している．

:::note info
現在、このデータセットはダウンロードできないかもしれないです。
少し探したけど見当たりませんでした。
ただ、すでに次のバージョンのPoseTrack21が出ているので、そちらに統合されたのかもしれません。
:::
laravel PHPUnit assertDatabaseHusはnot nullのチェックができない

## 概要

laravelのテストのおいて、テーブルのnot null系のチェック方法をまとめる

## 内容

一見 assertDatabaseHusを使えば下記のようにチェックできそうな気がする。
しかしながらそんなことはなく普通にエラーになる。（はず）

```php
$this->assertDatabaseHas(
    table: 'reset_emails',
    data: [
        'email' => $email,
        'verify_code' => ['<>', null],
        'limit_at' => $expectedLimitAt,
    ]
);
```

下記のように実際にクエリを走らせてその結果のboolをassertTrueでチェックするとうまく確認できる。

```php
// assertDatabaseHasだとnot nullのチェックができないためクエリでチェック
$exists = DB::table('reset_emails')
    ->where('email', $email)
    ->whereNotNull('verify_code',)
    ->where('limit_at', $expectedLimitAt)
    ->exists();
$this->assertTrue($exists);
```
Proxmoxのドキュメント日本語訳について

## 概要
Proxmox関連ドキュメントの日本語訳を公開します。

### 日本語訳について
https://github.com/flathill/ja

### Proxmox VE 8.4.0用
https://flathill.github.io/ja/pve-docs/8.4.0/

#### GitHubリポジトリ
https://github.com/flathill/ja/tree/main/pve-docs/8.4.0/

### Proxmox VE 8.3.1用
https://flathill.github.io/ja/pve-docs/8.3.1/

#### GitHubリポジトリ
https://github.com/flathill/ja/tree/main/pve-docs/8.3.1/

### Proxmox VE 8.2.2用
https://flathill.github.io/ja/pve-docs/8.2.2/

#### GitHubリポジトリ
https://github.com/flathill/ja/tree/main/pve-docs/8.2.2/

### Proxmox Backup 3.4.0用
https://flathill.github.io/ja/pbs-docs/3.4.0/

#### GitHubリポジトリ
https://github.com/flathill/ja/tree/main/pbs-docs/3.4.0/

### Proxmox Backup 3.2.7用
https://flathill.github.io/ja/pbs-docs/3.2.7/

#### GitHubリポジトリ
https://github.com/flathill/ja/tree/main/pbs-docs/3.2.7/
cscの作法 その513

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
ClosedXMLで、Excelにドロップダウンリストを作れ。

# サンプルコード

```
using System;
using System.IO;
using ClosedXML.Excel;

namespace App
{
	class Program {
		static void Main(string[] args) {
			var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Book7.xlsx");
			var wb = new XLWorkbook();
			var ws = wb.Worksheets.Add("Sheet1");
			ws.Cell("C1").Value = "Yes";
			ws.Cell("C2").Value = "No";
			ws.Cell("A5").DataValidation.List(ws.Range("C1:C2"));
			wb.SaveAs(filePath);
			Console.WriteLine("ok");
		}
	}
}


```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/d090c9f3-83b4-b0c6-bc03-2a37335e40c6.png)


以上。
最近（2024年7月）、Web開発ではオブジェクト指向より関数型プログラミングをよくみかける

# 2000年初頭はオブジェクト指向帝国全盛の時代（ヒャッハー！！）

20年前ぐらいは、Javaがソフトウェア業界でも幅を効かせており、「オブジェクト指向」がプログラム設計では覇権を握っていました。そして、Javaだけでなく、PHP、Ruby、Python、JavaScriptでもオブジェクト指向設計でプログラミングすることが一般的になっていたと思います。

<font color=red>**オブジェクト指向帝国の時代**</font>です。(イメージは筆者の個人的な妄想世界観です）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15972/23723c22-30a5-3516-2754-5dcbcd0c62ec.png)

https://naoya2k.hatenablog.com/entry/2021/02/14/112105

私は40代半ばです。ちょうど2000年頃からソフトウェア業界に足を踏み入れました。
当時のWeb開発現場は、猫も杓子も「オブジェクト指向！、オブジェクト指向！！」という感じでした。

# 名ばかり「オブジェクト指向」も多かった

もっとも、実際、現場に行ってわかったのですが、クラス構文使っているだけで、中身は手続き指向設計とかわらないものが多くありました。
ぜんぜんクラスがオブジェクトじゃなくて単なるパッケージ・モジュール名じゃねーかって思ったことがよくあります。

オブジェクト指向設計をして、わかりやすくメンテしやすい設計というのはなかなか稀有で、抽象化や継承を乱用して、GoTo文によるスパゲッティを別構文でつくっているコードも何度となく見てきました。

どんだけうっすいクラスを継承すんだよって、何度ツッコんだ事か。

それでも、<font color=red>**オブジェクト指向という掛け声**</font>だけが幅を効かせており、よくわからないけど、クラスつかって、継承しとけば「オブジェクト指向で、イケてるんだよ！」って思っているような現場を幾度となく見てきました。

こうした間違った「オブジェクト指向設計」についての批判としては、ミノ駆動さんの書籍を読むとよくわかりますね。

https://note.com/minodriven/n/n12af8005899f

私は、ミノ駆動さんも尊敬されていると思われる**増田 亨さん**のスライドを読んだとき、オブジェクト指向はこういうものだよなと腑に落ちたのを記憶しています。この方のスライドに出会ってから、オブジェクト指向を比較的うまく使いこなせるようになった気がします。

https://www.slideshare.net/masuda220?utm_campaign=profiletracking&utm_medium=sssite&utm_source=ssslideview

2010年あたりまでは、「間違ったオブジェクト指向」が横行するほど、オブジェクト指向一色だったような気がします。そして、海外を中心に、「オブジェクト指向はだめじゃね？」みたいな意見が徐々にでてくるようになりました。

# オブジェクト指向への反旗：関数型プログラミング支持の台頭

有名なのはこの2019年の海外の記事ではないでしょうか？（オブジェクト指向プログラミング - １兆ドルの災害）

https://betterprogramming.pub/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7


これら以外にも似たような記事はたくさんでてきました。そして、並行して関数型プログラミングを推す意見がこの辺りから徐々に生まれてきます。

「関数型プログラミング VS オブジェクト指向」というテーマの記事は2020年あたりから一気に増えてきます。少し古めの記事を貼っておきます。

https://anond.hatelabo.jp/20140409010816

Web開発現場にいて、関数型プログラミングの勢いがついたなと感じたのは、<font color=red>**2019年にReact16.8で、React Hooksが登場して、関数コンポーネントでの書き方が主流になり**</font>だしたころです。

https://logmi.jp/tech/articles/323443

この頃から、Webのフロント（TypeScript、JavaScript）、そして、Pythonを界隈中心に関数型プログラミングが脚光を浴び、現場でも関数型プログラミングが増えていったように思います。もっともWeb開発の動きだけでなく、機械学習やAIの現場でも、関数型プログラミングが採用されていたので、この流れも後押ししていると思います。

また、Scala、Elixirなどの新しい関数型言語が生まれたのも後押ししているかもしれません。

https://www.insightech.co.jp/ja-JP/BlogIndex/BlogFolder/2023/2023_05_16-1

https://xtech.nikkei.com/atcl/nxt/column/18/01575/030100002/

こうして、20年近く覇権を握ってきた、オブジェクト指向帝国も一時のような勢いを失ったように思います。


ややオブジェクト指向に対して批判的に書いてきましたが、個人的には、オブジェクト指向設計が悪いとも思わず、使う領域を選べば有用だと思っています。

**「名ばかりオブジェクト指向」**でスパゲッティコードを作り出したことについては**批判的**ですが、ミノ駆動さんや増田了さんが示してくれた正しいオブジェクト指向設計を利用するのであれば、有用な設計手法だと思います。

一方で、関数型プログラミングにも良さがあり、値そのもの、状態そのものではなく、関係性を定義し、その関係性を連携させることが多いアプリケーションでは、積極的に使っていくべきだと思います。

# 補足：関数型プログラミングには名前付き引数が半ば必須な気がする

最近、ReflexというPythonだけでWebアプリを作るライブラリをつかって開発をしています。Reflexは、ReactコードをPythonで実装するようなもので、関数型プログラミングに近い感じがします。

関数オブジェクトを連携させて行くコーディングをしていると、インターフェースが引数になるわけですが、その際に、名前付き引数がないと結構厳しいなとよく思います。

とはいえ、名前付き引数がない有名なプログラミング言語は結構少ないと思います。仮に文法としてなくても、TypeScriptやJavaScriptみたいにオブジェクトやマップを引数に渡して、擬似的な名前付き引数を実現することができます。

名前付き引数は、オブジェクト指向でいえば、プロパティを個別に指定するのに似ています。
引数の順番だけで引数を与えるのはなかなか厳しいものがあります。もちろん、引数の組み合わせごとに関数をつくってもいいのですが、そうすると定義がめんどくさくなります。良いか悪いかは判然としないですが、名前付き引数で処理ごとにパラメーターを変えられるのは便利なときもあるなと思います。
SwiftUI　sheetを使用した画面遷移方法

SwiftUIでsheetを利用した画面遷移方法です。

# 完成イメージ

![Videotogif (5).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/e18106fa-c9e2-78e8-9c3e-88f57d25a3cf.gif)

画面の上にまた画面が出てくるような遷移をする時に使用できます。

# コード内容

```.swift
struct HomeView: View {
    @State var showSheet: Bool = false

    var body: some View {
        NavigationView {
            Button("シート遷移サンプル"){
                showSheet.toggle()
            }       
            .navigationTitle("実装サンプル")
        }
        .sheet(isPresented: $showSheet) {
            Text("Sheet遷移サンプル")
        }
    }
}
```

`@State var showSheet: Bool = false`
こちらで表示、非表示のシート状態を管理する変数を定義しておきます。

```
.sheet(isPresented: $showSheet) {
    Text("Sheet遷移サンプル")
}
```
`isPresented`に先ほど定義したシートの状態を管理する変数を設定します。
`Text("Sheet遷移サンプル")`こちらは表示したい画面に変えてください。

以上でsheetを使用した画面遷移ができます。
SnowFlakeでユーザー作成からテーブルアクセスまでセキュアに設定を行うまで

# 1.最小権限のユーザーを作成する

```sql
CREATE USER user_name
PASSWORD = 'password名'
LOGIN_NAME = 'ログイン名'
EMAIL = 'hogehoge@huga.com'
DISPLAY_NAME = 'ディスプレイ名で表示される名前'
MUST_CHANGE_PASSWORD = true/false
```

このようにユーザーをアカウントを作成します。
特段どのロールを使うかを設定していないと、USERADMINで最小権限となります。

一旦試しに、上で作成したアカウントでログインしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/6f3e3e1a-688c-1b35-4211-2b97ee2e7a76.png)

当然、access errorが出ます

ここから最小単位でどのデータベースにアカウントを付与するのかなどを設定していきます。

## 2.データベースの作成

sysadminのアカウントで、以下のような擬似データベース・スキーマ・テーブルを作成します。

```sql

create database security_practice;

use database security_practice;

create schema practice1;

create table practice1.secrity_table_first (
id  VARCHAR(50),
user_name varchar(50),
post_code varchar(50),
age NUMBER(3,0)
);

```

イメージとしては、

1.ロールを作成する

2.その中で必要な操作のみを作成したロールにアタッチする

3.そのロールをユーザーにアタッチする

今回のケースでは

作成したテーブルのアクセスを許可するまで行います。

## 3.ロールの作成からユーザーにアタッチするまで

そのため、ロールを作成して、使うテーブルへのアクセスを許可するポリシーをアタッチします。

```sql
-- ロールを作成
create role operator_role;

-- ウェアハウスを使用許可するポリシー
grant usage on warehouse compute_wh to role operator_role;

-- データベースを使用許可するポリシー
grant usage on database security_practice to role operator_role;

-- スキーマを使用許可するポリシー
grant usage on schema practice1 to role operator_role;

-- テーブルにアクセスを許可するポリシー
grant select on table security_practice.practice1.secrity_table_first to role operator_role;

-- 上記で作成したロールをユーザーにアタッチする
grant role operator_role to user ユーザー名;

```

ここで、仮にスキーマへのアクセスを許可していないと、テーブルにもアクセスできないので
注意です。

ここで、ユーザーアカウントに移動してSELECTしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/f5d949a4-9e08-d56d-7300-5f7d59fea081.png)

このようにアクセスすることができました。
許可したスキーマ内に新たなテーブルを作成してSELECTしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/633f3f5e-87f7-20b4-30ae-62063370c5af.png)

このようにSELECT 許可していないテーブルにはアクセスもできないですし、ユーザーアカウントからは
以下のようにテーブルが見えないです。

*１つしかテーブルが参照されない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526914/56b5aa95-7320-05f6-8b61-97bfd2453862.png)
SF Symbolsのサイズ変更

## Point Size変更する
Configurationを選択します。
![スクリーンショット 2024-07-07 23.48.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/d948d1ea-1170-7e46-c283-9ac9496f1638.png)



Point Size選択します。
![スクリーンショット 2024-07-07 23.49.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/250ff186-a523-5bd4-4c22-dd4fa538cd90.png)



Point Sizeの数値を変更する。
![スクリーンショット 2024-07-07 23.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/a188e24f-1e4c-6065-2d0d-6ba137956873.png)



これでサイズを変更できます。
![スクリーンショット 2024-07-07 23.50.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/f864175d-0ed9-6166-972b-79d9e5387f56.png)
drupal フォーム項目ごとに表示

フォームを追加した変数を出力するとhtmlを生成した状態、自動的に表示されますが、項目ごとに分けれないか考えました。
symfonyの「form_widget」や「form_start」はdrupalには(twigfunction)用意されていないようです。
無くても一応項目ごとに表示は可能ですが、結論としては自動的に表示にしたほうが良いです。

https://drupal.stackexchange.com/questions/251385/how-to-add-form-action-twig-template-form

↓回答に下記のことが書かれていました。(google翻訳)
> 一般的には、このようにフォームをつなぎ合わせるのではなく、フォーム要素自体にテーマを設定することをお勧めします。
> レンダリングされたフォームに**Drupal がバックグラウンドで追加する要素がフォーム内で失われる可能性が高いためです。**

```twig:contact-mail-page.html.twig
{# すべて出力 #}
{{form}}
```
```twig:contact-mail-page.html.twig
{# 項目ごとに出力 #}
<form {{ form.attributes }}>
    {{ form.form_build_id }}
    {{ form.form_token }}
    {{ form.form_id }}

    <div class="form-item">
      <label for="{{ form.name['#id'] }}">{{ form.name['#title'] }}</label>
      {{ form.name|without('#title') }}
    </div>
    
    <div class="form-item">
      <label for="{{ form.email['#id'] }}">{{ form.email['#title'] }}</label>
      {{ form.email|without('#title') }}
    </div>

    <div class="form-item">
      {{ form.submit }}
    </div>
  </form>
```
symbol-bootstrap v1.1.11 インストールメモ

普通に `npm install -g symbol-bootstrap` すると古いバージョンがインストールされるのでgithubからクローンしてインストールする。

symbol-bootstrapをクローンして、中に入る。
```bash
sudo git clone https://github.com/symbol/symbol-bootstrap.git
cd symbol-bootstrap
```

npmパッケージをインストールしてビルドする。
```bash
npm i
npm run build
```

symbol-bootstrapをグローバルインストールしてバージョンを確認する。
```bash
sudo npm install -g .
symbol-bootstrap -v
```
論文読み：Polarized Self-Attention: Towards High-quality Pixel-wise Regression

# Polarized Self-Attention: Towards High-quality Pixel-wise Regression
[arXiv](https://arxiv.org/pdf/2107.00782)

https://github.com/DeLightCMU/PSA

## 概要
この論文では、精密なコンピュータビジョンタスク（例えば、キーポイントヒートマップの推定やセグメンテーションマスクの生成）におけるピクセル単位の回帰を改善するために、Polarized Self-Attention (PSA)ブロックを提案している．
PSAは、チャンネルと空間の両方の注意計算において高い内部解像度を維持しながら、入力テンソルをそれぞれの対角方向に完全に圧縮するポラライズドフィルタリングを行う．さらに、PSAは典型的な細かい回帰の出力分布に直接適合する非線形性を組み合わせており、2Dガウス分布（キーポイントヒートマップ）や2D二項分布（二値セグメンテーションマスク）を直接フィットする．

## 従来手法との比較
従来の注意メカニズムでは、要素ごとの注意（例：Nonlocalブロック）が非常に複雑でノイズに敏感であり、多くの単純化された注意ハイブリッドが複数のタスク間で最適な妥協点を探していた．PSAは、チャンネルと空間の両方の注意計算において高い内部解像度を維持し、典型的な細かい回帰の出力分布に直接適合する非線形性を組み合わせることで、これらの課題を克服している．

## 新規性
PSAの新規性は以下の点にある：
1. **ポラライズドフィルタリング**: 入力テンソルをそれぞれの対角方向に完全に圧縮し、内部解像度を維持する
2. **高解像度の注意計算**: チャンネルと空間の両方の注意計算において高い内部解像度を維持する
3. **非線形性の組み合わせ**: 2Dガウス分布や2D二項分布を直接フィットするために、ソフトマックスとシグモイドの組み合わせを使用する

## 方法論
PSAブロックは、次の2つの主要なコンポーネントで構成されている：
1. **チャンネル専用ブランチ (Ach)**: 入力テンソルのチャンネル方向に沿った特徴を強調または抑制する
2. **空間専用ブランチ (Asp)**: 入力テンソルの空間方向に沿った特徴を強調または抑制する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/1ecdb0d8-6ef7-0eb9-39a6-aa04268d26b8.png)

これらのブランチは、並列レイアウトまたはシーケンシャルレイアウトで組み合わせることができる．

### PSAの構造
- Polarized Filetering：入力テンソルをチャネル方向と空間方向に分割し、それぞれ高解像度を保ちながら対角方向を完全に圧縮するフィルタリング手法
    - 従来の手法では、計算効率を高めるために内部の解像度を低下させているが、このタイミングで高解像度の情報を失っている。
    - PSAでは、チャネル専用ブランチと空間専用ブランチを作成し、チャネル専用ブランチでは、チャネル方向のチャネル解像度のみを高く保ち、空間方向は高解像度のまま計算を行う。
- Nonlinearity Enhancement：出力分布に直接適合する非線形性を組み込み、典型的な回帰タスクの出力分布に適合させる
    - 従来、Self-Attentionブロックは特定の出力分布に最適化されていない場合が多い
    - PSAでは、Softmax-Sigmoidの組み合わせを導入し、2Dガウス分布や2D二項分布などの典型的な回帰タスクの出力分布に直接適合する。

## 結果と評価
PSAは、MS-COCOデータセットの2Dポーズ推定とPascal VOC2012 Augデータセットのセマンティックセグメンテーションのベンチマークにおいて、ベースライン手法を向上させることが実験で示されている．

## 結論
PSAは、様々なコンピュータビジョンタスクにおいて、より高精度な結果を得ることが期待される．
【JavaScript】子要素の取得方法はどっちが良い？

良かったらコメントで意見を聞かせてください。

# case1

```javascript
const index = N; // 0以上の整数
const parentNode = document.getElementById('parent'); // ←これが本質
const childNodeList = parentNode.children;
const childNode = childNodeList[N];
```
つまり本質としては『親要素を取得』ということだと思います。

# case2

```javascript
const index = M; // 自然数
const childDivNode = document.querySelector('#parent :nth-child(M)'); // ←これが本質
```
つまり本質としては『特定の要素を取得』ということだと思います。

【コメ欄より】

```:nth-child(M)```

と記述することで、M番目の任意の子要素を取得できます。

（tag名を明記する必要があると思っていました）

# 個人的な見解

私はいつも、以下の理由によりcase1の書き方をします。

- 配列と同様に0から要素をカウントできる（プロジェクト内で最初のインデックスが統一される）
- JavaScriptの知識だけで内容を理解できる（CSSの知識ゼロでOK）
- childrenプロパティ自体はCollectionなので他にも色々できる（総数カウント・配列化とループなど）

逆にcase2を避ける理由。

- querySelectorがあまり好きではない（狙ったDOMの取得に失敗する可能性がある）←今回はなさそう？
- nth-childはCSSの書き方なので、『こう書かないと実装できない』ケースを除いて使いたくない
- nth-of-typeとの使い分けで、絶対に間違えない自信がない
- 『要素を1つ取得』以外の汎用性がない

# ※コメ欄より補足

nth-childの記述方法について教えて頂きました。
感謝です🙏

## 奇数番目のtagを選択

両者は同じ結果になる

```
tag:nth-of-type(2n + 1)

:nth-child(2n + 1 of tag)
```

## 補足の補足

この場合、両者は異なる要素を選択する可能性がある。

```
// 要素の奇数番目がtagなら選択
tag:nth-child(2n + 1)

// tagに対して奇数番目を選択
:nth-child(2n + 1 of tag)
```


# 参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Indexed_collections

https://qiita.com/juner/items/dbffa6537e94b143fd63#%E8%A6%81%E7%B4%A0%E6%95%B0%E3%81%AE%E5%88%B6%E9%99%90

https://developer.mozilla.org/ja/docs/Web/CSS/:nth-child
SIerとSlerの見分け方

# はじめに
はじめまして[ほしいも](https://twitter.com/hoshiimo_se)です。
最近話題のSIerとSlerの見分け方について紹介します。

# SIerとSler
## SIerとは
SIer（エスアイアー）とは、システムインテグレーション（SI）を行う業者のことである。
SIに「～する人」という接尾辞「-er」を付けてできた造語である。

## Slerとは
Sler（スラー）とは、SIer（エスアイアー）のtypo、もしくはその語源を知らずに「スラー」と誤って認識している人々から生まれたものである。

# SIerとSlerを見分ける
### ①対象ページでF12ツール > 要素 > スタイルタブを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/8c347736-d4dc-9fa0-63ff-b3c92a165941.png)
※Google Chromeの場合

### ②スタイルタブの「+」ボタンから`body *`セレクタに対して`font-family: Courier New !important`を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/9f922538-66c4-5a04-12c0-9c07dcc2cc28.png)

これでしっかり見分けがつくようになりましたね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/521440/c4f5bbc6-0c24-fcf8-3684-feae766de417.png)

# 参考文献
- [SIerの意味・解説](https://www.weblio.jp/content/SIer)
隙間時間にみる早見表〜OracleJavaSE11 gold | 例外 〜

# この記事について
OracleJavaSE11 goldを勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにこちらの書籍で勉強していた時のまとめたものです！

おすすめ書籍（勉強開始時点の書籍最新版を購入しましょう）

https://book.impress.co.jp/books/1121101020

各カテゴリごとでまとめていますので隙間時間に見てみてください。

## 例外処理
### マルチキャッチ機能
複数の例外を合わせることができる
継承関係のある例外処理はあわせて記述できない
catch(aexception |bexception e)

例外は最初にスローされたものが表示され、あとのものは内包される

## Throwble
サブクラスにerrorとexceptionクラスを持っている
独自のクラスを定義する時はexceptionを継承する。exceptionであればよくサブクラスでも構わない

**getSuppressed()**
内包された例外をThrowble型の配列で返す

## try-with-resourses
リソースの閉じ忘れを防ぐためのものでありcatchとfinally区がなくても記述可能
### ()のなかで扱えるもの
実質的finalであって、以下のインタフェースを実装したclose()をもったもの

**java.lang.autocloseable**
exceptionを返す、closeableのスーパーインタフェース
**java.io.closeable**
ioexceptionを返す

### トライ文の閉じる順番
1.リソース(()の逆順で)
2.catch(例外処理が発生した場合)
3.finally

## アサーション
プログラムのデバッグをする時に使用する機能
### メソッド単位で確認すべきポイント
Dbc(契約による設計)より引用
**事前条件**
メソッドを呼び出す側が呼び出す前の条件を満たしているか
**不変条件**
メソッドを呼び出される側が呼び出される前の条件を満たしているか
**事後条件**
メソッドが実行された結果が期待していた通りに動作したのか

### 使用例
nameがnullなら文字列をもったassertionErrorをスローする
論理演算は正しい方を記述するため注意
```java
assert name != null : "name is null"
```

### アサーションを有効にするオプション
Java -ea xxx
npmとは

## npmとは
Node Package Managerの頭文字をとったもの。
Node.jsでパッケージを管理するシステムで、他の人が書いたプログラムを利用することができる。

### パッケージとは
モジュール：他のプログラムから利用するプログラムや関数
モジュールをまとめて利用するものをパッケージと呼ぶ。

### パッケージ管理とは
- 利用するパッケージ内で他のパッケージを使用
- 利用する複数のパッケージ内で同一のパッケージを使用

上記の問題を解決してくれる
隙間時間にみる早見表〜OracleJavaSE11 gold | マーカーインタフェース 〜

## マーカーインタフェース
そのクラスを処理するべきかインタフェースで判断する。インタフェースは何も持たない
instansof演算子を使用しマーカーインタフェースを使用しているクラスか判定する手法
### プロセッサ
マーカーインタフェースを使用するクラスを処理するクラスのこと

## アノテーション
マーカーインタフェースを簡単に表現するためのもの
ある処理の対象になるものを示す

### 特徴
プロセッサに値を渡すことができる
フィールド、メソッド、コンストラクタの細かい単位で指定できる

### 独自定義方法
```java
public @interface test{}
```
コンパイル後、java.lang.annotation.Annotationインタフェースを継承する記述になる

### 使用方法
```java
@test
public class Item{}
```
コンパイルされるとインタフェースが定義されるわけではなく、アノテーションを持っているという情報が保存される

## 注釈パラメーター
@ interface内に設定するメソッドに付与する値のこと
```java
@アノテーション名(注釈パラメーター=値...)
public @interface test{
String name();
int prise();
}
```
```java
@test(name = "test",prise = 100)
public class Item{
String name;
int prise;
}
```

メソッド名をString型のvalueのみにすると@アノテーション名(値)で記述可能

### デフォルト値の設定
```java
public @interface test{
String name() default "default";
}

@DefaultValues
public class Item{
}
```

## メタ・アノテーション
### リフレクション
インスタンスが持っているメソッドやフィールドの種類を調べて、インスタンスを操作できる
### java.lang.reflect
**setAccessible()**
フィールドのアクセス情報(アクセス修飾子のアクセス可不可の真偽値)を変更する

### java.lang.class
```java
Class<T> 変数名 = クラスリテラル
```
クラスがどのように定義しているかの情報を扱う

**getAnnotation(アノテーションクラス)**
クラスが持つアノテーション情報の取得
**getDeclareFileds()**
フィールドの定義情報を取得する

### クラスリテラル
クラス名.classで表せる情報

**RetentionPolicy**
@ Retentionを下記の三つから選び@ interfaceクラスの上に使用する
アノテーションの保持期間、デフォルトでCLASSが設定される
破棄順
早 SOURCE⇒CLASS⇒RUNTIME 遅

```java
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
```

|  | 説明 |
|:-:|:-:|
| RUNTIME  |  実行時まで保持する、実行時に何らかの処理をするプロセッサを作る時によく使われる |
|  CLASS | 実行時に破棄する  |
| SOURCE  | コンパイル時に破棄する  |

### @ Target
そのアノテーションが何を対象としているか

```java
@Target(ElementType.METHOD)
public @interface MyAnnotation {
}
```

|  | 説明 |
|:-:|:-:|
| ANNOTATION  | アノテーション宣言  |
| CONSTRUCTOR  | コンストラクタ宣言  |
| FIELD  | フィールド宣言  |
|  LOCAL_VARIABLE |  ローカル変数宣言 |
|  METHOD | メソッド宣言  |
| MODULE  | モジュール宣言  |
| PACKAGE  |  パッケージ宣言 |
|  PARAMETER |メソッドの引数宣言   |
|  TYPE | クラス、インタフェース、Enum宣言  |
|  TYPE_PARAMETER | 型パラメータ宣言  |
|  TYPE_USE |  型の使用 |


## @ Deprecated
バージョン変更などによって使用できなくなる可能性があるものに付与する、非推奨であることを明示しコンパイラに警告を出させる

**forRemoval = true**
強く抑制する

## @ SuppressWarnings
コンパイラの警告抑制
**unchecked**
警告抑制
**deprecation**
@Deprecatedの警告抑制
**removal**
@Deprecatedの強く抑制された警告を抑制

## @ Functionalinterface
関数型インタフェースであることを示す
オンラインコミュニケーションの難しさ

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。（同担OKです😉）

突然ですが、皆さんはオンライン、オフラインどちらのコミュニケーションが好きでしょうか？🤔
.
.
.
自分は、オフラインでのコミュニケーションが好みです！！

理由としては、会話のテンポが取りやすいことや表現のしやすさ、気軽に話せるといった点が挙げられるかなと思います。

勿論オンラインコミュニケーションにもメリットは沢山あります。
ですが、やはりオンラインはまだまだ難しく未だに慣れません😭

今回は、難しいと感じる点と自分なりに考える対処法をご紹介します。

# オンラインコミュニケーションの難しさ

## 心理的な壁を感じる
オンラインだと、物理的な距離があるためどうしても壁を感じてしまいます。😢

特に、テキストでのコミュニケーションや画面オフでのオンライン会議など。

**相手がどのような心境で発言しているか確認しにくいため、発言することを躊躇してしまいます。**
オフラインでコミュニケーションを取ると、相手の表情や仕草が感じ取れる＆ちょっとした時間に会えるため心理的なハードルは低くなるのですが、オンラインだと中々一歩が踏み込めません。。。

### 個人的な対処法
- テキストではリアクションを多めに取る（TeamsやSlackなど）
- テキストでの文面に絵文字を使用する
- オンライン会議では出来る限りカメラをONにして表情を感じ取ってもらいやすくする

## 会話のバトンが繋がりにくい
先ほども述べましたが、**発言量が全体的にオフラインより少なくなることで会話が中々繋がりません。**

また、誰に向かって話し掛けているか分かりづらく、会話の中で静寂が生まれることも度々あります。
リレーをする時にバトンを落としてしまった時のような、何とも言えない気持ちになります。😭

オフラインでは目配せを行うことで容易に話し掛けている対象を特定できることから、会話が途切れる確率は低くなるのかなと思います。


### 個人的な対処法
- テキストではメンションをつける（CCも含め）
- 会議では名前を言いながら話を聞く

# おわりに
改めてにはなりますが、オンラインコミュニケーションって難しいですよね。。。
勿論、在宅で全てが完結するという素晴らしい方法なので積極的に活用してはいきたいですが、業務がやりづらくなってしまったら元も子もないのでどう向き合っていくかはとても大切だと思います🤔

ここまでご覧いただきありがとうございました！
【2024マラソン31】なんとなく書きたいことはフリーボードを使ってみよう

# 何の記事？
Apple純正アプリである、「フリーボード」の使い方について書きます。

https://support.apple.com/ja-jp/guide/ipad/ipad9c59637d/ipados

# 誰向け？ どんな役にたつ？
- ファイルを作るほどではない、思いつきやラフの整理
- キャンバスサイズを気にせず書きたい時
- 最低限の色変えだけできればいいとき
- ペンのサイズをあまり変えないとき

# あらすじ
Qiita記事でも何度か使ったものとして取り上げましたが、iPadに初めから入っているフリーボードアプリの使い心地が良かったので、記事にすることにしました。

# オススメポイント
- キャンバスサイズ制限がない
- 目安ドットがあるため、文字・イラスト共にかきやすい
- ある程度の色やぺんが変更できる
- 範囲選択・複製・削除ができる
- iPhoneとiPadでデータ同期ができる
- 付箋での思考整理

# 苦手なことやできないこと
- レイヤ管理
- バケツ塗り
- ファイル出力(他に持っていく場合はスクショする)
- 目安ドットを消す
- 透過データの出力
- 筆圧感知でのペンの太さ変動

# どんなことに使ったか
### イラストの下書き
とりあえず、書いてみて整理する……というときにイラストソフトをわざわざ出して、ファイルを作ってレイヤー分けをして……と、必要ないことをやるのは面倒です。
また、常にiPadが側にあるわけではなく、なんとなしにアイディアが降ってくることが多いので、スマホでも雑に書けるのは助かっています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/1996cd65-d475-eb31-fdff-45cba2daef5a.png" width=300>

### 作るもののラフ
イメージを雑に書いて整理できるのがとても楽です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/eee368a6-1482-ff97-cc16-f38d26fb1ef2.jpeg" width=300>

### 思考整理
自作小説のプロット立てなどに使えます。
付箋を無限に増殖できるので、軽くテキストを書いたものを並べつつ、必要であれば赤ペンを入れたり、テキストを追加することもできます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/6836f80d-fe8b-9cfd-1a9c-f7eb5218bd36.jpeg" width=300>

### グラフィックレポート
おそらく簡単なグラレコであればコレでもかけるように感じました。
現状、私が話を聞きながら書く……というところまで技術がないため、グラ「レポ」になりますが、
ツールが必要最低限になっているので、使いやすかったです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/8c35aa5e-caf2-51b0-8467-fc3b360ac19a.jpeg" width=300>

# まとめ
昨日を極限までカットしたホワイトボードのようなアプリのため、「とりあえず書いてみる」が気軽にでき、重宝しています。
iPadにはデフォルトで入っているアプリなので、Apple Pencilがあるとラフ書きが捗るかと思います。
また、iCloudで同期できるので、iPhoneでざっくり指で描いたあと、iPadで整える……ということが可能です。

ちょっとした思考整理から、完成品のイメージラフまで、気軽に使ってみてください。
GCP(Google Cloud Platform) 学習メモ

aiacademy.jp/media/?p=1184

BigQuery（ビッグクエリ）は、Googleのクラウド側データベースで、Google Cloud Platform（GCP）にて提供されています。 数テラバイトや数ペタバイトというビッグデータ出会っても、超高速で解析することができるのが特徴です。


bigdata-navi.com/aidrops/6148/

BigQueryには、以下のような特徴があります。
•データ処理が高速
•専門知識がなくても扱いやすい
•GA4と連携可能

BigQueryのデータ処理が高速な理由として、以下の2つの仕組みが挙げられます。
•カラム型データストアの採用
•ツリーアーキテクチャによる分散処理

--------------------------------------------------------------------
domo.com/jp/glossary/wh…

データパイプラインとは、複数のソースからデータを収集、分析し、データを理解しやすい形で提示するために使用するプロセスとツールのことを指します


データパイプラインとETLの違い
•ETLは常にデータ変換を伴いますが、データサイエンスパイプラインは伴いません。
•データパイプラインは通常リアルタイムで実行されるのに対し、ETLはある程度のデータが溜まったタイミングや定期的なスケジュールでデータを転送します。


•ETLは、データがデータウェアハウスやデータベースにロードされた時点で停止します。データパイプラインはこれを過ぎても継続し、多くの場合、追加のフローやプロセスを起動させます。
Dateの操作

KotlinでのDateの一通りの操作をまとめておく。

```kotlin
val now = Date()
```

時間を計算するにはカレンダークラスを用いて計算をし、後でDateクラスに変換する。下記コードは2ヶ月と1日と1時間進めている。

```kotlin
cal1.time = now
cal1.add(Calendar.MONTH, 2)
cal1.add(Calendar.DATE, 1)
cal1.add(Calendar.HOUR, 1)
val calcDate = cal1.time // Dateクラスに変換
println(calcDate) //  Sun Sep 15 10:58:43 GMT+09:00 2024
```

書式を変更するにはSimpleDateFormatを使用します。

```kotlin
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now)
// 2024-07-14 10:00:00
val dateForma2 = SimpleDateFormat("yyyy年M月d日").format(now)
// 2024年7月14日
```

世界の時間を取得するにはZonedDateTimeを使用する。下記コードは日本と、アメリカの時間を表示している。

```kotlin
val zoneId = ZoneId.of("Asia/Tokyo")
val zoneId2 = ZoneId.of("America/Los_Angeles")

val zonedDateTime = ZonedDateTime.now(zoneId)
val zonedDateTime2 = ZonedDateTime.now(zoneId2)

println(zonedDateTime)   // 2024-07-14T09:55:20.112375+09:00[Asia/Tokyo]
println(zonedDateTime2)  // 2024-07-13T17:55:20.112394-07:00[America/Los_Angeles]
```

#### 参考

https://appdev-room.com/android-date-simpledateformat

https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZoneId.html
隙間時間にみる早見表〜OracleJavaSE11 gold | コレクション 〜

# この記事について
OracleJavaSE11 goldを勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにこちらの書籍で勉強していた時のまとめたものです！

おすすめ書籍（勉強開始時点の書籍最新版を購入しましょう）

https://book.impress.co.jp/books/1121101020

各カテゴリごとでまとめていますので隙間時間に見てみてください。

## コレクション
Object型として扱うことができるが取り出すときに互換性のない型にダウンキャストすると例外発生する

## ボクシング
オートボクシングはプリミティブ←→参照型だけなので注意

## ジェネリクス
**<>**
ダイヤモンド演算子、クラス内に記述される型パラメーター(T)を置き換える
### 総称型
ジェネリクスを使ったクラスのこと
### 型推論使用可能箇所(型を書かないで<>のみの場合)
変数への代入、メソッドの戻り値、メソッド呼び出しの引数
### 制約付き型パラメーター
T extends Aと記述することで、A型のクラスまたはサブクラスであることを保証できA型のクラスが持つメソッドを記述できる
### 非境界ワイルドカード
<？>のこと、実行時まで型パラメーターはわからない、メソッドの引数で使用される。
クラス、メソッドを非境界ワイルドカードにした場合、メソッドの戻り値はobject型になる
メソッドの引数はnullリテラルしか認められない

### 上限境界ワイルドカード
？ extends Aのように、制約付き型パラメーターと同じ。
メソッドの戻り値は任意の型(この場合はA)になる
メソッドの引数はnullリテラルしか認められない(ポリモーフィズムなため)

### 下限境界ワイルドカード
？ super B
メソッドの戻り値はobject型になる(型が確定しないため)
メソッドの引数は任意の型(この場合はBかBのスーパークラス)になる

## 変性
参照型をどの型で扱えるようにするのか
### 共変性
サブクラス型の代入を許す、ポリモーフィズム
### 非変性
サブクラス型の代入を許さない、ジェネリクス
### 反変性
さらにスーパークラス型の代入を許す

## java.util.List
要素に番号をふって管理するインタフェース
### arraylist
動的配列
要素内の処理は高速、新しい要素を加えバッファを越えた時、全てコピーして置き換えるので処理が遅くなる
読み込みは早いが書き込みが遅い
### linkedlist
数珠繋ぎで互いにリンクを持つ配列
要素へのアクセスは先頭または末尾からのため処理が遅い
読み込みは遅いが書き込みは早い
### vector
マルチスレッドに対応しているがパフォーマンスは悪い

## java.util.Queue
FIFOのデータ構造を定義したインタフェース
**add()**
末尾から詰め込む

## java.util.Deque
両端キュー。デックと読む。取り出す時は先頭から
**addfirst()**
先頭から詰め込む
**addlast()**
末尾から詰め込む

## java.util.Set
重複しないことを保証するコレクションインタフェース
**hashset()**
実現クラス。順序を保証しない
**treeset()**
実現クラス。順序を保証する。自然順序か引数で渡したcomparaterに準拠する

## java.util.Map
一意のキーと値を結びつける
ディクショナリ形式
|  | 説明 |
|:-:|:-:|
| put() |   |
| get()  |   |
| keyset()  | キーをまとめてset型で返す  |
| entryset()  | mapからmap.entryの集合を取り出す  |
| entry()  | map.entryのみの生成だがstaticで変更不可  |
| ofentreis()  | map.entryからmapを作成するがstaticで変更不可  |

## map.entryインタフェース
キーと値のペアを管理する、mapにputした時点で生成
**getkey()**
**getvalue()**

## java.lang.comparableインタフェース
カプセルオブジェクトで実現する。
compareToも実現しなければいけない。アルゴリズムは一つのみ
**compareTo()**
整数昇順で並び替えを表現する
自分自身が本来の並びから相手よりも後ろにいるなら-1
自分自身が本来の並びから相手より前にいるなら1
同値なら0

## java.util.collections
**sort()**
compareToを使用してオブジェクトを並び替える

## java.util.comparaterインタフェース
並び替えの方法を記述する。
sortメソッドの第二引数で利用する
関数型インタフェース。
comparater<T>

**int compare(T,T)**
メソッドにcompareToを使用した処理を実装する
collections.sortに引数で渡すとそれをもとにソートされる
隙間時間にみる早見表〜OracleJavaSE11 gold | JDBC 〜

# この記事について
OracleJavaSE11 goldを勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにこちらの書籍で勉強していた時のまとめたものです！

おすすめ書籍（勉強開始時点の書籍最新版を購入しましょう）

https://book.impress.co.jp/books/1121101020

各カテゴリごとでまとめていますので隙間時間に見てみてください。

## JDBC
DBMSを共通して扱えるように、java.sqlパッケージやjavax.sqlパッケージを提供する。インタフェースを実装したクラスは各ベンダが提供する。

## 接続文字列
```java
jdbc:dbms名？://サーバのIPアドレス:ポート番号/データベースの場所
```

## java.sql.connection
DBMSとのコネクションを管理する
**close()**
コネクションを閉じる

## java.sql.DriveManager
提供されたドライバを検索しDBMSに接続するクラス
**getConnection()**
java.sql.connectionの実装クラスのインスタンス参照、接続文字列を受けとる
**preparedCall()**
呼び出すストアドプロシージャを引数に渡し、java.sql.CallableStatement型を戻り値で受けとる
例:CALL 名称(？とかの引数)

## java.sql.Statement
パラメーターなしのSQL文を扱う、実行時にDBMSでコンパイル、スーパーインタフェース

**enquoteldentifier()**
引数に引用符をつけられた文字列を返す、インジェクション対策に一定の効果がある

## java.sql.PreparedStatement
準備された文という意味、パラメータを受けとるSQL文を扱う、実行前にプログラムでコンパイルするため処理が早い
**setXXX()**
？を使用した箇所に代入、１から始まる
**executeUpdate()**
データの挿入、更新、削除を行う
**executeQuery()**
検索をおこなう
**execute()**
updateかqueryを行う。インジェクションの脆弱性あり
戻り値としてresultsetが戻ってきたか真偽値を返す、resultsetならtrue
**addBatch()**
SQLの登録
**executeBatch()**
一度に複数のsqlを実行できる、各SQLの結果を件数で返す
**getUpdateCount()**
更新されたレコード件数を返す

## java.sql.CallableStatement
DBMSに登録されたストアドプロシージャを実行する

### ストアドプロシージャ
sqlと専門の言語を組み合わせてDBMSに保存、ん実行する

## ○java.sql.ResultSet
検索結果を表として表現し、カーソルを動かしてレコード出力する
**next()**
カーソル移動、resultsetの初期位置は0なので絶対必要
**getXXX()**
列の型に合わせて、引数のカラムまたはリテラルに応じて取得
robloxでassistant その126

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
録画せよ。

# 手順
- プレイを押す。
- 表示を押す。
- ビデオ録画を押す。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/85458f73-dcc2-05be-68d9-f14167f9f6a7.png)


以上。
【AndroidStudio】不要なImportを除去する設定まとめ

# はじめに
リファクタ系の作業をしていると、うっかり不要なインポートが差分に残っていてレビュー時に指摘をいただいたり、コミットした後に気がついて再度コミットしないといけなかったりして、不要な二度手間をさくことになっていませんか？
私もプロジェクトを跨いでいたりするとうっかりしてしまうことがあるのですが、このうっかりを防ぐことが可能な設定がありますので、備忘録的に残しておこうと思います。

# 設定方法
まずは、【AndroidStudio】 > 【Settings】 より設定画面を表示します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/f1c514b6-3109-a794-db12-44c062584766.png" width="520px">

次に、上記画像でもあるように、【Editor】 > 【General】 > 【Auto Import】 を選択して表示します。
検索窓からAuto Importと検索することでも確認可能です。

Auto Import設定より、【Add unambiguous imports on the fly】にチェックを入れてください。
KotlinであればKotlin内のものを、JavaであればJava内のものにチェックを入れてもらえればと思います。

これで不要なインポートを自動で整理可能です。

# さいごに
子供からの風邪は強すぎるので、みなさんお気をつけください、、、
【Figma】Code Connect を使ってアクセシブルなコンポーネントを作成する

## はじめに
みなさんは、アクセシブルなコンポーネントをFigmaで作りたいと思ったことはありますか？

UI周りの仕様をFigma内で完結させようとした時、コメントやアノテーションを使って `aria-label` とかを指定してもなかなか気がつきにくいものです。

そのため、この記事では、Code Connect を使って、 role属性や WAI-ARIAを意図的にデザイン上で表現する方法を解説します。

## Code Connectとは？
Code Connectについてこちらの記事で紹介しているのでぜひご覧ください！

https://qiita.com/degudegu2510/items/90157cea8617e3f63a67

https://qiita.com/degudegu2510/items/9bd37117b55788f373c8

## Code Connect を使ってアクセシブルなコンポーネントを作成する

この記事では、スイッチボタンをベースに説明していこうと思います

スイッチボタンのアクセシビリティについては、こちらをご覧ください！

https://qiita.com/degudegu2510/items/f83e466cb7e9d5d20a83

### ① Figmaのコンポーネントを準備する
以下の画像のようなコンポーネントを用意します。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/0e443988-a58b-5e9c-b7d7-ea61d05f4269.png)

アクセシブルなコンポーネントをFigmaで作るに当たって、非表示の `aria-label` 用のテキストを テキスト プロパティで作成しています。

また、他のプロパティには、スイッチボタンのON/OFFを切り替える Checked というプロパティと disabled 状態を示す Disabledを入れています。

### ② コード上のコンポーネントを準備する
いかのような toggle コンポーネントを作成します。

```Toggle.tsx
import { InputHTMLAttributes } from "react"

interface props extends InputHTMLAttributes<HTMLInputElement> {
  checked: boolean
  disabled: boolean
}

export const Toggle = ({
  checked,
  disabled = false,
  ...props
}: props) => {
  return (
    <input
      className={`toggle-style ${checked && "is-checked"}`}
      type="checkbox"
      disabled={disabled}
      {...props}
    />
  )
}
```

### ③ コードコネクト用のファイルを生成する

以下のコマンドを入力し、コードコネクト用のファイルを生成します。

```
npx figma connect
```

生成されたファイルを以下のように修正します！

```Toggle.figma.tsx
import { Toggle } from "./Toggle"
import figma from "@figma/code-connect"

figma.connect(
  Toggle,
  "https://www.figma.com/design/2NoYIOk55maQuNYSvCmKFp/qiita-design%231841---Figma-Plugins%E7%94%A8-issue?node-id=10008%3A606",
  {
    props: {
      checked: figma.boolean("Checked"),
      disabled: figma.boolean("Disabled"),
      ariaLabel: figma.string("aria-label"),
      ariaChecked: figma.boolean("Checked"),
    },
    example: (props) =>
      <Toggle
        checked={props.checked}
        disabled={props.disabled}
        aria-label={props.ariaLabel}
        aria-checked={props.ariaChecked}
      />,
  },
)
```

### ④ Figmaのコンポーネントに紐付ける
以下のコマンドをターミナル入力することで、コード上のコンポーネントをFigmaのコンポーネントに紐付けます。

```
npx figma connect publish
```

紐付けに成功すると、FigmaのDevモードのインスペクトパネルで以下のように表示されます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/90f0460e-4fdf-cb87-d6d8-d4cdcc1939d5.png)

上記の画像のように、表示されることで、`aria-label`　を忘れたりすることは少なくなるでしょう！

ただ、表示される内容が、
`aria-label=表示する` → `aria-label="表示する"`
`aria-checked=true` → `aria-checked={true}`
といった感じに表示してもらえると、コピペでそのまま使え、嬉しいのになと感じました。


## まとめ
この記事では、Code Connect を使ってアクセシブルなコンポーネントを作成する方法をまとめした。

ぜひこの記事を参考にコード上でも、Figma上でもアクセシブルなコンポーネントを作るようにしてみてはいかがでしょうか？

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510
ESLintで対象外のファイルを指定したい時

# はじめに

こんにちは、エンジニアのkeitaMaxです。

ESLintで解析したくないファイルを指定する方法について備忘録として記事にします。

今回はReactを使用してやってみます。

# 結論

`.eslintignore`ファイルを用意し、そこに対象外のファイルを記述するだけで大丈夫です。

```.eslintignore
dist/*
```

実際に以下のコマンドでLintを実施してみると対象になっていないことがわかります。

```
npm run lint
```

# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

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

# 参考

https://qiita.com/seito2014/items/bec113dcb461d704f0cb
天竺に到着 - Easy-ISLisp ver5.0への旅-

# 天竺に到達
西遊記のお話の中で孫悟空たちは天竺を目指して旅を続けました。ありがたいお経を手に入れる長い旅でした。私のLispの理想郷を目指した旅もver5.0で目標を達したように思います。記念に書き残しておこうと思います。

![bandicam 2024-07-14 08-19-49-107.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/a4184b0a-6933-88c8-a868-83563aa1a25b.jpeg)



# 並列
私は主に前東北大学教授の伊藤先生のPaiLispを参考にしました。Lisp世界ではかなり早い段階で並列計算が試みられていました。英語圏の掲示板で当時のことを尋ねてみました。CM-1と*Lispのこと。InterLisp-Dのこと。当時において先進的な試みがなされていました。私はこれに感銘を受けました。Lispは技術において最先端を走っていたのです。


並列にはヒューイットによるアクタ理論があります。これはその後Elixirに採用されています。私はアクタ理論ではなく、PaiLispに見られるような親プロセスが子プロセスに計算を分割して、統合するタイプのモデルを選択しました。複数のプロセスが相互に通信をすることとなると複雑になり私の手には負えそうもありませんでした。そして私の興味は粒度の大きい計算を分割して高速化することにありました。


古典的な (plet forms body) (pcall fun x0 x1 .. xn) という並列構文をスタート地点としました。並列計算を当初マルチスレッド方式として取り組みました。さらにマルチプロセス方式、分散並列へと発展させました。それぞれの方式ごとに　(mt-let ...) (mp-let ...) (dp-let ...) と命名してISLisp処理系の拡張機能として実装しました。


並列は現代において主要な題材だと思います。CPUは微細化の限界に達してマルチコア化に進んでいます。ゲーム用パソコンですと20コアのマシン販売されています。こういったハードを活かせたら面白いと思います。いずれは量子コンピューターの時代が到来することでしょう。しかし、それはまだまだ先のことなりそうです。並列計算、まだまだ面白い題材だと思います。


# モジュール
ISLispはその基本部分をとりまとてISOに採用されました。コンセンサスを得ることが難しかったパッケージやモジュールは取り込まれませんでした。これは幸いだったかもしれません。Common-Lispのパッケージシステムは今となっては古臭いです。私はモダンなElixirのモジュールを参考にして(defmodule ...)を設計、実装しました。単純な仕組みです。

私が想定している使い方は学校における計算実験でした。単純で簡単に覚えられる仕組みの方が適しています。ISLispが産業用に使われることは今のところまあ、考えられません。簡単な仕組みで十分だと思っています。


# インタプリタとコンパイラ
私の処理系はインタプリタとコンパイラを持っています。インタプリタは遅いです。私はインタプリタは動作確認、デバッグのためのものだと割り切っています。遅くて構わないのでデバッグ機能に力を入れました。プリントデバッグで済ますLisperもいるらしいのですが、これは私には信じられません。対話的なデバッグがLispの良さです。できるだけのデバッグ機能を入れました。インタプリタにおいてはエラーチェックも徹底してやりました。ISLisp規格はエラー処理も明確に規定されています。一方でコンパイラはエラーチェックは手抜きです。しかし、静的な解析によるエラーチェックはしっかりやっています。また、型推論器を装備しています。Lispはもともと動的型付けの言語設計ですから完全に型推論を行うことはできません。それでもできるだけエラーや警告でコンパイル時に検出できるようにしました。コードの最適化は末尾再帰最適化はしていますが、それ以外はGCCのコンパイラに委ねています。

# 知的なおもちゃ
私にとってLispは知的なおもちゃです。中西正和先生のLispの本に出合って以来、Lispは私の良き教師、友人です。Z80のような非力なパソコンでも動いていました。現在では高性能なCPUを搭載したパソコンは安価に手に入ります。メモリもギガバイトという広大なメモリ空間を使うことができます。CPUはマルチコアが普通です。20世紀の頃のスーパーコンピューターやLispマシンを軽々と凌駕しています。これを利用すればますます楽しいLisp遊びができるこでしょう。


# 一休み
この10年ほどLisp、Prolog、Schemeの処理系作りに没頭してきました。私は目標を達成しました。Lisp処理系の機能拡張はこれで終わりです。ソフトウェアにバグはつきものです。バグ潰しのメンテナンスだけをしつつ、このプロジェクトはひとまずの完成です。エレキギターを追求したり、プラモデルを作ってノンビリとしようと思っています。

# Easy-ISLisp
このLisp処理系はOSSです。BSD2ライセンスで公開しています。ご自由にお使いください。
https://github.com/sasagawa888/eisl

それでは素敵なLISPライフを！
OpenStudioのチュートリアルを試してみる　その10

# 1. はじめに
先日[OpenStudioのチュートリアルを試してみる　その9](https://qiita.com/bebebefu/items/3d28684f884b930156fc)の記事にて、以下のリンクの動画シリーズで紹介されているOpenStudioを用いたfire station（消防署）のモデル作成・シミュレーションの11番目の動画についての手順を追っていきました。今回はこの動画シリーズの12番目の動画の手順を追っていきたいと思います。

https://www.youtube.com/playlist?list=PLRW2KXkdSVUdY2iQ6yjohNT5E5ElLVIhU

# 2. 実施環境
CPU: CORE i5 8th Gen
メモリ: 8GB
OS: Windows 11 22H2

# 3. 手順
本記事で内容・手順を追った動画（上記動画シリーズの12番目の動画）：

https://www.youtube.com/watch?v=5ZjqfSV6M1k&list=PLRW2KXkdSVUdY2iQ6yjohNT5E5ElLVIhU&index=12

## 3.1 Facility TabにおけるBuilding nameの設定
解説動画では、以下の図で赤枠で囲んだFacilityタブをクリックすると以下の画面が表示されます。そして黄枠で囲んだBuilding nameのところを修正します。

![スクリーンショット 2024-07-11 154800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/e90b77b8-cfba-9fb7-8ad5-87d7db35d690.png)

## 3.2 建物の向きの変更
建物の向きを90度変えるため、以下の図の赤枠で囲んだFacilityタブの画面の"North Axis"に90と入力します。
![スクリーンショット 2024-07-11 155400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/cdcccaeb-df06-dfcb-f7e1-41fab8fbc973.png)

## 3.3 Space Type、Default Construction Set、Default Schedule Setの設定
以下の図で赤枠で囲んだ"Space Type"のところには"FireStation Apparatus"、黄枠で囲んだ"Default Construction Set"のところには"FireStation Metal"。青枠で囲んだ"Default Schedule Set"のところには"FireStation Schedule Set"を画面右のMy Modelのタブからドラッグアンドドロップしてきます。

![スクリーンショット 2024-07-11 161640.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/9816db19-9a36-c7c1-c800-e799e1af6877.png)

## 3.4 Exterior Equipmentの設定
Facilityタブをクリックした画面において、以下の図で赤枠で囲んだ"Exterior Equipment"タブをクリックします。

![スクリーンショット 2024-07-11 162253.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/4e3662f9-0136-61c9-2c93-7802b8ddcac3.png)

画面左下の＋ボタンを押して新しい項目を追加した上で、以下の図で赤枠で囲んだ"Exterior Lights Definition 1"のところをクリックし、黄枠で囲んだところに400と入力して400Wに設定します。

![スクリーンショット 2024-07-11 163147.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/44df54c2-1d90-2e1a-1a00-162d0d3a1f9b.png)

以下の図で赤枠で囲んだ"Control Option"のところをクリックし、黄枠で囲んだ"Astronomical Clock"を選択します。

![スクリーンショット 2024-07-11 163352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/ff1ae942-313f-0b98-2fa2-abb0092d69cc.png)

以下の図で赤枠で囲んだ"End Use Subcategory"のところを"General-Ext Lights"と修正します。

![スクリーンショット 2024-07-11 163918.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/3d24beaa-aa5e-95cc-c297-686353068a7b.png)


# 4. まとめ
とりあえずここまでも特にエラーなく進めることができました。
次回は動画シリーズの13番目：https://www.youtube.com/watch?v=3nUX_BXHODQ&list=PLRW2KXkdSVUdY2iQ6yjohNT5E5ElLVIhU&index=13 を実施していきたいと思います。
【2024マラソン29】納品漏れチェックとダブり伝票をExcelで算出する

# 何の記事？
毎週納品先なのに伝票が出ていなかったり、伝票がダブって出ている先に対して、人力ではなく、入力データから算出する方法を考えました。

# 誰向け？ どんな役にたつ？
- 納品曜日は決まっているが、曜日通りに納品されているかを人力で行うのは大変な人
- 伝票ダブり入力に困っている人
- 伝票提出忘れを確認するのが大変な人
- 伝票チェックが人力ではミスがある人

# あらすじ
営業が入力するものから自分が入力するものまで、担当が変わっても毎月伝票関連のミスが見つかる状況だったため、人力ではなく機械でのチェック方法ができないだろうかと考えました。

# チェックデータ
納品日と納品先、納品数などが入っている。
納品先毎に、毎週何曜日の納品かが決まっている。
今回は伝票そのもののチェックのため、「納品日」「納品先」のみ出力したデータから判定をおこなう。

# 何をやったか
## 伝票提出もれチェック
締め日に対してあるべき納品回数を出し、その納品数に満たない場所が抽出されるようにします。

1. 締日を自動算出
1. 締日までの各曜日の個数を計算
1. 締日までの納品先毎の納品回数を計算
1. 納品先毎に期間内の曜日個数を加算し、納品回数と合っているかを計算
1. 合っていない先をリストアップするようにし、その先に絞って伝票と入力データを確認する

## 伝票ダブりチェック
1. 出力した納品データに対し、納品日カラムと重複があるかを全レコード関数チェック
1. 重複があった納品先をリストアップし、その先に絞って伝票と入力データを確認する

# 結果
人力チェック前に怪しい先をピックアップできるようになったので、だいぶ作業量が減りました。
数値が求められた値になっているかのチェックはどう考えても機械に任せた方がいいので、ちょっとしたことから労力を削減していければと思います。

# 今後の改良計画
- チェック必要先と担当営業マスタの連携
- チェック必要先に対していつ納品がモレ/ダブリが発生しているかの算出
- チェック必要先に対して確認必要日時をカレンダー表示

# 参考

https://chiquilin.web.fc2.com/data/071101_specific_day.html

https://www.pc-koubou.jp/magazine/51946
【2024マラソン28】MarkdownAI なら、markdownとcssを"学びながら"サイトを作れる

# 何の記事？
Qiitaマラソンの企画を見て、markdown aiを触ってみた感想を書きます。

# 作ったもの

https://storage.googleapis.com/topdowncom/content/mLbabgZ6SqW33bcOzG0ohF5qwzt2/872e61b1-bfdc-429b-8df0-4db5e13e4c30/index.html

この記事の内容をそのまま転記しています。

# いじった箇所
- cssを記述して、見出しやテーブル表示を変更した
- サイトアイコンをつけたので、リンクカードに表示されるようになった

# 魅力に感じたところ
- markdown内容をそのままHPとして公開できる
- googleアカウントログインのみで、書いたらすぐ公開できる
- cssも使えるので、markdownに少し装飾を加えて出すということができる

# 難しさを感じたところ
- markdownだけでは表現できるHPが限られる
- すごい技術だけど、コレぞ!……と表言できそうな内容が思いつかない
- head内に書きたい内容などが出てきたら卒業
- サイト内リンクなどを作ろうと思うと少し難しい(リンクベタ打ち?)
- チェックボックスの文字をクリックしてもチェックされない(判定がボックスのみ

# 需要がありそうな箇所
- 内容を公開したいが、そのためにサイトを作るほどではないとき
- イベント期間のみなど、一定期間の公開でいいとき
- markdownで書ける内容だけど、ブログサイトに載せるようなものではないとき
- HTMLは詳しくなく、markdownにプラスアルファで公開できそうな内容のとき

# こんなことに使えそうという想像
- 小説などの公開サイト
    - プライベッターやカクヨムにするほどでもない少量ならここでもいいのでは
    - 複数サイトに散ってしまったページリンク
- ちょっとした情報共有
- レポート形式なもの
- [子向け]簡単な作品アルバムサイト
- 簡単な自己紹介サイト
- 一時的なイベントサイト
- リンク集
- [子向け]時間割+持ち物メモサイト
    - ✅が使えるので、チェックリストが作れる
- ちょっとしたやることリスト
    - 可変チェックボックスが使える

# こんな機能に期待したい
- サイト内リンク
- 文字替えなど簡単なcssテンプレート
- headやTwitterカードなどのカスタマイズ機能(ページ毎に画像を設定したい)

# 全体的な感想
markdownさえ書ければHPが作れる!……は素敵な技術だと感じました。
また、markdownというエンジニアなら多くの人が知っていそうな知識で作れるのも素晴らしいです。また、知らなくても勉強して腐る知識ではないのでここからHP作成を始める足掛かりにする……という選択肢ができたのは大きいと思います。
特に、cssはコピペOKなコードがたくさん配布されているので、コピペや写経からサイトが作っていけるのはいいなと感じました。
HTMLがかける人に取ってはHTMLを書いた方が早いですが、ちょっとしたことを1マイページで公開したいが、自分のサイトなんてないし……という人に刺さりそうだな、と思いました。

今後、AI機能などがどう入った形で実装されていくのか楽しみです。

# 参考リンク

https://unique1.co.jp/column/sns_operation/3033/#23_Twitterカードの設定をしたら表示を確認しよう

https://saruwakakun.com/html-css/reference/h-design

https://www.sejuku.net/blog/57841