OmniAICreator/Qiita-1.07M huggingface dataset:
challenge to Log A Call 



# We couldn’t find a logged call in Claire’s account with the correct record details. Make sure that the Subject, Related To, and Regarding fields are correct.

+ [Manage Client Interactions - Log a call error](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T5jlT)


:::note
I finally passed this challenge after change Time Zone from Japan time to New York Time and Locale & Language from Japanese to English.
:::

:::note
I was having the same issue...I went into Set Up -> Profiles -> System Administrator (since that is what our User is set up as within the Dev Org) -> Object Settings -> Events & Tasks -> Make sure -Master- is set as Assigned Record Type. It defaulted as Advisor/Client Associate Task and that is why we're not seeing it within the Person Account.

I was able to have my challenge validated once I filled the fields: Name and Related to in both tasks. 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000077jRy9SAE 
:::

+ [Error on a challenge: Manage Client Interactions on FSC module](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HEGpS)

:::note
I finally fix this, I mistakenly chose "Call" on the "Task Type" field. I should leave it as blank and fill in the "Task Subtype".
:::

+ [私はTHチャレンジでクレア・ジョンソンの通話記録とタスクを完了しようとしています。アクティビティタブの下にはどちらのオプションもありません。アクティビティタブに何かを作成するオプションもありません。私はクレアのアカウントにいます。リグに渡します。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ifuOp)

:::note
私の場合は、「名前」フィールドに「Claire Johnson」と入力するとうまくいきました。Trailhead は「ハンズオン チャレンジ」の手順を更新して、ユーザーが「名前」フィールドに入力する必要があることを理解できるようにすべきだと思います。
:::
おめぇだれだぁ？

これは自然係鯖のS-Server 1 Advent Calendar 2023の15日目です。
https://adventar.org/calendars/9435

# さっそく本題
![codqJS-E_400x400.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/568f7992-90f3-2c54-c6f6-47e6a5c808a8.jpeg)



初めましての方は初めまして、知っている方はまぁ、、うんええわ。
孤独のコーヒーと申します。DPIの開発・運営しています。詳しいことはこの記事で追々、、
実は参加したのは、2021年の10月です。いつまで陰キャしてたのでしょうか。
そして、一年近く陰キャ（ROM専）し、2023年に入り少しづつ発言するようになり、同年の4月に**一応**副管理者になりました。

(余談ですが、この写真はコーヒーがキャンプ場で撮ったものであり、
人間が真ん中にいますがこれ妹です。
そろそろ更新したいのですがこのキャンプ場って毎年なぜか曇りか雨なんですよね。(())

## 副管理者
え。副管理者だったの？と思った方もいらっしゃたと思います。
はい副管理者です。
といっても副管理者としてほぼ仕事していない肩書だけです。

## 自然係さん、他の管理者様、大変申し訳ございません。

けど俺が仕事しないのは一つ理由があります。それは俺がオンラインだとほぼなにも起きていないからですｗ。まぁあと他の管理者が有能もありますけどね。
なんならそこまで大きなトラブル起きないです。はい
管理者が仕事しない＝平和が一番です。

# 鯖の実情
まぁ、自然係鯖では、自然とついているから防災に関しては有識者の方々が集まっているものの、うまくまとまっているここでしかない特徴があります。気象の有識者があつまると正直、、めんどくさいです。はい。
しかしこの鯖ではうまく溶け合い、ゲームをしたり勉強したりなどをしています。
一応自然係鯖のカレンダーなんでこれ関連書くけど、、あとなにかあるかな
（授業中に書き書きしてる悪い子です。

# おめぇなにしてんだ？
まぁ、一応副管理者なのに無名なので自己紹介します。
北海道在住の高校生、孤独のコーヒーと申します。
孤独のコーヒーと聞くと30代男性独身と思われますが、一応高校生です。
DPI-Botという災害提供を特徴としたBOTのメインで開発している人です。
（自然係鯖にも一応導入しています。）
ゲームは原神・VALORANT、、とかまぁ諸々
バイトで一応扶養ギリギリで働いていますが、なぜか消えます。
消えるんです。ホヨバースに20万貢いでいるのはわかっています。
それ以外はわかりまへん。
次雷電復刻らしいですね。あと一体で完凸なので完凸します。
ナヒナヒも最低２凸したいな。。。

こんな高校生です。バカのかな。
# 最後に
自然係鯖で良いDiscordライフを送れるようお祈りしています。
そのために管理者は頑張ります。
そのためには利用者の協力も必要です。
よろしくお願いします



~~**（内容薄くてごめんね。これ書いてるの２２時なんだ）**~~
完成したけど投稿忘れてわ
ごめんなさぁいいぃ
wslでelixir その120

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
githubに、livebook、アップしたので、にぎやかにしてみた。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/34b2c6b4-dd19-f2d6-253b-ddc74b278979.png)

# サンプルコード

```
<div><img src="./doc/openart.png" /></div>

# ohi_Livebook
elixir livebook



- hello2.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fhello2.livemd)

- map.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fmap.livemd)

- qiita.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fqiita.livemd)

- ronri.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fronri.livemd)

- socket.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fsocket.livemd)

- vega.livemd
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgithub.com%2Fohisama%2Fohi_Livebook%2Fblob%2Fmain%2Fstage1%2Fvega.livemd)



```


# 成果物

https://github.com/ohisama/ohi_Livebook


以上。
【データベース・学習ログ1】データベースの基本

<font color=gray>使用教材：侍テラコヤ『Javaとデータベースの連携方法を学ぼう』https://terakoya.sejuku.net/programs/129/chapters</font>

## データベースとは
特定の文字・数値や条件式によって、対象となるデータを取り出せる表」のこと。業界では通称DB(ディービー)といわれる。
(例)通販サイト
- 会員情報
- 商品データ
- 購入履歴
ログイン機能や購入機能はデータベースに保存されたこれらの情報に紐付けて実装される。

#### データベースの種類
- リレーショナル型(表形式)
- 階層型(ツリー状)
- ネットワーク型(網目状)

データベースを操作をする言語が**SQL**である。
## SQLについて

《できること》

- 検索・追加・更新・削除
- テーブルの作成・削除
- 権限や文字コードの設定

《特徴》

- 英語のように構文が決まっている
- データベースに対してのみ操作命令ができる
- 命令方法には対話型(ユーザーが直接SQLコマンドを打ち込む)と埋め込み型(ソースコードに埋め込む)がある
- ISOは標準化されている

《用語》

- テーブル：表、シート
- カラム：列
- レコード：行
- フィールド：セル

《SQLとMySQL》
MySQLはデータベースそのもの、SQLはMySQLを操作する言語。

《命令の種類》
- DDL：データ定義言語。「データベースにテーブルを作成する(CREATE)・削除する(DROP)」「既存のテーブルにカラムを追加する」
- DML：データ操作言語。「データを取得(SELECT)」「カラムやレコードの追加(INSERT)」「列の値を更新(UPDATE)」「行の値の削除(DELETE)」 
- DCL：データ制御言語。「操作権限を付与(GRANT)」「REVOKE(操作権限を削除)」

《ルール》
- 文字列はシングルクォート(')で囲む。
- 数値は囲わない。
- データの文字列以外は半角英数字で記述。
- コマンドは大文字で書く。(INSERT,INTOなど)
- データベース、テーブル、カラム名は小文字で書く。(id,name,ageなど)

<hr>
1週間で声の改善：活舌の悪い私が動画撮影に向けて

# **はじめに：動画撮影の課題**

こんにちは、EDOCODEのPMの山田です。
最近、私たちのサービスPUSHCODEでは、サービスの導入プロセスを改善し、改善後の導入マニュアルの動画を撮影することになりました。
マニュアル動画は顔を映して撮影することとになり、カメラの前に立ち、顔を映しながら話すことは、私にとってはじめての経験です。

そんな中で浮かび上がった最大の課題は、私の声です。
私は早口で、言葉が不明瞭で、声もこもりがちなので、話し方はとても汚い方です。そのため、自分の話し方に自信が持てず、今のままでは動画でのパフォーマンスがとても心配でした。

動画撮影までに残された時間は約1週間。私は、この短期間で自分の話し方を劇的に改善するチャレンジを決意しました。このチャレンジは単に動画撮影のためだけでなく、今後の仕事でも非常に役立つと思ったからです。

# **声の出し方の重要性：ビジネスパーソンにとってのスキル**

ビジネスの世界では、コミュニケーションが成功の鍵を握ります。
しかし、自分もそうですが、多くのビジネスパーソンは声の出し方に十分な注意を払っていないと思います。プレゼンテーションのスキルや業務知識の向上には時間を費やすものの、話し方そのものにはあまり注目していません。
これは、声の出し方が自然と身につくものと考えているためだと思います。しかし、効果的な声の出し方は訓練と実践を通じて磨かれるスキルです。

### 声の出し**方の改善がもたらすメリット**

声の出し方を改善することで、以下のような多くのメリットが得られると思います。

- **印象の向上**：はっきりとした話し方は、自身の印象がとても良くなり、聞き手からの信頼を得ることに繋がります。また、話し方に自信を持てれば、コミュニケーション自体の自身も持つことができます。
- **情報伝達の向上**：明瞭な発音と適切な速度で話すことで、情報は正確に伝わります。特に多国籍のメンバーがいる環境では、ゆっくり明瞭に話すことはとても重要です。
- **リーダーシップ**：明確なコミュニケーションは、リーダーとしての信頼を築きます。

話し方は、単なるコミュニケーションのツールではなく、ビジネスパーソンとしてのブランドを形成する要素です。この重要性を理解し、実践に移すことが、プロフェッショナルとしての成長に繋がります。

# **話し方改善のためのアプローチ**

話し方を改善するために、私は具体的な方法と日々の練習に焦点を当てました。以下はその取り組みです。

### 1. **腹式呼吸**

**目的**：深くリラックスした呼吸を通じて、声の安定性とクリアさを向上させます。

**実際の取り組み**：就寝前にベッドに仰向けになり、腹式呼吸を実践しました。限界まで空気を吸い込み、お腹を膨らませ、次に限界まで息を吐き切る練習を毎晩行いました。

### 2. **声のトーンの調整**

**目的**：普段よりも高いトーンで話すことを意識し、表現に幅を持たせる。

**実際の取り組み**：普段の話し声よりも一段高いトーンを意識しました。鼻のあたりから声を出すイメージで、適当な文章を音読しました。また、腹式呼吸の練習と組み合わせて、腹式呼吸をしながら高いトーンで「あ～」と声を出し続ける練習を行いました。

### 3. **活舌の改善**

**目的**：発音の明瞭さを高め、滑らかな話し方を実現する。

**実際の取り組み**：

- **顔の筋肉のマッサージ**：まずは口周りの筋肉をほぐすために、マッサージを実施しました。これにより、口の動きがスムーズになりました。
- **正しい口の形の練習**：あいうえおの口の形を意識しながら、50音を繰り返し発音しました。
- **舌の筋トレ**：舌の筋肉を鍛えるためのエクササイズを実施し、さらに早口言葉で練習を行いました。

これらの練習は、毎日コツコツと続けることで、徐々に効果を発揮し始めました。日々の小さな改善が、大きな変化に繋がることを実感しました。
特に即効性があったのは「顔の筋肉のマッサージ」です。痛いくらいゴリゴリにマッサージして、自分の顔の筋肉が驚くほど凝り固まっていたことに気づきました。

# **実践：動画撮影の準備**

それでは、実際の動画撮影に向けて、私が行った準備は以下の通りです。

### **スクリプトの作成と分析**

動画の内容を最大限に伝えるため、まずはスクリプトを作成しました。このスクリプトは、PUSHCODEの改善後の導入プロセスを紹介するものです。

スクリプトを作成した後、どの部分を強調するべきか、どの部分をどのトーンで話すべきか、そしてどの部分をゆっくり話すべきかを事前に決めました。
このプロセスを通じて、メッセージを明確かつ効果的に伝えることができるようにしました。

### **音読と練習**

スクリプトの準備が整ったら、次は音読と練習の段階に移りました。スクリプトを何度も読み上げ、計画した強調点やトーンの変更を意識しながら、話し方に慣れることを目指しました。この練習は、自信を持ってスムーズに話せるようにするために重要でした。

この準備プロセスは、動画撮影への自信を高めるとともに、私の話し方の改善にも大きく寄与しました。

# **動画撮影の経験と学び**

1週間という短期間の集中練習の後、とうとう動画撮影の当日です。以前の自分と比較して、確実に声の出し方が改善されたと感じていたので、撮影では自信をもって話せたと思います。録画した動画を後日見てみたら、声の質は以前よりもだいぶ改善されたと思います。しかし、話し方に集中しすぎた結果、私の表情が硬くなり、少し怖い顔になってしました。

結局自分にとっては少し恥ずかしい動画になってしまいましたが、今後の改善点に気づけのは嬉しいことです。

# **終わりに：継続する改善と次なるステップ**

この一連の経験から、声の出し方や話し方を改善することは、一度きりの努力ではなく、継続的な取り組みであることが明らかになりました。一週間という短期間のチャレンジは、想像以上に大きな改善ができたため、今後さらに改善していくモチベーションにもなっています。
まだまだ学ぶべきことはたくさんあります。コミュニケーションのスキルは、日々の実践と反省を通じて磨かれるものです。
input[type="date"]で削除（クリア）ボタンが消せない件

https://stackoverflow.com/questions/74811101/how-do-i-remove-the-clear-button-from-input-type-date-in-chrome

入力フィールド自体のスタイリングしかできないそうです。

https://codepen.io/MuTLY/pen/VvJaMx

ちなみに削除ボタンはChrome94から追加されたそうです。

https://support.google.com/chrome/thread/135445711/chrome-94%E3%81%A7%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%9F%E6%97%A5%E4%BB%98%E5%85%A5%E5%8A%9Binput%E3%81%AE%E5%89%8A%E9%99%A4%E3%83%9C%E3%82%BF%E3%83%B3%E5%89%8A%E9%99%A4%E6%96%B9%E6%B3%95?hl=ja
5歳児と一緒に楽しく学ぶ！プログラミングレッスン

# はじめに

小学校でプログラミング学習が授業として行なっているということもあり、
最近、5歳の子供といろいろな学習ソフトを使って、
プログラミングを一緒に楽しんでいました。

その中でも
**「[ナビつき!つくってわかるはじめてゲームプログラミング](https://www.nintendo.co.jp/switch/awuxa/index.html)」**
というのが優れもので、とても良かったので、
今回はその経験をもとに
**「よかった点」「悪かった点」**
についてお話しできればとおもいます。
![スクリーンショット 2023-12-08 20.01.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3039645/6447b82d-7045-f46a-9aa6-97e6719639d5.png)

※アフィリエイトとかではなく、純粋にいい教材だったので、気になった方がいれば是非参考にしてみてください。

# よかった点

## 1.直感的なプログラミング

このゲームでは、「**ノードン**」という可愛らしいキャラクター同士を線で繋ぐだけで、
ロジックが構築できます。
実際にやってみて思ったのが、ただゲームをしているような気持ちなのですが、

**「ボタンを押したときにこうする」**
**「時間の経過とともにイベントを発火する」**

など普通のプログラミングとやっていることが変わらないです。

これなら本格的なプログラミングを始めてもスムーズに入っていけそうだなと思いました。
(特にうちの子はモノがこわれたしゅんかんノードンが大好きらしく、そればかり使ってました)
![スクリーンショット 2023-12-08 20.03.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3039645/ef88a1be-0292-7a21-0cab-ebe9530044f1.png)


## 2.簡単なタッチ操作

ただロジックを組み立てるだけではなく、
ものが動く角度や、イベント発火の間隔、さまざまなパーツの配色など
をタッチ操作で簡単にカスタマイズできます。
かなり細かく指定できるのですごくやりがいがありました。

## 3.無理なく学べる

学習を進める中でナビゲーターによる解説などもあるのですが、
具体的な操作方法などを都度強調してくれるので、
文字が読めない子供でも、学習を進めるのが楽しそうでした。

ちょっと家事などで一緒にできない時間があっても、うちの子は一人で進められていました。
正直つきっきり覚悟だったのでこれには本当にびっくり

## 4.フリープログラミングモードがマジですごい

フリープログラミングというモードがあり、オリジナルのゲームも作成可能です。
子供の自由な発想でゲームを考えて、作り上げていくので完成した時にすごい嬉しそうでした。
親子で「あーでもないこーでもない」いう時間自体もすごい楽しかったです。

# 悪かった点

## 1.専門用語の理解が必要

一応学習がメインなので、ナビゲーションのテキスト内容に、専門的な知識や用語が出てくることがあります。
5歳の子供には少し難しい内容だったこともあり、親が噛み砕いて説明してあげる必要がありました。
知識がないとこの辺はハードルが高いのかなとおもいました...。

## 2. 親が熱中しすぎてしまう

**この悪かった点が一番深刻かもしれないです...**

ゲームが楽しくすぎて、親が子供よりも熱中してしまい子供に泣かれてしまうこともしばしば...
(これは私の家庭独自の事情かもしれませんが)

## まとめ

**たかがゲームでしょ**

と思って始めた
「ナビつき!つくってわかるはじめてゲームプログラミング」

5歳の子供と一緒に楽しみながら学べる素晴らしい学習ツールでした。

直感的な操作や可愛らしいキャラクターたちが、
プログラミングを身近で楽しく感じさせてくれて
うちの子供はプログラミングが大好きになりました。

あくまで私個人の意見ではありますが、
よかった点・悪かった点是非参考にしてみてください！
今すぐに！FastAPIとOpenSearchで開発を始めるためのテンプレート！

FastAPI、めっちゃ便利ですよね！

昔はDjango（というかDjango REST Framework）をよく利用しており、Webバックエンドの開発はほぼ全てDjangoだったんですが、今年FastAPIで開発をしてみたらめちゃ開発体験がよく、最近ずっと利用しています。

なんですが、Djangoみたいなフルスタックフレームワークと違って、基本的な設定などは自分で行わないといけないのが結構大変だなーと思っています。

なので！サクッと使ってすぐテンプレートを作りました！

弊社はGIS（地理空間情報）を専門とする会社なので、おまけでPostGISというPostgreSQLの地理空間拡張と、最近とにかく利用しまくっているOpenSearchのコンテナも突っ込んでおきました！

https://github.com/nokonoko1203/fastapi-template

## 使い方

リポジトリをダウンロードして、その後フォルダ名を変更します。
（フォルダ名は好きな名称で）

```bash
git clone https://github.com/nokonoko1203/fastapi-template.git
mv fastapi-template/ fastapi-app
cd fastapi-app
```

アプリケーションを初期化します。
`app`の部分はパッケージ名になるので、ここも自由な名称にしましょう

```bash
make init new=app
```

アプリケーション群を起動します。

```bash
make run
```

まずはFastAPIが立ち上がっていることを確認するために`http://localhost:8080/docs`を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/5616fe50-be0f-3620-96e8-8be82e1fcf19.png)

API仕様書が表示されました。
FastAPIはこの機能が特に便利ですよねー！

次に`http://localhost:5601`に接続し、OpenSearch dashboardを開いてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/25ef9bc9-c577-7d46-314f-3670938b44d7.png)

ユーザー名・パスワードはadmin/adminで設定しています。

ログインできたら左上のハンバーガーからサイドバーを開き、一番したのdev toolsをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/03c3ccc1-3fb1-d411-602c-ba9ee593ed55.png)

簡単なクエリをすると、ちゃんと動いていることがわかりますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/cca7f99c-9015-ea5f-2ec5-845529a6604e.png)

詳しくは説明しませんが、FastAPIとの接続もできるようになっています！

- `api/src/app/services/opensearch.py`

```Python
from typing import Annotated

from fastapi import Depends, Request
from opensearchpy import AsyncOpenSearch
from sample.config import settings


def get_opensearch(request: Request) -> AsyncOpenSearch:
    auth = (settings.opensearch_master_user, settings.opensearch_master_password)
    return AsyncOpenSearch(
        settings.opensearch_url,
        http_auth=auth,
        use_ssl=True,
        verify_certs=False,
        ssl_assert_hostname=False,
        ssl_show_warn=False,
    )


Opensearch = Annotated[AsyncOpenSearch, Depends(get_opensearch)]
```

- `api/src/sample/app.py`

```Python
from fastapi import FastAPI

from .services.opensearch import AsyncOpenSearch

app = FastAPI()


@app.on_event("shutdown")
async def app_shutdown(es: AsyncOpenSearch):
    await es.close()


@app.get("/")
async def hello():
    return {"message": "Hello World"}
```

- `api/src/sample/config.py`

```Python
from pydantic_settings import BaseSettings


class _Settings(BaseSettings):
    opensearch_url: str = "https://opensearch:9200"
    """OpenSearch の接続URL"""

    opensearch_master_user: str | None = "admin"
    """OpenSearch のマスターユーザー名"""

    opensearch_master_password: str | None = "admin"
    """OpenSearch のマスターパスワード"""


settings = _Settings()
```

FastAPIでOpenSearchを触っていくためのパッケージの導入や、設定が完了しているので、すぐにデータの検索・表示などを行うアプリケーションを作成していくことができます！

ぜひご利用ください！
scroll-margin-topが指定できなくて困った

# 背景
各セクションに移動した際、追従ヘッダに遷移先の要素が隠れてしまう際にscroll-margin-topを使って解消するかと思います。

https://developer.mozilla.org/ja/docs/Web/CSS/scroll-margin-top

input要素にscroll-margin-topを指定しても、隠れてしまうままで詰まっていた為です。

# input要素にscroll-margin-topを指定できない理由
scroll-margin-topはスクロールされる要素に指定できる為です。
スクロールされる要素というのは、 block レベル要素です。

## block レベル要素
見出し・段落・表など、文書を構成する基本となる要素で、一つのかたまり(ブロック)に意味や役割を与える要素

 block レベル要素の例は以下です。
```<address>、 <blockquote>、 <div>、 <dl>、 <fieldset>、 <form>、 <h1>、 <h2>、 <h3>、 <h4>、 <h5>、 <h6>、 <hr>、 <noscript>、 <ol>、 <p>、 <pre>、　 <table>、　 <ul>```

## inline レベル要素
主にブロックレベル要素の内容の一部となる要素

inline レベル要素の例は以下です。
```<a>、 <abbr>、 <b>、 <big>、 <br>、 <cite>、 <code>、 <dfn>、 <em>、 <i>、 <img>、 <input>、 <kbd>、 <label>、 <q>、 
、 <samp>、 <select>、 <small>、 <span>、 <strike>、 <strong>、 <sub>、 <sup>、 <textarea>、 <u>```

 # 参考
 - [ブロックレベル要素とインライン要素](https://creatorquest.jp/reference/html/block-inline/#:~:text=%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%AC%E3%83%99%E3%83%AB%E8%A6%81%E7%B4%A0%20%EF%BC%88%20Block%2DLevel,%E8%A6%81%E7%B4%A0%E3%81%8C%E5%88%86%E9%A1%9E%E3%81%95%E3%82%8C%E3%82%8B%E3%80%82)

- [scroll-margin-top](https://developer.mozilla.org/ja/docs/Web/CSS/scroll-margin-top
)
Socks5プロキシ経由でサーバーにsshするには

下記の様にすることで、netcatを利用してSocks5プロキシに接続して、サーバーにssh接続できる。
```
Host hostname
    HostName xxx.xxx.xxx.xxx
    ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:9050 %h %p
```

ncの-X 5のオプションは、Socks5のオプション

ProxyCommandオプションではなく、mkfifoを経由して、sshとncを接続して、Tor経由で、サーバーにssh接続するには、次のようにして行う。

```
mkfifo /tmp/proxyfifo
nc -X 5 -x 127.0.0.1:9050 remote-host 22 < /tmp/proxyfifo | nc -l -p 2222 > /tmp/proxyfifo &
```
ここでのコマンドの説明は以下の通り：

* mkfifo /tmp/proxyfifo：名前付きパイプ（FIFO）を作成します。これはncとSSH間のデータ転送に使用されれる。
* nc -X 5 -x 127.0.0.1:9050 remote-host 22：ncを使用して、SOCKS5プロキシ (127.0.0.1 のポート 9050) を介してリモートホスト (remote-host) のポート 22（SSHのデフォルトポート）への接続を開始する。
* nc -l -p 2222：ローカルマシン上でポート 2222 をリッスンし、接続を待つ。
&：このコマンドをバックグラウンドで実行する。

sshでncに接続する。
```
ssh -p 2222 localhost
```
第二世代　bq2040 Lチカ

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の20日目です。

ERS-210のバッテリーについて、Loïc POLLIERさんのレポジトリbattmonを参考に、一から勉強したメモをまとめています。
https://github.com/lpollier/battmon/tree/master

ERS-210のバッテリーの保護回路はGas gage ICとしてBQ2040が使用されています。
https://www.ti.com/lit/ds/symlink/bq2040.pdf?ts=1698077054205

仕様書を見ていたところ、バッテリー残量を表示するLEDの端子を見つけました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/750c24c2-000f-fdfe-c194-ba5b95065550.png)

今回はバッテリーのBQ2040にLEDをつけてLチカを試みました。これはリフィルや外部電源による電力供給がうまくいかなかったときにBQ2040の状態を確認するために行った検討でした。

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::

:::note
業務外の個人的な検討活動です。
:::

#### LEDとスイッチの取り付け
仕様書の図面に従い、BQ2040のピン4-7それぞれにLEDを接続し、ピン10にスイッチを取り付けました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/eae2bfe4-3513-216b-bbfe-5914f957f4aa.png)

#### 動作確認
今回は保護回路付きの18650を2つ使用しました。
後日説明するトラップ回避作業をしながらフル充電した18650を取り付けスイッチを押したところ、一つだけLEDが早く点滅する「残量がない」という表示になりました。

この時点までバッテリーの保護回路がまったく動作しない状況が続いていたので、何らかの反応を得ることができたのは非常にうれしかったです。
ここからバッテリーが使用できるために必要な作業はbattmonにも書かれてあったのですが、その意味に気づくのにはかなり時間がかかりました。

その作業については、22日目のリフィルのページに続きます。

#### 警告をもう一度
今回のAdvent Calenderでバッテリーセルの交換について考察しますが、非常に危険ですので知識と教養を深める目的で調べたことをまとめました。
十分な安全対策を講じなければ、実行することはお勧めできません。
重要なことなので、もう一度書きます。

:::note alert
警告
この記事について作者はいかなる責任も負いません。
バッテリーの分解、改造は非常に危険な行為です。
:::
Pythonとnumpyとmatplotlibでできる愛の告白

# はじめに
本ページは恋愛とは無縁の方には必要のないものとなっております。
心に思う人がいない方は即刻作ることをおすすめする。
将来の自分のために残すものなので乱雑なのはご容赦いただきたい。

# ハート関数
```math
y = x^\frac{2}{3}+\frac{4}{5}\sqrt{\frac{9}{10}-x^2}\sin(\alpha x\pi)　 \alphaは定数
```
この数式をグラフにするとハートになるらしい。

# 実際にコードに起こしてみた
**■コード**
```python:codo.py
import math
import numpy as np
import matplotlib.pyplot as plt

p = math.pi
x = np.linspace(-1,1,1000)
y = x**(2/3) + 4/5 * np.sqrt(9/10 - x**2) * np.sin(100*x*p)

fig = plt.figure()
ax = fig.add_subplot(111)

plt.ylim(-0.75,1.5)
plt.xlim(-1,1)
plt.title("I LOVE YOU",fontsize=24)
plt.plot(x,y,color="r")
plt.plot(-x,y,color="r")

ax.set_aspect("equal")

plt.show()
```
**■それぞれの意味**
```python:s.py
import math
import numpy as np
import matplotlib.pyplot as plt
```
今回使うライブラリである**math**, **numpy**, **matplotlib**をimportしている。
これらの解説は以下のサイトを見るとよい。
1.***math***:https://marusankakusikaku.jp/python/standard-library/math/
2.***numpy***:https://qiita.com/hassiweb/items/907033618070958fb708
3.***matplotlib***:https://ai-inter1.com/python-matplotlib/

```python:p.py
p = math.pi #pにπを代入
x = np.linspace(-1,1,1000) #横軸範囲指定
y = x**(2/3) + 4/5 * np.sqrt(9/10 - x**2) * np.sin(100*x*p)
```
|x = np.linspace(-1,1,1000)|
|:-|
-1から1までの間を。等間隔で1000個の点に分割した点を作成して、変数xに代入する。

|y = x**(2/3) + 4/5 * np.sqrt(9/10 - x**2) * np.sin(100 * x * p)|
|:-|
ハート関数をpythonでの式に置き換えたもの。
<font color="Red">注意：</font>mathの関数はこの式内では使えない。

```python:l.py
plt.ylim(-0.75,1.5)
plt.xlim(-1,1)
plt.title("I LOVE YOU",fontsize=24)
plt.plot(x,y,color="r")
plt.plot(-x,y,color="r")
```
基本的に上記のmatplotlib解説サイトを見ればよい。
一点だけ補足説明。
```python:i.py
plt.plot(x,y,color="r") #右半分
plt.plot(-x,y,color="r") #左半分
```
この部分は片方だけだと半分かけたハートになる。

```python:t.py
fig = plt.figure()
ax = fig.add_subplot(111)
|
|
ax.set_aspect("equal")
```
ここでは出力されるグラフのアスペクト比を変更している。

**■出力されたグラフ**
最終的に次のようなグラフが出力されるはずだ。
![ハートグラフ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3652263/ff6dbffc-3465-c61b-a670-51fbae97ad58.png)

# 最後に
これで準備は万端だ。
しかし、本番前にしっかりと忘れてはいけないことがある。
一つは相手のパソコンにライブラリがインストールされているか。
もう一つは、多くの場合こんな回りくどいことをするよりも、直接伝えたほうが成功率は高いということ。
Azure の Database 的な諸々

## Database 的な諸々

https://learn.microsoft.com/ja-jp/training/modules/design-data-storage-solution-for-relational-data/

### SQL Database

https://learn.microsoft.com/ja-jp/azure/azure-sql/database/features-comparison?view=azuresql

> SQL Server と SQL Database または SQL Managed Instance に共通する機能は次のとおりです。

> 言語機能 - フロー制御言語のキーワード、カーソル、データ型、DML ステートメント、述語、シーケンス番号、ストアド プロシージャ、変数。
データベース機能 - 自動チューニング (プランの強制)、変更の追跡、データベース照合順序、包含データベース、包含ユーザー、データ圧縮、データベースの構成設定、オンライン インデックス操作、パーティション分割、テンポラル テーブル (ファースト ステップ ガイドを参照)。
セキュリティ機能 - アプリケーション ロール、動的データ マスク (ファースト ステップ ガイドを参照)、行レベル セキュリティ、および脅威の検出。SQL Database および SQL Managed Instance についてはファースト ステップ ガイドを参照してください。
マルチモデル機能 - グラフの処理、JSON データ (ファースト ステップ ガイドを参照)、OPENXML、空間、OPENJSON、および XML インデックス。


https://learn.microsoft.com/ja-jp/azure/azure-sql/database/elastic-scale-introduction?view=azuresql

- Elastic Database 
- 水平及び垂直スケーリング
- シャーディング

https://learn.microsoft.com/ja-jp/azure/azure-sql/database/service-tier-hyperscale?view=azuresql

>Azure SQL Database の仮想コア購入モデルには、サービス レベルの選択肢が 3 つあります。

- General Purpose
- Business Critical
- Hyperscale


https://learn.microsoft.com/ja-jp/azure/azure-sql/managed-instance/managed-instance-link-feature-overview?view=azuresql

#### ディザスタリカバリ

https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-sql#combining-bcdr-technologies-with-site-recovery

https://docs.microsoft.com/ja-jp/azure/azure-sql/database/active-geo-replication-overview

https://learn.microsoft.com/ja-jp/azure/azure-sql/database/high-availability-sla?view=azuresql&tabs=azure-powershell



#### 暗号化

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/encryption/sql-server-encryption?view=sql-server-ver16

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/encryption/always-encrypted-database-engine?view=sql-server-ver16

https://learn.microsoft.com/ja-jp/sql/relational-databases/security/dynamic-data-masking?view=sql-server-ver16


### Cosmos DB

https://learn.microsoft.com/ja-jp/azure/cosmos-db/introduction

https://learn.microsoft.com/ja-jp/azure/cosmos-db/choose-api

> NoSQL 用 API は Azure Cosmos DB ネイティブ
> MongoDB、PostgreSQL、Cassandra、Gremlin、Table 用の API 


https://learn.microsoft.com/ja-jp/azure/cosmos-db/nosql/how-to-multi-master?tabs=api-async

https://learn.microsoft.com/ja-jp/azure/cosmos-db/consistency-levels

> 最強から最弱の順に、次のレベルがあります。
厳密
有界整合性制約
Session
一貫性のあるプレフィックス
最終的

https://learn.microsoft.com/ja-jp/azure/cosmos-db/synapse-link
> Azure Synapse Link for Azure Cosmos DB は、クラウド ネイティブのハイブリッド トランザクションと分析処理 (HTAP) の機能です。これを使用すると、Azure Cosmos DB 内のオペレーショナル データに対してリアルタイムに近い分析が可能になります。 

https://learn.microsoft.com/ja-jp/azure/cosmos-db/change-feed
> Azure Cosmos DB の変更フィードは、コンテナーに対して行われた変更が発生した順番で記録されている永続的な記録です。 Azure Cosmos DB の変更フィードのサポートは、Azure Cosmos DB コンテナーの変更をリッスンすることで機能します。


### アーキテクチャ

https://learn.microsoft.com/ja-jp/azure/architecture/databases/

## 参考
[【Azure】Azure Synapse Analyticsを用いてAzure SQL Databaseにデータを読み込む際のベスト プラクティス #初心者 - Qiita](https://qiita.com/takaki-imura/items/1ecc2b1df30a3dd75beb)

[Azure Cosmos DBってどんなの？ #Azure - Qiita](https://qiita.com/hirobel/items/72e28dcef067befec36f)
マナビDX Questで視野を広げる

## はじめに
　[マナビDX Questで得たもの Advent Calendar 2023](https://qiita.com/advent-calendar/2023/manabi-dx-quest2023) 15日目の記事を書きます。[エイキ](https://twitter.com/eikiyakisoba)です。今年のアドベントカレンダー企画で初めてQiitaの記事を書きました。ぜひ最後まで見ていただけると幸いです。
 
　この記事では、マナビDX Quest2023に参加して感じたことや大切だなと思ったことを、**視野を広げるというテーマ**でまとめました。この記事をお読みのあなたに少しでもプラスになることを願っています。


**【この記事の目的】**
　マナビDX Questを通じて感じた、何事もやってみると良いことや挑戦する大切さを私の意見とともに紹介していきます。あなたのこれから行う挑戦への1歩の手助けになれたらうれしいです！

**【この記事に書いていないこと】**
　**マナビDXQuest2023の概要や、第1タームで実際に行った内容などはこの記事に書いていません。** 他の方の記事をお読みください。（ぜひお時間があれば、すべての記事をお読みいただくと更なる知見が得られます。）

https://qiita.com/advent-calendar/2023/manabi-dx-quest2023

### 目次
- [はじめに](#はじめに)
- [1. 視野を広げる大切さ](#１．視野を広げる大切さ)
- [2. とりあえずやってみる](#２．とりあえずやってみる)
- [3. アイデアは既存の要素の組み合わせ](#３．アイデアは既存の要素の組み合わせ)
- [おわりに](#おわりに)


## １．視野を広げる大切さ
　マナビDXQuestに参加してDXの知識やデータ分析について学ぶことができました。しかし、それ以上に良かったことは、 **受講生同士の交流が活発** だったことです。このプログラムの受講生は、年齢層や職業などが幅広く、普段出会えないような方々とも交流することができました。受講生同士の学び合い・教え合いで、他の学習方法では得られないような知見が生まれることができます。
 
　コミュニティが活発化することで、数多な情報が流れ、知識の幅が広がったと感じました。 **知識の幅が広がると、視野が広がり、見える景色が変わってきます。** 今まで知らなかったことや、気にも留めなかったことに興味を持つようになることで、より一層自分の成長につながりました。

 
:::note info
知識を広げ、見える世界を変えていく
:::



## ２．とりあえずやってみる
　視野を広げるためには、何事にも挑戦することが大切だと考えます。実際、マナビDXQuestでもコミュニティ内での勉強会やイベントなど行われていました。この記事の作成もその一環です。そこに参加するだけでも基本的には、メリットしかないので **とりあえずやってみる**精神で取り組むのが良いでしょう。

　そこで私の考える動機付けとより成果の出るマインドが以下3つです。
 - やらない理由よりも、やる理由を探す
 - 現状維持は退化と考える
 - ライバルや憧れを設定する
 

### やらない理由をより、やる理由を探す
　何か新しいことを始めるときや挑戦するときは、**やらない理由より、やる理由を探す** を心掛けています。やりたいけど時間が無いと考えるよりも、どのように時間を作るかを考える。失敗やリスクを恐れてやらない理由を挙げるよりも、 **挑戦して得られることや成功するために何をしたらよいかを考える**ほうが、より良い成長へつながると考えています。
### 現状維持は退化と考える
　今の世の中は常に変化が訪れています。特にAI分野の技術発展はものすごく、ほぼ毎日のように新たなニュースが流れています。そんな中で、なにもせずに1日を過ごすことは、はたして良いことなのかと考えたことがあります。
 
 　今日の自分が少しでも成長をすれば、明日の自分がよりよくなると信じて、**毎日少しでも勉強をする習慣をつける** のが大事です。実際に私もマナビDX Questという環境の中で、周りに鼓舞されて自分も成長しなきゃという気持ちにもなりました。
  ### ライバルや憧れを設定する
  
　受講生の中でもアクティブに活動されている方は本当にすごい方ばかりです。私もこのような方達みたいになりたいと思う毎日でした。マナビDX QuestのPBLの中で成果物で順位が付く課題もありました。このような課題で良い結果を得るために **自分よりもすごい人を見つけ、その人に勝てるように努力したり、その人のまねをしたりする** のも1つの手だと考えます。
 　**闇雲に走り続けるよりも、目標を掲げて走る方が、効率的で達成感を得ることができます。** マナビDXQuestで出会った方たちは、本当に尊敬できるような方ばかりなので、良い影響を受けることができました。

:::note info
とりあえずやってみる！
 - やらない理由よりも、やる理由を探す
 - 現状維持は退化と考える
 - ライバルや憧れの人を設定する
:::
## ３．アイデアは既存の要素の組み合わせ
　「アイデアは既存の要素の組み合わせだ」という有名な言葉があるように、**知識の幅を広げることで、新たなアイデアを生む** ことができます。他の受講生の話を聞いて、自分のやっていることや、仕事に生かせないかを考えると意外と思いつくものがあります。視野を広げることで色々なアイデアを生み出すことができるでしょう。



### 趣味×趣味×趣味＝ビジネス
　私が常々思っていることがこの見出しの式です。あなたも複数の趣味を持ってると思いますが、趣味が3つとも被るような人はあまりいないと考えます。つまり、あなた独自の組み合わせが、誰も思いつかなかったビジネスへと発展する可能性を秘めているのです。
　

:::note info
アイデアは既存の要素の組み合わせ！
知識の幅を広げることで、新たなアイデアを生むことができる
:::


## おわりに
　幅広く知識をつけることで視野が広がるをテーマに、考動とアイデアの出し方について書いてみました。マナビDX Questに参加して知識の幅が広がり、世の中の見え方が変化したと思います。ここで得たことを最大限生かせるように、更なる成長へとつなげていきたいです。引き続きよろしくお願いいたします。
 
 　この記事の内容に少しでも感じたものがあればリアクションいただけると幸いです。ぜひ他のカレンダー記事もお読みいただき、マナビDX Questを盛り上げていきましょう！
Spring Boot の Web アプリを Eclipse で起動した時に「Cannot find template location:・・・」とコンソールに出力された場合の対処法

コンソールで次の WARN が出力されました。

Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false)

WARN は、下図の青色ハイライトの行です。

![console1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620418/b008d581-c123-ff00-c26d-8b914c4d25a5.png)

##### WARN を消すための操作手順

※手順の（Hello）は、適宜読み替えてください。

1. （Hello）プロジェクトのプロパティーを開く。
2. ソースタブを開く。
3. （Hello）/src/main/resources の下の［除外:**］を選択する。
4. ボタン［除去］を押下する。
5. ボタン［適用］を押下する。

![projectProperty1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620418/f0cff1f2-9d4b-6835-2bdc-ad17afae2d17.png)

以上の操作手順を行うと、下図のように［除外:**］だった箇所が、［除外:なし］に変わります。

![projectProperty2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620418/344be5f1-8ff4-fe92-4bf4-703217000211.png)

変更の確認が済んだらプロパティー画面を閉じて、再度プロジェクトを起動します。で、下図のように WARN の行が出なければ、作業は成功です。

![console2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620418/059626c5-03ae-5805-ffcb-256c2b5cf651.png)
------
投稿年月日：2023(R5).12.15
IDE：Eclipse 2022
Spring Boot Version 3.1.5
UXデザインに強くなりたい！Googleが提供するGoogle UX Design プロフェッショナル認定を受けてみた

本記事は「Google UX Design プロフェッショナル認定」の概要と、受講をはじめてみて感じたことを記載しています。
受講の継続中のため、講座の内容について詳細に触れませんが、

* これからUXデザイナーになりたい人
* UXデザインの全体像を知りたい人
* UXデザインに興味があるけれど、どう勉強すればいいのかわからない人
* UXデザインに詳しくないけど学んでみたい技術職な人

上記のような方に、どのような流れでUXデザインを勉強していくのか、参考になれば幸いです。

## Google UX Design プロフェッショナル認定とはなんぞや

Google UX Design プロフェッショナル認定（Google UX Design Professional Certificate）とは、Googleによって提供されている**UXデザイナーになるためのオンライン講座**です。

Coursera（世界中の企業や大学がオンラインで講座を提供しているサービス）にて受講できます。

https://www.coursera.org/professional-certificates/google-ux-design

#### 講座の内容
全部で7コースあり、週10時間で6ヶ月が公式記載の目標となっています。
各コース修了すると認定書がもらえます。
この認定書、Linkedinのプロフィールに埋め込めたり、履歴書に書けたりするので、これからUXデザイナーのキャリアを形成したい方は受けておいて損はないかなと思います。

コースの内容は以下です。
1. ユーザーエクスペリエンス（UX）デザインの基礎
1. UXデザインプロセスの開始（共感する、定義する、アイデアを出す）
1. ワイヤーフレームとローファイプロトタイプの作成
1. UXリサーチの実施と初期コンセプトのテスト
1. Figmaで忠実度の高いデザインとハイファイプロトタイプの作成
1. Webサイトの動的なユーザーインターフェイス(UI)の構築
1. ソーシャルグッドなUXをデザインし、就活に備える

#### 講座のレベル感
初心者向けですが、実践的です。
講座のいちばん最初は「ユーザーエクスペリエンスとは何か」という基礎の内容から始まるため、デザインが何たるかを知らなくても問題はありません。
しかし後半につれ、実際に手を動かしてプロトタイプを作ったり、仮想プロジェクトを実施したりという課題があり、UXデザインを網羅的に学べるような内容です。

なお、講座の動画やテキストはほぼすべて英語です。
英語が苦手な方は、DeepL翻訳やGoogle翻訳に頼りながら受講すれば十分理解できます。

#### 費用について
受講料が月額＄49です。（2023年12月時点）
講座は自分のペースで受講できるものの、お高いので、のんびりしているとお金ばかり出ていってしまいます。計画的に進めていきましょう。

## 受講してみて

### そもそもすでにUI/UXの仕事をしているのに受講をしようと思った理由

私は現在エンジニアではあるのですが、もともとUI/UXデザインへの興味が強くあり、すでにUI/UXデザインの仕事をしています。
いわゆる経験者の私が受講をしようと思ったきっかけは、Googleが提供している講座に興味があったことと、どこかでしっかりUI/UXデザインを学んだわけではなかったので受講してみようと思いました。

### 受講してみて感想

まだ受講途中のため、講座の詳しい内容や得られた知識については、また別途まとめたいと思っています。

とにもかくにも現段階では**続けることがいちばん難しい**と感じています。

公式より出ている週10時間で6ヶ月という講座のボリューム。
私は計画的にコツコツが非常に苦手でして、時間が空いている時に集中して進めています。（年末年始に一気に進めたい。）

個人的な考えですが、コツコツ進めることが得意な方でも、3〜4時間とれる日を作って一気に進めることをオススメします。
講座の内容には、動画の教材、テキスト教材、実際に手を動かす必要のある課題があります。
動画の教材やテキスト教材のひとつひとつは、短い時間でも完了できるので隙間時間にできますが、手を動かす必要のある課題はそれなりに時間をとって進めていくのが良いと思います。

また、上記に費用について書きましたが、決して安くないサブスクリプションです。
長期的に仕事やプライベートが忙しすぎない時期を選んだ方が良いと思います。


今回の記事ではUXの勉強をするために「Google UX Design プロフェッショナル認定」の受講をはじめてみた話を書きました。
受講が完了したら、また投稿します。
VSCodeからチケット管理する拡張機能を作ってみる(1)

# VSCodeからチケット管理する拡張機能を作ってみる(1)

ネタが無いのでまぁまぁでかくなりそうなものをシリーズにして投稿する作戦です。

今回は、VSCode上からBacklogやJira等のチケット管理システムを操作する拡張機能を作って行こうと思います。

## 構成

一旦は

- VSCodeExtention
    - Yeoman
    - TypeScript

のみです。
どのチケット管理システムにアクセスするかは次回以降で決めていこうかなと思います。
（Gitlab好きなので最初はGitlabにするかもしれません）

## 開発環境を作っていく

ChatGPT様に聞いたところ、Yeomanという雛形作成ツールみたいなのを利用すると楽ちんらしいです。
<https://yeoman.io/>

早速DevcontainerでYeomanが動く環境の構築をしていきます。

devcontainer.json
``` json
{
  "name": "ticket-manager-client",
  "dockerComposeFile": [
    "../docker-compose-dev.yml"
  ],
  "service": "ticket-manager-client",
  "workspaceFolder": "/home/appuser/app",
  "remoteUser": "appuser",
  "customizations": {
    "vscode": {
      "extensions": [
        "mhutchie.git-graph",
        "GitHub.copilot",
        "GitHub.copilot-chat",
        "GitHub.copilot-labs"
      ]
    },
    "features": {
      "ghcr.io/devcontainers/features/git:1": {
        "ppa": true,
        "version": "os-provided"
      }
    }
  }
}
```

docker-compose-dev.yml
``` yaml
version: "3"
services:
  ticket-manager-client:
    container_name: ticket-manager-client
    image: ticket-manager-client
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/home/appuser/app
    environment:
      TZ: Asia/Tokyo
    env_file:
      - .env
    tty: true
```

Dockerfile.dev
``` Dockerfile
FROM node:21.4-alpine3.18

RUN adduser -D appuser
USER appuser
WORKDIR /home/appuser/app

RUN yarn global add yo generator-code
```

こんなかんじです。
adduserしている理由としては、どうやらYeomanはDockerそのままのrootユーザーでは動いてくれないようで、新規にユーザーを作成してそのユーザーのホームディレクトリをWORKDIRに指定する必要があったためです。
（この解決に結構時間を要した…）

## Yeomanでひな形を作成する

上記Devcontainerを起動し、ターミナルで以下のコマンドを打ちます

``` bash
npx yo code
```

するとプロジェクト名とかいろいろ聞かれるので、適当に設定すると以下の画像のように雛形が作成されます。

![image-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1213727/400fa7b9-39b4-1ea3-80d7-f6e57b0783b2.png)

```.vscode```フォルダ内まで作ってくれているのがポイントで、このおかげでデバッグボタンをポチっとするだけで新しいVSCodeが立ち上がり、拡張機能のデバッグをすることができます。

## おわり

次回はチケット管理システムのAPIをみていくかなと思います。
Android記事まとめ（taipii）

**公開済み**
[Service](https://qiita.com/taipii1313/items/5495f18497dd48930567)
[Linuxコマンド](https://qiita.com/taipii1313/items/88d9bb920ecc3082ca50)
[Flow](https://qiita.com/taipii1313/items/8a3d2b53b9d4c3622c57)

**限定公開**
[Notification](https://qiita.com/taipii1313/private/78911a7c2f3bc242d5e9)
[Git](https://qiita.com/taipii1313/private/a172b4c59b641deac66e)
[arrays.xml](https://qiita.com/taipii1313/private/2787ce3f43ee0c0e63b4)
[adb](https://qiita.com/taipii1313/private/1ce7350534ad57747ccc)
[Preference](https://qiita.com/taipii1313/private/d6a87bda30d21bc8c7ac)
[Normal PermissionとDangerous Permissionとは？](https://qiita.com/taipii1313/private/38ae7c1ed7b9847d5af4)
[リソースの代替え設定（Resource Qualifiers)](https://qiita.com/taipii1313/private/63cd98f549939195b542)
[BroadCastReceiver](https://qiita.com/taipii1313/private/786e1291218ac92dba94)
[ContentProvider（雑）](https://qiita.com/taipii1313/items/54d41962f784f961cac8)
[ContentProvider](https://qiita.com/taipii1313/private/dae941b19f7df96fa0fd)
[コルーチンのスレッド](https://qiita.com/taipii1313/private/a3b4d9565d22d1198190)
[もろもろ](https://qiita.com/taipii1313/private/d16cf111860bdc502d31)

[ガイドライン](https://qiita.com/taipii1313/private/533d8d16096590c412e9)
[constrainted_height](https://qiita.com/taipii1313/private/8ee649c49461b05e8d69)
[job](https://qiita.com/taipii1313/private/74839bdb3dd06401e32d)
[ViewModel](https://qiita.com/taipii1313/private/6f6b5068b51335f4b688)
[FragmentManager](https://qiita.com/taipii1313/private/271145b076dc3feed5ca)
[BackStack](https://qiita.com/taipii1313/private/dc7862258e35d1af954e)
[弱参照](https://qiita.com/taipii1313/private/214b013cf929d980ed72)
[paramater](https://qiita.com/taipii1313/private/8418179d69139ff1195d)
[ConcurrentModificationException](https://qiita.com/taipii1313/private/8418179d69139ff1195d)
**未完了**
[layoutParams](https://qiita.com/taipii1313/private/6ff99911d5061f67c6e3)
[shellscriptをつくろう](https://qiita.com/taipii1313/private/206d1173685c4aa34035)

https://qiita.com/taipii1313/private/f9979487d9e4189855b1

https://qiita.com/taipii1313/private/271145b076dc3feed5ca

https://qiita.com/taipii1313/private/9c32131347c5b2c97637

https://qiita.com/taipii1313/private/07add008e6c581a87293

https://qiita.com/taipii1313/private/8240fe5c2def6b848bd9

https://storyset.com/illustration/mobile-login/amico

https://qiita.com/taipii1313/private/db96316ac4f0bcfe8bd5

https://qiita.com/taipii1313/private/819f0867292f604c9478

https://qiita.com/taipii1313/private/5f3311c40e3d484961ce
フロントエンド未経験者が仕事をするためにやった1ヶ月の勉強

この記事は、フラー株式会社 Advent Calendar 2023 の 16 日目の記事となっています。15 日目は**[@bearone236](https://qiita.com/bearone236)**さんによる「****PaLM2 を用いた AI チャット開発 (ハンズオン形式)****」でした！

## はじめに

はじめまして。長岡技術科学大学の実務訓練でお世話になっている、市之瀬拓実と申します。
私はフロントエンド未経験だったのですが、現在はNext.jsを利用してウェブサイトを作成しております。最初の一ヶ月が勉強期間として与えられたので、その期間にどのような勉強をしていたのかを綴っていこうと思います。

勉強開始時点の自分の知識は、HTML・CSSは授業で聞いた程度、Next.js、reactは見たことある程度のがちがちの初心者です。

## 目指すレベル

今回目指したゴールは、「Next.jsを利用して開発できるようになる」というものでした。そのため、Next.jsを問題なく利用できるようにするために必要な勉強を進めていきました。

## ざっくり道筋

reactチュートリアル

↓

react公式ドキュメント

↓

Next.jsチュートリアル

↓

簡易なアプリ開発

↓

Next.jsの新チュートリアル

## react

Next.jsはreactのフレームワークとなっています。そのため、まずはreactの勉強から始めました。
勉強するための教材としては、[チュートリアル](https://react.dev/learn/tutorial-tic-tac-toe)と[reactのドキュメント](https://react.dev/learn/describing-the-ui)を利用しました。まずはチュートリアル、その後ドキュメント読みの順で進めていきました。

チュートリアルは、ちょっと下にスクロールすると答えが全部見えてしまうため、やろうと思えば全部コピペでチュートリアルが終わってしまいます。それでは勉強ではなくコピペの練習になってしまうため、些細なことにも疑問を持って、どんどん自分で調べて、どんどん先輩方に質問することを意識していました。

疑問をもつために意識したことは、以下の二点です。

- チュートリアルをしながら自分でメモを取る
- コピペせずに手打ちする

自分で読み進めたり、コードをコピペするだけだと、どうしても読み飛ばしがちになってしまいました。そのため自分でなるべく書き出すことで意識的に読むようになり、細かいところに引っかかるようになりました。その分時間がかかるようになってしまいましたが、自分で残した文章が残る＆多くの疑問にぶつかるので、とても良い方法だとおもってます。

ドキュメント読みも、チュートリアル同様になるべくドキュメントにまとめながら進めていきました。ドキュメントにはチャレンジ問題があり、これのおかげで各項目を手を動かし流れ勉強できたので、とても良い教材だと思います。

## Next

次は、[Next.jsのチュートリアル](https://nextjs.org/learn-pages-router/basics/navigate-between-pages)を行いました。こちらも上記のreact同様、ドキュメントにまとめながら進めていきました。こちらのチュートリアルは古いので、下記で述べる最新版のチュートリアルを行うことをおすすめします。

## 簡易な開発

Next.jsのチュートリアルまで作成したので、簡易なアプリを作成していきました。
これまで行ってきたチュートリアルやドキュメントは、全てJavaScriptで記述されていました。ですが、実務ではtypescriptを用いることが決まっていたので、まったく触ったことがなかったのですが利用してみました。

この実際の開発が、この一ヶ月で一番勉強になったと思います。
自分で一から作ることで、実際の仕事に近い開発が行えました。

ただ、ゼロ知識でtypescriptを触るのはとってもしんどかったです。仕事を振られる前に触っておいてよかったと心から思います。今ではちょっとだけわかってきたtypescriptですが、pythonなどの型推論をしてくれる言語を主に触ってきた私としては、型というものの認識が弱かったのもしんどかった原因だと思います。

typescript以外にも学んだはずのことがまだ身についておらず詰まることが多々ありました。一番詰まったのは、コンポーネントを作ることでした。今までずっと`function`を用いていたのに、調べた記事で`React.FC`などを用いているものが多く、まずはここでつまづきました。また、引数への型の渡し方などが理解しきれておらず、ここでも時間を使いました。

何事も、手を動かさないと学ばないと改めて実感しました。

## 新しいNext.jsチュートリアル

開発で四苦八苦していると、Next.jsの新しいチュートリアルが公開されました。なので開発は一時停止してこちらのチュートリアルに移りました。

このチュートリアルでは、バージョン14に変わったことによるサーバーアクションを押しているように感じました。前回のチュートリアルよりもこったものが作られるので、やっていて結構楽しいチュートリアルでした。また、App Routerなどの基礎となる技術についても学べました。どこが大切なのか、なぜ大切なのかがわかりやすかったため、とても良いチュートリアルだったと思います。

このチュートリアルが終わった日に1ヶ月も終了したので、なんとかぎりぎりやれるところまでできたと思っています。

## 今振り返ってみて

もし今もう一度勉強しろと言われたら、上記の勉強以外にもhtml,CSSをしっかり勉強する時間をとればよかったなと思います。CSSは奥が深すぎてまだまだわからないことだらけなので、これからの実務訓練期間で学んでいきたいと思います。

## 最後に

こんな形で1ヶ月勉強した結果、なんとか最低限の知識をそろえて開発できるようになりました。フロントエンドはどんどん新しい技術がでるのに、古くからあるhtml,CSSなども勉強する必要があり、とても大変なエンジニアだと知ることができました。

だからこそ、フロントエンド未経験者を4か月実際の業務に携わらせていただけるフラー株式会社に心から感謝しています。ほんとにありがとうございます。

続いて、フラー株式会社 Advent Calendar16 日目は、****@devKyousuke**** さんの「visionOSで簡単なアプリを１つ作ろう」です！
Amazon Bedrockの活用例：Stability AI - SDXLを使ったサンプルアプリケーション

本記事は [Amazon Bedrock Advent Calendar 2023 by ナレコム](https://qiita.com/advent-calendar/2023/bedrock-knowledgecommunication) の17日目の記事です。

Amazon Bedrock Advent Calendar 2023 by ナレコム ではAmazon Bedrockの基本的な概要から具体的な各モデルの作り方や事例紹介などを行っていきます。

### はじめに

Amazon Bedrockは多くのサンプルアプリケーションを提供し、ユーザーがPlayground上で実際に試すことができるように設計されています。

今回は2023年12月現在33個公開されているExamplesの内、 **Stability AI - SDXL** を使った2つを紹介します。記事では、これらの例のプロンプトとレスポンスをわかりやすく日本語で紹介します。

Stability AIが提供する2つのモデル **SDXL 0.8** と **SDXL 1.0** の違いは以下のようになっており、1.0は高画質な画像が生成できたり多くのパラメータの設定が可能となっております。

| モデル名                          | 概要・特徴 |
|-----------------------------------|------------|
| SDXL 0.8 (Stability AI)           | 高品質な画像生成に特化したモデル。クリエイティブな画像作成に利用可能。 |
| SDXL 1.0 (Stability AI)           | SDXL 0.8のアップデート版。改善された画像生成能力を提供。 |

**2023年12月時点ではSDXLは基本的に英語でのみ動作します。**

※日本語からも画像生成可能ですが、入力通りに出力されないケースが多いです。

### 例１）画像を作成する（SDXL 0.8）

このプロンプトは、短い説明に基づいて画像を作成します。

:::note info
**プロンプト**
Sri lanka tea plantation.
:::

:::note warn
**レスポンス**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61189/91afd3b9-c0d2-8c9b-4d94-a57b315ab401.png)
:::

### 例２）画像を作成する（SDXL 1.0）

このプロンプトは、短い説明に基づいて画像を作成します。

:::note info
**プロンプト**
Sri lanka tea plantation.
:::

:::note warn
**レスポンス**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61189/58d53b00-f5bf-8973-064e-2de7bacebaf7.png)
:::

どちらも同じプロンプトのため違いが分かりづらいですが以下のような違いがあります。

1. パラメータの項目数が違う
下図の様に、シンプルな設定のみの0.8モデルに対して1.0では画像サイズやベースとなる画像を指定したりすることが出来ます。
**SDXL 0.8**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61189/d5c68026-7ffc-43ce-86b1-83470633aff5.png)
**SDXL 1.0**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61189/41059178-f42a-1102-2798-060c4c5bfbb7.png)
1. SDXL 1.0モデルはAmazon Titan同様、画像を指定して類似の画像生成や色の変更などの編集することが出来ます。（Amazon Titanと同じプロンプトを試しましたが、結果はかなり違いました☺）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61189/10b1ff35-7623-3f22-dab2-5d7cb7c363e4.png)

https://qiita.com/akiraokusawa/items/567aa21b2f0122b314ad

### まとめ

この記事では、Amazon Bedrockを通じて提供されるサンプルアプリケーション「Stability AI - SDXL」の使用例を2つ紹介しています。

Stability AIの「SDXL」モデルは、高品質な画像生成に特化したモデルであり、クリエイティブな画像作成に利用可能です。記事では、このモデルの2つのバージョン、SDXL 0.8とSDXL 1.0を比較し、それぞれの特徴と機能を解説しています。

1. **画像を作成する（SDXL 0.8）**: この例では、「Sri Lanka tea plantation」のプロンプトに基づいて、SDXL 0.8モデルが生成した画像が紹介されています。このバージョンは、高品質の画像生成に特化しており、シンプルな設定を提供しています。

2. **画像を作成する（SDXL 1.0）**: 同じプロンプトを使用してSDXL 1.0モデルで生成された画像が紹介されています。SDXL 1.0は、0.8バージョンのアップデート版であり、改善された画像生成能力と多くのパラメータ設定オプションを提供しています。

1.0バージョンでは、画像サイズの指定やベースとなる画像を指定する機能が追加されており、より詳細なカスタマイズが可能です。また、SDXL 1.0は、Amazon Titanと同様に、画像を指定して類似の画像を生成したり、色の変更などの編集を行うことができます。

---

また、ナレッジコミュニケーションでは  **「[Musubite](https://recruiting.musubite-job.com/features/company/knowledge-communication)」** というエンジニア同士のカジュアルトークサービスを利用しています！この記事にあるような生成AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください！

https://recruiting.musubite-job.com/features/company/knowledge-communication
CSSで幅、高さの部分的な固定、可変を実現する方法

フロントを開発しているとサイドメニューは固定で、残りにメインコンテンツを目一杯表示させるということがよくあります。

今回はそれをCSSで実装する方法を紹介します。

今回紹介する方法では固定幅部分はコンテンツに合わせたサイズになります。
幅をハードコーディングしなくてもきれいにレイアウトできるので気に入っています。

## 横方向サンプル

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="BaMgNRr" data-user="keyhole0" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/keyhole0/pen/BaMgNRr">
  row-variable-width</a> by keyhole0 (<a href="https://codepen.io/keyhole0">@keyhole0</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>


## 縦方向サンプル

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="GRzbgVW" data-user="keyhole0" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/keyhole0/pen/GRzbgVW">
  column-variable-height</a> by keyhole0 (<a href="https://codepen.io/keyhole0">@keyhole0</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# 解説
この幅固定、可変はflexboxを利用しています。
親DOMのCSSは以下の通りです。
```css
.parent {
  display: flex;
  flex-direction: row; /* 横向き */
}
```
```css
.parent {
  display: flex;
  flex-direction: column; /* 縦向き */
  
  height: 100vh; /* 高さの指定をしないと機能しません */
}
```


幅を固定したい箇所には以下のCSSを当てます。
```css
.child-fixed {
  flex-shrink: 0;
}
```

flex-shrinkはフレックスアイテムの縮小係数を設定します。
数字が大きくなるほど他のフレックスアイテムに比べて小さくなります。
0にすることで全く縮まなくなり、そのDOM内容にピッタリフィットする幅になってくれます。


幅を可変にしたい箇所には以下のCSSを当てます。
```css
.child-variable {
  flex-grow: 1;
  overflow: auto;
}
```
flex-growはフレックスアイテムの伸長係数を設定します。
数字が大きくなるほど他のフレックスアイテムに比べて大きくなります。
複数の可変する箇所の幅をそれぞれ変えたいときは調整する必要がありますが、基本的に1固定で良いです。

要素がはみ出ることも考慮して`overflow`を指定しておくと良いでしょう。
[rails] find_by_sqlで結合先テーブルのカラムを取得する

# はじめに
Active Recordで表現しきれないクエリを記述するときに活躍するfind_by_sqlですが、find_by_sqlを呼び出したモデル以外のテーブルのカラムを取得する際に少し悩んだのでそちらを共有します。

(※実際にfind_by_sqlを使用する場合は複雑なテーブル構造やクエリが想定されますが、今回は簡単のため単縦なテーブル構造とクエリを使用します。)
## テーブル構成

##### usersテーブル
|id|name  |age|
|--|------|---|
|1 |taro  |20 |
|2 |hanako|22 |

##### postsテーブル
|id|title        |user_id|
|--|-------------|-------|
|1 |taro’s post  |1      |
|2 |hanako's post|2      |

## 結合先テーブルのカラムを取得する
以下のように結合先のテーブルのカラムも取得するSELEC文を記述し、`Post.find_by_sql`を実行して見ると戻り値はpostテーブルのidカラムとtitleカラムのみになってしまいます。
```ruby
sql = <<~SQL.squish
    SELECT posts.title, users.name
    FROM posts JOIN users ON posts.user_id = users.id
SQL

Post.find_by_sql(sql)
# => [#<Post "id"=>nil, "title"=>"taro's post">, #<Post "id"=>nil, "title"=>"hanako's post">]
```
postモデルのfind_by_sqlメソッドを使用しているから結合先の別モデルのカラムは取得できないのか...と思っていたのですが違いました。
attributesを見てみるとしっかり属性としては持っているようでした。
```ruby
Post.find_by_sql(sql)[0].attributes
# => {"id"=>nil, "title"=>"taro's post", "name"=>"taro"}
```
そのため、通常通りカラム名で値にアクセスすることができます。
```ruby
sql = <<~SQL.squish
    SELECT posts.title, users.name
    FROM posts JOIN users ON posts.user_id = users.id
SQL

posts_with_user = Post.find_by_sql(sql)
# => [#<Post "id"=>nil, "title"=>"taro's post">, #<Post "id"=>nil, "title"=>"hanako's post">]

posts_with_user[0].name
# => "taro's post"
```
また、AS句を使用して別名でSELECTすることで、その別名で値にアクセスすることもできます。
```ruby
sql = <<~SQL.squish
    SELECT posts.title AS new_title, users.name AS new_name
    FROM posts JOIN Users ON posts.user_id = users.id
SQL

posts_with_user = Post.find_by_sql(sql)

posts_with_user[0].new_title
# => "taro's post"
posts_with_user[0].new_name
# => "taro"
```

## 終わりに
ご覧いただきありがとうございました。
少しでも誰かの悩む時間を減らせていたら嬉しいです！
BigQuery で簡単に再現性のあるランダムサンプリング


:::note info
本記事は [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) シリーズ 7 の 15 日目の記事です。
:::


# 結論
BigQuery で簡単に再現性のあるランダムサンプリングをしたい時は Legacy SQL を使う。

▼ 1% のデータをランダムサンプリングしたい時
```sql
#legacySQL
SELECT * FROM [bigquery-public-data.ml_datasets.penguins]
WHERE rand(42) < 0.01
```

▼ 20% のデータをランダムサンプリングしたい時
```sql
#legacySQL
SELECT * FROM [bigquery-public-data.ml_datasets.penguins]
WHERE rand(42) < 0.2
```

BigQuery では SQL の先頭で `#legacySQL` を宣言すると Legacy SQL を使用できます。
デフォルトで使用される Standard SQL では rand 関数に seed 値を指定できません。
一方で Legacy SQL では rand 関数に seed 値を与えられるため、簡単に再現性のあるランダムサンプリングができます。
なお Standard SQL と記法が異なる点に注意してください。

⚠️ 公式の推奨は Standard SQL なので場合に応じて以下の方法などと使い分けてください。
- [Google Cloud 公式ドキュメント テーブルのサンプリング](https://cloud.google.com/bigquery/docs/table-sampling?hl=ja)
- [BigQuery でランダムサンプリング > 結果の再現性を保つ方法](https://medium.com/@sfujiwara/bigquery-%E3%81%A7%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0-807d64d1c2be
)
MXLinuxをsystemdから起動させる

## はじめに
　MXLinuxを触っていると、標準のSysVinitではなくSystemdを使いたいときってありますよね。起動時にオプションを選択すればいいだけの話ですが、面倒くさいので自動でsystemdにする方法を記事にしておきます。

## 「MX起動設定ツール」を開く
　「MXツール」の中から、「MX起動設定ツール」を探して起動します。以下のようなウィンドウが出てくるので、パスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/6210f189-a33b-f994-9cc4-f7392b0faa34.png)

　起動先の部分を、末尾に「(systemd)」とついているものに変更します。ついでに、タイムアウトが５秒は少し長いので３秒にしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/7edeaf0f-0157-5159-3c3d-8ce9221544c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/a960b1b7-6b3b-5892-e6d8-2f935cced007.png)

　右下の「適用」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/2815feb4-f289-1723-f9a4-5927101af083.png)
　設定を適用するには再起動する必要があります。

## おわりに
　これで、systemdが使えるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2942430/e8979364-7c20-2c52-1f74-2366d75d820b.png)
cursorをgit forkツールから起動する方法

# はじめに
最近話題のcursor。
使ってみるか、って話なんだけど、エディタからgitいじるべきなんだが、なんとなーく、手が慣れたforkってツール使っちゃう。

凄い便利なんだよね。
ssh keyとかも、GUIでぽちぽちするだけで生成できるし、らくらく。


https://git-fork.com/

一応無料で使える。
このツールから、open cursor editorしたいよ、って話をします。

# 手順

## ターミナルから起動できるようにしておく
cursorは下記からインストールしておきます。

https://cursor.sh/


起動後は、vscodeおなじみのcommandで、shell commandインストール
![スクリーンショット 2023-12-15 2.13.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/bf4a4b90-7d1b-2c64-8d5e-88fb9632f3d5.png)

あとはターミナルで、
```
$cursor
```
これだけです。

## forkで、エディタ起動をする設定をする

macでのやり方を説明します。

`preferences`を開きます。

![スクリーンショット 2023-12-15 2.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/9bab73b5-4f0d-4b85-5178-25d5491e88c9.png)

`custom commands`を選択
![スクリーンショット 2023-12-15 2.25.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/6903857d-01cf-6b62-3ee4-d1702facd952.png)

add repository custom commandを選択
![スクリーンショット 2023-12-15 2.25.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/a4bf69a5-fc8b-0ed8-b3a4-3c9050fa8557.png)

名前は`open cursor`とでもしておきましょう
![スクリーンショット 2023-12-15 2.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/aa8c8943-72ab-11a1-a0f8-059b0e9faedb.png)

`run sh script`の中身を変更します

`cursor .` で現在のディレクトリが開く設定にします
このとき、`Show Output`の**チェックを外す**のを忘れないようにしましょう
忘れると、ダイアログ出てうるさいです
![スクリーンショット 2023-12-15 2.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/44f76f68-44f2-3d16-f705-336f1a9919d3.png)

ツール右上部の`open in`を押せば、open cursorメニューが出現しますが、これを押すと、現在選択しているリポジトリの場所にて、cursorが起動します。

![スクリーンショット 2023-12-15 2.26.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1026740/f0f09d4d-9bb6-23cd-c81d-0c784e179cd5.png)

**便利！**

用途は違うけど、小細工ネタでした。
（atom 懐かしー・・・）