OmniAICreator/Qiita-1.07M huggingface dataset:
Deltaのデータパージ - 古いデータをどうすべきか

> **[DatabricksでSparkとDelta Lakeワークロードを最適化するための包括的ガイド](https://qiita.com/taka_yayoi/items/cd199691569fef069a9d)のコンテンツです。**

[Comprehensive Guide to Optimize Data Workloads \| Databricks](https://www.databricks.com/discover/pages/optimize-data-workloads-guide)のセクション[Data Purging — What to Do With Stale Data](https://www.databricks.com/discover/pages/optimize-data-workloads-guide#data-purging)の翻訳です。

:::note warn
- 本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
- 2023年時点の内容です。一部情報が古いものがあります。
:::

Deltaでは、使用されていない古いデータファイルをパージするための[VACUUM](https://learn.microsoft.com/ja-jp/azure/databricks/sql/language-manual/delta-vacuum)の機能が提供されています。この機能は、Deltaによって管理されていないテーブルのディレクトリから全てのファイルを削除し、テーブルのトランザクションログの最新状態に含まれておらず、保持期間の閾値よりも古いデータファイルも削除します。デフォルトの閾値は7日です。

```sql
VACUUM table_name
```

以下のように、必要であればデフォルトの保持期間の閾値を変更することができます:

```
-- table properties
deltaTable.deletedFileRetentionDuration  = “interval 15 days”
```

VACUUMは、*_delta_log*を含むアンダースコア(_)で始まる全てのディレクトリをスキップします。チェックポイントのオペレーションの後に、ログファイルは自動かつ非同期的に削除されます。ログファイルのデフォルトの保持期間は30日であり、`delta.logRetentionDuration`を通じて設定することができます。

![](https://www.databricks.com/sites/default/files/inline-images/alert-icon.png?v=1688736447)

- テーブルに対して同時実行するリーダーやライターによって、古いスナップショットやコミットされていないファイルが以前として使用されることがあるため、少なくとも保持期間を7日にすることをお勧めします。VACUUMがアクティブなファイルを削除すると、同時実行しているリーダーが失敗することがあり、さらに悪いケースでは、コミットされていないファイルをVACUUMが削除した際にテーブルが破損します。
- データとトランザクション履歴が同じ期間保持されるように、`deltaTable.deletedFileRetentionDuration`と`delta.logRetentionDuration`には同じ値を設定しましょう。
- Deltaテーブルに適用されるトランザクションの頻度に応じて、日次/週次でVACUUMコマンドを実行しましょう。
- このコマンドをジョブの一部として実行せず、OPTIMIZEコマンドと一緒に別個かつ個別のクラスターで実行しましょう。
- VACUUMはそれほど計算リソースを必要としない(メインのタスクは、ワーカーで並列実行できるファイルの一覧です。実際のファイルの削除はドライバーによって行われます)ので、1から4台のワーカーを持つ小規模なオートスケーリングクラスターで十分です。


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
素人「雨が降ってむしゃくしゃしたので、SNSのWebアプリつくるしかない」1/n回

## はじめに
雨が降ったのでネットサーフィンしていたら、「未経験者のITエンジニアへの転職はアピールできるものがないと、大変（意訳）」的な記事をいくつか見つけてむしゃくしゃした（実際には不安になった）ので、ポートフォリオ用のソフトウェアを作ろうと思いました。
## 本記事群
+ 素人が四苦八苦学びながら下記Webアプリ（予定）を作成する様子がうかがえる
+ 私が進捗管理、学びのあしあと残しをすることができる
## 自己紹介
+ 大学での専攻、前職は土木
+ 理系大卒で教養レベルのC言語を学習したが、うろ覚え
+ バイトでObjectiv-Cを使用したiPhoneアプリ作成を行ったが、うろ覚え
+ 大学論文研究のデータ整理に必要でPythonを独学したが、体系的な勉強はしていない
+ 趣味でHTML、CSSを使用したホームページを運営している（レンタルサーバを使用、テンプレートをカスタマイズして使用）
+ 職業訓練にてJavaを学習中
## 作るもの
+ 「勉強した」「技術書を読んだ」「技術的な情報共有」ができるSNSWebアプリ
+ 投稿にタグを付与することができ、タグのついた投稿数によって勉強進捗管理が可能
+ SNSのテーマは「土木」、ターゲット層は「土木技術に興味がある人（職業問わず）」
## 開発環境（予定）
+ ホスティングサービス：conoHa VPS（OS:ubuntu 24.04）
+ バックエンド：サーブレット
+ フロントエンド：JSP（Java8,HTML5）,CSS,JavaScript
+ データベース：PostgreSQL

JSP、サーブレットは現在Javaを学習していること、長く安定して使用されている技術をまず習得したいことから選択、PostgreSQLは学習の機会が今後待っていること（知識の混濁を防ぐ）、RDBとしての充実した機能に興味があるところから選択しています。

**しかしここまで来るのにも一難あったのであった（素人なので）**
## 何を作ればいいんだ
転職先を土木・IT両方で探しているので、このポートフォリオ用ソフト、土木転職の自己PRにも使えるなら使いたいのです。
そのため土木の人からしても閲覧しやすく、私の性質、能力アピールがくみ取れるようなソフトを作る必要がありました。

というわけでまず作るものは**Webアプリであり、オンラインに公開すること**としました。
## Webアプリの内容を考える
かつてのバイト先の先輩が「**サービスは自分が欲しいものを作るといいよ**」って言われていたので、「土木の資格試験とか技術書とか、情報交換気軽にできる場がないのでほしい！」と欲望のままに「**土木の学習に関するSNS**」をメインテーマにしました。
投稿ついでにタグを付与し、タグ付きの投稿数から勉強進捗管理もするとやる気も出るかもしれないですね。SNSテーマとタグ内容を変更できれば汎用性も高そうな。

ホームページ運営経験があるため、
+ 検索エンジンのクローラーに見つけてもらう期間が必要
+ いきなりでかいものを作ろうとするとつまずいたときに完成しないので、段階的に完成（バージョンアップ）させていくことが大切（という気がする）
+ 使い方が感覚的に理解できて、手間なく気軽に扱えて、便利なものだとユーザーに使ってもらいやすい傾向にある
ということで、段階的完成と、ユーザー側から見てシンプルな機能を心掛けつつ完成図をイメージしていきます。ただし技術的に可能かどうかは別問題なので軌道修正は逐次かけつつ。

アプリ内容を考えるのに下記記事も参考にさせていただきました。
ユーザーに使ってもらえるアプリって何だろうとか、計画の立て方、アプリを作るのに何が必要か考えるやり方などです。
https://qiita.com/kd9951/items/92cc7bb14c1fbfcb6dab

## Webアプリの内容
### 【段階1】仮置きページ
・クローラーに感知してもらうためのもので、最悪「堂々完成予定！」でもよい
### 【段階2】基本的な機能があるSNSサイト
・ユーザー登録、編集、削除ができる
・公開用ユーザープロフィールの編集ができる
・メッセージ投稿、削除ができる
・タイムラインを閲覧できる
・セキュリティ的な整備（以降随時）
### 【段階3】サブとなる機能があるSNSサイト
・投稿に付与されたタグより抽出したタイムラインを閲覧できる
・タグが付与された投稿数から進捗グラフを表示できる
・自他の投稿へコメントができる
### 【段階4】あったらうれしい機能があるSNSサイト
・「応援」「お疲れ」「N値爆上がり」「(v⋅∇)v」「おやすみ湿潤養生」などの簡単な挨拶ボタンの設置
・自己紹介的にバッチが付けられたら面白いかも？
・検索フォーム
・他思いつけば
## さっそくぶち当たる技術的問題
### 開発環境を何にするか
割と皆目見当もつかなかったので、いろいろ人に相談したり調べたりした上で、上記開発環境に落ち着きました。素人、必要ツール、言語、何もわからない。

レンタルサーバはすでに借りていたので「これを使おう～！」と思っていたら**Javaが動く仕様じゃない**ことを知る。（PostgreSQLも動く仕様じゃなかったんですが、これは環境を導入していないだけではと思っています。どうなんだろう。）

VPS（仮想専用サーバ）だとJava動きますね。なぜだ。調べつつ考えてみたのですが、共用サーバだとほかのユーザーに干渉するので、例えばうっかりデプロイ後にJavaプログラムが暴れだす（意図しない無限ループとか）と他のユーザーにめちゃくちゃ迷惑がかかる…といった理由なのかなと思いました。またはっきりとした理由を見つけたら追記しましょう。
## 閑話休題
こうして開発環境と作りたいものが固まったのであった。
話は現在に戻りまして、さっそく行動に移すのです。
## アプリづくり何から始めよう？
素人はここから手さぐり。ひとまず現状下記の通りに行動しようかなと計画を立てました。
+ 開発環境や作りたいWebアプリの原点の考え、根拠を整理する、まとめる、記録する（今ココ）
+ SNSのWebアプリを作っている人のコードや記事を読みまくる（今ココ）
+ 技術を無視してUIデザインを考える（ザックリ書いた）
+ 開発環境を整える（IDEとしてeuripus、GitHub）(終了)
+ conoHaVPSの環境を整える
+ 段階1を作成、デプロイ【遅くとも11月中まで】
+ 理想のUIデザインに寄せはするが、あくまで「機能すること」を優先し、とりあえず段階2を目指して書いてみる
+ 理想のUIデザインに寄せる努力をする
+ 段階2のデプロイ【12月中旬までにできると嬉しい】
+ 段階3のデプロイ【1月中旬までにできると嬉しい】
+ 段階4のデプロイ【2月より前にできると嬉しい】

おそらく開発中に「そんな作業があったとは」とか、「思ったんと違う」「そもそも知らん」とかいろいろあるかと思いますし、期間に関する計画も完全に決め打ちなので大きくブレると思います。その時は適宜修正、PDCAサイクル的なものをくるくる回すということで。

今回はこのくらい！頑張ります！
NeurIPS著者がGithub Pagesでウェブページを整備してみた話

## はじめに
この記事は「[ただただアウトプットを癖付けるための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/newbie2024)」に投稿した記事です。

[最初の記事](https://qiita.com/yotabouya/items/e63c53c5e18b3cf6a454#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)にも書いた通り、私は生物物理の実験を専門にしている研究者です。
最近はデータ解析のため機械学習のコード開発も行っており、幸いにもその成果が[NeurIPSに採択されました](https://neurips.cc/virtual/2024/poster/93465)。

[前の記事](https://qiita.com/yotabouya/private/5d4b67949b15ea621805)では、今更ながらGithub Skillsのチュートリアルをやってみました。
そこで得られた知識をアウトプットする意味も込めて、今回はGithub Pagesを使ってウェブページを整備してみました。

## 関連記事

#### 前の記事 「[NeurIPS著者がGithub Actionsでタスク管理の効率化を測ってみた話](https://qiita.com/yotabouya/private/6df01732c0c0aa8171c4)」

#### 次の記事「[【生物物理屋による論文紹介】EVO - 分子からゲノムまで、マルチスケールで扱うLLM](https://qiita.com/yotabouya/private/8d66a50ce830481863c1)」

## Github Pagesとは

Github Pagesは、Github上でホスティングされるウェブページを作成するための機能です。
Github上にリポジトリを作成し、そのリポジトリにウェブページのコードをプッシュすることで、ウェブページを公開することができます。
基本的にはReadME.mdをそのままウェブページとして公開することもできますが、HTMLやCSS、JavaScriptなどを使って自由にカスタマイズすることもできます。

## 作成手順

こちらはGithub Skillsにもあります。[前の記事](https://qiita.com/yotabouya/private/5d4b67949b15ea621805#github-pages)で概要だけまとめてあります。

1. Github上でリポジトリを作成
2. リポジトリにウェブページのコードをプッシュ
3. Github Pagesの設定を行う

## 今回のウェブページ

今回は、２つのウェブページを作成しました。

1. [自分のウェブページ](https://masahitouwamichi.github.io/MasahitoUWAMICHI/)
2. [NeurIPS論文のSupplementary Movieをまとめたページ](https://masahitouwamichi.github.io/collectiveMotionNN/collectiveMotionNN/movies/)

## 1. 自分のウェブページ

とりあえずリンクだけ張ってみました。Google ScholarとORCIDのものです。
今後は、自己紹介や研究内容、ブログなどを書いていく予定です。

## 2. NeurIPS論文のSupplementary Movieをまとめたページ

NeurIPSに採択された論文のSupplementary Movieをまとめたページです。
今回の論文では生物の群れ行動のモデル化を取り扱いました。
この群れ運動のシミュレーション結果を動画でまとめているのですが、これを複数の要因に関して比較することが重要になっています。
- 異なる数理モデルに対するシミュレーション結果の比較
- 教師データとしての上記結果と、学習したニューラルネットワークによる予測結果との比較
この２つの視点を念頭に、[動画をまとめたページ](https://masahitouwamichi.github.io/collectiveMotionNN/collectiveMotionNN/movies/)を作成しました。

前提条件として、githubのリポジトリに動画を置いてあります。
同じフォルダに、github pagesでデプロイされるReadme.mdを作成しました。

欲しかった機能は以下の通りです。
- 閲覧者が、比較する動画を選んで表示できる
- 動画のサイズを調整できる
- 動画を同時に再生できる

出来上がったページは上のリンク先の通りですが、以下にスクリーンショットを載せておきます。
![2024advent04_page_screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728221/7708863c-9726-0c8f-4244-d689de8682cf.png)

教師データにあたる動画と、推定結果にあたる動画をそれぞれ別の行に並べました。
そして、▼で動画の表示/非表示を切り替えられるようにしました。
また、Play Open Videosボタンを押すと、表示されている全ての動画が同時に再生されるようにしました。
これで、好きな動画を選んで比較しながら見ることができるようになったと思います。
ポートフォリオ作成時メモ　part4   ~設定とメッセージの日本語化~

## はじめに
こんにちは、未経験からエンジニア転職を目指しているものです。
オンラインスクールで本格的に学習して6ヶ月目に入りました。PHP,Laravelを学習しポートフォリオを作成中です。ポートフォリオ作成手順及び、エラー内容を中心に記録していこうと思います。今回は設定とメッセージの日本語化を行いました。本投稿は流れのメモが重点になっておりますので、削除した部分や追加した部分の詳細は割愛致します。

## 実施内容
**変更したディレクトリ**
- .env
- ./config/app.php

**実施コマンド**
```
./vendor/bin/sail artisan lang:publish
./vendor/bin/sail composer require askdkc/breezejp --dev
./vendor/bin/sail artisan breezejp
```

## 次回実施内容
- ログイン画面の編集


最後までご覧いただき本当にありがとうございました！！
AI エディタの Cursor 使ってみた

Cursor を使ってみたので、インストール手順から実際に使ってみた感想まで整理しました。

## 対象読者

- Cursor に興味がある方
- Cursor をこれから使う方

## 前提

OS は mac を使用しています。
そもそも Cursor が何かという説明はしません。

## Cursor のインストール

1. 以下の公式サイトからインストーラーをインストールします
    [https://www.cursor.com/](https://www.cursor.com/)

1. インストールされた zip を解凍します

1. `Install Cursor.app` を実行して、Cursor をインストールします

1. インストールした Cursor を起動します
    起動すると、VSCode にインストールしている拡張機能を Cursor にもインストールするか聞かれます（便利）

1. Cursor のアカウントを作成します
    Google アカウントなどを使って簡単にアカウントを作成できます

アカウント作成まで完了すると Cursor を使用することができるようになります。  
自動で二週間のトライアルが開始されるようです。トライアルでは無料で LLM を使用でき、トライアル期間が終了すると課金するか API Key を設定することで継続して使用できます。

## Cursor でのコーディング

UI 自体は VSCode とほぼ同じです。（意識して VSCode に寄せているのだと推測しています）

![スクリーンショット 2024-11-17 17.40.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/2f9caf98-389d-fb2e-0a4a-a1407a6c92c4.png)

右側のウィンドウから AI に質問できます。

![スクリーンショット 2024-11-17 17.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/5cbd768a-ed11-bfe3-62ab-42f9d23f3643.png)

LLM のモデルも選択可能です。

![スクリーンショット 2024-11-17 12.07.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/68d5964d-7f85-0c66-19af-d9929c1f32be.png)

アクティブなファイルを自動で読み込んでくれるので、ファイルの中身をチャットに貼り付けて質問する手間が省けます。

![スクリーンショット 2024-11-17 12.13.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/57814a73-bffd-ae19-77a8-9bf54a33501d.png)

`command+L`で選択範囲をチャットに貼り付けることもできます。

![スクリーンショット 2024-11-17 17.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/4393a850-42d1-32a4-ac65-4e72d43537f4.png)

## まとめ

VSCode の UI とほぼ同じかつ拡張機能をそのままインストールしてくれるので、VSCode を利用している人は簡単に乗り換えできると思います。  
トライアル期間以降は料金がかかりますが、セットアップは簡単なので試しに使ってみるのもいいと思います。

## 余談

GitHub Copilot も仕事で使っていますが、もう AI を使わないコーディングには戻れないほど便利ですね。  
上手く使いこなせるように色々と試したいと思います。
ライティングもコーディングもこれ1つ！ChatGPT-4o with Canvasの詳細と使い方まとめ

# はじめに
AI界隈は日々本当に目まぐるしい進化を遂げていますね。
そんな中でも特に多く利用されているChatGPTですが、今回10月のアップデートでChatGPT-4o with Canvasという機能がbata版で利用できるようになっています。
こちらに関して概要と使用方法をまとめたいと思います。

# 1. ChatGPT-4o with Canvasの概要
ChatGPT-4o with Canvasは、OpenAIが提供するAIツールで、2024年10月3日より公開された新機能です。
現時点ではまだbata版になりますが、主にライティングやコーディングのタスクを効率的に行える新しい共同作業環境を提供します。
主な機能としては以下4つになります。

- リアルタイムエディタ
   - チャットしながらコードや文章の直接編集が可能
- ライティング支援
   - 構成案の提案、文法修正、他言語への翻訳
- コーディングサポート
   - バグの修正、コードレビュー、最適化提案
- バージョン管理
   - 編集履歴を追跡可能で、プロジェクト管理に最適

また、現時点ではChatGPT Plus、Team、Enterprise、Eduプラン加入者のみ使用できる状態です。
こちらの記事を執筆日時点では無料ユーザーへの提供は未定となっています。

# 2. 使用するメリット
#### 1. 作業効率の大幅な向上
- 一貫した作業環境
チャットと編集を1つのツールで行えるため、従来のように複数のアプリケーションやツールを切り替える必要がありません。たとえば、文章執筆では下書きから推敲、仕上げまで一貫して行えます。

- リアルタイムなサポート
ライティング中に文法や構成のアドバイスを即座にもらえるほか、コーディング中にエラーや最適化案がその場で提示されます。これにより、フィードバックを待つ時間が削減されます。

#### 2. 高品質なアウトプットの実現
- プロフェッショナルな提案
提案される文章やコードは、AIが大量のデータをもとに最適な形式や言葉選びをサポート。たとえば、技術ブログ執筆では読者に分かりやすい表現が自動提案されます。

- エラーの自動修正
コーディング時のバグやライティング時の誤字脱字をAIが自動検出し、修正案を提示します。エンジニアであれば、デバッグにかかる時間を短縮可能です。

#### 3. 学習効果とスキルアップ
- 新しい技術や表現を学べる
プロンプトを入力することで、最適なコーディング手法や文章表現を学習できます。たとえば、Kotlinの最新トレンドを使用したサンプルコードを提案してもらうことも可能です。

- フィードバックを受けながら改善
タスクを進めるたびにAIが提供するフィードバックを活用すれば、ライティングスキルやコーディングスキルを自然に向上させられます。

#### 4. チーム作業の効率化
- 共同作業に最適
チームで同じプロジェクトを進行中の場合、エディタ内で共有タスクを簡単に分担できます。
また、バージョン管理機能を活用することで編集履歴を追跡でき、誰が何を変更したのかを明確化できます。

- プレゼン資料作成の簡便化
ドキュメントやスライドの構成案をAIが提案するため、チーム内でのレビュー時間が短縮されます。

#### 5. 柔軟性とカスタマイズ性
- 多用途な活用
ブログ執筆、マーケティング資料作成、プログラムコードの最適化など、多岐にわたる用途に対応。
たとえば、技術系スタートアップでは、プロダクト紹介のプレゼン資料を短時間で作成できます。

- プラグインや統合機能との連携
将来的に他のツールとの統合が進むことで、さらに活用範囲が広がる可能性があります。

#### 6. ストレス軽減とクリエイティビティの向上
- 単純作業の削減
文章校正やコードのフォーマット修正などの反復的なタスクをAIが自動で処理するため、クリエイティブな作業に集中できます。

- AIによるインスピレーション
記事のアイデアやユニークなアプローチを提案してくれるため、行き詰まりを防ぎます。特にライターやデザイナーにとっては、発想の幅を広げる効果が大きいです。

# 3. 利用方法
利用方法は非常に簡単です。
1. まずはChatGPTにログインします
2. モード選択で「ChatGPT-4o with Canvas」を有効化

![スクリーンショット 2024-11-17 17.17.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/9a5b0b40-1716-278c-f280-a7eb3b245e5e.png)

2. プロンプトを入力してAIと連携開始します、今回はPythonの指定したタスクを実行可能なプロンプトを生成させます

![スクリーンショット 2024-11-17 17.24.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/cbf97a10-56ca-22e3-568a-053b2cb1bbe3.png)

※必要に応じて以下のようにエディタで直接編集可能です。

![スクリーンショット 2024-11-17 17.26.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/723f83ea-9280-7d07-563b-3ff4ef06328f.png)

3. 作業が終わったら結果をエクスポートもできます

# 4. 実際に使ってみた感想
初めて使ったとき、従来のチャット型AIとの大きな違いに驚きました。
一番の特徴は、チャット結果を即座にCanvasエディタに反映し、直接編集が可能な点です。
特に長文の文章やコードを書いているとき、リアルタイムで内容を見直しながら進められるため、非常に直感的で使いやすいと感じました。

一方で、Canvasとチャット部分の切り替え操作が複雑で少々戸惑う部分があったり、非常に長い文章や複雑なコードを扱うときに、少し処理が遅くなる場面がありました。
また、プロンプトの保存や頻繁に使う設定のテンプレート化などカスタマイズ性に課題がありそうです。

ただし、上記課題感を簡単に払拭できるくらいライティング・コーディング・プロジェクト管理のあらゆる場面で有用性が高く、特に効率重視の作業をサポートするツールとして非常に優秀だと感じました。

現時点ではbata版なのでこれからどんどん改善されていくと思いますし、今後が非常に楽しみです。

# さいごに
親知らずを抜きました、痛すぎて眠れません・・・
Xcode 16.1 & Swift 6: UNUserNotificationCenter でクラッシュする問題を非同期APIで解決する

## はじめに
Xcode 16.1 で Swift 6 環境を使用していると、`UNUserNotificationCenter.current().requestAuthorization` を使った通知許可リクエストでクラッシュが発生する場合があります。しかもエラーログに原因が出力されずAIに聞いても解決できませんでした。最新の環境限定のエラーはAIはそれらしい返答は返してくるので余計に時間かかりますよね。

この記事では、この問題の原因と、その解決方法を解説します。
## 問題の概要
以下のコードは、通知許可をリクエストする一般的な方法ですが、このコードを Swift 6 環境で実行すると、クラッシュが発生します。
```swift
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

func configureNotification() {
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions) { granted, error in
        if let error = error {
            print("通知許可エラー: \(error.localizedDescription)")
        } else if granted {
            print("通知が許可されました")
        } else {
            print("通知が拒否されました")
        }
    }
}
```
### **クラッシュの原因**
Appleの [DTS Engineer](https://forums.developer.apple.com/forums/thread/764777) によると、このクラッシュの原因は、Swift 6 のコンパイラがクロージャの実行スレッドを誤ってメインアクターと認識してしまうことにあります。

この問題により、メインアクター上で実行されていないとクラッシュが発生します。

## 解決方法: 非同期APIの利用
この問題を解決するには、`UNUserNotificationCenter` の **非同期関数版** を使用します。

```swift
private func configureNotification() {
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]

    Task {
        do {
            // 非同期で通知許可をリクエスト
            let granted = try await UNUserNotificationCenter.current().requestAuthorization(options: authOptions)
            if granted {
                print("通知が許可されました")
                DispatchQueue.main.async {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            } else {
                print("通知が拒否されました")
            }
        } catch {
            print("通知許可エラー: \(error.localizedDescription)")
        }
    }
}
```
## 解説
### **ポイント1: 非同期処理でクラッシュを回避**
- `Task` を利用して非同期コンテキストを作成し、`await` を使用して非同期関数を安全に呼び出します。
- これにより、Swift 6 のメインアクター関連のバグを回避できます。

### **ポイント2: メインスレッドでの操作**
通知が許可された後の `UIApplication.shared.registerForRemoteNotifications()` はメインスレッドで実行する必要があるため、`DispatchQueue.main.async` を使用しています。

## 関連リンク
- [Apple Developer Forums: UNUserNotificationCenter Crash](https://forums.developer.apple.com/forums/thread/764777)
- [Firebase Push Notifications Documentation](https://firebase.google.com/docs/cloud-messaging/ios/client)
【Django Webアプリ開発】CRUDブログ作成[1]

## はじめに
&emsp;今回は最近流行りのPythonのwebアプリフレームワークdjangoでwebアプリの基本となるCRUDブログを作成していきます。最終的にはPythonならではの機械学習と連携させたアプリに仕上がれば良いなと思ってます。(希望)それでは始めていきましょう！
## 環境設定
&emsp;まずはDjangoでwebアプリケーションを作成するためにライブラリをインストールしましょう。Pythonは既にインストールされている前提で進めていきたいと思います。
### ライブラリ一覧
まとめてライブラリをインストールできるようrequirements.txtを作成しましょう。
```requirements.txt
bleach==6.2.0
Django==5.0.7
django-allauth==0.63.6
django-bootstrap4==24.3
django-js-asset==2.2.0
django-summernote==0.8.20.0
pillow==11.0.0
tinycss2==1.4.0
```
## プロジェクト作成
それでは早速Djangoを使用してwebアプリケーションを作成しましょう。今回は「"C:\Development\django"」下にプロジェクトを作成します。
### 任意のディレクトリを移動する
コマンドプロンプトを開いて以下コードでプロジェクトを作りたいフォルダに移動しましょう。
```
cd C:\Development\django
```
### 仮想環境を設定する
「"C:\Development\django"」下に"venv"という名の仮想環境を作成します。
作成した"requirements.txt"をdjangoディレクトリ下に移動します。
```
python -m venv venv
```
仮想環境を作成後、仮想環境を使用するためにactivateします。
```
.\venv\Scripts\activate
pip install -r requirements.txt
```
> 以下のようなエラーが発生することがあります
:::note warn
エラーコード
○○に注意してください。
myvenv\scripts\activate : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Python\Test\myvenv\scripts\
Activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?Li
nkID=135170) を参照してください。
発生場所 行:1 文字:1
+ myvenv\scripts\activate
+ CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
スクリプトの実行が無効になっているようです。
:::
:::note info
対処法
コマンドプロンプトでのSet-ExecutionPolicyの設定値によるセキュリティエラーなので、変更を行います。RemoteSignedは、ローカルに保存されているスクリプトは実行でき、インターネットからダウンロードしたスクリプトは、署名されているもののみが実行可能という設定です。
```
Set-ExecutionPolicy RemoteSigned
```
:::
### プロジェクトを作成
仮想環境の設定が完了したので、プロジェクトを作成していきましょう。今回は「"C:\Development\django"」下に"config"という名前のプロジェクトを作成します。
```
django-admin startproject config .
```
以下のような構成で"config"プロジェクトが作成されます。
```
django
  └─manage.py
  └─config
        └─asgi.py
        └─settings.py
        └─urls.py
        └─wsgi.py
        └─__init__.py
        
```
## アプリ起動
ここまで来たら一度djangoアプリを起動してみましょう。
```
python manage.py runserver

>>Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
November 17, 2024 - 17:31:55
Django version 5.0.7, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
```
以上のように表示されたらdjangoアプリの起動が成功しました。
任意のブラウザを起動しURL欄に http://127.0.0.1:8000/ を入力しアクセスしてください。

![Django起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3933843/20e47a10-2a71-2a0a-4f9d-591be526e51f.png)

このようなロケットの画面が出てきたら無事プロジェクトの作成が完了しました。
お疲れさまでした！！次回はいよいよ新規アプリケーションを作成していきます。

[次回](https://qiita.com/Kohei-Tk/items/4e2c02c6b91bc9742d5e)へつづく、、、
IBM i の既存プログラムを活かしたハイブリッド開発（おまけ）

IBM i の既存プログラムを活かしたハイブリッド開発した際に、SQLのストアド・プロシージャや、ユーザー定義関数を作成しました。
これらを作成しているうちに、引数の数を変更するケースがあるかと思います。
例えば次の様な場合
```SQL:変更前の作成時
CREATE OR REPLACE PROCEDURE
  USHIDA@Q24.MY_ZEIKOMI1
  (
    IN  IN_KING1 NUMERIC(011 ,00)
   ,OUT OT_KING2 NUMERIC(011 ,00)
  )
  LANGUAGE RPGLE
  EXTERNAL NAME 'USHIDA@Q24/Q240101R(MY_ZEIKOMI)'
  PARAMETER STYLE GENERAL
;
```
```SQL:変更後の作成時
CREATE OR REPLACE PROCEDURE
  USHIDA@Q24.MY_ZEIKOMI1
  (
    IN  IN_KING1 NUMERIC(011 ,00)
   ,IN  IN_HOGE1 CHAR(001)
   ,OUT OT_KING2 NUMERIC(011 ,00)
  )
  LANGUAGE RPGLE
  EXTERNAL NAME 'USHIDA@Q24/Q240101R(MY_ZEIKOMI)'
  PARAMETER STYLE GENERAL
;
```

変更時に`USHIDA@Q24.MY_ZEIKOMI1`の実体は、置き換えられておりません。引数の数ごとでそれぞれ、ストアド・プロシージャや関数の実体は存在しており、**固有名** が別途割当られております。
次のSQLでその様子がわかります。
```SQL:ストアド・プロシージャや関数の固有名を参照する
 SELECT ROUTINE_NAME, SPECIFIC_NAME  
       ,PARAMETER_STYLE, ROUTINE_TYPE 
       ,IN_PARMS,OUT_PARMS,INOUT_PARMS
   FROM QSYS2.SYSROUTINE              
   WHERE ROUTINE_SCHEMA = 'USHIDA@Q24'
     AND ROUTINE_NAME = 'MY_ZEIKOMI1'
```

実際に実行すると次の様に表示されます。
![20241225-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/074756ce-0c80-b605-5f0d-75efe9915173.png)

一つしか存在していない場合は `DROP PROCEDURE` や `DROP FUNCTION` で削除できますが、複数の同名が作成された場合は削除出来ません。次の様になります。

```SQL:DROP失敗例
DROP PROCEDURE USHIDA@Q24.MY_ZEIKOMI1
SQL 状態: 42725 ベンダー・コード: -476 メッセージ: [SQL0476] ルーチンUSHIDA@Q24のMY_ZEIKOMI1が固有でありません。
 原因－－関数またはプロシージャーUSHIDA@Q24のMY_ZEIKOMI1がシグニチャーまたは特定の名前によらずに指定されていて，そのルーチンの複数のインスタンスが見つかりました。あるいは，このプロシージャーが，リモート・システムへの接続時に，スキーマ名が指定されていないDESCRIBE PROCEDUREステートメントまたはASSOCIATE LOCATORステートメントで使用され，かつその名前で複数のプロシージャーが呼び出されました。回復手順－－ルーチンは，特定の名前またはシグニチャー（パラメーター・タイプ付きの関数名またはプロシージャー名）のいずれかによって要求します。これがDESCRIBE PROCEDUREステートメントまたはASSOCIATE LOCATORステートメントに対するものである場合は，プロシージャーのスキーマ名を指定してください。要求を再試行してください。
強調表示されたステートメントが正常に完了しなかったため、処理が終了しました
```
もしこれらを削除する時は **固有名** 側で削除しなければなりません。その場合は、さきほどのSQLで参照した`SPECIFIC_NAME` を指定し以下のSQL `DROP SPECIFIC ～` で削除します。

```SQL:DROP成功例
DROP SPECIFIC PROCEDURE USHIDA@Q24.MY_ZE00001
ステートメントは正常に実行されました   (20 ミリ秒) 
```

この様に引数毎に定義されており、意識していないと思わぬ事が起こる可能性もあるので気をつけましょう！

予め作成する際のSQLで `CREATE 〜 SPECIFIC--specific-name-` を指定して任意の固有名とすることも出来ます。指定がない場合はシステムで自動的に生成されます。
リモートリポジトリにpushできない時の対処法

久しぶりにvscodeを開いて画面とにらめっこした後、コミットしてプッシュしようとしたら
```shell
参照仕様をリモートにプッシュできません。最初に 'Pull' を実行して変更を統合してください。
```
と言われた。
強制pullしても治らず...
## 解決法
configでemailを設定してるが、Githubの設定ではemailをプライベートにしていたことが原因だった。

Githubで、`Settings->Email->Keep my email addresses private`の
`12345678<ユーザ名>@users.noreply.github.com`をコピーしてconfigを変更する。
```shell
git config --global user.email "コピーしたアドレス"
```



### 参考
https://zenn.dev/kaluna_hart/articles/github-email-error
LaravelでTwitterログインを実装した際にハマったポイントと解決策

# はじめに

Laravelで作成したサイトにTwitter（現在はX）のログイン連携機能を追加した際、認証周りでエラーに悩まされました。
この記事では、同じようにTwitterログインを実装しようとしている方に向けて、遭遇したエラーの原因とその解決方法を詳しく解説します。

## やりたいこと
Ｘ(旧Twitter)から提供されている認証APIを利用した、ログイン機能の実装をしたい。

## 環境
- **PHP Version**: 8.2.12
- **Laravel Framework**: 11.30.0

## 準備

まずはTwitterの開発者アカウントを作成し、以下の情報を取得します。

1. **Consumer API Key**
2. **Consumer API Secret**
3. **レスポンスURLの登録**

### 参考記事

- [Twitter API v2(X API Free)の使い方・移行(2024年)【GAS】](https://qiita.com/neru-dev/items/857cc27fd69411496388)

## 実装
次に以下の記事を参考に、laravelの設定を進めます。

### 参考記事
- [LaravelでTwitterログインを実装する](https://qiita.com/tiwu_dev/items/8ac86977344a1a97f9d2)

上記の記事に従い、実装を進めました。（Laravel 5.5以上では、config/app.php の設定が不要ですので、そこは省略しています）。

## ハマったポイント

実装中に最も悩んだのは、config/services.php の設定部分でした。以下のように設定していたのですが、実行すると次のエラーが発生しました。

```php
'twitter' => [
    'client_id' => env('TWITTER_CLIENT_ID'),
    'client_secret' => env('TWITTER_CLIENT_SECRET'),
    'redirect' => env('TWITTER_REDIRECT_URI'),
],
```

### 発生したエラー

```php
Received HTTP status code [401] with message '{"errors":[{"code":32,"message":"Could not authenticate you."}]}'
```

このエラーメッセージには具体的な理由が記載されていなかったため、原因の特定に苦労しました。

## 原因

2024年から、Twitter（X）はAPIの仕様を変更し、認証に関するAPIも変更されました。
新しいAPIでは、OAuth 2.0 を使用する必要があるため、それに合わせた設定が必要でした。

## 解決策

公式ドキュメントを参考にしたところ、OAuth 2.0を利用するためには、`config/services.php` の設定を変更する必要があることがわかりました。
デフォルトではOAuth 1.0が指定されており、これをOAuth 2.0に変更する必要があります。

### 設定変更 (`config/services.php`)

#### 変更前の設定
```php
    'client_id' => env('TWITTER_CLIENT_ID'),
    'client_secret' => env('TWITTER_CLIENT_SECRET'),
    'redirect' => env('APP_URL') . '/login/twitter/callback',
],
```

#### 変更後の設定 

```php
    'client_id' => env('TWITTER_CLIENT_ID'),
    'client_secret' => env('TWITTER_CLIENT_SECRET'),
    'redirect' => env('APP_URL') . '/login/twitter/callback',
    'oauth' => 2,  // OAuth 2.0を使用する設定を追加
],
```

この変更を加えることで、認証エラーが解消され、認証が正常に成功しました。

## まとめ
2024年からTwitterはX APIに移行し、認証に関するAPIが変更されたため、config/services.phpの変更が必要でした。
ポストの投稿やリポストについては、引き続きOAuth 1.0の利用が必要とのことですので、その場合は、OAuth 2.0の設定は不要かと思われますので、認証にのみ利用する方がハマるのかなと思われます。

大きな変更があった場合には公式のドキュメントを参考にする必要があることを学びました。

## 最後に
はじめまして、スガイと申します。初めてQiitaに投稿します。
これまでは、ほとんどの記事を読む側としてお世話になっていましたが、記事を読んで得た情報で何度も助けられてきたので、今度は自分も誰かの役に立ちたいと思い、こうして投稿することにしました。
Twitter（X）のログイン機能をLaravelに実装した際、ちょっとしたハマりどころがあったので、その経験を共有できたらと思い、記事を記載しました。少しでも誰かの役に立てれば嬉しいです。

今後も、気づいたことや学んだことがあれば、どんどん記事を投稿していきたいと思います！
引き続きよろしくお願いします。
Android Gradle plugin VersionとGradle Versionの確認方法

Android Gradle plugin VersionとGradle Versionの確認方法です。

Android Studioで確認できます。

Fire -> Project Structureで確認することができます

バーションを上げる際はこちらを参考にしてみてください。

https://developer.android.com/build/releases/gradle-plugin?hl=ja#updating-gradle
IBM i の既存プログラムを活かしたハイブリッド開発（その３）

前回の[IBM i の既存プログラムを活かしたハイブリッド開発（その２）](https://qiita.com/ushiday/items/10e217e4e3e659a9e932)に続き、ハイブリッド開発の実装パターン２を行っていきます。

以前作成した仮想既存資産のRPGは次のとおりです。
### ②消費税計算サブルーチン（8％）
■ 引数
 - IN :金額（税抜き）
■返り値
 - 金額（税込み）

このRPGはSQLから呼び出せる、SQLユーザー定義関数（以下UDF）を作成する事でOpen側との連携をすることが可能になります。

それでは具体的にUDFを作成するSQLを見ていきます。
- [ushiday - qiita-rpgle/QSQLSRC/FUNC1.SQL](https://github.com/ushiday/qiita-rpgle/blob/main/QSQLSRC/FUNC1.SQL)

```SQL:FUNC1-1
-- ＵＤＦ（ユーザー定義関数）作成
CREATE OR REPLACE FUNCTION
  USHIDA@Q24.MY_ZEIKOMI2
  (
    IN_KING1 NUMERIC(011 ,00)
  )
  RETURNS NUMERIC(011 ,00)
  LANGUAGE RPGLE
  EXTERNAL NAME 'USHIDA@Q24/Q240201R(MY_ZEIKOMI)'
  PARAMETER STYLE GENERAL
;
```
このSQLでは`CREATE FUNCTION`によって ライブラリ `USHIDA@Q24` 内に `MY_ZEIKOMI2` という名前のUDFを定義しています。
続いて、`(...)` 内に引数の定義をしており、RPG引数の`ゾーン10進数`は SQL 型 `NUMERIC` に該当します。
ストアド・プロシージャと異なり、関数は単一の返り値を持つので`RETURNS`で同様に SQL 型 `NUMERIC` を定義しています。
`LANGUAGE` は `RPGLE` となり、`EXTERNAL NAME` で実際に呼び出されるプログラムを`ライブラリ/プログラム名(プロシージャ名)`の形式で指定します。
`PARAMETER STYLE GENERAL`は、この形式で引数を定義した場合程度に思って下さい。詳細はマニュアルを見て下さい。STRSQLやACSで上記SQLを実行すると以下の様に出力されます。
![20241224-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/f4a191fc-09e2-bfa0-6b9b-41783d75bec9.png)


これで既存RPGにSQLからの入口が出来ました。それでは実際に実行して結果を確かめてみます。
UDFを呼び出すには`SELECT`ステートメントなどで関数を使用します。
次のSQLで結果を確かめます。

```SQL:FUNC1-2
-- 実行
SELECT
   KING1
  ,USHIDA@Q24.MY_ZEIKOMI2(KING1) AS KING2
  FROM
  ( SELECT
       1000 AS KING1
      FROM SYSIBM.SYSDUMMY1
  )
;
```
上記SQLでは、選択の結果として関数 `MY_ZEIKOMI2(...)` に`税抜き金額`を渡す事で、`税込み金額`の結果を取得しています。SQL を実行すると以下の様に出力されます。

![20241224-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/2bb8654c-857e-b36a-2490-7aa9397f97c4.png)

UDFに **「1,000円の税抜き金額を入力に与えると、8%税込みの金額1,100円が返却」** されました。
この様に既存資産であるRPGをSQLのユーザー定義関数（UDF）を経由する事で、Open側に既存ビジネスロジックをそのまま活用させる事が可能になりました。
これで、今回のハイブリッド開発シリーズはおしまいです。この様にIBM iでは既存資産を活かして効率的なOpen開発が行えるのです。
HTML CSS JavaScript

### はじめに
HTML,CSSにおけるJavaScriptの役割使い方を調べました。

### HTML,CSS,JavaScriptの役割

HTML: Webページの構造。見出しや段落、ボタンなどの要素を配置します。
```
<button>クリック</button> → ボタンを表示。
```

CSS: Webページの装飾。色、フォント、レイアウトなどを設定します。
```
button { 
color: red; → ボタンの文字を赤にする。
} 
```
JavaScript: Webページに動きや機能を加えるもの。クリックした時の動作やデータ処理を担当します。
例: ボタンをクリックしたらメッセージを表示する:
```
const btn = document.querySelector('button');

const message = () => {
    alert('ボタンがクリックされました。')
};

btn.addEventListener('click', message);
```

### JavaScriptの解説

#### HTML要素の取得
まず、HTML要素を取得しJavaScriptと紐付けます。
HTMLの中から任意の要素を取得するのに「querySelector()」を使用します。
基本文法は、「オブジェクト.メソッド('パラメータ')」という形になります。

```
document.querySelector('button');
```

#### 定数
定数とは変数と役割はほぼ同じで説明を割愛しますが、1つだけ違うことは値を変更できるかどうかです。
定数は一度設定すると変更できません。
ここで、querySelectorで取得したbutton要素を定数「btn」に格納します。

```
const btn = document.querySelector('button');
```

#### 関数
関数は他の言語同様処理をひとまとめにしたもので、後から呼び出せます。
関数名「message」を定義し**アロー関数(= () =>)** に続く{}の中に実行する内容を記述します。
```
const message = () => {
    alert ('ボタンがクリックされました。')
}
```

#### イベント
イベントは特定(クリックなど)の操作に応じて動作を設定します。
つまり、ボタンがクリックされたら関数messageを実行する。という意味になります。

```
btn.addEventListener('click',message)
```
#### jQueryとの出会い
どうやらjQueryというライブラリがあるようで、コードを短く書けると知りました。
JavaScriptよりjQuery覚えればいいやんと思いましたが現代ではあまり使われて無いようです。

#### jQueryは実際どうなの？
ES6以降はjQueryの必要性が低下し、最初にjQueryに頼りすぎると遠回りになってしまうと考えた為必要に応じて使用したいと思いました。
新しく使うならReactなどの新しいフレームワークを学習したいなと

#### 結論
最初は純粋なJavaScript、アロー関数などの学習をしてモダンな技術を取り入れるのがお得だと思います。
HTML,CSSの理解を少し深めるまで(その1)

## 前置き
HTML,CSS の勉強をしたいなと思った。  
Frontend Planet なるものがあると聞き、トップにあったやつを触って勉強した。  
この記事は、特に頭に残ったやつをまとめたもの。  

↓参考ページ

https://www.frontendplanet.com/css-range-slider-examples/

↓勉強の結果

https://magurouhiru.github.io/mysite/#/study/frontend-planet-examples/css-range-slider-examples

## 本編
### HTML
#### `<fieldset>`
`<form>`のように複数の`<input>`をまとめるために使用する。  
`<legend>`に題名を書くといい感じになる。  

#### `<a>`
`target="_new"`で新しいタブで開くようになる。  
また、前に開いたタブが生きていたら、何回押しても以前のタブに移動する。  

### CSS
#### Custom Properties
標準でない独自のプロパティ。  
見るとCSSで使用するための変数みたいな使い方をしていた。  
例えば、JSで数値を`hoge`に設定する。→CSSで`hoge`の値を元にfont-sizeを変更する。みたいな。  

#### 次兄弟結合子
CSSセレクタで使用できる結合子。  
例では以下のようにして使っていた。  
`.slider:active + #slider-value { #slider-valueに適用したいスタイルプロパティ }`  
こうすることで`.slider`がアクティブになった時だけ、`#slider-value`に特定のスタイルを適用することができる。  
他にも結合子があり、使いこなせばできることがかなり増えそう。  

#### em
パーセントみたいな相対的な長さを表す単位。  
フォントサイズに使う認識であまり有用性が分かっていなかった。  
しかし、例ではフォントサイズに合わせてUI全体のサイズを調整できるものがあり、その有用性が分かった。  

## 感想
楽しかった。  
特にCSSでできることの多さに驚いた。  

今回の記事は以上です。  

前回記事はこちら  

https://qiita.com/magurouhiru/items/a2c23f5c17e1a8342a97

詳細見たい人はこちら  

https://github.com/magurouhiru/mysite/pull/59

https://magurouhiru.github.io/mysite/#/study/frontend-planet-examples/css-range-slider-examples
[Python] みんなでデータ分析をしてみよう！基礎知識編

# はじめに
　どうも、みなさん！ぬぇです！本日は前回から引き続きpythonを使っていきたいと思います。今回は**scikit-learn**（pythonの機械学習ライブラリ）を用いて、データ分析をしようと思います！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519822/a4a56919-6a37-a135-aec0-7acbb75d938a.png)

# 目次



# 第１弾
### 1.データ分析とは？！
　**データ分析**とは、**様々な方法でデータを収集し、収集した大量のデータを整理、加工、統計的手法やツールを使って分析し、その結果から洞察や知見を得るプロセス（道）** を指します。目的に応じて、課題解決や意思決定のための情報を導き出すことが主な目標です。

### ２．データ分析の主なプロセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519822/ecc69347-d695-5711-5d95-8448e1b0adb7.png)

#### ２－１．目的の明確化
　「**なぜ分析するのか**」、「**なぜ課題解決したいのか**」などの分析する目標や課題を**具体的**に定義する。
 （例：売上を増加させる方法を探る）
 
#### ２－２．データ収集
　分析するために必要なデータ（例：公開データ、アンケートなど）を収集する。
 
#### ２－３．データの前処理（クレンジング）
　データの中には欠損値（**null値**）や異常値（**一般的なパターンから外れた値**）のある場合があります。その為にデータの**正規化、統合**を行う。
 
#### ２－４．データ分析
　**統計学的手法**や**機械学習アルゴリズム**（今回はこちら）を用いて、クレンジングしたデータを解析する。

:::note warn
 異常値の特徴
 １．ほかの値と比較して極端に低いor高い
 ２．データセットの分布（平均値や中央値、標準偏差など）から外れている
 ３．視覚的に目立つ（散布図上で他と離れた点など）

 異常値の原因
 １．計測エラー：センサーの故障、誤差、データ取得時の問題など
 ２．入力エラー：手動入力ミスやシステムのバグ
 ３．外部要因：一時的な環境変化や予期しないイベント（季節外れの大雪による売り上げの変動）
 ４．正常な異常値：データとしては性格だが、スポーツ記録での一度きりの優れたパフォーマンスなどの稀な現象
:::

##### 主な分析方法（一部）

| 番号　| 名前 | 目的 | 使用例 |
| --- | --- | --- | --- |
| 1 | **記述統計** | データの要約、基本統計量（平均、中央値、分散など）の算出 | 売上平均、年齢分布 |
| 2 | **探索的データ分析** | データの可視化、パターンや異常値の発見 | 売上と気温の関係、購買行動の類型化 |
| 3 | **予測分析**  | 過去のデータに基づいて未来の値を予測 | 売上予測、変動予測 |
| 4 | **因果推論** | ある事象が別の事象に与える影響を分析 | 効果測定 |

:::note
　具体的な手法では、**回帰分析、分類、クラスタリング、主成分分析やアソシエーション分析**などの手法がある。目的に合わせて手法を変えて分析をしていこう！
:::

#### ２－５．結果の解釈
　分析結果をもとに、目的に合った知見を得ること。また、結果を導き出し、課題解決に繋げる。

#### ２－６．レポート・意思結果
　結果の可視化を行い、わかりやすく結果を提示し、意思決定、レポートなどをする。

### 使用されるツールと技術
* ツール：
    * Excel,Tableau,Power BI（可視化ツール）
    * Python (pandas,numpy,matplotlib,seabornなど)
    * R言語(統計分析向けの言語)
    * SQL(データベース操作)
* 技術：
    * 統計学（回帰分析、分散分析など）
    * 機械学習（教師あり・教師なし学習）
    * ビックデータ技術(Hadoop,Sparkなど) 

# 休憩タイム（お茶休憩:tea:）
 　現在目指している職が「データサイエンティスト」なんですよ。データ分析にビックデータ、クラウド、データベースなどの知識を蓄えないといけなく、論理的思考力や常に勉強する事が必要なんです…（大変だ～）
　今はずっとデータサイエンティストに向けて勉強やプログラミングの勉強中です:smile:
 　みなさんは勉強することが好きですか？私は大好きなんです！学校の先生が勉強嫌いだった僕を変えてくれたことが懐かしいです…（今でも感謝しています！）
  　ってことで、今回は**座学**なので最後まで頑張りましょう！

# データ分析の活用例

| 分野 | 例 | 
|:-:|:-:|
| ビジネス | 売上分析、顧客分析、マーケティング戦略立案  |
| 医療  |  疫病予測、治療効果分析 |
| 金融 | リスク管理、不正検知 |
| 科学 | 研究データ分析 |
| スポーツ | 選手の能力評価、戦術分析 |

# さいごに
　 今回の記事はデータ分析を使う上で必要な知識を書いてみました！どうだったでしょうか？
 　私もこれから勉強しなければいけない内容なので、しっかりアウトプット、インプットをして力を蓄えていきたいと思います！次回は、プログラムを実際書いていきたいと思います。
  　皆様が有益な情報を得られたと思ったら、コメント、いいね待っています！（私のモチベーションに繋がります！！）
   　(これはこうじゃない？間違ってない？などのコメントでも嬉しいので、ぜひ！)
PaperMCでKicked for exceeding packet rate limitを回避する方法


home/container/config/paper-global.yml

にある

```yaml
packet-limiter:
  all-packets:
    action: KICK
    interval: 7.0
    max-packet-rate: 700
  kick-message: <red><lang:disconnect.exceeded_packet_rate>
```
を

```yaml
packet-limiter:
  all-packets:
    action: KICK
    interval: 7.0
    max-packet-rate: -1
  kick-message: <red><lang:disconnect.exceeded_packet_rate>
```
すればいい (単純)
IBM i の既存プログラムを活かしたハイブリッド開発（その２）

前回の[IBM i の既存プログラムを活かしたハイブリッド開発（その１）](https://qiita.com/ushiday/items/c2890290824f0d463651)に続き、ハイブリッド開発の実装パターン１を行っていきます。

前回作成した仮想既存資産のRPGは次のとおりです。
### ①消費税計算サブルーチン（10％）
■ 引数
 - IN :金額（税抜き）
 - OUT：金額（税込み）
■返り値
 - なし

このRPGをSQLから呼び出せる、SQLストアド・プロシージャを作成する事でOpen側との連携をすることが可能になります。

それでは具体的にストアド・プロシージャを作成するSQLを見ていきます。
- [ushiday - qiita-rpgle/QSQLSRC/PROC1.SQL](https://github.com/ushiday/qiita-rpgle/blob/main/QSQLSRC/PROC1.SQL)

```SQL:PROC1-1
-- プロシージャ作成
CREATE OR REPLACE PROCEDURE
  USHIDA@Q24.MY_ZEIKOMI1
  (
    IN  IN_KING1 NUMERIC(011 ,00)
   ,OUT OT_KING2 NUMERIC(011 ,00)
  )
  LANGUAGE RPGLE
  EXTERNAL NAME 'USHIDA@Q24/Q240101R(MY_ZEIKOMI)'
  PARAMETER STYLE GENERAL
;
```
このSQLでは`CREATE PROCEDURE`によって ライブラリ `USHIDA@Q24` 内に `MY_ZEIKOMI1` という名前のストアド・プロシージャを定義しています。
続いて、`(...)` 内に引数の定義をしており、RPG引数の`ゾーン10進数`は SQL 型 `NUMERITC` に該当します。
`LANGUAGE` は `RPGLE` となり、`EXTERNAL NAME` で実際に呼び出されるプログラムを`ライブラリ/プログラム名(プロシージャ名)`の形式で指定します。
`PARAMETER STYLE GENERAL`は、この形式で引数を定義した場合程度に思って下さい。詳細はマニュアルを見て下さい。STRSQLやACSで上記SQLを実行すると以下の様に出力されます。

![20241214-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/19574c9e-ffa5-e41e-bc81-feba292b498f.png)

これで既存RPGにSQLからの入口が出来ました。それでは実際に実行して結果を確かめてみます。
ストアド・プロシージャを呼び出すには`CALL`ステートメントを使用します。
次のSQLで結果を確かめます。

```SQL:PROC1-2
-- 変数定義
CREATE OR REPLACE VARIABLE
  USHIDA@Q24.KING1
  NUMERIC(011 ,00)
;
CREATE OR REPLACE VARIABLE
  USHIDA@Q24.KING2
  NUMERIC(011 ,00)
;

-- 変数設定
SET USHIDA@Q24.KING1 = 1000
   ,USHIDA@Q24.KING2 = 0
;

-- 呼び出し
CALL
  USHIDA@Q24.MY_ZEIKOMI1
  (
    USHIDA@Q24.KING1
   ,USHIDA@Q24.KING2
  )
;

-- 結果
VALUES
  USHIDA@Q24.KING1
 ,USHIDA@Q24.KING2
;


```
上記SQLでは、ストアド・プロシージャの引数に使用する変数を `CREATE VARIABLE` で定義しております。続いてその変数に初期値を `SET` しています。初期値をセットしないと変数がNULLの状態でエラーとなります。
`CALL` でストアド・プロシージャを呼び出し、最後に結果を `VALUES` で出力しています。

一連の SQL を実行すると以下の様に出力されます。
![20241214-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100029/40869cc8-d3d3-1c38-22f7-f7b783ed3374.png)

**「1,000円の税抜き金額を入力に与えると、10%税込みの金額1,100円で出力」** されました。
この様に既存資産であるRPGをSQLのストアド・プロシージャを経由する事で、Open側に既存ビジネスロジックをそのまま活用させる事が可能になりました。
次回はもう一つのパターンがどうなるか？見ていきます。
AWSでCloudformationでRDBとEC2構築

RDSではまったのでここに備忘録としてで書いておく

AllocatedStorage: 20 を追記すること！

```
AWSTemplateFormatVersion: '2010-09-09'
Description: Create an EC2 instance and RDS database

Parameters:
  InstanceType:
    Type: String
    Description: EC2 instance type
    Default: t2.micro
  DBInstanceClass:
    Type: String
    Description: RDS database instance class
    Default: db.t3.micro
  KeyName:
    Type: String
    Description: EC2 Key Pair name for SSH access
    Default: my-key-pair # Replace with your actual key pair name

Resources:
  MyEC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-08ce76bae392de7dc  # Update based on your region
      InstanceType: !Ref InstanceType
      KeyName: !Ref KeyName
      SecurityGroupIds:
        - !Ref MySecurityGroup

  MySecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Allow SSH and DB access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0  # Restrict to specific IP range for security
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          CidrIp: 0.0.0.0/0  # Restrict to specific IP range for security
      VpcId: vpc-026a7387dd6843290  # Replace with your actual VPC ID

  MyRDSInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBInstanceClass: !Ref DBInstanceClass
      Engine: mysql
      MasterUsername: myuser
      MasterUserPassword: b2h2an0cbn  # Use AWS Secrets Manager or Parameters for sensitive values
      DBName: mydatabase
      AllocatedStorage: 20 
      VPCSecurityGroups:
        - !GetAtt MySecurityGroup.GroupId
      DBSubnetGroupName: !Ref MyDBSubnetGroup

  MyDBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      DBSubnetGroupDescription: Subnet group for RDS
      SubnetIds:
        - subnet-0c0b17fe43556d272 # Replace with actual Subnet IDs
        - subnet-0e490e7b684f3b4aa # Replace with actual Subnet IDs

```
これでEC2とRDSの疎通ができます。
【Android】「Touch target size too small」のエラー解消

# 対応

エラー内容は「タッチ領域が小さすぎる」という内容なので、**layout_width,layout_height,minWidth,minHeight**などの領域を広げてあげます。
具体的には**48dp**以上に設定するといいと思います。

https://qiita.com/irgaly/items/2d90423bdcb883554e16

↑こちらの記事でも最小タップ領域に必要なViewのサイズは48dp必要だということを詳しく説明されています。

場合によってはpaddingやmarginもいじる必要があるかもしれません。






# 参考

https://stackoverflow.com/questions/77625798/touch-target-size-too-small
OpenSCADの「Qt platform plugin "cocoa"」エラーを解決する方法

根本的な解決には至っていないが、とりあえず起動できるようにはなったのでまとめておく。

## 環境
MacBook M1 (2020)
macOS Sequoia version 15.1
OpenSCAD version 2021.01

## 問題
Mac上でOpenSCADを起動しようとした際に、以下のエラーメッセージが表示されてアプリケーションが起動しなくなった。

![アプリケーション“Dock”には“(null)”を開くアクセス権がありません。](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2882787/2a27d291-83b8-4d9e-9b0e-70b2444e917c.png)

ターミナル上でopenscadの起動を試みると、
```shell
This application failed to start because it could not find or load the Qt platform plugin "cocoa"
in "".

Reinstalling the application may fix this problem.
zsh: abort      openscad
```
となる。

## 解決方法
以下コマンドで`QT_PLUGIN_PATH`を設定することで起動するようになった。
```shell
export QT_PLUGIN_PATH="/Applications/OpenSCAD.app/Contents/PlugIns"
```

## まとめ

`QT_PLUGIN_PATH`を正しく設定することで、OpenSCADが起動するようになった。
しかし、ターミナル上からでしか起動せず、Launchpadからはいまだに起動できない。
GitHubプロフィールのREADMEで魅力的な自己紹介を作る方法

 ## はじめに  
GitHubのプロフィールREADMEとは、GitHubのプロフィールページに表示される自己紹介文やリンク、統計情報などを自由にカスタマイズできる機能です。このREADMEを活用することで、以下のようなメリットがあります。  

- 自分のスキルやプロジェクトをアピールできる。  
- 採用担当者や開発仲間に自己紹介の場を提供できる。  
- GitHubを自己紹介サイト代わりに利用できる。  

## READMEに含めるべき内容  

### 自己紹介文  
- **名前（もしくはハンドルネーム）**  
- **現在の職業や所属**  
- **スキルセット**（例：フロントエンド、バックエンド、データ分析など）  

### 技術スタック  
- 使用している**プログラミング言語やツール**をアイコンやバッジで表示する。  

コード:  
```
### 技術スタック  
![Python](https://img.shields.io/badge/-Python-3776AB?style=flat&logo=python&logoColor=white)  
![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)  
![Docker](https://img.shields.io/badge/-Docker-2496ED?style=flat&logo=docker&logoColor=white)  
```
完成例:
    ![Python](https://img.shields.io/badge/-Python-3776AB?style=flat&logo=python&logoColor=white)  ![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)  ![Docker](https://img.shields.io/badge/-Docker-2496ED?style=flat&logo=docker&logoColor=white) 

## デザインを工夫する方法  
- **アイコンや画像**を活用することで、視覚的に魅力を高める。  
- **セクションを分けて見やすく整理**する。  
- プロジェクトやリポジトリを紹介するリンクを**わかりやすく配置**する。  

コード:  
```
### プロジェクト一覧  
- [Awesome Project 1](https://github.com/username/project1): 説明文を追加すると良い。  
- [Awesome Project 2](https://github.com/username/project2): ここにプロジェクトの概要を書く。  
```
完成例:
- [TakoyakiPortfolio](https://github.com/takoyaki-desu/TakoyakiPortfolio): 僕のプロフィールサイト 
 - [EarthRader](https://github.com/takoyaki-desu/earthradar): 僕が今開発してるプロジェクト
### 統計情報の追加  
- GitHubの活動統計やレポジトリ言語構成を表示する。

コード:  
  ```
  ![GitHub Stats](https://github-readme-stats.vercel.app/api?username=あなたのユーザー名&show_icons=true&theme=radical)  
  ![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=あなたのユーザー名&layout=compact&theme=radical)  
  ```

完成例:

![GitHub Stats](https://github-readme-stats.vercel.app/api?username=takoyaki-desu&show_icons=true&theme=radical)  
![Top Languages](https://github-readme-stats.vercel.app/api/top-langs/?username=takoyaki-desu&layout=compact&theme=radical)  



  ### ビューカウンターの追加  
- プロフィールの閲覧回数を表示する。  
コード:
  ```
  ![Profile Views](https://komarev.com/ghpvc/?username=あなたのユーザー名&color=blue)
  ```
完成例:
      ![Profile Views](https://komarev.com/ghpvc/?username=takoyaki-desu&color=blue)

## まとめ  
GitHubプロフィールのREADMEは、自分をアピールする貴重な場です。  
デザインや情報の整理に工夫を凝らし、自分のスキルやプロジェクトを最大限引き立てましょう！  
ぜひこのガイドを参考に、魅力的なREADMEを作成してください。
wslを使わずにwindowsでc++環境を構築した備忘録（scoop + gcc）

# 概要

* windows11でwslを使わず、c++の実行環境を構築
* vscodeを使ってatcoderの問題が解けるところまで確認
    * include bits/stdc++のwarningなし
    * スニペットも利用可能

# 背景

* pythonでatcoderをやっていたが、C++に手を出したくなった
* wslも試したが、もっとシンプルにやりたかった（あんまり詳しくないので、、）

# 環境

* OS：windows 11 home
* PC：HP Envy（メモリ16GB）
* terminal：git bash
* editor：VScode

# 手順

## 1. scoopをインストール

* 以下に沿ってインストールを進める
* https://scoop.sh/

## 2. soopでにgccをインストール

* 手順　※https://scoop.sh/#/apps?q=gccに従う
    * scoop bucket add main
    * scoop install main/gcc
* 確認
    * scoop listでインストールされたアプリケーションが確認できる
* 端末を再起動し、g++ --versionでg++を確認
    
## 3. 適当にディレクトリを作り、c++コードを作成

* ここではtmp2を作る
* hello.cppを作成。中身は下記
* この時点では"#include <bits/stdc++.h>"にwarningが出る

```hello.cpp
#include <bits/stdc++.h>
using namespace std;

int main()
{
    cout << "hello, world!" << endl;
}   
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/37243ae3-95e3-7811-b5bb-5aa303cb8086.png)

## 4. とりあえず実行確認

* g++ hello.cppを実行 => a.exeが生成される
* ./a.exeを実行 => hello,world!が出力される
* →　最低限の構築はOK

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/29b6ff08-5b97-b5df-ead1-24ca41408f4a.png)

## 5. includePathの設定を開く

* 事前にC/C++ Extensionのインストールが必要かも
* 開く手順は下記（画像参照）
    * 波線にカーソルを持っていく → Quick Fix → Edit "includePath" settingをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/c72f6f5c-a6c0-568f-cb8d-8a8a7dc2be6f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/a85e09e9-39b1-ae17-7ea3-cc5264ece3e7.png)

## 6. 2か所の設定を変更 → warningが消える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/4504df9f-efd6-28fb-7c2d-9192da0fb7d6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/fb853365-2251-b224-a4cc-df1f092daee0.png)

## 7. (おまけ) スニペット追加

* 設定→スニペット作成し、入出力やチートシートを作成しておくと楽

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1612859/8c611971-e2d1-4692-c4a2-496eeb0c1be2.png)

# まとめ

* scoopを使うと楽でした
* あとは精進あるのみですね！
主要機能に関するAWSとGCPの対応表

# はじめに
- AWSとGCPのどちらも使うにあたって、サービスの名前がわからないことが多いので、対応表を作成した
- 見やすさを考慮しWebアプリによく使用するサービスに絞りました


# 対応表
| AWS | GCP | 簡単な説明 | 主な違い |
|-----|-----|------------|----------|
| EC2 | Compute Engine | 仮想マシンインスタンス | GCPは料金を分単位で計算。AWSは秒単位。GCPはカスタムマシンタイプが柔軟 |
| ECS | Cloud Run | コンテナオーケストレーションサービス | GCPのCloud Runはサーバーレス。ECSはEC2/Fargateで実行 |
| EKS | GKE | マネージドKubernetesサービス | GKEの方が無料クラスタマスター。EKSはマスターノード料金発生 |
| VPC | VPC | 仮想プライベートクラウドネットワーク | GCPはグローバルVPC。AWSはリージョン単位。サブネットの作り方が異なる |
| ALB | Cloud Load Balancing | L7ロードバランサー | GCPは単一のサービスで統合。AWSは用途別に複数種類 |
| ELB | Cloud Load Balancing | L4ロードバランサー | 同上 |
| Route53 | Cloud DNS | DNSサービス | Route53の方が高機能（ルーティングポリシー等） |
| CloudFront | Cloud CDN | コンテンツ配信ネットワーク | CloudFrontの方がエッジロケーション多数。機能も豊富 |
| S3 | Cloud Storage | オブジェクトストレージ | S3の方がストレージクラス多様。GCPはシンプル |
| DynamoDB | Cloud Firestore | NoSQLデータベース | DynamoDBはキーバリュー型。Firestoreはドキュメント指向 |
| RDS | Cloud SQL | マネージドRDBMS | 対応エンジンの種類が異なる。料金体系も異なる |
| Aurora | Cloud Spanner | 高性能分散データベース | Auroraは従来型RDB互換。SpannerはNewSQL型でグローバル分散 |
| Lambda | Cloud Functions | サーバーレス関数実行環境 | 実行時間制限やメモリ制限、料金体系が異なる |
| ApiGateway | Cloud Endpoints | APIマネジメント | Cloud EndpointsはOpenAPI/gRPC特化。開発者向けの実装ツール |
| ApiGateway | Cloud API Gateway | APIマネジメント | API GatewayはREST API特化。管理機能とセキュリティに重点 |
| NATGateway | Cloud NAT | プライベートサブネットからの外部接続 | 料金体系が異なる。Cloud NATの方が安価 |
| EFS | Filestore | マネージドNFSサービス | EFSの方が柔軟なスケーリング。Filestoreは固定容量 |
| Cognito | Firebase Authentication / IAP | ユーザー認証・認可サービス | Cognitoはユーザープール管理が柔軟。Firebaseはモバイルアプリに強み。IAPはGoogleアカウント連携特化 |

# まとめ
- GCPは見始めたばかりですので、今後加筆していきます！
Rを学びたい Step7(日本の株価)

## はじめに
Rを学びたいStep7です。日本の株価を分析していきます。

## ソースコード

```R:
# CRANミラーを設定
options(repos = c(CRAN = "https://cloud.r-project.org/"))

# 必要なパッケージをインストール
if (!require("quantmod")) install.packages("quantmod")

# quantmodパッケージをロード
library(quantmod)

# 日経平均株価のデータを取得
getSymbols("^N225", src = "yahoo")

# データの確認とプロット
print(head(N225))
chartSeries(N225, name = "nikkei225")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/efff1c5c-2717-b721-aedc-6cbccd535f4d.png)

:::note info
日経平均225株の結果を設定
:::



```R:
# CRANミラーを設定
options(repos = c(CRAN = "https://cloud.r-project.org/"))

# quantmodパッケージをインストール
if (!require("quantmod")) install.packages("quantmod")

# quantmodパッケージをロード
library(quantmod)

# 銘柄コードを指定してトヨタ株のデータを取得
getSymbols("7203.T", src = "yahoo")

# データの確認
head(`7203.T`)

# プロットをPNGファイルとして保存
file_name <- "toyota_stock_chart.png"  # 保存するファイル名
png(filename = file_name, width = 800, height = 600)  # ファイル形式とサイズを指定

# 終値のプロット
chartSeries(`7203.T`, name = "トヨタ株価")

# ファイル出力を終了
dev.off()

cat("グラフを保存しました:", file_name, "\n")
```
:::note info
トヨタ株の結果を設定
:::
Grove Inventor Kitのサンプル

SeeedのGrove Inventor Kit for micro:bitの取説には多数のサンプルブロックの例があります。最新のmakecode環境のブロックの見た目と違ったり、動かなかったりするものがあったので、動作確認した物を公開します。

リンク先から「編集」ボタンを押すと、Makecodeエディタで編集したりマイクロビットにプログラムをダウンロード出来ます。

## 1. Control the Light
https://makecode.microbit.org/S32868-33422-84128-37308

## 2. Sunshine micro:bit
https://makecode.microbit.org/S62200-58631-38961-84882

## 3. LED Bar Control
https://makecode.microbit.org/S94959-06767-24499-78513

## 4. Music Player
https://makecode.microbit.org/S69611-53001-82588-57621

## 5. Gesture Recognision
https://makecode.microbit.org/S91215-40156-60063-40692

## 6. Smart Guard
https://makecode.microbit.org/S08645-29399-25069-93099  

※乾電池では無く、USBケーブルから給電してください

## 7. Shake Counter
https://makecode.microbit.org/S74326-22215-37801-94319

## 8. Ultrasonic Meter
https://makecode.microbit.org/S81292-96889-42423-34925  

※乾電池では無く、USBケーブルから給電してください

## 9. Rainbow on The Desk
https://makecode.microbit.org/S00726-66548-25127-52056  

※乾電池では無く、USBケーブルから給電してください


## 10. Guardians of The Secrets in Your Bag
https://makecode.microbit.org/S66132-41387-79455-06686

## 11. Guardians of The Secrets in Your Room
https://makecode.microbit.org/S43795-14995-65115-70852  

※乾電池では無く、USBケーブルから給電してください


## 12. Magic Musician
https://makecode.microbit.org/S44208-63149-34182-10939

製品のプロジェクトガイドは、こちらからダウンロード出来ます。

https://github.com/SeeedDocument/Bazzar_Attachment/raw/master/110060762/Grove%20inventor%20kit%20for%20microbit%20user%20manual.pdf
コンピュータシステムの理論と実装 その1

## 前書き

自作OS(mikanos)の本を読んでいたのですが、9章ぐらいで何が何だかわからなくなってきました。
今の自分にはハードルが高すぎたので、またいつか取り組みたいです。

[コンピュータシステムの理論と実装](https://www.oreilly.co.jp/books/9784873117126/)を以前からやろうやろうと思っていたので、こちらを学習していこうと思います。

## 1章

この本は、読む→自分で考えて実装を各章繰り返していく形式になっています。
1章は、NANDというゲートを使用して、NOTやAND、ORなどのゲートを実装していく内容でした。
もっとシンプルにできるかもしれませんが、いったんすべてのゲートの実装が完了しました。

### Not
```
CHIP Not {
    IN in;
    OUT out;

    PARTS:
    Nand(a=in, b=in, out=out);
}
```

### And
```
CHIP And {
    IN a, b;
    OUT out;
    
    PARTS:
    Nand(a=a, b=b, out=out2);
    Not(in=out2, out=out);
}
```

### Or
```
CHIP Or {
    IN a, b;
    OUT out;

    PARTS:
    Not(in=a, out=out1);
    Not(in=b, out=out2);
    Nand(a=out1, b=out2, out=out);
}
```
みたいな感じで実装していきました。
【Laravel】flynsarmy/csv-seederで「Class "DB" not found」というエラーが出る際の対処法

自分用

## エラーの内容

```php
  Class "DB" not found

  at vendor/flynsarmy/csv-seeder/src/CsvSeeder.php:235
    231▕         $mapping[0] = $this->stripUtf8Bom($mapping[0]);
    232▕
    233▕         // skip csv columns that don't exist in the database
    234▕         foreach ($mapping as $index => $fieldname) {
  ➜ 235▕             if (!DB::connection($this->connection)->getSchemaBuilder()->hasColumn($this->table, $fieldname)) {
    236▕                 if (isset($mapping[$index])) {
    237▕                     unset($mapping[$index]);
    238▕                 }
    239▕             }

```

## はじめに結論から

`vendor/flynsarmy/csv-seeder/src/CsvSeeder.php`ファイルの

```php
namespace Flynsarmy\CsvSeeder;

use App;
use DB;
```

となっている部分を

```php
namespace Flynsarmy\CsvSeeder;

use App;
use Illuminate\Support\Facades\DB;
```

こうする。
あと、作ったSeeder.phpファイルにも `use Illuminate\Support\Facades\DB;`を宣言させるのをお忘れなく。

## 参考

https://taraoblog.com/laravel%E3%81%A7csv%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E7%B0%A1%E5%8D%98%E3%81%AB%E3%82%B7%E3%83%BC%E3%83%80%E3%83%BC%E3%82%92%E5%AE%9F%E7%8F%BE%E3%81%99%E3%82%8B/

https://qiita.com/Hashimoto-Noriaki/items/55972d856a142fcd1aee

## でも・・・
この方法で問題ないんでしょうか（`vendor/`直下の読み取り専用になってるファイルを編集した事なんてなかったもので・・・）

他に何かご提案などありましたらコメント欄でご教授いただけますと幸いです。宜しくお願いします。
ABC380回答メモ

# 0.はじめに
　AI関連の規定が変わったようですが、まぁAIの使用は
　私の目的とは異なるので使うことは無いかなーッと思いつつ参戦
　Cでブレーキがかかりつつ、Cまでしか解けなかったので
　成績が伸びず、レートも-28と落ちてしまいました。


# 1.A - 123233
　リストを用意し、最初は1用、2用、3用と3種類だけでいいと思いましたが
　Nに現れる値をそのままインデックスにするとスタイリッシュ（？）にできるかなと
　思い、リストLのN[i]番目の値に1加算とかやって、最後に、リストLに、１，２，３の数を
　見ると、しました。

　提出したところ、何を思ったか、リストLを7個分しか用意していなかったため
　REに。考慮がたりず、余計なところで時間を食ってしまいました。

　https://atcoder.jp/contests/abc380/submissions/59834092
　

# 2.B - Hurdle Parsing
　文字列を数列に変換する問題。
　あまり難しいポイントもなく
　文字列を見ていき、-だったらカウントをアップし
　"|”だったら、回答用リストにカウントを追加しカウントクリア
　最後にリストを出力して終了としました。


　https://atcoder.jp/contests/abc380/submissions/59839218

# 3.C -  Move Segment
　馬鹿正直にやらなければ、TLEにはならないかなーと挑んだところ
　TLEを鞍って嵌りました。
　０と1の固まりをリスト入れて、入れ替え対象の固まりは入れる順番を前後させる方式で
　実装してみたところ時間が足りず工夫をしてもダメ。
　最終的にリスト化とかが時間食っていると気づき、以下の考えで実装
　【考え方】
　　・以下アドレスを求める
　　　・j：K-1個目の1の固まりの次の0の固まりの先頭
　　　・k：K個目の1の固まりの先頭
　　　・l：K個目の1の固まりの次の0の固まりの先頭
　　・答えはS[:j]+S[k:l]+S[j:k]+S[l:]となる

　カウント用の処理と、1回の文字列操作だけなのですっとACいただけました。

　https://atcoder.jp/contests/abc380/submissions/59861839


以上