OmniAICreator/Qiita-1.07M huggingface dataset:
Latency Matters: Real-Time Action Forecasting Transformer


# 1. 概要
動画の与えられたシーケンスから次に起こるアクションや動作・行動を予測する技術をアクション予測(Action Forcasting)と呼び、ロボットの行動計画や監視システムの高度化などで用いられている。この研究は、トランスフォーマーを使ったリアルタイムアクション予測(>=25FPS)を行うもので、現在フレームから遡ってどれだけ前の情報を予測に使えるかをレイテンシーとして捉え、予測精度とレイテンシーのトレードオフを発見した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/e75c992e-23d6-5371-c206-d8e31d1ad6ae.png)

---

# 2. 新規性
時間方向に対して頑健性が得られるようにするために自己教師有りのシャッフルネットを導入しており、モデルの汎化性を向上させることに成功している。この研究ではリアルタイムのアクション予測ではレイテンシーが40msまでは精度が向上するが、それ以降では減少することを明らかにしている。大きなレイテンシーがある場合、モデルはより多くの情報を予測に使えるため一般的に精度が上がるが、小さいレイテンシーの場合、より新しい情報だけにフォーカスできる一方で参照情報量が減るため予測が難しくなる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/02a33f04-2cd8-2192-1894-18e22d70769d.png)

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/3caf169d-50f9-f645-1eef-2a62250d2fe9.png)
高解像度のショートクリップ動画から高次元特徴を抽出する前段のトランスフォーマーネットワークと、複数のショートクリップ動画の特徴を時間方向で集約して長期的な将来の動作予測を行う後段のトランスフォーマーネットワークの二段構成になっている。シャッフルネットは前段のトランスフォーマーに組み込まれており、動画の時間方向に対してシャッフルされても元に戻せるよう高い汎用性を獲得できる設計になっている。フレーム番号は既知なのでシャッフルされても時間的な一貫性が失われることはない。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/11db9264-13ac-cbdc-ff8b-7b6d1762adb2.png)
リアルタイム動作させるためにネットワークがシンプルになっており、従来研究と同等精度で9倍レイテンシーを小さくすることに成功した。また、トレーニング時の計算量を94%削減し、トレーニングパラメータを90%削減している。その上で、従来手法よりも高精度なリアルタイムアクション予測を実現している。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Girase_Latency_Matters_Real-Time_Action_Forecasting_Transformer_CVPR_2023_paper.pdf>

last updates: June 23 2023
InstructPix2Pix: Learning To Follow Image Editing Instructions


# 1. 概要
テキスト入力に合わせて画像を自由に編集する技術を提案。入力画像と編集内容を示したテキストから、テキストの意味を考慮して画像編集を行うために、大規模な学習データセットを作成しており、これを使って画像生成モデルを再学習した。なお、ベースとなる画像生成モデルはStable Diffusionを採用している。事例ごとのファインチューニングを必要としないので、テキストによる高速画像編集が可能になっている。

---

# 2. 新規性
大規模言語モデル(GPT-3)とテキストから画像を生成する画像生成モデル(Stable Diffusion)を組み合わせ、膨大なデータセットを構築した。

---

# 3. 実現方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/38e1f1a8-4f3e-6bf7-aa30-15a7b9f35a61.png)
ファインチューニングされたGPT-3を使用して、画像の編集指示を示したテキストと指示内容を反映したキャプションを生成する。次に、Prompt-to-Promptを組み込んだStable Diffusionでキャプションのペアから画像のペアを自動生成する。この過程を繰り返し学習用のテキスト情報と対となる画像ペアを45万以上生成する。生成した大規模データセットに含まれる編集指示のテキストと編集結果の画像をStable Diffusionの潜在空間上に制約条件として含めておくことで編集指示のテキストに対して編集済みの画像が生成されるようにしている。このとき、時刻tで画像とテキストの制約条件を含むノイズが付与された潜在空間Ztを予測するようにネットワークが学習される。

---

# 4. 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/158742/274780aa-88bf-63e0-1881-4e7535dc8eeb.png)
全体のコンテキストを壊すことなく、特定の対象を言語によりコントロールして再構成できていることがわかる。

---

Paper URL: <https://openaccess.thecvf.com/content/CVPR2023/papers/Brooks_InstructPix2Pix_Learning_To_Follow_Image_Editing_Instructions_CVPR_2023_paper.pdf>


last updates: June 23 2023
[ServiceNow] ScriptでUserをGroupに追加、Groupから削除する

# UserをGroupに追加する

特定のUserを特定のGroupに安全に追加するには、そのUserがそのGroupにすでに所属しているか確認した上で、処理します。

```JavaScript:Script
//追加しようとするUserとGroupの組み合わせでsys_user_groupのレコードを検索
var grGrMem = GlideRecord("sys_user_grmember");
grGrMem.addQuery("user", <ここにUserのsys_idを記入>);
grGrMem.addQuery("group", <ここにGroupのsys_idを記入>);
grGrMem.query();
//存在しない場合
if (!grGrMem.next()) {
    //UserをGroupに追加
    grGrMem.initialze();
    grGrMem.group = <ここにUserのsys_idを記入>;
    grGrMem.user = <ここにGroupのsys_idを記入>;
    grGrMem.insert();
}
```

# UserをGroupから削除する

また、特定のUserを特定のGroupを削除する場合は、該当レコードを検索して削除します。

```JavaScript:Script
//削除しようとするUserとGroupの組み合わせでsys_user_groupのレコードを検索
var grGrMem = GlideRecord("sys_user_grmember");
grGrMem.addQuery("user", <ここにUserのsys_idを記入>);
grGrMem.addQuery("group", <ここにGroupのsys_idを記入>);
grGrMem.query();
//存在する場合
while (grGrMem.next()) {
    grGrMem.deleteRecord();
}
```

:::note info
addQueryで、Userの条件を指定しない場合は、指定したGroupから全ユーザーが削除されます。
また、Groupの条件を指定しない場合は、指定したUserが所属しているすべてのGroupから削除されます。
:::
JiraのRank (優先度) を変えさせない方法

# 概要
JiraのBacklogやカンバンボードでデフォルトの挙動である優先度(Rank)順での表示をしつつ、特定の場合だけその優先度を変えらるようにする方法のメモ。簡単に順番を変えられるUIは良さでもあるが、操作ミスでうっかり変えてしまうこともあるのでなんとかしたい。

まず、Team-managed(チーム管理)タイプではできないので、Company-managed(企業管理)タイプでの話になる。

## TL;TR
ボードのフィルタで`ORDER BY`と`Rank`の間に他の項目を入れる。
```
ORDER BY Sprint, Rank ASC
```
これで、このフィルタを使ったボードでは、優先度(Rank)順での表示をしつつ、その順番は変えられないようになる。

# 詳細
ネットで調べると、下記２つの方法が見つかったが、それぞれ許容できそうもないデメリットが有る。
1. Schedule issuesの権限を付与していないユーザはRankを変えられなくなる（[参考](https://community.atlassian.com/t5/Marketplace-Apps-Integrations/Prevent-Rank-Changes/qaq-p/1591965)）
2. ボードのフィルタでRankでソートしなければRankを変えられなくなる

1の方法だと、Rankの変更以外にも、Sprint間の移動や期日の設定などもできなくなる。
2の方法だと、Rankで表示するためにはRankを使わずにRankの順で表示されるような仕組みをカスタムフィールドなどを駆使して作ることになり、結構煩雑になりそう。正直実現できる方法があるのかもわからない。

また、Automationで「Rankの変更を検知して許可するユーザグループ以外だったら変更前に強制的に戻す」という方法も試みたが、Rankが何から何に変わったという情報が取得できないので有効ではなかった。

そこで、2の方法を一捻りして、`ORDER BY`と`Rank`の間に他の項目を入れるとRankでソートされているという認識ではなくなるJiraの挙動を利用し、下記のようにボードのフィルタを変更してみた。

```
ORDER BY Rank ASC
```
を
```
ORDER BY Sprint, Rank ASC
```
に変えたら、このフィルタを使うボードでは、Rankでソートして表示しつつ、Rankを変えられなくなった。

スプリント間の移動は可能で、カンバンボードでもカラム間の移動も可能。かつRankは変わらない！
挿入するソート項目をSprintにすれば、BacklogでもカンバンボードでもSprintですでに分けられているので表示順に影響を与えないので、やりたいことはできた。
MyBatisでExampleClassをカスタマイズする

## 自動生成したExampleClassに追加の抽出条件を加える

テーブルを結合して他のテーブルのカラムを抽出条件とすることがある。この場合は、他のテーブルのExampleClassから該当の抽出条件を持ってきて、以下のように追加する。このとき、通常のものとエイリアスを付けるものを両方用意しておくと、複数人で開発するときなどに便利である。

```Java

public class MTestExample {
	/**
	 * This field was generated by MyBatis Generator. This field corresponds to the database table dbo.M_TEST
	 * @mbg.generated
	 */
	protected String orderByClause;
	/**
	 * This field was generated by MyBatis Generator. This field corresponds to the database table dbo.M_TEST
	 * @mbg.generated
	 */
	protected boolean distinct;
	/**
	 * This field was generated by MyBatis Generator. This field corresponds to the database table dbo.M_TEST
	 * @mbg.generated
	 */
	protected List<Criteria> oredCriteria


   // ... 略
		

	/**
	 * This class was generated by MyBatis Generator. This class corresponds to the
	 * database table dbo.M_TEST
	 *
	 * @mbg.generated do_not_delete_during_merge
	 */
	public static class Criteria extends GeneratedCriteria {
		protected Criteria() {
			super();
		}

		// ↓↓↓　ここは上書きされないので、ここから下に追記していく ↓↓↓
        public Criteria andDeleteFlgEqualTo(String value) {
			addCriterion("DELETE_FLG =", value, "deleteFlg");
			return (Criteria) this;
		}

        public Criteria andDeleteFlgEqualTo(String value, String alias) {
			addCriterion(alias + ".DELETE_FLG =", value, "deleteFlg");
			return (Criteria) this;
		}
    }
}
```
【JavaScript】truthyとfalsyについて 【React頻出の記法】

## はじめに
React,TypeScriptを学習する上で、どの値が`true`でどの値が`false`になるかは
かなり重要な概念になってきますし実務上でも頻出となります。

というわけで,今回は簡単に題目の判定についてまとめていきます。

## Javascriptにおける`truthy`な値と`falsy`な値
基本的には`falsy`な値だけ、覚えてそれ以外は`truthy`の値と考えるのが良いかなと自分は考えています。



| 値 |型|  
|:-----------|:------------|
| false       | boolean| 
| 0(数字)       | number        | 
| -0(数字)       | number        | 
| 0n      | bigint        | 
| ""(空文字列)       | string        | 
| null       | null        | 
| undefined       | undefined        | 
| NaN(Not A Number)      | number        | 

つまり上記の図で表記**されていない値**は`truthy`です！
言語によって`truthy`な値と`falsy`な値は変わってくるので気をつけてください。
### 注意するべきパターン

#### 文字列 "0"の真偽値
```javascript
const hoge = "0"
const result = hoge ? "true" : "false"
console.log(result)

//console.logではtrueが出力される
```
文字列 `"0"`は空の文字列ではないのでtrueが返却されます

#### 空の配列の真偽値
```javascript
const hoge = []
const result = hoge ? "true" : "false"
console.log(result)

// console.logではtrueが出力される
```
自分もプログラミングを始めた当初は空の配列はfalseの判定かなと思ってましたが`javascript`の場合はfalseが返却されます(因みにPHPでは空の配列はfalse😵‍💫)。

この場合は下記のようにすることで、falseと判定させることが出来ます。
```javascript
const hoge = []
const result = hoge.length > 0 ? "true" : "false"
console.log(result)

// console.logではfalseが出力される
```

因みに、空のオブジェクトもfalsyな値となっております。

## 最後に
今回の記事はいかがでしたでしょうか。
`truthy`と`falsy`の概念は`論理積(&&)`と`論理和(||)`と併用される場合多いです。
実務においても、多用される概念なので個人開発も仕事をする際も意識しておきましょう💪

## 参考記事・講座
[サバイバルTypescript](https://typescriptbook.jp/reference/values-types-variables/truthy-falsy-values)
[【2023年最新】React(v18)完全入門ガイド Udemy](https://www.udemy.com/course/react-complete-guide/)
GitHub ActionsからAWSへのアクセスにOIDCを利用しているが「Error: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint」のエラー発生

# 事象
- GithubActionにてAWSとの連携にOIDCを利用していたが、ある時点で以下エラーが発生してActionsがコケるようになった

```bash:error内容
Error: OpenIDConnect provider's HTTPS certificate doesn't match configured thumbprint
```

# 対応方法
- 以下ThumbprintをAWSのIDプロダイバーに追加することで解消
`1c58a3a8518e8759bf075b76b750d4f2df264fcd`

# 原因
- 6/27のGithub側のUpdateによる影響だった。Github側の公式Blogにも記載あり
- Github側の中間証明書追加による影響とのこと
https://github.blog/changelog/2023-06-27-github-actions-update-on-oidc-integration-with-aws/
VSCode 拡張機能「PHP Intelephense」の使い方、間違ってました…

# 「PHP Intelephense」って何？

Visual Studio Code（VSCode）でPHPを扱う際に非常に便利な拡張機能です。
フォーマッターやコード補完などの機能が豊富で、私も長い間使用しております。

https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client

# 気付いたきっかけ

そんな便利機能ですが、たまに思った通りに動いてくれないことがありました。
**実行すると正しく動作するのに、プログラム上では問題が発生していると表示されるのです。**
そこで、改めて拡張機能の概要が記載されているページを見直してみることにしました。

# 間違っていた内容

「PHP Intelephense」の概要を確認してみると、Quick Start に以下の内容が記載されていました。

> 1. Disable the built-in VSCode PHP Language Features.
> * Go to Extensions.
> * Search for @builtin php
> * Disable PHP Language Features. Leave PHP Language Basics enabled for syntax highlighting.

私は拡張機能をインストールしただけで、この手順を行っていませんでした。つまり、拡張機能のセットアップから間違っていことがが発覚しました。

「PHP Intelephense」を使用するためには、**VSCodeに組み込まれている「PHP 言語機能」を無効にする必要がありました。** 手順は以下の通りです。

1. VSCodeで拡張機能の一覧を開く
2. 「@builtin php」と検索する
3. 「PHP 言語機能」を無効にする。「PHP の基本言語サポート」は有効のままでOK。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/339770/1c8a8c85-0b9f-aef3-3a4d-f488bfd8fa24.png" width="700" />

# おわりに

何にでも言えることですが、ちゃんと説明を読むことは大切だと思い知りました…
自作のリマインダーを作りたい～超初心者LINE Bot作成編～

# 超初心者LINE Botを作る
こんにちは。LINE Botを作ることができて舞い上がっているOLです。

商業施設の運営管理という仕事柄、公式LINEの更新等やったことはあるものの公式でよく見かけるLINE Botは運用したことがありませんでした。

LINE Bot作成方法を教ったので挑戦してみました！

# 困りごと
個人のタスクや施設のイベント、集客が見込まれる近隣イベントなど個人で管理していたり、Excelにまとめているもののどうも忘れがち。仕事柄スマートフォンを業務中によく触るので、Excelでスタッフと共有しているスケジュールが確認できればいいのに…。

# 作っちゃおう！
せっかくLINE Botの作成について学んだのだから作ってみよう！
何事も経験！ということで作ってみました。

# 使用ツール
+ [Make](https://www.make.com/en/login)
+ Google Sheets(スプレッドシート)
+ [LINE](https://developers.line.biz/ja/)

# 作成方法について
**Makeシナリオ全体図**

全体像はこんな感じです。
![シナリオ全体.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/32308511-f6ed-50f9-6430-51fc640d4aab.png)
LINEに日付を送ると「スプレッドシートの当該日付欄に入力されているデータ(その日のタスク)」が返事で届き、日付以外の言葉を送ると「日付を入れてね！」と返してくれるという内容になります。

**①スプレッドシートへデータ貼り付け**
![スプレッドシートコピペ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/d4d721f4-dfa3-f175-0851-ed0d2cce5a79.png)
今までタスクや予定は付箋に書いてデスクにペタペタ貼っていましたが、自分の袖にくっついて無くすという事件が相次いで起こり、Excelに移行しました…
そんな最近始めたExcelのタスク管理表からデータをコピーしてスプレッドシートへ貼り付け。


**②モジュール「Google Sheets(Search Rows)」の設定**
　※Google Sheets＝スプレッドシート
![スプレッドシート.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/033a85b6-6cf7-0af9-9657-2e340a708a51.png)
この時点でPC画面に英語での説明ばかりで若干心が折れそうになりました。でも負けないぞ…

**③ルーターの設定**
歯車マークからルーターを選択。
![ルーター.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/3d94dfd2-f043-7c2e-aa84-06b1073bbde7.png)
日程を入れたらタスクが表示されるように作りたいので
+ 日付を入れたらタスクが表示
+ それ以外の文字列には「日付を入れてね！」と表示させる
を設定をしたい！

**日付が入力された場合の返事**
![firuta-.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/b5857af6-5a54-9cc1-f3ff-a80796ad0b92.png)

**日付以外の文字列**
![日付以外.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474647/0e88f647-21f9-36be-9c69-6b1003a8a77c.png)


# できたっぽい…？

で、できた…？
わくわくしながら試しに日付を送ってみると「日付を入れてね！」と返事が…ん？？この日タスクあるんだけどな…再度送信すると「日付を入れてね！」と返事。何を間違えたんだろうか…

その後30分ほど格闘し、結果スプレッドシートに入力している日付とLINEに送っていた日付の表記方法が異なっており(2023年7月6日と2023/7/6という表記)ためその日のタスクが返ってこなかったようでした。

よくよく考えてみたら、同じ文字列を検索してその欄に入力されているデータを返すんだから日付表記が違っていたら返事が返ってくるわけありませんね。
初心者ならではの間違い！しかしこれも学び！

# 今度こそ！実際に動かしてみた！

解決したところで再度挑戦！

https://twitter.com/iztm8111/status/1676363584404860933?s=20

返事が来た！！！とても初歩的な作成内容かもしれませんが、
自分でも作れるんだという感動が勝っています。

# 最後に
**感じたこと**

せっかく自分で作れるんだからもっと自分向けにカスタマイズしていけると
いいなと思いました。

日付を入力して返事でタスクが表示されるのではなく決まった時間に
次の日のタスクがLINEでくる方が使いやすいかも…？
実際に使いながらアップデートしてきたいです！

「デジタルツール苦手」という気持ちがありましたが、実際に触れてみて
もっと作ってみたい！と感じ、一歩前へ進めたような気がします。










#
オイラー、クオータニオン変換ツール

オイラーとクオータニオン変換ツールです
入力した姿勢のビジュアライズも可能
下記URLから使用できます

https://quaternions.online/

![Screenshot from 2023-07-05 07-42-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/acfed6a6-da05-30f6-253c-c517515ca522.png)
【Flutter】Providerを利用したときStatelessWidget、StatefulWidget、ConsumerWidget、ConsumerStatefulWidgetのそれぞれの使い方


結論から書くとこんな感じです

    StatelessWidget　　　　　　　　　　　　　　　　　　　→　　　　表示 or provider変数のみ変更
    StatefulWidget          　→　　　　いらん
    ConsumerWidget　　　　　　　　　　　　　　　　　　　　　　→　　　　部品
    ConsumerStatefulWidget　  　→  変数 ＋ provider変数

なんで上記に至ったのかというところを簡単にそれぞれ解説します

## StatelessWidgetを表示またはProvider変数のみ変更する場合に使用する理由

##### そもそもStatelessWidget単体では値の変更とかできないからですね

でもProviderはそんな値とか変更できないStatelessWidgetでも変更可能なんですよね

なので、文字や数字などは基本固定のものの表示＆Provider変数のみ変更したいなみたいな感じの場合こちらを利用するのがいいのかなと

##### ぶっちゃけた話ConsumerStatefulWidgetがあればなんでも対応可能だと思うんですけど、パフォーマンスの最適化を考慮することとか考えると上記みたいな感じの場合はこちらを使用するのがいいかなって感じました

## StatefulWidgetがいらん理由

##### ConsumerWidgetとConsumerStatefulWidgetはStatefulWidgetを拡張して作られているからですね

強いていうのであれば、Provider変数を全く使わない場合はこちらを利用するくらいの感じかなと

##### 今回の内容で言えばProviderにフォーカスしてるのでいらんという回答になりました

## ConsumerWidgetを部品の作成で利用する理由

##### provider変数のみ変更ならStatelessWidget使うし、変数 ＋ provider変数ならConsumerStatefulWidget使うからこれいらなくね？

って思ってたんですけど、まぁよくよく考えてみてソースが大きすぎたり、共通化部品を作りたい場合のことを考えた時に「あーこれ使えばええんか」ってなりました


##### ただ慣れない人が作るとプロジェクトが大きくなった時に間違いなくバグると思うので、ある程度理解してからやるのが吉かなって個人には思います

## ConsumerStatefulWidgetを変数&provider変数の場合に利用する理由

##### それ以外で使用する意味がないなと

Provider変数であればStatelessWidgetで変更できるし、わざわざこちらを利用する意味があるとしたらそれくらいかなと

全てProvider変数で管理しているなんて案件であれば必要ないですが、そんなプロジェクトはほぼないかなと思うんでこういう結論に至りました

# まとめ

基本的にそんなに勉強したりとか好きじゃないんですけど、Providerは割といろんな案件で使われてるんで今回ちょっと勉強してよかったなって思いました

ただ個人的に言えば別にシングルトンパターンでも同じことはできるし、Providerに固執する必要もないかなって感じです

どなたかの参考になれば幸いです

ではまた
Linux(Debian)の最強の解凍ツールunarのインストールと使い方

# 実行環境
google cloudのcompute engineでOSはDebian GNU/Linux 11 (bullseye)

# コマンド
Linuxで以下のコマンドを発行でインストール
```
sudo apt-get -y install unar
```


以下のコマンドで解凍できる
```
unar xxxxx.zip
```
で解凍できる
Pythonで時報をしゃべらせよう

お手元PCで15分に一回、現在時刻をしゃべってもらいます。

~~~python:time_signal.py
import time
import pyttsx3

interval_minutes = 15
engine = pyttsx3.init()

def init():
    engine.setProperty("rate",100)
    engine.setProperty('volume',1.0)

    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    
def loop():
    while True:
        current_time = time.localtime()
        if current_time.tm_min % interval_minutes == 0 and current_time.tm_sec == 0:
            say_time(current_time.tm_hour, current_time.tm_min)
            time.sleep((interval_minutes - 1) * 60)
        else:
            time.sleep(1)

def say_time(hour, min):
    engine.say(f'{hour:02}:{min:02}')
    engine.runAndWait()  

if __name__ == "__main__":
    try:
        init()
        loop()
    except KeyboardInterrupt:
        print('KeyboardInterrupt')    
~~~

#### 音声について
このコードではリストから1番めの声を決め打ちで選んでいます。
手元では女性英語音声ですが、内容と順番は動作環境によって変わります。
詳しくは[このあたりを。](https://betterprogramming.pub/an-introduction-to-pyttsx3-a-text-to-speech-converter-for-python-4a7e1ce825c3)

また、音声の言語圏によってフォーマットと時刻の読み方にも違いがあります。
手元の英語音声ではhh:MM:SSにおいてhが1桁か2桁か、SSをつけるか省くかで変わります。
長くなるので例を列挙します、調整してみてください。

| 例 | 読み方 |
|:----|:----|
| 01:00:00 | One o'clock. |
| 1:00:00 | One hour. |
| 12:00 | Twelve o'clock. |
| 12:00:00 | Twelve hours. |
| 1:10:00 | One hour and ten minutes. |
| 1:10 | One, ten. |
データベース知識の整理 Part.1

# データベースとは？

- データを体系的に統合してデータの**重複**をなくし、構造化した集合体
- データベースを管理するため、DBMSという別のソフトウェアを使う

# DBMSとは ?


**DBMSのメリット**
- データ重複の最小化
> データを共有して使用するため、重複が減る

- データのセキュリティ保障
> データを統合して管理するため、セキュリティが高い

- データの一貫性の維持
> 重複したデータが減るため、一貫性を維持することができる


**DBMSのデメリット**

- 異なるデータセットとは関係がない
> (例えば、会員情報と購入リストのデータセットが異なる場合)

会員情報
| 名前 | 性別 | 電話番号 |
| :----- | :---- | :---- | 
|たけし |男性  |070-1233-4444|
|たけし |男性  |080-1333-5555|

購入リスト
| 名前 | 買い物かご | 数量 |
| :----- | :---- | :---- | 
|たけし |スイカ  |10|
|たけし |バナナ  |35|



> データを参照して活用できる新しいDBMSが必要！


# RDBMSとは？

- RDBMS (Relation Database Management System)
  
会員情報
| 名前 | 性別 | 電話番号 | ID | 
| :----- | :---- | :---- |  :---- | 
|たけし |男性  |070-1233-4444|TAKESHI|
|たけし |男性  |080-1333-5555|SQLMAN|

購入リスト
| 名前 | 買い物かご | 数量 | Product NO. |
| :----- | :---- | :---- |  :---- | 
|たけし |スイカ  |10| A0001| 
|たけし |バナナ  |35| A0002 | 

TAKESHI(ID)はスイカを購買
プロダクトナンバーA0002を購入したのはSQLMAN(ID)を持つ 'たけし'


> 互いのデータを参照しながら関係型データベースを構築することができる！


# SQLとは？

**SQL(Structured Query Language)**
- データベースを管理する言語
- 特定の目的によって使用され、ドメイン特化言語とも呼ばれることもある

DQL : SELECT
- DQLはデータベースでデータを照会するために使用される言語

DML : INSERT, UPDATE, DELETE 
- DMLはデータベースからデータを操作するために使用される言語

DDL : CREATE, ALTER, DROP RENAME, TRUNCATE
- DDLはデータベースの構造を定義、変更、削除するために使用される言語

TCL : COMMIT, ROLLBACK
- TCLはデータベース内のトランザクションを制御するために使用される言語

DCL : GRANT, REVOKE
- DCLはデータベースユーザーに権限を付与したり取り消したりするために使用される言語

**Datatype**

1. CHAR : 1Byte(英語), 3Byte(日本語）
2. VARCHAR : 可変長文字 (VARCHAR) 型
3. INT, BIGINT : 整数型
4. DOUBLE : 実数型
5. TIMESTAMP : 日付型
6. TEXT, BLOB : 文字型
エンジニア採用活動で感じた「もったいない」5選 レジュメ編

# はじめに
現在[株式会社SORICH](https://www.sorich.jp/)で採用活動に関わっており日頃から多くの職務経歴書（レジュメ）に触れる機会があります。そうした中で、

「もっとこうしたほうが魅力が伝わるのにな」
「この部分はもっと良くなりそう」

といったように、きっと素晴らしい人材なのかもしれないけれどレジュメの情報が少なかったり伝わりづらかったりして「もったいないな」と感じることがよくあります。
今回はその中から5つの「もったいない」を紹介します。

伝わりづらいレジュメは応募者にとっても機会損失だと思います。そうした損失をできるだけ少なくしたいと考え今回記事にしました。
せっかく時間をかけて作成するものなので、みなさんの魅力が希望の企業にしっかりと届くレジュメ作りの一助となれば嬉しいです。

なお、ここで紹介する内容はあくまで私個人の意見でありSORICHの選考基準とは関係ありません。またこれらを満たしたレジュメが必ず書類選考に通るわけではないことご理解ください。

# 目次
[もったいない1-経歴が最新にアップデートされていない](#もったいない1-経歴が最新にアップデートされていない)
[もったいない2-学習の履歴が書かれていない](#もったいない2-学習の履歴が書かれていない)
[もったいない3-経験言語しか書かれていない](#もったいない3-経験言語しか書かれていない)
[もったいない4-自由記述が空欄](#もったいない4-自由記述が空欄)
[もったいない5-ポートフォリオが404](#もったいない5-ポートフォリオが404)
[まとめ](#まとめ)

# 対象の読者
- 実務未経験でのWebエンジニア転職を考えている方、学習を始めている方
- 実務経験が数年あり、転職を考えている方
# もったいない1-経歴が最新にアップデートされていない
これは意外と多いです。例えば就業中のステータスにも関わらず直近1年の経歴がなく、継続して就業しているのか転職しているのかがわからないといったパターンです。

転職業界の方によると、企業から反応が来てから経歴書を更新する応募者が増えているそうです。タイパ的には良いのかもしれませんが、一期一会の場面では機会損失が発生するかもしれません。

自分のキャリアを振り返り整理する作業は思う以上に大変ですが、そうした経験を言語化する行為は自分自身にプラスになって返ってくると思うので、ぜひ最初に時間をかけてレジュメをアップデートすると良いと思います。

:::note info
レジュメのアップデートは時間がかかるもの。ぜひ時間をとって取り組んで
:::
# もったいない2-学習の履歴が書かれていない
私は元々非エンジニア職のキャリアで、キャリアチェンジを経てSORICHに入社した経緯がありますが、私自身の転職活動の経験から、エンジニアと非エンジニアでは学びに対する評価の仕方に大きな違いがあると感じました。

例えば経理職を希望して転職活動をする場合、「簿記の学習をしました」と「簿記２級を取得しました」の間にある溝はかなり深いです。また「連結決算業務を学びました」と「連結決算業務を担当していました」は多くの場面で全く別物として評価されます。

一方でエンジニア職の場合は「Djangoを学びました」と「業務でDjangoを使用しました」では評価が大きく異なることはもちろんですが、「Djangoを学びアプリケーションを作りました」の場合は評価がかなり変わってくるのではないでしょうか。

つまり、さまざまな職種の中でエンジニア職は学びを形にしやすい職であり、技術トレンドの移り変わりが激しい環境でもあるため、業務経験がなくても新しい学びはどんどんアウトプットして自身のスキルの一部としてレジュメ上で積極的にアピールしても損ではないと思います。

:::note info
学習した言語はとにかくレジュメに書く
:::
# もったいない3-経験言語しか書かれていない
経験業務について、使用したツールや言語の記載で終わっていることもたびたび見かけます。

実際の企業では開発案件ごとに使用するフレームワークやライブラリが決まっていることが多いため、言語だけでなく経験したフレームワークやライブラリも併せてレジュメに記載することで、企業の目により留まりやすくなると思います。

ニッチなライブラリ使用の経験が思わぬ出会いにつながるかもしれません。

:::note info
業務で使用したフレームワークやライブラリもレジュメに盛り込む
:::
# もったいない4-自由記述が空欄 
大抵の職務経歴書テンプレートや転職サイトのレジュメフォームには自由記述欄がありますが、ここが空白のことがとても多いです。特定の企業に向けて書くなど用途はさまざまだと思いますが、せっかくの空間を何も書かずにおくのはとてももったいないと感じます。

例えば、自身のキャリアやスキルの要約を書いたり、今後のキャリアの展望を書いたり、もし書くことが思いつかなければ次の職場にどういった気持ちで臨むのかといった気持ちを書くのも良いかもしれません。

与えられた機会を無駄にしないことは意外と重要だと思います。

:::note info
書くことがなくても気持ちだけでも書く
:::
# もったいない5-ポートフォリオが404
実際に開発したプロダクトやアプリケーションを確認できることはその方の技術力を推し量るのに有効な方法だと思います。ですがそうしたせっかくの表現の機会がリンク切れで損なわれている場面にたびたび出会います。

手元から離れる前に今一度リンクや資料に不備がないかを確認すると良いと思います。

:::note info
URLや添付資料に問題がないか再度確認する
:::
# まとめ
情報が最新かどうかや、資料やリンクに不備がないかという基本的な部分はぜひおろそかにしないでほしいです。
また、せっかく自分を伝えるチャンスを空白のままにしてしまうのはとてももったいないと思います。

当たり前ですが、書かれていないことは伝わりません。
書きすぎるくらいでちょうどいいかもしれません。


これまでの経験を整理して言語化する行為は、これまで見落としていた自身の強みを再発見したり、新たに学ぶ分野を見つけるきっかけにもなると思います。

この機会にご自身のレジュメを見返してみてはいかがでしょうか。
論理演算

## 論理演算
論理演算は，「1と0」または「真と偽」のように，2値のうちいずれか一方の値を持つデータ間で行われる演算です。演算結果も「1と0」または「真と偽」です。

論理和（或门）　入力が少なくとも一方が1ならば，出力が1
論理積（与门）　入力の両方が1ならば，出力が1
否定（非门）  　入力が1ならば，出力が0。入力が0ならば，出力が1 

排他的論理和は，入力（A，B）が異なれば，出力（A○＋B）は1となる演算です。「○＋」は排他的論理和を表します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293109/ae239d92-4770-84dd-41c6-6245123a6ceb.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3293109/e6c29e98-4794-e776-058b-0cb1db904c83.png)
排他的論理和（异或门（XOR gate））： 入力が異なれば，出力が1
否定論理和  （非或门（NOR gate））：　論理和の否定
否定論理積　（非与门（NAND gate））　論理積の否定
vagrantで立てたVM(CentOS7)のeth0とeth1の違い

# eth0
- ホストOSとゲストOS間の通信の設定。
- vagrantがVMを立てる際によしなに設定をしてくれるため、**基本的に弄ってはいけない！！**
- NATの設定はここでやる。
(メモ：ＤＮＳサーバの設定はeth0に設定されていた)

図の赤い矢印で表したのが通信のイメージ

![2023-07-05_02h17_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2330584/39bbde34-dd12-b64f-de42-c7a06b49f6b8.png)


# eth1
- VMをネットワーク上で、ホストOSとは別な物理マシンであるかのように見せる際に使う設定。
- VPN経由で他のPCからVMへアクセスしたいときはeth1の方にデフォルトゲートウェイの設定をしてあげる。
- vagrantfieで
```
config.vm.network "private_network", ip: "XXX.XXX.XXX.XXX"
```
を設定した際にeth1の設定で外部と通信を行う。
- publicにする設定。
- VMが個体として外と繋がるための設定。
図の赤い矢印で表したのが通信のイメージ
![2023-07-05_02h47_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2330584/5e1d295d-7bfb-00ff-1307-b04934025f87.png)

# 注意
- routeコマンドで設定するのは非推奨になっている。
参考
> 〇古いコマンド ifconfig、netstat、route
　→推奨されるコマンド ip、ss
　　ifconfig、netstat、routeはアップデートされておらずメンテナンスが欠如しており、セキュリティ上の問題を抱えている可能性がある。現在は多くのLinuxディストリビューションがipやssコマンドを含む「iproute2 suite」を採用している

https://thinkit.co.jp/news/bn/19606
RDSで何が作成されるのか


## はじめに　　

RDSを初めて使用した際、「データベースを作成」で作成したものは一体何なのかが、よくわかりませんでした。　

DBサーバーを作ろうとしたとき、次の2通りの方法があるかと思います。（他にあるのでしょうか…）

- EC2にMySQLなどのDBソフトウェアをインストールする
- RDSを使用する

EC2を使用する方法は、Webサーバーをすでに作ったことがあれば、同様の考え方なので理解しやすいです。　　
一方でRDSとは何かを調べると、AWSのユーザーガイド[^1]には次のように説明されています。
> AWS クラウド でリレーショナルデータベースを簡単にセットアップし、運用し、スケーリングすることのできるウェブサービスです。

その他に目にした解説も同様の内容で、具体的に何が作成されるのかが見えてきませんでした。
EC2との比較をすることが、最初の理解に役立ったので紹介したいと思います。


## オンプレミス、EC2、RDSを比較する

1. オンプレミスとEC2を比較
2. EC2とRDSを比較

の順にみてみると、EC2との対比でRDSを捉えやすくなるかと思います。

#### オンプレミスとEC2の比較
RDSのユーザーガイド[^1]には次のように、オンプレミスとEC2を比較した図が掲載されています。
オンプレミスではサーバーの全てを管理しなくてはいけない一方、そのうちハードウェア部分の管理をAWSに任せたものがEC2であるとわかります。
![aws-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3340708/de88eede-1c78-2ea5-433e-05d45a6894dd.png)

#### EC2とRDSの比較
次の図もRDSのユーザーガイド[^1]のものです。　　
EC2ではDBサーバーのソフトウェア部分の全てを管理しなくてはいけない一方、RDSではそのほとんどをAWSに任せることができます。
![aws-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3340708/4c539343-87b1-d0de-80df-8e4330b809d9.png)
任せるといっても、どのソフトウェアを使い、いつバックアップし、どんなセキュリティを適用するか…といったことは前もってユーザーが決めることができます。それが「データベースを作成」で設定することです。

#### RDSとは

つまり、DBソフトウェアをインストールしたサーバーを作るだけでなく、その後の運用まで設定に基づいて行ってくれるものがRDSです。　　

EC2はハードウェアとその管理、　　
RDSはDBサーバーとその管理、です。　　

## おわりに

具体的に何が作られるのかというのが、
EC2：物理的なサーバー
Webサーバー：EC2＋Apache
DBサーバー：EC2＋MySQL 
のように考えていたので、RDSの説明に管理の部分が大きく取り上げられていたために、具体的に何が作られるのかわからない、となっていました。
しかしそもそもEC2も管理の部分を含んでいました。
考えてみれば他のAWSのサービスも、ただ何か具体的なものが用意されているだけではなく、それを運用することでこういうことができる、その管理はAWSのほうでするよ、というものばかりでした。

そうした管理部分を任せられることこそがAWSを活用するメリットなのだろうと思いました。



[^1]: https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Welcome.html
【VScode】テーマ変更 / 模様替えしませんか？

## テーマの模様替えをしよう
vscodeのテーマ何使っていますか？
初学者の方はもちろん、ベテランの方も心機一転模様替えをしてはいかがでしょうか？
以下のサイトからは、プレビューを見ながら自分にあったテーマを探すことが出来ますよ。

https://vscodethemes.com/

## ちなみに
私のおすすめはこちらです。
[Beautiful UI]"βui - Espresso Soda"

https://marketplace.visualstudio.com/items?itemName=colch.beautiful-ui
最近受けた地雷求人まとめ

#株式会社IPG
atcoder経由のスカウトから。茶色の求人（私は緑）。特にレジュメ提出もなく、trucksの意味不明な性格テストの結果落選ｗｗ
https://jobs.atcoder.jp/offers/list?f.CompanyScreenName=ipg


#株式会社マインディア
 クラウドテック経由。

>まだまだ社内でドキュメントの整備等ができておらずミッションベース、

タスクベースで業務を切り分けできていない状況と改めて気づました。

時間の無駄、意味不明。


#FPT Japan
ベトナムの企業、LinkedIn経由。

特に技術に関する話やテストはなく、リクルーターのThuy Van Bui氏に理由を聞いてもスルー。

https://fptsoftware.jp/about-us/fpt-japan

# Midworks
FreeranceHub経由
https://freelance-hub.jp/project/detail/105961/

# チームラボ
twitterのコーディングテストの広告から応募、30分で7問正解は高得点だと思うが、書類選考無しという宣伝文句にもかかわらず、職歴書を要求される。面接すらたどり着かず。普通に広告詐欺。

# estie
atcoder経由、当然ランクは足りている。
三井など情弱不動産業界のゴミpdfのデータ化を想定したpython,pandasでの加工の課題をgit上でやるもので、全問正解にもかかわらず以降は通らず。
　
　
特に下は実務に近いコーディング課題が通っているので謎。
ジャパンITはまだまだ文系ゴミに支配されてる？？？


地雷求人情報を蓄積するwebサービスがあると良いのですが。
【Go】Go+Gin+GORM+PosrgraSQLでAPIサーバつくる

こちらに移動しました。

https://note.alhinc.jp/n/n0bf1f7175bf1

# 移動先について
本記事は、現在(2023/12/23)私の所属する[ALH株式会社](https://www.alhinc.jp/)が公開している、[こちら](https://note.alhinc.jp/all)のnote記事に移行することになりました。

ストックされている方は大変お手数ですが、上記リンクから参照ください。
【VSCode】文字エンコードを自動で判別するようにする方法


## 文字エンコードを自動判別する方法

次の手順で設定することでファイルを開いた際に文字エンコードを自動判別できるようになります。

### ユーザー設定を開く

`command` + `shift` + `P`を入力してコマンドパレットを開きます。

`Open User Settings`と入力しユーザー設定を開きます。

![スクリーンショット 2023-05-13 23.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/160d17e2-4ebf-3f5a-f6ee-2a0a3f7d9857.png)

## 設定する

ユーザー設定の検索窓に`Files:Auto Guess Encoding`と入力して検索します。

ヒットした設定にチェックをつけます。

![スクリーンショット 2023-05-13 23.56.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/1aa655f5-5489-e552-4816-72a8e177fa30.png)

以上でファイルをVSCodeでファイルを開いた際に文字エンコードを自動で判別してくれるようになります。
drow.io✖️Notion 時短でポートフォリオの設計を作ろう！

エンジニア未経験の方に必要なもの、といえば？

そう、ポートフォリオと設計図です！！
（他にも色々ありますが...！）

今回のテーマは、「時短！　ポートフォリオの作成」です。
draw.ioとNotionを組み合わせることで、設計がかなり時短できました！


##  draw.ioとは
まずはdraw.ioについてご説明します。

draw.ioは、ブラウザ上で利用できる図面作成ツールです。インストール不要で利用できます。
さまざまな図形やアイコンが豊富に提供されており、フローチャートや組織図、ネットワーク構成図、ワイヤーフレーム、ER図など、多様な作図が可能です。
また、作成した図はGoogleドライブやGithubと連携させて保存することもできます。

## システム構成図 ✖︎ draw.io
まずはdraw.ioでシステム構成図を書いてみましょう！
以下の手順で進めます。

1. draw.ioを開き、新しい図を作成します。

2. テンプレートから、イメージに近い構成図を選んでみましょう。
*主要なアイコンは検索画面から探してみましょう。
*０から作図することもできます。図形やアイコンを選択し、画面上に配置します。

3. システム間の関係性を示す、「→」を引っ張ってみましょう。アイコンをクリックすると、矢印が表示されます。

4. 図が完成したら、保存オプションを選択し、必要に応じてGoogleドライブやGithubとの連携を設定します。

作例（作成中のもので、お恥ずかしいです😀）
![スクリーンショット 2023-07-04 18.33.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919895/f801f015-f27d-3b79-b9cf-9c2e852cb1b9.png)
作図自体はとても簡単です。
「あ、バックエンドはRailsよりLaravelがいいな〜」と修正するときも、LaravelアイコンをRailsアイコンにドラッグ＆ドロップすればOK!


## ワイヤーフレーム✖️draw.io
同様に、draw.ioを使ってワイヤーフレームを作成できます。ワイヤーフレームは、Webサイトやアプリケーションのデザインやレイアウトを表現するための図です。
以下の手順で進めましょう。

1. draw.ioを開き、テンプレートから新しい図を作成します。

2. 必要な要素やコンポーネントを選択し、画面上に配置します。ボタン、テキストボックス、画像など、アプリケーションの要素を表現するためのツールがかなり豊富に揃っています。

3. 要素の配置やサイズを調整し、画面の構成を整えます。アプリケーションのフローを表現するために、矢印や線を追加することもできます。

4. ワイヤーフレームが完成したら、保存オプションを選択し、必要な場所に保存します。また、GoogleドライブやGithubとの連携も設定できます。

作例:
![スクリーンショット 2023-07-04 23.46.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919895/99fa272c-2be5-a41d-13c0-12cc1862213f.png)

「これはワイヤーフレームだよ〜」というのが伝わるように、今回は手描き風に作成してみました。ソリッドな線も、もちろん作成できます。

他の作図（フローチャートとか色々）も、同様にテンプレートから作成するのが時短です。

## ポートフォリオ　Notion✖️draw.io
これらの図は、エンジニアのポートフォリオにおいて重要な要素となります。

さらに、Notionとの連携を活用することで、設計図を効果的に管理・共有することができます。

以下の手順で設計をNotionからリンクさせましょう。

1. Notionで新しいページを作成します。

2. ページ内に、draw.ioで作成した図の埋め込みリンクを追加します。draw.ioで作成した図の共有リンクを取得し、Notionページ内に埋め込むことで、図を直接表示できます。

3. 必要に応じて、図に関連する詳細情報や説明をNotionページに追加します。図の背景や目的、制約条件などを記載することで、設計の理解を深めることができます。

4. Notionページをポートフォリオに組み込んで公開しましょう。自身のスキルや設計能力をアピールするために、他の人が閲覧しやすい形式で公開することが重要です。

作例
[希少植物のECサイト「突然変異の植物店 pinna（ぴな）」](https://keen-coyote-ed8.notion.site/EC-pinna-e7e4bb1793864f198afedeaa69d9e9db?pvs=4)
作成中のもので、これもお恥ずかしいです😀

最後までご覧いただき、ありがとうございました！！
お役に立てば幸いです。ぜひ試してみてくださいませ。

「もっとこうしたら便利だよー！」などご意見がありましたらぜひお聞かせください😊
探索理論　多田和夫先生　日科技連

```r
#連続的な探索空間における努力配分(1次元)
#p.78

mu=2
sig=5
pthi=5

#探索領域Ｅ
a=2
b=5

g=function(x){
return(exp(-(x-mu)^2/(2*sig^2))/sqrt(2*pi*sig^2))  
}

logg=function(x){
return(log(exp(-(x-mu)^2/(2*sig^2))/sqrt(2*pi*sig^2)))  
}

lam=exp(-(pthi-integrate(logg,a,b)$value)/(b-a))

#発見確率
integrate(g,a,b)$value-lam*(b-a)

```


```r
#連続的な探索空間における努力配分(多次元)
#p.83

R=5
sig=2
R2=R^2

#g(x,y)=((x-mu1)^2+(y-mu2)^2)/(2*sig^2)
mu1=0.5
mu2=2

lam=exp(-sqrt(pthi/pi)/sig)/(2*pi*sig^2)
pthi=pi*R2^2/(4*sig^2) #探索努力の限界

#探索努力の確率
p=function(x,y){
return(1-exp(-sqrt(pthi/pi)/sig+((x-mu1)^2+(y-mu2)^2)/(2*sig^2)))
}

#発見確率関数
1-(1+sqrt(pthi/pi)/sig)*exp(-sqrt(pthi/pi)/sig)

```
Laravel　キャッシュ対応

## Laravelキャッシュ対応
Laravelで変な挙動をしだしたときに以下のコマンドでお茶を
濁している。大体解決するのでメモ

```
# phpコンテナ　laravelのキャッシュを削除
php artisan key:generate
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache

# laravelキャッシュ削除に伴い初期化された権限を再設定
chmod 777 bootstrap/cache
chmod 777 storage/app/public
chmod 777 storage/framework/cache
chmod 777 storage/framework/sessions
chmod 777 storage/framework/views
chmod 777 storage/logs
chmod 777 ./public
```
ESP32-S3-DevKitC-1を使ってみた

今回製品開発を行うにあたりESP32-S3を使用することになったので、
ESP32-S3-DevKitC-1を使用して、使い勝手を調査してみました！

## ハードウェア
型式：ESP32-S3-DevKitC-1
メーカー：Espressif Systems
購入先：秋月電子通商
価格：￥1,840
URL：https://akizukidenshi.com/catalog/g/gM-17073/

## 事前設定
1、ボードマネージャーにESP32のURLを設定します。
　　ファイル＞基本設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/f47cdeb9-817c-2d45-693c-1c63df8ec13e.png)
2、追加のボードマネージャのURLに「https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json」を追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/6443d75e-855e-6858-a6ea-d7cff7b53d44.png)
3、ボードマネージャーの検索に「ESP」と入力して、「esp32」をインストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/4f0e4a6b-6151-2db4-da07-6255588b1d48.png)

## ソースコード作成
それではLチカを作ってみましょう！
```c
#define LED LED_BUILTIN

void setup() {
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);

  Serial.begin(19200);
  Serial.println("Start Program");
}

void loop() {
  Serial.println("LED OFF");
  digitalWrite(LED, LOW);
  delay(1000);

  Serial.println("LED ON");
  digitalWrite(LED, HIGH);
  delay(1000);
}
```

## 書き込み設定
以下の書き込み設定にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/c266d1ae-2c1b-1b6c-2be1-32768b264329.png)

配線は、UARTポートに接続します。
（以前USBに接続していた。正常にインストールできるのでこれで良いと思っていたが、
シリアル通信ができないことが分かった。）

書き込みを行う場合は「BOOT」ボタンを押しながら「RESET」ボタンを押します。
書き込みモードに移行します。

書き込みを実行し、書込み後に再度「RESET」ボタンを押すとプログラムが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/12d35cc4-8925-0556-544e-ecd3d5ec35f8.png)


ESP32の開発も行っております。
依頼をしたい方はお気軽にご相談下さい。
UiPath_【ゆるおさらい】ThrowとRethrowはどう違う？

## はじめに
①本記事は、2023年7月開催の「UiPathブログ 発信チャレンジサマー」の4日目のブログです。
ブログの詳細、参加方法については、以下のブログを参照ください。
https://note.com/shumpei_w/n/nd082bdf28853
②このブログ情報は、2023/7時点の情報です。
③UiPathはCommunity Edition、Versionは2023.6.1を使用しています。

## この資料、覚えていますか？
突然ですが、この資料を覚えている方はいらっしゃいますか？
https://speakerdeck.com/saoritakita/throwtorethrowhadouwei-u-5fcb298d-5d2d-4c40-95fc-dd623eea73f5
ヒントは2020/3/5という日です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/18dd90e7-b181-bdab-25d5-65c52077db85.png)
実はこのイベント、3年前に開催された<b>「【第3回】UiPath Friends 東京 ～ライトニングディスカッション＆トーク2020 夜桜とともに～」</b>で登壇したときのものです。皆様はご存じだったでしょうか。
（知らんわ！って方も、そんなこと言わず覚えてくださいね( T_T)＼(^-^ )ﾊｲ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f14610b9-ca72-d34c-28dc-5d8216fb09c5.png)

https://uipath-friends.doorkeeper.jp/events/102878
今回は、この時の資料を基にThrowとRethrowの2種類のアクティビティをゆるりとおさらいしましょう。

## TryCatchアクティビティを使うときは...
多くのUiPathエンジニアが必ずと言っていいほど通る道、それがTryCatchアクティビティ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/d72da4a4-4b04-5d9a-9380-e4ce48a3b390.png)
そしてエラーになったら誘導、きちんと処理終了を見届けるために欠かせない2つのアクティビティを見ていきましょう。

### Throwアクティビティ
ThrowアクティビティはTry側へ設置することで、エラーになった場合はCatch側へ誘導させる機能を持つアクティビティです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ffd7c4dc-6d64-b2ca-4df8-8f6d5315cef5.png)
つまり、こういう感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/ed3a495e-31f2-f437-6ac3-84c3b6165e6c.png)
エラーを持っておけないので、行くべきところ（異常終了として処理を終わらせるようにするとか、やり直しさせるフローへ進ませるとか）へ投げているイメージですね。

### Rethrowアクティビティ
RethrowアクティビティはCatch側に設置することで、より上層部にあるTryCatchのCatch側へ誘導させる機能を持ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/e6dea575-42e2-32de-9ef5-12fdb45d500e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/e415a21c-e3ea-62a2-5a29-9054a1e161df.png)
2種類を使ったイメージは、こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/1bd80d67-7e68-f6fe-7b07-e8bbffa29e76.png)
①Main.xamlからSub.xamlへ呼び出しがあったので、処理はSub.xamlへ移ります。
②Sub.xamlのTry内でエラーが発生しました。このときのTryにあるThrowは、Sub.xaml内のCatchへ進みます。
③その場所のCatchにはRethrowがありました。
この場合は、Main.xaml側のCatchへ移りエラーの処理を行って終了する感じです。

## まとめ
つまり、ThrowとRethrowは似たようで少し異なる動きをしているということですかね（ホントにわかってる？(笑)）
使いどころを押さえれば難しい処理にも実装していけるので恐れず使ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/c7355c8a-36f6-07fb-fd63-5586cbee7698.png)
最後までお読みいただきありがとうございました！
皆様もLT登壇、挑戦してみてくださいね！
[AWS Q&A 365][Fargate]AWSのよくある問題の毎日5選 #90

# 1. AWS Fargateスケジューリングにおけるスタンドアロンタスクとは何ですか？
回答：スタンドアロンタスクは一度だけ実行されてから停止するタスクです。バッチ処理や一度だけのデータ移行など、継続的に実行する必要がないタスクを実行するのに便利です。

# 2. Amazon ECSコンソールを使用してスタンドアロンタスクをどのように実行できますか？
回答：Amazon ECSコンソールを使用してスタンドアロンタスクを実行するには、まず「タスク」タブに移動し、「新規タスクの実行」をクリックします。次に、実行したいタスク定義を選択し、必要なパラメータを設定し、「タスクの実行」をクリックします。

# 3. AWS Fargateスケジューリングにおけるスケジュールタスクとは何ですか？
回答：スケジュールタスクは、定期的に自動的に実行されるタスクです。バックアップやデータ同期など、特定の間隔で実行する必要があるタスクを実行するのに便利です。

# 4. AWS Fargateスケジューリングでスケジュールタスクを作成するにはどうすればいいですか？
回答：AWS Fargateスケジューリングでスケジュールタスクを作成するには、Amazon ECSコンソールまたはAWS CLIを使用できます。まず、実行したいタスクのためのタスク定義を作成します。次に、タスクが実行されるべきタイミングと使用するタスク定義を指定したスケジュールタスクルールを作成します。最後に、スケジュールタスクのための必要なパラメータを設定し、タスクを作成します。

# 5. AWS Fargateスケジューリングにおけるスタンドアロンタスクとスケジュールタスクの違いは何ですか？
回答：スタンドアロンタスクは一度だけ実行されてから停止するタスクであり、スケジュールタスクは定期的に自動的に実行されるタスクです。スタンドアロンタスクは継続的に実行する必要がないタスクを実行するのに便利で、スケジュールタスクは特定の間隔で実行する必要があるタスクを実行するのに便利です。
[AWS Q&A 365][Fargate]Daily Five Common Questions #90

# 1. What is a standalone task in AWS Fargate scheduling? 
Answer: A standalone task is a one-time task that runs and then stops. It is useful for running tasks that don't need to be run continuously, such as batch processing or one-time data migrations. 

# 2. How can I run a standalone task using the Amazon ECS console? 
Answer: To run a standalone task using the Amazon ECS console, first navigate to the "Tasks" tab and click "Run new task". Then, select the task definition you want to run, configure any necessary parameters, and click "Run Task". 

# 3. What is a scheduled task in AWS Fargate scheduling? 
Answer: A scheduled task is a task that is automatically run on a regular schedule. It is useful for running tasks that need to be run at specific intervals, such as backups or data syncing. 

# 4. How can I create a scheduled task in AWS Fargate scheduling? 
Answer: To create a scheduled task in AWS Fargate scheduling, you can use the Amazon ECS console or the AWS CLI. First, create a task definition for the task you want to run. Then, create a scheduled task rule that specifies when the task should be run and the task definition to use. Finally, configure any necessary parameters for the scheduled task and create it. 

# 5. What is the difference between a standalone task and a scheduled task in AWS Fargate scheduling? 
Answer: A standalone task is a one-time task that runs and then stops, while a scheduled task is a task that is automatically run on a regular schedule. Standalone tasks are useful for running tasks that don't need to be run continuously, while scheduled tasks are useful for running tasks that need to be run at specific intervals.
google formで解答があると回答者にメールを自動で送信するプログラムについての解説

# 初めに
このコードを作成しようとおもった理由はサークルなどでのイベントで参加募集をする際,メールアドレスを指定しそこに送ってきてくれた人に都度都度メールを送り,ラインのグループのURLを送信し,ラインのグループに入ってもらうことでイベントの詳細などを共有していたがめちゃくちゃめんどくさい！！！！
なので自動でメールを返信して,LINEのグループのURLを共有する機能を追加しようと思いたちました！
# google apps script側の設定について
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3155905/4f20d6af-8ef4-cc73-f000-008fe229b5f9.png)
google apps scriptが開いたら左にあるトリガーをクリックしてください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3155905/8f8556f8-2f0c-2925-8dda-f1c5540cdaa4.png)
トリガーを追加をする画面が表示されるのでここを押す！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3155905/edc73500-72aa-c5bb-1e60-ba415a6dfee6.png)
赤く囲われたところを画像のようにフォーム送信に変更する。
ここの設定を変更することでフォームを開いた時にスクリプトを実行するのか,フォームを送信した時にスクリプトを実行するのかを設定することができます。

# 組込み関数についての説明
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3155905/dc5d54e0-4c05-6c32-5d26-8e3ab29a76f8.png)
# 行ごとのソースコードの解説

# 全体のコード
以下は、与えられたコードの各行の解説です。
```javascript
function autoReply(e) {
```
この行は、`autoReply`という関数を宣言しています。この関数は引数`e`を受け取ります。

```javascript
  // ステップ1: フォームのデータを取得する
  let itemResponses = e.response.getItemResponses();
  let recipient = e.response.getRespondentEmail();
```
この部分では、Google フォームのイベントオブジェクトからフォームの回答データと回答者のメールアドレスを取得しています。`e.response`はフォームのイベントオブジェクトを表し、`getItemResponses()`メソッドはフォームの回答データを取得します。また、`getRespondentEmail()`メソッドは回答者のメールアドレスを取得します。

```javascript
  // ステップ2: 必要なデータを抽出する
  let subject = "【ボランティア協議会】〇〇にご参加ありがとうございます";
  let bodyTemplate = "この度は〇〇イベントにご応募ありがとうございます。\n\n" +
    "ご応募内容にお間違いがないかご確認頂けますようお願いいたします。\n\n" +
    "============\n" +
    "{{responses}}\n" +
    "============\n\n" +
    "〇〇へのご参加心よりお待ちしております。\n\n" +
    "------------\n" +
    "ボランティア協議会\n" +
    "Email: info@〇〇event.com\n" +
    "TEL: 0120-〇〇〇-〇〇〇\n" +
    "HP: http://meijo-volunteer.com/";
```
この部分では、メールの件名と本文のテンプレートを定義しています。`subject`はメールの件名を表し、`bodyTemplate`はメールの本文のテンプレートです。`{{responses}}`という部分は後ほど回答内容が挿入される箇所です。

```javascript
  // ステップ3: 最初の回答のみに対してメールを送信する
  let answer = itemResponses[0].getResponse();
  if (answer === "参加") {
    let questionTitle = itemResponses[0].getItem().getTitle();

    // メール本文の回答部分を作成
    let responseText = questionTitle + ": ";
    if (answer) {
      responseText += answer;
    } else {
      responseText += "未回答";
    }

    // 参加の回答の場合、詳細URLを追加
   有いたします。

    responseText += "\n\nイベントの詳細については、以下のURLから入ることのできるラインで共有いたします！\n";
    responseText += "https://line.me/ti/g/pDExB0dQKo";
```
この部分では、回答内容に基づいてメール本文の回答部分を作成しています。まず、回答内容の部分を作成し、`responseText`に格納しています。その後、参加の回答の場合はイベントの詳細URLを追加しています。

```javascript
    // 個別のメール本文を作成
    let body = bodyTemplate.replace("{{responses}}", responseText);

    // メールを送信
    GmailApp.sendEmail(recipient, subject, body);
  }
}
```
この部分では、個別のメール本文を作成し、`bodyTemplate`の中の`{{responses}}`を実際の回答内容に置き換えます。それから、`GmailApp.sendEmail()`メソッドを使用してメールを送信します。メールの宛先は`recipient`、件名は`subject`、本文は`body`となります。

、Google フォームのイベントトリガーとして設定することで、フォームの回答があった際に自動的にメールを送信する機能を実現することができます！！！！！！！
# 参考にしたサイト
下の記事ではgoogle formの値をどのように取得しているのか理解する事ができる！！！

https://walking-elephant.blogspot.com/2021/01/gas.namedvalues.html
[Python] 都道府県における回線品質のマッピング

# 1. はじめに
山間部に行くとキャリアによってスマホが繋がりにくくなったり、都市部でも回線によってはオンラインゲームに支障が出るほどラグがあったり...といった話をよく聞きます。回線品質の地域分布が気になったので、実際に調べてみました。

# 2. 回線速度とPingを集める
https://minsoku.net/

[こちらのサイト](https://minsoku.net/)からデータを集めました。
スクレイピングはBeautifulSoupを用いました。取得するデータを絞る、time.sleepに余裕を持たせるなどして**サーバに負荷をかけないよう**にお願いします。

集めたデータを整形し、このような表を得ました。時刻、戸建or集合住宅、プロバイダ、有線or無線などの情報もありますが、スペースの関係で割愛します。

| Date | Pref | City |Jitter|Ping|Download|Upload| 
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|2023年07月01日|神奈川県|茅ヶ崎市|1.33|8.0|1372.42|867.58| 
|2023年07月01日|宮城県|仙台市太白区|11.66|15.7|74.61|96.74| 
|2023年07月01日|京都府|京都市伏見区|2.13|16.3|238.18|666.09| 
|...|   |   |   |   |   |   |

ただし、JitterとPingの単位はms、DownloadとUploadはMbpsです。
このデータを可視化していきます。

# 3. 可視化
## 3.1. ライブラリ
地図データを扱う上で、もっともシンプルであろう[Geopandas](https://geopandas.org/en/stable/)を採用しました。その他にも、インタラクティブな地図を作れる[folium](https://python-visualization.github.io/folium/)や、海外線、陸地、政治的境界線などの様々な特徴を表示可能な[Cartopy](https://scitools.org.uk/cartopy/docs/latest/)などのライブラリがあります。

## 3.2 地図情報
地図情報は国土交通省の下記サイトから拝借しました。

https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-v3_1.html

必要に応じて全国か都道府県のデータをダウンロードしてください。今回は埼玉県と東京都のデータを使いたいので、
N03-20230101_11_GML.zip (埼玉県)
N03-20230101_13_GML.zip (東京都)
をダウンロードします。
圧縮ファイルを解凍すると、*.geojsonという地理空間データがあるのでこれを使います。

埼玉の場合を例にとり、中身を確認してみます。pathは自身の環境に合わせて適当に設定してください。

```Python
import geopandas as gpd
import matplotlib.pyplot as plt

#読み込み
geo_saitama = gpd.read_file(f"{path}/N03-23_11_230101.geojson", encoding="SHIFT-JIS")
#中身確認
geo_saitama.head() # (81,6)
```

|N03_001|N03_002|N03_003|N03_004|N03_007|geometry|
|:-:|:-:|:-:|:-:|:-:|:-:|
|埼玉県|NaN|さいたま市|さいたま市西区|11101|POLYGON ((139.54776 35.93420, 139.54720 35.934...|
|埼玉県|NaN|さいたま市|さいたま市西区|11101|POLYGON ((139.54776 35.93420, 139.54720 35.934...|
|埼玉県|NaN|さいたま市|さいたま市北区|11102|POLYGON ((139.61753 35.96486, 139.61798 35.964...|
|...|   |   |   |   |   |

さいたま市西区が2つあったり、本来72個のデータだと思われるのに81個あるのはよくわかりませんが...

## 3.3. 埼玉県における光回線のマッピング
2.で集めたデータから、**各市町村における中央値**を出してみました。相関係数行列によると、ダウンロードとアップロードは正の相関がありますが、回線の安定性とはあまりない/弱い相関程度のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676917/4d780dbd-db70-3953-5ed1-33a53ab4d5e8.png)

これと3.2.の地理空間データを統合し、マッピングしてみます。

![result_saitama.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676917/a16257d9-b217-113f-bb87-8b67d8d0b361.png)

市町村によって値が大きく異なるため、対数表記にしました。今回は相対的な差を可視化したいのでこれでよしとします。

埼玉県事情がよくわかりませんが、回線が速い/遅いと安定/不安定の組み合わせから、回線インフラに対して人口が多い/少ないのような情報も見えるかもしれません。
今回は1万件程度のデータを集めましたが、もっとデータを集めれば、プロバイダごとの違いも可視化できますね。

## 3.4. 東京都におけるモバイル回線のマッピング
同様に東京都のデータも確認してみます。NTTドコモ、au、Softbank、楽天のデータを合計で約30000件集めました。ダウンロード速度の中央値をそれぞれマッピングしてみます。スケールは統一してあります。
![result_tokyo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676917/6f0df3c4-6cd6-9c76-674a-0f3a059460dc.png)


# 4. まとめ
回線の情報をスクレイピングで集めて、geopandasで可視化しました。
+ 埼玉県の光回線は、有線/無線接続を問わずです
+ 回線の品質は、測定の時間や戸建や集合住宅などにも大きく依存するはずです

上記の点に留意し、参考程度に見てください。
【2023年最新版】Fire TV・Fire HDタブレット向けのアプリの作り方

本日(2023年7月4日)Fire TV・Fire HDタブレット向けに自作アプリ「ogtm.jp」を公開しました。
![554CAA04-209D-4F06-8FB3-B0FD25BF0143.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/6813f6a3-7f29-a9fb-fa62-ca0b0eac305f.jpeg)

▼詳細はこちらから

https://www.amazon.co.jp/gp/product/B0CB1PM318

気軽にレビューしてください。飛んで喜びます。


- アプリ名：ogtm.jp
- 開発者：ogatomo(@ogatomo21 小川 智也)
- 価格：無料
- 詳細：時計を表示するアプリ

# 作るために最低限必要なもの
- Amazon Developerのアカウント
- ロゴ
- スクリーンショット **(最低3枚)**
- 気合いと時間（１時間かかった）

## apk or web
Fire TVなどのアプリを作る際は制作方法がふた通りあります。
### 1. Android Studioなどを用いて.apk形式で作る
JavaやKotlinの知識、ビルドに耐えれる高性能なパソコンが必要（セレロンはイランヨン。最低でもCore i5はイルヨン）
### 2. HTMLやCSSを用いてWebアプリとして作る
ワイの得意なHTMLのコードをサーバーにうpしてそのURLを書く方法と.zipにしてアップロードする2通りがある。

今回は後者のHTMLを用いて作成しました。作成したと言っても既存のHPの時計をちょっと改良するだけですが。

## 一番大変な作業
それは、ロゴ周りです。Fire HDのみならまだしもFire TVも含めるとさまざまなサイズのロゴが必要になってきます。(Fire HDは500x500だがFire TVは1280x720が必要)
またそのほかにもスクリーンショットがHD、TVそれぞれ各三枚以上いるのでマジで大変です。（ちなみに普通のスクショと残りの二枚はCanvaで作ったモックアップ画像を使えば審査通りました。）


![D35B6E93-0B82-42B7-923E-17D3124E9222.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/93aeaf6b-99f0-2c88-b242-8c359fcca38a.jpeg)



## 審査時間
前日の23:00ごろに申請して次の日の21:30ごろにアプリストアで公開されました。

## おわりに
こんなことする人はいないだろうと思いますがどこかの誰かの役に立てば幸いです。
シンプルな svg 地図ピンのメモ

```html
<svg width="30" height="40" xmlns="http://www.w3.org/2000/svg">
  <circle style="fill: #f00;" cx="15" cy="15" r="15"/>
  <circle style="fill: #fff;" cx="15" cy="15" r="7"/>
  <path d="M15 40 3 24h24L15 40Z" style="fill: #f00;"/>
</svg>
```
Warpを自分好みにカスタマイズしようpart1

## 「Warp」ご存知ですか？
[Warp](https://www.warp.dev)はRust製のターミナルです。
概要とかはQiitaやZennの記事がググれば出てくるのでそれを読んでください。
Warpはテーマがいろいろあることを知ったのでまとめようと思います。

バージョンはv0.2023.06.27.19.34.stable_01のものになります。

## 標準装備のテーマ
1. 右上の歯車をクリック
2. Appearanceをクリック
3. Themesの"Current theme"と書かれているあたりをクリックすると左サイドにテーマ一覧が表示される
4. 好みのテーマを選択



## テーマを増やす
repo: https://github.com/warpdotdev/themes

基本的には[docs](https://docs.warp.dev/appearance/custom-themes)に従うだけです。
git入ってるなら２つ目の方法が簡単かと思います。

### 手順

```sh
mkdir ~/.warp
cd ~/.warp/
git clone https://github.com/warpdotdev/themes.git
```
上記が実行できたら、Warpを再起動。

Settings → Appearance → Themesから一覧を確認すると増えていると思います。
![スクリーンショット_2023-07-04_22_29_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579639/eebefe8b-35a6-dd63-e9f0-05bfb2e2842a.png)
![スクリーンショット_2023-07-04_22_33_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579639/30bf680f-6e46-4dd5-6650-541737726cdf.png)

あとはお好きなテーマを選んで使ってください。

---

なんか自分で色とか背景画像を設定してオリジナルのテーマとかも作成できるみたいだけど、それはpart2とかで。

part2書くかどうかは知らんけど。
基本情報技術者に合格するためにやったこと

### はじめに

7月の最初に基本情報技術者を受けてきました。
結果として科目A・Bともに何とかなり、合格することができました。

この記事では合格するためにやったことの紹介をします。これから基本情報技術者を受ける人にとって何かしら役に立てれば幸いです。

### 使用した本

私は以下の3冊を使用しました。上から順にお世話になった本です。

https://www.amazon.co.jp/%E6%A0%A2%E6%9C%A8%E5%85%88%E7%94%9F%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93%E6%95%99%E5%AE%A4-%E6%9C%AC/s?k=%E6%A0%A2%E6%9C%A8%E5%85%88%E7%94%9F%E3%81%AE%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93%E6%95%99%E5%AE%A4&rh=n%3A465392

この本は科目A対策に使用しました。私にとってはとても分かりやすく、最もお世話になった本だと言えます。

https://www.amazon.co.jp/%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85%E3%80%90%E7%A7%91%E7%9B%AEB%E3%80%91%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%82%8F%E3%81%8B%E3%82%8B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E6%93%AC%E4%BC%BC%E8%A8%80%E8%AA%9E-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%8A%80%E8%A1%93%E8%80%85%E8%A9%A6%E9%A8%93-%E3%82%A4%E3%82%A8%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%83%AB%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF/dp/4297134470

科目Bのアルゴリズム対策で買いました。結果としては買ってよかったと思いますが、現役のエンジニアの方からしたら簡単だと感じるでしょう。コードをバリバリ書いている方は後述するサンプル問題をやれば十分だと思います。

https://www.amazon.co.jp/%E3%81%86%E3%81%8B%E3%82%8B%EF%BC%81-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E7%A7%91%E7%9B%AEB%E3%83%BB%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E7%B7%A8-2023%E5%B9%B4%E7%89%88-%E5%B2%A1%E5%B6%8B%E8%A3%95%E5%8F%B2/dp/4296115014

この本はあまり使いませんでした。それには2つの理由があります

1つ目に、私にただただ合わなかったこと。私が合わなかっただけなので人によってはわかりやすいと感じる人もいると思います。
2つ目に、サンプル問題のセキュリティ問題が簡単すぎたこと。これが大きい理由です。

全く知識が無い方でも、上から2冊目までを買えば十分に合格できると思います。

### 合格するためには

まず初めに、先ほど挙げた本をやりましょう。
私のオススメは科目A・Bの両方とも少しずつ取り組むことです。

A・Bは短い日数で身に着けることが不可能なので、少しずつ長い時間をかけてやるべきだと思います。

私は本で取り組みましたが、友人は本を買わずにyoutubeの動画だけで合格していました。

https://www.youtube.com/@kihonzyouhou

私も合格後に動画を見ましたが、こちらの方が解説しているものだけで合格に必要な知識はつくと感じました。

本に取り組んだ後は
科目Aと科目Bでやるべきことが違います。

科目Aは過去問道場に取り組みましょう。

https://www.fe-siken.com/fekakomon.php

ひたすら周回したら合格できます。本当です

科目Bはサンプル問題に取り組みましょう。

https://www.ipa.go.jp/shiken/syllabus/henkou/2022/20220425.html

セキュリティ問題は日本語の問題ですので気合で頑張ってください。ほとんどセキュリティの知識はいりません。文章を読みとく力のみ必要です！！！（セキュリティ本を全く使わなかった理由）

アルゴリズムは本で取り組んだ問題が丸々出ている部分もあります。時直しだと思って丁寧に取り組んでください。

### 結論

基本は本・動画で知識を固めたのちに、問題演習を何回もやりましょう。やった分だけ合格率が上がります。


頑張ってください！！！！！
Next.js 13のImageコンポーネントでblurを反映させたい

Next.jsのImageコンポーネントでblurを設定する場合に焦点を絞り使い方を共有しておこうと思います。

Next.jsでblurを使用するにはImageコンポーネントのプロパティに`placeholder="blur"`を含めます。

```react:App.tsx
import heroImg from "public/images/hero.png";

const Hero = () => {
  return (
    <>
      <Image
        src={heroImg}
        width={1152}
        height={480}
        alt="ヒーロー画像"
        quality={75}
        placeholder="blur"
      />
    </>
  );
};

export default Hero;

```

そうすると、Next.jsが以下のようなオブジェクトでblurDataURLを自動で生成し、blur画像として優先して表示してくれるようになります。

```react
{
  src: '/_next/static/media/hero.b887048d.png',
  height: 960,
  width: 2304,
  blurDataURL: '/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhero.b887048d.png&w=8&q=70',
  blurWidth: 8,
  blurHeight: 3
}
```

上の例ですと、幅8px、解像度70%のぼやけた画像で表示された後、元の画像が表示されるイメージです。

画像データは必ず先頭でインポートし、src属性には変数で指定します。

以下のように相対パスで直接画像を指定しても表示はされますが、オブジェクトはインポートを通じて生成されるのでblurDataURLが使用できなくなります。

```react
src="./public/images/hero.png"
```

エラーが出るのですぐ気づくとは思いますが、ちょっとした盲点です。

簡単ではありますが、blurの使い方でした。

注意点として、今回紹介した自動でblurDataURLを生成するのはローカルからインポートした静的画像のみです。
動的に生成する画像の場合はblurDataURL Propsを手動で作成する必要があります。