OmniAICreator/Qiita-1.07M huggingface dataset:
each_line

### 文字列を'$/'の基準で切り分ける
>each_line(rs = $/, chomp: false) {|line| ... } -> self
each_line(rs = $/, chomp: false) -> Enumerator
`文字列中の各行に対して繰り返し`ます。行の区切りは rs に指定した文字列で、その`デフォルト値は変数 $/ の値`です。各 lineには区切りの文字列も含みます。

>rsに`nilを指定すると行区切りなし`とみなします。`rsに空文字列 "" を指定すると「パラグラフモード」になり、改行コードが2つ以上連続するところで文字列を分割`します (つまり空行で分割します)。

>[PARAM] rs:行末を示す文字列
>[PARAM] chomp: true を指定すると各行の末尾から rs を取り除きます。

### `/n`で分けられている
```rb
irb(main):037* "aa\nbb\ncc\n".each_line do |line|
irb(main):038*   p line
irb(main):039> end
irb(main):040>     # => "aa\n"
irb(main):041>     # => "bb\n"
irb(main):042>     # => "cc\n"
irb(main):043>
irb(main):044> p "aa\nbb\ncc\n".lines.to_a   # => ["aa\n", "bb\n", "cc\n"]
irb(main):045> p "aa\n".lines.to_a           # => ["aa\n"]
irb(main):046> p "".lines.to_a               # => []
irb(main):047>
irb(main):048> s = "aa\nbb\ncc\n"
irb(main):049> p s.lines("\n").to_a #=> ["aa\n", "bb\n", "cc\n"]
irb(main):050> p s.lines("bb").to_a #=> ["aa\nbb", "\ncc\n"]
"aa\n"
"bb\n"
"cc\n"
["aa\n", "bb\n", "cc\n"]
["aa\n"]
[]
["aa\n", "bb\n", "cc\n"]
["aa\nbb", "\ncc\n"]
=> ["aa\nbb", "\ncc\n"]
```
#### 何を基準に切り分けられているのか調べてみた。　　`$/`とは？
```rb
irb(main):051* "aanbbnccn".each_line do |line|
irb(main):052*   p line
irb(main):053> end
"aanbbnccn"
=> "aanbbnccn"
irb(main):054* "aanb/bnccn".each_line do |line|
irb(main):055*   p line
irb(main):056> end
"aanb/bnccn"
=> "aanb/bnccn"
...
irb(main):066* "aa\nbbnccn".each_line do |line|
irb(main):067*   p line
irb(main):068> end
"aa\n"
"bbnccn"
=> "aa\nbbnccn"
```
https://docs.ruby-lang.org/ja/latest/method/String/i/each_line.html

### `$/`に変数として格納　これを基準に切り分けられる
```rb
irb(main):071> $/
=> "\n"
```
オプションの「ギリシャ指標」って何？初心者にもわかる基礎解説！


## はじめに

オプション取引をしていると、しばしば耳にする「デルタ（Δ）」「ガンマ（Γ）」「ベガ（V）」「シータ（Θ）」「ロー（ρ）」といった言葉。これらは**ギリシャ指標（Greeks）**と呼ばれ、オプション価格がどんな要因でどれくらい変化するかを数値で表したものです。

**ポイント：** ギリシャ指標を学ぶと、オプションの価格形成の仕組みやリスクの捉え方がぐっとわかりやすくなります。

## 各ギリシャ指標の詳細解説

### 1. デルタ (Delta, Δ)

「原資産（BTCや株など）の価格が1単位動いたら、オプション価格はどれくらい動くの？」を示す指標です。

* **コール・オプション（買う権利）**はデルタが正（0～1の間）
* **プット・オプション（売る権利）**はデルタが負（-1～0の間）

たとえば、コール・オプションのデルタが0.5なら、原資産が1円（1ドル、1BTCなど）上がるとオプション価格が約0.5円上がる、というイメージです。原資産価格に対する"感度"として使われるため、オプションを使ってヘッジする際の基本的な考え方になります。

#### デルタ・ヘッジ

オプションの合計デルタが0になるように、原資産のポジションを調整することを「デルタ・ニュートラル」といいます。

* たとえば、コールを買った（Δがプラス）なら、原資産を一定数ショートする（空売りする）ことでデルタ合計を0付近にすることができます
* こうすることで、原資産が上がっても下がっても（ある程度は）値動きの影響を抑え、ボラティリティや時間価値など"他の要因"から収益を狙いやすくなります

### 2. ガンマ (Gamma, Γ)

ガンマは「原資産価格が1単位動いたときに、**デルタが**どれだけ変化するか」を示します。

* **"デルタの変化率"**と覚えるとわかりやすいです
* オプションを"買っている"場合はガンマがプラス、"売っている"場合はガンマがマイナスになります

ガンマが大きいということは、原資産が動いたときにデルタが激しく変わる＝ポジション調整を何度も行わなければならない可能性がある、ということ。裏を返すと、**ガンマがプラスのポジション**（オプションを買っている側）は、原資産価格が大きく動くほど有利になるケースが多いです。

### 3. ベガ (Vega, V)

ベガは「インプライド・ボラティリティ（IV）が1%変化したときに、オプション価格がどれくらい変わるか」を示します。

* ボラティリティ（価格変動率）が上がると、コールでもプットでもオプション価格は上がりやすいため、オプション買いポジションはベガがプラス（利益側）、売りポジションはベガがマイナス（不利側）になります
* 満期までの期間が長いオプションや、アット・ザ・マネー（原資産価格と権利行使価格が近い）なオプションは、ベガが大きくなる傾向があります

ボラティリティ変動リスクを管理したいときは、**ベガ・ニュートラル**（買いと売りを組み合わせて、ベガの合計を抑える）ようにポジションを組むことも考えられます。

### 4. シータ (Theta, Θ)

シータは「時間が1日（もしくは1時間など）経過すると、オプション価格がどれだけ変化するの？」を示す指標で、**オプションの時間価値の減少ペース**を表します。

* **オプションを買っている（ロング）場合**はシータがマイナス：持っているだけで時間価値が徐々に減っていきます
* **オプションを売っている（ショート）場合**はシータがプラス：時間が経つとオプション価格が下がりやすくなるため、オプションを売る側にメリットが生まれます

満期が近いアット・ザ・マネーのオプションは時間価値の減少が激しいため、シータのマイナスが大きくなりやすい点に注意が必要です。

### 5. ロー (Rho, ρ)

ローは「金利が1%変動したら、オプション価格がどれくらい変わるか」を示します。

* 一般には、コールは金利上昇でプラス効果、プットはマイナス効果となりやすいとされています
* ただし、金利の影響はボラティリティや原資産価格ほど大きくないことが多く、日本のように金利が低い環境では"あまり意識しなくても良い"とされる場合もあります

## まとめ：ギリシャ指標を活用してリスクを分解しよう

オプション取引は「ギリシャ指標」を意識することで、以下のようにリスクを細かく管理できます：

1. **デルタ**：原資産の価格変動リスク
2. **ガンマ**：デルタの変化（再調整頻度など）
3. **ベガ**：ボラティリティの変動リスク
4. **シータ**：時間経過による損益の変化
5. **ロー**：金利変動リスク

たとえば、「原資産の値動き（デルタ）はヘッジしておいて、ボラティリティ（ベガ）だけを狙ってトレードする」といったことが可能になります。これがオプションの大きな魅力でもあります。

**ワンポイント：** ギリシャ指標を活用しても、急激な相場変動などですべてのリスクを完全に避けられるわけではありません。あくまで"目安"として、どこにどんなリスクがあるのかを把握するツールになります。

## おわりに

オプションは少し難しそうに見えますが、ギリシャ指標を理解すると「何に対してどんなリスクを負っているか」がクリアになり、戦略を組み立てる楽しさがぐっと高まります。まずはデルタとガンマの関係あたりからゆっくり学んでみるのがおすすめです。

是非、オプション取引でギリシャ指標を活用してみてくださいね！
デジタルヒューマンは生成AI活用の起爆剤になれるか？

# <font color=darkblue>はじめに</font>

生成AIの進化が止まりません。特にGPT-4oからは応答の精度・スピードが拡大に上がってきています。一方で誰もが生成AIの恩恵を受けるにはUXの改善が欠かせないと思われます。これを解決するのが音声対話による <font color=darkblue>デジタルヒューマン</font> と思われ、昨今様々なデジタルヒューマンが登場しているので国内の動向を整理してみました（評価は個人的な見解です。ご了承ください）。

# <font color=darkblue>1. NEC</font>
「NEC Personal Consultant」を2024年10月に発表しています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/OuC8mkjrLu0?si=efZR9WD72EicBdhk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

アイシンとアーティストのTELYUKAとが開発しているデジタルヒューマン「Saya」とNECの生成AI技術を組み合わせています。
Sayaのキャラクタは優しさを感じられ万人受けするイメージがあり、特に高齢者にも受け入れやすいキャラクターと思われます。Sayaは発表当初から不気味の谷を超えていると言われているだけあってかなりリアルな印象を受けます。
今後これがスマートフォンに搭載されれば、自分のアシスタントやパートナー、高齢者にとっては孫とするような感じで、日々Saya(生成AI）と対話するような日常が訪れそうな気もします。

# <font color=darkblue>2. 凸版印刷</font>
「VHサイネージ」を実証実験をしている(2023年4月）。ライトステージを活用。


<iframe width="560" height="315" src="https://www.youtube.com/embed/YZu_ad16Zyk?si=_YbcgZTq7FUujJBr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>



# <font color=darkblue>3.NTTコミュニケーションズ</font>
「CONN(コン)」を東映およびNTT QONOQとで実証実験をしています（2023年3月)。

<iframe width="560" height="315" src="https://www.youtube.com/embed/em8IUhYg3hM?si=yqw28-o5Wn11H6Cq" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

外見はリアルで不自然さは少ないです。

# <font color=darkblue>4.　Aww Inc.</font>
「imma]を発表しています。様々な企業広告や雑誌モデル、SNSで情報発信しておりインフルエンサーとしても活躍しています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/9AL8l4styiY?si=cflJUWzdOB7PGmdt" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


表情や動きはかなりリアルです。カリスマ的なタレントのイメージで、万人向けというよりは若者をターゲットにしていると思わます。ただ、どこまで一般的な対話エージェントして使えるのかは記事からはわかりませんでした。

# <font color=darkblue>5. おわりに</font>
今後さまざな生成AIを融合させたデジタルヒューマンが出てくるとは思いますが、現状ではそれぞれのターゲット層は違うとは思いますが、「NEC＋アイシン＋TELYUKAのNEC Personal Consultant/Saya」と「Aww Incのimma」はかなりリアルな印象があります。
生成AIの開発では世界に遅れをとっているイメージですが、デジタルヒューマン&生成AIでは日本が世界をリードしていけるといいですね。<font color=darkblue>RAGやプロンプトエンジニアリングを駆使しデジタルヒューマンとの対話品質を向上させていくのがエンジニアの重要な作業</font> になりそうです。
特に超高齢化が進んでいる日本ではデジタルデバイド解消に向けデジタルヒューマンの活用も有効と考えられ、様々な高齢者向けの日本初のサービスが世界に広がっていくことも期待したいです。
c#で、なでしこ その23

# 概要
c#で、なでしこ、やってみた。
c#な、なでしこ、見つけたので、msbuildでコンパイルしてみた。
練習問題やってみた。

# 習問題
AtCoderを解け。
500円玉、100円玉、50円玉を使ってXX円を支払う方法が何通りあるかを求める。

# サンプルコード

```

「>」と入力。
それを指示に代入。
aは指示の整数変換
「>」と入力。
それを指示に代入。
bは指示の整数変換
「>」と入力。
それを指示に代入。
cは指示の整数変換
「>」と入力。
それを指示に代入。
xは指示の整数変換
答は0
iを0からaまで繰り返す
　jを0からbまで繰り返す
　　kを0からcまで繰り返す
　　　合計は0
　　　iに500を掛ける
　　　合計は合計にそれを足す
　　　jに100を掛ける
　　　合計は合計にそれを足す
　　　kに50を掛ける
　　　合計は合計にそれを足す
　　　もし、合計がxに等しいならば
　　　　答は答に1を足す
答を表示する


```

# 実行結果

```
>cnako2 at4.nako
>
2
>
2
>
2
>
100
2

```

以上。
AI駆動でconnpassのイベントリマインダーを作った話

年末ということで溜まっていたTODOをやってしまおうというので、
Cursor、slack apiの勉強のために作ってみました。

いつもはAndroidエンジニアとして記事を投稿していますが、Androidの話ではないです。

## 作ったもの

成果物->[hiroaki404/event\_reminder](https://github.com/hiroaki404/event_reminder)
(自分はpythonを趣味で書いているレベルなので、コードの精査はご自身の判断でお願いします)

この間登壇のためにイベントに参加したが、良かったので参加者としても来年から定期的に参加したい。
そんな気持ちはあるが来年になったら忘れそうなので、slackアプリを入れてbotから一ヶ月に一度通知が来るようにした。
この方法ならSNSに張り付かなくても毎月やる予定のイベントをざっくり確認できる。

メールでいいんじゃないかとも思ったがslack apiの勉強も兼ねて作っりました。

システム構成としては、

GCPのCloud Functionsを使って、pythonコードからslack apiを使って自分が作ったslackチャンネルにメッセージを飛ばす。
メッセージには、`https://connpass.com/search/?q=Android&start_from=2024%2F12%2F01&start_to=2024%2F12%2F31&prefectures=tokyo&selectItem=tokyo&sort=`のようなconnpassのurlを貼る。クエリの日時の部分は、関数が呼び出される月が入るようにする。
Cloud FunctionsはCloud Schedulerで毎月呼び出す。

です。

## Cursor

いまさらダウンロードしてみましたが、期待以上にいい感じ。
Cursorはchatのウィンドウがあり、プロンプトを入力して、applyしていくと、それだけでコードが埋まっていきます。AIコーディングに特化された印象を受けて、使いやすいです。
初期設定もほとんど時間がかかりませんでした。


![スクリーンショット 2024-12-28 11.41.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1165483/0a8e0438-6287-559c-d07d-39b1bb96e18b.png)

今回使ったプロンプトは、
「slack botにhello worldを送るプログラムを作って」
「ありがとう。メッセージの内容を、以下に変えてください。
今月のイベントは、https://connpass.com/search/?q=Android&start_from=2024%2F12%2F01&start_to=2025%2F01%2F01&prefectures=tokyo&selectItem=tokyo&sort= です。
この文字start_fromは関数が実行される日の月の月初、start_toは関数が実行される日の月の月末の日とします。」
「slack_tokenはgcpの環境変数を使って」
「gcpで行うため、requirements.txtが必要です。作ってください」
「これをローカルで実行するには？」
「ローカルの仮想環境で環境変数を追加するにはどうする？」
でした。

まぁ、他のIDEでも同じようなことができるとは思うので、そのあたりはケースバイケースで使うものを判断といことになります。

Cursorはvscodeベースなので、設定やpluginの移行も楽々でした。

## AIコーディング

今回のような簡単なコードなら、ほとんど手でコードを書くことなく作れました。修正もほとんどやっていないです。
エラーハンドリングもやってくれています。

今回気づいたこととしては、私のようにpythonの玄人でなく、頻繁に触る機会もないと、
pythonの書き方どうだっけ、からは入ります。
コードを読むのは思い出せばいいのでできますが、ゼロから書くのは迷いが出ることもある状態です。
そうした場合だとかなり威力を発揮すると思いました。

これ自分で書く場合だとpythonってどう書くのだろうか、から入りますし、
普段業務で使っていないので、エディタの環境も万全ではありません。

また今回は自分だけの小規模なツールの開発で、機能を追加していくものでもないし、一定のセキュリティさえあれば動けばいいようなものでした。そうした場合はAIに多くを任せられます。

コードの中身については、slack apiに繋げる部分にslack_sdkを入れます。
これは知識なかったのですが勝手にAIが生成くれました。

また日付を処理する関数の部分は一発生成で問題なさそうでした（バグったらその時直せばいいの前提ですが）。
こういった単純な関数はAIに譲るべきところだと思います。

GCPでエラーでたところも直してくれましたし、
.envの書き方とかrequirements.txtの書き方とかも全部AIがファイルごと作ってくれたので、頼もしかったです。

## AIトラブルシューティング

GCPも触るのが久しぶりで、エラーが出たり、関数やスケジューラの作り方を忘れていました。
そうしたときにGeminiに聞いて、トラブルシューティングをしました。

やはり初歩的な用途だと精度は悪くなく、AIを使いながらやり方を思い出しました。
そのおかげで前に同じことをやったのに比べると、かなり早くシステムを構築できるようになました。

## 注意点

ほとんど手を動かさないと言いましたが、修正がないわけではありませんでした。

書くのはAIが書いてくれて、それを精査する感じになります。
ただ、なんの知識もないとそのコードが問題ないのかわかりませんので、知識が不要というわけではないです。

やはりコードを読む力はより必要になってくるんではないかと思います。

また今回はかなり初歩的なアプリケーションを構築する話で、
実際の業務では要件はもっと複雑になってきます。
またお客様を相手にするアプリケーションでは信頼性が重要になります。
そうした場面だとやはりまだAI駆動で開発するのは限界だと思います。
自分もAndroidの実業務だとAI駆動とはいえません。

しかし実業務でもAIを使って助かっている部分は多いです。

AIの是非が問われており、将来AIに取って代わるとか、そんな話もあります。
自分は将来のことはあまり予測できないと思っています。
AIを過信せず、見放しすぎない、使えるところは正しく使って、疑うところは疑いつつ、
今の状況で自分のすべきベストを探るのがよいと思います。
学習に着手する前に必要になるツール

機械学習に着手することになった。
その時点で、必要になるツールがある。

その学習をチームとして成功させたてければ、これらのツールをチームとして共有して、開発スキルの上位標準化をする。



# 
# データの整合性のチェックツール
データの整合性は、データの整合性を保つための努力をすることなしに勝手に満たされていることはない。
- [ ] データファイルのリスト作成ツール 
- [ ] データフォーマットの確認ツール
　例：jsonフォーマットの妥当性の確認
　自作ライブラリで出力したjsonファイルが、適切なjsonファイルになっていることを確認したかったら、Pydanticを使って読み取れることを確認することだ。
　他の巨大なアプリケーションの中では、ファイルフォーマットが間違えたときに、わかりやすいエラーメッセージを出してくれない。

- [ ] 画像ファイルが壊れていないこと
- [ ] Git LFS で扱っているファイルが壊れている。
- [ ] orientation情報による画像回転をしていないことを確認する。
-
# データのマージツール
データのマージツールは以下の状況で必要になります。
・アノテーションを１名で実行するのではなくて、多人数で実行する場合
・元のデータが複数のフォルダに分かれている場合
・データを追加する場合

データフォーマットが共通している範囲で、ツールを共有化することです。

COCOのデータセットのデータ形式の場合には、データをマージするためのツールがいろんな場所に既に公開されている。
それらのうち、あなたの用途に適したものを選んで使うのがいいだろう。

pyodi coco merge coco_1.json coco_2.json output.json
https://gradiant.github.io/pyodi/reference/apps/coco-merge/

# データの表示ツール
・データのアノテーションの有無がわかるツール
　どのデータにアノテーションがあって、どのデータにアノテーションがまだされていないのかを、手作業で確認してはいけません。
　フォルダの数が多かったり、階層的なフォルダにデータがあるときには、最新の状況を確認するのに手間取ってしまいます。
　

# データの統計を表示できるツール
データの状況は統計で確認をとることです。
物体検出の場合、それぞれのカテゴリの物体の数がいくつあるか統計を取ります。
アノテーション結果があれば、それらを統計にまとめることは比較的かんたんなはずです。
一つ一つのアノテーションの情報を１行分のデータとして、
それをPandasのDataFrameにすることです。
そうすれば、集計作業とグラフ化の作業が楽にできます。



# 特徴量エンジニアリングの視点で、データを表示できるツール
## 学習データのラベリングの状況を確認しよう
ポジティブサンプルのラベリングの状況は確認しやすい。

[COCOデータセットを可視化してみた](https://note.com/ghelia/n/nbc7e6d39c0ba)
画像のカテゴリ割合の比較

![](https://assets.st-note.com/img/1702265368329-41VhXjrQ0j.png?width=1200)
図は、上記のサイトから引用
画像の物体サイズの比較
![](![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/84d97a1b-877b-d440-5c06-6b5f31844f32.png)
図は、上記のサイトから引用

## 評価ツールの例
https://gradiant.github.io/pyodi/reference/plots/evaluation/
https://github.com/Gradiant/pyodi
pyodiの出力する図はgithub のREADME.md の方がわかりやすくなっています。

# その評価指標は、目的にそったものになっていますか
# 評価指標は正しいですか？

歴史の出来事の順序を問う問題があって、正解の順序が
a, b, c, d, e,f だったとしよう。

これを
f, a, b, c, d, e
と答えてしまった場合と
a, f, e, d, c, b
と答えてしまった場合で、どちらが正解に近い状況でしょうか。

ほとんどの試験では、下の方が６点中の２点の正解（a,d)の位置があっているという採点になる。しかし、上では正解と一致する位置がないから０点になる。
しかし、ｆ以外の全ての順序があっているので、本当は上の方が高い値を返すのが本来的にあるべきだと私は考える。

このように、評価指標は、ほんとうに妥当な評価指標になっているのかを疑ってかかることが大切です。

#### そのアノテーションデータでほんとうに適切ですか？
評価指標の設計は、適切に選択すれば使えるものになるだろう。
しかし、気をつけてほしい。アノテーションデータはほんとうに適切ですか？
- アノテーションルールによっては、ある程度より小さい対象物にはアノテーションをつけていない場合があったりする。
- オクルージョン（隠れ）を生じていることで、検出の難易度が高いデータに対しては、アノテーションがついていないこともあります。
- その場合、検出器の特性が改善すると、アノテーション漏れのために、誤検出が増えた扱いになってしまいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/82e4b004-b8cf-8c5f-ea63-6947b46fbe4f.png)
[MS COCO datasetのフォーマットまとめ](https://qiita.com/kHz/items/8c06d0cb620f268f4b3e) から引用。
観客席の多くの人に対してアノテーションがされていないことがわかりますね。


## 学習結果の評価のツール
誤検出データの表示ツール
（スコア順の表示あり）
未検出データの表示ツール
（スコア順の表示あり）

## COCO API
MS COCO のラベリングを見るためのAPI

[COCO APIのCOCOevalを使ってみる](https://zenn.dev/spritaro/articles/6ca7cd7dba1ddf)


https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoDemo.ipynb

https://github.com/cocodataset/cocoapi/blob/master/PythonAPI/pycocoEvalDemo.ipynb
[aptos] 公開されてないスマコンを動かすのってどうやるの？

# Moveスマコン完全に理解した
Movespidersぽちぽち・・（EthereumでいうCryptozombies） 
https://movespiders.com/
![スクリーンショット 2024-12-28 10.59.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247390/a41626c6-7e81-45cf-07b9-13a20db47699.png)


Aptosスマコン書けるようになってきたな
さてDefiで儲けてみるか＾〜＾

# 大きな敵と気付き
こ、このコントラクト、コードが公開されていない・・・
そういえば、今まで自分で書いたコントラクトを動かすだけで、他のコントラクトを動かすってことしてなかったな
![スクリーンショット 2024-12-28 10.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247390/49b9b6a4-3a83-2d28-8ee6-1b4ca5f20a53.png)

# アドレス定義すれば動くのでは・・？　-> 失敗

```
// leverage_bot.move
module leverage_bot::loop_supply_borrow {
    use lending::lending;
}
```

```
// Move.toml
[addresses]
lending = "0x0daaf1cca3f702b3d94425e4f0a7bfb921142666846a916f5be91edf1f1911d4"
```

```
aptos move publish --move-2 
```

```
Invalid 'use'. Unbound module: '0xDAAF1CCA3F702B3D94425E4F0A7BFB921142666846A916F5BE91EDF1F1911D4::lending'
```

# 巷の他のスマコンを呼び出しているスマコンを探してみる
基本的にアドレス定義しているだけでほぼ同じように見える
しかしdependenciesで、githubのurlを指定している部分が差分としてあった。
これか？でも今回はコードが公開されていないので指定できないよね・・・？
![スクリーンショット 2024-12-28 11.25.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247390/4c3313ab-5c6d-6e05-c783-094e287a28c7.png)

# ひたすらハマる・・・
サンプルがない:angel:

# 解決策
###  ABIをもとにした仮のモジュールを作って、ローカルで読み込むように設定すること

ABIから作った仮の関数を使うことで対応できる情報を入手

返すものは適当で型だけあっているモジュールを作る
しかし、しっかり本当のコントラクトのように、sourcesフォルダとMove.tomlを用意する

```
module lending::lending {
    use 0x1::signer;
    use 0x1::coin;
    use 0x1::object;
    use std::string;
    use std::vector;

    struct Market has key {
        inner: string::String
    }

     public fun market_objects(): vector<object::Object<Market>> {
        vector::empty<object::Object<Market>>()
    }
}
```

利用するコントラクトの方で、アドレスを指定し、ローカルの読み込み設定も行う。
```
// contracts/Move.toml
[package]
name = "Leverage"
version = "0.0.0"

[addresses]
lending = "0x0daaf1cca3f702b3d94425e4f0a7bfb921142666846a916f5be91edf1f1911d4"

[dependencies]
Lending = { local = "./lending" }
```

![スクリーンショット 2024-12-28 11.20.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247390/db179d7a-474e-53ef-1f54-9dc99333165d.png)

これで自分のスマコンから公開されていないスマコンを呼び出すことができました
![スクリーンショット 2024-12-28 11.21.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247390/bc5016e2-8cbd-a649-3a59-4dde505894d5.png)

# まとめ
Aptosでの公開されてないスマコンを動かすのサンプルや情報がほぼなかったのでまとめてみました。
基本情報技術者試験　受験計画　〜経過報告〜

## はじめに
こんにちは、水野です。
先月、「基本情報技術者試験　受験計画」というものを投稿させていただき、
試験日1/17(金)にして、受験日当日に向けての
勉強プランを記載させていただきました。

しかし、実際には計画通りいかないもので
上手くいった点・改善した点等を報告させていただければと思います。

※こちらの記事は12/27(金)に作成しております。
### 簡単に当初の計画を紹介
12/1〜  勉強を開始
〜12/13 youtubeに投稿されている教材を聴き流し
〜12/27 参考書を読み込みつつ、過去問を解く。

### 良かった点
【YouTubeの聴き流し】
通勤電車内でのストレス下でも負担にならず
気軽に実施できた為、勉強のスタートに適していたと思います。

また、日常に勉強時間を組み込むことが出来たという点が自分の中でとても大きい様に思います。
【過去問を解く】
いくつか試していくと「なんか、さっきもみたな？」という問題がいくつか確認できる上に、
間違ったとしてもサイトの方に解説も記載されている為、アウトプットしつつ自分に合ったインプットができるので早い段階で始めて良かった様に思います。

### 改善した点

【参考書を読み込む】
仕事が終わって帰宅後に参考書を開くということをしていたのですが、数日で辞めました…
代わりに過去問を解いた後の解説は丁寧に読む様にしました。

また、帰宅してから何かするというのは
自分のモチベーションに左右されてしまった為、帰りの電車に乗る前にスタバへ寄って
過去問を解く様にしました。

## 最後に
自分のモチベーションに振り回されてで勉強時間を確保しなかった日があった為、
当初の予定より進捗は悪いのですが、
自分の働き方にあった時間の使い方を発見できたのは大きな収穫かなと思っています。

時間の使い方・勉強方法は、
人によって合う合わないがあるかと思うので、
どなたかの参考になればと思います:bow_tone1:

以上、水野でした。
リモートアシスタンスについて

こんにちは、水野です。
普段ヘルプデスク業務をしておりて、PCの操作が苦手な方には
リモートアシスタンスというWindowsの機能を使用しています。

設定すれば日常生活でも使える機能で、割と便利なので紹介させていただきます。


## リモートアシスタンスとは
操作を受ける側（サポートを受ける側）が許可を与えることでサポートが開始され
こちら側はユーザ側の画面を見ることができ、操作許可も与えられると
ユーザの代わりに先方の環境を遠隔で操作することもできる機能です。

### 利点
・操作を受ける側（サポートを受ける側）が常に画面を確認できる。
・サポートをされる側も操作することができる
・サポートをされる側は、必要であれば操作権限を取り戻すことが可能。

ユーザ側が本当にマニュアル通りの操作手順で作業をしているのか、
目視で確認でき、場合によっては途中で操作をこちら側で代わることができるため
電話対応だけだとどうしても対応が難しい、そんなときに活躍する機能です。

### 欠点
・セキュリティリスク
・同時操作の混乱

使用していて特にデメリットを感じるのは、
サポートを受ける側がこちらの操作中に、メール等を確認しようとするときです。
両者ともに操作が可能なため、ポート中に相手がマウスを動かし続けると
意図しない動作が発生し、送信ボタンをポチっと押してしまうなんてことも起こりえます・・

また、場合によっては社外秘の情報などを見ることができてしまうので
ヘルプデスク・ユーザともに注意が必要となります。


### 最後に
今回紹介させていただいたリモートアシスタンスは日常生活で活用することももちろん可能です。
ただし、サポート受ける側で事前に設定作業が必要になってきます。
そんな事前設定の方法・リモート接続手順などは
こちらに記載するとあまりに長くなってしまうため
画像付きで丁寧に説明してくれている
[こちら□](https://solomon-review.net/use-remote-assistance-by-ip-address-accessing/
)のサイトをご確認いただければと思います！

以上、水野でした。
サクラエディタの個人的に便利だと思った機能（正規表現検索）


こんにちは！エンジニアの篠原です:penguin:
今回もサクラエディタで個人的に便利だと思った機能を紹介します。

前々回＆前回はこちら↓

https://qiita.com/pesysyon/items/e4c11c71ffd0cdbc0e28

https://qiita.com/pesysyon/items/11521b5fcd9ae988b0a8


同じテーマで投稿していただきました&#x1f64c;↓

https://qiita.com/pesysyon/items/83aef2e8a9bfb177ddcf


## 便利機能（正規表現検索）

そもそも正規表現とは何かというと
文字列をパターン表現して検索や置換を行う手法の一つです。
たくさんある文字列の中から
「あ」から始まる3文字の文字列だったり
数値が含まれている文字列とあいまいな条件で検索することができます。


分かりやすい説明はこちら↓

https://userweb.mnet.ne.jp/nakama/

<br>

サクラエディタではその正規表現を使用して、
**検索**と**置換**が可能です:thumbsup:

<br>

では、実際にやってみます。
<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/46d939ab-e5d7-6e19-6656-5716d90224d5.png)

上図のようなファイルで
abcで始まる文字列を検索したいとき
Ctrl+Fで検索を開き、条件欄に以下のように入力し
正規表現にチェックを入れます。
この状態で検索すると...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/4a5e064e-b6b6-64e3-d81a-3fb27f8cf8fe.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/950de93a-07b2-7ef5-9864-7c65eb98845a.png)

該当行が表示されました:clap:
条件に入れた「^abc.*$」ですが、内訳は以下です。

* 「^」　行頭を表します
* 「abc」 今回の指定文字
* 「.」　任意の1文字
* 「*」　前の文字を繰り返す(今回は前の文字が.(任意の1文字)の為、任意の文字が何文字でもという意味になります)
* 「$」　行末を表します

こんな感じで複数のパターン文字を組み合わせて
あいまいな検索が可能になります:sparkles:

<br>

サクラエディタで使用可能な正規表現は
公式サイトにまとめられていますので
こちらを参考にしてみてください。

https://sakura-editor.github.io/help/HLP000089.html


## まとめ
今回は正規表現を紹介しました。
置換と組み合わせることで全行末に文字列を追加できたり
改行コードを削除して1行にしたりととても便利です。
是非活用してみてください:+1:


以上、篠原でした:penguin:
ゲームボーイ RGBDS 開発メモ 第0回 はじめに

### はじめに

ドラクエ3,4のチーフプログラマーである、内藤寛さんのYouTubeチャンネル([内藤かんチャン](https://www.youtube.com/@KanNaito))のドラクエ3のデバッグ動画を拝見させていただいて、自分もプログラミングに挑戦してみたくなり、学習記録をこちらにアウトプットしようと思います。

### 自己紹介

自分の背景ですが、ファミコン世代どまんなかで、ファミコンを買ってもらったときは、小学校低学年ころだったと思います。

高学年くらいにはファミリーベーシック、中１ではMSXを親に買ってもらい、雑誌に載っているBASICのコードを入力して遊んだり、それを改造したり、簡単な自作プログラムなどをつくったりして、基本的なBASICはわかっていたと思います。

中３くらいで、MSXのアセンブラの本を入手したのですが、すぐに挫折しました（笑）当時は、今のようなネットもなかったので、情報源が少なく、本もなかなか入手できなかったのを覚えています。

高校のころはパソコン通信！にはまっていて、ログを整理するツールをC言語で書いたりしましたが、プログラミングとはどんどん疎遠になっていったかもしれません。

就職してからは、Perl, PHP, Ruby, Python, Go言語など、Webプログラマとしてはや30年弱、現在にいたるといった感じです。

アセンブラはもとより、ゲームプログラミング自体ほとんど経験がありませんので、ハードルの高い挑戦だと思っています。

はじめて買ってもらったファミコンはベースボール、ゲームボーイはスーパーマリオランド。

好きな言語はPerl, Swiftです。

### どのゲーム機、開発環境にするか

8ビットのCPUで簡単なゲームがつくれたらいいなと思っています。C言語による環境もあるみたいなんですが、どうせだったら内藤さんのようにアセンブラ！やはり実機でも動かしたいので、モニタなどが必要ないゲームボーイがいいのかなと思い、調べると [RGBDS](https://rgbds.gbdev.io/) というアセンブラ開発環境があるみたいなので、これに挑戦しようと思います。

### 実機どうしよう問題

形から入るのが自分流なので、まずは実機がほしいと思い、秋葉原のレトロゲーム店にいってみると、かなり価格が高く、購入をあきらめました。当時の実機はバックライトがなく、とても暗かった覚えがあるので、[FunnyPlaying](https://funnyplaying.com/products/fpgbc-kit)社製のゲームボーイカラー互換機を注文しました。これならすべてのパーツが新品で手に入ります。届くのが楽しみです。しばらくしたら、実機のIPS液晶化も試してみたいです。

### 次回

次回は、まずなにから手を付ければいいのか考え、環境構築などもしていきたいと思います。
最新ターミナル「Ghostty」をインストールして触ってみた

# 概要

少し前から話題になっていた最新のターミナルエミュレータ「Ghostty」がリリースされたということで、早速触ってみました。
以下の画像はインストールして何も設定を変えていない状態の Ghostty の画面です。

![スクリーンショット 2024-12-27 22.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/8f431f97-71e2-e204-537c-d29c45344918.png)

ターミナルエミュレータというのは、Macでいうターミナルと同じ役割のソフトウェアです。他に有名なものだとiTeam2などがあります。
GhosttyはHashiCorp社のミッチェル・ハシモト氏が個人で開発したターミナルエミュレータで、オープンソースとして公開されています。

# Ghostty の特徴

Ghosttyの特徴として以下の3つが挙げられています。

* 高速
* 高機能
* プラットフォームネイティブ

実際に私が触ってみた感想としては

* 軽い
* デフォルトで良い感じなので追加の設定をゴリゴリ書かなくていい
* まだそこまで高機能とは言えないが、必要十分
* 格好良い

でした。

# 動作環境

GhosttyはMacOS、Linuxで動作します。
私の環境は以下です。

* MacOS(Ventura)
* zsh

# インストール

Ghosttyの公式サイトからダウンロード、インストールできます。
https://ghostty.org/download

![スクリーンショット 2024-12-27 23.00.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/89d2dd96-f001-11df-9771-2c8f1f88d30f.png)

# 触ってみる

インストールして立ち上げて、デフォルトのまま触ってみます。
基本的な操作感は他のターミナルと変わりありません。

![スクリーンショット 2024-12-27 22.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/e55c83bf-aee4-2448-763b-2953c8cce9bb.png)

よく使いそうなショートカットキーは以下です。

* `cmd⌘ + T` : 新規タブ
* `cmd⌘ + N` : 新規ウィンドウ
* `cmd⌘ + W` : 現在開いている画面を閉じる
* `cmd⌘ + D` : 画面を横に分割
* `cmd⌘ + [` `cmd⌘ + ]` : 分割した画面を移動

その他のショートカットキーを一覧するには以下のコマンドを打ちます。

```bash
> ghostty +list-keybinds
```

# 設定ファイル

まだGUIの設定はないので、設定ファイルを直接いじる必要があります。
Ghostty > Settings... から設定ファイルを開くか、MacOSの場合は以下のパスを直接開きます。

`$HOME/Library/Application\ Support/com.mitchellh.ghostty/config`

# テーマを変えてみる

以下のコマンドを打つとテーマをリストで表示できます。
表示を終了する場合は `esc` で閉じれました。

```bash
> ghostty +list-themes
```

![スクリーンショット 2024-12-27 23.07.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/e314dd08-b075-c9dd-b483-825a8da84d19.png)

設定ファイルに以下を追加してみます。

```bash
theme = Afterglow
```

Ghostty > Reload Configration をクリックすると設定が反映されました。
一部の設定はリロードでは反映されないようで、Ghosttyの再起動が必要です。

# クイックターミナルを設定する

作業中に「一瞬、別のターミナルウィンドウを開きたい」といったときに重宝するのがクイックターミナルです。iTeam2でいうドロップダウンターミナルと同じです。
設定ファイルに以下を追加します。

```bash
# クイックターミナルを上部に表示
quick-terminal-position = "top"
# グローバルのキーバインドを設定
keybind = "global:cmd+shift+space=toggle_quick_terminal"
```

では実際に使ってみます。
Ghosttyを開いているときに `cmd⌘ + shift + space` を押すと、画面上部から簡易的なターミナルが表示されました。

![スクリーンショット 2024-12-28 9.30.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/4da1f1bb-c5d4-470c-36d0-c047db826b20.png)

iTeam2 だとグローバルなホットキーとして設定できましたが、Ghosttyだとそれはできなさそうです。

# 設定ファイルの完成系

最終的な設定ファイルは以下のようになりました。

```bash
# フォント
font-family = "Menlo"
font-family = "ヒラギノ角ゴ ProN"
# テキスト選択時の背景色
selection-background = 4C585B
# フォントサイズ
font-size = 12
# テーマ
theme = Afterglow

# ウィンドウの余白
window-padding-x = 5
# ウィンドウの初期サイズ
window-height = 40
window-width = 120
# 背景の透明度
background-opacity = 0.8
# 背景をぼかす
background-blur-radius = 10

# クイックターミナルを表示する位置
quick-terminal-position = "top"
# クイックターミナルのキーバインド
keybind = "global:cmd+shift+space=toggle_quick_terminal"
```

最終的な見た目は以下のようになりました。

![スクリーンショット 2024-12-28 11.07.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27159/e86f6eea-6f6b-5395-5677-06ed45043b19.png)

# 感想

軽量で必要最小限のターミナルという印象です。
なんとなくオシャレな感じがするのでしばらく使ってみようと思います。
今後の追加開発にも期待です。
React で PDF.js を使って PDF を表示する

こんばんは。

今日は「ReactでPDF.jsを使ってPDFを表示する」について説明します。

# `pdfjs-dist`でできること
- 既存の`PDF`ファイルを取得し、ブラウザ内で表示する
- その上にテキストや画像をオーバーレイして表示する（※生成はしないが、画面表示での加工は可能）
- テキスト抽出や注釈表示など、PDFの読み取り系の処理

## パッケージのインストール

```
npm install pdfjs-dist
```

## PDF.js の設定

`pdfjs-dist`を`Webpack`などで利用する場合は、`Worker(pdf.worker.js)`の設定が必要です。
下記例では pdfjsDist を変数として読み込み、`GlobalWorkerOptions.workerSrc`に `pdf.worker.min.js`のパスを設定しています。

```
// pdfjsを読み込み
import * as pdfjsLib from 'pdfjs-dist';
import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.min.js';

// PDF.jsのワーカーの場所を設定
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;
```

npm でインストールした場合のパスや`bundler`の設定によって書き方が若干異なります。
`create-react-app + webpack`の場合は上記のようにインポートできます。

## React コンポーネントで表示

以下のサンプルでは、`MyPdfViewer`コンポーネントとして定義し、指定した`PDF`の1ページ目を `<canvas>`に描画しています。

```javascript
import React, { useEffect, useRef } from 'react';
import * as pdfjsLib from 'pdfjs-dist';
// v3系の場合、レガシービルドを利用（後述の注意点を参照）
import 'pdfjs-dist/legacy/build/pdf.worker.entry';
import pdfjsWorker from 'pdfjs-dist/build/pdf.worker.min.js';

// もし v2系や別のビルドを利用する場合は import が異なる場合があります
pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjsWorker;

type MyPdfViewerProps = {
  pdfUrl: string; // 表示したいPDFファイルのURL
};

const MyPdfViewer: React.FC<MyPdfViewerProps> = ({ pdfUrl }) => {
  const canvasRef = useRef<HTMLCanvasElement | null>(null);

  useEffect(() => {
    const loadPdf = async () => {
      if (!canvasRef.current) return;

      // PDF を取得
      const pdf = await pdfjsLib.getDocument(pdfUrl).promise;

      // ここではサンプルのため 1ページ目を表示
      const page = await pdf.getPage(1);
      const viewport = page.getViewport({ scale: 1.0 });

      // canvas のサイズを viewport に合わせて変更
      const canvas = canvasRef.current;
      canvas.width = viewport.width;
      canvas.height = viewport.height;

      // PDF.js でレンダリング
      const renderContext = {
        canvasContext: canvas.getContext('2d')!,
        viewport: viewport,
      };
      await page.render(renderContext).promise;
    };

    loadPdf();
  }, [pdfUrl]);

  return (
    <div>
      <canvas ref={canvasRef} />
    </div>
  );
};

export default MyPdfViewer;
```

### v3 系の場合の注意点

`pdfjs-dist`v3系を使う場合、`import 'pdfjs-dist/legacy/build/pdf.worker.entry';`のようにレガシービルドをインポートする必要があります。
これは、現状多くの React プロジェクトでは
pdfjs-dist/legacy/配下のビルドを使ったほうが無難なケースが多いためです。

`pdfjs-dist`は生成用途には向いていません。

# まとめ
- `pdfjs-dist(PDF.js)`は基本的に PDFを「表示」する用途で使う 
- PDFを「生成(作成)したい場合は、`jsPDF`などの別ライブラリを使用する

もし既存PDFをReactアプリ上でプレビュー表示したいのであれば、pdfjs-dist を使って上記のように `<canvas>`や`<div>`に描画できます。一方、新しいPDFファイルを生成しユーザーにダウンロードさせたり保存するには、別のライブラリを選択するのが一般的です。

今日は以上です。

ありがとうございました。
よろしくお願いいたします。
windowsもmacも要らない2024!!

# はじめまして
筆者的には、色々様々なジャンルを個人的にひっそりとブログを書いてたりしますが、今回個人としてのQiitaは、ここが最初であります。

# 唐突ですが１５年以上使ってるWindows,５年以上使ってるMacじゃないOS環境を使いたいと思った２０２４年

筆者は大体２０００年前後あたりからIT関連でお仕事をしていて、そこで以下のような流れでOSを利用してきた感じとなります。
- windows95
- windowsNT4.0
- windows2000
- windowsXP
- windows7
- windows10
- macos: Yosemite
- macos: Sierra
- macos: high sierra
- macos: Mojave
- macos: Catalina
- windows10(wsl1 - wsl2)
- windows11(wsl2)

そもそも昨今MacBookを使ってたのですが、使い勝手は非常に良い（特にMagicPadが最高）のですが、筆者が使っていたのが、あの悪名高いペチペチキーボード（２０１７年モデル）だったので、キーボードにゴミ入って利かなくなるのが「何度」もあり、それを気遣って使うのがしんどいって思ってたので、何か別の環境をって思ってた次第です。

そうするとWindows10からWSL(Linux用Windowsサブシステム)と言う環境が利用可能になり、またWSL2＋Tarminalによって、普通にMac+Iteam2に近い環境として利用できる（主にCtrl+Cとかでコピーなど）と、これまでWindowsのtarminal環境と言えばterraTarmやputtyなどが主だが、やっぱりMacのIterm2と比べると・・・って感じだったわけで、いやあこの環境の登場で、あれ「Macって要らないんじゃない！？」って思った次第です。

この辺の事もあり、それまでWindowsからMacに切り替えてたのを、またWindowsに戻ったわけですが、その時ついでに「どこでも開発ができる＝小型ノートPC＝軽量＝UMPC＝onegx1」これを買って、これにWSL2＋Terminal環境で開発をしばらく行っていました（２年ぐらい）

しかしこれ「中華PCの特徴」なのか、結構問題があり、たとえば以下のように
1. 誤って電源コード引っ掛けて、PD充電が外れた＝起動しなくなった＝文珍さん＝同じ中華PCを中古で購入
2. 年１のペースでバッテリが妊娠（膨張＝寿命）となる
3. その場合のバッテリ購入費用が１万円超えなので、コスト的に辛い

非常に完成度が良いのと、満足なのとCPUが７インチなのに、Corei5の１１世代＋１６GBメモリと、普通に「開発ができるレベル」で、そしてキーボードも「超変速」だけど、慣れると「普通に仕事ができるレベル」で、満足していたけど、一方の「電源周りが弱いと言うか、やばいレベル」なわけで、何か「これで良し」って感じの環境ってねえなあ！！って思っていました。

一方で２０２４年ってのは、ちょうど「2018/2019年発売の企業リース上がりのPCが中古市場に流れる年」であり、この「２０１８や２０１９年ってのは、実は””当たり年””」と言うべきもので、内容としては、第８世帯のIntelCPU搭載のノートPCであり、これって「２コア４スレッド→４コア８スレッド」にCPUが変わった年であり、なので単純に性能＝倍」と言う「実に当たり年」だったわけなんですよね。

なので「中古市場」や「秋葉原のジャンクコーナー」で「第８世帯IntelCPU搭載の企業ノートPCが格安で販売」されており、せっかくなので中華PCから、国産PCに乗り換えようと思い色々探すと「FujitusのU938/S」と言うのが「１３インチで９００g以下で、また非公式でDDR4メモリが最大３２GBさせるので、合計36GBのメモリとなるのが、１万５千円でジャンクPCとして売られてたので、それをGET」したわけなんですよね。

これに普通にWindows11Proを入れれば、OEMライセンスが認証されるので、普通に業務PCとして「普通に使える」し、メモリも36GBなので、普通に「開発」に使えるわけで、また「第８世代CPUと最新と、ベンチマーク的には結構違いがあるけど、一方で体感的には別にそれほど差が無い」事もあり、別にこれで普通にあと５年は戦えるかなあって思いました。

ただ、一方で「Windows辞めてMacに移行した理由の最たるもの＝Windows10が重すぎる」わけで、またWindowsアップデートが「超時間がかかる」とか、この辺もありMacに移行した（MacもOSアップデート時間かかるけど、Windowsほど頻繁じゃない）次第です。

なので、やっぱりWindows使ってると「無駄に重い」って感じてしまう事もあり、何か軽量なOS・・・Linux入れれば良いんじゃねえ！！って思いました。

色々調べてみると「LinuxMint」が良いとの事で、とりあえずインストールして使ってみましたが、昨今「普通にMicrosoftOffice使わない」事もあり、何か今記事を書いてる環境が正にLinixMint（Mate）です。

昔のWindowsと比べて(windows2000とかXP時代）の頃に、一度Linuxデスクトップ環境を暫く使ってたわけですが、いやあ「正直使い勝手悪い、重い、バグが多すぎる」と色々問題があって、結局Linuxデスクトップは使わなかったわけですが、いやあ昨今のLinuxデスクトップ（Mint）は普通に「Windowsと遜色ないレベル」なのかって思いました。

それに「軽い、アップデートもコマンドで一発終了でアップデート中も重くない」わけで、何かWindowsで無理してWSL2＋Terminal使うより、普通にLinuxデスクトップ環境でいいんじゃねえって今は思っています。

何か長々と記載しましたが「２０２４年の振り返り＝Linux環境とより仲良くなれた」わけで、仕事などでMSOffice使わないなら、思い切ってLinuxデスクトップも「全然あり」だと思いました。

以上ですが、興味持っていただいた方は、またよろしくお願いいたします。
DDoS攻撃とは？初心者でもわかる基本と仕組み

インターネットを利用していると"DDoS攻撃"という言葉を耳にすることがありますが、それが具体的に何を意味し、どのように行われるのか、わかりやすく解説します。
※この記事は、ChatGPTの出力を基に作成しています。

---

### **1. DDoS攻撃とは？**
DDoS攻撃（Distributed Denial of Service attack）とは、ウェブサイトやオンラインサービスを意図的に停止させることを目的とした攻撃のことです。

例えるなら、学校の給食配膳台に全生徒が一斉に押しかけてしまい、給食が配れなくなる状況と似ています。インターネットの世界では、**たくさんのコンピュータが一斉にサーバーにリクエストを送り、サーバーが対応しきれず動けなくなる**ことで、ウェブサイトが見られなくなります。

---

### **2. DDoS攻撃の仕組み**
攻撃者は、次のような流れでDDoS攻撃を行います：

1. **たくさんのコンピュータを利用する（ボットネット）**
   攻撃者は、ウイルスなどを使って他人のコンピュータやスマホを遠隔操作し、大規模な攻撃を仕掛けます。これらの操られた端末群を"ボットネット"と呼びます。

2. **大量のデータを送る**
   操作された端末から、一斉にターゲットのサーバーに大量のリクエストやデータを送りつけます。たとえば、「このページを見せて！」と何百万回も要求したり、意味のないデータを送りつけたりします。

3. **サーバーがパンクする**
   サーバーがこれらのリクエストを処理しきれなくなり、最終的には停止してしまいます。

---

### **3. DDoS攻撃で使われるデータの種類**
DDoS攻撃では、主に以下のようなデータが大量に送られます：

- **リクエストデータ**：
  ウェブサイトに対して「ページを表示して！」というリクエストを大量に送る。
  
- **ゴミデータ**：
  サーバーに意味のないデータを送りつけ、無駄な処理をさせる。

- **大きなファイル**：
  巨大なファイルをリクエストして、ネット回線やサーバーのメモリを消費させる。

- **DNSクエリ**：
  「このURLのIPアドレスを教えて！」という問い合わせを何千回も繰り返し、DNSサーバーを混乱させる。

- **SYNパケット**：
  通信を始めるフリをしてサーバーを"待ち状態"にさせ、リソースを奪う。

---

### **4. DDoS攻撃の目的**
DDoS攻撃は、以下のような目的で行われることが多いです：

- **嫌がらせ**：
  ターゲットのウェブサイトを止めて困らせる。

- **お金の要求**：
  「攻撃をやめてほしいならお金を払え」と脅す。

- **競争相手の妨害**：
  ビジネスで競合する企業のサービスを停止させる。

---

### **5. DDoS攻撃の防ぎ方**
DDoS攻撃を完全に防ぐのは難しいですが、次のような対策が取られています：

1. **防御システムの導入**
   サーバーを守るためのファイアウォールや専用のセキュリティサービスを利用します。

2. **異常なアクセスを早期に検知**
   いつもと違うアクセスパターンを検出し、攻撃を早めに察知する。

3. **サーバーを強化**
   大量のリクエストが来ても耐えられるように、サーバーの処理能力やネットワーク帯域を増強します。

---

### **6. まとめ**
DDoS攻撃は、インターネットを利用する上で避けられない脅威のひとつです。「大量のデータを送りつけてサーバーを止める」というシンプルな仕組みですが、影響は非常に大きく、多くのウェブサービスがこれに悩まされています。

私たち個人でも、ウイルスに感染しないように注意し、ボットネットの一部とならないようにすることで、DDoS攻撃の被害を減らすことができます。

DDoS攻撃の仕組みを理解し、インターネットの安全性を守る意識を持ちましょう！
Gitに追加してしまったファイルを削除する

## Gitに間違って.evnファイルを追加してしまった場合の削除方法

```bash
# ステージング環境から除外
git rm --cached .env
```
```bash
# コミット
git commit -m "Remove .env from version control"

# リモートリポジトリにも反映
git push origin master
```

#### .gitIgonreに忘れず追記
```:gitIgonre
.env
*.env.*
```
進捗報告 (2024-12-28 10:10:56)

# Twitter APIを用いた自動投稿システムの改良報告

## 概要
現在、ニュースAPIから取得した情報をOpenAI APIに送信し、生成されたラップ調のテキストをTwitter APIを通じて自動投稿するモジュールをAWS Lambda関数で実装しています。以前はテキストのみの投稿でしたが、現在は生成された画像も一緒に投稿するように改良しています。

## 現在の問題点
昨日の夜に実装した結果、実験で確認したところ、期待していた10件の投稿のうち、実際には1件しか投稿されませんでした。この問題の主な原因として考えられるのは、以下の点です。

1. **URLの重複管理**:
   - 現在、同じ投稿を避けるために、使用したURLをDynamoDBに保存し、1週間ごとにクリアする実装を行っています。この管理方法は、毎回DynamoDBからURLリストを取得し、ローカルで比較するため、効率が悪いと感じています。

2. **DynamoDBの履歴管理**:
   - 1週間ごとに全てのURLをクリアする方法では、クリアした翌日に前日と同じURLが投稿される可能性があります。このため、URLごとに保持する期間を設ける必要があります。

## 改善策
今日中に以下の改善を行う予定です。

1. **DynamoDBの履歴管理の修正**:
   - URLごとに保持する期間を設定し、1週間ごとではなく、各URLが保持される時間を指定します。

2. **効率的なURLの取得**:
   - DynamoDBからのURLリストを一括取得し、ローカルで比較するように修正します。これにより、処理の効率を向上させることができます。

3. **Lambda関数の軽量化**:
   - Lambda関数自体が重いため、処理を軽量化し、毎回10件の投稿が確実に行われるように改良します。

## 次のステップ
- DynamoDBの履歴管理を改善し、URLごとの保持期間を設ける。
- Lambda関数の処理を軽量化し、効率を向上させる。
- 改良後に、再度テストを行い、期待通りの投稿数を達成できるか確認します。

この改善策が成功すれば、よりスムーズに自動投稿を行えるシステムが構築できると考えています。同じ課題に直面している方々の参考になれば幸いです。今後の進捗についても随時報告していきます。
進捗報告 (2024-12-28 10:05:49)

# 音声入力介護記録システムの進捗報告

## 概要
音声入力介護記録システムは、前回の現場での試験運用が好評でした。多くのポジティブなフィードバックを得た一方で、いくつかの改善点も指摘されました。現在、そのご指摘をもとに修正を進めています。

## 修正内容
1. **現場での導入実験**
   - 修正が完了次第、遅番のスタッフが早めに出勤し、システムのセッティングを行います。その後、1日を通じて利用していただく予定です。
   - 次回の現場での導入実験は、2024年1月の前半を目指しています。

2. **Googleスプレッドシートの活用**
   - 現在のスプレッドシートでは、条件付き書式を複数設定できることに気づきました。これにより、同じセル内に異なるカスタム式を設定し、視覚的にデータを整理することが可能になりました。
   - 具体的には、服薬状況のチェックボックスに対して、服薬者の名前を表示できるように変更しました。これにより、誰が服薬を行ったかが一目でわかるようになります。

3. **服薬予定シートの改善**
   - 服薬予定に関するシートも整備しました。チェックボックスを用いて、服薬の予定がある人に対して自動的に色付けが行われる仕組みを導入しました。これにより、利用者がどのような服薬予定を持っているかを視覚的に把握しやすくなります。

## 次のステップ
次回の現場実験に向けて、これらの修正を踏まえつつ、さらなる機能改善や使いやすさの向上に努めていきたいと思います。現場のスタッフとの連携を強化し、実際の運用で得たフィードバックを反映することで、より良いシステムにしていく予定です。

今後も進捗を報告していきますので、同じような課題を抱えている方々にとっても参考にしていただければ幸いです。
行動経済学とは？

## はじめに
私は、エンジニアなので、普段、技術書を読むことがメインとなっています。年末年始、お店も空いていないし、普段と違う事をしてみようと思って、「行動経済学の逆襲」という本を購入して、読んでみました。仕事をする上での原理原則が書かれていたので、忘れないように整理してみました。

https://www.hayakawa-online.co.jp/shop/g/g0000611820/


## 行動経済学とは？

行動が必ずしも理性的でなく、感情的な判断や思い込みによる判断をしていることにフォーカスしている。人は、周りの出来事や他人の行動に振り回されやすいということのようだ。

## 主な原理原則　

**限定合理性**  
健康に気を付けている人でも、スーパーに行くと、__健康に良くないものを購入してしまう__  ことがある。買い物をする時、全ての商品を比較検討することはできず、目についた商品やセール品などを購入することが多い。

【以前まとめた記事】

https://qiita.com/kimuni-i/items/a893228ce1ab52d3133e

**プロスペクト理論**  
損失が同じ大きさの利益よりも心理的に強い影響を与える。つまり、損失の痛みは利益の喜びの約2倍強い。たとえば、1000円を得る喜びよりも、1000円を失う痛みの方が強いと感じる。行動を制約してしまうので、そのせいで、行動できていないのではないかと、行動できていない時に、言い訳をしないよう常に考えておく必要がある。言い訳ばかりして、行動出来ていない時に、振り返りたい。

**ヒューリスティックス**  
「お金持ちで成功しているビジネスマン」というカテゴリに、特定の人物（例えば、服装が豪華で、自信に満ちた言動をする人物）が典型的に似ていると感じた場合、その人物が実際にどのような職業をしているか、またその職業がどれほどお金持ちや成功しているかに __関係なく__ 、その人物を「ビジネスマン」としてすぐに分類してしまうことがある。人に過度に期待しないようにしようと思った。

**過信**
未来の出来事に対する予測を非常に正確だと信じ込むこと。しばしば __過去の経験__ や直感に基づいて行われ、実際には予測が外れる可能性があるにも関わらず、過度に自信を持つことになる。__「直感で動け」__ とか安易なフレーズに惑わされず、日々の努力の積み重ねが大事だと思った。

**フレーミング効果**
同じ治療法が以下のように提示された場合の例として、

ポジティブフレーム「この手術の成功率は80%です」
ネガティブフレーム「この手術の失敗率は20%です」

__前者の方が選ばれやすい__ のは、ポジティブなフレームが心理的に好まれるため。人々は失敗する可能性よりも、成功する可能性を強調された方が安心感を持ちやすくなるようだ。確かに、注意しないと、騙されるような気がした。


**社会的影響**  
他者の行動が個人の意思決定に影響を与えるという概念。たとえば、周囲の人々の選択が自分の選択に影響を与えることがある。今だと、SNSでバズっている時、自分も流されやすいという事を認識しておく必要がある。

**アンカリング**  
   初期の情報（アンカー）がその後の判断に強い影響を与える現象。たとえば、セール価格が「通常価格10,000円→セール価格5,000円」のように示されると、「5,000円が非常にお得に思える」と感じる。SNSでフォロワーが沢山いる人のバズっている言葉（アンカー）に流されて、無駄な物を購入してしまう。気をつけたい。

**ファスト＆スロー（Fast and Slow）**  
言葉は、刺激と反応のトリガーなので、刺激を受けた時、自分がどう反応しているのか、習慣的行動をしている時に、それは本当に妥当な判断なのか振り返って思慮深い判断に繋げたい。

| **思考タイプ**     | **システム1** (速い思考)                  | **システム2** (遅い思考)                  |
|------------------|--------------------------------------|--------------------------------------|
| **主な活動**      | 日常的な行動や判断（例：顔を見て感情を判断、慣れた道の運転） | 複雑な問題解決、計算、分析          |
| **使用場面**      | 習慣的行動、パターン認識、簡単な判断      | 計画的な意思決定、問題解決、深い思考 |
| **依存する要素**  | 記憶や過去の経験、直感                  | 論理的分析、計算、事実に基づく判断    |

## 整理してみて
普段、合理的に判断しているつもりだったけれど、結構、流されて生きているんだなと思った。来年は、まとめた内容を意識して、周りに流されないように注意して、オリジナリティに溢れた一年にしたいと思いました。読んでいただいた方々も、そういった一年になるようお祈り致します。

読んでいただいてありがとうございました。
Burner

[Previous << EVM](https://qiita.com/flowcadence/items/84d2ab27cfc5080c92e6)
[Next >> スマートコントラクト開発(dApp開発)に関した技術情報](https://qiita.com/flowcadence/items/d3a67b541096d514457e)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-developers

<h1>Contract</h1>

Burnerコントラクトは、リソースが破棄(destroy)された時に実行されるカスタムロジックをリソースが定義する方法を提供しています。この機能を利用したいリソースは、`Burner.Burnable` インターフェースを実装します。このインターフェースは、カスタムロジックを含んだ`burnCallback()` 関数を含める必要があります。

リソースに関係なく、すべてのユーザーおよび開発者は、リソースを破棄する時に `destroy` ではなく `Burner.burn()` を使用することが推奨されます。

| Network | Contract Address |
|:-:|:-:|
| Emulator | `0xee82856bf20e2aa6` |
| Cadence Testing Framework | `0x0000000000000001` |
| Testnet | [`0x294e44e1ec6993c6`](https://contractbrowser.com/account/0x294e44e1ec6993c6) |
| Mainnet | [`0xd8a7e05a7ac670c0`](https://contractbrowser.com/account/0xd8a7e05a7ac670c0) |

*Last updated on **Dec 17, 2024** by **j pimmel***

翻訳元

https://developers.flow.com/build/core-contracts/burner

***

<b>[Previous << EVM](https://qiita.com/flowcadence/items/84d2ab27cfc5080c92e6)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Burner)

<b>[Next >> スマートコントラクト開発(dApp開発)に関した技術情報](https://qiita.com/flowcadence/items/d3a67b541096d514457e)</b>
声でつながるAIとの対談: 挿入曲 #11 - Scat, Jazz, Soul, Piano【Suno AIでつくった楽曲】 v4 & Custom Mode: On 【動画 2分19秒】【YouTubeチャンネルからの転記です】

この記事は、わたしの[YouTubeチャンネル](https://bit.ly/Yamanaka-YouTube "Living without things. 持たない生き方 手放す生き方")にある公開動画を転記しております。
( どこかのタイミングで、プログラミング-Google Apps Script or iPaaS-Zapier をつかって自動転記させる予定です )

転記のための時間コストを少なくしたいので、文字装飾( Markdown記法 )を極力つかわずに書いております。

こちらが動画内容です👇

***

![01 YouTubeサムネイル & 再生中の画像 Suno AI _ 声でつながるAIとの対談_ 挿入曲 #11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386308/ae0eae53-9312-a47e-d303-b976bc111170.png)





* # 動画URL
    * https://youtu.be/p-LoShPY9-w

<br>

* # 動画タイトル
    * 声でつながるAIとの対談: 挿入曲 #11 - Scat, Jazz, Soul, Piano【Suno AIでつくった楽曲】 v4 & Custom Mode: On 【動画 2分19秒】

<br>

* # 動画の説明欄(一部を抜粋)

📅撮影日 = 2024-12-19(木)

Suno AIとは、文章から音楽を生成することができるAI( Text-to-Music-AI )です。
わたしは、2024-04-02(火)に初めてSuno AIで有償プランを契約してから、時々楽曲をつくって遊んでいます。

🎦【Suno AI】文章から音楽を生成するAI( Text-to-Music-AI )で、3分間で2曲、6分間で4曲作りました【試聴可能】1)伴侶の曲 2)税理士の曲【動画 16分11秒】
https://youtu.be/QKfhk4HgQ_g

🎦“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe

🎦“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


今回は、Suno AIでつくった曲を WAV で出力してから、動画編集いたしました。

“声でつながるAIとの対談”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghOpTHU0rmfXSgjqV1_j6Eao
👆の挿入曲としてつかう予定です。

ぜひ聴いてみてください。
そして、ぜひみなさんも、ご自身の対談、番組、コンテンツのために楽曲をつくってみてください！

作曲日:
2024-12-04(水)

Suno AI 契約の種類:
Pro Plan

Suno AI Version:
v4

楽曲の正式名称:
声でつながるAIとの対談: 挿入曲 #11 - AI Voice Talks: Minimal Melody

Suno AI Library URL:
https://bit.ly/AI-Voice-Talks-Minimal-Melody-11

Custom Mode: On

Audio Inputs: Not Used

With Vocals:


---


Lyrics:

[vers1]
Scatter
Na na na na…


[vers2]
Scatter
Tu lu lu lu…

[Chorus]
Scatter
Woh wah ah ah…


---


Suno AIへの指示文章( プロンプト/Prompt ): Custom Modeの場合は”Style of Music”を指定します。


🇬🇧English

[Jazz][Bossa][Piano][220 Seconds][Break][Outro]


🇯🇵日本語訳

[ジャズ][ボサ][ピアノ][220秒][ブレイク][アウトロ]


---


Suno AI 公式URL
https://accounts.suno.ai


---


🎥この動画と関連が強いわたしの動画
・“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe


・“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


・“声でつながるAIとの対談”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghOpTHU0rmfXSgjqV1_j6Eao


🎥Shortened URL for this video | この動画の短縮URL
https://bit.ly/3P16OfV
Pythonのwhileループについての学習まとめ


# Pythonの`while`ループについての学習まとめ

---

## **1. `while`ループとは？**
`while`ループは、**条件が`True`の間**、特定の処理を繰り返し実行するために使用されます。

### **基本構文**
~~~python
while 条件:
    実行する処理
~~~

- **`条件`**:
  - 繰り返し処理を実行する条件を指定します。この条件が`False`になるとループが終了します。

---

## **2. `while`ループの使用例**

### **例1: 0から9までの数値を出力**
~~~python
count = 0
while count < 10:
    print(count)
    count += 1
~~~

#### **出力**
~~~plaintext
0
1
2
3
4
5
6
7
8
9
~~~

---

## **3. 無限ループと`break`・`continue`の活用**

### **無限ループ**
条件を`True`にすると無限ループを作成できます。無限ループを制御するために、`break`や`continue`を使用します。

---

### **例2: 年齢入力の例**
以下のコードは、ユーザーから年齢を入力させ、正しい値が入力されるまで繰り返します。

~~~python
while True:
    age = int(input("あなたは何歳ですか？"))
    if not 0 <= age < 120:
        print("入力された値は正しくありません")
        continue  # 次のループへスキップ
    else:
        print(f"あなたは{age}です")
        break  # ループを終了
~~~

#### **動作解説**
1. 年齢が`0`以上`120`未満でない場合、エラーメッセージを表示して`continue`します（次のループを開始）。
2. 正しい年齢が入力されると、ループを終了します。

---

## **4. 実践練習: カジノゲームの選択**

以下のコードは、年齢制限を確認し、入場可能な場合にゲームを選択させるプログラムです。

~~~python
age = int(input("何歳ですか？"))
limit_age = 18
casino_game = """好きなゲームを選択してください
1: ルーレット
2: ブラックジャック
3: ポーカー"""

if age >= limit_age:
    print("どうぞお入りください")
    while True:
        game = input(casino_game)
        if game == "1":
            print("あなたはルーレットを選びました")
            break
        if game == "2":
            print("あなたはブラックジャックを選びました")
            break
        if game == "3":
            print("あなたはポーカーを選びました")
            break
        else:
            print("1~3を選んでください")
            continue
else:
    print("あなたは入場できません")
~~~

#### **動作解説**
1. 入力された年齢が制限（`18`歳以上）を満たしているか確認。
2. 年齢が条件を満たしていれば、ゲームの選択画面を表示。
3. 入力が適切でない場合は、`continue`で再入力を促します。

---

## **5. ポイント**

1. **`while`ループ**:
   - 条件が`True`の間、ループ処理を続けます。
   - 無限ループを作成したい場合、条件を`True`にする。

2. **`break`**:
   - ループを終了します。
   - 条件を満たした際にループから抜けたい場合に使用。

3. **`continue`**:
   - 現在のループ処理をスキップして次のループへ進みます。

4. **注意点**:
   - 無限ループが発生しないよう、`break`で終了条件を設定すること。
   - ユーザー入力を使用する場合、入力値が期待通りであるか検証すること。

---

## **まとめ**
- `while`ループは、条件が`True`の間、処理を繰り返します。
- 無限ループには`break`と`continue`を組み合わせることで安全に制御できます。
- 実際のプログラムでは、ループの終了条件を慎重に設計することが重要です。
Pythonのforループとrange関数の学習まとめ


# Pythonの`for`ループと`range`関数の学習まとめ

---

## **1. `for`ループとは？**

`for`ループは、リストや文字列などの「反復可能なオブジェクト（イテラブル）」の要素を1つずつ取り出して処理するためのループ構文です。

### **基本構文**
~~~python
for 変数 in イテラブル:
    処理
~~~

- **変数**: イテラブル（例: リスト、文字列など）の各要素が順番に代入されます。
- **イテラブル**: リストや文字列など、反復可能なオブジェクト。
- **処理**: 各要素に対して実行するコード。

---

### **例1: リストの要素を処理**
~~~python
fruits = ["apple", "grape", "orange", "peach"]

for fruit in fruits:
    print(f"I love {fruit}!")
~~~

#### **出力**
~~~plaintext
I love apple!
I love grape!
I love orange!
I love peach!
~~~

---

### **例2: 文字列を処理**
~~~python
for char in "hello world":
    print(f"char: {char}")
~~~

#### **出力**
~~~plaintext
char: h
char: e
char: l
char: l
char: o
char:  
char: w
char: o
char: r
char: l
char: d
~~~

---

### **用語解説**
1. **イテレーション**:
   - 「ループでオブジェクトの要素を1つずつ取り出す処理」のこと。
2. **イテラブル**:
   - リスト、文字列、タプル、辞書など、ループ処理が可能なオブジェクト。
3. **`in`キーワード**:
   - `for`ループ内の`in`は「イテラブルの中の要素を順番に取り出す」意味で、`in`演算子とは異なります。

---

## **2. `range`関数とは？**

`range`関数は、指定された範囲の連続した数値を生成するためのPythonの組み込み関数です。ループ処理で連続した数値を使いたい場合に非常に便利です。

### **基本構文**
~~~python
range(start, stop, step)
~~~

### **引数の説明**
1. **`start`**（省略可能）:
   - 連番の開始値（省略時は0から）。
2. **`stop`**:
   - 連番の終了値（この値は含まれません）。
3. **`step`**（省略可能）:
   - 連番の間隔（省略時は1）。

---

### **例1: 0から9までの連続した数値を生成**
~~~python
for i in range(10):
    print(i)
~~~

#### **出力**
~~~plaintext
0
1
2
3
4
5
6
7
8
9
~~~

---

### **例2: 開始値と終了値を指定**
~~~python
for i in range(5, 10):
    print(i)
~~~

#### **出力**
~~~plaintext
5
6
7
8
9
~~~

---

### **例3: ステップを指定**
~~~python
for i in range(1, 10, 2):
    print(i)
~~~

#### **出力**
~~~plaintext
1
3
5
7
9
~~~

---

### **例4: 逆順の数値を生成**
~~~python
for i in range(10, 0, -2):
    print(i)
~~~

#### **出力**
~~~plaintext
10
8
6
4
2
~~~

---

## **3. 応用例**

### **`for`ループと`range`の組み合わせ**
`range`を使うことで、指定された範囲の数値に対して効率的に処理を行えます。

#### **例: 指定回数の文字列出力**
~~~python
for _ in range(5):
    print("Hello, Python!")
~~~

#### **出力**
~~~plaintext
Hello, Python!
Hello, Python!
Hello, Python!
Hello, Python!
Hello, Python!
~~~

---

### **FizzBuzz問題**
1から50までの数値をループで処理し、以下のルールで出力するプログラム:
1. 数字が3で割り切れる場合: `Fizz`
2. 数字が5で割り切れる場合: `Buzz`
3. 両方で割り切れる場合: `FizzBuzz`
4. それ以外の場合はそのまま数字を出力。

~~~python
for i in range(1, 51):
    if i % 3 == 0 and i % 5 == 0:
        print(f"{i}: FizzBuzz")
    elif i % 3 == 0:
        print(f"{i}: Fizz")
    elif i % 5 == 0:
        print(f"{i}: Buzz")
    else:
        print(i)
~~~

#### **出力例**
~~~plaintext
1
2
3: Fizz
4
5: Buzz
6: Fizz
...
15: FizzBuzz
...
50: Buzz
~~~

---

## **4. 注意点**
1. **`range`関数の終了値は含まれない**:
   - 例: `range(10)` は 0 から 9 までの範囲。
2. **`start` と `step` の省略**:
   - `range(10)` は `range(0, 10, 1)` と同じ。
3. **負のステップ**:
   - `range` に負の値を指定すると逆順の連番を生成できます。

---

## **まとめ**
- **`for`ループ**はリストや文字列などのイテラブルなオブジェクトを操作するのに最適。
- **`range`関数**は連続した数値を効率的に生成し、`for`ループと組み合わせることで柔軟な繰り返し処理を実現。
- 応用例として、特定の条件（例: FizzBuzz）に応じた処理を行うことも可能。
Linux Network Namespace（その３：Routing）

# Network Namespaceで基本ルーティング
Network Namespaceシリーズその３では、基本的なルーティングを実現してみる。

## ネットワーク
対象ネットワークは下記。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/21b7a87e-477f-fc6f-3224-b6d7a8690c75.png)

ほぼ自明。３つのネットワークが存在し、両端のPCどうしが疎通を行えるようにするもの。

## Network Namespace
上記ネットワークを、Network Namespaceで表現すると下記となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/70afcff8-371e-0eca-fa4c-28aa4d7cfb06.png)

```shell
sudo ip link add name veth11 type veth peer name veth22
sudo ip link set veth11 up
sudo ip link set veth22 up
sudo ip addr add 10.1.1.1/24 dev veth11
sudo ip addr add 10.1.1.2/24 dev veth22
```

- 仮想ネットワークインターフェースPairであるveth11およびveth22作成
- それらをUpし、IPアドレスアサイン

```shell
sudo ip netns add ns1
sudo ip link add name veth1 type veth peer name ns1-veth
sudo ip link set ns1-veth netns ns1
sudo ip link set veth1 up
sudo ip addr add 172.16.1.1/24 dev veth1
sudo ip netns exec ns1 ip link set lo up
sudo ip netns exec ns1 ip link set ns1-veth up
sudo ip netns exec ns1 ip addr add 172.16.1.11/24 dev ns1-veth
```

- Namespace ns1作成
- 仮想ネットワークインターフェースPairであるveth1およびns1-veth作成
- ns1-vethをns1に配置
- veth1をUpし、IPアドレスアサイン
- ns1のループバックおよびns1-vethをUp
- ns1のns1-vethにIPアドレスアサイン

```shell
sudo ip netns add ns2
sudo ip link add name veth2 type veth peer name ns2-veth
sudo ip link set ns2-veth netns ns2
sudo ip link set veth2 up
sudo ip addr add 172.16.2.1/24 dev veth2
sudo ip netns exec ns2 ip link set lo up
sudo ip netns exec ns2 ip link set ns2-veth up
sudo ip netns exec ns2 ip addr add 172.16.2.22/24 dev ns2-veth
```

ns2向けに、ns1と同様の内容を実施。

```shell
sudo sysctl -w net.ipv4.ip_forward=1

sudo ip netns exec ns1 ip route add 10.1.1.0/24 via 172.16.1.1
sudo ip netns exec ns1 ip route add 172.16.2.0/24 via 172.16.1.1
sudo ip netns exec ns2 ip route add 10.1.1.0/24 via 172.16.2.1
sudo ip netns exec ns2 ip route add 172.16.1.0/24 via 172.16.2.1
```

- ルーティングON（net.ipv4.ip_forward=1）
- ns1およびns2にてスタティックルート設定

## 検証
ルーティングテーブルは下記となる。まずは、オリジナル（1st）Spaceの状況。

```
$ ip route

10.1.1.0/24 dev veth11 proto kernel scope link src 10.1.1.1 
10.1.1.0/24 dev veth22 proto kernel scope link src 10.1.1.2 
172.16.1.0/24 dev veth1 proto kernel scope link src 172.16.1.1 
172.16.2.0/24 dev veth2 proto kernel scope link src 172.16.2.1 
```

ns1のルーティングテーブルは下記。（ns2もほぼ同様。）

```
$ sudo ip netns exec ns1 ip route
10.1.1.0/24 via 172.16.1.1 dev ns1-veth 
172.16.1.0/24 dev ns1-veth proto kernel scope link src 172.16.1.11 
172.16.2.0/24 via 172.16.1.1 dev ns1-veth 
```

左のPCから右のPCへping実行。
```
$ sudo ip netns exec ns1 ping 172.16.2.22 -c 1
PING 172.16.2.22 (172.16.2.22) 56(84) bytes of data.
64 bytes from 172.16.2.22: icmp_seq=1 ttl=63 time=0.042 ms

--- 172.16.2.22 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.042/0.042/0.042/0.000 ms
```

成功。

EOF
Ubuntuのターミナルのカーソル点滅をOFFにしたい

# 端末のカーソル点滅をOFFにしたい場合
gnome-terminalへの設定なので、端末上にて以下のコマンドを実行する。
```bash
gsettings set org.gnome.desktop.interface cursor-blink false
```

参考

https://askubuntu.com/questions/49606/how-do-i-disable-the-blinking-cursor-in-gnome-terminal

MATEとかだったら、コマンドが若干変わる↓
```bash
gsettings set org.mate.interface cursor-blink false
```
自分のubuntuがどのコマンドになるのかは以下のコマンドで調べられる。
```bash
gsettings list-recursively | grep blink
```

# terminatorでカーソル点滅をOFFにしたい場合
terminator上で右クリック→設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2320370/51680fa7-a74a-90b0-dd28-f9d1636db350.png)
terminatorの設定が開くので、プロファイルタブ→Blinkのチェックボックスを外す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2320370/10e31ed8-71fa-2d96-a30c-237ca3c0accf.png)

# vimでカーソル点滅をOFFにしたい場合
vimrcに以下を追加。
```
set guicursor=a:blinkon0
```