OmniAICreator/Qiita-1.07M huggingface dataset:
Lottieを使ったアニメーションの実装

# Lottieとは？

Adobe AfterEffectsで作成したアニメーションをJSONファイルで書き出し、SVGアニメーションとして実装できるJavascriptライブラリです。
Lottieで表現できるアニメーションの範疇はCSSアニメーションと大差ありませんが、イラストをパーツ単位で動かしたり、複数の動きを組み合わせたりと、より細かい動きを表現したい場合におすすめです。

https://airbnb.design/lottie/

# Lottieの使い方
※今回はAdobe AfterEffectsでの作成方法などは割愛し、JSONファイルが用意されていることを前提として進めます。

まずはfooterでlottie.min.jsと自前のJSファイルを読み込みます。
オーソドックスな実装であればこの2ファイルのみで動かすことができます。

```html
<!-- Lottie -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.9/lottie.min.js"></script>
<!-- 自前のJSファイル -->
<script src="./js/main.js"></script>
```

<br/>

アニメーションを表示させるための要素を用意し、idを付与します。
ブラウザ上ではこちらの要素の中にsvgタグが入ることになります。
```html
<div id="logo"></div>
```

<br/>

最後にmain.jsでアニメーションを表示・制御するコードを書きます。
今回は、アニメーションを**1.2倍速、自動再生、ループ**させます。

```javascript
/* ------------------------------------
①自動再生+ループ
------------------------------------ */
const logoAnimation = lottie.loadAnimation({
	container: document.getElementById('logo'), // アニメーションを表示する要素
	renderer: 'svg',
	loop: true, // アニメーションをループさせるかどうか
	autoplay: true, // アニメーションを自動再生するかどうか
	path: './data/data02.json', // jsonファイルのパス
});

// アニメーションのスピード（1.2倍）
logoAnimation.setSpeed(1.2);

// アニメーションスタート
logoAnimation.play();
```

<br/>

ここまででアニメーションが表示できるかと思います。
アニメーションを停止させたり、一時停止させたい場合は以下になります。

```javascript
// 一時停止
logoAnimation.pause();

// 停止
logoAnimation.stop();
```

<br/>

以上、基本的なLottieの使用方法になります。
Javascriptで制御できるため、様々なイベントや他のライブラリと組み合わせて使うこともできそうです。
今さら聞けない！Cookieってどんなもの？

# はじめに
こんにちは。
ウェブサイトを閲覧する際に、Cookieに関する同意のポップアップが出てきたり、オンラインプライバシーに関するニュースを耳にしたりすることがありますよね。でも、実はよく知らないという方もいらっしゃると思います。そこで、Cookieとは何か、なぜ重要なのか、そしてどのように機能するのかを分かりやすく解説したいと思いました。
また、今回の記事ではプログラミングをはじめたてでも理解してもらえるよう、
分かりにくい言葉にはリンクをつけて解説していきます。

# 概要
今回の記事では、ウェブの世界における大切な要素である<b>「Cookie」 </b>について詳しくお話しします。
Cookieは、ウェブサイトの正常な動作やユーザーエクスペリエンスに欠かせない存在です。この記事では、Cookieの主要な仕組みや、なぜ私たちのオンライン体験に欠かせないのかについて、分かりやすく説明していきます。

# Cookieの主要な仕組み
#### 1. Cookieの保存場所
Cookieはウェブサーバーからユーザーのブラウザに送信され、ユーザーの[ローカル](https://wa3.i-3-i.info/word11360.html)マシンに保存されます。通常、テキストファイルとして保存され、特定のウェブサイトに関連づけられます。
<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/d999641d-13e7-99d3-42ca-d6fb82faa537.png
">

#### 2. リクエスト時の送信 
ユーザーが同じウェブサイトを再訪問する際、ブラウザは保存されたCookieをそのウェブサイトに送信します。これにより、ウェブサーバーはユーザーを識別し、前回の訪問情報を取得できます。<img width=500 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524128/56bfbbcf-f67d-6f53-460f-1a5b590f7d43.png
">


#### 3. セッションCookieと永続Cookie
 Cookieは[セッション](https://wa3.i-3-i.info/word1791.html)Cookieと永続Cookieの2つのタイプに分かれます。セッションCookieはブラウザが閉じられると削除され、一時的な情報を保存します。永続Cookieは指定された有効期限まで保存され、ブラウザのセッションを超えて情報を保持します。


#### 4. Cookieの弱点
サーバーにアクセスするたびに情報をやり取りしなければならないため、
セキュリティの観点から見ると弱いです。
また、扱えるデータも文字列のみとなっています。

# Cookieがなぜ重要か
Cookieは様々なことに役立っています。以下にCookieがどのように役立っているのかについてまとめました。

#### 1. セッション管理
Cookieはウェブサイトの[セッション管理](https://wa3.i-3-i.info/word1792.html)に重要な役割を果たします。
ウェブサイトを訪れた際、Cookieはブラウザに保存され、ユーザーのセッション情報を保持します。これにより、ユーザーがウェブサイト内で連続した操作を行う際に、そのセッションを維持し、スムーズな操作を可能にします。
例えば、オンラインショッピングサイトで商品をカートに追加し、チェックアウトする際にセッション情報が保持され、買い物カートが消えないようになります。
<br>

#### 2. ユーザーエクスペリエンスのカスタマイズ
 Cookieは[ユーザーエクスペリエンス](https://wa3.i-3-i.info/word19537.html)をカスタマイズするのに役立ちます。
ウェブサイトはCookieを使用して、ユーザーの過去のアクティビティや設定情報を記憶し、
ユーザーに合ったコンテンツや提案を表示することができます。
これにより、個別に適した情報が提供され、ユーザーエクスペリエンスが向上します。
<br>

#### 3. ログイン情報の保持 
Cookieはログイン情報を保持するのに役立ちます。
ユーザーがウェブサイトにログインした場合、Cookieに認証情報が保存され、次回の訪問時に再ログインせずにサイトにアクセスできます。
これは、便利でセキュリティを強化する役割を果たします。
<br>

#### 4. 広告ターゲティング
広告業界では、Cookieはユーザーのオンライン行動に基づいて広告をターゲットするために使用されます。Cookieは広告ネットワークによって収集され、ユーザーに関連性の高い広告を表示するのに活用されます。これにより、ユーザーにとってより関心のある広告が表示され、広告主にとっても効果的な広告が提供されることが期待されます。
<br>


#### 5. ウェブサイトのパフォーマンス向上
Cookieはウェブサイトのパフォーマンス向上にも貢献します。
ウェブサイトのコンテンツを[キャッシュ](https://wa3.i-3-i.info/word139.html)するためにCookieが使用され、ユーザーに迅速な読み込み速度を提供します。
<br>
<br>

総括すると、Cookieはユーザーエクスペリエンスの向上、ウェブサイトのセッション管理、プライバシー設定の保存、広告のターゲティングなど、オンライン体験の多くの側面において不可欠な要素です。ただし、プライバシーに関連する問題もあるため、Cookieの使用に関しては適切なセキュリティ対策とプライバシー保護が重要です。

# 終わりに

Cookieについて少しでも理解が深まったら幸いです。
次回の記事ではCookieと比較されるSessionについて説明していきます。
記事の内容など、何かございましたらコメントお願いいたします。
読んでいただきありがとうございました。


####　参考

https://internet.watch.impress.co.jp/docs/column/security_basic/1259630.html

https://www.soumu.go.jp/main_sosiki/joho_tsusin/security_previous/kiso/k01_cookie.htm

https://wa3.i-3-i.info/index.html
サーバーサイドのデザインパターン[Adapter Patternの章]

# Adapter Patternの基本概念
1. 目的
異なるインターフェースを持つクラス同士を繋ぐための“アダプタ”を提供する。

2. いつ使うか
- 異なるインターフェースを持つクラスやシステムを統合する必要があるとき。 例えば、古いシステムのコードを新しいシステムに統合したいが、両方のシステムで使用されるメソッドやプロパティの名前や振る舞いが異なる場合など。

- 再利用を最大化したい場合。 既存のクラスやライブラリのコードを書き換えずに、新しい要件やインターフェースに合わせて再利用したいとき。

- 将来の変更を柔軟に対応したい場合。 新しいクラスやライブラリを追加する可能性がある場合、Adapter Patternを使用することで新旧のクラスを容易に統合できます。

# アダプタパターンの主要な構成要素
Target: クライアントが利用したいインターフェースを定義します。
Adaptee: 既存のインターフェースで、アダプターによって新しいインターフェースに変換されるクラスです。
Adapter: Target インターフェースを実装し、Adaptee インスタンスを内部でラップします。Target インターフェースのメソッドを呼び出すと、内部で Adaptee のメソッドを呼び出します。
![スクリーンショット 2023-10-10 9.39.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335033/c4c788b6-5e69-60ee-522d-db16af430de0.png)

1. PythonでのAdapter Pattern実装例
1.1 Adapteeの実装
既存のクラスや旧システムのコード。
```python
class OldPrinter:
    def show(self, text):
        print(f"Old method: {text}")
```
1.2 Targetインターフェースの実装
新しいシステムや要件に基づくインターフェース。

```python
class NewPrinterInterface:
    def print_text(self, text):
        print(f"New method: {text}")
```
1.3 Adapterの実装
既存のOldPrinterのshowメソッドを、新しいprint_textメソッドに適応させる。

```python
class PrinterAdapter(NewPrinterInterface):
    def __init__(self, old_printer):
        self.old_printer = old_printer

    def print_text(self, text):
        # AdapterがOldPrinterのshowメソッドを呼び出しています
        self.old_printer.show(text)
```
1.4 使用例
```python
# Adapterを使ってOldPrinterの機能を使用
printer = PrinterAdapter(OldPrinter())
printer.print_text("Hello, Adapter!")

# NewPrinterInterfaceを直接使用
new_printer = NewPrinterInterface()
new_printer.print_text("Hello, New Interface!")

# Old method: Hello, Adapter!
# New method: Hello, New Interface!
```

# Adapter Patternの制約
1. システムの複雑さの増加
Adapterパターンを過度に使用すると、多くのアダプタクラスが導入される可能性がある。これにより、システム全体の複雑さや理解の難易度が増加するリスクがある。
2. パフォーマンスへの影響
アダプタがデータ変換や追加の処理を行う場合、オーバーヘッドが発生し、パフォーマンスに悪影響を及ぼす可能性がある。特に、高頻度で呼び出される処理でアダプタを使用する場合は、この影響を慎重に評価する必要がある。
nRF9160 のソース、既存のサンプル以外で需要はあるのかな？


nRF9160は、既存サンプル、

・シリアルLTEモデム
・フルモデムアップデート
・その他

あたりをさんこうにすれば、
ほぼほぼ対応できるように思える。


nRF9160 のソース、既存のサンプル以外で需要はあるのだろうか？

結局は出来次第なのだろうが、

・FOTA３種全部入り
・外部SPI-NORフラッシュ(8MiB,内4MiBはLittleFS)

あたりは共通仕様にして、

・UDPサーバ仕様（閉域網向け）
・UDPクライアント仕様
・MQTTクライアント仕様
・HTTPクライアント仕様

それぞれの形式で構築したアプリケーションのソースを
参考にしたい方がいれば公開してみようかと考えている。

ただ、ソースコードが汚いので綺麗にしてからの予定。

サーバサイドは、node-red で簡単に済ませる予定。

キャリアはマルチキャリア（３社どこにでもつながる）形式で
、接続不良時に自動切り替えする感じ。
（私は さくらのSIM にてマルチキャリア環境で稼働させている）


また、UARTでESP32と接続して nRF9160はLTE通信のみ担当するバージョンもあるので、それも公開してみようかと検討中。


GPSはあまり期待できないので省略。
（最新のMFWならよくなっている？）



いずれにせよ、希望者がいれば対応予定。

# 以上
【IDEA】予期せぬ原因でのポート競合！IntelliJ IDEAデバッグ時の驚きの解決法

日本語に苦戦しているSYOです。

今回は`IntelliJ IDEA`を使用した際に遭遇するかもしれない一つの問題と、それに関する解決策のメモを共有したいと思います。

この記事は`ChatGPT`を利用して作成されました。

# 問題

`IntelliJ IDEA Ultimate 2022.2`を使用して`Tomcat`プロジェクトをデバッグモードでテストしている最中、以下のようなエラーメッセージが表示されました：

```
Unable to open debugger port (127.0.0.1:63315): java.net.BindException "Address already in use: bind"
```

これは、`ポート63315`が他のプロセスに既に使用されているため、デバッガがそのポートを開くことができないことを意味しています。

# 原因

まず、Windowsの`netstat`コマンドを使用して、そのポートを占有しているプロセスを探そうとしました。しかし、それでも解決には至りませんでした。

```
netstat
```

次に、`winnat`というWindowsのNATサービスを再起動する方法を試してみましたが、これも効果がありませんでした。

```
net stop winnat
net start winnat
```

そして、最終的に私が発見した原因は意外なものでした。

:::note info
それは、私のPC上で動作している**モバイルホットスポット**機能でした。
:::

この機能を無効にすると、問題はすぐに解消されました。

# まとめ

デバッグポートの競合は、モバイルホットスポットのような予期しないサービスやアプリケーションによって引き起こされる可能性があります。

開発中に同様の問題に直面した場合、システム上で実行されているネットワーク関連のサービスや機能をチェックすることをおすすめします。

# 参考

[ChatGPT](https://chat.openai.com/auth/login)
[Tomcat Debug Error: Unable to open debugger port (127.0.0.1:63199): java.net.BindException "Address already in use: NET_Bind"](https://stackoverflow.com/questions/61344554/tomcat-debug-error-unable-to-open-debugger-port-127-0-0-163199-java-net-bin)
ハッカーズチャンプルー2023で Docs to Github Pagesについて話しました 🗣

# tl;dr(先にまとめ)
### [ハッカーズチャンプルー2023](https://hackers-champloo.org/2023/program.html) で初めての レギュラートークしました
### [発表資料](https://speakerdeck.com/takarashinya/sisutemukai-fa-niokerudokiyumentowodekirudakegithub-pagesniji-yue-sitemitahua)
### [発表時に利用したリポジトリ](https://github.com/TakaraShinya/docs-to-githubpages)

登壇自体は他のイベントでもいくらかやってますが、２５分という長い時間を与えられたのは初めてでした。
約１００名という参加者もいる中で話すというのはとても緊張してしまい、自分の発表までの間は わさわさ〜してました💦
しかし、それまでの発表においては聴衆の皆さんとコミニケーションするセッションが少なかったこともあり、
自分は発表中、聴衆とコミニケーションを取って反応を楽しむ方が話してても面白そうだなと思い、そのことを意識していました。
結果、チャンプルーな沖縄のエンジニアの皆さんの現状を知れる楽しい機会にできたと思っています🤔

# そもそもの経緯
ハッカーズチャンプルーの実行委員長である西島さんのこのツイートから始まりました。

https://twitter.com/takarake/status/1537422699710267393

別で開催されるオフラインイベントのことも共有し、実施については大変悩まれたんだろうなと思います🤔

# そして・・・・今年の06月0５日からCFPが採択されるまで
https://twitter.com/HackersChamploo/status/1665664009075343360?s=20

ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!ｷﾀ━━━━(ﾟ∀ﾟ)━━━━!!

同月に別のイベントの対応もあったことから、すぐに共有、提案とは参りませんでしたが💦
７月に改めて社内や東京のCyberagent社員の中でも関わるエンジニアの皆さんへ参加を提案しました🗣

その頃にはトークの募集も始まり、CFPに提出するトークタイトルを悩む日々🤔💦🤔💦🤔💦
(この時期が苦しかったｗいいネタがなくてです😭)

取り急ぎ社内でLTやって軽くウケたネタ👇をCFPに提出しましたが、

![hackachan2023-lt-cfp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14268/4954108a-3513-a7e5-6f1f-ca668fec0d7e.png)

一緒に参加したい東京の皆さんと「レギュラートークにもCFP出しましょう❗」ということになり、
また、CFPのトークタイトルに悩む日々が・・・・・😭😭😭

悩みに悩んで🤔、トーク募集締切りの前日になって、なんとか提出💨
（他のメンバーや東京の皆さんにも駆け込みのCFPを提出していただき、なんとか提出まではDone✅🙌）

提出後、、、、、、珍しく X(旧Twitter)にメンションが来たので何事かと思ったら😲😲😲

https://twitter.com/HackersChamploo/status/1699369814224175249?s=20

レギュラートークで採択されましたーーーーーー❗🙌(けど、実はやること増えてやばいな💦ってなってましたｗ)
よくよく確認してみると、同僚や東京の皆さん含め合計 **６枠** も採択されていました👏👏👏これはすごいｗ

# 発表するまで
### 出したトークタイトルが過去のGithubのリリースやSlackに流していた参考ツールのリンク、実際に検証して試していたリポジトリのログなど、
### ここでも過去ログを検索して取ってくるのに苦労しました💦（自分が問題視したドキュメント検索してくるのと同じことも何度も発生してカオスｗ）
### しかし、発表資料にも整理しましたが、下記のツール群や記法たちがなければ資料の作成、発表を完成させることはできませんでした🙇‍♂️
### 作成(開発)された方皆さんに感謝です🙏🙏🙏

## 🔧 ＜利用したツールや記法たち＞ 🔧
- #### [Markdown(当然)](https://ja.wikipedia.org/wiki/Markdown)
  - 皆さんご存知の文書を記述するための軽量マークアップ言語
- #### [mdbook](https://github.com/rust-lang/mdBook)
  - Markdownを用いて文書を作成できるRust製のツール
- #### [tbls](https://github.com/k1LoW/tbls)
  - CIフレンドリーなGoで書かれたデータベースドキュメントツール
- #### [mermaid](https://mermaid.js.org/)
  - ダイアグラム作成およびチャート作図用のJavaScriptライブラリ
- #### [plantuml](https://plantuml.com/ja/)
  - UML（Unified Modeling Language：統一モデリング言語）のダイアグラムを作成するためのオープンソースのツール
- #### [SSGform(問合せフォームに利用)](https://ssgform.com/)
  - SSGform（エスエスジーフォーム）はフォームを簡単に設置できるサービス
- #### Azure OpenAI Service GPT-4

# 終わりに
今回のトークで作成できたシステム開発におけるドキュメントの中で作成できなかったドキュメントは全然あります。
画面モックとなる外部設計書や詳細設計書、テスト仕様書やその結果を貼るエビデンス等、お固い系の開発プロジェクトにおいては
全然作成したドキュメントが不足してることかと思います。MarkdownやMermaidという記法において表を表現する記法についてはやはり、
個人的にもまだシンプル書ける状態にする改善の余地があるなと思いました。だからといって「どう改善するのか？」というアイディアがあるわけではないですが、
今回のトークで紹介したツール群や記法たちを利用して、作り上げたものから良い手段が生まれるといいなー🤔

また、セッションの中でも触れましたが、これらの資料がもうMarkdownやMermaid等で表現できる状態からすると、
もう書かれるべきコードも出力されてもおかしくないのでは❓と個人的には感じました。
読まれている皆さんはいかがでしょうか❓

以上、最後になりますが、ハッカーズチャンプルー2023 本当にリブートおめでとうございます❗❗❗🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉
ママ友から音源を楽譜にしてくれと頼まれた話

# きっかけ
私は趣味でDTMなどをやっているのだけど、それがママ友にバレてしまった。
何か、DTMやる人は音楽的素養があり、音源から楽譜に起こす技能を持つものだと思われているらしい。
***んなわけあるか。***
私は絶対音感どころか相対音感もかなり怪しいので、到底正攻法で出来る気がしない。
しかし私はエンジニアなので技術でなんとかならんだろうかと考えた。
具体的には、

- 音源分離
- Ableton liveでパート音源をMIDIに変換
- MIDIから楽譜に変換

みたいなことなら出来るかも知れない。



# Demucsで音源分離
https://github.com/facebookresearch/demucs

とても簡単にインストールから音源分離までできた。
今回これが一番感動した。


# Ableton liveでパート音源をMIDIに変換
https://www.ableton.com/ja/

Ableton live（どうもstandard以上でないとこの機能は使えないみたい）にパート音源をインポートしてMIDIに変換してみる。

### 結果
❌
いまいち精度が出なかった。




# Basic Pitchでパート音源をMIDIに変換
https://basicpitch.spotify.com/

>Basic Pitch is a lightweight, lightning-fast audio-to-MIDI converter that features pitch bend detection and works on recordings of almost any instrument, including voice. It's brought to you by the researchers and engineers at Spotify's Audio Intelligence Lab.

だそうな。
結構調整が効くので助かった。
生成結果のMIDIファイルをブラウザ上で再生も出来るので分かりやすい。
ただ、処理中なのか何なのか、UIとして分かりにくい点、改善してほしい。

### 結果
⭕
完璧ではないがまずまずのMIDIデータができた

# Muse ScoreでMIDIから楽譜に変換
https://musescore.org/ja

MIDIファイルをドラッグアンドドロップするだけで楽譜にしてくれた。
そのままMuse Score上で再生も可能。
これが人間が読める・弾ける楽譜なのかは私には判別がつかないので、あとはママ友に託そうと思う。



# 一連をやってみて
今回私はほとんどドラッグアンドドロップしかしていない。
エンジニアらしいことと言えば、Demucsをインストールして音源分離するのにちょこっとターミナルを叩いただけだ。
それでも何か音源から楽譜らしきものを生成することができた。
技術って凄えなあ。

めでたしめでたし。
SQLを学びます。①

こんにちはiwanagaです。
最近ちょいちょいSQLの勉強をしていましてなかなか面白いので共有させていただきます。

# そもそもSQLとは？
そもそもSQLとは何かと言うと"Structured Query Language"の略称で、Languageと書いてある通りデータベース管理システム（DBMS）と対話するためのデータベース言語です。データベースからデータを抽出、挿入、更新、削除などの操作を行うために使用されます。

なお余談ではありますがSQLはプログラミング言語ではなくデータベース言語です。データベースを管理するソフトウェアを操作・制御することが目的の言語であり、プログラミング言語ではないのでシステムを開発することはできません。ただデータをしっかりと制御するためだけにいる一途で不器用な感じや、ISO（国際標準化機構）で規格化される程の汎用性、この筋が通っていて燻銀な感じが自分は大好きです。

# SQLの基礎知識
個人的にSQLの基礎を知るにはざっくりと大きく分けて２つ
①SQLで制御するデータベースの4大要素
②実行するSQLの4大命令文
です。

まずは①SQLで制御するデータベースの4大要素について説明させていただきます。

# ①SQLで制御するデータベースの4大要素
まずはSQLで制御するデータベースを構成する4大要素を説明させていただきます。ちょっとExcelに似ているところもありますので、Excelになぞらえて説明させていただきます。

・テーブル
　Excelで言うとシートに相当するのがテーブルです。データベースではデータの種類やプロ
　グラムの利便性を考慮して複数のテーブルを持つことが多く、Excelのブックのような構造
　になっているとイメージできます。

・カラム
　Excelで言うと列に相当するのがカラムです。雑誌の囲み記事を”コラム”といいますが、ス
　ペルは同じです。データベースではカラムごとに、文字列（と文字数）、数値（と桁数）
　のように属性が定められるので、打ち合わせにおいては、これら属性のことをカラムと呼
　ぶ人もいます。

・レコード
　Excelで言うと行に相当するのがレコードです。テーブルとカラムがデータが保管される場
　所のことを表していた語に対して、レコードはデータそのもののことを指す言葉です。ま
　た行を意味する”ロウ”と同じ意味で用いることもあります。

・フィールド
　レコードを構成する１つ１つの要素のことでExcelでいうセルに相当します。 カラム、レコ
　ード、フィールドの関係を表すと、「複数のレコードの同じフィールドを集めたものがカ
　ラム 」ということになります。 また、ユーザーインターフェイスにおいてもフィールドと
　言う言葉を使います。入力フォームのデータを入力するスペースのこともフィールドとい
　います。フォームのフィールドから入力されたデータは、（データベースを使っていれ
　ば）該当するテーブルのレコード内フィールドに格納されるわけですから、フォームのフ
　ィールドとデータベースのフィールドはこの場合同じと言えます。


※ここまでExcelとくらべて用語の説明をしましたが、データベース自体にはExcelのように検索機能や他のシートを参照したりする機能はありません。






# ②実行するSQLの4大命令文
SQL言語で出来ることは上記でもざっくりと説明しましたが、それらを象徴するような基礎的な命令文があり、世間ではこれらを4大命令文、あるいは4大構文と言うそうです。下記に一覧表としてまとめます。

|命令文|用途|
|:---:|:---:|
|SELECT文|データ抽出|
|UPDATE文|データ上書き|
|INSERT文|データ追加|
|DELETE文|データ削除|

1つずつ①で説明した内容も交えて説明させていただきます。

・SELECT文
　SELECT文では、どのテーブルからデータを取得するかを指定し、レコードやカラムを指
　定して取得したいフィールドを選択します。また、条件式を使用して複数のフィールド
　や、特定のレコード、カラムなど見たいデータはいくらでもselect文で選択、抽出が出来
　ます。

```
例文
SELECT FirstName, LastName FROM Customers;
```

・UPDATE文
　UPDATE文はどのテーブルのデータを上書きするかを指定し、レコードやカラムを指定
　して上書きしたいフィールドを選択します。また、条件式を使用して複数のフィールド
　や、特定のレコード、カラムなども更新できます。
```
例文
UPDATE Products SET Price = 29.99 WHERE ProductID = 101;
```
・INSERT文
　INSERT文では、挿入先のテーブルを指定し、フィールド（カラム）ごとに挿入するデータ
　を指定します。これにより、新しいレコードがテーブルに追加されます。
```
例文
INSERT INTO Employees (FirstName, LastName, Department) 
VALUES ('John', 'Doe', 'HR');
```
・DELETE文
　DELETE文では、削除対象のテーブルを指定し、条件式を使用して削除するレコードを指
　定します。これにより、指定された条件に合致するレコードがテーブルから削除されま
　す。
```
例文
DELETE FROM Orders WHERE OrderID = 12345;
```

# 最後に


いかがでしたでしょうか？次回からはより深掘りした内容や、SQLを使用するにあたって必要な管理ツールの話も出来たらいいなと思っています。

以上です。

エンジニアファーストの会社 株式会社CRE-CO　iwanaga
Oracle Analytics Cloud：0で埋めて桁数を揃える

# はじめに
次のようなデータがあったとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a57902e0-60d4-d99d-f3e0-5c34681d3c09.png)
「OFFICE_NUMBER」列には文字列データが入っており、この列でソートすると

|OFFICE_NUMBER|
|:-|
|2|
|6|
|8|
|11|
|12|
|15|
|16|

ではなく

|OFFICE_NUMBER|
|:-|
|11|
|12|
|15|
|16|
|2|
|6|
|8|

となります。
そこで、データを2桁で揃えるようにし、1桁のデータは先頭に0を付加してみます。

# やりたいことの整理
文字列が格納されている特定の列において
- データを2桁にする
- 足りない桁は 0 で埋める

ということをやってみます。

# サンプルデータ
こういうデータを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/537f6dd9-8929-631e-9b22-247246a9cd4b.png)

## データセットとして登録
OACにログインし、サンプルデータのExcelファイルをブラウザ画面に直接ドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/097e3be5-f0e4-f525-dba2-13ab905a811f.png)

プレビューを確認し、「ビジュアル化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d8026d6f-9932-9c97-29ab-e528185f6bbb.png)

# OACでビジュアライズ
アップロードしたデータセットを読み込んで、新規のワークブックが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b192258f-d5bc-647e-fbf4-0087e336ce08.png)

## 現状を確認
「OFFICE_NUMBER」と「REVENUE」を選択して、ビジュアライゼーションを作成してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/1ecb522d-47af-c697-7e13-86d780c5357b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b5c16b21-c96f-7fe7-8367-d80a7b2690e0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8183d92f-9470-8678-912c-e30e28b903d1.png)

## 式の編集
画面上部中央の「データ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/99fc9013-7ff9-55aa-78df-f93231602367.png)
編集アイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/ca40ab10-a3a9-6221-1743-a42952e1e75c.png)
ブラウザの別タブが開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/619cc91e-203f-4d3d-17ef-92f52b78287e.png)
「OFFICE_NUMBER」列の3点リーダをクリックし、メニューの「編集」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f3b1bdf9-31ee-bc03-663a-7d3828872199.png)
式を編集します。
編集した式の例です。
```sql
REPEAT('0', 2 - LENGTH(OFFICE_NUMBER)) || OFFICE_NUMBER
```
「ステップの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fab80f14-f566-27d7-6bcb-6baf7330fa7e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/06426e13-4006-5033-5723-034babbfad65.png)
データセットを上書き保存して、ワークブックのブラウザタブに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6a8d904c-3662-08f7-6302-f218947b94b4.png)

## 編集結果を確認
「ビジュアル化」をクリックします。
2桁化した「OFFICE_NUMBER」が反映されています。
自動的に反映されていない場合は、「データのリフレッシュ」をクリックしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/214c089c-898e-e1a2-9049-b9a2d5036567.png)
完成です！

# おわりに
ソートの問題を解決するだけなら、データ型を「数値」にするだけでも解決できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/092d1fb3-4fb3-4aa9-d94c-bda53694975b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e8ddda5c-7dd0-947d-f080-c10333e404e8.png)
JavaFX の InvocationTargetExceptionを治す

# 環境
InteliJ IDEA
JDK21
ビルドツールとしてMavenを使用

# 問題

以下のような
・TestWindow.java
・TestWindowController.java
・test-view.fxml
の3ファイルで構成されている単純なJavaFXアプリケーションをTestWindow#main()から実行すると、InvocationTargetExceptionがスローされる。

実行イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368194/79c280a7-6380-b341-7e76-3145fbeeb1a3.png)


 ```java:TestWindow.java
package com.example.hoge;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class TestWindow extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(TestWindow.class.getResource("test-view.fxml"));
        Scene scene = new Scene(fxmlLoader.load(), 320, 240);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
```

```java:TestWindowController.java
package com.example.hoge;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;

public class TestWindowController {
    @FXML
    private Label textView;

    @FXML
    public void onHelloButtonClick(ActionEvent actionEvent) {
        System.out.println("click");
    }
}

```

```xml:test-view.fxml
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>

<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
      fx:controller="com.example.hoge.TestWindowController">
    <padding>
        <Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
    </padding>

    <Label fx:id="textView"/>
    <Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>

```

# 解決策
module-info.javaに以下の内容を追記する

```java:module-info.java
com.example {
    // ...(略)...
    // reuires が色々...
    opens com.example.hoge to javafx.fxml;
    exports com.example.hoge;
}
```

# 備考
`java.lang.reflect.InvocationTargetException`は一般的な例外であり、JavaFX関連だけでも様々な原因が考えられます。適宜他情報源の参照もお願いします。
OpenCV + RetinaFaceで顔をぼかす

## はじめに
画像に映りこんだ人物の顔をぼかしたい！というタイミングがあり、ChatGPTにサポートしてもらいつつ初めて画像処理に挑戦してみたので、その結果を備忘録として残しておきます。

今回は、画像の読み込みや表示、ぼかし処理に`OpenCV`を、顔の検出に`RetinaFace`を使用してみました。

## やりたいこと
画像に人物が映っていた場合、顔をぼかす

## テストに使用した画像
こちらの[写真AC](https://www.photo-ac.com/)のフリー画像を使用します。
![27143473_m.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570844/678ffe75-345f-d57e-277c-67302bdb014f.jpeg) 

## 環境
Google Colaboratoryを使用します。

## 準備
まずは、pipでライブラリをインストールします。
```python
!pip install tensorflow opencv-python retina-face
```
次に、ライブラリをインポートします。
```python
import cv2
import numpy as np
from google.colab.patches import cv2_imshow
from retinaface import RetinaFace
import matplotlib.pyplot as plt
```

## 顔検出とぼかし処理
準備が終わったら、Colaboratoryに画像をアップロードします。

```python
# Select the target image
from google.colab import files
uploaded = files.upload()
```
「ファイル選択」ボタンを押して、画像をアップロードします。

画像がアップロードできたら、OpenCVで読み込み → ぼかし処理を行います。
（ぼかし処理では、検出された各顔に対してぼかしを適用し、ぼかされた部分を元の画像に反映するということをやっているようです。）


```python
# Load selected images
image_path = list(uploaded.keys())[0]
image = cv2.imread(image_path)

# Detect faces
img_faces = RetinaFace.detect_faces(image)

for i in img_faces.keys():
    facial_parts = img_faces[i]
    recognize_face_area = facial_parts["facial_area"]

    x1, y1, x2, y2 = recognize_face_area
    face_region = image[y1:y2, x1:x2]

    # Blur the face
    face_blurred = cv2.GaussianBlur(face_region, (99, 99), 30)

    # Blurred areas are reflected in the original image
    image[y1:y2, x1:x2] = face_blurred

plt.figure(figsize= (10, 10))
plt.imshow(image[:, :, ::-1])
plt.axis('off')
plt.show()
```

結果はこんな感じになりました。
斜めの顔や横顔も認識してぼかすことができました :tada:
![blur.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570844/209f96b1-e66c-806b-a7af-531c96064ac0.png)

## 補足
顔の認識とぼかしをコードのどの部分で行っているのかについて補足します。
### 顔の認識
```python
img_faces = RetinaFace.detect_faces(image)
```
- `detect_faces`関数は、画像内の顔の位置や大きさなどの情報を返してくれます。

### 顔をぼかす
```python
for i in img_faces.keys():
    facial_parts = img_faces[i]
    recognize_face_area = facial_parts["facial_area"]

    x1, y1, x2, y2 = recognize_face_area
    face_region = image[y1:y2, x1:x2]

    # Blur the face
    face_blurred = cv2.GaussianBlur(face_region, (99, 99), 30)

    # Blurred areas are reflected in the original image
    image[y1:y2, x1:x2] = face_blurred
```
ここで、検出した顔の情報を元に、画像の中のその顔の部分だけをぼかしています。

- `face_region = image[y1:y2, x1:x2]` 
    - 顔が画像のどの部分にあるのかを切り取っています。
- `cv2.GaussianBlur(face_region, (99, 99), 30)` 
    - 切り取った顔の部分をぼかす処理をしています。
    - `(99, 99)`はぼかしの大きさ、`30`はぼかしの強さを表しています。
- `image[y1:y2, x1:x2] = face_blurred` 
    - ここで、元の画像の中の顔の部分を、ぼかしたものに置き換えています。

## おわりに
今回はこちらの企画の一環で、写真をアップロードする際にプライバシーな情報が映っていたらぼかしたい！と思い、挑戦してみました。

https://sakinokoto.esm.co.jp/plan-detail/machitopia

ちなみに、企画自体は一旦クローズとなりました、、経緯などはこちらのブログに載せています。気になったかたは是非ご覧ください。

https://sakinokoto.esm.co.jp/blog-detail/machitopia-report
google apps scriptのHtmlServiceでハマった話。

# 似て非なる2つにはまりました。
　普段は医療機関で働いており、プログラミングとは全く関係ない一般人ですが、趣味でプログラミングを続けています。いろんな言語を触っていますが、久しぶりにGoogle Apps Scriptを触った時の話です。おそらく当然と思われる方が大半だと思いますが、笑い話として残しておきます。

# やりたかったこと
　すごく単純で「スプシからGASを介してHtmlへデータを送りたい」です。

# どこでハマったのか？
```javascript
function doGet(e){
  var html=HtmlService.createTemplateFromFile("index.html");
  html.d=sendData()
  return html.evaluate();
}

function doGet(e){
  var html=HtmlService.createOutputFromFile("index.html");
  html.d=sendData()
  return html.evaluate();
}
```
見てもらうとわかるように、"createTemplate"と"createOutput"の違いです。
久しぶりだったのでいろんなサイトを見ながら作っており、createOutputを使って見事にハマりました。原因が分からず。chatGPTでも聞いてみましたが、分からず。
一から書いてみようとしていた時に変換候補を見て気づきました。レファレンスにはしっかりと書かれていました。
"createOutput"の場合、データを送ることはできず、evaluateは不要でした。

# 結論
時にはレファレンスに戻って調べることも大事。
配列型の変数を宣言してin句で利用する【SQLServer】

SQLServer で配列型の変数は作れないので、テーブル型の変数で代用する。

```sql
-- 変数宣言
declare @targetUsers table(id integer);

-- データセット
insert into @targetUsers values (2),(4),(5),(8);

-- in句で使う
select *
from users
where
    id in (select id from @targetUsers)
;
```
【JavaScript】JSPとJavaScriptのテンプレート文字列の衝突

日本語に苦戦しているSYOです。

`JSP`を用いた開発中、`JSP`と`JavaScript`のテンプレート文字列の衝突問題に遭遇しました。

この記事では、`ChatGPT`を利用して、`JSP`と`JavaScript`の連携時のテンプレート文字列の使用方法と注意点に関するメモを共有します。

# テンプレート文字列とは

まず、テンプレート文字列（テンプレートリテラル）について簡単に紹介します。

テンプレート文字列は`JavaScript ES6`から導入された新しい文字列リテラルの形式で、バックティック（`）を使って文字列を定義します。

この特徴を利用すると、文字列内に変数や式を直接埋め込むことができ、複数行の文字列も簡単に作成することができます。

例：

```
var name = "Radiohead";
var greeting = `こんにちは、${name}さん！`;
console.log(greeting);
```

結果：

```
こんにちは、Radioheadさん！
```

# JSPとJavaScriptのテンプレート文字列の衝突

`JSP`の中に`JavaScript`を埋め込む際、`JSP`の`EL（Expression Language）`と`JavaScript`のテンプレート文字列は、見た目が似ているために混同されやすいです。

`JSP`では`${}`を使用してEL式を表現します。これに対して、`JavaScript`のテンプレート文字列でも`${}`が使用されるため、`JSP`ファイルの中でテンプレート文字列を使用すると、意図しない挙動やエラーが発生する可能性があります。

例：

```
var inputElement = document.querySelector(`input[name="${inputName}"]`);
```

上記のコードでは、`${inputName}`が`JSP`によって解釈される可能性があり、意図しない結果となる可能性が高まります。

最近の実際の開発中に、`input[name="${inputName}"]`を使用しても、ページ上の`input`要素を取得できないという問題に遭遇しました。

# 解決策

この問題を回避する方法の一つは、テンプレート文字列の代わりに、従来の文字列の連結を使用することです。

```
var inputElement = document.querySelector('input[name="'+inputName+'"]');
```

この方法を利用すると、`JSP`の解析と`JavaScript`の実行が明確に分離され、意図した通りの動作ができます。

# まとめ

`JSP`と`JavaScript`を組み合わせて使用する際には、テンプレート文字列の使用に関する注意点があります。

文字列を連結することで、問題を回避できます。

# 参考

[ChatGPT](https://chat.openai.com/auth/login)
数式項目だと積み上げ集計で 利用できない


+ [数式項目（計算結果）を合計し表示させる方法はありますでしょうか](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LUkQJ)

:::note
数式項目だと積み上げ集計で 利用することはできないので、フローなどの自動化処理で事前に一度カスタム項目に値 をコピーするなどが必要だと思います。

https://regardie.dev/post-910
:::
Bulk Service Deliveries



+ [Customize Bulk Service Deliveries](https://help.salesforce.com/s/articleView?id=sfdo.CM_Customize_Bulk_Service_Deliveries.htm&type=5)

+ [【未解決】Bulk Service Deliveries is locking up Service record](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Jgxyo)

:::note alert
pmdm.ServiceDeliveryTrigger: execution of AfterInsert caused by: System.DmlException: Update failed. First exception on row 0 with id a30BS00000228tBYAQ; first error: UNABLE_TO_LOCK_ROW, unable to obtain exclusive access to this record or 1 records: a30BS00000228tBYAQ: [] (System Code)
:::
AZ-104試験対策のまとめ「Azure Monitor編」

## はじめに
Microsoft Azure Administrator(AZ-104)合格に向けた勉強でまとめた内容を本記事では投稿しています。
試験範囲の内容を私が勉強していく中で、
・忘れてしまっていた内容
・他の知識と絡めて理解した方が良い内容
・Microsoft Learnの読解に苦戦した内容
などをできるだけ分かりやすく簡潔にまとめることを意識しています。
Azureの勉強を一から始め、AZ-104取得を目指している方の参考になれば幸いです。
※本記事の内容が必ず試験に出るわけではないこと、ご注意ください

## 試験対策のまとめ
### **Azure Monitor**
クラウド/オンプレ環境からの監視データを収集/分析し、それに対応するための包括的な監視ソリューション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/b0e0b033-68b5-a041-61a4-495545519d85.png)


### **Azure Monitorのデータソース**
各監視対象リソースから収集されたデータの種類  
収集されたデータがデータプラットフォームにルーティング

#### **Azure プラットフォームログ**
Azureリソースとそれらが依存しているAzureプラットフォームの情報を提供するデータソース  
詳細な診断情報と監査情報を提供
* リソースログ
    - 対象レイヤー：Azureリソース
    - Azureリソース内で実行された操作の分析情報を提供
* アクティビティログ
    - 対象レイヤー：Azureサブスクリプション
    - サブスクリプションレベルのイベントの分析情報を提供
* Azure ADログ
    - 対象レイヤー：Azureテナント
    - サインインアクティビティの履歴と、特定のテナントに対してAzure ADで行われた変更の監査証跡を提供

### **Azure Monitorのデータプラットフォーム**
収集された監視データが格納されるデータストア

#### **Azure Monitorメトリクス**
タイムスタンプ付きデータ分析用に最適化された時系列DB  
一定の間隔でメトリックを収集
※メトリック：特定の時点におけるシステムの側面を表す数値  
ほぼリアルタイムのシナリオに対応できるため、問題の警告や迅速な検出が可能

#### **Azure Monitorログ**
全ての種類の構造化/非構造化データを格納  
ログにはシステムイベントが記録され、タイムスタンプも含まれる  
複雑な分析を実行可能

#### **分散トレース**
様々なサービス/コンポーネントを通過する要求のパスを確認可能  
パフォーマンスのボトルネックを特定し、分散システムの問題のトラブルシューティングに役立つ  
トレースデータはAzure Monitorログの個別のワークスペースに格納

#### **変更**
Azureアプリケーションとリソースで発生する一連のイベント  
変更分析ツールを用いてサブスクリプションレベルでトレース  
※変更分析ツール：Azure Resource Graphの機能を基にして、アプリケーションの変更に関する詳細な分析情報を提供

<br>

* 参考
    - https://learn.microsoft.com/ja-jp/azure/azure-monitor/essentials/platform-logs-overview
    - https://learn.microsoft.com/ja-jp/azure/azure-monitor/overview


## 次の試験対策のまとめ
* **AZ-104試験対策のまとめ「VM編①」**

https://qiita.com/fsd-jume/items/098a292fbb4544447706

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/6eda24728c9c03c36bc3
2023年10月何故かベストアンサーをつけてくれない質問

[2023年10月の質問の中から整理します](https://qiita.com/Keiji_otsubo/items/6cf72c6bee50626b4d88)

+ [Hi, im so lost, i keep getting "We can't find the 'Entitlements' related list on the Account page layout." even though see it on the accounts page.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007KYlKw)

+ [datatableに無限スクロール機能を追加することについて](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007NANsH)
+ [The Lightning App should have one Recent Items component in the right hand column.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LWDXa)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a567c5ec-8f09-f813-c997-5545acd3072b.png)

+ [Trail -> Admin Intermediate Formulas and Validations -> Create Validation Rules](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007O4ZZB)


# In the 'Send Survey Invitations to Sales Reps' action, we can’t find the survey selected as 'customer_saisfaction'.

+ [In the 'Send Survey Invitations to Sales Reps' action, we can’t find the survey selected as 'customer_saisfaction'](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007MavGY)

+ [I'm getting an error in this module - Automate Your Survey Invitations](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Vja08SAB)

:::note
Please check the api name/label to ensure that there is no typo.   Secondly, ensure that the survey's version is correct and active.

If all found correct, you may try it in a new org, fresh.   Sometimes, this is easier than troubleshooting what was missed/done incorrectly.
:::
Error while importing data



+ [Error while importing data](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007KYi3p)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7e0a6f41-05d3-47c8-845b-ba09da003b83.png)


:::note
Clicking this button will launch Apex and create a record.

If you can write Apex code, try debugging it in the developer console.

From what I remember, it worked if I commented out the deletion process.

If you can't write code, try the new playground
:::

:::note
Try out your new playground.
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/45b527cf-3494-6aec-5ee0-0010a3e1b333.png)

[Unable to import data.](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000IQNBj)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/76ff43dc-aa74-6152-be4a-4abd480553b8.png)

[Why i m unable to click Initialize Sample Data in get started with platform](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000ISSwU)
エラーについて

# 1.はじめに
+ ソフトウェアテストをする前にそもそもエラーとはなんぞやと決めるため
+ エラーの用語説明と対策の戦略について書く

# 2.用語の定義
| 用語| 定義 |
|:-:|:-:|
|  エラー|ソフトウェアプロジェクトのコード中のミス。開発者が気付いている場合と気付いていない場合がある。|
|  バグ |開発者が気づいたエラー。   |

+ エラーへの対策法並びに戦略
・ソフトウェアのテスト
・例外処理
・ソフトウェアのデバッグ
・防御的プログラミング(defensive programming)
・成功事例の活用

# 3.学ぶもの

### エラーについて
| 種類|説明 |
|:-:|:-:|
| 論理エラー | 構文的に正しいが、意図した通りの結果にならないエラー。探すのが面倒 |
| 構文エラー | コードがプログラミングの言語規則に従わない場合に発生するエラー。コンパイル・解釈前。|
| 実行時エラー | プログラムの実行中に発生しプログラムを即座にクラッシュさせるエラー。コンパイル・解釈後。 |
+ 論理エラー
・インタプリタやコンパイルで正しく出力されるが意図した通りの出力にならないこと。
・コードの入力で文法的には正しいけど関数の定義を誤っていること
・構文エラーのようにどこが間違っているか教えてくれないから厄介

``` logic_error.py
# 誤った税金の計算式
# 本来は(1 + taxRate) * subTotal
def calculateTotalCost(subTotal, taxRate):
    totalCost = (1 * taxRate) * subTotal
    return totalCost
print(calculateTotalCost(100, 0.1)

print('今年は、' + (20 + 23) + '年')
print('今年は、' + 20 + 23 + '年')
```
```python3 logic_error.py
10
# 110　の出力を期待していたが異なる結果になってしまった。
'今年は、43年'
'今年は、２０２３年'
# コードの入力の違いで結果が欲しいものにならないこともある。
```

+ 構文エラー(syntax error)
・プログラミング言語の構文とは
　自然言語のように大文字や小文字、句読点などの規則があるように読み手がコードの意味を理解できるようにルールが決められている。
・各プログラミング言語の違う理由（後で詳しく調べる）
　空白、特殊記号、構造などの独自の規格があり、これによってコードがコンピュータのハードウェアに理解、解釈されてプログラムが実行されるようになる。
・静的型付け言語や動的型付け言語（後で詳しく書く）

| 種類 | 説明 |
|:-:|:-:|
| 静的言語 | 先にコードの型を決めているので間違った入力をしたら構文エラーを出してくれる。 |
| 動的言語 | 静的言語のような構文エラーが出ないので入力側が型を意識しないといけない。|
|共通|文章の規則に沿っていないコードを入力したら出る。IDEで自動的に警告してくれるから気づきやすい。|

+ 実行時エラー(runtime error)
・コード内でエラーが発生した場合は、プログラミング言語がセキュリティ対策として強制停止させてクラッシュさせる。
・原因は、プログラムのロジックに問題があったり、データの使い方が間違っていたりすることが多い。
その特定と解決が難しい場合がある。
・動的型付け言語ではよく発生するエラー。厳密な型チェックを行う静的言語では構文エラーで防いでくれるのでその分が発生しない。
動的言語では、データ型が混在したものを操作することが可能なので演算子で変更したりした時は、エラーが発生する。
・範囲外の値を入力をしたり、ある値に対応していないオブジェクトにその値を入力したりなど

``` runtime_error.py
def accessFault(arr):
    # error 本来ならlen(arr)のはず
    return arr[len(arr)]
accessFault([1,2,3,4,5])
```
``` python3 runtime_error.py
'''
accessFault([3,4,5,3,10,23])
Traceback (most recent call last):
  File "script.py", line 5, in <module>
    accessFault([3,4,5,3,10,23])
  File "script.py", line 3, in accessFault
    return l[len(l)]
IndexError: list index out of range
'''
```
(レジ直出力)ESP32の18番、高速Lチカで遊ぶ。2(マクロ展開化)


一つ前の記事

https://qiita.com/caa45040/items/2528b6d8f002c4a6b129

目的
いろいろ、気に食わないので
18番の高速化を明示的にマクロ展開化して
引数のスタックとリターンからの戻りを削減する。

約4Mhz

![o_cop657.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/504b2bf0-1d3d-e8d2-928d-a4da9db171da.jpeg)


```c++



//GPIO_ESP32_HS_IO_2
//ESP32用の高速I/O

//インクルド
#include <Arduino.h>

//定義
#define GPIO_0to31SET_REG     *((volatile unsigned long *)GPIO_OUT_W1TS_REG)
#define GPIO_0to31CLR_REG     *((volatile unsigned long *)GPIO_OUT_W1TC_REG)

//I/Oの番号を指定
#define GPIO_D18_P 18

//セット
#define GPIO_0to31SET_REG_18  (GPIO_0to31SET_REG=GPIO_0to31SET_REG|(1<<GPIO_D18_P))

//クリア
#define GPIO_0to31CLR_REG_18  (GPIO_0to31CLR_REG=GPIO_0to31CLR_REG|(1<<GPIO_D18_P))

//WR信号を出力 ゼロの場合は、クリア　それ以外は、セット
//#define HS_GPIO_WR_M(o_a)     ((o_a==0)?(GPIO_0to31CLR_REG_18):(GPIO_0to31SET_REG_18))


//初期化
void setup() {

    //ポートの初期化
    pinMode(18, OUTPUT);

    //無限ループ
    while01:

        //高速I/O
        //HS_GPIO_WR_M(0);//WRB=0; 10
        //HS_GPIO_WR_M(1);//WRB=1; 10

        GPIO_0to31CLR_REG_18;
        GPIO_0to31SET_REG_18;

    goto while01;
    
}//setup


//メインループ
void loop() {}


```
LWC未解決

[LWC関連(トレイルヘッド含む）のまとめに戻る](https://qiita.com/Keiji_otsubo/items/1da73107edcfb39e43b5)


+ [Error: Line: 1, Column: 27 Error: Method does not exist or incorrect signature: void getRecords() from the type HouseService](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LUdpu)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ae762849-4034-87d7-76d1-fce07baa1c3a.png)


+ [Salesforce CLI を更新したところです。スクリプトが sf コマンドを実行するたびに、「cmd」ウィンドウが「点滅」し、作業できなくなります (cmd がフォーカスを取得するため、アプリはフォーカスを失いました)。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLPoU)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f6fc0c79-a415-b9db-4a28-3678e0024b63.png)


# sfになったから？

:::note alert
[10/12/23 13:26:49] Exception in task deploy_unmanaged.deploy                                                               
Error: Command exited with return code 127:
 ›   Warning: @salesforce/cli update available from 1.67.1 to 2.12.9.
 ›   Warning: force source convert is not a sf command.
:::

:::note
I uninstalled the cli first then reinstalled due to similar issues. https://developer.salesforce.com/forums/?id=9065d0000007BlRAAU
:::

# failed, reason: connect ECONNREFUSED 127.0.0.1:6101

+ [When I try to Deploy to Org I am seeing below issue. I dont know where the below org is coming from](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007OYebt)


# 依存選択リスト

+ [LWC カスタム データテーブルに依存選択リストを設定する方法](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBVRP)
質問システムのポートフォリオ解説(React+Express)

<h1>概要</h1>
eduaasという質問システムを作成しました<br>

![スクリーンショット 2023-10-09 18.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518441/5486acbb-7afc-b425-7c49-b531ba54a6e7.png)


<br>

ソースコード　GitHub:
<p>
<h1>開発環境</h1><br>
フロントエンド:Node.js フレームワーク:React<br>
バックエンド: Node.js フレームワーク:express<br>
データベース: mysql2<br>
現在ローカル環境で作成しています。

<br>
<h3>1.質問書き込む</h3>

![スクリーンショット 2023-10-09 18.19.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518441/6ff1a036-7ab9-e27c-e1e2-56dfb96699a0.png)

Studentの画面から名前と質問を書き込み送信ボタンを押す。

<h3>2.回答を送信</h3>

![スクリーンショット 2023-10-09 18.22.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518441/f7abd2ff-44ef-106c-bf2e-88cf54ef775a.png)

Teacherの画面から質問に対して回答して返信する。

<h3>3.回答一覧に表示される</h3>

![スクリーンショット 2023-10-09 18.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518441/0c3b25b1-578b-b90c-2ffe-c288fd1467c8.png)

再びStudentの画面に戻ると回答一覧に回答が表示されてる
wslでelixir その81

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
livebookでExplorer.DataFrame.filterがエラー吐く件。

# 環境

ubuntu    20.04.6
erlang    13.0.4
elixir    1.14.5

# サンプルコード

```
Mix.install([
  {:download, "~> 0.0.4"},
  {:kino_explorer, "~> 0.1.11"},
  {:kino, "~> 0.10.0"}
])
```

```
df = Explorer.DataFrame.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
Explorer.DataFrame.filter(df, nums > 2)


```

# エラー


```
** (CompileError) elixir/tsv.livemd#cell:hquesqviz7z7aaorp2juyhafq4w3zazk:6: undefined function nums/0 (there is no such import)
    (elixir 1.14.5) src/elixir_expand.erl:587: :elixir_expand.expand_arg/3
    (elixir 1.14.5) src/elixir_expand.erl:603: :elixir_expand.mapfold/5
    (elixir 1.14.5) src/elixir_expand.erl:867: :elixir_expand.expand_remote/8
    (elixir 1.14.5) src/elixir_expand.erl:587: :elixir_expand.expand_arg/3
    (elixir 1.14.5) src/elixir_expand.erl:603: :elixir_expand.mapfold/5
    (elixir 1.14.5) src/elixir_expand.erl:867: :elixir_expand.expand_remote/8
    (elixir 1.14.5) src/elixir_expand.erl:527: :elixir_expand.expand_block/5
```



以上。
どんな方法でUnityの勉強をしていますか？ サイト・イベント・カンファレンス情報まとめ

# はじめに
皆さんはUnityを学び続けるために、どのようなサイトやイベント・カンファレンスを利用していますか？

誰かの参考になればと思い、私がこれまでに利用したサイトや、参加したイベント・カンファレンスの情報をまとめました。

興味のある項目がありましたら、ぜひチェックしてみてください！

# 学習サイト

### Unity公式ドキュメント
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/f3db6402-fa3f-d142-db14-9cf9984ca424.png)](https://docs.unity.com/)
* Unity公式のドキュメントです。
* Unity Editor Manual と Scripting Reference の2つはいつもお世話になっています。
* URL : https://docs.unity.com/

### Unity Learn
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/3302721f-997a-27c3-330c-2584d358779b.png)](https://learn.unity.com/)
* Unity公式のオンライン学習プラットフォームです。
* URL : https://learn.unity.com/

### Unity Learning Materials
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/56eaed1b-2a17-d131-0223-64cbf0aae152.png)](https://learning.unity3d.jp/)
* Unityを学ぶための様々な動画を集めたサイトです。
* Unity公式の動画だけでなく、有志で開催されたイベントの動画等もまとまっています。
* より詳しい説明はコチラ👉 https://learning.unity3d.jp/about/
* URL : https://learning.unity3d.jp/

### Unity Japan の Note
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/066237be-a2ae-781f-a977-bb0518c8136e.png)](https://note.com/unityjapan)
* Unity Japan のスタッフさんが気軽に情報発信してくれています。
* URL : https://note.com/unityjapan

### Udemy
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/384415a9-deb4-e718-669d-8268138ccfa8.png)](https://www.udemy.com/)
* オンライン動画学習サイト
* 様々なコースがあり、Unityのカテゴリが有ります。
    * https://www.udemy.com/topic/unity/
* 頻繁に割引セールしているので、結構お得に買えます。
* URL : https://www.udemy.com/

### Qiita
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/e416974a-32bb-6c3d-e5aa-b6509178f311.png)](https://qiita.com/)
* 皆さんご存知の通り、今見てるこのサイトです。
* 私はUnityタグ👇をフォローしています。
    * https://qiita.com/tags/unity
* URL : https://qiita.com/

# イベント・カンファレンス
### Unity SYNC
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/ed8528d1-7170-e296-7e08-2333d6a17342.png)](https://events.unity3d.jp/sync/)
* Unity公式が主催の大規模カンファレンスです。
* URL : https://events.unity3d.jp/sync/

### Unity Meetup
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/a0df9f0a-a9ec-cc22-2685-75ddc234ccc9.png)](https://meetup.unity3d.jp/jp/)
* Unity公式が提供している、勉強会やイベントを開催・参加ができるコミュニティです。
* URL : https://meetup.unity3d.jp/jp/

### connpass
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/291107/806fd9b9-29c3-83e7-ab63-03d8b50d0a05.png)](https://connpass.com/)
* エンジニア向けのIT勉強会やイベントを開催・参加が出来るプラットフォームです。
* connpass経由でよく参加する勉強会・イベント(一部紹介)
    * CA.unity(サイバーエージェントさんが運営するUnityをテーマにした勉強会)
        * https://connpass.com/user/sge_unity/open/
    * もくもく会(プログラミングや勉強をする人が集まって、黙々と作業をする会)
* URL : https://connpass.com/

# おわりに
普段皆さんが利用しているサイト等はありましたでしょうか？

皆様がUnity学習のために利用しているサイトや参加したイベント・カンファレンスを、コメント欄で教えて頂けると助かります。
2023/10/10主にITとかセキュリティの記事

オープンソースエコシステムへのサプライチェーン攻撃が大幅に増加(10/8)
https://www.zaikei.co.jp/article/20231008/740923.html

FTXを攻撃したハッカーに利用された取引所、一時「メンテナンスモード」に移行(10/8)
https://news.yahoo.co.jp/articles/6ea0bf85141262205943e0e35d803e6d47303b98?source=rss

フィッシング悪用ブランドトップは引き続きAmazon、マイナポイント関連の報告も(10/8)
https://news.mynavi.jp/techplus/article/20231008-2786471/

Stars Arena、エクスプロイトによる資金流出後、全額補償と共にサービス再開を宣言(10/8)
https://gunosy.com/articles/eDc2e

お金をだまし取られるばかりではなく 自分の“口座”も特殊詐欺に使われたか　70代女性が被害(10/6)
https://news.infoseek.co.jp/article/bsn_763575/

AI検出ツール、フィッシングメールの4分の3近くを検証できず(10/8)
https://www.zaikei.co.jp/article/20231008/740921.html

AWS ParallelCluster Ubuntu 22.04 で Mountpoint for Amazon S3 を使って S3 バケットをマウントする方法(10/8)
https://dev.classmethod.jp/articles/how-to-use-mountpoint-for-amaozn-s3-with-aws-parallelcluster-ubuntu2204/

どうしてもYouTubeにアダルト動画を上げたいハッカー集団の手口(10/8)
https://www.gizmodo.jp/2023/10/youtube-porn.html

道路標識に「くたばれ！」のメッセージ表示　酷暑で働く労働者からの抗議か(10/8)
https://nordot.app/1083489097243902512

マイナ保険証は結局いつから？トラブルと混乱の続くマイナンバーカード。運転免許証とも一体化させるって本当？気になる今後は(10/8)
https://news.yahoo.co.jp/articles/3def9cc71216fc3305d43aea8201a59ce90a8a9e?source=rss

反撃能力運用含め日米で議論加速と木原防衛相(10/8)
http://economic.jp/?p=100493
せんせー、ダイヤモンドトランジスタってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ダイヤモンドトランジスタってなに？

# ダイヤモンドトランジスタとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ダイヤモンドトランジスタって何？

みんな、ダイヤモンドって知ってる？キラキラしていてとても硬い宝石のことだよ。実は、このダイヤモンドを使って、電気のスイッチのようなものを作ることができるんだ。それを「ダイヤモンドトランジスタ」と呼ぶんだよ。

## どういうこと？

トランジスタは、電気を通すか、通さないかをコントロールする小さなスイッチのようなもの。ダイヤモンドトランジスタは、このトランジスタの部分にダイヤモンドを使っているんだ。ダイヤモンドは、熱に強く、電気もよく通すので、特別な場面で使われることがあるんだよ。

## どうしてそれがすごいの？

ダイヤモンドは自然界で最も硬い材料として知られているよね。だから、ダイヤモンドを使ったトランジスタは、高温や厳しい環境でも壊れにくい。これにより、通常のトランジスタよりも頑丈で、長持ちすることが期待されているんだ。

## だから、ダイヤモンドトランジスタってなに？

ダイヤモンドトランジスタは、キラキラのダイヤモンドを使って作られた、特別な電気のスイッチ。とても強くて、高温でも大丈夫な特別な場面で使われることが多いんだ。

# まとめ

このように、ダイヤモンドトランジスタは、キラキラのダイヤモンドを使った特別な電気のスイッチ。普通のものよりもとても強くて、長持ちするので、たくさんの人たちがその能力を活用しようと研究しているんだよ。
せんせー、蛍光スペクトロメトリーってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、蛍光スペクトロメトリーってなに？

# 蛍光スペクトロメトリーとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 蛍光スペクトロメトリーって何？

みんな、夜に蛍を見たことある？蛍が光ってキラキラしているのを見たことがあるよね。あの蛍のように、ある物質が光を当てるとキラキラと光を放つ現象が「蛍光」と言われるものだよ。蛍光スペクトロメトリーは、この蛍光を使って物質を調べる技術なんだ。

## どういうこと？

蛍光スペクトロメトリーでは、試料に特定の光を当てると、それがキラキラと別の色の光を放つことがあるんだ。この放たれる光の色や強さを測定することで、試料に何が含まれているのか、どれくらい含まれているのかを調べることができるんだよ。

## どうしてそれがすごいの？

この技術を使うことで、とても小さな量の物質も正確に測定することができるんだ。例えば、食品の安全性を調べるときや、病気の原因を探るときなど、さまざまな場面で使われているんだよ。

## だから、蛍光スペクトロメトリーってなに？

蛍光スペクトロメトリーは、物質がキラキラと光を放つ蛍光を使って、その物質を詳しく調べるための特別な技術なんだ。

# まとめ

このように、蛍光スペクトロメトリーは、物質の中身を調べるための大切な技術。蛍のようにキラキラと光る現象を使って、私たちの身の回りのものが安全であるかどうかを調べるのに役立っているんだよ。
メモリエラー、そして現在のセルまたは前のセルでコードを実行中に、カーネルがクラッシュしました。

Non-OK-status: stream_executor::MultiPlatformManager::RegisterPlatform( std::move(cplatform)) status: INTERNAL: platform is already registered with name: "METAL" zsh: abort python

こんなアウトプットともにカーネルクラッシュ. 
なにやってもだめ. 

とりあえず, エラーを起こしたと思われるライブラリをアンインストールして、もう一度インストールし直し.
さらにhttps://stackoverflow.com/questions/75145240/internal-platform-is-already-registered-with-name-metal
この記事を参考に
`python -m pip uninstall tensorflow-metal`
してアンインストールとインストール繰り返した. 

なぜか知らないけどなおった.
動いたからよし!
せんせー、電磁場理論ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、電磁場理論ってなに？

# 電磁場理論とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 電磁場理論って何？

みんな、磁石で遊んだことがあるよね？磁石には、物を引き寄せる不思議な力がある。それと同じように、電気にも不思議な力があるんだ。電磁場理論は、この電気と磁石の不思議な力についてのお話だよ。

## どういうこと？

電気と磁石は、実はとても仲良しなんだ。電気が動くと、磁石の力が出たり、磁石を動かすと、電気ができたりするの。電磁場理論は、この２つの関係や、どうしてそのようなことが起こるのかを教えてくれるお話なんだよ。

## どうしてそれがすごいの？

この電磁場理論を知ることで、私たちはいろんな便利な道具や機械を作ることができるようになったんだ。電車やラジオ、コンピュータなど、私たちの生活に欠かせないものが、この電磁場理論のおかげで作られているんだよ。

## だから、電磁場理論ってなに？

電磁場理論は、電気と磁石の不思議な関係や力を説明する大切なお話。これを学ぶことで、私たちはたくさんの便利なものを作ったり、使ったりすることができるようになるんだよ。

# まとめ

このように、電磁場理論は、電気と磁石の不思議な関係や力を学ぶことで、たくさんの便利なものを作ったり、使ったりすることができる大切なお話なんだよ。
「技術書」の読書術で学んだ、本屋で技術書を探す5つのポイント

# はじめに
「「技術書」の読書術」という本を読んで、本屋で技術書を探す時のアプローチについてまとめました。
備忘録として残しますが、内容は非常に薄いです。

https://www.shoeisha.co.jp/book/detail/9784798171548

## 書籍の概要
1. 書籍は体系的、網羅的に学びを得ることができるので、たくさん読んだほうが良い
2. 効果的に身につけるためには課題がある
3. どうすれば良い体験を得られるか

本の探し方、読み方、成長への繋げ方が順序立てて説明されています。

# 本屋での技術書の探し方

## 自分が欲しい本を理解する
技術書は大きく次の３つに分類されます。自分が読みたいのはどれなのか？  
まずは理解することから始めましょう。

| 難しさ | 内容             |
| ------ | ---------------- |
|初心者向け   | 概要を紹介する本 |
|中級者向け   | 手順を解説する本 |
|上級者向け   | 理論を解説する本 |

## 特化型の本屋を見つける
本屋にも得意分野、苦手分野があります。
自分が興味のある分野に、特化している店舗を見つけることが重要です。

## 売れ筋の本を見る
売れ筋の本は評価が良いから売れ筋です。
まずは売れ筋の本を見てみましょう。
売れ筋の本は、主に「新刊」と「ロングセラー」に分けられます。
最後のページの発売日を見れば判別が可能で、発売日が新しくても、刷数が多いものはロングセラーとなります。

- 新刊は最新トレンドに関するものが多い
- ロングセラーは需要が尽きないもの

## 分からなければ店員に聞く
最近のトレンドや売れ筋は店員に聞くのが一番です。
技術面のことは聞いてはダメですが、ジャンルで相談して頼ってみるのも手段の一つです。
何度も通って、関連する本のおすすめを聞きていくことで店員に覚えてもらうことができ、新刊やトレンドの情報を仕入れることができるようになるかもしれません。

## 自分の実力に見合った本を見極める
実力に見合った書籍でなければ、読んでも得られるものは少ないです。
冒頭に書いてある「はじめに」や「まえがき」を見ることで、書籍の概要やターゲット層を確認することができます。
自分の欲しい本が定まっていれば、ここで判断ができるはずです。

# さいごに
この内容は書籍の1割程度の内容です。
書籍を見つけることに関してだけでも、他にも様々なアプローチが紹介されています。