OmniAICreator/Qiita-1.07M huggingface dataset:
【MySQL】8.0へレストア時に「Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'」エラーになった場合

# 概要
MySQL5.7のDBからDUMPを取って、Mysql8.0へレストアした際に以下のエラーになりました。

> ERROR 1231 (42000) at line 3775: Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

こちらの原因と解決策がわかったので紹介します。

# 原因と対策
`NO_AUTO_CREATE_USER`モードとは、無効な場合は`GRANT`文を使用して新しいユーザーアカウントを自動的に作成することができるようになり、有効な場合は自動的に作成することができなくなる、というSQLモードです。

今回のエラーの原因は、MySQL 8.0ではこの`NO_AUTO_CREATE_USER`が廃止されているためでした。
MySQL 8.0以降では`sql_mode`に`NO_AUTO_CREATE_USER`が含まれていると発生します。

DUMPファイル生成時に記述されている以下の部分から「`NO_AUTO_CREATE_USER`」を削除すると、エラーが表示されなくなりました。

```
/*!50003 SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */
```

## 参考

以下、Mysqlの公式ドキュメントです。

https://dev.mysql.com/doc/refman/8.0/ja/upgrading-from-previous-series.html#upgrade-server-changes

> MySQL 8.0.11 では、ユーザーアカウントの非権限特性を変更するための GRANT ステートメントの使用、NO_AUTO_CREATE_USER SQL モード、PASSWORD() 関数、old_passwords システム変数など、アカウント管理に関連するいくつかの非推奨機能が削除されました。

> ストアドプログラム定義に NO_AUTO_CREATE_USER SQL モードを含むダンプファイルを MySQL 8.0 サーバーにロードすると、障害が発生します。 MySQL 5.7.24 および MySQL 8.0.13 の時点で、mysqldump はストアドプログラム定義から NO_AUTO_CREATE_USER を削除します。 以前のバージョンの mysqldump で作成されたダンプファイルは、NO_AUTO_CREATE_USER のインスタンスを削除するために手動で変更する必要があります。
ECMAScriptとCommonJS 文法

## 


`Node.js`には2つの異なるモジュール管理システムがあります: **CommonJS** と **ES Modules (ECMAScript Modules)**。あなたが挙げた2つのコードの違いは、このモジュールシステムに基づいています。

### 1. CommonJS (`const express = require('express')`)
- **CommonJS**は、Node.jsのデフォルトのモジュール管理システムです。
- `require()`を使ってモジュールをインポートします。
- ファイル拡張子が`.js`の場合、Node.jsはデフォルトでCommonJSモジュールとして扱います。

```javascript
const express = require('express');
```

- この形式は、Node.js環境で長年使われてきた標準的な書き方です。

### 2. ES Modules (`import express from 'express'`)
- **ES Modules (ECMAScript Modules)**は、JavaScriptの最新仕様に基づくモジュールシステムです。
- `import`を使ってモジュールをインポートします。
- ES Modulesを使う場合、通常は`.mjs`拡張子を使います。または、`package.json`ファイルで `"type": "module"` を設定する必要があります。

```javascript
import express from 'express';
```

- ES Modulesは、JavaScriptの最新の標準であり、ブラウザや新しいNode.jsバージョンでもサポートされています。

### 主な違い
- **`require()`** は **CommonJS**で使用され、**`import`** は **ES Modules**で使用されます。
- ES Modulesを使うには、設定を行う必要があります（ファイルの拡張子や`package.json`の設定など）。
- **CommonJS**は古くから使われているモジュールシステムで、ほとんどのNode.jsプロジェクトでは依然としてよく使われていますが、**ES Modules**は新しい標準として徐々に普及しています。

どちらを使うべきかは、プロジェクトの要件や互換性によります。
【OutSystems】environment deletedエラー解決

OutSystemsのService Studioを久しぶりに立ち上げるとタイトルのエラーが発生したので、解決方法を記載します。

エラーが表示されているウィンドウの「Fetch environment」ボタンから、公式HPにアクセスする。
エラー内容は、個人環境が消えたので作り直してね、とのこと。
![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/4c98eb00-50cb-fd91-3d61-341287c96d12.png)

公式HPにログインすると、個人環境ページが開くので、右にあるYour infrastructureの「Show more >」から詳細を開く。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/4461065d-0094-ca2f-ded6-8aae873197de.png)

詳細が表示されたら、「Fetch a new environment」ボタンを押して、新しい環境を作成する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/0b2634fd-67f5-97bb-4ceb-11560fea7632.png)

いくつかの確認を求められるので、答えて進む。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/d9c90615-d870-1b52-59a9-d2df7c952f87.png)

インフラ構築中
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/508c1b4d-5a96-af83-205e-88c31b97e97d.png)
※6件中2件完了後、進んでないように見えるが終わっている（？）

再度Service Studioを立ち上げれば、環境に接続できるようになります。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882879/c0d8043e-add7-247f-8b2b-925a5ab2a227.png)

では、有意義なローコードライフを！
Dockerで圧迫されてたディスク容量を回復

なんか最近C:のディスク容量がカツカツ（残り50GBぐらい）だなと思って、エクスプローラのプロパティ開いて容量でかそうなフォルダを追ってたら
C:\Users\XXX\AppData\Local\Dockerに70GBぐらいのデータが入ってました。
そこで以下のコマンドを実行することで、最終的に30GB近くのキャッシュデータが削除できました。
```
docker system prune
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2221375/44e9919b-ef63-4018-d684-bda98c785941.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2221375/4f05003b-eb43-7767-2886-0306cdea6fd1.png)

めっちゃすっきりしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2221375/cdfd0365-4bd1-7e2f-b779-566cf12d9490.png)
Windows (Powershell) でpoetryを使ってrequirement.txtからインポートする方法

毎回調べているのでメモ
`@(cat requirements.txt) | %{&poetry add $_}`

偉大なる先輩Aeliusさん
https://stackoverflow.com/questions/62764148/how-to-import-an-existing-requirements-txt-into-a-poetry-project


Poetryからrequirements.txtを出力するときは@gabe-dsさんが下記の記事に詳しく書いてくれています。
https://qiita.com/gabe-ds/items/d45f6c9ed497f40f6f49#:~:text=%E5%87%BA%E5%8A%9B%E6%96%B9%E6%B3%95[tool.
Markdown Preview Enhanced で mermaid を使って AWS のアーキテクチャを書く

# 概要

最近 mermaid.js にアーキテクチャを書く機能がやってきました！

https://mermaid.js.org/syntax/architecture.html

そういえば Markdow Preview Enhanced で mermaid.js を書けますね (mermaid.js の最新版に対応済み)。
しかし Markdown Preview Enhanced においては、どうにかロゴを読み込む必要があります。
下記の issue でロゴを読み込むオプションを追加する提案を行いましたが、実は既存の方法で実現できたので共有します。

https://github.com/shd101wyy/crossnote/issues/361

# 結論

コマンドパレットから `Markdown Preview Enhanced: Customize Preview HTML Head (Global)` を選択して、表示された html ファイルを下記のようにします。

```html:head.html
<!-- The content below will be included at the end of the <head> element. -->
<script type="text/javascript">
   const configureMermaidIconPacks = () => {
    window["mermaid"].registerIconPacks([
      {
        name: "logos",
        loader: () =>
          fetch("https://unpkg.com/@iconify-json/logos/icons.json").then(
            (res) => res.json()
          ),
      },
    ]);
  };

  // ref: https://stackoverflow.com/questions/39993676/code-inside-domcontentloaded-event-not-working
  if (document.readyState !== 'loading') {
    configureMermaidIconPacks();
  } else {
    document.addEventListener("DOMContentLoaded", () => {
      configureMermaidIconPacks();
    });
  }
</script>
```

これだけでオッケーです。
後はマークダウンファイルの中で下記の形式で書くだけです。

\`\`\`mermaid
...
\`\`\`

中身は下記の通り

```
architecture-beta
    service dns(logos:aws-route53)[Route53]
    service cdn(logos:aws-cloudfront)[CloudFront]
    service cert(logos:aws-certificate-manager)[ACM]

    service storage(logos:aws-s3)[S3]

    group vpc(logos:aws-vpc)[VPC]

    service loadbalancer(logos:aws-elb)[ALB] in vpc

    group private_subnet1[Private Subnet 1] in vpc
    service appserver1(logos:aws-ec2)[EC2 Instance 1] in private_subnet1
    service db_primary(logos:aws-aurora)[Aurora Primary] in private_subnet1

    group private_subnet2[Private Subnet 2] in vpc
    service appserver2(logos:aws-ec2)[EC2 Instance 2] in private_subnet2
    service db_replica(logos:aws-aurora)[Aurora Replica] in private_subnet2

    junction asg_junction in vpc
    junction aurora_junction in vpc

    dns:R -- L:cdn
    cdn:R -- L:loadbalancer
    loadbalancer:R -- L:asg_junction
    asg_junction:T -- B:appserver1
    asg_junction:B -- T:appserver2
    appserver1:R -- L:db_primary
    appserver2:R -- L:db_replica
    cdn:T -- B:storage

    db_replica:T -- B:aurora_junction
    aurora_junction:T --> B:db_primary

    cert:B -- T:dns
```

プレビューしたらちゃんとロゴが読み込まれます！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483769/c9605f53-d7a9-b2a6-abe9-3d447dd913cd.png)
JSONPの替わりにJSONoCを使ってみませんか？

jsonをSame Origin Policyの制約を受けずに別のオリジンから取得する方法としてJSONPがあります。
しかしながら、「JSONP 危険」「JSONP 脆弱性」と検索するとセキュリティリスクがあるとわかります。
JSONoCはJSONPのリスクのある一部を防ぐことが可能です。

# JSONoCとは
[JSONoC](https://github.com/takazin11de/JSONoC)とはJSON over CSSの略で、下記CSSのようにCSSの中にJSONを埋め込み、CSSを読み込みスタイルが適用された要素にJavaScriptでアクセスしJSONを取得しよう、という試みです。

CSSファイルはJSファイルと同様にSame Origin Policyの制約を受けずに別のオリジンからアクセスすることが可能です。またCSSファイルはiframeの中の、そのまたシャドウDOMの中で読み込まれるため、元のページと隔絶されており、元ページに悪影響を与える心配がありません。

~~~css:test.json.css
#_{--_:'{"name":"Bob","age":35}';}
~~~

# JSONoCの安全性 (JSONPと比較して)
### 信頼性のない外部サイトからも取得可能
JSONPでは外部の実行可能なjsファイルを実行します。そのjsファイルが信頼性のない場合、セキュリティリスクとなります。一方でJSONoCは前述しているとおり、実行可能なjsファイルではなくCSSファイルを読み込むので、自由なコードを実行される恐れがありません。またそのCSSもiframeの中の、そのまたシャドウDOMの中で読み込まれるため、元のページと隔絶されており、元ページに悪影響を与える心配がありません。

したがって、信頼性のない外部サイトからもJSONoCによってjsonを取得することが可能です。

### 機密情報はJSONP同様に扱ってはいけない
JSONPではコールバック関数名を秘匿することで、コールバック関数名を知らない第三者は情報を取得し辛くなっています。ですが、総当たりすればわかってしまいますし、仮にJSONPのアドレスがばれてしまえば攻撃者自らjsファイルを取得できるため、JSONPでは機密情報を扱ってはいけませんし、扱うためには別になんらかの認証機構を用意すべきです。JSONoCでもこの点については同様です。情報提供者、情報取得者が同一のKey(文字列)を知っている場合のみにjsonを取得できる仕組みは用意していますが、これもJSONP同様に総当たり可能ですし、CSSファイル自体に攻撃者が直接アクセスすればJSONデータはわかってしまいます。


# JSONoCの使いかた
### JSONデータの取得
[JSONoC](https://github.com/takazin11de/JSONoC)にあるjsonoc.jsを読み込み、下記コードを実行すると
~~~js
  JSONoC.fetch('https://foo.com/test.json.css',5000,"").then(
    (json)=>{
      console.log(json);
    }
  );
~~~
下記JSONが取得できます。
ここで、一つ目の引数はJSONデータを埋め込んだCSSファイルのURLを指定します。
二つ目の引数はタイムアウトであり、ここでは5000ミリ秒でタイムアウトすることを示しています。
また、三つ目の引数で空文字を渡していますが、ここはKeyとなっており、情報提供者、情報取得者が同一のKey(文字列)を知っている場合のみにjsonを取得できるようになっています。（今回は空文字にすることでこの機能は不使用としています。引数を省略することも可能です。）
~~~json:実行結果
{"name":"Bob","age":35}
~~~
このときCSSファイルは下記となっているものとします。
~~~css:test.json.css
#_{--_:'{"name":"Bob","age":35}';}
~~~

### JSONデータを埋め込んだCSSファイルの作成
下記コードでJSONデータを埋め込んだCSSファイルを作成することができます。
ここで、一つ目の引数はJSONデータを指定します。
二つ目の引数はKey(文字列)であり、ここでは空文字を渡しています。（引数を省略することも可能です。）
~~~js
let json = JSONoC.cnv( {name:"Alice", age:20} , "");
  console.log(json);
~~~
~~~css:実行結果
#_{--_:'{"name":"Alice","age":20}';}
~~~
オプティムのサマーインターンに参加してきた

# インターンシップの内容
インターンの期間は2週間。1週目はオンライン、2週目は東京本社に出社でした。
インターンシップの内容は、実際にプロダクトチームの中にアサインされ、そこで出ているタスクに取り掛かる。
インターン時はメンターさんが1人ついていただき、進捗管理や疑問点の解消などサポートしてもらえる。

# どんなことをしたか
製品を売っているメーカ企業とそれを利用するユーザー企業の間でサポート対応やお問い合わせ対応等で様々な問題が発生することに焦点を当てた顧客接点をDX化する「[HardwareMyPortal](https://www.optim.co.jp/optim-hmp/)」の開発に携わられせいただきました。
私は、現状プロダクトの問題点がタスクとして切り出されていて、その問題点に対してのアプローチから設計、実装、テストまでを一貫してやらしてもらうことができました。
こういった現状の問題点の背景から理解してそこに対してのアプローチをかけていくような経験をさせてもらって本当に成長できたと思えらインターンでした!

# おわりに
こういった短期のインターンは初めてで正直不安なこともありましたが、メンターやチームの方々が本当に親切に接してくれていたので、のびのびと楽しくできたと感じております。
[応用情報技術者試験]メールに関連する知識まとめ

## はじめに
はじめまして、エンジニアのkeigoです！

本記事では、「応用情報技術者試験」合格のための学習のアウトプットを兼ねて、
分かりやすく整理して書いていこうと思います。

今回のテーマは「メールに関連する知識」です！

メールに関連する知識をまとめてみました！

では、一緒に頑張りまっしょい！

## メールに関連する知識まとめ

### ■ S/MIME
電子メールの暗号化とデジタル署名を提供するプロトコル（約束事みたいな）です！
1.メール暗号化
暗号化することでメールの中身を盗聴されることを防ぎます！
盗聴したとしても、暗号化されていて何が書いてあるのかわからん！ということです！

2.デジタル署名
本当に送信者が正しい送信者か、中身が改ざんされていないか、を確認することができます！
なりすましや改ざんを検知したら、OutLookやGmailで警告が出たりします！

では、デジタル署名についてもう少し深堀って行きます

### ■ デジタル署名
デジタル署名では公開鍵暗号方式を使用します！
署名とは言いますが、名前を書いて送るわけではありません！
元データ（例えば文章）を使用して署名を作成します！

1. 送信者側でハッシュ関数を使用して、元データをハッシュ化します。ポテトのように。
2. 送信者側はハッシュ化したデータを自分の秘密鍵で暗号化します。
3. そして送信。
4. 受信者は送信者の公開鍵で複合し、ハッシュ化されたデータを獲得します。
5. 元データを同じハッシュ関数でハッシュ化してみて、獲得したハッシュ値と一致したら問題なし！送信者は正しいし、改ざんもされていません！
もし、一致しなかったら...なりすましか改ざん済みです！

ざっくりですがそんな感じでなりすましや改ざんを検知します！

### ■ POP3
電子メールを**受信**するためのプロトコルです！
・サーバー上にあるメールをダウンロードします。
・サーバー上にあるメールを削除することもできます。

受信用のプロトコルでももう一つチェックするべきものがあります！
それは...

### ■ IMAP
こちらもPOPと同様メールを**受信**するためのプロトコルです！
では、POPとはなにが違うのか...

POPはメールをサーバーからダウンロードすることによってみることができるようになります。サーバー上のメールは通常削除されます。
IMAPはサーバー上にメールが保管されます。そのためどの端末からでもアクセス可能です。ローカルにダウンロードする必要がありません！

よく私が使用するGmailなどは、Googleのメールサーバーに保管されているメールをIMAPを使って同期し、複数のデバイスで同じ状態（既読・未読、フォルダなど）を管理している、ということになります！（たぶん

### ■ SMTP
メールを**送信**するためのプロトコルです！
メールサーバーにメールを送り、そこからさらに相手のメールサーバーまで届けます！

例えば私があなたにメールを送るとします！

【私】　Gmail --(SMTP)--> Google --(SMTP)--> Microsoft --(IMAP)--> OutLook 【あなた】


### ■ SPF
送信元の正当性を確認するためのプロトコルです！
なりすましや迷惑メールを防ぎます！

◇仕組み
DNSサーバにSPFレコードというものを設定します。そのSPFレコードには、許可しているメールサーバのIPアドレスが記載されています。そこに記載されたIPアドレスを持つメールサーバから送られたメールかどうかを確認する仕組みです！が...正当なサーバーからなりすましされたら分からないので完璧に防ぐことはできなさそうです。
そこで...

### ■ DKIM
メールの内容が改ざんされていないか、を確認する技術です！
メールにデジタル署名をつけて送信することで、メールの改ざんされているかを確認します。
デジタル署名ではドメインに紐づけられた秘密鍵、公開鍵が使用されます！
SPFと組み合わせて使われることが多いです！


### ■ DMARK
SPFやDKIMと連携して、認証結果に基づいたポリシーを定義して、受信側のサーバに指示する技術です！
簡単に言うと、
【送信者のドメイン管理者】
・「やるべきこと書いたポリシーDNSに置いときますね！」

【受信側メールサーバー】
①SPFで許可されたメールサーバーから送られたメールかどうかをチェック！（「知らないサーバーから送られてきたメールだ...」）
②DKIMでデジタル署名をチェックして、改ざんやなりすましが行われていないか確認！（「このメール、内容が書き換えられているみたいだ...」）
DMARCでポリシーに基づいて、メールをどう処理するかDMARKポリシー確認して決定！（「これは完全に不正なメールだから、ポリシーに従って拒否することにしよう！」）

みたいな感じです！

 ## 終わりに
 今回は、メールに関連する知識について確認していきました。
 ところどころ寒いギャグを挟み込んでお送りしましたが、いかがでしたでしょうか。
 少しでも学習の参考になれば幸いです。
 また明らかな誤りがありましたら、ご連絡いただけたらありがたいです。

では、応用情報技術者試験の学習、引き続き頑張りましょう！
【UiPath】「繰り返し」と「繰り返しを終了」を使って分岐をスッキリ書く

UiPathでは仕様上、条件分岐（if）を繰り返すようなワークフローをシーケンスで書く場合、分岐の入れ子がどんどん深くなっていきます。
複雑な分岐はフローチャートで書くのが王道ですが、ここではシーケンスを使っても比較的スッキリ書ける方法を紹介します。

## 概要
以下の処理を実行するワークフローを作成します。
- 処理Aを実行する
- 処理Aの結果がOKであれば処理Bを実行、NGであれば処理Dまでスキップ
- 処理Bの結果がOKであれば処理Cを実行、NGであれば処理Dまでスキップ
- 処理Dを実行

### フローチャートで書く場合

以下の形で書けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/24758a3b-ddb5-0e07-f84a-a4c4b8fbd581.png)

視覚的にもわかりやすいのでこれで書けるのが一番良いですが、時にはシーケンスで分岐が必要なケースもあるかと思います。

### シーケンス：条件分岐で書く場合

シーケンスで条件分岐（if）を使い書くと以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6ee28f73-9317-c8f8-2e6b-c91c37bf2302.png)

条件分岐（if）の中に条件分岐（if）が入っています。
分岐が2つなのでまだ良いほうですが、分岐が増えるごとにさらに入れ子構造が深くなっていきます。

### シーケンス：分岐と繰り返しを合わせて書く場合

条件分岐に加え「繰り返し（指定回数）」と「繰り返しを終了」を使い書いたのが以下の形です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/846c5713-a5f9-1548-4764-0b7d408cd811.png)

繰り返しを使用していますが実際に繰り返す必要はないので、「繰り返し（指定回数）」を使い指定回数には1を指定します。
分岐の条件は上記の「シーケンス：条件分岐で書く場合」と同じですが、Elseに入った場合に「繰り返しを終了」を実行し、以降の処理をスキップして繰り返しを抜けるようにしています。
これにより、「処理AがOKでなければ処理Dに移る」、「処理BがOKでなければ処理Dに移る」という処理を条件分岐を入れ子にせずに書くことができています。


## 動作環境
UiPath.System.Activities 24.10.3
解決済み: Windows10 リカバリーしたいのにF2もF11も効かない

NECのノートパソコン（Lavie）をリカバリーするため、マニュアルに沿って起動時にF11を押下してもリカバリーメニューに移行しないという事象があった

OSはWindows10で、マニュアルにはNECのロゴが表示されている間にF11を何度か押下するとリカバリーメニューに移行する、とあるが、何度やっても普通にWindowsが起動する

また、起動オプションを変更するためBIOSの設定画面に移行するには、同じくNECのロゴが表示されている間にF2を押下するようにとあるが、こちらも反応がなく普通にWindowsが起動する

色々試した結果…、設定→更新とセキュリティ→回復に、リカバリーの実行や起動オプションの変更の項目があることに気が付いた
Amazon Bedrock Claude 3.5 Sonnetの利用申請方法 - サポート問い合わせから承認まで

## はじめに

Amazon Bedrock の Claude 3.5 Sonnet は、高度な自然言語処理能力を持つAIモデルです。しかし、初めて利用しようとすると「使用不可」と表示されることがあります。本記事では、この問題を解決し、Claude 3.5 Sonnet を利用可能にするための完全なガイドを提供します。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">Amazon BedrockでClaude 3.5 Sonnetが使えない場合の対応フローをv0で可視化してもらった！！<br>これは見やすいぞ！！ <a href="https://t.co/JGJuOIcndi">https://t.co/JGJuOIcndi</a> <a href="https://t.co/1MUWhSEiee">pic.twitter.com/1MUWhSEiee</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1833480260194578789?ref_src=twsrc%5Etfw">September 10, 2024</a></blockquote> 

## 問題の確認方法

1. Amazon Bedrock コンソールにアクセス
2. Claude 3.5 Sonnet の状態を確認
3. 「使用不可」と表示されている場合、カーソルを合わせると以下のメッセージが表示されます：

   > このモデルは使用できません。このモデルにアクセスできるようにするには、サポートにご連絡ください。

## サポートへの問い合わせ手順

1. Bedrock コンソールの「support」リンクをクリック
2. サポートケースを作成:
   - サービス: 一般情報および使用開始にあたって
   - カテゴリー: リリース
   - 緊急度: 一般的な質問
3. 問い合わせ内容を記入（次セクションに例文あり）

## サポート問い合わせ例文

以下は、サポートへの問い合わせ例文です。必要に応じて修正してご利用ください。

```bash
お世話になっております。Amazon Bedrock の Claude 3.5 Sonnet についてご連絡させていただきました。
お忙しいところ恐れ入りますが、ご確認よろしくお願いいたします。

・要望
[リージョン名]において Amazon Bedrock の Claude 3.5 Sonnet を利用したいです。

・問題
現在「使用不可」、「このモデルにアクセスできるようにするには、サポートにご連絡ください。」と記載があり Claude 3.5 Sonnet が利用できません。

・利用用途、申請理由
個人開発及び検証のために利用します。
Claude 3 Sonnet も利用しておりましたが、より性能が良い Claude 3.5 Sonnet を利用したいです。

・その他情報
リソースの名前：Amazon Bedrock
リソースがプロビジョニングされたリージョン：[リージョン名]
```

## AWS Supportからの返信と対応

1. 初回の返信（通常1営業日以内）
   - 申請受領の確認
   - 担当部署への確認作業開始の通知

2. 2回目の返信（通常2営業日以内）
   - Claude 3.5 Sonnet へのアクセス許可完了の通知
   - コンソールでの確認依頼

例：2回目の返信

```bash
ご担当者様

本件につきまして、確認にお時間を頂戴し誠にありがとうございます。

本アカウントが Claude 3.5 Sonnet のモデルへアクセスすることができるよう担当部署にて対応が完了いたしました。
お手数をおかけしますが、ご利用可能かどうかご確認をいただけますと幸いでございます。

何卒、よろしくお願いいたします。
```

## コンソールでの確認と利用開始

1. Bedrock コンソールにアクセス
2. Claude 3.5 Sonnet が「リクエスト可能」になっていることを確認
3. 「モデルアクセスをリクエスト」をクリック
4. 利用したいモデルを選択し、「Submit」をクリック
5. しばらく待つと「利用可能」になることを確認

## まとめ

Amazon Bedrock の Claude 3.5 Sonnet の利用申請は、以下の手順で行えます：

1. 問題の確認
2. サポートへの問い合わせ
3. AWS Support からの返信待ち
4. コンソールでの確認と利用開始

この手順に従うことで、通常2-3営業日以内に Claude 3.5 Sonnet を利用開始できます。


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
【プログラミング初心者】0から始めるReact学習 #5 ~Web開発の基本編~

# 1-1.最低限のインプット
## 9月7日
**【最新ver対応済】モダンJavaScriptの基礎から始める挫折しないためのReact入門**の
53~65まで完了。

本日で上記講座を完了しました！
Reactを使うことで「.htmlファイル」の中身がすっきりして気分が良かったです。（笑）

ただ、まだまだ講義内の内容でさえ、完璧には理解できていません。
2周目をやりたくなる気持ちもありますが、学習の際に参考にした記事では
「1周したら次へ進め！」とあるため、このまま次の学習に行こうと思います。

開発と呼んでも良いのか分からないくらい簡単なだと思いますが、
todoアプリをJSとReactの両方で作れて楽しかったです！笑

## まとめ
本日は只の日記になっちゃいました（笑）
明日はGitHubの勉強です！
気を抜かずに駆け抜けていきます！！
【Rails7 とLaravel10】マイグレーションファイル・生成コマンド等 比較

## 前提

両者、postsテーブルを作成する想定で、title(string)カラムを持ちます。

## rails　マイグレーションファイル生成コマンド

基本形になります
```
rails generate migration CreateTableName
```
postsテーブルを作成する場合

```
rails generate migration CreatePosts
```

Postモデルと同時にマイグレーションファイルを作成する場合(Laravelと異なり特別なことをせず、モデルを作ると自動でマイグレーションファイルも作成される)

```
rails generate model Post
```

以下のようにカラムを指定し、作成することも可能
```
rails generate model Post title:string
```
## rails ロールバック(最後に実行されたマイグレーションを取り消す)コマンド
```
rails db:rollback  
```

## rails データベースをすべてリセットし、マイグレーションを再実行するコマンド（個人開発だと使いがちなコマンド）
```
rails db:drop db:create db:migrate
```

## rails　マイグレーションファイル
laravelよりとにかくシンプルです。


```xxxxx_create_posts.rb
class CreatePosts < ActiveRecord::Migration[7.0]
  def change
    create_table :posts do |t|
      # ここにカラムを追加していく
      t.string :title
      
      t.timestamps
    end
  end
end
```

## laravel マイグレーションファイル生成コマンド

基本形になります
```
php artisan make:migration create_table_name_table
```
postsテーブルを作成する場合

```
php artisan make:migration create_posts_table
```

Postモデルと同時にマイグレーションファイルを作成する場合
```
php artisan make:model Post --migration
```
## laravel ロールバック(最後に実行されたマイグレーションを取り消す)コマンド
```
php artisan migrate:rollback
```

## laravel データベースを全て削除し、マイグレーションを再実行するコマンド（個人開発だと使いがちなコマンド）
```
php artisan migrate:fresh
```


## Laravel マイグレーションファイル
railsと比較すると文量が多いですが、実際の記述量はほぼ変わらないです。ロールバック時のメソッドが記述されています。（downメソッド）

```xxxxx_create_table_posts.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id(); 
            //ここにカラムを追加していく
            $table->string('title')
            $table->timestamps(); 
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

```
コマンド自体は両者にそこまで差は無さそうです。
ただ「シンプルかつ高機能」という観点で見るとrailsに軍配があがる？ように感じます
5Gの低遅延性で誰が救われるわけでもないのはなぜか

それを使おうおする人も、提供しようとする人もPoC地獄で苦しむことになるでしょう。

ちまたで、ローカル5Gで永遠にPoCが続いているのは有名な話です。

総務省はローカル5Gがこれから普及して来るような、SDGsみたいなタイムラインを公開したりしてますが、SDGsと同じように永遠に達成されずSDGs1.1みたいなものを繰り返し出して来る未来が待っているでしょう。

なぜなら、5Gは基地局あたりのカバレッジが狭く使いにくいのです。

6G で改善されることを期待したいですが、公金目当ての産業なので期待はできないでしょう。

本記事は「[いるか速報](https://momokokko.blog.fc2.com/)」で掲載された記事のリメイク版です。
PCで使える代表的なテキストエディタ

こんにちは。齋藤です。
今回はプログラミングやテキスト編集に欠かせないテキストエディタに関して代表的なテキストエディタを紹介し、それぞれのメリットとデメリットについても記載していきたいと思います。

## 1. Visual Studio Code (VS Code)
- **メリット**: 
  - 拡張機能が非常に豊富で、必要に応じて機能を簡単に追加可能
  - 多くのプログラミング言語に対応し、カスタマイズがしやすい
  - Gitとの統合やデバッガーが標準搭載で、開発効率が高い
- **デメリット**: 
  - プラグインを多く導入すると起動が重くなる
  - 初心者には機能が豊富すぎて扱いづらいことがある

## 2. Sublime Text
- **メリット**: 
  - 軽量で高速、スムーズな操作感
  - マルチカーソルやスニペット機能でコーディング効率を向上
  - シンプルなUIで集中しやすい
- **デメリット**: 
  - 無料版はライセンス購入のリマインダーポップアップが表示される
  - 一部の高度な機能にはプラグインの導入が必要

## 3. Atom
- **メリット**: 
  - オープンソースで自由にカスタマイズ可能
  - GitHubとの強力な統合機能
  - 豊富なパッケージで機能拡張が簡単
- **デメリット**: 
  - 起動が遅く、重いと感じることがある
  - 開発の更新頻度が減少しており、今後のサポートが不安

## 4. Notepad++
- **メリット**: 
  - 軽量で動作が速く、低スペックPCでも快適に動作
  - シンタックスハイライトや正規表現検索など多機能
  - 多数のプログラミング言語に対応
- **デメリット**: 
  - デザインがやや古い印象
  - 大規模なプロジェクト向けの機能が不足している

## 5. Vim
- **メリット**: 
  - 非常に軽量で高速な動作
  - ショートカットキーを使いこなせば驚異的な効率で作業が可能
  - ターミナル上でも使用できるため、リモート環境での作業に最適
- **デメリット**: 
  - 操作に慣れるまで時間がかかる
  - 初心者には使いにくいと感じることが多い

## 6. 秀丸エディタ
- **メリット**: 
  - 正規表現やマクロ機能が強力で、高度なテキスト操作が可能
  - 軽量で大容量ファイルの編集にも強い
  - 日本語環境に特化しており、日本語文書の扱いが得意
- **デメリット**: 
  - 無料版は機能制限があり、ライセンス購入が必要
  - UIがシンプルで、デザイン面での近代化があまり進んでいない

## 7. メモ帳 (Notepad)
- **メリット**: 
  - 非常に軽量で起動が速く、すぐに使える
  - Windowsに標準搭載されているため、追加インストール不要
  - シンプルでわかりやすい
- **デメリット**: 
  - 機能が限られており、複雑なテキスト操作には不向き
  - コーディングや大規模なテキスト編集には向かない

## 8. サクラエディタ
- **メリット**: 
  - 正規表現対応やタブ機能など、多機能で拡張性が高い
  - 日本語対応が充実しており、日本語文書の処理が得意
  - プラグインにより機能を拡張可能
- **デメリット**: 
  - デフォルトのUIがやや古い印象
  - 他のエディタと比べて設定がやや複雑で、習得に時間がかかる場合がある

## 9. TeraPad
- **メリット**: 
  - 非常に軽量で、シンプルなUIながらも基本機能が揃っている
  - 複数の文字コードに対応しており、異なる環境でのテキスト編集が容易
  - 動作が高速で、低スペックなPCでも快適に動作
- **デメリット**: 
  - 機能面で他のエディタと比べるとやや劣る
  - 大規模プロジェクトや高度なコーディングには不向き

---

### まとめ
どのテキストエディタも用途や作業環境によって適したものが異なります。軽量でシンプルなものから、機能が豊富なものまで、自分に合ったテキストエディタを選ぶことで、作業効率を大きく向上させることができます。
紹介した以外にもテキストエディタはあるのでぜひ参考の一部にしていただいて自分に合ったエディタを選択していただければと思います。

以上、齋藤でした。
CSVファイルをExcelで開いたときに発生する不都合と回避

## 前提
Excelで参照するためのCSVファイルをアプリで出力する。

## 不都合と回避
1. 数字だけの文字列で、先頭に0が埋めてある場合、Excelで開くと先頭の0が消えてしまう。（""で囲んでも消えてしまう。ひどい）※不都合
1. `="0010"` のようにすると、数式として読み込んでくれるので表示上は先頭の0が消えずに残ってくれる。※回避
1. その項目に、`="100,001,ABC"` のように半角のカンマ「,」が混在している場合、カンマで項目が分割されてしまう。※不都合
1. `"=""100,001,ABC"""` の形で、""で囲んだ文字列とすることで数式として読み込んでくれる。（""の中の「"」は「""」になります）※回避

## まとめ
```
CSVファイル
1,"0010","先頭の0が消える","※不都合"
2,"100,001,ABC","正常に読み込める",
11,="0010","先頭の0が残る","※回避"
12,="100,001,ABC","余計な分割が発生する","※不都合"
21,"=""0010""","先頭の0が残る（Excelで読み込むと11と同じ内容になる）","※回避"
22,"=""100,001,ABC""","余計な分割が発生しない","※回避"
```
#### ▼Excelで開いた結果（列幅調整済みです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324299/1d7059b2-d1a7-643e-0d31-d7b290df0faf.png)

#### ▼数式の表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3324299/1f35da7e-06f8-97f7-5e48-83eb1fdd5476.png)
OpenShift Virtualization試し

VMwareがBroadcomに買収された後、Red Hat社のOpenShift Virtualizationが急速に注目を集めているそうです。
- MTV(Migration Toolkit for Virtualization)を利用して、VMware vSphereから既存の仮想マシンの移行が簡単にできることが理由の一つと思います。

## OpenShift Virtualization
OpenShift Virtualizationにより、OpenShift上では
- 仮想化
- コンテナ化
の共存が実現できたという説もあります。

## OS領域永続化の実現
以下、VMwareと関係ないことです。
昔OpenShiftのpodを仮想サーバーとして利用できないかを試したことがあります。
PVを用意することで、podのデータを永続化できたが、
OS領域の永続化を実現できなかったので、新規ユーザの追加とか、設定変更結果の保存などが結構面倒です。
今回OpenShift Virtualizationを使用して作成する仮想マシンがOS領域を含めて永続化できるので、OpenShiftリソースの活用方法が増えました。

## 仮想マシン作成方法
以下の通り、仮想マシンの作成方法を少しまとめました。

#### 1. OpenShift Console画面からLinuxのtemplateを選択、仮想マシンを生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/19c98bc2-750f-d865-4cda-5b9ed75defe3.png)

#### 2. 仮想マシンのOS領域を含めてすべてのデータ領域が永続ボリュームに格納されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/e59057de-426e-f7f4-22b3-ab6453e9abff.png)

#### 3. 「virtctl」コマンドでログイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/e17c3544-d1a8-33c7-8a86-241994089235.png)

#### 4. user追加&仮想マシン再起動後追加したuserでlogin
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/78ad060f-bac8-04c6-fc29-02e1258a5370.png)

#### 注意点
「OpenShift Virtualization」がOpenShiftの１機能ですが、
bare metalのworker node※が必須です。on-premise bare metal serverで構築したOpenShiftが一番適切だそうです。
※Control Planeが仮想サーバでも問題ないそうですが、公式資料には該当記載が見当たりません。
💻パワー オートメイト デスクトップで効率をあげていこう。”時短ログイン”の例

こんにちは。某小売業で冷凍バイヤーをしています、デジタル奮闘中の「k-ji」です。
「めんどくさいけど、使わないと支障をきたすから使っているツール」ってないですか？
**今回は職場で聞いた困りごとをPowerAutomate Desktop(以下PAD)で改善できた話です。**


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/dd01290e-fa62-9b20-5b7f-9fcbfb4c1433.png)

## お困りごと 💦　A2ネットが使いにくい。
社内にはコミュニケーションツールとして、情報のやり取りの方法が２つあります。
具体的には①「メール」と　②A2ネットワーク株式会社（A2network）の
「モバイルWiFiサービス『スカイベリーⓇ』」の両方で情報を扱っています。
(以下A2ネット)

バイヤーから店舗への連絡はA2ネットで、緊急時や重要連絡のみメールを使っています。
**メールはデスクトップから直接開けますが**、A2ネットは社内認証の入力と選択など
使用するまでに手数がかかるので、連絡事項のチェックに手間がかかります。

### ▼情報確認するだけ。どんだけ手間やね～ん！　※手間ひま フロー図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/e55198e1-8a56-b615-57a7-b39d06080922.png)


## 実施したこと🚀
PADを活用し、ログインまでに時間のかかる作業を自動化しました。
**A２ネットの弱点＝ログインまでに手数が多い8工程＝40秒を**
<font color="red"><strong>ボタン一つの1工程で画面までたどり着く＝12秒　に大きく簡便時短作業にできた😀<strong></font>

https://x.com/i/status/1832782358132732111

### 🔑取り組んだ背景

店舗とバイヤーの間をフォローするスーパーバイザー(以後SV)　からの依頼です。
SVは社内外との連絡も多くあるのでメールもA2ネットも両方を確認する必要があるので
操作性の悪さを何とかできないか、とのご依頼を受けて取り組みをしました。

:::note warn
今回の取組にあたっては店舗担当者からの不満も多かった内容でした。
業務の連絡ツールがメール主体からA2ネット主体に切り替わり、
操作性が良くないとの意見が前々からありました。
面倒な作業が多いので私自身もメールを使いたいと思う事の方が多かったです。
:::

## 🔧使用したツール
**PowerAutomate Desktop (PAD)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/e41cea50-15a5-6640-5e46-918124933a7d.png)

## 🚗実走内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/c1b5853a-ae04-8a81-7426-ad50941b7d40.png)

:::note info
実にシンプルですが、使用頻度の高い業務なので効果は非常に高いと思います。
:::

### ①実施したフロー(PAD画面)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/af9e7d5d-3fc8-b443-997e-435263524d82.png)


### ②使用したアクション　(フロー番号記載)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840234/5962c4ce-4afe-9065-91c6-03de02f5e617.png)


### ③使用感と感想
:::note warn
お題をいただいたSVとその他2人のバイヤーにも使ってもらいました。
:::
**🙆‍♂️評価できる点：**
①ログイン以降も部署名の選択画面まで終えているのですぐに使える。
②短縮した時間以上に工程数が減ったことが心理的に楽になっている。
③発信する側も発信時以外開けることが無かったが、簡単に開くので他のバイヤーの
　連絡事項も確認しやすくなった。(発信時以外も見る)

<font color="red"><strong>■毎日誰かしら必ず使用するツールなので、全体での時間短縮効果は大きいと思える。
また、操作手数が減れば見る回数を増やせるので、連絡事項の確認漏れが減らせる。<strong></font>


**🙋‍♂️今後の依頼点：**
①PADをインストールしていないのでデスクトップで使用できるアプリにしてほしい。
②バイヤーがA2ネットに配信したタイミングを知らせてほしい。
③A2ネットを携帯電話でも見れるようにしてほしい。


## 🌈最後に 
### 今後の課題として
今回はごくシンプルな内容の取組しかできませんでした。
ですが、単純で誰でも使え、多くの方が毎日何度も使うツールの時短改善ができました。
ボタン一つで働きやすくなると感じてもらえることができたので、効果は高かったです。
その為　否定的な意見はなく今後の発展依頼を受けることもできました。

**複雑なモノづくりが全てではなく、ちょっとした事の改善や工夫で
多くの人が高い効果を受けることが出来ることもあるものだ、と改めて気づきました。
今後は周りの困りごとや意見にも目を配りちょっとしたことにも取り組んでいきたいです。**
Pandas 2.3 に向けてmergeされた PDEP-14 とは何か

## この記事の目的

2024年7月25日に merge されていた [PR#58551](https://github.com/pandas-dev/pandas/pull/58551) は `
PDEP-14: Dedicated string data type for pandas 3.0` というタイトルが示す通り pandas 3.0 に向けた string data type の仕様である。

https://github.com/jorisvandenbossche/pandas/blob/4de20d194beb9418fcee6e839f404a1725ff48dd/web/pandas/pdeps/0014-string-dtype.md

翻訳は適宜DeepLやGPTにやらせておけばよいので、私が読んだ感想をparagraphごとにつらつらと記述していくお気持ち日記とする。（もやはそのようにしないと人間の価値が出せない時代となってしまった）

## Disclaimer
この記事の内容は、私個人の意見や見解であり、私が所属する組織の公式な立場、方針、意見を反映するものではありません。この記事の内容について、組織はいかなる責任も負いません。

## 概要

- StringDtype(storage="pyarrow"|"python", na_value=np.nan|pd.NA)と 2x2の4通りの指定ができるようになる
-  "str" 指定 は StringDtype(na_value=np.nan) と同値（pyarrowがインストールされていればそれ、そうでなければpythonが使われる）
- "string" 指定は StringDtype(na_value=pd.NA) と同値（pyarrowがインストールされていればそれ、そうでなければpythonが使われる）
- 文字列はオブジェクト型ではなくなるので、 `ser.dtype == object` は3.0からエラーとなることに注意。object型の場合はNoneも欠損値として（ユーザーが意図して）使えたが、3.0からはNone自体持てなくなる
- [GH-58613](https://github.com/pandas-dev/pandas/issues/58613#issuecomment-2100453677)のコメントにあるように、 pyarrow の physical type は `pa.large_string()` となるようだ
  > (with StringDtype("pyarrow"), you always get pyarrow's large_string)
- 2.3.0リリースでは、将来のすべての文字列機能（デフォルトの文字列dtypeのpyarrowとobject-dtypeの両方）を利用できるようになる

## 感想

- Pandas 3.0 に向けての議論の発散があったが、このPDEP-14でstring typeの方針が決まったのは一安心
- PyArrow が必須でなくなったのは反対派の主張も強かったのであろう。pacakge サイズ増大のため、string type に限定して nanoarrow を使ってほしかった。（もちろん[議論](https://github.com/pandas-dev/pandas/issues/58552)しており、可能性としては3.0リリース以降での議論となりそう
- break change を控えめにするため、引き続き NaN が missing value として使われる。これは一大決心して `NA` に統一してほしかった。とはいえ保守的な立場を取らざるを得ないほど利用者が多いので一定理解はできる
- また、NumPy 2.0 文字列 のbackend採用の可能性も残しつつあるこの選択は苦渋なものだったとも理解できる [GH-58503](https://github.com/pandas-dev/pandas/issues/58503)
- StringDtype("pyarrow_numpy") はpandas 2.3でエイリアスとして非推奨となり、pandas 3.0で削除される。 `StringDtype("pyarrow", na_value=np.nan)` が明示的な指定となる


まずは2.3.0のリリースを待って、徐々に `StringDtype(...)` の明示的な指定に書き換えていくのが良さそう。

以上

### 参考

https://qiita.com/hkzm/items/0e1440e4283a1db57872
MX Linux でDVDのバックアップファイルを作成する

```
# 必要なパッケージをインストール
$ sudo apt update
$ sudo apt install libdvd-pkg
$ sudo dpkg-reconfigure libdvd-pkg
$ sudo apt install dvdbackup

# インストールできたか確認
$ dvdbackup –version

#dvdのパスを取得
$ mount | grep sr
/dev/sr0 on /media/yourname/dvdname type udf (ro,nosuid,nodev,relatime,uid=1000,gid=1000,iocharset=utf8,uhelper=udisks2)

# 出力先を指定してバックアップ開始
$ dvdbackup -M -i /dev/sr0 -o ./
```

# バックアップファイルの利用方法
- そのまま保存
- handbrakeなどのrippingソフトでmp4ファイルへ変換
営業からエンジニアになるまで

# はじめに
初投稿！
取りあえずなんでもいいから記事を書こうと思い、今回は簡単に自分のエンジニアなった経緯でも書いとこうと思います！
全然技術関係ないけど、割とみんな自由に書いてるからいいですよね！　いいよね？

# まずエンジニアなるきっかけ
私は日東駒専レベルの文系学部を2020年に卒業して商社に入社しルート営業をしていました。給料も平均以上ではあったり、会社の人間関係も悪くなく、仕事も正直楽でした。

でも仕事面白くない……

これはルート営業が悪いとかではなく、私がこの仕事に面白みを見いだせなかっただけです。
営業しているよりもExcelとか事務作業の効率化をするのが楽しかった！

そしてちょうどこの頃はYoutubeをみていると「フリーランスエンジニアなって稼ごう！」みたいな動画がいっぱいありました。正直私はそれに軽く流されてプログラミングって面白いのかな？　稼げるならやってみようかなと初めたのが2020年の7月ごろでした。

入社してたった3ヶ月………、入社前は一生この会社にいるつもりだったのにな、おかしいな〜

会社は良いところで個人的にはホワイトでしたが、仕事がつまらない、プログラミングもやってみたら面白く、私は早期から転職を考え始めました。

#　エンジニアになるまで

私が初めてエンジニアとして就職できたのは2022年の8月でした。プログラミングはじめてから二年経ってますね笑

転職は最初の会社を二年勤めてからしようと思ったので概ね予定通りでした。次はそれまでどんな勉強をしたかを書きます。

まずは手始めにドットインストールでHTML、CSS、JSを一通りやりました。でも面白いけどこれは一人で続かないと思いました。
だって単純に難しいし、勉強の道筋も何が正解かイマイチわからなかったもで

そこで勉強を進めるためにまず浮かんだのはプログラミングスクール。これも当時はむっちゃ流行っていたと思います。
でもまだ新卒で入社して3ヶ月、先述の通り転職は二年勤めてからしようと思ったので時間はある。半年くらいで卒業して60万〜80万くらいするプログラミングスクールは微妙かなと思いました。

それで見つけたのがMENTAというメンターを探すサービスです。プログラミングのカテゴリーもあり、まだ右も左もわからない私はメンターを吟味する時間も無駄と思い一番トップに表示されていた人を選びました。

月額2万5千円、買切プランで30万円。
課題を用意してくれており、その課題に対してSlackで質問しながら進めていく。

具体的にどんな課題かというと、最初はFizzBuzzだったり、後半は掲示板アプリなどでした。
もう少し詳しく言うと掲示板アプリはデモ動画が送られてきて、さらにCRUD操作ができる、Dokcerを使う、など箇条書きで要件が決められており、それにそってアプリを作る感じです。基本は自走で頑張る感じです。

初月で気に入ったので私は買切りで30万円払いました。

課題がすべて終わったあとは転職のための自作アプリを作りました。課題の中でDokcer、React、Nodeなどを習っていたのでそれを下に作成しました。あとは自分でAWSやTerraformも勉強しアプリをそこにデプロイしましたね。
その自作アプリ作成期間もメンターの方は軽くサポートしてくれました。

作ったアプリは終活をするためのSNSです。Twitterをほとんど真似して、その中で終活に必要そうな機能を付け加えました。このアプリ作るだけで八ヶ月かかりました。

そのアプリを携えてかなり苦労しましたがエンジニアとして受託会社に入社できました！
そしてその会社は私が入社して二ヶ月で倒産しました笑！理由は単純でお金がなかったみたいです！
ならなんで私を雇ったんだ！

# 疲れたのでとりあえずこのあたりで一旦終了

初投稿なので続きはまた気が向いたら書きます。
でもちょっと変わった未経験者の学習の仕方だったのでもし誰かの参考になっていれば嬉しいです。
最速でコードを書き始める為のテンプレートリポジトリの賢い使い方

## これは何?

新たになにかを作ろうと思い立ったものの，環境構築に時間がかかってしまうことはないでしょうか。

本記事では，GitHubでのリポジトリの共通部分を使い回せるtemplate repositoryの使い方を解説します。
皆様がtemplate repozitoryを使って爆速で開発をスタートしましょう。

---

## template repositoryとは?

[公式ドキュメント](https://docs.github.com/ja/repositories/creating-and-managing-repositories/creating-a-template-repository)

template repositoryを使うと毎回使うファイル等をテンプレートとしてGitHubで管理することができます。

例えば，template repozitoryに登録しておくことでコードをすぐに書き始めることが可能になります。

最近issueやpull requestのテンプレート化やCODEOWNERSファイルを使っている開発現場も増えてきていると思うのでtemplate化には大変意義があると思われます。

---

## template repositoryの使い方

[公式ドキュメント](https://docs.github.com/ja/repositories/creating-and-managing-repositories/creating-a-template-repository)にも記載があるのですが，若干わかりにくかったので図を追加で貼りながら説明します。

1. GitHubのリポジトリを作成する。作成したrepositoryがtemplate repositoryになります。
2. template repositoryに入れたいファイルやディレクトリをGitHubにpushする
  
    ```shell
    git clone <作成したrepository名>
    # いろいろ追加する
    git add .
    git commit -m "コミットメッセージ"
    git push -u origin main
    ```
3. GitHubからrepositoryの設定を変更してtemplate repositoryとして使えるようにチェックをいれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/2035c2ee-2146-8ab0-e373-90cf8e36488f.png)
4. 新たにrepositoryを作成する際にtemplate repositoryを選択することでtemplate repositoryの内容がコピーされたリポジトリを作成することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3718390/b9358d8b-a72b-7d5b-5116-87c3accbf032.png)

---

## 自分のtemplate repositoryの紹介

参考までに自分のtemplate repositoryを置いておきます。
よく使う言語があればtemplate repositoryは複数作成できるのでよく使う言語があれば言語に特価したものを作ると良いと思います。

- [とりあえずの全言語用](https://github.com/RyosukeDTomita/template_repository_all)
- [python用](https://github.com/RyosukeDTomita/template_repository_python)

---

## さらなる効率化を求めて

template repositoryは以前に記事を書いたDev Container等とも相性が良いと思います。Dev Containerを使ったことがない方はぜひ使ってみるとおもしろいと思います(上記の[python用](https://github.com/RyosukeDTomita/template_repository_python)のtemplate repositoryはDev Containersを使っています)。

https://qiita.com/sigma_devsecops/items/79db1640d1a1cd82343d

次回はdotfilesを使ってさらに開発環境をエンハンスする方法を紹介する予定。
Routerでのphx.gen.auth権限設定

# 目的
ログインしているユーザーのみ参照できるページを作る

# プロジェクト作成
```
$ mix phx.new auth_experiment --database sqlite3
$ cd auth_experiment
$ mix ecto.create
```
# 認証を作る

```
$ mix phx.gen.auth Accounts User users
$ mix deps.get
$ mix ecto.migrate
```

# 認証済みの時のページ作成

```elixir:lib/auth_experiment_web/live/page_ok_live.ex
defmodule AuthExperimentWeb.PageOkLive do
  use AuthExperimentWeb, :live_view

  @impl Phoenix.LiveView
  def mount(_params, _session, socket) do
    {:ok, socket}
  end
end
```

```html:lib/auth_experiment_web/live/page_ok_live.html.heex
<h1>認証済みページ</h1>
```

# Routerでのphx.gen.auth権限設定

```diff_elixir:lib/auth_experiment_web/router.ex
defmodule AuthExperimentWeb.Router do
  # 〜省略〜
  scope "/", AuthExperimentWeb do
    pipe_through [:browser, :require_authenticated_user]

    live_session :require_authenticated_user,
      on_mount: [{AuthExperimentWeb.UserAuth, :ensure_authenticated}] do
+     live "/pageok", PageOkLive, :index
      live "/users/settings", UserSettingsLive, :edit
      live "/users/settings/confirm_email/:token", UserSettingsLive, :confirm_email
    end
  end
  # 〜省略〜
end
```

# 実行
```
$ mix phx.server
```
`http://localhost:4000/users/register` でアカウントをつくる

`http://localhost:4000/pageok` にアクセス

ログインし認証済み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295814/95d4b4d3-fafe-3dd9-e501-7c4538ef3739.png)


未認証
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/295814/1c44336f-f607-36f7-c6b4-3153ecff7a42.png)

# ソース(github)
https://github.com/ymn-t-yamanashi/auth_experiment
文章要約で使われるグラフベースを分かりやすく解説

# 解決できる悩み

自然言語処理の要約モデルについて調べていると、lexrankやtextrankのアルゴリズムでは **「グラフベース」での要約** が使われていることが分かる。

ただし、初学者向けにわかりやすくグラフベースの解説について書かれた文章が少ない。
+ 要約モデルのアルゴリズムを知りたい
+ グラフベースの要約について知りたい
+ lexrankとtextrankの元となるアルゴリズムについて知りたい
という要望に答えられればと思います。

# 要約の種類
まず、要約は **抽象的要約と抽出的要約** の2つに分けられる。

+ 抽象的要約 : 複数の文章から **サマリー化した文章を生成** すること。文の長さを短くでき、偏りの少ない文章になる

例）
・BART
・T5
・BERTSUM

+ 抽出的要約 : 複数の文章をまとめている文章を、 **元の文章からピックアップ** すること。簡単に素早く生成できるのがメリット

例）
・TextRank→グラフベースのアルゴリズム
・LexRank→グラフベースのアルゴリズム
・LSA
・SVM

# グラフベースとは？
文章をグラフ構造で表現し各ノード(=文や単語)の関係性を元に要約を作成するという手法です。

そもそも、グラフというのは以下の二つの要素で成り立っています。

+ ノード（頂点）：文章中の **重要な要素（例：単語、フレーズ、文）** を表します。今回の要約モデルではノードは「要約前の文章を分割したもの」を示す

+ エッジ（辺）： **ノード間の関係性** を表す。ここでいう関係性とは、因果関係・類似度・具体と抽象といった関係のこと

例えば、以下の例でいえば
+ ノード : 五島美術館、紫式部、東京、日本、浅草
+ エッジ : 場所、展示美術内容、生誕地、首都、場所
を示しており、モノと関係性を表すのが「グラフベース」の特徴です。

![IMG_0025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326463/28251449-635c-d0f2-10cf-b77a939cbe11.png)

参照元）
https://jpn.nec.com/techrep/journal/g19/n01/190121.html

# グラフベースはどのように使われるのか？

次に、このグラフベースでどのように抽出的要約がされるのか解説する。今回は旅行のブログ記事の文章にある以下の文章の要約を作成することにする。

「私は先週京都を訪れました。京都では有名な寺を訪ね、美味しい食べ物を楽しみました。特に、清水寺が印象的でした。また、地元の料理も堪能できました。」

## 1.ノードへ文章を割り振る
まず、それぞれのノードへ文章を割り当てます。文へ分割し、 **それぞれの文をノードに割り当てます** 。

+ 文1: 「私は先週京都を訪れました。」
+ 文2: 「京都では有名な寺を訪ね、美味しい食べ物を楽しみました。」
+ 文3: 「特に、清水寺が印象的でした。」
+ 文4: 「また、地元の料理も堪能できました。」


## 2.テキスト解析
入力テキストを解析し、 **重要な要素（単語、フレーズ、文など）** を特定する。
例えば、tf-idfで大切な単語を出力、bertにて文脈のベクトルを作る、単語の共起に関するベクトルといった方法が考えられます。

今回tf-idfで大切な単語を抜き出すと以下のようになる

+ 文1: 「京都」、「訪れる」
+ 文2: 「京都」、「寺」、「食べ物」
+ 文3: 「清水寺」、「印象」
+ 文4: 「地元」、「料理」

## 3.エッジを表現しグラフ構築
特定された要素をノードとし、それらの **関係性（意味的類似性や共起性）をエッジとして表現する。** これにより、テキストの構造や内容の関連性が視覚化される。
例えば、コサイン類似度を使ってベクトル化された文章・単語同士の関係性を計算にて求めるといった方法が考えられます。

今回の例で言えば、
+ 文1と文2は「京都」という単語が共通しているため、エッジを引く
+ 文2と文3は「寺」という要素が関連しているため、エッジを引く


## 4.ノード重要度計算
求められた関係性のベクテルから、Pagerank（※）などの方法を使って、 **各ノード（文章）の重要度** を計算する。これにより、テキスト中の最も重要な情報が特定される

今回の例で言えば、
文2は複数のノード（文や単語）と強く関連しているため、重要度が高いと評価されます

 ※Pagerankとは？
 Pagerankとは **「他のノードと関連性が高いノードの方が高い評価を得られる」** という考え方です。つまり、数値の高いエッジが多いノードはPagerankが高く、関連度が高いとできる。Webページの検索順位をつけるために使われている。

 ![IMG_0039.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3326463/9596ae56-a83f-c790-2169-a8a57466ef5b.jpeg)

参照元）
https://ferret-plus.com/631


## 5.重要度から要約生成：
重要度の高いノードを選択し、要約として生成する。
今回で言えば、
+ 文2: 「京都では有名な寺を訪ね、美味しい食べ物を楽しみました。」


今回は文章要約で使われる手法のグラフベースについて解説をしました。気になる点があればご意見いただけますと幸いです！
AWS CLF をサクッとクリア【合格】したい方向けの記事です。

## AWS　CLF 学習記録
![thumbnail_computer_man.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641993/419e8315-3b40-4d3a-13c1-c07372e7dad4.jpeg)


さて、クラウドとはなんぞや？　AWSとは？
から開始したのですが、概ね系統で覚えてしまえばラクだろう。
と思ったので、こちらに私のアウトプットを兼ねて、これから新しいことに挑戦する方への一助となるように記事を書いていきます。



### 演練方法

・単語の意味すらわからなくても、まずは問題をどんどんこなしていく。
　⇨全体像とよく出題される分野が分かってくる。
 ・とりあえず１か月後に試験を申し込んだ。
 　⇨ダラダラは興味が続かない。試験料１６,０００円を無駄にしたいくないバイアス
・１００点を狙わない。
　⇨時間効率を考えて。
 


#### 使用する演練ツールなど
主な学習資料： [クラウドテック](http://qiita.com "Qiita Home")
GoやPythonについても情報があるのでグッド。

マインドマップ：https://gitmind.com/app/docs/mqro0k8u


## 系統で知識を定着させる


マインドマップで
DB,リザーブできる種類、S3、責任共有、セキュリティー　系統別で覚えていく。

リザーブが不要なサービスについての分類
　　S3、Lamda　など
  
SQLで分析するでデータベースの種類
　　Redshift　など
フォトACの写真を黄金比で投稿しよう

＃＃フォトACの写真を黄金比で投稿する手順


１　写真を撮る
２　写真を黄金比に加工する　https://ocadweb.com/aspectratiotools
３　Canvaのキャンバスを番号２の比率と同じにする。
４　画像をキャンバスに背景として設定する。（ぴったり比率どおりの画像ができあがる）
５　ダウンロードを実施
６　サイズが大きければ圧縮する
７　フォトACに投稿

番号１のための技術　　https://ocadweb.com/aspectratiotools
番号３のための技術　https://www.canva.com/ja_jp/


フォトAC 　　　　　　https://www.photo-ac.com/
Power Platformの「環境」って何？

Power Platformには「環境」という考え方があります。
環境という言葉自体は一般的に使われる日本語ですが、Power Platformの話で出てくる「環境」って何なのでしょうか？
Power Platformを始めるタイミングでおそらく多くの方がぶつかるポイントだと思います。

そこの部分の解説をこの記事の中でしたいと思います！

# Power Platform の環境とは？
Power Platformの環境とは、一言で言うと
**「アプリなどを作成、管理、共有するための箱・コンテナー」**
です。

（※）アプリなど＝「Power Apps(アプリ)、Power Automate(フロー)やCopilot Studio(チャットボット)、Power Pages(Webサイト)、Dataverse（データ)等」

環境を家に例えると、家のオーナーは鍵を持ち、家の中の洗濯、料理、掃除を行いますが、子供はその権限を持たず、家に入り、できた料理を食べるだけだったりすると思います。

同じように環境の中でも、ユーザーの権限を制御し、環境の管理者にはフルの権限を与え、アプリを開くだけのユーザーには最低限の権限を与えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9c4618dd-f630-3a65-2f39-53dea8752b0f.png)


一人のユーザーに複数の環境のアクセス権を付与することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/443e57c0-0757-ce53-c00a-fa5c5fd7bfa3.png)

環境の中にいろんなアプリやフローなどが作成されます。
この環境ごとに、「どのユーザーにどこまで触らせるのか」を制御することができるため、通常は**使用する人の部署や開発・テスト・運用のような用途**などで環境を分けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/da3a39a8-008d-b40e-f567-7ea86341a6a8.png)



# テナントと環境の違い
よくテナントと環境を混合して認識してしまうことがあるようですが、ここは明確に違います。
テナントは企業や組織で共通のMicrosoft 365, Office 365の使用権を持つ（同じドメイン(@xxxxx.com)を持つ）ユーザーの箱です。

1つのテナントの中に複数のPower Platform環境を持てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/45819f76-c995-c938-a072-03c144c1c677.png)



# 既定環境
Power Platformの使用を開始すると、テナントに既定環境と呼ばれる1つの環境が自動でできていることに気づくと思います。
Power Platformの活用が始まったばかりはこの1つの環境だけで開発をすることも可能ですが、ほとんどの組織では、複数の環境 (サンドボックス、テスト、運用環境、または複数の地域環境など)を持つことで、管理とセキュリティのレベルを高めて使用しています。

家のたとえで言うと、既定環境はシェアハウス的なもので、全員に鍵が渡されている状態なので、全員が強い権限を持ち、好き勝手いじれてしまいます。（ほかの人が買ってきたプリンを食べることができちゃいます。）
この中で、様々な人が様々な用途で作った複数のアプリやフローなどを保存しておくのは「ヘルシーな状態」ではありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5881b152-ea2e-1d5d-bc8c-c76cfe18a485.png)

あとから管理ができなくなる前に、環境を用意しておくことが推奨されています。



# 実際の画面
Power AppsやPower Automate、Power Pages、Copilot Studioの開発スタジオに入ると、右上に「環境」と表示していますが、これがPower Platformの環境を示します。
「環境」をクリックすると環境の一覧が表示され、別の環境をクリックして切り替えることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b85d2e9e-b116-8068-af7c-bafadc0bfeef.png)



# 環境と一緒に考えることで便利なセキュリティロールとDLPポリシー

環境について理解したら、次に理解するべきはその環境内での権限設定の概念についてです。
環境を分けて用意するだけでなく、
環境と組み合わせて[セキュリティロール](https://qiita.com/skuramoto/items/fe305aac24273c7cccbf)や[DLPポリシー](https://qiita.com/skuramoto/items/abc1eb4626be7de5229b)を設定することで、ガバナンスを効かせることができるようになりますので、このあたりの概念もよかったらご参考ください。



https://qiita.com/skuramoto/items/fe305aac24273c7cccbf

https://qiita.com/skuramoto/items/abc1eb4626be7de5229b
古いQiita記事を見て気づいたことを確認してみた

本橋孝昭です

私は2019年ごろからQiitaで発信をしています。

そのような中で主にSalesforceを中心に記事を書いているのですが、こちらの記事で本来とは違う記載になっていました


https://qiita.com/Takaa/items/e63f23919b35de4930be

作成日は2021年　3年以上前の記事です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/37e2c007-d50b-7595-a32c-b0d39e1daf86.png)

「おかしいな」と思った内容はこちら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/1b68bf43-c08a-bc97-c796-4b789fd9288f.png)


本来ならば
Year__c
Month__c
Day__c

となるはずが
実際は
Year_c
Monthc
Day_c

となっていました

試しに編集をすると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/45a0aa2e-ef2f-38d5-ed1c-57acb0e5a893.png)

このような注意書きがでました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/09b91ab6-74d2-26d3-7dcd-8804f385e5fc.png)


>2022年2月24日にMarkdownのパーサーを変更しました。この記事は変更以前に投稿されたため、今回更新する際に予期せぬ見た目になる場合があります。
お手数をおかけしますが、プレビューをご確認のうえ更新をお願いします。
起き得る見た目の変化については、こちらの記事をご覧ください。


どうやら2022年2月24日に変更があったので2022年2月24日以前の記事は予期せぬ見た目になるようです

設定方法は簡単です。「確認しました」をクリックして「公開設定」をクリックし「記事を公開する」をクリックします


こちらが修正後の内容。正しく表示されていることが分かります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/daa55922-b32b-d5d0-3556-967aa5e0a6da.png)


ぜひ皆さんも2022年2月24日以前に作成した記事があれば正しい記載になっているか確認しましょう

特に今回私が見つけた内容はSalesforce的に問題ある見た目だったので、見つけたときはびっくりしました
Teachable Machineを活用した洪水リスクの早期把握よる防水対策

# 開発の背景
## 1. 想定外の台風・集中豪雨が頻発
近年、想定外の台風や集中豪雨が多発しています。これまで水害とは無縁だと思われていた地域でも、洪水や土砂崩れが発生し、犠牲者が出る事態が相次いでいます。このような状況を受け、洪水情報をいち早く把握し、迅速に判断できるシステムの構築を目指して、Teachable Machineを活用した取り組みに挑戦してみました。

## 2. 櫛田川に隣接する自社営業所が水害を受ける
特に、自社の営業所が隣接する櫛田川では、増水によって周辺地域の排水が追いつかず、しばしば浸水被害を受けています。この問題を緩和するため、駐車場を一時的な貯水地として利用するなどの対策を講じていますが、より迅速なリスク把握と対応が必要だと感じています。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/321a0b0b-004f-f3f3-6226-d7b75f93a86d.png)
その為　気象庁の氾濫情報を待たずに、独自に櫛田川の水位の状況をTeachable Machineを活用して早期に増水を分析することで事前の防水活動に活用したい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/fdd66a88-0166-063d-ecc3-fb836d69e4f6.png)


## 全体のフロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/5581ba44-bada-7e80-a890-fa4d3d6eaadc.png)
## STEP１
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/eddcee78-161b-1e19-dac6-4106176a0a17.png)
## STEP2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/a01cc3ba-5077-4c20-bd38-fa673903667d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/4dbfc252-60bd-bf44-a7f7-de4f45f8a2f6.png)
画像は国土交通省のライブ画像を活用いたしました。
２１個ライブカメラの自社の事業所に一番近い　8番松坂市櫛田橋　を判断としました。
# 動画![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/af992903-1e38-94c8-941e-6ae042b49164.png)

## STEP3
codoPenにて保存　
動画
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/dc8aa609-c55d-8c66-8156-d270a0a3a4ac.png)

## step4
PADを使い　メールで関係部署に増水情報を伝達
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836617/e7bf8a49-1225-dcbd-c143-1c6ebf590183.png)



# 今度の課題
本来は、STEP1からSTEP4までのすべてを自動化することを目指していましたが、それぞれのSTEPで一度確認が必要となりました。
Teachable Machineを他のノーコードツールと連動させることができず、今後の課題となりました
 。
グラフィック液晶に漢字を表示

以前いじったグラフィック液晶で漢字を表示できるようにしてみました。

https://qiita.com/yamori813/items/91c787d96fc2234cf733

AVRのArduinoで漢字フォントを持つには内蔵のflashには入りきらないので、外付けのSDやSPI Flashを使う実装があります。

残念ながらminiのピンをほとんど使いきっているため、そういう方法がつかえません。キャラクタLCDだと4ビットモードがありますが、このグラフィック液晶にはありませんでした。

EPS32などの内蔵flashが大きなマイコンを使った物もあります。しかしマイコンを変更するのは難しいです。

フォントを限定してAVRの内蔵flashに入れるライブラリがありました。

https://github.com/Tamakichi/Arduino-misakiUTF16

このライブラリを使って実装してみました。32Kのflashの68%くらいで収まりました。

https://x.com/yamori813/status/1833397031110643756

フォントの向きが違っていたので、ビット演算して回転させました。

mrubyでutf8の文字列をシリアルで送り出して、それを表示しています。無い漢字もあり、豆腐になりますが、任意の文字列を表示することはないので、事前にチェックしておけばよいと思います。

コントロールコードでASCIIモードと漢字モードを切り替えられるようにしてみました。
Local-First について調べてみた。これを使えばユーザー体験を最高にできそう!

## Local-Firstとは？

Local-Firstは、アプリケーションのデータや処理をローカルで実行し、クラウドやサーバーの遅延を極力排除するアプローチです。これにより、ユーザーは素早くレスポンスを得られ、オフラインでもアプリを使えるようになります。

今回は、Local-Firstの特徴や利点、そして使えるライブラリについて紹介していきます。

### ユーザー体験が良い

Local-Firstの最大の利点は、ユーザー体験の向上です。

- **ローカルにDBがあり反映が早い**
  - サーバーにリクエストを送って結果を待つ必要がなく、データがすぐに表示されます。
- **オフラインでも利用可能**
  - ネットワーク接続がなくても、ローカルに保存されたデータを使ってアプリを継続的に利用できます。後で同期するだけです。

この「待たない体験」は、特にモバイルアプリやウェブアプリで大きな効果を発揮します。ローカルでの処理が中心となるため、アプリのレスポンスが非常に速く、使っていてストレスを感じません。

### モバイルにも力を入れている

Local-Firstはモバイルアプリの開発にも適しています。Flutter、Kotlin、Swiftなど、主要なモバイルアプリ開発フレームワークでも利用可能です。Swiftでは現在クローズドアルファでの対応が進んでいるとのことです。

- **Flutter** や **Kotlin** はすでに対応済み
- **Swift** はクローズドアルファで利用可能

### 同期の仕組み

Local-Firstの大きな課題の一つは、ローカルでデータを持ちながら、どのようにしてクラウドや他の端末とデータを同期するかです。これに対して、**CRDT (Conflict-free Replicated Data Type)** という技術が使われています。この技術を用いることで、複数の端末で編集されたデータが競合することなく同期されるとされています。

CRDTの導入により、ユーザーが複数の端末で同じデータにアクセスしても、データの不整合や競合が発生せず、シームレスな同期が可能になります。


### Local-Firstに対応したライブラリ

Local-Firstアプローチを簡単に導入できるライブラリも存在します。これらのライブラリを使えば、手軽にLocal-Firstの環境を構築でき、開発のスピードも上がります。

- **PowerSync**  
- **Electric-SQL**  
- その他にも多くのライブラリが開発されています。

https://www.powersync.com/

https://electric-sql.com/


## わかっていないこと

この仕組みには多くのメリットがあるようですが、実際に運用する際に気になる点もいくつかあります。

- **表示が本当に早いのか？**  
  - 実際にLocal-Firstを導入した際、どれだけのスピードが期待できるかは検証が必要です。


## 感想

Local-Firstを使えば、ユーザー体験が本当に最高になる可能性があります！  
ただし、同期の競合が本当に発生しないのかや、アクセス制御の仕組みなど、まだ完全には理解できていない部分もあります。アクセス制御に関しては、バックエンドで実装可能だと言われていますが、詳細はもう少し掘り下げて調べる必要がありそうです。

Local-Firstは今後も注目される技術であり、ユーザー体験を向上させるために取り入れる価値は大いにあると感じました。

---

興味のある方は、ぜひLocal-Firstのライブラリを使って、自分のプロジェクトに導入してみてください！
【Error】カンマを入れるの忘れていた。SyntaxError

# はじめに
今回はバリデーションについてのコードを入力後におこったエラーについて紹介したいと思います。

## 環境
- Windows, WSL
- Docker
- Ruby 3.2.3
- Rails 7.1.3


## 1:発生していたエラー画像
[![Image from Gyazo](https://i.gyazo.com/7796a7e9a353f37fe1cb275e00fea1bb.png)](https://gyazo.com/7796a7e9a353f37fe1cb275e00fea1bb)


```
validates :age, presence: true inclusion: { in: User.age_groups }
validates :gender, presence: true inclusion: { in: User.genders }
validates :experience_level, presence: true inclusion: { in: User.experience_levels }
validates :occupation, presence: true inclusion: { in: User.occupations }
```

👆上記バリデーションに関するコードでどうやらエラーが発生しているそうです。調べてみるとエラー原因がわかりました。

### 2：エラー原因
inclusion: の前にカンマ , が必要で、具体的には`presence: true `と` inclusion: `の間にカンマを入れる必要があることがわかりました


### 3：修正
👇カンマを入れるだけでよかった
```
validates :age, presence: true, inclusion: { in: User.age_groups }
validates :gender, presence: true, inclusion: { in: User.genders }
validates :experience_level, presence: true, inclusion: { in: User.experience_levels }
validates :occupation, presence: true, inclusion: { in: User.occupations }
```

# さいごに
コードを入力しているときはもちろんですが、実際にエラー画面を見た時も、エラーの原因がパッとみわかりませんでした。
カンマ漏れに注意です
今回の記事が何か参考になれば幸いです。
O que é o Snaptube?

O <a href="https://snaptube.app.br/">snaptube.app.br</a> é um aplicativo para dispositivos Android que permite baixar vídeos e músicas de diversas plataformas online, como YouTube, Instagram, Facebook e muitas outras. Ele se tornou bastante popular por oferecer uma maneira fácil e rápida de salvar seu conteúdo favorito para assistir ou ouvir offline.

Principais funcionalidades do Snaptube:
Download de vídeos: Você pode baixar vídeos em diferentes resoluções, desde a qualidade padrão até o 4K, dependendo da disponibilidade da plataforma original.
Conversão para áudio: Além de baixar vídeos, o Snaptube permite converter esses vídeos para o formato de áudio MP3, criando sua própria biblioteca de músicas.
Grande variedade de plataformas: O aplicativo suporta um número enorme de plataformas, o que significa que você pode baixar conteúdo de praticamente qualquer lugar da internet.
Interface intuitiva: O Snaptube possui uma interface simples e fácil de usar, tornando o processo de download rápido e eficiente.
Por que o Snaptube era tão popular?
Conveniência: A possibilidade de baixar vídeos e músicas diretamente para o seu dispositivo era muito atraente para os usuários.
Gratuidade: O aplicativo era totalmente gratuito, o que o tornava ainda mais popular.
Por que o Snaptube não está mais disponível em algumas lojas de aplicativos?
Apesar de sua popularidade, o Snaptube enfrentou alguns desafios:

Direitos autorais: O download de conteúdo protegido por direitos autorais sem a devida autorização é ilegal em muitos países. Por esse motivo, o aplicativo foi removido de algumas lojas de aplicativos, como a Google Play Store.
Concorrência: A Google e outras empresas intensificaram suas medidas para combater a pirataria online, o que dificultou a operação de aplicativos como o Snaptube.
É importante ressaltar que o uso do Snaptube pode infringir direitos autorais e é desaconselhado. Se você deseja baixar vídeos e músicas de forma legal, existem plataformas de streaming que oferecem essa opção, como o YouTube Music e o Spotify.

Em resumo, o Snaptube era um aplicativo popular que permitia baixar vídeos e músicas de diversas plataformas, mas devido a questões legais e à intensificação da luta contra a pirataria, ele não está mais disponível em algumas lojas de aplicativos.