OmniAICreator/Qiita-1.07M huggingface dataset:
【Azure】Azure Cosmos DB Developer SpecialtyをほぼMicrosoft Learnで強行突破してみた。

### 0.はじめに
**本記事ではDP-420の受験した時の学習方法をご紹介します。**
受験の経緯としては、支援先のプロジェクトで基盤エンジニアとして、DBの設計に携わる機会がありました。

DP-420は、データのモデリングの話など、開発者向けの要素が多い試験ですが、視野を広げるよい機会と思い、受験するに至りました。
　
学習方法などを調べる際に、DP-420の情報が少ない印象を受けたので、誰かの役に立てるといいなと希望を持ちつつ、記事を書きます。

なお、DP-420の試験の説明として、以下の内容が記載されています。

>この認定資格の受験者は、以下に関する確かな知識と経験を持っている必要があります。
・Azure 用アプリの開発。
・Azure Cosmos DB データベース テクノロジを使用した作業。
・JavaScript を使用したサーバー側オブジェクトの作成。

>Azure Cosmos DB for NoSQL API を使用するアプリケーションの開発に習熟している必要があります。 次のことができるようになったはずです。
・API の効率的な SQL クエリを記述する。
・適切なインデックス作成ポリシーを作る。
・JSON を解釈する。
・C# または Java コードを読む。
・PowerShell を使います。
・さらに、Azure でのリソースのプロビジョニングと管理に精通している必要があります。

<引用元>

https://learn.microsoft.com/ja-jp/credentials/certifications/azure-cosmos-db-developer-specialty/?practice-assessment-type=certification

これを読んで、受験をためらう方もいらっしゃるかと思います。
ですが、安心して下さい。私自身、上記について、いずれも確かな知識と経験を持っていませんし、精通もしていませんでした。

:::note info
こんな方にオススメ 
・Udemyでの学習をスキップしたい方
・無課金でDP-420に挑みたい方
・DP-420の学習方法を知りたい方
・基盤エンジニアだが、アプリケーション開発の観点まで視野を広げたい方
・CosmosDBの学習をしたい方
:::

### 1. 受験時期と学習期間
受験時期：2024年12月
学習期間：ざっくり2週間ぐらい
学習時間：約30時間

### 2. 受験者の前提
・Azure実務経験4か月
・AZ-700 Azure Network Engineer Associate取得済み
・AZ-204 Azure Developer Associate取得済み

### 3. 受験戦略・戦術
戦略を考える上で、主な考え方として2つあると思います。
**①合格を優先するか**
**②見識を広げることを優先するか**

①の場合は、Udemyなどの模擬問題集をひたすら解くことが有効と考えてます。数をこなして、問いと答えを体に染み込ませるイメージです。

②の場合は、Microsoft Learn（以下、MSLearn）や公式ドキュメントをしっかりと読み込んで理解したり、実機を触ったりすることが有効と考えてます。

今回は、②の戦略を実践することとしました。理由としては、見識を広めた上で、実際のプロジェクトで価値発揮したいと考えたからです。

### 4. 学習方法
学習ソースは2つだけです。いつもはUdemyに頼りたくなるのですが、今回はMSの公式のものだけで強硬突破できるか、チャレンジしてみました。

#### 4-1. MSLearn
MSLearnは最も王道な学習方法かと思います。まずは、MSLearnのDP-420のラーニングパスを進めて、基礎知識を身につけます。教科書的な位置付けでわからない部分があったら、MSLearnに立ち戻って確認し、知識を積み上げていきます。

https://learn.microsoft.com/ja-jp/training/courses/dp-420t00

私の場合は、移動時間や病院の待ち時間など、隙間時間に少しずつ学習を進めました。比較的、平易な文章で書かれているので、内容はわかりやすいです。

#### 4-2. 練習評価（50問）
私は、MSLearnのラーニングパス完了後、公式の練習問題に取り組みました。
ここで出題されている問題は、本番の試験でそのまま出題されませんが、自分の理解が甘いところを認識できる、かつ、解説にMSLearnの参考リンクがあり、それを読むことで理解を深められます。個人的には、最も費用対効果が高い学習方法だと思います。

https://learn.microsoft.com/ja-jp/credentials/certifications/azure-cosmos-db-developer-specialty/practice/assessment?assessment-type=practice&assessmentId=104&practice-assessment-type=certification

反射的に正解がわかるまでにやりこみました。

### 5. 受験結果
700点の合格ラインのギリギリで合格しました。
まだまだ分からないことだらけですが、土台は出来上がったので、これから積み上げていきたいです。

:::note info
【参考】受験当日の戦術
・時間が足りなくなるので、知らないと解けないような問題は捨てる
・答えがわかりそうな問題で、頭をフル回転させて確実に点をとりにいく
・ケース問題は意外とよく読むと解けるものが多いので、ひたすら向き合う
・試験中、MSLearnで調べる時間はないと心得る
:::

### 6. まとめ
MSLearnと練習評価の問題でDP-420を合格した方法をご紹介しました。公式の学習ソースのみでDP-420の合格を目指される方、是非、参考にしていただけると嬉しいです。

:::note info
過去のブログで、Azureの学習方法なども紹介してます。
興味のある方は、目を通して頂けるとありがたいです。　
:::
https://qiita.com/bluesea_nishi/items/5bbc111b10edbeb0bd08

https://qiita.com/bluesea_nishi/items/97ea562e38e9d6fbe803

:::note warn
留意事項
・2024年12月時点の情報となります。Azureサービスの仕様等、変更になる可能性がございますので、最新の情報をご確認ください。
・個人の見解であり、会社と一切関係がありません。
:::
cscの作法 その545

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

# 練習問題
desktopにリンクを作れ。

# サンプルコード

```
using System;
using System.IO;
using System.ComponentModel;
using System.Windows.Forms;
using System.Reflection;

class SampleProgram {
	static void make() {
		string appPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
		var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "link.lnk");
		var type = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8"));
		dynamic wsh = Activator.CreateInstance(type);
		var shortcut = wsh.CreateShortcut(filePath);
		shortcut.TargetPath = appPath + "\\pin2.exe";
		shortcut.WorkingDirectory = Application.StartupPath;
		shortcut.Save();
		System.Runtime.InteropServices.Marshal.FinalReleaseComObject(shortcut);
		System.Runtime.InteropServices.Marshal.FinalReleaseComObject(wsh);
	}
	[STAThread]
	static void Main(string[] args) {
		make();
		Console.WriteLine("ok");
	}
}



```



以上。
【OpenAI ChatGPTクリスマスイベント第１０日目】ChatGPTと電話で話せる。


　どうも、カーブミラーです。

　東京は初雪だったそうで。
　　四時半くらい……寝てるわ😸

　今回は、OpenAIのクリスマスイベント。今日は第１０日目。ChatGPTと電話で話せるようになりました。

:::note info
本記事は、ChatGPTについての
記事です。　　　　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　まずは、ニュースです。

　昨日（2024/12/18）の
　　クリスマスイベントの
　　　内容がまとめられました。
　　　　[OpenAI公式ページ](https://openai.com/index/o1-and-new-tools-for-developers/)

　　“OpenAI o1 and new tools for developers”というタイトルです。
***
　さて、【本題】です。

　OpenAIの
　　クリスマスイベントの第１０日。
　　　まずはごあいさつ。
　　　　[OpenAI公式ページ](https://openai.com/12-days/?day=10)
　　　　　中身は、OpenAIの
　　　　　　イベントページ。

　イベントのようす。
　　[OpenAI公式YouTube動画](https://www.youtube.com/live/LWa6OHeNK3s?si=P0V49iFrdfXmC4k_)

　　[OpenAI公式ポスト](https://x.com/OpenAI/status/1869462463848321264?t=gENJBPHkoFk3Whl-lWA-UA&s=19)
……

　今回は？

　1-800-CHATGPT

　ChatGPTと電話で話せる。

　電話番号は1-800-242 -8478。

　アメリカの電話は
　　プッシュ式だから
　　　番号を打ち込むときに
　　　　“chatgpt”のボタンを
　　　　　プッシュすると
　　　　　　“2428478”
　　　　　　　となるわけです。

　　日本人には
　　　なんのこっちゃ、
　　　　って感じですね。

　　日本の語呂合わせ
　　　みたいなものです。

　❗ただし、米国限定😅
　　（あとから情報、カナダからもOK）
　　　国際電話すればOKらしいw
　　　　もち、有料😸
　　　　　調べたら、30秒で
　　　　　　34〜78円らしいですよ。

　アカウントなしでも
　　月間、15分間無料。
　　　アカウントを持つと
　　　　利用時間、拡大（予定）。

　日本語にも対応。

　WhatsApp上でも利用可能。
　　WhatsAppは
　　　Metaのメッセージアプリのこと。
　　　　2021年現在で20億人以上が
　　　　　利用しています。

　　WhatsApp利用の場合、
　　　世界中の
　　　　どこからでもアクセス可能。

　今後追加予定
　・ChatGPTアカウント連携
　・画像チャット機能
　・検索機能の統合

　ようは
　　パソコンやスマホに限らず、
　　　電話（一般電話、ガラケー）でも
　　　　ChatGPTを利用可能にした、
　　　　　ということですね。
　　　　　　米国限定ではあるけども。

　参考：
　[OpenAI公式ポスト](https://x.com/OpenAI/status/1869530189971218639?t=e5iNpP3uFrzc0qd26_Bw9g&s=19)

　[チャエンさんポスト](https://x.com/masahirochaen/status/1869450199447589249?t=MQJkEGUlP79tqvrXzZNo-g&s=19)

　[テツメモさんポスト](https://x.com/tetumemo/status/1869457264018612561?t=q9hcyFPvYth8o3T5hI7qAA&s=19)

　[ChatGPT研究所さんポスト](https://x.com/ctgptlb/status/1869464589064417760?t=XmE21hHZwo-6H4XCjURW0A&s=19)

　[ITmediaNEWSポスト](https://x.com/itmedia_news/status/1869499148384481505?t=bVnKjhL7RtM6PySZ-Rp_iw&s=19)

　[木内翔大さんポスト](https://x.com/shota7180/status/1869519802047627619?t=W2QHia13Psfg4tr9PvJ7cg&s=19)

　以下は、日本語字幕&日本語音声付き。
　　[エクセル兄さんポスト](https://x.com/excel_niisan/status/1869594444527481071?t=YmscGq9eUkZmdjPAsBZmuQ&s=19)

　　再生スピードが速いので
　　　0.75くらいに
　　　　調整した方が良いかと。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Clineを使って簡単なWebアプリを作る（Spring Boot3）- その２

最初に「書籍管理システム」のたたき台を作った後、日々Cline（AIエージェント）を使って、機能追加していました。
たくさん使ってみて、わかったことを箇条書きにします。
引き続き、簡単なWebアプリに機能を追加していって、徐々にアプリの規模を大きくしていきます。

# 前提条件
 - プロンプトのみでアプリを作成する（コードには一切ふれない）

# Clineで出来ること
 - 指示内容（プロンプト）に応じて、自律的に影響のあるファイルを抽出し、順番に修正できる
 - Clineが誤った作業を行っていたら、その作業を「承認」や「保存」せず、追加でプロンプトを入力して、作業内容を補正して継続できる
 - 出来上がったものが期待どおりではなかったら、「元に戻して」と指示することで、元に戻してくれる
 - 参考とする機能や画面を指定して、新しい画面を作ることができる
   - 参考となるものを指定しなくても、ある程度似たような画面を作ることがあるが、既存の機能や画面を解析させた後に新しい画面を作らせた方が、精度が高くなる
 - 複数の画面で、レイアウトや機能に微妙な差異がある場合、指摘することで画面や機能の統一化ができる
 - エラーログやエラー画面を貼り付けるだけで、影響のありそうなファイルを抽出し、順番にチェックして修正できる
 - Gitでブランチを切り替えたり、ステージングしたり、コミットできる
 - GitでPullRequestを作成できる
 - Gitでマージできる
 - テストクラスを作成して、テスト（JUnit）を実行できる

# Clineが苦手なこと
 - 発生したエラーの回避策として、アプリの安全性を下げるような処置をしようとした
   - もちろん、その提案は却下
 - 共通部品のレイアウト（cssファイル）を修正させると、他の画面が動作しなくなるということが多発した
   - 画面レイアウトの修正を指示する時に「他の画面レイアウト（例：ダッシュボード画面）に影響がないように」という文言を追加して、影響範囲を広げることで、レイアウト崩れを防いだ
 - Gitの操作で何度かエラーが発生した
   - おそらく、ローカルPCがWindows環境のため、Clineが実行しようとしたスクリプト（シェル）がLinux環境用で、Syntaxエラーになったのでは？
 - ブラウザを起動して動作確認もできるようだが、待ち時間が長いだけでなく、正常に動作しないことがあった
   - ブラウザでの動作確認は手作業の方が遥かに効率的だったので、Clineには動作確認させなかった
 - プロジェクトの新規作成を指示してみたら中途半端なものが出来上がった
   - 仕上げるのに時間がかかりそうだったので、これはやめて、他のツール（拡張機能のSpring Initializr）でプロジェクトを新規作成した

# 今後Clineで試してみたいこと
 - リファクタリング（ファイル分割、共通部品の切り出しなど）
 - 画面（HTML）のライブラリの変更
   - jQuery → React, Vueなど
 - コードレビュー
   - 脆弱性チェック
   - コード品質チェック
 - アプリの大規模化（大規模アプリでもCline使える？の検証）

# 作ったアプリの画面キャプチャ
## ログイン画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/e9bba05d-a07d-63a1-edfa-c8ead504f3bb.png)
## ダッシュボード画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/f843c8dc-5f99-06a9-6e94-47925078af08.png)
## 書籍検索画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/7e9783ab-6f67-1ed1-d6da-b07d658d372e.png)
## 書籍詳細画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/d42a35d9-85fe-4d1a-13e1-0925453338ac.png)
## 貸出履歴画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/7ca11b0c-8ca1-da65-89ad-65b46eab3818.png)
## お気に入り画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/eaeb9abe-35ba-8532-aada-57834599052b.png)
## ユーザー管理画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/e0ab9529-4ccc-5fbd-d4ac-bdc51fb94f41.png)
## プロフィール画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781232/e937e82e-23aa-f0ad-6ad2-44bd85e03002.png)

# ソースコード（GitHub）
https://github.com/daisuke-yamanaka/cline-spring-boot3-demo1
Kakipの起動成功まで

## はじめに
この記事ではSBCであるKakipの解説とその初回実行までを解説します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/583e9a80-b2de-ebe2-0d11-c67ce5fca64c.png)

引用:https://www.yuridenki.co.jp/products/kakip/

## Kakipとは？
AI画像処理性能とマルチコアによる複数OSの同時実行能力を持つSingle Board Computer (SBC)。
用途としてはAMRやHSR等の自律型ロボット、IoT監視機器や工場のビジョンセンサ、CCTVへの組込、ドローン、Rapid Prototype等の研究開発・学術研究、タートルボット等のホビー用途と幅広いアプリケーションに利用可能なようです。

https://www.kakip.ai/


AI処理を実現している技術としてDRP-AI3の技術が使用されています。
これはルネサスエレクトロニクスの独自のAIアクセラレーター技術の最新世代であり、チップ内の演算器の回路情報を処理内容に応じて動的に切り替えるものです。
必要な回路だけを動作させる特徴があるため、高速かつ低消費電力の演算を可能とします。

https://eetimes.itmedia.co.jp/ee/articles/2403/08/news162.html

なお価格は秋月電子で６万円を切るくらいで購入できるようです。

https://akizukidenshi.com/catalog/g/g129611/

## 作業手順
以下公式サイトをメインに進めていきます。
非常にシンプルかつ日本語での解説がされているため基本的迷うところはないでしょう。

https://yds-kakip-team.github.io/techdoc/jp/2/2-1/

### OSのインストール方法について
16GB以上のmicroSDカードが必要となります。
公式サイトからのダウンロードとそれを展開するためのソフトとしてbalenaの「Etcher」を使います。
展開先に用意しておいたmicroSDカードを使います。
これでOSの用意は完了です。

### 機材の調達について
ハードの特徴としてKakipはDisplay PortやHDMIといったモニタ出力専用のインターフェースを搭載していません。
動作確認の際には忘れず変換ケーブルか対応するケーブルを用意してください。
スタートアップガイドにて動作確認が取れているTypeA - HDMI変換器の情報が記載されています。
・Buffalo GX-HDMI/U2
・Wavlink WL-UG17D1
どちらか一方を用意しましょう。

https://yds-kakip-team.github.io/techdoc/jp/2/

## 初回起動
電源を差し込むと起動が開始されます。
初回起動はやや時間がかかるので数分は待つこととなります。
初期設定のパスワードはubuntuになります。

https://yds-kakip-team.github.io/techdoc/jp/2/2-2/

## コラム
一瞬だけKakiPiと呼ばれていたこともあるそうです。
おそらくRaspberry PiからPiを使っていたようですが、読みやすさからかKakipになったようです。
一時期乱立した○○Piから脱却されているので個人的には好きです。
柿ピーというお菓子にもちなんでいて親しみやすいですしね。
ただ記述する時には一瞬どっちか混乱するのでipであると覚えておくとIT系の人間としては覚えやすいかもです。
なおお菓子の柿ピーがとある会場で配られていたことがあったりします。

https://eetimes.itmedia.co.jp/ee/articles/2406/17/news087.html

## 終わりに
ボードとしてはRaspberry Piよりもずっと高価ですがAIへの対応を鑑みると妥当に感じました。
OSのインストールもしやすいのでコスト面にさえ目をつむれば良いボードに思います。
ただ学生などには中々手が出にくいものとなるので研究機関や社会人技術者を中心に裾野はゆっくりと拡がっていくことが予想されそうです。
AI関係は現在非常に盛り上がっている領域のため学習の投資先としてはそう悪い選択肢ではないと思われます。
Pythonを基礎から学ぶその6　デスクトップのアプリを作るその4

この記事は、[JavaとPythonを基礎から学びたい私のための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/aruhitonocalendar)の19日目の記事です。

# 簡単なデスクトップアプリを作る
昨日までで簡単な使い方を学んだので、実際に使えるアプリを作ります。
### 何を作るか
占いを作りました。名前を入力すると結果が出るタイプの、あれです。
完成した全文がこちら⇩
```uranai.py
import tkinter as tk
import random as rd
window=tk.Tk()
window.geometry("400x300")
window.title("占いアプリ")
title=tk.Label(text='占いメーカー',font=("",30))
title.pack(pady=25)
label=tk.Label(text='名前を入力してね')
label.pack(pady=15)
txt=tk.Entry(window)
txt.pack(pady=25)
def ClickEvent():
    inputtxt=txt.get()
    txt.destroy()
    button.destroy()
    label.destroy()
    result1=tk.Label(text=inputtxt+'さんの結果')
    result1.pack(pady=15)
    result2=tk.Label(text='健康運:'+str(rd.randint(1,10))+' やる気:'+str(rd.randint(1,10))+' 運命の出会い:'+str(rd.randint(1,10))+'\n各項目は1から10の間で出てきます。')
    result2.pack(pady=25)
button=tk.Button(text='占う',command=ClickEvent)
button.pack(pady=6)
window.mainloop()
```
結果⇩
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/e9c05197-c569-6b25-a020-6d3a2cc30fcc.png)
こんな感じの占いアプリを作れます！
# 解説
仕組みとしては、①テキスト、ボタン、Entry(文字が1行入力できるやつ)を付けて、②ボタンが押されると①の要素を消して結果を出すといった流れです。
## 学んだこと
### destroy()
文字通り、要素を消すことができます。今回はボタンやEntryを消すために使用しました
```
txt.destroy()
button.destroy()
label.destroy()
```
こんな感じで消すことができます。
# random
おそらくpythonで初めてランダムを使いました。最初にimport random as rdでインポートしてから使います。
randintとか言っているのでintの整数が出てくるわけですが、小数の場合そうではないようです。randomと書くと０から1まで、uniformと書いて()で範囲を指定すると指定した範囲内の数字を返してくれるそうです
```py
import random as rd
print(rd.randint(1,10))
print(rd.uniform(1,10))
```
# まとめ
destroyを用いることで、ボタンやテキストなどを簡単に消せる。
randomはC#などほかの言語と同じような使い方で行ける。
tkinterを使うことで、python初心者でも簡単なアプリは作ることができる。

# 参考文献 

https://ossa2019.stars.ne.jp/Remember/tkinter/tk11.html

https://ossa2019.stars.ne.jp/Remember/tkinter/tk11.html

https://note.nkmk.me/python-random-randrange-randint/
【小ネタ】「創って学ぶ」が好きな方へおすすめリポジトリ

[Build your own React](https://pomb.us/build-your-own-react/)みたいに、

あるテクノロジーをより深く理解するために、それ自体を自分自身で作ってみよう的な教材がすごく勉強になるんですが、

そういったもの他にないかなと探していたら、その類の教材をキュレートしてるリポジトリを見つけたのでシェアです。

https://github.com/codecrafters-io/build-your-own-x

自分はbuild your own Git、build your own KVSあたり、やってみたいなと思いました！

まとまった時間が取れる年末年始にみなさんもどれかいかがでしょうか👍
【小ネタ】Chrome DevToolsでWhat's new出なくする

# 問題

Chrome DevToolsを使ってると、新機能のお知らせがデカデカと表示されることがあります。

こんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621165/a5368a26-d54e-7d0a-58f1-721abe32f42d.png)

結構な面積を使ってお知らせしてきてメインコンテンツが見づらく、焦っている時などは消すことを忘れて残りのスペースの範囲内で作業してしまう愚行をしばらくしてしまったり、、、作業効率に地味に効いていました。

# 解消方法

そんな時は、**DevToolsの歯車ボタンを押して、「設定」→「デザイン」→「更新時に新機能表示」に入っているチェックを外す**と出て来なくなります。新機能はまとまったタイミングで見させてもらいます🙏バイバイ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621165/58f10069-d658-ba50-ff03-d33f590cd98e.png)

同じように地味に困ってた方、ぜひ設定ください👍

https://developer.chrome.com/docs/devtools/whats-new?hl=ja
“言いにくい報告”を最初にする「バッドニュースファースト」で、問題から学習する文化をつくる

## はじめに

日々の業務の中で、「言いにくい話題」や「避けたい報告事項」を後回しにしていませんか？

あえて“バッドニュース”を一番最初に共有・処理することで、精神的負荷を軽減し、その後の業務をスムーズに進められるようになります。

これがいわゆる「バッドニュースファースト」の考え方です。

「嫌なことを先に終わらせて気分を軽くする」だけではありません。早めの問題共有がもたらす効果は、個人の効率アップだけでなく、チームの信頼強化・問題の早期解決といったメリットにもつながります。

この記事では、バッドニュースファーストがなぜ有効なのか、そしてそれを実現するうえでの「言う側」「受ける側」両方へのコツをお伝えします。

## バッドニュースファーストとは何か

- **定義**

    「バッドニュースファースト（Bad News First/Fast）」とは、避けたい報告や発生しそうなトラブルを最初/早期に処理・報告することで、問題の早期発見を促し後々まで引きずらないようにする意識的なアクションです。
    - トヨタの文化でおそらく有名になったと思われます
- **狙い**

    嫌なことを後回しにすると、一日中 心に引っかかってしまい業務効率が下がります。一方、早期に処理してしまえば頭はクリアになり、残りの時間を有効に使うことができます。
    ネガティブな話を優先したがる人は少ないので、企業文化として明示化している企業もいくつか見られており、合理的だと思っています。

## バッドニュースファーストのメリット

- **精神的負荷の軽減**
    
    問題を報告することで、「あなた個人の問題・モヤモヤ」から「チームとして向き合うべき問題」に変わります。報告後は気分が軽くなりタスクに前向きに取り組めます。


- **信頼関係・生産性の向上**
    
    チームから見れば、問題があれば早めに共有してくれる人は頼りになる存在です。
    
    後出しで問題が顕在化するより初期に分かっていれば対策は立てやすく、結果的にプロジェクト全体の損失を防ぐことにもつながります。
    
    実際僕自身がプロジェクトリードを担当したときも、早期にバッドニュースを伝えてもらえる方にとても助けられました。
    

## バッドニュースなのか判断できない場合は？

「そもそもこれって問題なのかな？」と迷うケースもあると思います。

プロジェクト進行中には、自分の認識がずれているだけなのか、それとも大きな問題の芽なのか分からない情報が出てくることがあります。

こうした曖昧なケースこそ、放置すると問題が育ってクリティカルなトラブルに繋がりがちです。

「自分だけわかってなかったらすみません」といった前置きをした上で、なるべく早めに確認することで、思わぬ手戻りを防げます。（僕は自分が曖昧な理解で終えたくないときに、かなりこの言い回しを使っていると思います）

## バッドニュースファーストを支える受け手側の態度

バッドニュースを早期に共有したい「言い手」がいても、受け止める側が適切な反応を示さなければ、次からは誰も言わなくなります。

### なぜ受け取る側が大事なのか

- **初動が重要**
    
    バッドニュースを告げられたときに嫌な顔をしてしまうと、「もう二度と報告したくない」と思われます。
    
    その結果、次回以降は問題報告が遅れ、後戻りできない局面で初めて問題が浮き彫りになります。
    
    **NOTE:** 上司やリーダーこそ、最初の一言に気をつけましょう。小さな問題報告が大きな問題回避につながるため、感情的な反応をするのではなくまず落ち着いて、「自分では気付けなかった問題を教えてくれてありがとう」のスタンスが重要です。
    

### 対応のポイント

- **冷静な受け止め方**
    
    報告を受けたときはまず状況理解に徹しましょう。決して責めるのではなく、「問題がわかってよかった」「次に何ができるか考えよう」といった前向きな姿勢を示すことが、次の早期報告につながります。


- **次回も言いやすい環境づくり**
    
    「問題を見つけたら教えてほしい」という一言が相手の心理的ハードルを下げ、今後の早期報告を後押しします。
    
    こうした空気づくりが組織を健全に保ち、ひいては生産性と信頼関係を高めることにつながります。
    

## 明日から試せるアクション

明日から試せる具体的なアクションとしては、朝一番に一番気が重いタスクや話題を処理してみることをおすすめします。

- 「問題かもしれない情報」を確認する
-  難しい報告を早めに片づける
-  報告を受けたら、まずは冷静に対話する
    - もしバッドニュースファーストの考え方が根付いていない場合は、この記事を共有してください

この一連の流れが習慣化すればあなた自身のプレッシャーを軽減できるだけでなく、チーム全体が問題を早期発見・解決できるようになります。

## おわりに

バッドニュースファーストは、自分自身の精神的負荷を軽くし、仕事をより楽しく快適にする自己管理術であり、同時に組織全体の健全性と生産性を高めるチームワーク術でもあります。

「自分から報告しやすい環境」を整え「受け取る側の冷静な初動」が、組織の問題解決文化醸成につながります。日々の仕事をより前向きに進めていきましょう。
【ゼミ論中間発表】JR横浜線の多機能トイレを調査してみた！

私のゼミ論では、「駅構内のトイレを対象とした乗客数と多機能トイレの設置比率」というタイトルのもと、JR横浜線構内における多機能トイレの設置状況について調査を行いました。本研究では、各駅の乗客数と多機能トイレの設置比率の関連性を明らかにすることを目的とし、データ収集と分析を通じて利用者視点での利便性向上の課題を検討しました。

GitHub：[furuhashilab/2024gsc_YukariHayashi](uruhashilab/2024gsc_YukariHayashi)

パワーポイント：[zemironn.pptx](zemironn.pptx)

以下からIMRaD形式で調査結果を述べていきます。

## 序論（Introduction）
本研究では、「駅構内のトイレを対象とした乗客数と多機能トイレの設置比率」というテーマを掲げ、鉄道駅の多機能トイレ設備に関する現状を分析しました。「古い鉄道ほど制約があり、多機能トイレが少ない」という仮説を立て、その妥当性を検証するためにまずはJR横浜線を対象に調査を実施しました。

## 方法（Methods）
①JR横浜線の多機能トイレの調査

【内容】

１．JR横浜線の駅校内にある多機能トイレの個数を数える

２．トイレ案内図と多機能トイレ内の内装を撮影する

【定義】

１．JR横浜線は（八王子から東神奈川）までの20駅とする

２．多機能トイレは改札内のものを個数に数える

３．改札内にほかの乗り換え線があったとしても横浜線のものとしてカウントする

②データの分析

③考察

## 結果（Results）
分析①ー乗客数に対して多機能トイレの設置比率ー

調査結果：どの駅に対しても多機能トイレは1つのみ

乗客数は駅によってかなり利用客数が違うのにもかかわらず多機能トイレは駅に１つのみということがわかりました。

分析②ー内装の構図ー

全ての多機能トイレの内装を調査し、共通設備、異なる箇所を分析しました。以下が調査結果をまとめたものです。

![スクリーンショット 2024-12-19 114753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925490/1b2ad337-2a2f-36c1-f934-3b80c6445772.png)

分析③ー多機能トイレの配置ー

調査結果：以下画像の3つのパターンに分けられる

![スクリーンショット 2024-12-19 114923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925490/12bd2e9d-c49d-472f-4bf5-54bb46941049.png)

## 考察（Discussion）
・乗客数に関係なく各駅に多機能トイレが1つ設置されている

・ JR横浜線間で多機能トイレの設備や面積は一致していない

・多機能トイレの配置は3つのパターンに分類される

## 今後ゼミ論の研究予定
①OpenStreetMapにトイレ情報の追加

②仮説検証のため別の線で同様の調査を行う

③どんな多機能トイレ構造が良いかデザイン案を考える

![無題30_20241223234345.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925490/219551c7-3c20-11ea-c7f4-dd6525943211.jpeg)
無料でフロー図、ER図が書けるツールをみつけた



~~無料という言葉を前面に出してしまうと胡散臭いような感じがしますが、~~ 無料でかつ十分に運用できるツールを発見したので書置きとして残します

## draw.io

https://draw.io

上記のサイトにアクセスしたのち、暫く待つと下記写真のようなの表示が出ます

![スクリーンショット 2024-12-18 141954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/ff14e06d-4182-738c-bc4f-4e6f4e11e322.png)

保存したい保存先を選択します

今回はGoogle Driveを選択しました
Google Driveを選択したとき認証を求められるため、認証してください

![スクリーンショット 2024-12-18 144319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/a822a671-8a79-4c8c-863c-895cf142df1e.png)

はじめての場合"新規ファイルを作成する"を選択します

![スクリーンショット 2024-12-18 144445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/dc245476-c448-8f82-4d7d-4443628d661b.png)

（下部の"Change storage"で最初の画面に戻れます)

保存先を設定したら任意のフォーマットを選択します

![スクリーンショット 2024-12-18 144509.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/18f022b4-e56a-1c8e-991b-728985e4723a.png)

あとはお好みで編集してください

![スクリーンショット 2024-12-18 144921.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/3a08f77e-9c44-e464-7988-7a2a37ac49fe.png)

:::note warn
保存した編集途中のファイルを開き直して作業する際は、**Google Driveからではなくdraw.ioから**開き直す必要があります
:::

***

### これが無料なんですか

複数人で情動編集ができない等の制約があるようですが、基本的な構成要素はそろっておりシンプルなつくりのため、とても好印象です
今までExcelでフロー図等を書いていた身からするととても助かっています

検索エンジン等で安直に調べるとSEO等の関係で辿り着きにくいので、ここに書き残します

ご精読ありがとうございました。
The Export-ModuleMember cmdlet can only be called from inside a module.発生理由

# 発生状況
PowerShellで共通化モジュールを作って、他のPowerShellから呼び出そうとした際に、以下のエラーが発生した。
> The Export-ModuleMember cmdlet can only be called from inside a module.

# 処理内容
## 呼び出す側
```PowerShell:call.ps1
    # 共通化モジュールを読み込む（ここでエラーが発生）
    Import-Module .\called.ps1

    # エクスポートした関数を呼び出す
    test()
```

## 呼び出される側
```PowerShell:called.ps1
    function test(){
        Write-Output '呼び出された'
    }
    Export-ModuleMember -Function test
```

# 原因と解決方法
呼び出される側のファイルが.ps1ファイルだったこと。
.psm1というモジュール用の拡張子があるため、called.psm1とするのが正解らしい。
re:Inventはエンジニアだけがいくイベントではない！

AWSが毎年ラスベガスで行うカンファレンスイベント「re:Invent」って安直にエンジニアが技術向上のためにいくイベントだと思っていませんか？

エンジニアとして今年のre:Invent 2024に参加した @yyy です

:::note info
この記事はmediba Advent Calendar 2024の18日目です。
:::

実は去年もre:Inventに参加させていただいて(2023) 今年で2年連続での参加になります
現状、弊社ではエンジニアだけしか行かないのですが、実際に複数回行った上で勿体なさを覚えたのでつらつらとその理由を書いてみます

## ビジネスやサービスへの新サービス活用判断
AWSで発表される新サービスを理解、勉強して持ち帰るくらいでしたらエンジニアだけでOKです
しかし、ビジネス思考のできる人がいたらこんなことができます
- AWSの新サービスからどんな事業ができるだろうの考察
    - 臨時で追加されるビジネス活用案や事例などのセッションへの参加
    - サービス担当者へ直接質問をすることができる
- 自社サービスのコスト削減や業務効率化の検討および判断

今年2024年に発表された新サービスは生成AI関連が多く、既存のシステムへ取り込むようなものよりかは
新サービスへどう扱うか？を考えられるものが多めでしたので、経営判断や裁量のある人がいると柔軟に動けます


## 会社の顔
re:Inventへ参加するハードルはコスト面でも正直高いです（カンファレンスパスで約30万円）
なんにせよ日本から参加するハードルは旅費を考えると世界中の国の中でもハードルが高い方であり、
日本から参加される他企業の多数に **えらいひと** たくさんいます（社長や役員クラス、役職持ちに結構会います）

そんな方々と交流するのもエンジニアだけでは正直勿体無く、
- 対等な交流
- 営業活動や新しいビジネスチャンス
- 他社でのビジネス活用事例の共有（ネットワーキング）
    - インパクトやコスト感の共有

をするためにも会社の顔は連れていきたいところです


## 同行するエンジニアとの共通言語を持つ
同じ会社で仕事をする上でエンジニアと対等な会話をするためにも共通言語を学べるのはプラスです

また、最大限行った価値を生み出すためにもビジネス思考ができる人と技術的思考を持った人を掛け合わせて現地へ挑むべきです

## さいごに
とにかく思い切り楽しんでこい！
Xcode16 文字数が長い行を複数行に整形する

## やり方

1. Xcode > Settings > Text Editing `Automatically reformat when completion code`にチェックを入れる
1. Editor > Structure `Reformat code at column`を実行

ショートカットは`control + option + I`

対象のコードを選択しないと実行されないかも、その場合は 全選択`command + A`と組み合わせて使えますね!

## 参考

> Added the “Reformat to Width” command to the Editor > Structure menu. This command splits long lines containing member access and function call expressions onto multiple lines. The target width is given with the “Reformat code at column” setting on the Editing tab of Xcode > Settings > Text Editing. Reformatting can happen automatically when using code completion by checking the “Automatically reformat when completion code” checkbox. The editor can visually show column by checking the “Show reformatting guide”, which was formerly called the “Page Guide”. The target width can also be set using the max_line_length EditorConfig setting. (94577507) (FB10083417)

https://developer.apple.com/documentation/xcode-release-notes/xcode-16-release-notes#Source-Control

## 雑記

長い行(メンバアクセスや関数呼び出し式を含む長い行)
Xcode16アプデの同じ並びにある editorconfigの方が目玉感あるのですが、

https://qiita.com/tsuzuki817/items/c4861d11cd508cf58e84

個人的には本内容も十分有り難い機能でしたので紹介させていただきました。
徐々に使い勝手がよくなっていってる印象です。
Xcodeのアップデート情報はウォッチしていきたいですね。
12/14 tecHub（IT交流会）を大手町で開催しました！

![image_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/91af364c-2601-46ce-d66d-a17f9e9d23db.png)

2024年もとうとう年末。
今年最後のtecHubは、大手町で開催しました！

最後ということで、今回はスペシャルな交流会を行いました。
エンジニアらしくAIを使って催し物をしました。

**目次▼**
<INS>[2024年12月のtecHubを開催しました！](#2024年12月のtechubを開催しました)</INS>
<INS>[tecHubは毎月イベント開催しています！](#techubは毎月イベント開催しています)</INS>
<INS>[参加者の声](#参加者の声)</INS>
<INS>[Discord始めました](#Discord始めました)</INS>
<INS>[次回の開催](#次回の開催)</INS>

<h3>2024年12月のtecHubを開催しました！</h3>

![image_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/ce07881d-2c70-dba8-8253-4921a6cb3f69.png)

12/14にtecHubを大手町で開催しました。
参加者は67名となり、大盛況でした。

日付：12/14(土)　14:00～16:30
場所：LIFORK大手町
参加者：67名
内容：IT交流会

<b>今回は、AIを使ったクイズ大会を行いました！</b>
実際のクイズの1問です。
どちらがリアルな写真 or AIで生成した画像か、分かりますか？

![image_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/2251f34c-458e-2cf2-60ff-ca376f865c7d.jpeg)

AIのクオリティが高く、正解できない人が続出しました。
AIの進歩を感じますね。
普段からAIを使うエンジニアも多く参加していたので、クイズは盛り上がりました。

ちなみに、AIクイズの答えは、以下です。
正解できましたか？

・A：リアルな写真

・B：AIで生成した画像

<h3>tecHubは毎月イベント開催しています！</h3>

毎月60〜80名ほどの方が参加している人気のイベントです。

3ヶ月に1度：LT（ライトニングトーク）と懇親会の2部構成イベント
その他：リアルでIT交流会イベント

LT＋懇親会では、前半は「働き方」をテーマにLT・プレゼンテーションを、後半は懇親会で自由に交流の時間を設けています。
LTでは、外部スピーカーをゲストに招くこともあります。

懇親会にはスピーカーも参加し、発表内容をさらに掘り下げてディスカッションすることも可能です！
色々な方が自由に意見・情報交換をできる場となっています。

<h3>参加者の声</h3>

![image_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3670233/f6d50f46-524d-0667-d5c1-3c1f741c8365.png)

今回も幅広い分野のIT関係者が集まり、会社員からフリーランス、法人化まで様々なエンジニアが参加していました。

懇親会では参加者一人一人の実体験から来る仕事の話で盛り上がり、参考になる話を聞ける時間でした。
「今後のキャリアをどうするか？」考えている話も多かったです。
幅広い分野と様々なキャリアの話は、異なる視点や考え方を知る機会になっているようでした。

参加者からは、
**「参加してよかった」
「転職やフリーランス転向などキャリアアップを考えるきっかけになった」
「自分にとって身近な体験談を聞くことができた」**
などの声をいただいています。

tecHubは、今後も毎月イベントを開催していきます。
<b>他にもITエンジニアがより活躍し、理想のキャリアを切り拓けるように、コミュニティを運営しています。</b>

<h3>Discord始めました</h3>

エンジニア同士がより交流できるように、Discordを始めました。
Discordでは、主に次の2つについて相談可能です。

・キャリアについて

・システム開発について

もくもく会やエンジニア向けのイベントの開催を予定しています。
ぜひぜひDiscordから一緒に参加しましょう。



<h3>次回の開催</h3>

次回の開催は、以下の日程を予定しております。
日時：1/18(土)　14:00～16:30
場所：LIFORK原宿
内容：IT交流会
RPCエンドポイントを利用してウォレットを実装してみる　＃５ネット情報取得

# テーマ設定
RPCエンドポイントを利用してネットワークIDやチェーンIDの取得する。

# 前提環境
+ Node.js がインストールされている。
+ Web3.js ライブラリがインストールされている。

+ RPCエンドポイントを取得（無料）
https://cabinet-node.com/ja/docs/user-guide/create-access-token

### web3のインストール
```bash
npm install web3
```

# 実装
以下の内容でgetNetworkAndChainId.jsファイルを作成してください。
 ```js
const { Web3 } = require('web3');

// RPCエンドポイントを設定
const web3 = new Web3('https://gateway-api.cabinet-node.com/{access_token}');

async function getNetworkAndChainId() {
    try {
        // ネットワークIDを取得
        const networkId = await web3.eth.net.getId();

        // チェーンIDを取得
        const chainId = await web3.eth.getChainId();

        console.log(`Network ID: ${networkId}`);
        console.log(`Chain ID: ${chainId}`);
    } catch (error) {
        console.error('Error fetching network or chain ID:', error);
    }
}

getNetworkAndChainId();

 ```

 # 実行
 
  ```
node getNetworkAndChainId.js
  ```

### 結果の例

```
Network ID: 1
Chain ID: 1
```
【厳選】L2/L3レイヤーに詳しくなりたい人向けおススメ資料3選

## はじめに

[はじめてのアドベントカレンダー Advent Calendar 2024](https://qiita.com/advent-calendar/2024/first-time)の20日目の記事になります。

https://x.com/satan_engineer/status/1869225475966681141

※元ポストでは「[ネットワークエンジニアとして](https://www.infraexpert.com/)」を紹介してますが、既に以下の記事で紹介しているので、本記事では別のサイトをご紹介します。

https://qiita.com/satan_engineer/items/20408b841a321f390eba

ある時、PMがふと溢していたのですが、別プロジェクトのアプリエンジニアがインフラのことを全く分かっていなくて困っているらしく、詳しく聞いてみると

- ローカルの開発環境立ち上げた時のエラーが分からない
- クラウドに頼りすぎてL2、L3レベルの知識が欠落している
- 「アプリ開発できればいいでしょ」と高を括っている

これは私がクラウドエンジニアとして、他のクラウドエンジニアと接しているときにも実感しています。

**L2/L3レイヤーの知識がとにかく欠落しているのです**。

確かにコンソールを操作すればネットワークだろうが、VMだろうが何でも出来上がってしまうので、普段気にすることないんですよね。

ただ、基本情報に出題されるレベルの知識がないと、今後のエンジニア人生における活躍の場が著しく制限されてしまうだろうな、とも思います。

クラウドに頼りっきりではないエンジニアになれば、こういうミスも防げるようになると思います。

https://qiita.com/nfujita55a/items/49eda31786516ffd1ea9

## 1. [基礎から学ぶ！Hyper-V仮想化入門](https://licensecounter.jp/engineer-voice/blog/articles/20240701_kiso_hyper-v_0_overview.html)
Hyper-vの設定方法を通して、クラウドを支える仮想化技術に詳しくなれます。EC2やAzure VMのデプロイ中にVM、vSwitch、vNICが物理の基盤上で立ち上がる様子をイメージ出来るようになるまで読み込み推奨です。

## 2. [A Virtual Switch Platform for Host SDN in the Public Cloud](https://www.microsoft.com/en-us/research/wp-content/uploads/2017/09/login_fall17_02_firestone.pdf)
無料で使える仮想ネットワーク、それを支えるL2/L3レイヤーの技術をAzureのテックリードが解説している論文です。英語のホワイトペーパーなので英語の学習もできて一石二鳥です。

## 3. [Azure のネットワークがさっぱり分からん](https://www.syuheiuda.com/?p=4296)
Azureが持つ莫大なスケールの物理ネットワークの全体像、アーキテクチャから実際にAzure VNet内でのVM同士の通信がオーバーレイ⇔アンダーレイでどのように実現されているかが、下記のような図示で解説されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964479/a06704df-1d47-50ec-d42a-b6afc0d8dd6e.png)

クラウドが使える＝即戦力はもちろんですが、クラウドを支える技術を身につけて、もう一歩踏み込めるエンジニアを目指しましょう。

ここまで読んでいただきありがとうございます。

Xではエンジニアに有益な発信をしていますので、ぜひフォローよろしくお願いします！！

https://twitter.com/satan_engineer
【Ruby】今日書いたコードの振り返り(繰り返し)#8

# はじめに

こんにちは！アメリカで独学でソフトウェアエンジニアを目指しているものです。
今回はフィボナッチ数列を計算するプログラムを題材に、コードの改善方法や学んだことを共有します。

## 問題の内容
整数 `n` を受け取り、フィボナッチ数列の最初の `n` 個を表示してください。
フィボナッチ数列は以下のように定義されます：

- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) （n >= 2）
例えば、`n = 10` の場合は以下を出力します
```ruby
0
1
1
2
3
5
8
13
21
34
```

## 私の解答
```ruby
def generate_pattern(n)
  f_b = 0
  f = 1
  f_a = 0
  (1..n).each do |i|
    case i
    when 1
      puts f_b
    when 2
      puts f
    else
      f_a = f + f_b
      puts f_a
      f_b = f
      f = f_a
    end
  end
end

generate_pattern(10)
```
このコードでも正しくフィボナッチ数列を出力できますが、`case` 文を用いて `i` の値を判定しているため、やや冗長に感じます。
`i == 1` の場合は0、`i == 2` の場合は1、それ以降はフィボナッチ数列を計算しています。

## 上記のコードの改善
`case`文を使わず、最初の2つの値を条件分岐で単純に出力し、その後 `3..n` のループで残りの値を生成する方法に改善します。
```ruby
def generate_pattern(n)
  f_b = 0
  f = 1

  # nが1以上なら、最初の値0を表示
  puts f_b if n >= 1
  # nが2以上なら、次の値1を表示
  puts f if n >= 2

  # 3番目以降の値は繰り返しで計算
  (3..n).each do
    f_a = f + f_b
    puts f_a
    f_b = f
    f = f_a
  end
end

generate_pattern(10)
```
もし`n`が3より小さいと範囲が空（3以上の数が存在しない）となり、ループは一度も実行されません。

## さらにシンプルな解法
この解き方もChatgptを使用して出力してもらいました。
この例では配列を使っています
```ruby
def generate_fibonacci(n)
  # 初期値を設定
  fib = [0, 1]

  # nが2より大きい場合は、3番目以降の要素を追加
  (2...n).each do
    fib << fib[-1] + fib[-2]
  end

  # 最初のn個を表示
  fib.first(n).each { |num| puts num }
end

generate_fibonacci(10)
```
このコードでは、`fib`配列の末尾から2つの要素を足して次の要素を生成していくため、計算ロジックが明確で、`if` や条件分岐がほとんど必要ありません。
`(2...n)` という範囲を用いることで、最初の2つの値（0と1）はすでに決まっているため、ループは3番目の値から計算を始めます。
`fib.each { |num| puts num }`ではなく、`fib.first(n).each { |num| puts num }`であるのは、`n` が 1 の場合でも 0 と 1 の2つの要素を出力してしまい、要件である「最初の n 個」を正しく満たしていません。


### なぜ配列を使うと簡潔なのか
- 最初の2つの値を [0,1] として確定しておくことで、`if` 文を使わずにすべてをループで処理できます。
- `fib[-1]` や `fib[-2]` など、配列末尾の要素を簡単に参照できるため、計算がシンプルです。

## 学んだこと
- 重複や冗長な条件分岐を避ける
最初の2つの値だけ特別扱いするために`if`や`case`文を多用すると、コードが読みづらくなります。
最初から [0, 1] を配列に設定し、後続の値をループで計算する方法の方が直感的でスッキリ書けます。

# まとめ
最初のコードは機能は正しかったものの、case 文で条件分岐するなど、やや冗長でした。
初見で思い浮かぶほどの演習はできていないのでこれからもアウトプットと復習を継続してコーディング力をあげていきたいです
「データ解析のための数理統計入門」解答メモ 第1章

以下第1章解答メモ
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/abd49b68-8870-002f-e264-6d20f9ee6a93.jpeg)
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/6e29ddc9-54fa-ac13-7c6e-27c3d3d752fd.jpeg)
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/b0e71aad-414e-35ab-b950-a3dab84541b3.jpeg)
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/41cb8c7a-644a-c497-efc8-44aff0367c7c.jpeg)
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/dc4335ed-ea39-f0c0-fe9a-61acd3ce73a6.jpeg)
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/00b8c125-5917-d7a1-6eb4-5b7d3f9fa1da.jpeg)
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3959389/292fae99-984e-aef2-ddf9-36d3310ce3fa.jpeg)
GitHub Copilot Free：初心者向けの無料AIコーディングアシスタント

## はじめに
GitHub Copilotは、GitHubが提供するAI駆動型のコーディングアシスタントで、Visual Studio Code（VS Code）と統合してコード補完や自動生成をサポートしてくれるツールです。最近、このGitHub Copilotが無料版をリリースしたというニュースがありました。これにより、AIの力で効率的にコーディングができるようになり、特に初心者やプログラミングの勉強をしている人にとって大きなチャンスが広がります。

:::note info
GitHub Copilot Freeが登場し、AIによるコーディングアシスタントが無料で使えるようになりました。これにより、プログラミング初心者でも効率的にコードを書けるようになります。
さらに、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)のAPIテスト機能と組み合わせることで、より効率的な開発環境が整います。Apidogでは、コード補完とテスト管理が一元化され、チーム全体の作業効率が大幅に向上。GitHub Copilotでコードを生成し、Apidogでそのテストを簡単に行うことで、開発フローがスムーズになります。
今すぐ [Apidog を試して](https://apidog.com/jp/download/)、API テストの効率化を実感してください！
:::
![apidog-client-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/7050a5ef-5279-48af-99ad-1ebedbbf7946.png)


## GitHub Copilot Free バージョンの特徴
### 1. 使われているAIモデル
無料版のGitHub Copilotは、Claude 3.5 Sonnet や GPT-4o といった高度なAIモデルを搭載しています。これにより、コードをリアルタイムで補完し、文脈に合った提案をしてくれるので、初心者でもコードを書くのが楽になります。自分で一から書かなくても、Copilotがうまくサポートしてくれるので効率が格段にアップします。

### 2. 月に2000回のコード補完＆50回のチャットメッセージ
無料版では、月2000回のコード補完と50回のチャットメッセージが提供されます。初心者でもかなりの頻度で補完や質問ができるので、これだけでもかなり使える機能だと感じるはずです。もちろん、プロの開発者でも十分に役立つ機能が満載です。



### 3. 多言語対応
GitHub Copilotは、Python、JavaScript、TypeScript、Javaなど、複数のプログラミング言語に対応しています。これにより、さまざまなプロジェクトで活用することができ、特にバックエンド開発やフロントエンド開発、データサイエンスなど、幅広い分野で便利です。

## 無料版の制限と使い方
### 1. 制限
GitHub Copilot Freeは無料で使える分、いくつかの制限があります。例えば、毎月2000回のコード補完や50回のAIとのチャットという制限があり、これを超えると追加で使用することはできません。ただ、初心者の学習用途や日々の開発作業であれば、十分に使える回数だと思います。

### 2. 使い方
GitHub Copilotを使うには、まず Visual Studio Code をインストールし、VS Codeの拡張機能からGitHub Copilotをインストールします。その後、GitHubアカウントと連携するだけで、すぐにAIアシスタントを使い始めることができます。特に、簡単な設定で始められるので、プログラミングを学び始めたばかりの人にも取り組みやすいです。

### 3. 初心者へのおすすめポイント
GitHub Copilotを活用することで、初心者でもコードの書き方やベストプラクティスを学べます。例えば、よく使うライブラリの書き方や、定型的なコードを提案してくれるので、わからないところをすぐに学ぶことができます。また、AIとのチャット機能を使えば、エラーメッセージやコードの意味について質問できるので、学びながら成長できます。

## 結論
GitHub Copilot Freeの登場で、AIを使ったコーディングがもっと身近になりました。初心者でも簡単に始められる上、学習を進める中で非常に有用なツールです。プログラミングの基礎を学んでいる人や、効率よくコーディングを進めたい人にとって、GitHub Copilotは頼もしいパートナーになるでしょう。

**無料で使えるので**、まだ試していない方はぜひ一度使ってみてください。AIによる補完機能がどれだけ役立つか実感できるはずです。**GitHub Copilot**で、もっと楽しく、効率的にプログラミングを始めましょう！

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**
では、また次の記事で～！
【Next.js】use clientとuse serverの使い分け(クイズもあるよ)

# はじめに
Reactの基礎も理解できてきたからNext.jsにスキルアップしてみたい！
そんなエンジニアさんがNextを初めて触った時につまづくのは「server action」だと思います。
事実僕も「くらいあんと」？「さーばー」なんだそれは？
と言った感じでした。
そんな方のためにつまづく点をできる限りカバーしつつ、紹介していきたいと思います。

# ターゲット
- 初めてNextを触る方
- いまいち```use client```と```use server```の使い分けが分からずエラーが出てしまう人
- 完全に理解できなくてもなんとなくイメージを掴みたい方
- つよつよだけどクイズに正解して気持ちよくなりたい方

# ```use client```とは？
Next.jsの基盤であるReactでは、最初に空のhtmlを受け取り、その後JavaScriptの力で動的にコンテンツを表示される仕組みとなっています。
この「クライアント側で動作する」コードを書く時に```use client```を宣言します。つまりは、ブラウザ上で動くJavaScriptだと宣言するものです。

# ```use server```とは？
サーバーは先ほど登場した空のhtmlを送る張本人です。
このサーバーを操作したいときは```use server```を用います。

# まとめると？
```use client```：ブラウザ上で動作させたいコードを書くときに宣言する。
```use server```：サーバーを直接操作したいときに宣言する。

# 実際のケース
今回はクイズ形式でどちらがベストプラクティスか考えてみましょう。

### Q1: ```useState```のようなhooksを使いたい。


<details> <summary>答えを見る</summary> 

**正解**:  ```use cliet```  
**解説**: hooksはブラウザ上でのみ動作できます。基本的にReactの機能は全てクライアント側で動作すると考えてください。

**コラム**: このようなエラーを見たことはありませんか？
You're importing a component that needs useState. It only works in a Client Component but none of its parents are marked with "use client", so they're Server Components by default.
  │ Learn more: https://nextjs.org/docs/getting-started/react-essentials
  
これを翻訳すると

useStateが必要なコンポーネントをインポートしています。これはクライアント・コンポーネントでのみ機能しますが、その親コンポーネントには "use client "のマークがないため、デフォルトではサーバー・コンポーネントとなります。

このようにuseStateのようなhooksはクライアントで実行する必要があるんですね。


</details>

### Q2: 事前にHTMLを埋め込んで表示スピードを高速にしたい。
<details> <summary>答えを見る</summary>

**正解**: ```use server```
**解説**: サーバー側で事前にHTMLを用意してあげることでSEO対策にもなります。


</details>

### Q3: fetchを使ってAPIデータを取得したい。
<details> <summary>答えを見る</summary>

**正解**: ```use server```
**解説**: fetchをサーバーサイドで実行することで、APIコールを効率的に処理できます。またAPIキーの保護やSEOの向上に役立ちます。


</details>

# 終わりに
今回はNext初学者の方のために基礎知識と実際のケースを想定して```use server```と```use client```の使い分けを実践してもらいました。
ぜひ自分で触って確かめてみてください。
百聞は一見にしかずです。

クイズは何問正解できたかな？
つよつよの方も全問正解して気持ちよくなってもらえたらと思います。
コメントで教えていただけると嬉しいです笑

# 参考文献
https://nextjs.org/docs/app/api-reference/directives/use-client

https://nextjs.org/docs/app/api-reference/directives/use-server

https://qiita.com/non_01/items/4b47dea92a67ec9f92e0
OMCB030D(687)

https://onlinemathcontest.com/contests/omcb030/tasks/12529

公式の解説の写経です。(自分の理解用)

三角形の$3$辺の長さから面積を求めるには、ヘロンの公式を使います。
$3$辺の長さを$a,b,c$、また$s=\frac{a+b+c}{2}$とすると面積は
　$\sqrt{s(s-a)(s-b)(s-c)}$ $…①$
で求められます。

ここで、
　$f(x)=1000x^3-2000x^2+1300x-273$ $…②$
と置きます。
$②$は$3$つの実数解を持つので、
　$f(x)=1000(x-a)(x-b)(x-c)$ $…③$
でもあり、$f(a)=f(b)=f(c)=0$です。

次に、(解と係数の関係でも良いですが、)$③$を展開してみます。
すると、
　$f(x)=1000x^3-1000(a+b+c)x^2+1000(ab+bc+ca)x-abc$ $…④$
になります。
$②$と$④$の$x^2$の係数は等しいので、
　$2000=1000(a+b+c)$
　$\frac{2000}{1000}=a+b+c$
　$s=\frac{a+b+c}{2}=\frac{2000}{1000}×\frac{1}{2}$
　$s=1$ $…⑤$
となり、$s$を求めることができました。

$⑤$を$②$に代入すると、
　$f(s)=f(1)$
　$=1000-2000+1300-273$
　$=27$ $…⑥$
また、$③$より、
　$f(s)=1000(s-a)(s-b)(s-c)$
であるので、
　$1000(s-a)(s-b)(s-c)=27$
　$(s-a)(s-b)(s-c)=\frac{27}{1000}$ $…⑦$
です。

$⑥,⑦$を$①$に代入して、面積は
　$\sqrt{\frac{27}{1000}}$
となります。
したがって、解答は$1027$です。

考察：
この問題の方程式はそう簡単には解けないので、別の方向から導出する必要があります。
$a+b+c$や$(s-a)(s-b)(s-c)$がわかれば解に辿り着けることを知っていれば、
面積を求める問題から、$a+b+c$や$(s-a)(s-b)(s-c)$を求める問題に置き換えることができます。
ヘロンの公式を記憶していれば、更に思いつくのが容易かもしれません。
時系列データ、ベクトルデータ、弊社 KXが何者なのかについて

# はじめに
こんにちは。KX Systemsの内藤です。 Qiita 初投稿です。 
2024年9月よりBDR(Business Development Representative)/インサイドセールスとして働き始めました。 

## 目的
本記事では初心者でもわかるように自分なりに時系列データ、ベクトルデータ、弊社 KX Systems が何者なのかについて説明しております。 

### 目次
- 時系列データベースとは? 
- ベクターデータベースとは? 
- KX Systemsは何者？ 
- 我々のミッションとは？ 


### 時系列データベースとは

時系列データとは、時間情報を持ったデータベースです。ある現象の時間的な変化を測定するために得られるデータです。 

例えば、気温データ、株価データ、FXデータ、センサーデータ、ログデータ等が該当します。 

天気予報等で折れ線グラフを見る機会があると思いますが、主に点と点の上下の動き(定点観測)を把握する時に利用するデータです。 

![画像１.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964359/f7628ca1-58f3-f3a8-00fd-a21b1b046080.png)


#### ベクターデータベースとは

ベクトルデータベースとは、データをベクトル形式で保存・管理するデータベースのことを指します。ベクトルとは、数値や方向性を持つデータの集合で、空間内での位置関係や特徴を表現できます。 

![Vector database.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964359/68b73bbe-9cad-6c3e-7665-96a6fbb2a969.png)


 

**簡単にいうと、、、**

データを数値化して、ジャンルごとに配置され管理されることでデータ検索や引っ張り出すことを容易にすることができるデータベースです。 

<br>

**まだわからないですよね、、、**

図書館に例えると、たとえ本のジャンルがあらかじめ定義されていなくても、すべての本は似たようなジャンルごとにベクトル・データベース内に自動的に配置されることになります。 


構造化データや非構造化データ等を巷で耳にすることがあるかもしれませんが、非構造化データを効率的処理し、管理し、利用するために用いられているのがベクトルデータベースです。 

<br>

**ベクターデータベースの主な用途**  

**生成QAチャットボット**： GPT-4のようなLLMを利用することで、ソーステキストに基づいてクエリに対する応答を確率的に生成するChatGPTのようなチャットボットアプリケーションを開発できる。 

  

**異常検出**： 類似データを見つけることができるのと同様に、非類似データも簡単に識別することができます。そのため、異常検知の応用範囲が広がります。 

  

**レコメンド機能**： ベクトル空間で類似アイテムを見つけ、過去の個人的嗜好を利用することで、非常に効果的な推薦システムを構築できる。 

  

**画像、音声、動画生成**： テキストから画像への変換モデルを利用することで、DALL-EやMidjourneyのような画像生成ツールを作成できる。 

  

**検索エンジン最適化**： キーワード検索に重点を置くのではなく、Bingのようなセマティックな意味を検索に利用することができる。 

**独自の知識ベース**： 企業や組織は、機密文書やファイルをベクターデータベースに埋め込み、意味的に構造化された検索可能なナレッジベースを作成することができる。 

**コード生成**： GPT-4のようなLLMを活用することで、Github Copilotのようなツールを使ってコード生成、補完、デバッグ作業を完了できる。 

<br>

##### KX Systemsとは何者？ 
その両方の持ち合わせたのが弊社KX Systemsです。 

時系列データの処理・分析では世界最速となっております(第三者機関評価済み)独自のq言語というものを開発し、それがスピードの肝になっております。 

会社としては1996年に設立されたい意外に老舗のデータベンダーです。 

ロンドン証券取引所 上場企業となっております。 



###### 強みは？

大量のデータを高速で処理することで、データを収集や分析する際のレーテンシーを軽減することができる部分です。 

<br>

###### 我々のミッションは？

深層的かつ実用的な知見をデータから発見し、より迅速な意思決定を可能にすることで、お客様の競争上の優位性と変革的成長を促進させることです。
箇条書きはやめよう

2階層以上の箇条書きはやめたほうがいい(もちろん例外はある)。
階層というのは、コンテキストを含む。
あるときは理由を示すかもしれないし、あるときは例を示すかもしれない。

例1)
- A
    - hogeだから
- B
    - fooだから
- C
    - barだから

例2)
- A
    - a'
    - a''
- B
    - b'
- C
    - c'
    - c''
    - c'''

そのため、この不確実なコンテキストを推測する必要がある。
それによって発生する認知負荷がかなりしんどいものだし、他人(数カ月後の自分含む)が見たときにはなおさら相当な負荷を生む & 誤解を発生させる。

そのため、代わりに表を使う。
各要素は何かはカラムを見ればわかる。

|提案事項|理由|
|-|-|
|A|hogeだから|
|B|fooだから|
|C|barだから|
スマホで通信しているAPIを調べてみた話

# スマホで通信しているAPIを調べてみた話

## はじめに
ふと、「AdGuardのフィルタリングログから、どんな通信をしているか見れたよな」と思い出しました。
そこで、スマホがどのAPIと通信しているのかを簡単に調べる方法を紹介します。

AdGuardはHTTPSフィルタリングが可能なため、HTTPS通信でもログを確認でき、意外と多くの通信が見られるのではないかと思います。

ただし、**これはAdGuardの本来の機能ではありませんし、あくまで思いつき程度の検証**です。
そのため、どこまで正確にAPIを確認できるかは未知数です。参考程度にご覧ください。

---

## 必要なもの

- **AdGuard APK版**（Google Playストア版では機能が制限されているため、なおライセンスは不要です）
- Androidスマホ

---

## 手順

### 1. AdGuardのAPK版をインストール
AdGuardの公式サイトからAPKファイルをダウンロードし、インストールします。
https://adguard.com/ja/adguard-android/overview.html


### 2. CA証明書のインストール
AdGuardを起動するとガイドが表示されるので、指示に従って**CA証明書**をインストールします。
（セキュリティ設定項目の認証情報とか証明書などの名前である場合が多い）

- **端末によってCA証明書のインストール場所が異なる**ため、不明な場合は機種ごとに調べてください。
- CA証明書をインストールすることで、HTTPSフィルタリングが有効になり多くの広告のブロックと追跡を回避できるほかより多くの通信データを解析できるようになります

### 3. スマホを普段どおり使う
AdGuardの設定が完了したら、スマホをいつも通り使います。

- ブラウジング、アプリ利用、SNSなど、通信が発生する操作をある程度行います。
- しばらく利用したらAdGuardを確認します。

### 4. AdGuardの統計ログを確認
1. **AdGuard**に戻り、画面から「統計」から「最新アクティビティ」を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957636/fe60064c-79f5-d347-cf37-7a60d948bb95.png)



2. 「最新アクティビティ」を選択し、検索バーに**`API`**と入力します。
   - URLに`API`という文字列が含まれている場合のみヒットします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957636/1290c306-bfb8-2f00-7f6e-b055977748d1.png)






### 5. 結果の確認
自分の場合、以下のAPI通信が多く確認できました：

- Google系のAPI
- Twitter API
- 百度 API


> **補足**：
> 試用している端末については中国版のLenovo端末です。
なお、「技適の特例制度」を提出済みです。

---

## おわりに
AdGuardのHTTPSフィルタリング機能を利用することで、どのAPIに通信しているのかを簡単に確認することができました。

もちろん、URLに「API」と含まれていない場合は見逃しますし、全ての通信を完璧に可視化できるわけではありません。しかし、手軽にAPI通信の傾向を調べるには面白い方法かなと思います。
起業するならElixirシリーズSTEP19.コーポレートガバナンス

https://qiita.com/Yoosuke/items/07fa69eab6301fbb226e

前回の続き

経営戦略、事業戦略、機能戦略、財務戦略を立ててきました。次に必要なことは、コーポレートガバナンスです。

## コーポレートガバナンス
コーポレートガバナンスとは、企業経営を規律付け、効率的かつ健全な企業活動を実現するための仕組みで、経営の透明性確保、経営効率の向上、企業価値の最大化、ステークホルダーとの適切な関係構築などを目的として作成していくものです。

これらは、成長をしていく上で将来的に資金調達を進める上でも重要な評価ポイントになります。

ではどんな事をしていけば良いのでしょうか？
これは、正直言って、僕もまさに今ここを作成してる所なので、一緒に考えてみましょう。というスタンスでの発信になってしまうのですが、

まずは、今までの起業フェーズと違って、ガバナンスをしっかりする必要がある理由を押さえておく事が大事です。そこで、ガバナンスとは？という所からしっかり押さえておく必要があります。調べてみましょう。

### ガバナンスとは
**ガバナンス（Governance）** とは、組織や社会の運営や管理の仕組みを指します。具体的には、組織や社会が目標を達成し、持続可能で安定した運営を行うために、意思決定、規則、手順、監督、調整などを通じて管理を行う仕組みやプロセスのことを指します。

調べてみると、このように書かれています。

権力は腐敗する
これは、イギリスの歴史学者で政治家のジョン・エメリッヒ・アクトンが、書籍の中で
> “Power tends to corrupt, and absolute power corrupts absolutely. Great men are almost always bad men.”

と言ったところから広まった考え方ですが、これは僕自身も色々と思うところがあって、基本的には何もしなければ権力は腐敗すると考えてます。それが人間のさがなのかなぁと思っています。

そこで、ガバナンスが重要になってくると言う事ですね。持続可能な仕組みをきちんと作っておかないと、権力は腐敗するので、以下のような仕組みづくりが必要になってきます。

## 具体的なガバナンスの仕組み

### 意思決定プロセスの透明化
- 取締役会での決議事項の明確化
- 重要な意思決定の記録と保管
- 決裁権限の明確な基準設定（金額や案件の重要度による）

### チェック＆バランスの仕組み
- 社外取締役による監督機能の確保
- 監査役による業務監査の実施
- 内部監査体制の構築
- 外部専門家（会計士、弁護士等）の定期的な関与

### リスク管理体制の構築
- コンプライアンス違反の防止
- 財務リスクの管理
- 情報セキュリティの確保
- レピュテーションリスクへの対応

### ステークホルダーとの関係構築
- 株主（投資家）との適切な対話
- 従業員との健全な関係維持
- 取引先との公正な取引関係
- 地域社会への貢献

### 起業初期のガバナンスの段階的な導入
起業初期の段階では、一度にすべての体制を整えることは現実的ではないので、以下のような段階的な導入がいいのかなと考えてます。

#### Phase 1：基本的な土台作り（即時〜3ヶ月）

##### 取締役会の運営ルールの確立
- 月次開催の定例化
- 議事録の作成と保管
- 重要議題の選定基準

##### 基本的な規程類の整備
- 職務権限規程
- 稟議規程
- 経理規程

### 重要な業務フローの文書化
#### Phase 2：監督機能の強化（3〜6ヶ月）
- 社外取締役の招聘
- 監査体制の確立
- リスク管理の基本方針策定
- コンプライアンス体制の基礎構築

#### Phase 3：持続的な体制の確立（6ヶ月〜1年）
- 内部統制システムの整備
- 定期的な監査・モニタリング
- 従業員教育・研修制度の確立
- 情報開示体制の整備

### ガバナンス強化のポイント
- 形式ではなく実効性を重視
- 単なるルール作りではなく、実際に機能する仕組みを目指す
- 現場の実態に即した運用可能な制度設計
- 定期的な見直しと改善

### 成長に合わせた柔軟な進化
- 組織の成長段階に応じた体制の見直し
- 新たな事業リスクへの対応
- ステークホルダーの期待に応える体制強化

### 企業文化との調和
- ガバナンスと企業理念の整合性確保
- 従業員の理解と協力を得る工夫
- コミュニケーションの活性化

---

このように、ガバナンスは単なる「制約」ではなく、持続的な成長を支える「基盤」として捉える必要があります。特にスタートアップ企業においては、成長のスピードを維持しながら、いかに適切なガバナンス体制を構築していくかが重要な経営課題となります。

権力の腐敗を防ぎ、健全な企業運営を実現するためには、このような意識的な仕組みづくりと継続的な改善が不可欠になるので、これは経営者自身が率先してガバナンスの重要性を認識して、実効性のある体制構築に取り組むのが良いと思います。

と言うことで、僕も絶賛計画やら何やら作成してますが、これまた人が足りないのでこの辺り一緒にやってくれる人絶賛募集してます。
プログラマの自己コンピテンシー評価

経験。主観。
自己評価の際の判別および備忘録
<dl>
<dt>Level.0 - はじめたて</dt>
    <dd>
        <ul>
            <li>調べても欲しい情報が出てこない。</li>
            <li>見たとおりにやっても動かない、動いても動く意味が分かってない。</li>
        </ul>
    </dd>
<dt>Level.1 - 入門</dt>
    <dd>
        <ul>
            <li>調べたらでてくる。</li>
            <li>何かを見ながら組めるようになる。</li>
            <li>後から作ったものを見直すとわからない。</li>
        </ul>
    </dd>
<dt>Level.2 - なれてきた</dt>
    <dd>
        <ul>
            <li>調べずに打てることが増えてきたと感じる。</li>
            <li>やったことなくても「このコマンドあるだろ」となる。そして実際にある。</li>
            <li>後から見直すと「もっとこうすれば…」が頭に浮かぶ。</li>
        </ul>
    </dd>
<dt>Level.3 - 中級</dt>
    <dd>
        <ul>
            <li>のちの困った自分の姿が浮かび、整理しながら打てる。</li>
            <li>機能を細分化したり、オブジェクト化したり、インターフェースができたり、基底クラスを作ったりするようになる。↑と似ているがすこしずつやりたいことに対して先読みできるようになる。</li>
            <li>後からコード見直しても自分は普通に読める。人に説明もできる。</li>
            <li>人の書いたコードが読める。</li>
        </ul>
    </dd>
<dt>Level.4 - けっこうできる</dt>
    <dd>
        <ul>
            <li>調べると超ピンポイントで悩みを解決する記事が出ることがある。<br>→突き詰め始めると同じようなところに行きつく証だと思っている。</li>
            <li>基本機能でできる/できないがわかってくる。</li>
            <li>考える時間：手を動かす時間=8:2ぐらい。</li>
            <li>技術ブログを残した方がいいかも。となる。実際あるとありがたい。</li>
        </ul>
    </dd>
<dt>Level.5 - プロ</dt>
    <dd>
        <ul>
            <li>調べても欲しい情報が出てこない。あんたがApexや！</li>
            <li><strike>見たとおりにやっても動かない、動いても動く意味が分かってない。</strike><br>→を作る側。<br>　→ので技術ブログがあっても読める人が少ない。</li>
            <li>外部連携は当たり前。連携先もLevel.4ぐらい触れる。</li>
            <li>基本機能だけで実装できないので、拡張機能を使う。あるいは拡張機能を自作するようになる。<br>→スキルがそのままお金に直結する。</li>
        </ul>
    </dd>
<dt>Level.99 - 魔王</dt>
    <dd>
        <ul>
            <li>↑が使うのを作る側。元締め。すごい。</li>
    </dd>
</dl>
CursorのComposer pane（Cmd + Shift + iで開くやつ）が動かない

※2024年12月19日時点の記事です
今後のアップデートによって改善される見込みが高いです。

# CursorのComposer paneが動かなくなってしまいました
Curosorのアップデートにより、Composer pane’Cmd + Shift + iで開くやつ）が
動かなくなってしまいました。

私はコレがないと効率が落ちてしまうので必死に直す方法を調べましたが、
ググったりTwitterで調べても日本語の情報が全く出てこなかったので、
同じく迷える日本人向けに記事を残します。

# 直せるのか
直すというよりも、Composer paneが動いていたバージョンへ下げることによって、
Composer paneは利用可能になります。

以下のCursor公式サイトのダウンロードページから、
Previous Versionをダウンロードしてインストールするだけです。
https://www.cursor.com/downloads

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493134/75ae9a5d-dfff-c842-e168-a9e0d62eb63a.png)


# Composer paneを使うためにバージョンダウンすべきか
「Composer paneがないCursorはCursorじゃない！」と思う方はバージョンを下げていいと思います。
しかし、一般的に推奨はできません。

というのも、v0.43.4から問題が発生しはじめたのですが、2024年12月19日時点でv0.44.3であり、
Composer paneが壊れてから今日までの間に、
いくつもの動作の安定性を向上させるためのアップデートがおこなわれてきました。

例えば、これまでCursorのコードの提案するとき、
日本語のコメントの一部を`<?>`のような謎の文字に置き換えようとしてしまうバグに悩まされていましたが、
最近のバージョンでは発生した覚えはなく、バージョンダウンしたら再現してしまいました。


# 参考
- Cursorのフォーラムの立てられたIssue
    - https://forum.cursor.com/t/hey-wheres-my-composer-window-popup/30434
DBのトリビア：照合順序、ご存知ですか？


## 照合順序とは
- 文字列の並び順や比較のルール
- 「ソート順」に影響
- おもしろいのは集約への影響
  「ナカシマ」と「ナガシマ」が同じものと扱われる！

----
## 照合順序の種類
- 半角全角を区別する／しない
- 濁点半濁点を区別する／しない
- カタカナを区別する／しない
- 大文字小文字を区別する／しない（アルファベット）

など

----
## デフォルト設定
- 通常はより細かく区別する設定だと思います
- SQL Serverの場合、DB／テーブル／SQL内のカラムに指定可能
　テーブル内のカラムにも指定できるかも・・・

----
## SQLでの上書き
- SQL文でその場限りの照合順序を指定することが可能

濁点半濁点、半角全角を区別せず集計する例
```sql
select
  id
  , count(name)
from employee
group by name collate Japanese_AI_WI
```

----
## 使いどころ（実例）
- ユーザが入力する物件名にもとづいた集計
- こちらとしては厳密に集計するのが当然と考えていた
- しかしお客様は「入力のぶれを極力吸収するべき」との考え
  → 半角全角、濁点などを区別せず集計することに決定

----
## 文字コードとの関係
- 文字コード：文字をどうバイナリデータで表現するか
- 本来照合順序とは直行する話だが、セットで語られることが多い
  どちらもソート順に影響を与えるし、文字コードに意識が行っていないときは照合順序にも意識が行っていいないことが多いと思われる

----
## 最後に
- DBを作るときに文字コードはよく話題に挙がるが、照合順序はそれほどでもない気がしたので話題にしました
- 「そもそもテキストで集約するのが曖昧さの原因では？」という考え方はある
  → 厳密さが必要な場合はコードで集約する
- 知っていることが重要！
LINE WORKS 監査ログのダウンロード


# LINE WORKS 監査ログのダウンロード

LINE WORKSの監査ログを簡単にダウンロードできるPythonサンプルコードを紹介します。このツールはGoogle Colab上で動作し、手軽に試すことが可能です。監査ログの取得はセキュリティや運用の観点から重要で、このサンプルを活用することで効率的に管理できます。

## サンプルコードについて

このサンプルコードは、以下の機能を提供します：

- **監査ログのダウンロードURLの取得**：LINE WORKS APIを使用して監査ログのダウンロードURLを取得します。
- **CSV形式でログを保存**：取得した監査ログをローカルにCSV形式で保存します。
- **Google Colab対応**：環境構築が不要で、すぐに試せます。

ノートブックは以下のリンクから利用できます：  
[**LW_Audit_Log_Download_Tool.ipynb**](https://colab.research.google.com/drive/1cZwdPMbVNGXmoOAxxaIWBMoCrUPQkTzq?usp=sharing)

## サンプルコードの使い方

### 1. Google Colabで実行

1. 上記のリンクをクリックしてGoogle Colabを開きます。
2. 必要なパラメータ（アクセストークンやログ期間など）を入力します。
3. 実行ボタンをクリックして監査ログをダウンロードします。

---

### 2. サンプルコードの内容

以下はコードの主要な部分です。

#### 必要なライブラリのインストール

Google Colabで実行する際には、以下のコマンドでライブラリをインストールします。

```python
!pip install requests
```

#### 設定パラメータの入力

監査ログを取得するために必要なパラメータを入力します。

```python
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"  # LINE WORKS監査ログAPI用アクセストークン
SERVICE = "message"  # 取得対象のサービス (例: message)
START_TIME = "2024-12-01T00:00:00%2B09:00"  # 開始日時 (URLエンコード済み)
END_TIME = "2024-12-19T23:59:59%2B09:00"  # 終了日時 (URLエンコード済み)
LANGUAGE = "ja_JP"  # 言語設定
OUTPUT_FILE = "audit_logs.csv"  # 保存ファイル名
```

#### ダウンロードURLの取得

以下の関数で監査ログのダウンロードURLを取得します。

```python
def get_audit_logs_url():
    headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
    params = {"service": SERVICE, "startTime": START_TIME, "endTime": END_TIME, "language": LANGUAGE}
    response = requests.get(BASE_URL, headers=headers, params=params, allow_redirects=False)
    if response.status_code == 302:
        return response.headers.get("Location")
    else:
        raise Exception(f"ダウンロードURL取得失敗: {response.status_code}")
```

#### 監査ログのダウンロード

取得したURLを使用してCSVファイルを保存します。

```python
def download_audit_logs(download_url, output_file):
    headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
    response = requests.get(download_url, headers=headers, stream=True)
    with open(output_file, "wb") as file:
        for chunk in response.iter_content(chunk_size=1024):
            file.write(chunk)
    print(f"✅ 監査ログを{output_file}に保存しました。")
```


## 実行結果

Google Colab上で実行すると、以下のようにログが保存されます。

1. ダウンロードURLが取得されるとコンソールに表示されます。
2. 監査ログが指定したファイル名でローカルに保存されます。

## 注意事項

1. **アクセストークンの有効期限**：アクセストークンが期限切れの場合、新しいトークンを取得してください。
2. **取得期間**：指定できる期間は最大31日です。
3. **認証エラー**：正しいアクセストークンを設定してください。

## まとめ

このサンプルコードを使用すると、LINE WORKSの監査ログを効率よく取得できます。Google Colabを利用することで、簡単に試すことが可能です。  
ぜひ業務の効率化にお役立てください。

フィードバックや質問があれば、コメント欄でお知らせください！