OmniAICreator/Qiita-1.07M huggingface dataset:
ChatGPTと巡るレトロフューチャー: 日本のアーケード街の魅力再発見

# はじめに
こんにちは！AIの世界にちょっと足を踏み入れて、日本のアーケード街の魅力を再発見するためにChatGPTを活用してブログ記事を生成するということに取り組んでみました。

https://livlog.xyz/machikado/

# ChatGPTって何？
ChatGPT、これはただのAIじゃありません。会話するだけでなく、APIを利用してシステムと連携することで、情報を自動で集めて、それを面白く、読みやすいブログ記事に変えてくれるんです。日本各地のアーケード街のストーリーを、まるで小説のように紡いでくれます。

# アーケード街との出会い
日本のアーケード街は、商業と文化の中心地として長い歴史を持っています。江戸時代から続くもの、戦後の高度経済成長期に形成されたものなど、その成り立ちや背景は多岐にわたります。これらの街は、地域の特色や文化を反映しており、訪れるたびに新しい発見や魅力があります。古い建物や伝統的な店舗、地域のグルメやイベントなど、アーケード街は日本の生活文化のエッセンスを凝縮しています。ChatGPTの力を借りて、これらの街々の物語を新しい視点から紐解きます。

# AIのチカラで深く掘り下げる
ChatGPTはただの情報収集に留まらず、その街の歴史や文化、住人の日常まで、深く掘り下げてくれます。まるでその街を歩いているかのような、リアルな体験を提供してくれるんです。

## AI技術を用いた街角探訪プロセス
1. **緯度経度の付与**: スクレイピングしたアーケード街のデータに緯度経度情報を付与します。
2. **Googleマップとの名寄せ**: 収集したデータをGoogleマップの情報と照合し、名寄せを行います。
3. **Googleマップの口コミ取得**: 各アーケード街に関する口コミ情報を取得します。
4. **ブログ記事の自動生成**: 収集した情報を基に、AI技術を活用して魅力的なブログ記事を自動生成します。
5. **写真情報の連携**: アーケード街の写真や画像情報を収集し、記事や情報ページと連携します。

![アーケード街の写真](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/07c4d688-b4e5-fba0-d470-4da0efd0e225.jpeg)

# 結論
ChatGPTを使って、日本のアーケード街の新たな魅力を発掘しましょう。AIの力で、歴史と現代が織りなす街の物語を、新しい角度から楽しむことができます。プロジェクトの詳細については[こちら](https://protopedia.net/prototype/4133)をご覧ください。

https://protopedia.net/prototype/4133

# 最後に
この記事をきっかけに、AIと一緒に、日本のアーケード街を新しい目で見てみる旅を始めてみませんか？知られざる街角の魅力が、きっとあなたを待っていますよ！

*注：この記事はChatGPTのアドベントカレンダー2023の一環として作成しました。
初めてのTypst

# はじめに
みなさん、TeXを使っていますか？
日々のレポートやノート、論文などでTeXを多用している方、これからTeXを使おうとしている方は多いのではないでしょうか。
TeXは、多数の数式などを含む場合や、細かな書式設定をしたい場合、繰り返しの処理が多い場合などにWordなどのワードプロセッサに比べて非常に便利です。
けど、TeX を使っていて（もしくは使おうとして）正直次のような不満を感じた方も多いのではないでしょうか。

- 環境構築がめんどくさそうで始めるのが億劫
- なんか、文字数多くない？
- PDFへのコンパイルが遅い

そこでおすすめなのが[**Typst**](https://typst.app)というソフトです。

Typstは、2023春にパブリックベータが公開された非常に新しいシステムです。
記法がシンプルでわかりやすい上、**Rust**で書かれており、非常にモダンであることと、コンパイルなどが早いことなどが特徴です。

# インストールする

## macOSの場合
Homebrewを通してインストールできます。
```
brew install typst
```
をターミナルで実行しましょう。

## Linuxの場合
[こちら](https://repology.org/project/typst/versions)からインストールできます。

## Windowsの場合
wingetを用いてインストールできます。
```
winget install --id Typst.Typst
```


# 文章を作る

## 初めての文章
早速、文章を作ってみましょう。お好きなエディタをお使いください。

まずは initial.typ というファイルを作成し、以下の文をコピペしましょう。
```
This is my first Typst document.
```

その後、以下のコマンドを実行します。

```
$ typst compile initial.typ
```

すると、以下のような文章ができます。

![initial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657921/a19163bd-8fef-279e-3cbe-28f5d10e4213.png)

とても簡単ですね！

```
typst compile initial.typ [任意の名前].pdf
```

などとすると出力ファイルの指定もできます。（出力ファイルは、pdf以外にもpngなどに対応しています）

## 日本語を書く
デフォルトの状態でも日本語は書けますが、ややフォントが変です。
なので、以下のようにドキュメントの最初でフォントを指定しましょう。
```
#set text(font: "Hiragino Kaku Gothic ProN")
```

なお、このフォントは他の環境だと使えないかもしれません。
```
$ typst fonts
```
上のコマンドを実行すると、使用可能なフォント一覧が出てきますので、その中から良さげなものを選びましょう。

## 文字修飾
Typstは、Markdown形式などと非常によく似た記法ができます。
以下のように打ってみましょう。

```
#set text(font: "Hiragino Kaku Gothic Pro")

= 大見出し

== 中見出し

=== 小見出し

= 文字修飾
太字にする方法には2種類あります。
 * アスタリスクで囲む * または #strong[strong関数] を使う

1行空白行を挿入するか、`\` で改行されます。\
`#linebreak()` や `#parbreak()`などの関数もあります。#parbreak()

リンクも#link("http://typst.app")[ここをクリック] のように挿入できます。

番号をつけない箇条書きは`-`を使います。
- 一個目
- 二個目
- 三個目

番号付きの箇条書きは`+`を使います。
+ 一個目
+ 二個目
+ 三個目
```
これをコンパイルすると、次のようになります。
![markup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657921/4b3bd387-6654-399e-b3d6-ddcead441c8e.png)

非常にシンプルに文章を書けるのがわかります。

## 数式
```
#set text(font: "Hiragino Kaku Gothic Pro")
#set math.equation(numbering: "(1)")

二次関数は、次のように書けます。
$ y = a x^2 + b x + c $

@eqation[式] のように、`<>`でラベルを付けて、`@`で呼び出すことも可能です。
$  integral_(0)^(1) sin theta dif theta $ <eqation>

シグマは、`sum`コマンドで書けます。
$ sum_(k=1)^oo (-1)^(k-1)/k = log 2 $
```

![math.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657921/668df959-cc8d-5ca7-8a6d-6d938484da52.png)

## 関数
変数や`for`文、その他自作関数などを使用することができます。
```
#set text(font: "Hiragino Kaku Gothic Pro")
#set math.equation(numbering: "(1)")

#for i in range(5){
  [#i 番目です]
  parbreak()
}

#let num = 1

numは #num です。

#let add(a, b)={
  a + b
}

1 + 2は、#add(1, 2)です。
```
このコードをコンパイルすると、以下のようになります。
![vari.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657921/94beac65-2eb7-771e-7280-69179e02feae.png)

# Typstをもっと使いこなす
Typst は新しいため、そこまで解説等があるわけではありません。
[公式ドキュメント（英語）](https://typst.app/docs)はある程度充実しているので、使い方がわからない場合はぜひ調べてみましょう。

ぜひTypstを使いこなしてください〜
Chromeからドラッグドロップして作ったWEBサイトショートカットが上手く開かない件の対応

# 『上手く開かない』とは

こんな風にドラッグドロップしてショートカット作成しても…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/c9bc22a6-2deb-9e0a-658b-0bf5d9bec41c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/f9894082-3ff1-17c3-207a-585244cd8c4f.png)

ショートカット開くとこうなっちゃう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/9bfaacdc-9be9-37cf-f8db-ceb738fd28ce.png)

> [InternetShortcut]
> URL=サイトのURL

「Chromeのブックマークに登録でいいじゃん」というのもよぎりました。
でも『各種ファイルとWEBサイトショートカットを一緒のフォルダーに入れておきたい』という事情がありました。

# 『引数を付けてChrome起動』で対応

こういったショートカットを作りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/33a2ddf3-4ba8-0346-4686-5e13ec6b6d3e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/40c4924c-147e-cc2c-415f-4bc55ed2a771.png)

```:リンク先
"C:\Program Files\Google\Chrome\Application\chrome.exe" WEBサイトのUR
L
```

```:作業フォルダー
"C:\Program Files\Google\Chrome\Application"
```

ドラッグドロップで気軽にショートカットが作れないのでちょっと不便。
でも『WEBサイトのショートカットファイル』というもの自体を作る機会が少ないので、「これでヨシッ」としました。

# バージョン

Microsoft Windows [Version 10.0.19045.3803]
Google Chrome 120.0.6099.111（Official Build） （64 ビット）
[AWS]Kendra概略

# 1.Kendraとは？

・機械学習を利用したインテリジェント検索サービス
・自然言語処理 (NLP) を使用
・質問に対して、回答と参照コンテンツの場所を示すことが可能。

# 2.Kendraを使うメリット
・セマンティックサーチが可能(自然言語で質疑応答ができる)
・社内文書のFAQが簡単に作れる

# 3.Kendraが扱えるものは？
・非構造化文書
　(HTML、WordやExcelなどのOffice文書など)
  →取り込みデータはUTF-8エンコードが前提。
・構造化文書
　 (ヘッダーに質問項目と回答項目、URL項目を設けているcsvなど)

上記をインデックス化する。


# 4.対応言語は？

公式サイトにまとめられている。そこそこカバーされている印象。

https://docs.aws.amazon.com/kendra/latest/dg/in-adding-languages.html

# 5.どうやってデータを持ってくるの？
・「コネクタ」を使用する。
・AWSで提供されているものもあるし、開発も可能。
・開発する場合は、「Kendra API」を使う。
・コネクタ経由で取得したデータをインデックス化する。

https://aws.amazon.com/jp/kendra/connectors/

# 6.その他
・学習済みモデルを使用。
・ユーザーのリアクションの下記２つは学習される。
　① 回答候補で選ばれなかったもの
  ② ユーザーのフィードバック(役に立ったOR立たなかった、のクリック数)
C99 の fetestexcept(3) でプログラムを落とさずに浮動小数点例外状態を検知する

IEEE 754 では浮動小数点例外をフラグとして保持しておく機構が決められています。
ゼロ割やオーバーフローなどの処理をしてしまったときに、シグナルでプログラムを落とさないとすれば、 NaN や Inf などの特別な値で知らされるわけですが、たとえば NaN が入った数値リストの最大をとれば NaN はなかったことになるべき、などとして、大域的には例外があったことが分からなくなってしまうことがあります。
でも、プロセッサにフラグがあるので、大きなプログラムのどこかでゼロ割が発生したことだけ知らせてくれればよい、という場合には使えます。C99 では fetestexcept(3), feclearexcept(3) を使います。

```c
#include <stdio.h>
#include <string.h>
#include <float.h>
#include <fenv.h>
#pragma STDC FENV_ACCESS ON

void
fecheck(void)
{
  int fe;
  fe = fetestexcept(FE_ALL_EXCEPT);
  printf("FPSTATUS %4s %4s %4s %4s %4s\n",
    ((fe & FE_INVALID) ? "INVL" : "----"),
    ((fe & FE_DIVBYZERO) ? "DIVZ" : "----"),
    ((fe & FE_OVERFLOW) ? "OVFL" : "----"),
    ((fe & FE_UNDERFLOW) ? "UDFL" : "----"),
    ((fe & FE_INEXACT) ? "INEX" : "----"));
}

int
main()
{
  double a = 1.0;
  double b = 2.0;
  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  printf("1/2=%g\n", a/b);
  fecheck();
  b = 0.0;
  printf("1/0=%g\n", a/b);
  fecheck();
  b = 3.0;
  printf("1/3=%g\n", a/b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  printf("1/3=%g\n", a/b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  a = 0.5;
  b = DBL_MAX;
  printf("0.5/DBL_MAX=%g\n", a/b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  a = 2.0;
  printf("2*DBL_MAX=%g\n", a*b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  a = 0.0;
  b = 0.0;
  printf("0/0=%g\n", a/b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  a = 1.0;
  memcpy(&b, "\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 8);
  printf("1*qNaN=%g\n", a*b);
  fecheck();

  feclearexcept(FE_ALL_EXCEPT);
  fecheck();
  a = 1.0;
  memcpy(&b, "\x7F\xFF\xFF\xFF\xFF\xFF\xF7\xFF", 8);
  printf("1*sNaN=%g\n", a*b);
  fecheck();

  return 0;
}
```

実行結果

```
$ gcc -O0 fetestexcept.c -lm
$ ./a.out
FPSTATUS ---- ---- ---- ---- ----
1/2=0.5
FPSTATUS ---- ---- ---- ---- ----
1/0=inf
FPSTATUS ---- DIVZ ---- ---- ----
1/3=0.333333
FPSTATUS ---- DIVZ ---- ---- INEX
FPSTATUS ---- ---- ---- ---- ----
1/3=0.333333
FPSTATUS ---- ---- ---- ---- INEX
FPSTATUS ---- ---- ---- ---- ----
0.5/DBL_MAX=2.78134e-309
FPSTATUS ---- ---- ---- UDFL INEX
FPSTATUS ---- ---- ---- ---- ----
2*DBL_MAX=inf
FPSTATUS ---- ---- OVFL ---- INEX
FPSTATUS ---- ---- ---- ---- ----
0/0=-nan
FPSTATUS INVL ---- ---- ---- ----
FPSTATUS ---- ---- ---- ---- ----
1*qNaN=-nan
FPSTATUS ---- ---- ---- ---- ----
FPSTATUS ---- ---- ---- ---- ----
1*sNaN=-nan
FPSTATUS INVL ---- ---- ---- ----
```

とりあえず手元の複数環境で動いたので十分ポータブル。もともと C99 なんですからポータブルに決まっているだろう、とは思うのですが必須でもないので。なお、#pragma STDC FENV_ACCESS ON は GCC は実装していないというし icc では未実装って警告が出るので、必要なのかよくわかりません。
企業の方に勧めるGoogle Workspaceの普及

# はじめに

この記事は、Qiita Advent Calendar 22日目の記事です。
以下の記事より、すべての記事をご覧になれます。

https://qiita.com/0_terarin_0/items/0f367210e2465f7772c9

# 筆者について

- 現在高校２年生
- 水泳部マネージャー
- 生徒会長
- とある団体の代表

# 本編

本日のまとめは個人的な感想にしか過ぎないので、あくまで参考までにしてください。

## Google Workspace vs Microsoft 365

現在多くの企業で使われているMicrosoft 365との違いを個人的にまとめてみました。

|比較項目|Google Workspace|Microsoft 365|
|---|---|---|
|プラットフォーム|ウェブ・モバイル|ウェブ・モバイル・デスクトップ|
|料金|Business Standard・￥1360|Business Standard・1560|
|親和性|Androidと相性抜群|Windowsと相性抜群|
|管理性|集約的でざっくり|分散的で詳しく（Entra IDなど）|

＊プラン一覧

![Screenshot 2023-12-22 at 19.41.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/2d77842d-ee37-eaf9-e012-10b9999f6288.png)

https://workspace.google.co.jp/intl/ja//pricing.html

![Screenshot 2023-12-22 at 19.41.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/c7c6bd07-2b86-eb31-4c9e-e719b5cfba15.png)

https://www.microsoft.com/ja-jp/microsoft-365/business/compare-all-microsoft-365-business-products

さて、このような違いがある中なぜGoogle Workspaceを薦めるかについて、以下に連ねたいと思います。

### その１：モバイルデバイスとの相性が良い

どういうことかと言いますと、AndroidやiOSとの相性が抜群です。というのも、Google Workspaceはもともとかなりの数のネイティブアプリ（個人利用商用利用問わず）を公開しており、かつそれらの多くが元々利用されているため、ユーザーがすぐ馴染むことができます。

＊Google Workspace系

![output1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/1e300eb3-9770-b78d-9ccf-14bc2bd41eaa.gif)

＊Microsoft 365系

![output2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583428/cd457a08-9284-e5d6-7eb1-b2dc50ca09bf.gif)

### その２：自分で拡張機能を作るのが簡単

これ、ほんとに僕助けられているのですが、自分で拡張機能とを作るのがとても簡単です。例えば、以前に僕が投稿した記事ではGoogle Formの内容をInstagramに自動投稿するスクリプトを作りました。

https://qiita.com/0_terarin_0/items/addc919f7f9891535b1b

このような感じで拡張を作るのが簡単です。以下の動画も併せてご覧ください。

https://youtu.be/_vVBqZt3YYg?si=eAKlPbJBIIAuY_EW

https://youtu.be/u3K7DSKerPQ?si=oXSm91vEEvobAA0b

これらの動画もGoogle Apps Scriptで自ら多機能を作った話がされていますね。こんな感じで、自由に色々な拡張を作ることができます。

### その３：外部の方との連携が簡単

たとえば、Google Chatは管理者さえ許可すれば、外部のアカウントと自由にトークルームを作ったり、ドライブ上のファイルを共有することができます。つまり、突発的に外部の方と連携するのが容易であることが言えます。

https://support.google.com/a/answer/60781?hl=ja

https://support.google.com/a/answer/9296706?hl=ja


### デメリット：多くの企業がまだOffice系を使ってる

さて、ここまでメリットをお伝えしましたが、もちろんデメリットも存在します。例えば、多くの企業がまだまだOffice系を利用していることです。

https://kn.itmedia.co.jp/kn/articles/2204/21/news037.html

もちろんGoogle WorkspaceではMicrosoft 365との互換性を保つようにはしてますが、決して完全ではありませんので、レイアウトが崩れたりするリスクがあることを考えると完全な移行は難しそうです。

それでも例えば「Microsoft 365のプランを落としてGoogle Workspaceを新たに契約する」などで問題を解決することによって、効果がでることは確実だと考えます。

# 最後に

本日ははじめてオフィススイート系を日常利用しての話をしてみました。ちなみに、僕の学校では、生徒はGoogle Workspaceを、先生方はMicrosoft 365との併用をしています。こういった日常のことにも今後は触れていきたいなと思います。それでは残り少ないアドカレ 23 の記事をお楽しみにしてください。

https://qiita.com/0_terarin_0/items/0f367210e2465f7772c9
C言語の未定義動作についておさらい

# この記事について
この記事は、[togetterまとめ「C言語の未定義動作についておさらい」](https://togetter.com/li/2279992)へのリンクを紹介するものです。詳細はまとめの方をご覧ください。

# ポイント
* 「未定義(な動作)」はプログラマ視点では「全てが無保証になるルール違反」
* 「無保証」は「何があっても文句言えない」ということ。
* なので「未定義(な動作)」はダメ、絶対。要するに「ルールは守りましょう」という単純な話。  
  ※ただし、処理系が別途なんらかの「保証」を設けている場合を除く
* 「試してみたら〇〇になりました」は、「未定義だけどたまたま結果がそうなった」と区別がつかないので、まず「ルールはどうなっているか」をちゃんと確認しよう。
【SwiftUI】複数の物体をアニメーションさせる時に連動して動かない問題を解決する（iOS17）

# はじめに
iOS17で`geometryGroup`という機能が追加されていました。
ドキュメントを見ても意味不明だったのですが、使ってみたら納得したので記事にしておきます。

# やりたいこと
![Simulator Screen Recording - iPhone 15 - 2023-12-22 at 20.04.04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/8281aacf-920c-038c-68e0-653b81d52ed7.gif)

# しかし、こうなってしまう
![Simulator Screen Recording - iPhone 15 - 2023-12-22 at 20.03.30.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/95c312f1-ff0e-1876-e60a-5f01702efa52.gif)

# 問題のある実装
```swift
import SwiftUI

struct ContentView: View {
    @State private var isMove = false

    var body: some View {
        VStack {
            ZStack {
                Circle()
                    .foregroundStyle(.red)
                    .frame(width: 100, height: 100)
                
                if isMove {
                    Circle()
                        .foregroundStyle(.blue)
                        .frame(width: 50, height: 50)
                }
            }
            .animation(.default, value: isMove)
            .offset(x: isMove ? 100 : -100)

            Button {
                isMove.toggle()
            } label: {
                Text("移動")
            }
        }
    }
}
```

# 解決方法
```diff_swift
import SwiftUI

struct ContentView: View {
    @State private var isMove = false

    var body: some View {
        VStack {
            ZStack {
                Circle()
                    .foregroundStyle(.red)
                    .frame(width: 100, height: 100)
                
                if isMove {
                    Circle()
                        .foregroundStyle(.blue)
                        .frame(width: 50, height: 50)
                }
            }
+           .geometryGroup()
            .animation(.default, value: isMove)
            .offset(x: isMove ? 100 : -100)

            Button {
                isMove.toggle()
            } label: {
                Text("移動")
            }
        }
    }
}
```

# おわり
ViewのGeometryを親Viewから分離してるらしいです。
むずいですね

# 公式ドキュメント
https://developer.apple.com/documentation/swiftui/view/geometrygroup()
Alexaの頭の中

この記事は [京都大学人工知能研究会KaiRA Advent Calendar 2023](https://qiita.com/advent-calendar/2023/kyoto-kaira) 23日目の記事です。

# はじめに

口で指示するだけで色々やってくれる機械があればラクだろうなぁ...

そんな人々の願望を叶えるAlexaが現れてから、どれくらい経つでしょうか。

人間の発した音声を聞き取って答えを返してくれる __AIスピーカー__ は、今や日々の生活の中に当然のように避け込んでいます。

今回は前半でAIスピーカー内部のプロセスを簡単に紹介します。


# 1. AIスピーカーの内部プロセス

AIスピーカーは、主に下記4プロセスを実行することで我々の話す内容に応答しています。

- 音源分離 ( 雑音の除去 )
- 音声認識 ( 発話内容の認識 )
- 自然言語処理 ( 発話内容の解析 )
- 出力 ( 応答や家電操作など )

ひとつずつ見ていきましょう。

## 1.1 音源分離(雑音の除去)

一般家庭において、AIスピーカーはたいていノイズの混じった音を取り込みます。
たとえば洗い物をしていて手が塞がっている時、何か気分の上がる音楽をかけてほしい。
そんな時、きっとAlexaに向かって「気分の上がる音楽をかけて」と話しかけるはずです。

そんなとき水がジャージャー流れる音が入るのは当たり前。

「キブン  "ｼﾞｬｰ"  ノアガ  "ｼﾞｬｰ"  ルオンガク  "ｼﾞｬｰ"  ヲカケテ  "ｼﾞｬｰｼﾞｬｰ"」

こんなノイズ混じりの音声から我々のリクエストを聞き取ってくれないようでは、使いようがありません。
取り込んだ音声からノイズを除去し、ユーザの発する声を抽出する必要があるのです。

## 1.2 音声認識(発話内容の認識)

ノイズ除去ができてはじめて、 __音声を認識__ するプロセスに移ります。
つまり、ここでのAIスピーカーの脳内は

「お、"キブンノアガルオンガクヲカケテ"って言ってるぞ。どういう意味だ？」

となっているわけです。この段階ではまだ、どういうことを言っているのかはわかっていません。
あくまでも __音__ として認識している状態です。

## 1.3 自然言語処理(発話内容の解析)

この自然言語処理と呼ばれるプロセスを通じてはじめて、AIスピーカーは

「音楽を再生すればいいんだな」と理解してくれるわけです。
自分が言ったことを理解してもらえた実感が湧いてきて、なんだか嬉しくなりますね。

## 1.4 出力(応答や家電操作など)

内容が理解できたら、あとは要求通りに音楽をかけることでAIスピーカーは要求に応えてくれます。

# まとめ
人間なら(知っている言語であれば)、ここまで紹介してきた1.1~1.3の処理をあっという間にできてしまいます。
1.4を含めなかったのは、人間の場合は実行するかしないかが __気分次第__ になることも多々あるからです。

しかも人間のさらにすごいところは、これらのプロセスを指示されなくてもできてしまうため、

以上の理由から、改めて発話内容の理解プロセスを意識する機会は新鮮に感じていただける方も多かったのではないでしょうか。

この記事が少しでも理解の助けになれば幸いです。

# 参考文献
[高島 遼一「Pythonで学ぶ音声認識」](https://www.amazon.co.jp/gp/product/B094WX3BKW/ref=ppx_yo_dt_b_d_asin_title_351_o02?ie=UTF8&psc=1)
社内でアドベントカレンダーをやってみて得た気づき

### 前置き
株式会社スカラパートナーズでは今年、「チームで積極的に技術的な知見をアウトプットする文化の醸成」や「日々の業務での知見の外部共有」「純粋にイベントを楽しむ」などを目的として「Qiita Advent Calendar 2023」に参加しました。夏に行われた「Qiita Engineer Festa」でも一部メンバーが記事を執筆して投稿したりしていましたが、今回はより多くのメンバーを募って参加しました。参加する中で「やってよかった」的な部分と「なかなか難しいな」という部分がさまざま出てきましたので、同じように技術系のアウトプットができる組織を目指している方々や、そういった活動に興味がある方に向けて、振り返り的な記事を書こうと感じた次第でございます。

さまざまな参加の形があるかと思いますが、今回うちでは初回ということもあり「**全日程開けてやろう**」という意気込みで臨みました。大体7人のメンバーで一人2,3記事~人によっては6記事担当したので、なかなか厳しい戦いだったと思います。また、良識の範囲で業務内で執筆することを許可していた形になります。
以下実際にメンバーにアンケートをとってみて、いただいた声です。

### やってよかったこと
- アドカレがなければ書かなかったであろう記事をいくつか書けた
- 触った技術を振り返る良い機会になった
- まとめる記事にする、正しく理解できているかどうかを見直すことで力になっている実感があるのでアウトプットするのはいいことだと思った
- アドベントカレンダーの企画により、記事を書くモチベは普段よりは向上しそうだと感じた
- 記事を書くこと自体も楽しかったですし、それをメンバーが見て反応もらえるのはやりがいを感じた
- 強制参加ではなかったので、イヤな気持ちになる人は居なかったのではないか
- 複数人でやってると、もしものときに代理が立てやすくていい
- ブログを書く機会があったことで、挑戦する精神が芽生えて良かった
- これまでQiitaの記事を書いたことがなく、勝手にハードルが高いものだと思っていた。しかし実際に書いてみると案外書けるな、良いアウトプットの場だなと感じた
- 部署メンバーがジャンル問わず色々な記事を書いていたので、見るだけでも勉強になり良い取り組みだったなと感じた

元々アウトプットの習慣はなかったけれど、今回の企画参加を通してその意義みたいなところを感じてもられたのが、個人的にはとても嬉しかったですね。あと他のメンバーがどんな技術に興味を示して触っているのかを知れるのも面白かったです。

### 課題に感じたこと
- 書き始めるときはもう少し手の込んだ記事を書くつもりだったが、案件都合でかなり手を抜いた記事になってしまったところは悔やまれる。次回があれば1記事は渾身の記事を書けたらいいなと思っている。
- 担当回数が多かった方が負担になっていないかとか、業務外に書いている様子も見て取れたので、次やるにしてもやはり「無理のない範囲で」というのは周知が必要
- 平常業務に加えてqiita記事を書くことが大変だなと思った
- 月に複数投稿するというのは結構しんどかった
- 案件の忙しい時期と重なると大変だった

業務内で書くことが許されているとはいえ、やはり通常業務と並行して時間を見つけて取り組むのは、正直なかなか難しかったです。特に案件が忙しいタイミングと重なると、どうしても直前に駆け込みになったりしてしまいました。実際にもらった意見にもあったように「本当はもっとクオリティを上げて書きたいけど...」みたいなことは自分もかなり経験したので、自分の案件状況やキャパと相談して、楽しんで参加できる程度にとどめておくのがいいなと思いました。


### 次回に向けて
今はまだ参加人数が少ないので、全日程開けようとして大変になってしまいましたが、ゆくゆくは人数が増え、一人一人が100パーセントに近いぐらい満足のいくアウトプットができるような取り組みになったらいいなと考えています。くれぐれも無理は禁物、楽しむ心を忘れずにですね。今回参加してくださった方も、応援してくださった方も皆さんが快く協力してくれたおかげで、楽しいイベントになったと感じています。ありがとうございました。
STM8で温度計を作る(MCP9701)(7セグ)


x MCP9701-E/TO 販売コード 103199


STM8で温度計を作る(MCP9701)(7セグ)



x 過去ログを見よ


目的
SPIのテスト

![o_cop875.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/03befc68-59c0-a6b2-04d7-d4f5119c5d16.jpeg)


```c++



//SPI_7SEG_9701_STM8_1

//*******   ******   *****  *****
//     *         *   *      *
//    *         *    *****  *  ***
//  *       ****     *      *    *
//  *       *        *      *    *
//  *        *****   *****  *****


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


//定義
#define DW    digitalWrite
char ss[] =  {
  "#9#9#9#8#7#7#6#5#5#4#3#3"
  "#2#1#1#0-9-9-8-7-7-6-5-5"
  "-4-3-3-2-2-1-1 0 1 1 2 2"
  " 3 4 4 5 6 6 7 8 8 91010"
  "111212131414151616171818"
  "192020212222232424252626"
  "272828293030313232333434"
  "353636373838394040414242"
  "434444454546474748494950"
  "50#0#0#0#0#0#0#0#0#0#0#0"
  "#0#0#0#0#0#0#0#0"
};
char seg[32] = {
  0x00 , //0 @ -> ' '
  0x77 , //1 A  o
  0x7c , //2 B     　combined use "6"
  0x39 , //3 C
  0x5e , //4 D
  0x79 , //5 E  o
  0x71 , //6 F
  0x3d , //7 G

  0x76 , //8 H  o
  0x06 , //9 I    　combined use "1"
  0x1e , //10 J
  0x75 , //11 K
  0x38 , //12 L  o
  0x15 , //13 M
  0x37 , //14 N  o
  0x3f , //15 O  o　combined use "0"

  0x73  , //16 P
  0x67  , //17 Q　combined use "9"
  0x50  , //18 R
  0x6d  , //19 S　combined use "5"
  0x78  , //20 T
  0x3e  , //21 U
  0x1c  , //22 V
  0x2a  , //23 W  o
  0x64  , //24 X

  0x6e  , //25 Y
  0x5b  , //26 Z　combined use "2"
  0x4f  , //27 [  --> "3"
  0x66  , //28 \  --> "4"
  0x27  , //29 ]  --> "7"
  0x7f  , //30 ^  --> "8"
  0x40    //31 _  --> "-"
};
char nn[] = {'O', 'I', 'Z', '[', '\\', 'S', 'B', ']', '^', 'Q'};
int comma1 = 0; // コンマ(小数点)の有効フラグ　1で有効　0無効


//7segの一文字出力 nana_seg
int ns_putc(char ch) {

  if (ch == ' ') {
    ch = '@';
  } else if (ch == '.') {
    return (0);
  } else if (ch >= '0' && ch <= '9' ) {
    ch = nn[ch - '0'];
  }

  if ( comma1 != 0 ) {
    comma1 = (0x80);
  }


  //7SEGに一文字送る
  SPI_transfer(seg[ch - 64] | comma1);
  DW(PE5, 1); DW(PE5, 0); //ラッチの操作

  delay(200);//debug

  comma1 = 0;

  //戻り値
  return (0);

}//ns_putc


//文字列の表示 nana_seg
int ns_printf(char *str1) {

  //文字の中身がゼロか
  while (*str1) {

    //コンマの処理
    comma1 = 0;
    if ( (*(str1 + 1) ) == '.' ) {
      comma1 = 1;
    }

    //一文字出力
    ns_putc(*str1 ++);

  } //while

  //戻り値
  return (0);

}//ns_printf


//初期化
void setup() {

  //SSポートの初期化
  pinMode(PE5, OUTPUT); DW(PE5, 0);

  //SPIの開始
  SPI_begin();

  // SPIの初期化
  SPI_beginTransaction( SPISettings( 8000000, MSBFIRST, SPI_MODE0) );

} //setup


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

  uint16_t s;//センサーの値
  char str1[16]; //温度の文字列

  //ADCの読み込み
  s = analogRead(PB0);

  //s = 250; //" 20C" debug
  //s = 0;   //"-19C" debug

  //温度の変換 テーブルから読み出す
  str1[3] = ss[((s >> 1) & (0x7f << 1))]; //'#'か

  str1[0] = (str1[3] == '#') ? '_' : ' ';
  str1[1] = (str1[3] == '#') ? '1' :
            ss[((s >> 1) & (0x7f << 1))]   ; //10の桁
  str1[2] = ss[((s >> 1) & (0x7f << 1)) + 1] ; // 1の桁
  str1[3] = '.';
  str1[4] = 'C';
  str1[5] = 0;

  //温度の表示
  ns_printf(str1);

  delay(2500);//1秒待つ

} //loop




```
Fast APIでJavascriptからのPOST通信を試す。

NS高所属の @tester_ringo です。
たまにpythonで何かしらを書く程度の者です。

私はwebに関してほとんど知識がありませんが、最近私の中でwebの需要が高まっていました。
けれど何から勉強を行えばいいのかわからず、ひとまず何か作ろうと思いたちました。
その過程で行ったPOST通信の備忘録です。初心者向けです。
しかし、明確に説明できるほどの知識がないため解説はありません。
よって初心者向けでもないです。（ターゲット不明。

何かしらの手助けとなれれば幸いです。

# 目的
Fast APIでpythonとjavascriptからPOST通信を行う事。
詳細などは調べればすぐに出てくるため、手順のみ。

# 環境
- python 3.11.2
- javascript
- windows

# 0. 準備
pipを用いて各種ライブラリのインストール
- Fast API
- uvicorn 
- pydantic
- requests
```
pip install fastapi uvicorn pydantic requests
```
 
# 1. 起動
ファイル構成
>fast_api/
└main.py

簡易的なサーバファイルの作成。
Fast APIと調べると真っ先に出てくる。
```python:main.py
from fastapi import FastAPI

app = FastAPI()

# get
@app.get("/")
async def root():
    return {"return" : "message"}
```
ターミナルから起動。（カレントディレクトリへの移動を忘れずに
```
uvicorn main:app --reload
```
# 2. POST通信(pythonから)
サーバファイルにpostメソッドの処理の追加。
後々のために一度CORSを無効化する。（1敗
```python:main.py
import random
from fastapi import FastAPI
from pydantic import BaseModel

class Name(BaseModel):
    name: str

app = FastAPI()

# 後のためのCORS回避
origins = ["*"]
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# get
@app.get("/")
async def root():
    return {"response" : "message"}

# psot
@app.post("/")
async def new_naming(req: Name):
    name = req.name
    new_name = name.upper()[random.randint(0, len(name)-1)]
    return {"response": f"油屋の長によるとあなたの名前は今日から「{new_name}」らしい。"}
```
お試し通信フ用ァイルを用意し、実行。
```python:req.py
import requests
import json

url = "http://127.0.0.1:8000/" #localhost
data = {"name" : "山田太郎"}

response = requests.post(url, json.dumps(data))
print(response.json())
```
実行結果
```
$ python req.py
{'response': '油屋の長によるとあなたの名前は今日から「山」らしい。'}
```
# 3. POST通信(javascriptから)
簡単にjsからもpostを試してみる。（ブラウザ使用。
非同期処理によりjs初めての人には多少ややこしくなっている。（私
詳しく知りたい場合は非同期処理やpromiseなどを検索すると良い。
(ちなみにheaderのcontent typeを知らず1敗
```html:req用エセ.html
<h1 id="result">result</h1>
<script>
async function test_post(url, name) {
    const response = await fetch(url, {
        method: "POST",
        headers: {"Content-Type": "application/json"},
        body: JSON.stringify({
            "name": name
        })
    });
    const result = await response.json();
    return result["response"];
};

test_post("http://127.0.0.1:8000/", "山田太郎").then((result) => { //レスポンス後の処理.
    const label = document.getElementById("result");
    label.textContent = result;
});
</script>
```
ブラウザの表示結果
![山田太郎さんの新しい名前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632090/2482816a-b507-c8f1-f700-be7a32c684d3.png)

終わり。
【Minecraft】降る雪が一部メルティーキッスになるMod

## はじめに
この記事は[Life is Tech ! Advent Calendar 2023](https://qiita.com/advent-calendar/2023/life-is-tech) シリーズ1 23日目の記事です。

みなさんごきげんよう。うめちゃんと言います。本業は大学生ですが、Life is Tech!のMinecraftプログラミングコースでメンターもしております。
今日はMinecraftで冬っぽいModを作っていきたいと思います。

※本記事は株式会社明治とは一切関係ありません。

## 降る雪がぜんぶメルティーキッスなら
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">みなさんご存知のメルティーキッスの歌。「降る雪がぜんぶメルティーキッスなら…」今年はXで本当に叶うかも！？見逃さないでくださいね🍫</p>&mdash; 明治メルティーキッス【公式】 (@meltykiss_cp) <a href="https://twitter.com/meltykiss_cp/status/1716318535956168823?ref_src=twsrc%5Etfw">October 23, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

「降る雪がぜんぶメルティーキッスなら…」と誰もが一度は考えたことがあるでしょう。無かったとしてもあるということにしておきましょう。
ぜんぶは難しくても一部ならできたりしませんでしょうか。MinecraftならModを作ればできちゃうんです！

※MinecraftについてやModについては[4日目の記事](https://qiita.com/K__chan/items/ce5fcc514ab16a3d105f)をご覧ください。

## テクスチャ
私は絵心が無いのでModを作るときテクスチャが一番困ります。今回は実物のメルティーキッスを買ってきて写真を撮り、背景透過の画像に編集して間に合わせます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/c6e31a19-22fe-f0b6-4b56-757789babc16.jpeg" width=400><br>このパッケージを見ると「冬がやってきたなぁ」という感じがします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/057480e9-20d3-5ec0-2dc1-cb20d8939413.jpeg" width=225><br>明るく撮るために周りに白い紙を置いて撮ります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/45e7071a-bb0a-5cdb-ad87-6c1146a100fd.png" width=400><br>Photoshopでいい感じに切り抜いて、64x64のPNG画像として出力します。

## 実装
`meltykiss`コマンドを打つとプレイヤーが向いている先にメルティーキッスが降ってくるように実装しました。
コマンドを打ってみます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/51ee5124-234b-df26-bb5e-632beaae771c.png" width=400>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/aec9aa09-f9f7-e9eb-b48b-3eacac7e4002.png" width=400><br>こんな感じで降ってきます。シュールですね。

晴れの場合や雨の場合は降ってこないようになっています。
<p>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/04410b20-cf52-5067-b835-e540e72d0462.png" width=350>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/d933bf51-4393-89bc-3e9d-0fbcc01fdcb0.png" width=350>
</p>

ちなみにこのメルティーキッスは食べられます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370590/3a8679a1-222d-081a-e6b5-e0a9b2b8c69e.png" width=400>

<br>
降る雪を一部メルティーキッスにすることができました！みなさんもよいクリスマスをお過ごしください！
(リンクだけです)材料力学「レトルトカレーの蒸気口」を調べた。 

??? エンジニア必須

・[レトルト食品](https://www.google.com/search?q=%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88%E9%A3%9F%E5%93%81&rlz=1CAUHAM_enJP1089&oq=retoruto&gs_lcrp=EgZjaHJvbWUqCQgFEAAYBBiABDIGCAAQRRg5Mg8IARAAGEMYsQMYgAQYigUyDAgCEAAYQxiABBiKBTIJCAMQABgEGIAEMgkIBBAAGAQYgAQyCQgFEAAYBBiABDIJCAYQABgEGIAEMgkIBxAAGAQYgAQyCQgIEAAYBBiABDIJCAkQABgEGIAE0gEINjA2OGowajeoAgCwAgA&sourceid=chrome&ie=UTF-8) google検索

・[蒸気口 レトルト 特許](https://www.google.com/search?q=%E8%92%B8%E6%B0%97%E5%8F%A3+%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88+%E7%89%B9%E8%A8%B1&sca_esv=593056060&rlz=1CAUHAM_enJP1089&sxsrf=AM9HkKnlv0lc9_kDGMyVLyr21bH3hFoeeQ%3A1703239702389&ei=FmCFZauhF5bQ2roPzumr6AM&oq=%E8%92%B8%E6%B0%97%E5%8F%A3+%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88%E3%80%80&gs_lp=Egxnd3Mtd2l6LXNlcnAiGeiSuOawl-WPoyDjg6zjg4jjg6vjg4jjgIAqAggAMgQQIxgnMgQQABgeMgYQABgIGB4yBhAAGAgYHkjBHFDFAVjFAXABeAGQAQCYAWqgAWqqAQMwLjG4AQPIAQD4AQHCAgcQIxiwAxgnwgIKEAAYRxjWBBiwA-IDBBgAIEGIBgGQBgo&sclient=gws-wiz-serp) google検索

・[レトルト 蒸気口 仕組み](https://www.google.com/search?q=%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88+%E8%92%B8%E6%B0%97%E5%8F%A3+%E4%BB%95%E7%B5%84%E3%81%BF&sca_esv=593056060&rlz=1CAUHAM_enJP1089&sxsrf=AM9HkKnlv0lc9_kDGMyVLyr21bH3hFoeeQ%3A1703239702389&ei=FmCFZauhF5bQ2roPzumr6AM&oq=%E8%92%B8%E6%B0%97%E5%8F%A3+%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88+&gs_lp=Egxnd3Mtd2l6LXNlcnAiF-iSuOawl-WPoyDjg6zjg4jjg6vjg4ggKgIIAjIEECMYJzIEEAAYHjIGEAAYCBgeMgYQABgIGB5IgUlQrC9YrC9wAngBkAEAmAFdoAFdqgEBMbgBAcgBAPgBAcICBxAjGLADGCfCAgoQABhHGNYEGLAD4gMEGAAgQYgGAZAGCg&sclient=gws-wiz-serp) google検索

# Qiita内検索

https://www.google.com/search?q=qiita+%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88&rlz=1CAUHAM_enJP1089&oq=qiita+%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRhA0gEIOTEwNmowajeoAgCwAgA&sourceid=chrome&ie=UTF-8

# wikipedia 

＞電子レンジ対応のレトルトカレー

https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88%E3%82%AB%E3%83%AC%E3%83%BC#電子レンジ対応のレトルトカレー


https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%88%E3%83%AB%E3%83%88

https://en.wikipedia.org/wiki/Retort_pouch

# google検索

https://www.google.com/search?q=%E3%83%AC%E3%83%B3%E3%82%B8%E5%AF%BE%E5%BF%9C%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&rlz=1CAUHAM_enJP1089&oq=%E3%83%AC%E3%83%B3%E3%82%B8%E5%AF%BE%E5%BF%9C%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIKCAEQABiABBiiBDIKCAIQABiABBiiBNIBCTE4ODQ2ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8

# いつもの？おすすめ(ページの下の方)
　　　Hookeの法則
⼒の世界　↔　幾何の世界　
　　　？？？比例定数

http://www.md.ams.eng.osaka-u.ac.jp/~nakatani/Lectures/Strength_of_Materials/PDFs/2021zairikislides01.pdf#page=14

(参考) [私のmathml](https://qiita.com/mrrclb48z/items/40ceadf74a7562aaeafa)
Markdown table の表示テスト

https://github.com/increments/qiita-discussions/discussions/512

の件の検証のためテーブルの表示テストをします。

| タイトル | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 |
|:---|:---|:---|:---|:---|:---|:---|:---|:---|:---|
| 長い文字列長い文字列長い文字列長い文字列 | 1 | 22 | 333 | 4444 | 55555 | 666666 | 7777777 | 88888888 | 999999999 |

| タイトル | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 |
|:---|:---|:---|:---|:---|:---|:---|:---|
| 長い文字列長い文字列長い文字列長い文字列 | 1 | 22 | 333 | 4444 | 55555 | 666666 | 7777777 |

|a|b|c|d|
|:---|:---|:---|:---|
| あのイーハトーヴォのすきとおった風 | 夏でも底に冷たさをもつ青いそら | うつくしい森で飾られたモリーオ市 | 郊外のぎらぎらひかる草の波 |

|a|b|c|d|
|:---|:---|:---|:---|
| The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog | The quick brown fox jumps over the lazy dog | The quick brown fox jumps over the lazy dog | The quick brown fox jumps over the lazy dog |

|a|b|c|d|
|:---|:---|:---|:---|
| LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG_LONGLONG | The quick brown fox jumps over the lazy dog | The quick brown fox jumps over the lazy dog | The quick brown fox jumps over the lazy dog |

# `overflow-wrap: anywhere`

![overflow-wrap: anywhere でのキャプチャ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178936/7c3baa66-50ce-29b3-86ac-5e1ad626d0d6.png)

# `overflow-wrap: normal`

![overflow-wrap: normal でのキャプチャ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178936/3b5210a7-7faf-0625-204c-02bc23c9507c.png)

# `overflow-wrap: break-word`

![overflow-wrap: break-word でのキャプチャ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178936/95bd3342-1766-5e6c-5dae-722493a85fd8.png)
【exeファイル配布】コピーした文字に含まれる平仮名をカタカナにして貼り付けるAHKスクリプト

## 使い方
「Alt v」のショートカットで、コピーした文字の内、平仮名がカタカナになってペーストされます。平仮名以外はそのままペーストされます。

一度exeファイルを実行すればタスクトレイで動作し続けます。
終了するには、タスクトレイから右クリック→Exitを選んでください。

## exeファイルの配布先

https://1drv.ms/u/s!Anl0qRpU8AENk9J9ip3UZmPATOZetw?e=8vy0He

## AHKスクリプトのソースコード

https://gist.github.com/kdr-s/51fcddee5df2327bb3178ce301c528a1
Rustのタイムトラベルビジュアルデバッガー「FireDBG」を触ってみた

# FireDBGとは

https://firedbg.sea-ql.org/

FireDBGはRustのデバッグをサポートする「タイムトラベルビジュアルデバッガー」です。

SeaORMやSeaQLを開発しているSeaQL.orgのFireDBGチームが開発しています。

https://github.com/SeaQL

FireDBGを使用すると、どの関数からどの関数が呼ばれたのかの情報や、関数の入力値や出力値、ある時点での変数の値などを可視化してくれます。また、「タイムトラベル」とあるように、FireDBGのシークバーを動かすことでプログラムのフローを遡りながらその時の状態を確認することができます。デバッグが捗るツールです。

FireDBG実行例↓

![スクリーンショット 2023-12-22 18.23.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/1b152927-6643-fadd-eef9-07313cb67f08.png)

この記事ではFireDBGを動作させるまでの手順について解説します。

# 動作確認環境

以下の環境で動作確認しました。

* M1 Max MacBook Pro
* macOS Sonoma 14.2.1
* Rust 1.74.1
* VS Code 1.85.1

# FireDBG導入手順

## 0. 前提条件

FireDBGを使用するには、以下のツールがインストールされている必要があります。

* VS Code >= 1.80.0
* Rust >= 1.74.0

## 1. FireDBG CLIツールのインストール

まずFireDBGのCLIツールをインストールします。

[FireDBGのInstallページ](https://firedbg.sea-ql.org/install/)にあるスクリプトを実行します。

```sh
curl https://raw.githubusercontent.com/SeaQL/FireDBG.for.Rust/main/install.sh -sSf | sh
```

インストールが完了したら `firedbg` コマンドが使えるようになります。

```sh
firedbg --version
#=> firedbg-cli 1.74.2
```

## 2. FireDBGのVS Code拡張機能をインストール

続いて、FireDBGのVS Code拡張機能をインストールします。

https://marketplace.visualstudio.com/items?itemName=SeaQL.firedbg-rust

![スクリーンショット 2023-12-22 18.41.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/59395a95-5509-d2e4-92c0-151707b49a15.png)

準備はこれだけです。

## 3. FireDBGの実行

早速FireDBGを実行してみましょう。適当なRustプロジェクトをVS Codeで開き、VS CodeのターミナルからFireDBGを実行します。

```sh
# firedbg 実行
firedbg run
```

すると、プロジェクトルートに `firedbg` というディレクトリが自動的に作成され、その中に `firedbg` の解析結果ファイルが生成されます。

続いて、VS CodeのFireDBG拡張機能を使って解析結果のファイルを開きます。

```sh
# firedbg VS Code拡張機能で解析ファイルを開く
firedbg open
```

するとVS CodeでFireDBGのCall Tree画面が表示されます。

![スクリーンショット 2023-12-22 18.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24450/8bb3e145-0728-3ce1-2b40-e77283997edd.png)

これは見やすい！！！

Call Tree画面で、関数名の横にある「○」をクリックすると、その関数の引数と戻り値が確認できます。

また、関数名をクリックすると該当のコードを表示してくれます。

基本的な使い方はこれだけです。あとは様々なRustプロジェクトで試してみてください！

## 4. (optional) .gitignoreにfiredbgディレクトリを追加

プロジェクトルートに `firedbg` というディレクトリが自動生成されるので、そちらはバージョン管理ツールから除外しておくとよいです。Gitなら.gitignoreですね。

```diff:.gitignore
+ # firedbgの生成ファイル
+ firedbg
```

# 補足

* FireDBGが一般公開されてまだ10日程の状態でこの記事を書いています
    * 絶賛開発中とのことなのでこの記事の情報はすぐに古くなるかもしれません
    * **ぜひ各リンク先から最新の情報をご確認ください**
* 2023/12/22現在ではまだMVP的な感じとのことなので、分析できないプロジェクトもあるかもしれません
    * 非同期Rustの対応はこれからとのことです
* FireDBGのデフォルトでは関数の引数や戻り値のみ確認できますが、プロジェクトに `firedbg-lib` crateを導入すると、指定の場所の変数なども確認できるようになります。こちらもご興味があればご参照ください。
    * https://crates.io/crates/firedbg-lib/0.1.2

# 感想

FireDBG超便利！！！

# 参考URL

https://github.com/SeaQL/FireDBG.for.Rust

https://firedbg.sea-ql.org/blog/2023-12-12-introducing-firedbg/
github上で削除されたブランチがローカルに残り続ける問題

# 困ったこと
ローカルでのgit操作をコマンドライン行なっていたのですが、
リリース後にもブランチが残り続けていたので消す方法を調べました。

# 答え
```
git fetch -p

or

git fetch --prune
```

# 備考
gitにおいてデータは、基本的に破棄されないものらしいです。
また残し続けることによって、パフォーマンスにも影響が出ることがあるようなので
気になったタイミングで消していこうと思いました。

# 参考文献
https://tracpath.com/docs/git-fetch/
https://qiita.com/yunano/items/923e27bd7d3f30350813
Workato：Environment Properties, Project Propertiesを変更するとレシピの実行に失敗する

Workatoでは、レシピ名やコネクション名などを変更しても、内部的にはIDで管理されている（名称は単なるラベルである）ためレシピの動作に影響を及ぼすことはありませんが、Environment PropertiesおよびProject Propertiesは変更を行った場合、レシピから参照できなくなり、レシピ実行時にエラーとなる場合があります。

変更前）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/580575b8-cb4b-612e-daa1-2a8f0f601139.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6fe70d9e-31dc-68cf-1f4c-a31af8d6b70b.png)


変更後）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/26da8238-bc8e-6d50-e4cf-cceef4386e84.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/26c58d55-a8d1-f0ee-f5e0-8d52bdb4400e.png)

Workatoを長い期間運用しているとリファクタリングを検討する機会もあるかもしれませんが、リファクタリングの際は、Environment PropertiesとProject Propertiesは可能な限り変更しない、あるいは変更した場合は速やかに関連するレシピを調整するよう、対応にはご注意ください。
[SVN→Git]ソース移行方法

![svn-to-git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/61825dbc-3d24-c5e2-295c-5edd7f3e6006.png)

SVN管理されているソースをGit環境へ移行する手順をメモしたいです。

以下のソフトウェアを使用します。
 [Git for Windows](https://git-scm.com/)
 [TortoiseGit](https://tortoisegit.org)
## Gitリポジトリの準備
GitLabを使用し、SalesMobileのリポジトリを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/59fe1086-051b-a255-eeec-594167da1b54.png)

プロジェクトの「New Project」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/93778429-6b2f-7282-4eff-0bcf92f40806.png)

「Create project」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/2b065261-f6d3-d1ae-98e8-6d90acc3e7f8.png)

「SalesMobile」プロジェクトが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/a2170b10-3033-38e6-ddc0-cf7cb9a10292.png)

## SVN→Gitソース移行
### 1. SVNリポジトリをGitクローン
SVNにある営業モバイルのソースを、自身の端末(ローカル)にGitクローンします。
エクスプローラーにてローカルの適当な場所を開き、右クリック→「Gitクローン(複製)…」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/cc41a79f-6b1b-cd44-464f-bc2f687130f6.png)

URLにSVNのソースディレクトリ(https://yourhost/your_repo) を指定し、
「SVNのリポジトリから(S)」にチェックを入れ、「OK」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/8478aabb-e130-e656-273b-1e9b137a3292.png)

### 2. Gitリポジトリをリモートリポジトリへプッシュ
Gitリポジトリに変換されたローカルリポジトリをリモートリポジトリへプッシュします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/edc79743-54da-4c8e-7d13-fa4176793a21.png)

宛先セクションの「管理(G)」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/2ec8eafc-970d-4bda-58b1-ea7e1d04418c.png)

SalesMobileリポジトリの作成」で作成したGitリポジトリのURLをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/c2ed8c07-0874-66ad-5e92-84d1ef614700.png)

リモート設定のURLとプッシュURLにコピーしたURLを貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/f053a495-0c3f-a89b-4d21-b279f4a1197d.png)

リモートに識別用の名称「SalesMobile」を入力し、「OK」ボタンを押下します。
「すべてのブランチをプッシュ(P)」にチェックを入れ、「OK」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/4a226705-3c4a-664b-7672-feddc1c66b31.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/d15e7d16-629b-7388-fdd3-c49cfd518c13.png)

Gitへのプッシュ処理が開始されます。しばらくお待ちください。
「成功」と表示されたら、Gitへのプッシュ完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/787a67d9-d2b9-a543-8483-90d625d0d46f.png)

### 3. GitLabでの移行確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3427598/6929bb4a-54e9-5d6d-ee8e-571ed7ad477c.png)

このような方法で移行を行うと、SVNでのコミットログも自動的にGitへ移行されました。
スクラッチからPeer-to-Peerオーバーレイ・ネットワークとブロックチェーンシステムで社会基盤を構築すっぞ！

## githubに3つレポジトリを公開しました。

スクラッチから作る、Peer-to-Peerオーバーレイ・ネットワークと、ブロックチェーンでの社会基盤構築に賛同していただける方、ボランティアになりますが、共に開発に貢献してくれる方やテストに参加してくれる方募集中です。  

一緒に楽しみましょう！  

ただし、仮想通貨取引所関係の方はお断りさせていただいておりますことをご了承ください。  

https://github.com/webbananaunite

以下はREADME.mdに記載しているものと同じものです。

# blocks & overlayNetwork & Testy

## blocks について
blocks は中本智さんの論文に基づいて開発されたiOSライブラリです。
あなたのアプリにブロックチェーンを導入できます。

いろんな目的に使用できますが、仮想通貨取引所で交換可能な暗号資産として使用することを禁止します。

このブロックチェーン・ライブラリが特徴的なのは、政府・公共・民間の社会システムにおける活動をあらかじめ組み込まれていることです。（出生証明、住民票、身元保証など）

添付の overlayNetwork ライブラリに依存します。

## overlayNetwork について
overlayNetwork は、Peer-to-Peerオーバーレイ・ネットワーク通信システムです。
MIT Laboratoryの分散ハッシュテーブルの実装である Chord 論文に基づいて開発されたものです。

他のライブラリに依存しません。

## Testy について
Testy は住民基本台帳カードの代替として開発されています。

blocksライブラリとoverlayNetworkライブラリの使用参考例として作成されたものです。

## ライセンス
blocks & overlayNetwork & Testy は MIT Licenseで公開されています。  

無料で、あなたのアプリに組み込んで利用できます。  
いろんな目的のアプリに組み込み可能ですが、仮想通貨取引所で交換可能な暗号資産として使用することを禁止します。

## 禁止事項
仮想通貨取引所で交換可能な暗号資産として使用することを禁止します。

## その他説明
### 言語:  
- SwiftUI (Protocol Oriented) 
- C++ (Metal) 
- objc (DNS resolv)

### サードパーティライブラリの使用
使用していません。しかし、他の著作物を含んでいます。
- QuadKey - Microsoft Corporation  
- SHA-512 - Aaron D. Gifford

### プログラミングアーキテクチャ  
around DDD, Onion (Protocol Oriented)

### バイトオーダー  
- Distributed Hash Table (Finger table) address  
Little Endian

- nonce  
Little Endian

### cpu, gpu
nonce の計算はcpuもしくはgpuを選択可能です。

## ステータス
Alpha  

現在、すべての機能は実装されていません。
- 例. overlayNetwork の DHT ネットワークから離脱したり、また戻ったりする場合への対応。  

2024年5月に、すべての機能を実装した版をリリース予定です。  

Peer-to-Peerオーバーレイ・ネットワークと、ブロックチェーンでの社会基盤構築に賛同していただける方、ボランティアになりますが、共に開発に貢献してくれる方やテストに参加してくれる方を募っています。  

ただし、仮想通貨取引所関係の方はお断りさせていただいておりますことをご了承ください。  

ご連絡をお待ちしています。  

一緒に楽しみましょう！
CodeBuildでDinDを使ってハマったこと

# まとめ

- CI環境でDinD使うとport forwardで詰まる可能性が高い！
- CodeBuildの記事少なくて辛かったので備忘
- 追記:CodeBuildの特権モードを使えば解決できるらしい（未検証）

# 背景

- コード管理にはCodeBuildを利用
- 開発環境はメインプロセスがホストで動くよう設計されている

### 開発環境のDocker化

Dockerがローカル開発環境（や本番環境）に使われるようになり多くの時間が流れました。
最大のメリットは、環境同一化による些末な差分発生の抑止であると考えます。デメリットは、コンピュータリソース使用量の増加と通信量増加による実行速度低下ですが、小規模な開発では現代では問題になることは少ないと考えます。

### ホスト・コンテナ間の通信

以下は、DBサーバがDocker上で動いてる時に、アプリケーションの動作環境がホストの場合と同じDockerにいる場合のイメージ図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68104/5cc087aa-003f-dc0c-1e84-6b36758c8d4d.png)
矢印が通信のイメージです。前者は、ホストOSとDocker上で動くOS間で通信が発生するため、port forwardingの設定が必要です。ここまでは、前述のメリデメはありますが、問題ありません。
次に、以下が上記の前者をそのままCI環境（CodeBuild）に載せた時のイメージ図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68104/85d1085b-395a-cf1d-e4d8-cbc7fbd0b897.png)

# 課題

CodeBuild実行環境はおそらく、Dockerに類するコンテナ管理が行われているでしょう。問題はこの時、「CodeBuild実行環境のポートを自由に触る権限が与えられているか」です。あくまでやりたいことはCodeBuild実行環境とその上のDockerのポートを繋ぎたいのですが、さらに大元の環境（図でAWSと書いた部分）に影響を及ぼさせるのはサービスとして危険です。
だからかわかりませんが、ローカル環境とは異なり、アプリ(+CodeBuild実行環境のbash)からDBサーバに接続することはできませんでした。

# 対応

### 試したこと

開かないものは開かないので仕方ないのですが、せっかくなので調査時に試したことをリスト化しておきます。
- CodeBuild実行環境OS（AmazonLinux）をローカルに持ってきてDinD構成で色々試す
    - ローカルだとポート開くことを確認
- 上記OSの変更(AmazonLinux -> CentOS) -> 変わらず
- docker logs, inspect等のコマンド叩きまくる -> よくわからないが良さそう
- docker exec -> OK
- docker exec して ps aux -> OK
- psql -> NG
- ツールが全然入ってないので、入れて検証 -> これでようやく出来ないことを確信した
    -  `apt update; apt install net-tools; netstat -nap|grep LISTEN; apt install lsof; lsof -i -P | grep "LISTEN"; ls', // 失敗しても後続を実行`

### その他に辛かったこと

- IaC管理されており、CodeBuildの調査に加えIaC記法の調査が挟まる
- 特定ブランチへのマージや運用チームへのデプロイ依頼などが発生し、GUIポチポチで試行錯誤を高速に回せなかった
- docker hubのpull制限に引っかかる
- (以降自主規制)

### 対応方針

- アプリケーションをホストで動かす（DinD）のではなく、docker-compose構成に変更

# まとめ（感想）

- フロントエンドアプリケーションはホスト、APIサーバはコンテナ化、など常識レベルの構成も、改めてハマってみると色々な背景があるのだなぁと身をもって実感した（これも極論だが）
- 薄々原因に気づいても、納得するまで調査したくなるのは、エンジニアの性だなぁ
- アドベントカレンダーは25日までに書くのではなく、担当してる日に書かなきゃなぁ...
よく使われているベクトルストア（VectorStore）について紹介します

今日はベクトルストアについて紹介したいと思います。
ベクトルストアとはデータをベクトル化（数字リスト）して保存、検索するデータベースのことです。
RAGのデータ元もベクトルストアです。
ベクトルストアはたくさんありますが、よく使われているのはFaiss,Chroma,LanceDB,Qdrantの4つです。
それぞれの特徴などを簡単に説明します。
 
①Chroma
一番有名な軽量VBで、構築は非常に簡単なので、VBのチュートリアルコードにはよく使われてるいるようなイメージです。
 
②Qdrant
だいぶ前からあったVBですが、性能とスピードが良いので人気です。こちらも他の人のコードによく見てた記憶があります。多分使っている人一番多いかもしれません。
 
③Faiss
Facebookが開発した大規模データ向けのVBです。特徴としては検索スピードが非常に速いです。
 
④LanceDB
マルチモダール特化のVBなので、画像とか検索する場合は他のVBより精度高いです。
 
私が使った経験だと、検索ロジックはほぼ一緒ですので、精度の差はあまり大きくないです。基本速いものを使うのがベストだと思います。（並行処理のデザインは違うためにスピードは結構違います。）
なので、Faissおすすめです。私もいつもFaiss使ってます。
 
ベクトルストアに興味ある方⇩まとめ記事

https://lakefs.io/blog/12-vector-databases-2023/
[AWS]大阪リージョンについて調べてみた

# １．リージョンとは
AWSのクラウドサービスを提供しているデータセンターの所在地のこと。
(ただしアジアパシフィック(東京)リージョンのDCが実際に東京都にあるわけではないそうです)

# ２．大阪リージョンの歴史
ここに詳しくまとめられています。
もともとはAWS初のローカルリージョンとして誕生。

https://blog.serverworks.co.jp/aws-osaka-region-history

上記は2021年までですが、AWS公式資料の「大阪リージョン最新情報とよくある質問」(2023/05/11)に
2022/03/10~2023/05/11で大阪リージョンでも使えるようになった機能たちがまとめてありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003921/b53e6e5b-64ea-200d-50bb-b6fa8702e914.png)

(引用元)大阪リージョン最新情報とよくある質問(2023/05/11)

https://pages.awscloud.com/rs/112-TZM-766/images/2_20230511-Osaka_Osaka-region.pdf

# ３．ユースケース
大阪リージョンを選択するケースをいくつか挙げてみます。

・サービスにアクセスするお客さんが西日本
 　(地理的メリット。東京リージョンより低いレイテンシーが期待できる)
・国内リージョンでDR構成を実現
　（データを国外へ出せない場合などは、東阪）
・日本のリージョン内でサービスをより安く使いたい
　(リージョンによって価格に違いがあり、東京より大阪の方が安い場合はこれ)
仕事を終わらせないと延々と架空請求をしてくるクソタスク管理アプリを作った

**「クソアプリ Advent Calendar 2023」の23日目の記事です。**

https://qiita.com/advent-calendar/2023/kuso-app
# 作ったもの
仕事を終わらせないと延々と架空請求をしてくるタスク管理アプリを作りました。

![F_oCXsvaYAEhB8f.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982370/88c0d74e-71ae-73b3-131d-220bc63c7414.jpeg)

※ジョークアプリなので悪質な意図はないです。
※機能自体はまぁまぁ悪質です。
## きっかけ
ネットサーフィンをしていると広告を誤ってクリックしたり、怪しいリンクを踏んでしまって**多額請求をされてしまう経験**を皆さん一度はされたことはあるのではないでしょうか。

架空請求とわかっていても**法的措置**などの強い言葉や**ゴリゴリに減っていくタイマー**など結構焦ると思います。

タスクを登録してもついつい忘れてしまうタスク管理アプリにこの焦りをぶつけられないかという深夜のバグ発想の元このアプリは生まれました。
# 機能紹介
![F_oCXsvaYAEhB8f.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982370/b934ebc2-f70a-82ec-4693-ca0c96c863f8.jpeg)

基本機能は雑なカンバンボードみたいな構成です。
- 未完了のタスク
- 進行中のタスク
- 完了済みのタスク

のステータスでタスクを管理するシンプルなTODOアプリです。

### タスク登録
![スクリーンショット 2023-12-22 18.33.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982370/07d7bc4d-04db-b890-f758-e4c92ae3780d.png)

モーダルからタスクを登録できます。
入力項目としてタスクの
- タイトル
- 詳細
- 期限

を入力します。ジョークアプリなのに真面目に入力項目バリデーションしました(偉い)
追加ボタンを押せばタスクを登録できます。

さあ

ここからが

本番です

・
・
・
・

![F_oCXtQa4AAy9r8.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982370/b5bd5df8-68e0-b200-0b13-a982299caa71.jpeg)

**キターーーーーー！！！！！**
めっちゃ架空請求をしてくれます。
支払い期日はタスクの期限となっていてリアルタイムで残り時間が目減りしていきます。怖いですね。

# 技術構成
- FrontEnd
    - Next.js
- DB
    - FireStore
- Hosting
    - Vercel

お手軽でシンプルな構成になっています。

# こだわりポイント
### 素の見た目は普通にする
意図しないタイミングで請求されるのが一番ビビります。
### コントラストをバキバキにする
架空請求サイトを勉強した結果、純色バキバキの**警告色・コントラスト**にする一般的な架空請求のイメージに近づくことがわかりました。
うまく作りすぎるとただの巧妙な請求になってしまうので一目で

**架空請求だ！！！！！**

となる塩梅が難しかったです。

### ブラウザバックは許さん
架空請求のページはクソアプリなので閉じるボタンなどはありません。
だからと言ってブラウザバックされてしまうと簡単に請求ページを閉じられてしまいます。
そこで**別のページ遷移**するのではなく**全画面のクソデカモーダル**として実装しています。
これによってブラウザバックをすることでタスク管理画面に戻るという手段を封じています。
リロードをすれば閉じれるのですが、
今後**PWA化するとブラウザのリロードボタンが表示されない**のでさらなる嫌がらせが期待できます。

# 今後の展望
今回クソアプリを作成作って反省点が色々出てきました。
その反省点を今後改善してクソの真髄に触れたいと思います
### SSL証明書
架空請求をふっかけて来ているのにhttpsなのは内部的にクソさが足りない気がしました。
怪しいクソサイトは脆弱性があってナンボなのでサーバーレスな構成を崩しSSL証明書を剥がしてhttp化したいと思います。

### 期限切れのタスクの表示を変えたい
期限が切れても何も起こらなかったら焦りを煽り切れない気がします。
期限が切れるともっと焦るページを作りたいです。

### PWA化したい
現在はリロードをすると簡単に請求画面を閉じられてしまいます。
PWAをスタンドアローンで起動するとブラウザのツールバーは表示されないので請求画面を閉じられないようにPWA化したいです。
Pythonで「リスト内包表記を使ったリストの作成」の動作を確認してみた

# 概要

Pythonで「リスト内包表記を使ったリストの作成」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/list/index16.html

# 実装

以下のファイルを作成しました。
```sample.py
mylist = [i for i in range(1, 6)]
print(mylist)
mylist = [i * 10 for i in range(1, 6)]
print(mylist)

mylist = []
for i in range(1, 6):
    mylist.append(i * 10)
    
print(mylist)

mylist = [i for i in range(1, 20) if i % 3 == 0]
print(mylist)

mylist = []
for i in range(1, 20):
    if i % 3 == 0:
        mylist.append(i)

print(mylist)
```

以下のコマンドを作成しました。
```
$ python3 sample.py 
[1, 2, 3, 4, 5]
[10, 20, 30, 40, 50]
[10, 20, 30, 40, 50]
[3, 6, 9, 12, 15, 18]
[3, 6, 9, 12, 15, 18]
```

# まとめ

何かの役に立てばと。
これからデータサイエンス、AIを本格的に学ぶ人へ 📚

# <font color=royalblue> はじめに </font>
これからデータサイエンスやAIを本格的に学びたい人向けに、著者が勉強したメモを稚拙ながらQiitaの記事に掲載してきたものから抜粋したものになります。少しでもお役に立てればと思います。　


# <font color=royalblue> 1.データサイエンス、統計検定 </font>
&nbsp;
## <font color=green> プログラミング </font>
+ Python、Numpy、Pandas、Matplotlibの公式チュートリアルを、Googleコラボ上で動かしながらセルフ学習できるようにしたものです。筆者の観点でポイントをいくつか記載しています。

https://qiita.com/DeepTama/items/25eccdf154988b93a570

&nbsp;
<font color=gray>[補足]Pandasの高速化ライブラリィ
Pandasを(コード修正なく)高速化するライブラリィの紹介です。 </font>

https://qiita.com/DeepTama/items/09b5f57654aa7a8af6a7

## <font color=green> 統計検定２級 </font>
これから統計を勉強し、統計検定２級のテストを受ける人向けに整理したチュートリアルです。テストを受けるにあたり注意すべきポイントも記載しています。

https://qiita.com/DeepTama/items/113446e95add1d9d4877

## <font color=green>統計検定準１級</font>
統計検定準１級を受ける人向けに整理したチュートリアルです。テストを受けるにあたり注意すべきポイントも記載しています。

https://qiita.com/DeepTama/items/9a07129626f82e9add5e

## <font color=green>統計検定データサイエンスエキスパート</font>
統計基礎と数学基礎のパートのチートシートです。他のパートも含めて、まだまだ記載途中ですので準備ブラッシュアップしています。

https://qiita.com/DeepTama/items/4eed0a5eb5a234bde8b0

https://qiita.com/DeepTama/items/9cd9828714db702bd678



# <font color=royalblue> ２. AI、ディープラーニング </font>
ディープラーニング、自然言語処理から生成AIまで整理した記事です。

## <font color=green>ディープラーニングの基礎</font>
ディープラーニングを理解する上で基礎となるCNNの説明です。

https://qiita.com/DeepTama/items/379cac9a73c2aed7a082

## <font color=green>物体検出</font>
代表的な物体検出モデルの１つであるSSDについて説明したものです。

https://qiita.com/DeepTama/items/aab46729d2aa51a8954d

## <font color=green>画像生成</font>
代表的な画像生成モデルの１つであるStyleGAN2について実装コードの観点から説明したものです。

https://qiita.com/DeepTama/items/b61a7d72140f700543b8

## <font color=green>自然言語処理＆生成AI</font> 
初期の自然言語モデルであるRNNから、LSTMそしてTransFormer/Attentionに至るまで整理した記事です。

https://qiita.com/DeepTama/items/20b93ff8b8547428f662


生成AI(GPT3の仕組み）を整理したものです。

https://qiita.com/DeepTama/items/63cbc1221662f9e86ac0

自然言語処理でのタスクとデータセットを整理したものです。

https://qiita.com/DeepTama/items/fca52f2289a1c8fa5405

# <font color=royalblue> おわりに </font>
今後ともデータサイエンス、AI/生成AIを中心に勉強したメモを記事にしていきたいと思います。また、過去の記事も順次見直しを行い、ブラッシュアップしていき少しでも良い記事にしていきたいと思います。
記載に間違えがあれば修正していきますので、ご指摘をいただければと思います。