OmniAICreator/Qiita-1.07M huggingface dataset:
CoinBackの使い方

## CoinBackとは？
### サービス概要
CoinBackは、仮想通貨取引における手数料の一部をキャッシュバックするサービスです。

取引を行う際に発生する手数料の一部がユーザーに還元され、取引コストを削減することができます。

このサービスは、取引所に対応しており、ユーザーは取引を行うだけでキャッシュバックを受けることができます。

https://coinback-crypto.com/

#### メリット

トレーディング手数料のキャッシュバック: CoinBackを利用することで、取引手数料の一部がキャッシュバックされます。これにより、取引コストを削減し、利益を最大化することができます。

対応する取引所やプラットフォーム: CoinBackは複数の主要な取引所に対応しています。これにより、ユーザーは自分が利用している取引所で簡単にキャッシュバックを受け取ることができます。

## CoinBackの登録方法
### アカウント作成

CoinBackの公式ウェブサイトにアクセスし、サインアップページに移動します。

必要な情報（メールアドレス、パスワードなど）を入力し、アカウントを作成します。

登録完了後、確認メールが送信されますので、メール内のリンクをクリックしてアカウントを有効化します。

##  CoinBackの使い方
### ウォレットの設定

CoinBack対応ウォレットを選びます。公式サイトで推奨されるウォレットを確認してください。
ウォレットを設定し、CoinBackアカウントと連携させます。具体的な連携手順はウォレットごとに異なるため、ガイドを参照してください。
### 取引のキャッシュバック方法

CoinBackに対応する取引所で通常通り取引を行います。

取引が完了すると、CoinBackアカウントにキャッシュバックが自動的に反映されます。

CoinBackアカウントからウォレットにキャッシュバックを引き出すことができます。

## CoinBackのキャッシュバックを最大化する方法
### 取引所の選択

最高のキャッシュバック率を提供する取引所を選びましょう。

公式サイトで最新のキャッシュバック率を確認できます。

### 取引頻度と量

効率的な取引戦略を立てることで、キャッシュバックの受け取り額を最大化できます。

大量かつ頻繁な取引が効果的です。
### プロモーションとキャンペーン

CoinBackは定期的にプロモーションやキャンペーンを実施しています。

これらに参加することで、追加のキャッシュバックや特典を受け取ることができます。
## よくある質問 (FAQ)
CoinBackに関する一般的な質問

### CoinBackの利用は無料ですか？
はい、CoinBackの利用自体は無料です。

ただし、取引所の手数料は通常通り発生します。

### キャッシュバックが反映されない場合はどうすればよいですか？
まずは取引所の取引履歴とCoinBackのアカウント履歴を確認し、取引が正常に記録されているか確認してください。

それでも問題が解決しない場合は、サポートチームに問い合わせてください。

## まとめ
CoinBackは、海外仮想通貨取引における手数料の一部をキャッシュバックすることで、取引コストを削減し、利益を最大化するための優れたサービスです。

CoinBackをまだ利用していない方は、今すぐアカウントを作成し、取引手数料のキャッシュバックを開始しましょう。

詳細な使い方や最新情報については、公式サイトをチェックしてください。
Next.jsで各種の生成AIを利用して特定のQiita Orgの人気記事ランキングページを作ってみた

:::note info
※Next.jsとQiita APIについては他記事でたくさん説明があるため、この記事では説明しません。
:::

# TL;DR
今回は、Next.jsを使ってランキングサイトを開発した経験をシェアしたいと思います。
Qiita APIを利用して記事のランキングを表示するサイトを作成しました。現時点での完成品が👇こちらです。

https://qiita-api-nextjs.vercel.app/ranking


# ⛳ これをやった目的とゴール
Next.jsの基本的な使い方を学んだ方がQiita APIを利用してデータを取得し、Webページに表示する方法を学ぶことです。
最新の人気記事をリアルタイムで表示するランキングページを作成することを目指しました。

# 🔧 必要なツールとライブラリ
- Node.js
- Next.js
- axios（APIリクエスト用）

# 💻 プロジェクトのセットアップ
参考資料にあるとおり、[yoshiishunichi/qiita-api-nextjs](https://github.com/yoshiishunichi/qiita-api-nextjs) のリポジトリのソースを参考にしました。
なので、git pullして `yarn install`、`yarn dev` することで準備しました。

## 開発したリポジトリ
- [TakaraShinya/qiita-api-nextjs](https://github.com/TakaraShinya/qiita-api-nextjs)

# 📝 実装方法
`pages/ranking.tsx` ファイルを作成してAPIからデータを取得する部分を実装しますが、
基本的には生成AIのツールを活用して実装を進める形で実装しました。

# 🤖 実際に利用した生成AIツール
- [Azure OpenAI Service – 高度な言語モデル | Microsoft Azure](https://azure.microsoft.com/ja-jp/products/ai-services/openai-service)
    - このサービスを利用して社内で開発、構築されたボットを利用
- [Create - free-to-use AI app builder](https://www.create.xyz/)
    - 作りたいUIの画像をアップロードしたり、テキストで指示を与えることで画面を生成し、生成されたCodeも提供してくれます
- [GitHub Copilot · Your AI pair programmer](https://github.com/features/copilot)
    - バグ修正やコード説明してもらうときに利用しました。テストコードとかも作ればよかったなー 🤔

# 💦 ハマったところや困ったところ
### 生成AIで作られたコードもやはり完璧なものではなく、ところどころ修正が必要になり、Github Copilotさんに頼りました💦
大まかにはChatGPTやその他の生成AIでコードを書き、細かい修正やステップをふんでのブラッシュアップはGithub Copilotさんが良かったかなという印象🤔

### 簡易なランキングUIなら生成されますが、デザインがだめで何度も「かっこいいランキングサイト」とか「かわいいランキングサイト」などでググった💦
ランキングサイトって意外とかっこよかったり、動きがあって楽しくなるようなものないんですね💦
つまんないただの一覧で表現してるサイト多かった印象💦（良いサイト知ってたら教えて下さい🙏）

# 🤔 参考資料
- [yoshiishunichi/qiita-api-nextjs](https://github.com/yoshiishunichi/qiita-api-nextjs)
    - Forkさせていただいて中身を参考にしました。ありがとうございます🙇‍♀
Excelの名前定義の仕様がいつの間にか変わってる

# 本来の用途
セル範囲に対して名前を定義し、他のセル中の式で名前で指定出来るようにするのが、名前定義の従来の用途でした。

# 現在の仕様
名前に対して定義できるものが、「セル範囲」ではなく、「参照範囲」という言い方になっていて、最初に`=` が付けられるようになっています。

# 新しい使い方
## 定数
「参照範囲」の欄に、`=3.14`などと定数式を書くと、定数が定義できます。

## 関数モドキ
「参照範囲」の欄に、`=A1*2`などと数式を書くと、関数モドキが出来ます。
この数式中の相対参照形式のセルアドレスは、その数式入力時のカーソル位置からの相対位置として内部的には記憶されるようです。
そのため、その定義した名前を数式中で利用するセルから相対的な位置関係にあるセルが参照されます。

例えば、セルB1が選択されている状態で、　`Tonarino2bai` という名前で、「参照範囲」の欄に`=A1*2`と書いて定義すると、数式中では隣のセルの値の2倍に置き換わる関数モドキになります。
Angular カスタムバリデーションの実装方法

まずはコード例。
以下例ではわざわざカスタムする必要のない基本的なチェックを行なっていますが、これを元に独自のバリデーションを実装できます。

```typescript
customValidator(): ValidatorFn {
    return (control: FormControl): {[key: string]: any} => {
      let val: number = control.value;

      if(!val) {
        // 必須
        return {"commonValidator": true};
      }

      if(/\D/.test(val.toString())) {
        // 数値のみ
        return {"commonValidator": true};
      } else if (val < 0) {
        // 0以上
        return {"commonValidator": true};
      }

      return null;
    }
};
```

Angularのリアクティブフォームに適用されるカスタムバリデーション関数 `customValidator` の説明です。

### カスタムバリデーション関数

`customValidator` は `ValidatorFn` 型の関数を返します。この関数は、`FormControl` オブジェクトを受け取り、バリデーション結果を表すオブジェクトまたは `null` を返します。バリデーションのロジックは以下の通りです：

- **必須チェック**:
  - 値が `null`、`undefined`、または空文字列の場合、エラーを返します。
```typescript
if(!val) {
  // 必須
  return {"commonValidator": true};
}
```

- **数値チェック**:
  - 値が数値以外の文字を含む場合、エラーを返します。
```typescript
if(/\D/.test(val.toString())) {
  // 数値のみ
  return {"commonValidator": true};
}
```

- **非負数チェック**:
  - 値が0未満の場合、エラーを返します。
```typescript
if(val < 0) {
  // 0以上
  return {"commonValidator": true};
}
```

バリデーションが失敗すると、エラーオブジェクト `{ "commonValidator": true }` を返し、フォームコントロールは無効な状態になります。バリデーションが成功すると、`null` を返し、フォームコントロールは有効な状態になります。

#### 使用例

このバリデータは、以下のようにフォームコントロールに適用することができます：

```typescript
this.form = new FormGroup({
  someNumber: new FormControl('', [ThresholdSettingComponent.commonValidator()])
});
```

この設定により、`someNumber` フィールドに対して、上記のバリデーションルールが適用されます。
reactでinput type='range'がちらつくときの対処法

# 結論：CSSを使う
100段階にしたスライダーを10個20個同画面で表示するとき
それだけならまだ特に問題はありません

つまみの上に、文字や画像を置いたとき。スライダーの値に応じて切り替えが必要だったとき。
useStateを利用するのもいいんですが、つまみが**えらいちらつきます**

この際CSSを使うということを考えてください
つまり、明示的に画像を置いて、それの切り替えをネストなしのif文や===で判定してしまうなど簡単な計算でオンオフを切り替えるのです


## 他対処法として
- 遅延
- 計算量削減
- 親から子へ渡す情報を整理する

ということがあります
が、根本的な解決にはなりません
ちらつきの原因は根本的な設計ミスかもしれません。
頑張ってuseEffectやuseStateを追加しても解決はなかなか厳しいです

自分は他の部分の設計を読み込む必要があるのかもしれないと調べてかなり時間をロスしてしまったので
この記事がピンポイントに誰かの助けになることを祈っております
2週間で合格する！AWS認定クラウドプラクティショナーの試験対策

## 報告

先日AWS認定クラウドプラクティショナーの受験を行い無事合格しました！
試験対策は2週間ほど、毎日2時間ずつの、だいたい30時間くらいで合格できましたので、合格のために行った試験対策について共有させていただきます！

## わしのステータス
文系大学卒
エンジニア歴: サーバーサイド4年
AWS経験: 業務で本当に軽く触るくらい

## 勉強方法
自分は下記の3つを行いました。
### AWS認定資格試験テキスト　AWS認定 クラウドプラクティショナー　改訂第3版 (ＡＷＳ認定資格試験テキスト)
https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3[…]cid=dbb67c83bc76327db6993fb05dea0b92&th=1&psc=1&gad_source=1
もうとにかくまずはこれを読むことです。
試験に出てくる範囲の全体像を体系的に学べるので、細かいところは読み流しがら一周読んでみると良いと思います！

### AWSを実際に軽く触る。
AWSのサービスを使ったことない方は自分で一度画面を操作してみると理解がしやすくなります！
AWSのハンズオン資料があるので、これにそって一通りポチポチしてみるのがおすすめです。
https://aws.amazon.com/jp/events/aws-event-resource/hands-on/
ゲームベースで学習ができる「AWS Cloud Quest」も日本語対応したので、時間がある方は触ってみても良いかもです！
https://aws.amazon.com/jp/blogs/news/aws-cloud-quest-jp-is-now-available/
自分も触ってみたのですが、途中に挟まる会話や移動とかの部分がもっさりしてて、テンポ感悪くて途中で挫折しました。
でも自分で環境を用意する必要がなく、料金やアカウント管理を気にしなくていい点はとても良いですね。


### 問題集をとにかく解く
一通り知識をインプットしたら、後は問題に慣れていくだけです！
自分はこちらのUdemyの問題集をとにかく繰り返し解いていました。
（セール期間に買わないと損するので、タイミングは気をつけて...）
https://www.udemy.com/course/aws-4260/
問題数が多いのと、解説も丁寧に書いてあるので、間違いだった選択肢の解説も合わせて読んでおくと良いと思います！
全部の問題8割以上正解できるようになったら忘れないうちにすぐに受けてしまいましょう！！
## まとめ
以上が自分が試験対策に行った勉強方法です！
ぜひ皆様も気軽にトライしてみてください！！！
Elmich Dr.Sleep: Chuẩn Châu Âu - Chuyên gia của giấc ngủ

Elmich Dr.Sleep mang đến cho bạn giấc ngủ chuẩn Châu Âu với nệm, chăn, ga (drap) chất lượng cao, giúp tái tạo năng lượng và nâng cao sức khỏe. Sản phẩm của Elmich Dr.Sleep được sản xuất tại Châu Âu và đáp ứng các tiêu chuẩn khắt khe của khu vực này, mang đến cho bạn trải nghiệm giấc ngủ hoàn toàn khác biệt. Chúng tôi cam kết mang đến dịch vụ chăm sóc khách hàng chuyên nghiệp, tận tâm với chế độ bảo hành lâu dài.

Website: https://elmichsleep.vn 
Địa chỉ: Tầng 17 tòa nhà 319 Bộ Quốc Phòng, 63 Lê Văn Lương, Cầu Giấy, Hà Nội
Hotline: 1900 6369 25

#elmichdrsleep #nem #chuanchauau #chuyengiacuagiacngu #nemfoam #nemdatang #nemyte #gagiuong #drapgiuong

https://www.facebook.com/ElmichDrSleepVN/
https://www.youtube.com/@ElmichDrSleep
https://x.com/ElmichDrSleep
https://www.pinterest.com/elmichdrsleep/ 
https://soundcloud.com/elmichdrsleep
https://g.co/kgs/JR4sRNr 
https://sites.google.com/view/elmichdrsleep
PDing、これまでにないインフルエンサーの新しい収益モデルとなるか？

インフルエンサーがファンと交流しながら収益を上げることができるAPPが登場

![japan image.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2784576/dad4270a-847c-e938-197e-597a27273476.jpeg)

世界中のクリエイター（インフルエンサー）とファンが直接交流できる革新的なアプリ、PDingが登場しました。PDingが今回新たにリリースしたAPPは、クリエイターとファンの間でテキスト、音声/ビデオ通話を通じてより親密な交流を可能にし、クリエイターにこれまでにない新しい収益モデルを提供します。

従来、芸能人や有名アイドルが行っていたファンミーティングの概念を、有名セレブやインフルエンサーも自分たちのファンとのミーティングを通じて収益を上げることができるようにAPPに導入してリリースしたのです。

有名インフルエンサーは簡単な認証手続きを経てアプリ内で自分だけのチャンネルを作成でき、自分のSNSにリンクを貼り付け、テキストや通話が来たときに応答するだけで、大きな労力をかけずに自宅で快適に高い収益を上げることができます。

PDingのCEOは、「現在までSNS有名インフルエンサーを対象にベータテストを行った結果、フォロワー数10万人の基準で月8,000ドルの収益を上げていることが確認されました。フォロワー数がさらに多いインフルエンサーであれば、想像を超える高収益を期待しています。」と述べました。

PDingは現在ダウンロード可能で、より詳しい情報は公式ウェブサイトで確認できます。


<メディア連絡先>
会社 : PDing LLC
担当者 : Darshan
サイト : https://www.pd-ing.com
【coursera勉強ノート】時系列分析_自己共分散

コースURL
https://www.coursera.org/learn/practical-time-series-analysis/home/week/1

## 1. ランダム変数
定義: 標本空間から実数への写像。
例: 実験結果のすべての可能な結果を数値に対応させるもの。
## 2. 測度論
簡単な説明: ランダム変数は測度可能な関数。
機械的な見方: ランダム変数はランダムな数値を生成する機械。
## 3. 離散型と連続型のランダム変数
離散型: カウント可能な数の結果。
例: サイコロの目（1, 2, 3, 4, 5, 6）
連続型: 任意の範囲内の値を取る。
例: 温度（10度から60度までの任意の値）
## 4. 共分散
定義: 二つのランダム変数の間の線形依存を測定する。
公式: Cov(X, Y) = E[(X - E[X])(Y - E[Y])]
対称性: Cov(X, Y) = Cov(Y, X)
## 5. 確率過程と時系列
確率過程: 時間とともに変動するランダム変数の列。
例: {X1, X2, X3, ...}のようなランダム変数のシーケンス
決定論的過程との違い: 確率過程はランダム性を持ち、未来の状態が確定しない。
## 6. 時系列の定義
古い定義: 時間とともに収集されたデータセット。
新しい定義: 確率過程の実現としてのデータセット。
例: 時系列 {30, 29, 57, ...} は確率過程 {X1, X2, X3, ...} の実現。
## 7. 自己共分散関数
定義: 確率過程内の異なる時間点における要素の共分散。
公式: γ(s, t) = Cov(Xt, Xs)
定常時系列の仮定: 時系列の一部の特性が他の部分と同じであること。
## 8. 自己共分散関数の具体例
自己共分散係数 γk「γ（ガンマ）」: 時間差 k に依存する共分散。
近似方法: 実際のデータから推定するためにCkを使用。
![スクリーンショット 2024-07-11 170336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3804860/180150da-97a0-d722-3a6e-1f95ba395b0d.png)


## まとめ
主な用途: 自己共分散関数は主に確率過程と時系列データの分析に使用されます。
時系列データ: 時系列データも確率過程の一種と見なせるため、自己共分散関数を適用できます。
確定的データ: 通常、自己共分散関数は使用されませんが、確率モデルに基づく分析の一環として使用されることがあります。


定常性
https://blog.since2020.jp/data_analysis/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6%9E%90%E3%81%A7%E3%82%88%E3%81%8F%E8%81%9E%E3%81%8F%E5%AE%9A%E5%B8%B8%E6%80%A7%E3%81%A8%E3%81%AF%EF%BC%9F%E6%A4%9C%E5%AE%9A%E6%96%B9%E6%B3%95%E3%82%84%E3%81%AA/
DateTime変換時に気をつけたいこと

# はじめに
今回は、最近日付変換実装時に詰まった事象を紹介していこうと思います。
### 本文
今回自分が詰まった内容としては`String`で帰ってきているAPIの返却物を`DateTime`に変換するときに、`z`が入っている場合にエラーになってしまうというものでした。
`DateTime`の`z`は協定世界時を表しています。
ただ`z`をFormatterに渡すだけではエラーになってしまうわけです。
そこで解決策は以下のようになります
```kotlin
// 協定世界時の中でもどこなのかを第二引数として指定してあげないといけません
DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ROOT)
```
### 最後に
z自体は漏れてないはずなのになんでだ??となって多少時間を取られたので備忘録として残しておきます
どなたかのお役に立てれば幸いです
Graylogの「Extractors」とは何？

# Extractors
簡単に言うと受信したときの項目分けをする機能の事。
あたらしいフィールドを作成することができる。

たとえば、messageに以下のようにでているとき、
| フィールド | 値 |
|:-:|:-:|
| message    | date=2024-07-11 time=16:29:31 devname="FortiGate-60E" **type="event"** subtype="system" **level="notice"** |

「type」や「level」をフィールドに追加したいときがある。

## ■手順（「Grok pattern」という正規表現で作成する）
- 「message」の項目を選択して▼から「create Extractors」を選択。
- 色々やってみたが、「Grok pattern」が便利そう
- 「Pattern」のみ以下に編集すればとりあえず動く。
　`level=\"%{WORD:message_level}\"`
  「**Try against example**」を押せばチェックできる。
　基本的には正規表現のルール
```
- 「level=」は単純に文字列（「type=」にすれば上記の例の「event」が取得できる）
- 「\」は次の「"」は正規表現じゃないよという意味（エスケープ）
- 「{WORD}」だけでも指定できる。「{WORD}」はもとから用意されているものらしく他にも{IP}とかあるらしい。（Grokといわれるものの機能だと思われる。）
- 「{Grokの指定名:好きな名前}」のように「:」を後につけることで、フィールドの名前を設定できる。（尚、そうしないと自動で「WORD」というフィールド名になる。）
　⇒「message_level」は自分で好きな名前にすることができる。
- 他の部分は気になったら調べればいい。今回はそのまま「create Extractors」を押下。
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3116042/9c1bd3ff-9fef-7f93-c009-5bf91d93136f.png)

尚、既に受信しているログについてはタグをつけることはできない。
※他に方法があるかもしれないが知らない。
iroriさんのlazyk(v1.0.0)の動作を読んで図示してみました

https://github.com/irori/lazyk

# 目的
メモリリークが生じてるバグを直してみたくて動作の理解をすることから始めてみました

どのあたりでメモリのどれを`free`したらいいのか秒でわかりそうになかったのでコードリーディングになりました

# irori/lazykとは
プログラミング言語Lazy KのC言語実装

たった一つのlazyk.cファイルに動作のすべてを実装してる

なんか色々と読んでみたけどLispマシンのようなことをやってると思った

セルをペアとして兼用したりとかやってるんだなと

ガベージコレクションもマジで自前実装

# コードリーディングした過程や途中の手書きのメモ

## 最初に定義されてる構造体とかグローバル変数とかのメモ

![17206840412613963696451513446231.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/59b06c9c-fbeb-557e-1050-115f8b00c10a.jpeg)

## ストレージの関数とか動作の図示

![17206840714587900974258951585042.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/3b5fe0a3-77d7-3771-9e61-21557c26ff4d.jpeg)

![17206841324484459231909843492587.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/3d26aee1-f847-b8a9-ca1d-20068eadebb2.jpeg)

![17206841973561255313037079523157.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/e6bdb3ec-e571-ed4d-a90b-b730ae7daf2c.jpeg)

## リデュースマシンの動作の図示
![17206843834348308255370979899595.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/a77172b2-b4b9-c708-2b34-7bd332f4a567.jpeg)

![17206844102593740699572484036271.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/5544c3c8-c818-cd97-6f2f-735d7f004502.jpeg)

![17206844325675563577749630967667.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/6cc7ba24-cdf6-4891-2f92-31b54da2c4f8.jpeg)

## リデュースマシンとかの動作を理解した後に記述したガベージコレクタの動作
![17206845246801678354977596286908.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/ba20c129-7593-cd7f-cd2d-914743ca70d8.jpeg)

![17206845469515705026229055826395.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/1e94bd8b-e29c-677a-e6a3-2b48613df129.jpeg)

## プログラム終了時にメモリをする場所を記憶するのはどこがいいのかを述べてるやつ
![17206846414392281161883310618065.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082964/5a468458-a19b-7fe3-7281-3d901c1ce0ba.jpeg)

# まとめ　手書きでメモった結果わかりやすくなったかも
ってことでメモった結果をもとにコードに反映しようと思う
Qiitaにあったら嬉しい機能

# はじめに
アドベントカレンダーを通じてQiitaに記事を投稿するようになってから、あったら良いなと思う機能をこの辺りでまとめてみようと思います。~~リクエストすれば良いじゃない~~


# 過去に投稿した記事に対する検索機能

投稿数が増えていくと、記事を探すのにページ移動しないといけないので少し手間だったりします。
それか、ピックアップ記事の数を5~10くらいに増やしてもらえるだけでも…！

# イベント時の投稿数ランキング機能

アドベントカレンダーにおいて毎日コツコツ投稿している人って少ないんじゃないでしょうか。
参加者全体の投稿に対する温度感や自分の現在地を観測可能にすることで、毎日投稿を促す働きかけが期待できるのではないでしょうか。


# おわりに
過去に投稿した記事を探すの結構辛かったりします。
[Python] Python（パイソン）とは？


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836016/80adefb3-3896-9a5f-f0da-097e305c9c2a.png)

Python（パイソン）は、シンプルで読みやすい文法を持つ高水準のプログラミング言語です。以下、Pythonについて詳しく説明します：

1. **シンプルで読みやすい文法**: Pythonはコードを見やすくするためにインデント（字下げ）を強制し、英文のように自然に読める文法を提供します。

2. **動的型付け**: Pythonは動的型付けをサポートしており、変数を宣言する際に型を明示的に指定する必要がありません。これにより、開発者はコードをより柔軟に書くことができます。

3. **オブジェクト指向**: Pythonはオブジェクト指向プログラミングをサポートしており、クラスとオブジェクトを使用してデータをカプセル化し、コードを構造化することができます。

4. **豊富な標準ライブラリ**: Pythonは非常に豊富な標準ライブラリを提供しており、ファイルの入出力、ネットワーキング、データベース、GUIなど、さまざまな作業を簡単に行うことができます。

5. **プラットフォーム非依存**: Pythonは複数のプラットフォーム（オペレーティングシステム）で動作し、ほとんどのシステムで互換性の問題なく実行されます。

6. **迅速な開発とプロトタイピング**: 簡潔な文法と多彩なライブラリのため、迅速に開発することができ、プロトタイプを素早く実装することが可能です。

7. **多岐にわたる用途**: データ分析、Web開発、自動化スクリプト、人工知能や機械学習など、さまざまな分野で利用されています。

8. **コミュニティとエコシステム**: Pythonは活発なコミュニティと多彩なパッケージエコシステムを持ち、新機能の追加や問題の解決が容易です。

Pythonはこれらの特性により、初心者から専門家まで幅広いユーザーに人気のあるプログラミング言語です。
fetch APIを使用したPOSTリクエスト

## はじめに

AJAXは、JavaScriptを使用して非同期的にサーバーと通信する技術の総称です。その代表的な技術であるfetch APIを使用したPOSTリクエストの例を2つ紹介し、それぞれの特徴についてまとめます。

## 基本的なfetch APIを使用したPOSTリクエスト

```javascript
<script>
    function sendRequest() {
        const n = document.getElementById('inputN').value;
        fetch('calculate', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ n: parseInt(n) })
        })
        .then(response => {
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            return response.json();
        })
        .then(data => {
            document.getElementById('result').innerText = `Lucas Number L${n} = ${data.result}`;
            document.getElementById('time').innerText = `Time: ${(data.process_time / 1e9).toFixed(3)} sec`;
        })
        .catch(error => {
            console.error('There was a problem with the fetch operation:', error);
            document.getElementById('result').innerText = 'Error: ' + error.message;
        });
    }
</script>
```

## async/awaitを使用したfetch APIによるPOSTリクエスト

```javascript
<script>
    async function checkNumber() {
        try {
            const number = document.getElementById("number").value;
            const response = await fetch("/check", {
                method: "POST",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify({ value: parseInt(number) })
            });

            if (!response.ok) {
                throw new Error('Network response was not ok');
            }

            const result = await response.json();
            document.getElementById("result").innerText = `Lucas Number: ${result.result}, Calculation Time: ${result.duration.toFixed(6)} seconds`;
        } catch (error) {
            console.error('There was a problem with the fetch operation:', error);
            document.getElementById("result").innerText = 'Error: ' + error.message;
        }
    }
</script>
```

## 両者の違いについて

1. **同期・非同期処理の書き方**
    - **基本的なfetch API**: `fetch`の後に`.then`を使ってレスポンスを処理しています（Promiseチェーン）
    - **async/await**: `async`/`await`構文を使って非同期処理をよりシンプルに書いています

2. **APIエンドポイント**
    - **基本的なfetch API**: `'calculate'`エンドポイントにPOSTリクエストを送信しています
    - **async/await**: `'/check'`エンドポイントにPOSTリクエストを送信しています

3. **エラーハンドリング**
    - **基本的なfetch API**: `.then()`メソッド内でエラーチェックを行い、`.catch()`メソッドでエラーをキャッチします
    - **async/await**: `try`/`catch`構文を使用してエラーハンドリングを行います。エラーが発生した場合も、同期処理と同様に扱えます

## async/awaitの汎用性について

1. **可読性の向上**: async/awaitは非同期処理を同期処理のように書くことができ、コードの可読性が大幅に向上します。特に複数の非同期処理を連続して行う場合、ネストが深くならず、メンテナンスが容易になります

2. **エラーハンドリングの簡潔さ**: try/catchブロックを使用することで、従来のPromiseチェーンよりもエラーハンドリングがシンプルになります。非同期処理中に発生した例外も同期処理と同様に扱えるため、エラーハンドリングが統一的に行えます

3. **同期/非同期の混在に強い**: async/awaitは、同期処理と非同期処理を直感的に混在させることができるため、複雑な処理を簡潔に記述できます

4. **デバッグのしやすさ**: 非同期処理が直線的に記述されるため、ステップ実行やブレークポイントの設定が容易で、デバッグ作業が効率的に行えます

## 終わりに

このように、fetch APIを使ったPOSTリクエストには複数の書き方があります。特にasync/awaitは汎用性が高く、コードの可読性とメンテナンス性を向上させるため、推奨される方法です。上記のスクリプトを参考に、それぞれの要件に応じて適切な方法を選択してください。
DatabricksとLangGraphで学ぶシリーズまとめ

増えてきたのでまとめました。
(一部の内容は他のまとめと重複しています)

# DatabricksとLangGraphで学ぶAgenticアプローチ

- [DatabricksとLangGraphで学ぶAgenticアプローチ: サブグラフ](https://qiita.com/isanakamishiro2/items/eaf375ac24dced6f3af4)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: ノードの並列実行](https://qiita.com/isanakamishiro2/items/252d05d1b37ae1fec2cd)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: 並行実行のためのMap-Reduceブランチ](https://qiita.com/isanakamishiro2/items/1d76d4a141ac524b1510)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: 永続性の追加](https://qiita.com/isanakamishiro2/items/115dcb434e37cd004629)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: 会話履歴の管理](https://qiita.com/isanakamishiro2/items/b24cf0e199be652399f9)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: ブレークポイントの追加](https://qiita.com/isanakamishiro2/items/7258cc79e047b6f92838)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: グラフ状態の変更](https://qiita.com/isanakamishiro2/items/193e8381f2763e43b61f)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: ユーザ入力の待機](https://qiita.com/isanakamishiro2/items/8885d94cf8129e0517cd)
- [DatabricksとLangGraphで学ぶAgenticアプローチ: グラフ状態履歴の操作](https://qiita.com/isanakamishiro2/items/61b0a4ee7cd1f081703c)

# DatabricksとLangGraphで学ぶAgent&RAG

- [langchainとDatabricksで(私が)学ぶAgent : LangGraphでAgent処理を組む](https://qiita.com/isanakamishiro2/items/d14235bf6fe00ae22831)
- [langchainとDatabricksで(私が)学ぶAgent : LangGraphでHuman in the loop](https://qiita.com/isanakamishiro2/items/a847f691892f85fc9bcb)
- [langchainとDatabricksで(私が)学ぶRAG : Self-Reflective RAG その2 CRAG実践編](https://qiita.com/isanakamishiro2/items/552372c730f47f1ec53c)
- [langchainとDatabricksで(私が)学ぶRAG : Self-Reflective RAG その3 Self-RAG実践編](https://qiita.com/isanakamishiro2/items/d1c9d6bcefc63cc1a4b6)
- [langchainとDatabricksで(私が)学ぶAgent : LangGraphでベーシックなReflection](https://qiita.com/isanakamishiro2/items/574c3d90ece7581c4030)
- [langchainとDatabricksで(私が)学ぶRAG : LangGraphとローカルLLMによるAgentを使ったRAG](https://qiita.com/isanakamishiro2/items/33c1a54a62ff9d6edcde)
- [langchainとDatabricksで(私が)学ぶRAG : Adaptive RAG 前編](https://qiita.com/isanakamishiro2/items/a72c331a1297285d65f5)
- [langchainとDatabricksで(私が)学ぶRAG : Adaptive RAG 後編](https://qiita.com/isanakamishiro2/items/6d8aeb78726afdd94f24)

# その他

- [LangGraphでトークンストリーミング出力 on Databricks](https://qiita.com/isanakamishiro2/items/695fdad2bd3f7a24f0de)
- [LangGraphの処理をMLflow Tracingで記録する](https://qiita.com/isanakamishiro2/items/39fb6822f2c991eefc41)
- [実験記録: LangGraphのグラフはmlflow.langchainフレーバーで保管できるのか？](https://qiita.com/isanakamishiro2/items/4903bba070411e7f85d5)
- [LangGraphでSelf-Discover on Databricks](https://qiita.com/isanakamishiro2/items/438819123e4d37114bc7)
- [LangGraphのグラフビジュアライゼーションを試す](https://qiita.com/isanakamishiro2/items/1dfbc4e4c9dffdaa4c2d)
AndroidのWi-Fiテザリング環境でネットワーク内のデバイスを全て表示したい

AndroidのWi-Fiテザリング環境では, 特定のデバイスに割り当てられるプライベートipアドレスを固定することは(おそらく)できない. そのため,Wi-Fi経由でRaspberry Pi等のデバイスにSSH接続したいときはipアドレスを突き止める必要がある.
# 準備
Windows Subsystem for Linuxを使用できるようにして,「fping」をインストールしておく.
~~~
sudo apt install fping -y
~~~
# スクリプト
~~~showNetworkDevices.bat
@echo off
ipconfig | findstr 192.168
SET adress=
SET /P adress="入力してください:"
wsl fping -s -g 192.168.%adress%.0 192.168.%adress%.255> nul 2>&1
arp -a | findstr 192.168
pause
~~~
任意のフォルダに.batの拡張子をつけて保存して実行する.
# 仕組み/動作

1. ipconfigコマンドを実行し,実行結果からローカルipとして一般的に使用されている「192.168」を含む行を抜き出す[^1].これによってipアドレスの3バイト目を知ることができる
1. ipアドレスの3バイト目を入力させ,変数に保存
1. wsl上でfpingを実行し,ネットワーク内のデバイスと通信実績を作っておく[^2]
1. arpコマンドを使用してネットワーク内のデバイスを一覧表示させ,「192.168」を含む行のみ表示させる
[^1]:一般的な無線LANルーターでは,ローカルipの3バイト目は固定されている(192.168.**1**.1など).しかし,AndroidのWi-Fiテザリングでは固定されておらずランダム?に変動するためこの手順が必要.
[^2]:Windowsに搭載されたpingコマンドで多数回のpingを実行しようとすると時間がかかる(1件0.5秒程度で256件なので2分程度)ためfpingコマンドを使用した.
# 実行例
~~~
C:\hoge>showNetworkDevices.bat
   IPv4 Address. . . . . . . . . . . : 192.168.76.226
   Default Gateway . . . . . . . . . : 192.168.76.127
入力してください:76
Interface: 192.168.76.226 --- 0xa
  192.168.76.76         dc-a6-32-70-dc-4c     dynamic   
  192.168.76.127        ea-86-c5-31-38-f9     dynamic   
  192.168.76.255        ff-ff-ff-ff-ff-ff     static 
~~~


# 参考
https://learn.microsoft.com/ja-jp/windows/wsl/install


https://www.koushinclub.com/blog/2875.html
【告知】自分の部活についての新しい情報が入ったのでお知らせします。

# はじめに
お久しぶりです! 中学3年生のWardHamamatsu67です!! 今回は前々回の投稿で、自分の部活の実態について説明しましたが、最近、それに関する新しい情報が入ったので、皆様にお知らせしたいと思います。
前々回の投稿を見ていない方は先に見ることをお勧めします。

https://qiita.com/WardHamamatsu67/items/c27174c65fc5a7bc95d5


あと、前々回の投稿、20いいねを突破しました!! 皆さん本当にありがとうございます!!
# 新しい情報
前々回の投稿では、研究班の先生が考えたことだと説明しましたが、何と実は、他の先生が計画したことだと最近判明しました。さて、どんな先生だったのでしょうか?
# どんな先生?
その先生は、自分の部活の顧問ではあります。しかし、SSH指定校であるこの学校で行われる様々なSSH企画を担当しているので、<font color="red">**ほとんど**様子を見ていないのが現実です。</font>多分顧問の中では一番様子を見ていないと思われます。
# 理由
その先生は部活のミーティングで、「自分がやった」と言っていたのですが、その理由は、やはり「先生が足りない」というものでした。しかし、自分は、<font color="red">「ほとんど様子を見ていない先生が**勝手に**部活の未来を左右するようなことを起こすものではない」</font>と思います。
# 交渉の話
現在は、交渉中ですが、うまくいっていないままです。しかし、別の先生からの、<font color="green">**「部活から離れて、プログラミング部として活動する」**</font>という提案があることを知りました。正直、嬉しかったですが、その話は今のところ部全体ではそこまで盛り上がっていないのが現状です。もし、本当にこの計画が実行されたら、自分は**新・プログラミング部**に入ろうと思っています。
# おわりに
1か月ぶり以上だったので、もう自分のことを忘れているかもしれませんが、この投稿が良いと思ったら、いいねとフォローをしてくれると嬉しいです。
皆様のご協力、心よりお待ちしております!
[Python]f-string

# f-string

Pythonのf-string（フォーマット済み文字列リテラル）は、Python 3.6から導入された文字列フォーマットの方法です。f-stringを使用することで、文字列の中に変数や式を埋め込んで簡潔に文字列を構築することができます。以下では、f-stringの基本的な使い方や特徴について詳しく説明します。

### 基本的な使い方

f-stringは、文字列の先頭に `f` または `F` を付けた文字列リテラルです。以下のように、中括弧 `{}` 内に変数や式を埋め込むことができます。

```python
name = "Alice"
age = 30

message = f"My name is {name} and I am {age} years old."
print(message)
```

この例では、`name`と`age`という変数を `{}` 内に挿入して、その値を文字列に組み込んでいます。`f"..."` の形式を使うことで、変数の値を埋め込むことができます。

### 変数の埋め込み

f-stringでは、変数のほかにも式や関数の結果を埋め込むこともできます。

```python
radius = 5
area = f"The area of a circle with radius {radius} is {3.14 * radius ** 2}"
print(area)
```

この例では、数式 `3.14 * radius ** 2` の結果が f-string 内で計算されて、文字列に埋め込まれています。

### 書式指定

f-stringでは、変数や式を埋め込む際に、書式指定を行うことも可能です。例えば、小数点以下の桁数を制限したり、特定のフォーマットで数値を表示したりすることができます。

```python
pi = 3.141592653589793
formatted_pi = f"Value of pi: {pi:.2f}"
print(formatted_pi)
```

この例では、`:.`の後に小数点以下の桁数を指定しています。`{pi:.2f}`は、piの値を小数点以下2桁まで表示するようにフォーマットされます。

### 属性やメソッドの呼び出し

f-string内では、オブジェクトの属性やメソッドも直接呼び出すことができます。

```python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def greet(self):
        return f"Hello, my name is {self.name} and I am {self.age} years old."

alice = Person("Alice", 30)
message = f"{alice.greet()} Nice to meet you!"
print(message)
```

この例では、`alice.greet()`メソッドの結果を直接f-string内で使用しています。

### f-stringと他の文字列フォーマット方法の比較

f-stringは他の文字列フォーマット方法（`format()`メソッドや`%`演算子）に比べて以下の利点があります：

- **可読性と簡潔さ**：f-stringはシンプルで直感的な書き方であり、他のフォーマットよりも読みやすくメンテナンスしやすいです。
  
- **パフォーマンス**：f-stringは他の方法よりも高速で、処理速度が速いです。

- **動的な式の埋め込み**：f-stringでは式を直接埋め込むことができ、動的な値の計算や取得が簡単に行えます。

Pythonのf-stringは、文字列操作を簡単で効率的に行うための強力なツールであり、Pythonのバージョン3.6以降で利用可能です。
リアルタイムでJavaScriptで平仮名を全角カタカナへ変換

# やり方①：ボタン押下で変換

```ruby
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>フォーカスアウトとボタン押下時の全角カタカナ変換</title>
</head>
<body>
    <input type="text" id="inputField" placeholder="入力してください">
    <button onclick="convertToKatakana()">変換</button>

    <script>
        function toFullWidthKatakana(str) {
            return str.replace(/[\u3041-\u3096]/g, function(match) {
                // ひらがなを全角カタカナに変換
                return String.fromCharCode(match.charCodeAt(0) + 0x60);
            });
        }

        function convertToKatakana() {
            const inputField = document.getElementById('inputField');
            const inputValue = inputField.value;
            const convertedValue = toFullWidthKatakana(inputValue);
            inputField.value = convertedValue;
        }

    </script>
</body>
</html>
```

# やり方②：フォーカスアウト時に変換
補足：実は「ボタン押下」という動作をするときに「フォーカスアウト」も発火するので、ここにもしonclick設定なしのボタンを配置したら、押下時にonBlur発火で変換できる
```ruby
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>フォーカスアウト時の全角カタカナ変換</title>
</head>
<body>
    <input type="text" id="inputField" placeholder="入力してください">

    <script>
        function toFullWidthKatakana(str) {
            return str.replace(/[\u3041-\u3096]/g, function(match) {
                // ひらがなを全角カタカナに変換
                return String.fromCharCode(match.charCodeAt(0) + 0x60);
            });
        }

        function convertToKatakana() {
            const inputField = document.getElementById('inputField');
            const inputValue = inputField.value;
            const convertedValue = toFullWidthKatakana(inputValue);
            inputField.value = convertedValue;
        }

        document.getElementById('inputField').addEventListener('blur', convertToKatakana);

    </script>
</body>
</html>
```

# やり方③：入力しながら変換
```ruby:
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>リアルタイム全角カタカナ変換</title>
</head>
<body>
    <input type="text" id="inputField" placeholder="入力してください">

    <script>
        function toFullWidthKatakana(str) {
            return str.replace(/[\u3041-\u3096]/g, function(match) {
                // ひらがなを全角カタカナに変換
                return String.fromCharCode(match.charCodeAt(0) + 0x60);
            });
        }

        function convertInputToKatakana() {
            const inputField = document.getElementById('inputField');
            const inputValue = inputField.value;
            const convertedValue = toFullWidthKatakana(inputValue);
            inputField.value = convertedValue;
        }

        document.getElementById('inputField').addEventListener('input', convertInputToKatakana);
    </script>
</body>
</html>

```
# 参考サイト
https://qiita.com/spm84/items/4ea8c53ac3aafcd4d66c
C_TS422_2021 SAP Certified Application Associate SAP S/4HANA Production Planning and Manufacturing対策（61/100）

【61日目】
トピック 7：SAPS/4HANAにおける拡張計画（7/14）

≪問題61≫
アドバンスト計画（PP/DS）のロケーションマスタにマッピングされるSAPS/4HANAのマスタデータは以下のどれですか。
（３つ選択）
□品目
□仕入先
□プラント
□作業区
□得意先

≪解答≫
□品目
■仕入先
■プラント
□作業区
■得意先

≪解説≫
◆ PP/DSマスタデータオブジェクトは、SAPS/4HANAのマスタデータオブジェクトとは異なりますので、マスタデータの転送時には、関連するSAPS/4HANAマスタデータオブジェクトが、PP/DS内の対応する計画マスタデータオブジェクトにマッピングされます。
◆ 両者のマッピングの関係は以下の通りです。（左側がSAPS/4HANA、右側がPP/DS）
（1）プラント、得意先、仕入先⇒ロケーション
（2）品目⇒製品
（3）作業区/能力⇒リソース
（4）製造バージョン（作業手順、BOM）⇒生産データ構造
ITエンジニア・プログラマの職務経歴書は Github スペシャルレポジトリのREADMEに記録せよ。そして VsCodeでMarkdownをPDF変換するべし。

# 課題

職務経歴書はどこに保存して、どうやって更新すれば良いのか？

- PDFを更新するのはとにかく面倒なので、思いついた時にマメに更新しておきたい
- Webで手軽に更新したい
- ITエンジニアらしいサービスに記録したい
- Markdownで書いて簡単にPDFに変換したい

# 解決

Githubのレポジトリで自分のアカウント名のレポジトリを作ると、スペシャルレポジトリ扱いになって、自分のGithubプロフィールにもREADMEの内容が表示される

例: 

https://github.com/YumaInaura/YumaInaura の README.md の内容が
https://github.com/YumaInaura のプロフィールページに反映される

![image](https://github.com/YumaInaura/YumaInaura/assets/13635059/d04f9542-86f6-4eb8-bd1a-9c06d4f42e63)

# 更新

Webから内容を更新するのも簡単だ

もちろんMarkdownが使える

<img width="1507" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/cd3d47d4-cf49-4fef-942c-45976e5f3d95">

# MarkdownからPDF出力する

VsCodeで簡単にMarkdownをPDFにできる


### Markdown PDF 拡張をインストールする

<img width="620" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/7879d8cc-dccf-4aed-9466-c50759d86dbc">

### READMEを開きつつPDF変換する

![CleanShot 2024-07-11 at 16 21 50@2x](https://github.com/YumaInaura/YumaInaura/assets/13635059/5e76bf09-2511-4baa-bc7b-a553e88490aa)

### こんなPDFが生成される

`README.pdf` が生成される

見栄えはこんな感じ

ちなみにページ内のアンカーリンクも反映してくれていた

<img width="1272" alt="image" src="https://github.com/YumaInaura/YumaInaura/assets/13635059/91361041-a04a-4928-924a-3715eabf8c69">


画像も反映してくれていた
ちょっとおしゃれな職務経歴書が出来そうだ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/6c741927-ee50-4b60-948e-445f2e56983a.png)


# 参考

[How to Create a special repository in your GitHub profile?](https://github.com/Open-Source-GecB/Create-a-special-repository-in-your-GitHub-Profile)



# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
DynamoDBで部分一致検索をする

現在作成中の検索サービスで、DynamoDBをデータベースとして使用しています。

DynamoDBに関しては初学者ですが、デメリットがあるようなのですが部分一致にやり方について、デモを交えながら解説します。

## サンプルデータを作成する
AWSのドキュメントを参考に、DynamoDBにテーブルとデータを作成します。
今回はLinux上でAWS CLIを使いました。CLIの設定をしていない方は、マネジメントコンソールからテーブルの作成をお願いします。


https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-1.html
```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --table-class STANDARD
```

次に必要なデータを作成します。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/getting-started-step-2.html
```
aws dynamodb put-item \
    --table-name Music  \
    --item \
        '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "1"}}'

aws dynamodb put-item \
    --table-name Music  \
    --item \
        '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Howdy"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "2"}}'

aws dynamodb put-item \
    --table-name Music \
    --item \
        '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}, "Awards": {"N": "10"}}'
                            
aws dynamodb put-item \
    --table-name Music \
    --item \
        '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "PartiQL Rocks"}, "AlbumTitle": {"S": "Another Album Title"}, "Awards": {"N": "8"}}'
```

以上で、データの下準備は完了です。

## AWS CLIで部分一致のスキャンを実行する

以下のコマンドで、例えばAlbumTitleにwhatを含むItemを抽出することが出来ます。
--fiter-expressionの:AlbumTitleはプレースホルダーを使っています。この値は、--expression-attribute-valuesで定義しています。

```
aws dynamodb scan --table-name Music \
--filter-expression 'contains(AlbumTitle,:AlbumTitle)' \
--expression-attribute-values '{":AlbumTitle":{"S":"what"}}'
```
実行結果
```
{
    "Items": [
        {
            "AlbumTitle": {
                "S": "Somewhat Famous"
            },
            "Awards": {
                "N": "1"
            },
            "Artist": {
                "S": "No One You Know"
            },
            "SongTitle": {
                "S": "Call Me Today"
            }
        },
        {
            "AlbumTitle": {
                "S": "Somewhat Famous"
            },
            "Awards": {
                "N": "2"
            },
            "Artist": {
                "S": "No One You Know"
            },
            "SongTitle": {
                "S": "Howdy"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 4,
    "ConsumedCapacity": null
}
```

## マネジメントコンソール上で部分一致のスキャンを実行する
「項目を探索」で、Musicテーブルに対して、スキャンタブを選択します。
フィルター項目で、属性名にAlbumTitle、タイプに文字列、条件に次を含む、値にwhatを入力して、実行すると、下記画像のようにItemを抽出できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1851421/f8543268-408d-9bc3-4d9f-5f177984a948.png)

以上、DynamoDBで部分一致検索をする方法でした。
引き続き、DynamoDBの使いかたについて勉強していきます。
[MySQL]ダンダンダンプ取ろうぜ!

# 何番煎じだよ!!
DBダンプなんて公式見れば書き方なんか書いてるやろがい！ってなるかも知れませんがお付き合いいただければと。

# 構文
```shell:MySQLのダンプトルやーつ.sh
#!/bin/bash
mysqldump -u ユーザ名 -pパスワード(-pとの間に空白入れない) DB名 > /var/db/backup/ファイル名_$(date +%Y%m%d).dmp
```

あとはコレをCronとかに登録して、日次実行とかすればいいね!!

他にもオプション色々と付けられますが、そこら辺は[公式](https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html)見たほうがいいね（結局
TypstやMarpインストールのためにWSL2でSnapdを動かす

## 概要

MarpやTypstをUbuntu on WSL2にインストールするためsnapdを使いたくなったが、どうやらsnapdはsystemdが動いていないとだめらしい。

具体的には以下のようなエラーが出た。
```
error: cannot communicate with server: Post http://localhost/v2/snaps/typst: dial unix /run/snapd.socket: connect: no such file or directory
```

いろいろ記事があるが、[2024年現在ではconfigを書けば簡単にsystemdを起動できる](https://learn.microsoft.com/ja-jp/windows/wsl/systemd)。

手順は以下の通り。
1. wslのupdate
1. configの記述
1. wslの再起動

## WSLのupdate

WindowsのPowershell等で
```
wsl --update
```
とする。

## Configの記述

WSL内のUbuntuに入り、`/etc/wsl.conf`というファイルを作成し、その中で
```
[boot]
systemd=true
```
と記述し、保存する。

## WSLの再起動

WindowsのPowershell等でWSL内のUbuntuの再起動を行う。
```
wsl --shutdown
```
とし、再びUbuntuにアクセスすれば、snapコマンドから目的のパッケージがインストールできるはずである。
【初学者向けプログラミング勉強ツール】AOJ(Aizu Online Judge) 使ってみた

今回は在学中に使っていた[AOJ(Aizu Online Judge)](https://onlinejudge.u-aizu.ac.jp/home) を久しぶりに使ってみたので紹介します。
## AOJとは
AOJとは名前にもある通り会津大学が運営しているオンラインジャッジシステムです。
オンラインジャッジって何？ってなるんですけど
AOJのwebページによると

>オンラインジャッジは、提出されたプログラムの正しさとその効率の自動判定を行うWEBサービスです。たくさんの問題が収録されており、24時間自由に自分のペースでプログラミングを学ぶことができます。

らしいです。
## 使ってみた
ページにアクセスして上にあるコースをクリックすると以下の画像のようなコースリストが表示されます。（在学中よりもUIにこだわってる！！！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/9181966e-3163-a1fe-8118-3e6f3e0d2774.png)
コースを選択するとこんな画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/ae573f19-e373-a524-ed06-ce1404d77443.png)

今回はアルゴリズムとデータ構造入門の1_A: Insertion Sort に取り組んでみました。
## 問題
今回の問題ページは
- 問題内容
- 入力内容
- 出力内容
- 制約
- 入力例とそれに対する出力
- Post note(具体的な解き方の説明？)
- コード入力欄

で構成されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/fdd2a5d8-94e1-3160-d224-c4ea22808150.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/fb013600-6558-5381-9cf7-4d1cefcb3d67.png)
問題を解く欄ではこの問題を解くためのプログラミング言語をプルダウンから選ぶことができます。
ここから得意な言語を選びましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/0576f0f2-62aa-8fb5-426d-8952f3395045.png)
ちなみに
Post noteの赤枠で囲った一般解説を押すと
![スクリーンショット 2024-07-11 085945.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/d7ddc3b3-fcc5-7a59-1490-e3e3bf15b96a.png)
このようにアルゴリズムの解説を見ることができます。
## 提出後
問題を解くプログラムを提出し、そのプログラムが要件を満たしていれば以下のStatus欄のようにAC(Accepted)が表示されます。また、AC以外にもいくつかStatusがあるので気になった方は[こちら](https://onlinejudge.u-aizu.ac.jp/judges_replies "AOJ status")から確認してみてください。
![2024-07-10_14.45.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/1f1bb71c-0482-96ad-48c7-85de10acc6b7.png)
また、AOJでは問題を解く欄の下部にあるSolutionsから、他のユーザーが提出したソースコードを見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/dc9423c3-609a-4847-0785-5962535b488b.png)
![スクリーンショット 2024-07-11 102535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828636/9ade72fb-50ca-4685-ba5e-b5a7c0132da9.png)

自分のコードとCPU Time, MeMory, Code sizeを比較できるのは成長につながりそうでいいですね！！！
## paizaとの違い
現在研修で利用しているpaizaとの違いを探してみました
### 料金
paizaは一部有料コンテンツがありますが、AOJは完全無料です。
そのため、初心者の方も安心して利用することが可能です。
### 学習できる内容
- AOJ
競技プログラミングやアルゴリズムのトレーニングに特化しており、初心者から上級者まで幅広い難易度の問題が用意されています。
- paiza
実務で使用されるスキルや業務を想定した問題が中心です。
### 教材
- AOJ
問題文と入出力例、一般解説などが提供されますが、基本的には自己学習やトレーニング向けの問題集です。
- paiza
解説付きの問題や動画などの学習コンテンツが提供されています。
## まとめ
AOJは実務に使いたい知識を付けるというよりかはとりあえずプログラミングの勉強、トレーニングをしたい人におすすめなのではないかなと感じました。
動画を見ながら勉強したい方はpaizaやUdemyを利用したほうがいいかもしれません。
とはいっても、どのサービスにもそれぞれ異なる特徴と目的を持っており、選択すべきサービスは学習目的やニーズによって異なる場合があります。初心者の場合は、自分の学習目標や好みに合わせて、どのサービスがより適しているか考えると良いでしょう。
【コロナ社】プログラミング言語 まとめ

# プログラミング言語 Webサイトリンク
本書を取り上げていただいた，Web上の関連記事をまとめました。


 ## :new: 内容梗概
『Pythonで学ぶ暗号理論』
暗号理論の解説に加え，差分解読法・線形解読法，ハッシュ関数の解析，RSA 暗号に対する攻撃等を体験できる Python プログラムを提供。理論だけでは実感が湧きにくい暗号の仕組みを，プログラムを動かしながら学ぶ。

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<img width="250" alt="『Pythonで学ぶ暗号理論』" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186227/3a425bc8-3fc1-6d6a-fb74-7add38791d05.jpeg
">

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;[書籍詳細ページ](https://www.coronasha.co.jp/np/isbn/9784339029468/)(コロナ社)

### ご参考・ご紹介いただいているリンク
・[2024年に出版された暗号周りの書籍紹介](https://qiita.com/0917laplace/items/daef5f69da39dc35527c)
　by @0917laplace in EAGLYS(Qiita)


## 内容梗概
『Pythonで学ぶ実践画像・音声処理入門』
本書は，ディジタルメディアの代表的データである画像や音声をコンピュータで扱うための基本的な手法を知り，実際に読者がPythonを用いて様々な処理ができるようになることを目標としている。

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<img width="250" alt="『Pythonで学ぶ実践画像・音声処理入門』" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186227/2b61ba6e-692f-f73b-3b43-0d3b93098ea1.jpeg
">

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;[書籍詳細ページ](https://www.coronasha.co.jp/np/isbn/9784339009026/)(コロナ社)

### ご参考・ご紹介いただいているリンク
・[コロナ社「Pythonで学ぶ実践画像・音声処理入門」本のレビュー](https://qiita.com/hiro5585/items/01cc0062a101a4f198b1)
　by @hiro5585(Qiita)

・[Pythonによるフォルマント分析と音声認識](https://qiita.com/k-maru/items/4f12fd0f8344b9e093bd)
　by @k-maru(Shunki Kanamaru)(Qiita)

・[Pythonによる音声認識 MFCC編](https://qiita.com/k-maru/items/1596830285b0235fb1d4)
　by @k-maru(Shunki Kanamaru)(Qiita)
 

 ## 内容梗概
『Pythonで始めるプログラミング入門』
本書はプログラミング初心者に向けた入門書である。扱いやすく世界中で使われているプログラミング言語Pythonを本書では扱う。シンプルな例題と解説をとおしてプログラミングや数値計算の初歩的概念を習得できるようにした。

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<img width="250" alt="『Pythonで始めるプログラミング入門』" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186227/580616d9-a5a7-b628-3d4c-e507020c19a6.jpeg">
&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;[書籍詳細ページ](https://www.coronasha.co.jp/np/isbn/9784339024982/)(コロナ社)

### ご参考・ご紹介いただいているリンク
・[Pythonで数値計算プログラムを書き直そうシリーズ](https://qiita.com/Sunset_Yuhi/items/fa6e97867ac46a604780)
　by @Sunset_Yuhi(Qiita)


## 内容梗概
『1から始める Juliaプログラミング』
「Pythonのように書けて，Cのように動く」新しいプログラミング言語Juliaの基本的な文法や使い方から，実践的な内容として，標準ライブラリには含まれない数値計算やデータの可視化などのパッケージの活用まで解説する。

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;<img width="250" alt="『1から始める Juliaプログラミング』" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186227/badfc654-9feb-3c1d-4a09-f14556a12779.jpeg">

&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;[書籍詳細ページ](https://www.coronasha.co.jp/np/isbn/9784339029055/)(コロナ社)

### ご参考・ご紹介いただいているリンク
・[Juliaの開発環境構築](https://qiita.com/msekino/items/dbfe11ad05f20fd3efd3)
　by @msekino(Masashi Sekino)(Qiita)

・[Juliaで自作のモジュールや関数をファイル単位で分割する方法](https://qiita.com/takahashi-ry/items/ebade14f6ac251b54df8)
　by @takahashi-ry(高橋 竜眞) in 株式会社テクノフェイス (Qiita)
【備忘録】ONNXモデルを使用して画像の類似度を算出

# はじめに

- 必要なライブラリをインポート
- ONNXモデルをロード
- VectorizeImage メソッドで画像をベクトル化
- CompareImages メソッドで2つの画像のベクトルを比較し、類似度を計算
- CosineSimilarity メソッドでコサイン類似度を計算

このコードを使用するには、以下の準備が必要です：

NuGetパッケージマネージャーを使用して、Microsoft.ML.OnnxRuntimeとSystem.Drawing.Commonパッケージをインストールします。
CLIPモデル（または同等の画像ベクトル化モデル）をONNX形式に変換し、path/to/model.onnxに配置します。

https://learn.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/object-detection-onnx

https://github.com/dotnet/machinelearning-samples/tree/main/samples/csharp/getting-started/DeepLearning_ObjectDetection_Onnx

```C#:Program
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;

class Program
{
    static InferenceSession session;

    static void Main(string[] args)
    {
        // ONNXモデルのロード
        session = new InferenceSession("path/to/model.onnx");

        string imagePath1 = "path/to/image1.jpg";
        string imagePath2 = "path/to/image2.jpg";

        float similarity = CompareImages(imagePath1, imagePath2);
        Console.WriteLine($"画像の類似度: {similarity}");
    }

    static float[] VectorizeImage(string imagePath)
    {
        using (var image = new Bitmap(Image.FromFile(imagePath)))
        {
            // 画像の前処理
            var resizedImage = new Bitmap(image, new Size(224, 224));
            var inputTensor = new DenseTensor<float>(new[] { 1, 3, 224, 224 });

            for (int y = 0; y < 224; y++)
            {
                for (int x = 0; x < 224; x++)
                {
                    var pixel = resizedImage.GetPixel(x, y);
                    inputTensor[0, 0, y, x] = (pixel.R / 255f - 0.485f) / 0.229f;
                    inputTensor[0, 1, y, x] = (pixel.G / 255f - 0.456f) / 0.224f;
                    inputTensor[0, 2, y, x] = (pixel.B / 255f - 0.406f) / 0.225f;
                }
            }

            // モデルの実行
            var inputs = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("input", inputTensor) };
            using (var results = session.Run(inputs))
            {
                return results.First().AsTensor<float>().ToArray();
            }
        }
    }

    static float CompareImages(string imagePath1, string imagePath2)
    {
        var vector1 = VectorizeImage(imagePath1);
        var vector2 = VectorizeImage(imagePath2);

        return CosineSimilarity(vector1, vector2);
    }

    static float CosineSimilarity(float[] v1, float[] v2)
    {
        float dotProduct = 0;
        float magnitude1 = 0;
        float magnitude2 = 0;

        for (int i = 0; i < v1.Length; i++)
        {
            dotProduct += v1[i] * v2[i];
            magnitude1 += v1[i] * v1[i];
            magnitude2 += v2[i] * v2[i];
        }

        magnitude1 = (float)Math.Sqrt(magnitude1);
        magnitude2 = (float)Math.Sqrt(magnitude2);

        if (magnitude1 > 0 && magnitude2 > 0)
        {
            return dotProduct / (magnitude1 * magnitude2);
        }
        else
        {
            return 0;
        }
    }
}
```
XLS 連絡先リストを VCF/vCard 形式に変換する簡単なソリューション

<p>Excel を Vcard に変換する方法については、こちらに詳しいガイドがあります。送信する連絡先やその他の情報は、XLS または XLSX 形式で送信されることがあります。この一般的な形式は、ほぼすべてのコンピューターで開くことができます。ただし、一部のソリューションでは、たとえば、連絡先や情報を Vcard からインポートすることしかできません。</p>
<p>データを整理して保存するための最もよく知られているツールは、Microsoft Excel です。スプレッドシートは、保持できるデータ量の点で期待を超えており、他の機器よりもタスクが簡単になります。</p>
<p>Excel ページでは、アウトライン、埋め込み円グラフ、バックアップ連絡先、その他のデータを追加できます。このデータは、MS-Excel によって .xlsx および .xls 形式で保存されます。ただし、特定のデバイスまたはオペレーティング システムでは、Vcard グループのみがサポートされています。したがって、VCF グループの期待を上回るために、紙を変更するアクションを実行します。</p>
<h2><strong>Vcard VCF ファイルとは何ですか?</strong></h2>
<p>名前、電話番号、電子メール アドレス、住所などの連絡先情報を保持するために使用される一連の文書です。</p>
<h3><strong>Excel ファイル (.xls) とは何ですか?</strong></h3>
<p>これは主に Microsoft Excel で作成されるドキュメントのコレクションです。Microsoft Excel 2003 までは XLS でしたが、Microsoft Office 2007 以降は XLSX です。多くの組合やその他のグループが頻繁に使用しています。これが、vcf の代わりに xlsx ファイルを使用するのが難しい主な原因です。</p>
<p>これを Google で検索すると、驚くべき結果が得られます。それに倣う有料プログラムが多数見つかります。ただし、無料のプログラムを見つける方法はありません。これは、XLSX から VCF への切り替えに 2 段階のプロセスが関係しているためです。Excel XLSX ファイルを Vcard VCF ファイルに変換してみましょう。</p>
<h3><strong>DataVare のアドレス帳マネージャー: XLSX を VCF ファイルに変換</strong></h3>
<p>ユーザーは、<strong>DataVare アドレス帳マネージャー ツー</strong>ルを使用して、<a target="_blank" rel="noopener noreferrer" href="https://www.datavare.com/jp/address.html"><strong>XLS 連絡先リストを VCF/vCard 形式に変換</strong></a>できるようになりました。このプログラムは、問題なく、多数の Excel 連絡先を VCF ファイル形式にエクスポートできます。どのバージョンの Windows OS でも、このプログラムをダウンロードできます。Excel 連絡先は、プログラムから VCF ファイル形式にエクスポートできます。一部のユーザーは、エクスポートしたデータを指定されたデスクトップの場所に保存します。ユーザーは、わずか数ステップでこのアプリケーションを利用できます。</p>
<ul>
    <li>まず、DataVare アドレス帳マネージャー ツールをダウンロードします。</li>
    <li>アプリケーションを起動し、Excel ファイルを選択します。</li>
    <li>VCF ファイル形式に移行する前に、Excel ファイル全体をプレビューします。</li>
    <li>VCF ファイルを保存するのに最適な場所を選択します。</li>
    <li>次に、[変換] ボタンをタップして、Excel の連絡先を VCF ファイル形式にエクスポートします。</li>
</ul>
<p><strong>注: </strong>無料のデモ版では、ユーザーは 10 件の Excel 連絡先のみを VCF ファイル形式に変換できますが、何千もの連絡先を VCF ファイル形式に変換する必要がある場合は、このアプリケーションの完全版を購入してください。</p>
<h3><strong>最後の声明</strong></h3>
<p>この投稿を共有していただき、DataVare で引き続き活動していただき、ありがとうございます。これにより、私たちは引き続き素晴らしいコンテンツをお楽しみいただけます。この件に関するご意見は、下のコメント セクションにご記入ください。万が一、まだ質問がある場合は、コメント セクションに残してください。この投稿が役に立つと思われる場合は、ぜひあなたの非公式組織に転送してください。この投稿は直接的で、他の人を励ますものであり、1 分間だけ停止します。</p>
Git入門：タグとサブモジュール

Gitのタグとサブモジュールは、バージョン管理と外部リポジトリの統合を効率的に行うための便利な機能です。この記事では、タグとサブモジュールの基本について記述します。

### 目次

1. タグの基本
2. タグの作成と管理
3. サブモジュールの基本
4. サブモジュールの使用方法

### 1. タグの基本

タグは、特定のコミットを固定して参照するための名前付きポインタです。リリースバージョンを記録する際に便利です。

### 2. タグの作成と管理

### タグの作成

軽量タグを作成するには、以下のコマンドを使用します。

```bash
git tag <タグ名>
```

例：

```bash
git tag v1.0
```

注釈付きタグを作成するには、`-a`オプションを使用します。

```bash
git tag -a <タグ名> -m "タグメッセージ"
```

例：

```bash
git tag -a v1.0 -m "Initial release"
```

### タグの一覧表示

すべてのタグを一覧表示するには、以下のコマンドを使用します。

```bash
git tag
```

### タグの削除

タグを削除するには、以下のコマンドを使用します。

```bash
git tag -d <タグ名>
```

例：

```bash
git tag -d v1.0
```

### リモートリポジトリへのタグのプッシュ

タグをリモートリポジトリにプッシュするには、以下のコマンドを使用します。

```bash
git push origin <タグ名>
```

すべてのタグをプッシュするには、以下のコマンドを使用します。

```bash
git push origin --tags
```

### 3. サブモジュールの基本

サブモジュールは、Gitリポジトリ内に外部のGitリポジトリを組み込むための機能です。これにより、複数のリポジトリを一つのプロジェクトとして管理できます。

### 4. サブモジュールの使用方法

### サブモジュールの追加

サブモジュールを追加するには、以下のコマンドを使用します。

```bash
git submodule add <リポジトリURL> <ディレクトリ>
```

例：

```bash
git submodule add https://github.com/example/repo.git path/to/repo
```

### サブモジュールの初期化と更新

クローンしたリポジトリにサブモジュールが含まれている場合、以下のコマンドでサブモジュールを初期化し、更新します。

```bash
git submodule init
git submodule update
```

### サブモジュールの更新

サブモジュールを最新のコミットに更新するには、以下のコマンドを使用します。

```bash
cd <サブモジュールディレクトリ>
git pull origin main
```

### まとめ

この記事では、Gitのタグとサブモジュールの基本について記述しました。タグを使用することで、特定のコミットを固定して参照しやすくなります。サブモジュールを使用することで、プロジェクト内に外部リポジトリを組み込み、複数のリポジトリを効率的に管理できます。
Webカメラの接続問題

## **目的**
WebカメラをUbuntuに接続して利用している場合に、途中でUSB接続そのものが認識されなくなる場合がある。

通常、以下のコマンドでカメラデバイスをリストで表示できるが、この場合に限っては何も表示されなくなる。
```
$ v4l2-ctl --list-devices
```

解決方法はハードアプローチとソフトアプローチのに種類がある。ハードアプローチはUSBを抜いて指し直すという物理的な解決方法である。ソフトアプローチはUSBドライバそのものを読み込みなおす解決方法である。以下にその手順を記す。

## **USBバスを再ロードする方法**
**デバイスを確認する:**
```
$ lsusb
```

**ドライバをアンロードする:**
USBカメラのドライバを特定してアンロードする。一般的に、USBカメラはuvcvideoドライバの使用を想定している。
```
$ sudo modprobe -r uvcvideo
```

**ドライバを再ロードする:**
```
$ sudo modprobe uvcvideo
```

**デバイスの確認:**
再度デバイスを確認して、認識されているかを確認する。
```
$ v4l2-ctl --list-devices
```

これで、USBデバイスが再認識されるかを確認すること。もしこれでも解決しない場合は、以下の方法も試すこと。

## **USBバスをリセットする方法**
**USBデバイスのバス番号を確認:**
```
$ lsusb
```
出力例:
```
Bus 002 Device 003: ID 0c45:6366 Microdia
```

**バス番号を使用してUSBバスをリセット:**
バス番号が002の場合、以下のコマンドを使用してUSBバスをリセットする。
```
sudo sh -c 'echo -n "2-1" > /sys/bus/usb/drivers/usb/unbind'
sudo sh -c 'echo -n "2-1" > /sys/bus/usb/drivers/usb/bind'
```

**デバイスの確認:**
再度デバイスを確認して、認識されているかを確認する。
```
v4l2-ctl --list-devices
```
これらの方法で、USBを差し直すことなくデバイスを再認識させることができるかもしれない。