OmniAICreator/Qiita-1.07M huggingface dataset:
Saas(scss)でLegacy JS APIによるエラーが起きた(；；)→解決方法

# はじめに
Sassを使っていた時に以下のようなエラー文がでてsassのスタイリングが反映されない状態に陥りました。このようなときの解決方法を共有しようと思います。

```
 ⚠ ./src/styles/globals.scss.webpack[javascript/auto]!=!./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[11].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[11].use[3]!./node_modules/next/dist/build/webpack/loaders/resolve-url-loader/index.js??ruleSet[1].rules[13].oneOf[11].use[4]!./node_modules/next/dist/compiled/sass-loader/cjs.js??ruleSet[1].rules[13].oneOf[11].use[5]!./src/styles/globals.scss
Deprecation The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

More info: https://sass-lang.com/d/legacy-js-api

<省略>

./src/feature/menubar/components/search.module.scss
Deprecation The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.

<省略>

Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

<省略>
```

# 問題
### 1. Legacy JS APIの非推奨警告
```
Deprecation The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.
```
Dart Sassの古いJavaScript APIが使用されている
Sass 2.0.0で完全に削除されたの機能を使用している
### 解決策
安定版のsass@1.69.5にダウングレードする
 - npmの場合
     ```
     npm uninstall sass
     npm install sass@1.69.5
     ```
 - yarnの場合
    ```
    yarn remove sass
    yarn add sass@1.69.5
    ```
 - pnpmの場合
    ```
    pnpm remove sass
    pnpm add sass@1.69.5
    ```
::: note info
誰かと共同開発する時は環境については念入りに話し合っておこう
:::

### 2. ネストルールの後の宣言に関する警告
```
Sass's behavior for declarations that appear after nested rules will be changing
```
Sassのネストされたルールの後に宣言が書かれている
この書き方は将来的なCSSの仕様変更により動作が変わる
#### 修正方法
1. 宣言をネストルールの前に移動する
2. 宣言を& {}でラップする
```
// 問題のあるコード
.container {
  .nested {
    color: red;
  }
  background: white; // ← この位置が問題
}
```
```

// 修正方法1: 宣言を前に移動
.container {
  background: white;
  .nested {
    color: red;
  }
}
```
```

// 修正方法2: & {}でラップ
.container {
  .nested {
    color: red;
  }
  & {
    background: white;
  }
}
```

:::note warn

自分でコード見てがそんなことがなかったので①がおかしかったら警告が出ることがある？？

:::

# 最後に
今回はわたしにエラーが起き、これを治すために長時間かかってしまったので、とりあえずの応急処置としての解決方法を共有しました。少しでも多くの人がエラーで困ることがないことを願っています。
それではみなさん、良いエンジニアライフを〜👋

# お願い
今回は自分が調べた中では、いちばん簡単にできる解決方法としてバージョンを下げることをしました。しかし，これは根本的な解決方法ではないと思います。もし知っている方がいらっしゃいましたら、なにが影響でJSAPILegacyエラーが起きたのか，どうすれば確認でき、事前に対策できるのか等、コメントにて教えていただけると幸いです。

# 参考
- Sassの記事

https://sass-lang.com/documentation/breaking-changes/legacy-js-api/

- Viteでの解決方法らしい

https://zenn.dev/energyzunda/articles/2710b25279da9f
【WindowsForm】RichTextBox に右クリックメニューを実装する

今回は WindowsForm の
RichTextBox に
右クリックメニューを
付与する方法の紹介です。

この手順を踏めば
右クリックメニューを
簡単に実装出来ます。

***

手順 1 フィールドを足す

まずはフィールドに
次の記述を足します。

```csharp:作業 1
private ContextMenuStrip contextMenuStripOnPanel = new ContextMenuStrip();
```

そのままコピペして
貼り付けて頂いて OK です。

***

手順 2 コンストラクタに足す

次にコンストラクタの最後に
次の記述を足します。

```csharp:作業 2
contextMenuStripOnPanel.Opening += new CancelEventHandler(cms_Opening);
richTextBox1.ContextMenuStrip = contextMenuStripOnPanel;
```

そのままコピペして
貼り付けて頂いて OK です。

コンストラクタという表現があいまいで
何を指しているか分からない場合は
フォームの初期化処理の最後に記述して下さい。

***

手順 3 メソッドを足す

最後にメソッドを足します。

```csharp:作業 3
        void cms_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip menuOnPanel = (ContextMenuStrip)sender;

            Point mp = MousePosition;
            menuOnPanel.SourceControl.PointToClient(mp);

            contextMenuStripOnPanel.Items.Clear();

            contextMenuStripOnPanel.Items.Add("コピー");
            contextMenuStripOnPanel.Items[0].Click += PanelMenuItems0_Click;

            contextMenuStripOnPanel.Items.Add("貼り付け");
            contextMenuStripOnPanel.Items[1].Click += PanelMenuItems1_Click;

            e.Cancel = false;
        }

        private void PanelMenuItems0_Click(object sender, EventArgs e)
        {
            if (0 < richTextBox1.SelectionLength)
            {
                Clipboard.SetText(richTextBox1.Text.Substring(richTextBox1.SelectionStart, richTextBox1.SelectionLength));
            }

            richTextBox1.Focus();
        }

        private void PanelMenuItems1_Click(object sender, EventArgs e)
        {
            int selectoin = richTextBox1.SelectionStart;
            string insertString = Clipboard.GetText();
            richTextBox1.Text = richTextBox1.Text.Substring(0, selectoin) + insertString + richTextBox1.Text.Substring(richTextBox1.SelectionStart + richTextBox1.SelectionLength);
            richTextBox1.SelectionStart = selectoin + insertString.Length;
            richTextBox1.SelectionLength = 0;
            richTextBox1.Focus();
        }
```

そのままコピペして
貼り付けて頂いて OK です。

以上で作業は完了です。

***

以上 RichTextBox に
最低限の右クリックメニューを足す
手順を紹介しました。

このコードを解析すれば
右クリックメニューを増やすのも
簡単にできると思います。

この記事が皆さんの開発の助けになれますように。
閲覧ありがとうございました。

***

参考サイト

この記事は下記のサイトを参考にしました。
https://qiita.com/guijiu/items/ef6a29fcfd9741241e43

参考にしたサイト作成者様に感謝します。
GitHub Educationの申請に失敗したときの対処法

# 前置き（読み飛ばしていただいても大丈夫です）
学生限定で様々なサービスを利用することができる``GitHub Education``の存在を知り、さっそく申請しましたが、私は何度も失敗していました。
つい最近になってようやく申請が通ったので私が申請時に見落としていた点をまとめました。以前の私のような境遇の方がいたらぜひ参考にしてください。
なお、この記事ではすでに申請の準備を大半終えている読者を対象にしているので申請手順を１から説明してはいないので注意してください。
（以下が申請ページです。）

https://education.github.com/benefits

# 本題
### アカウント設定について
<dl>
<dt>学校のメールアドレスが追加されているか
<dd>

https://github.com/settings/emails

ここから、自分が所属する学校のメールアドレスが追加されているか確認してください。（Primaryにする必要はありません）<br>
GitHub Educationの申請ページでは、ほとんどの場合、学校のメールアドレスを選択すると自動で学校名が入力されます。
<dt>二段階認証がされているか
<dd>

https://github.com/settings/security
ここから、二段階認証（Two-factor authentication）が設定されているか確認してください。画面の手順にそって進めていけば完了します。<br>
<dt>Payment informationの設定がされているか
<dd>

:::note info
学生証を撮影して提出した後、下の画像のような表示がでた場合に読んでください。<br>
:::
https://github.com/settings/billing/payment_information<br>
こちらのページに移動して必須（*）欄を埋めましょう。なお、<strong>Address</strong>には自分の学校の名前（申請フォームに入力したものと同じつづり）を入力してください。なお、支払い方法を設定しておく必要はありません。

</dl>

![2c12a5bda17f-20231022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817741/74be2350-8b5c-130d-7c87-119e20448756.png)

### その他
<dl>
<dt>位置情報がオンになっているか
<dd>メールアドレス、学校名を入力して<strong>continue</strong>を押すと位置情報を取得しようと通知が来ます。許可するをおしても位置情報がオフのままなことが時々あるようなのでデバイスの設定画面から確認しておきましょう。<br>
なお、学校または学校の近くだと申請が通りやすいという話を耳にしますが、自宅からでも申請が許可された方もいるのでマストではないでしょう。
<dt>学生証の写真に必要事項が書かれているか
<dd>基本学生証の写真なら大丈夫だと思いますが、アップロードした写真に学校名が記載されているか確認してください。（学校のロゴのみでは不十分です）
</dl>

# それでも解決しない場合

![cf0a922caff8-20231022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817741/647ab99e-2ceb-60a5-503b-6015fc77c40c.png)
上のような画像が表示されても、設定や申請内容によっては申請が通っていないことがあります。

https://education.github.com/discount_requests/application?type=student

上のリンクから少し下に行ってもらうと申請の結果を確認することができます。``Rejected``の場合は、その下の文をよく読み、不備がないかどうかを確認してください。
それでも上手くいかない場合は公式ドキュメント（下1つ目）を確認してみるか、公式に問い合わせてみましょう。（2つ目）

https://github.com/orgs/community/discussions/111352#user-content-how-long-after-ive-been-approved-will-i-receive-my-academic-benefits

https://support.github.com/contact/education?tags=dotcom-footer

では、最後まで読んでくださりありがとうございました。
Pythonにジョークを言われた（？）話

# 経緯
大学でこんな課題が出されました。<br>

> 任意の文字列を入力させ、その文字列の文字数が9でない場合は、while文を使い，入力された文字列の文字数が9となるまで，何度でもユーザーから文字列を入力させなおせるプログラムを作成せよ。

私は以下のように解答しました。

~~~python
input_str = input("文字列を入力してください。:")
while len(input_str) != 9:
  input_str = input("もう一度文字列を入力してください。:")
~~~

いざ実行してみると、
~~~
SyntaxError: with Barry as BDFL, use '<>' instead of '!='
~~~
とエラーメッセージが表示されました。

# 対処
文法的な誤りはないはずなのに、エラーだったことが疑問で、ChatGPTに尋ねてみました。
以下のように回答が返ってきました。

> このエラーメッセージは、Pythonの古いバージョンやジョークで見られるものです。
しかし、Pythonの標準的な構文では、このエラーメッセージは実際には表示されません。
**エラーメッセージにある「Barry as BDFL」という部分は、Pythonの創始者であるGuido van Rossumを指しており、Pythonの内部ジョークである「Barry's BDFL（Benevolent Dictator For Life）」のものだと考えられます。** 
現在のPythonのバージョンでは != は正しい不等号演算子で、エラーにはなりません。
考えられるのは、以下のような原因です：
> <ol>
> <li>Pythonの一部の拡張機能やモジュールが何らかのジョークエラーメッセージを追加している。
> <li>使用している環境が特別な設定やカスタマイズがされている。
</ol>
インストールされているPythonのバージョンやモジュールを確認してみても特に異常はなかったため、使用環境に問題があると私は考えました。

:::note info
試行錯誤した結果、私たちが実行していたGoogle Colaboratory（Colab）側に何らかのエラーがあったようです。（特定はできませんでした。）
Colabのメニューから「ランタイム」→「ランタイムを再起動」を選択し、環境を初期状態に戻して再度試すとうまくいきました。
:::

## おわりに
プログラミングに触れて以来、たくさんのエラーメッセージに悩まされましたが、今回このような初めてジョーク交じりのエラー（？）がでて正直驚きました。これからもエラーにうまく対処できるよう頑張っていきます。
<br>この記事が少しでも参考になった方がいたら幸いです。
<br>最後まで読んでくださりありがとうございました！
画像生成AIにとって一番嫌なノイズを探す -結論編-

## 概要

生成AIが発展する一方で、権利者が望まない無断のAI学習が問題になってきています
この記事では、学習用画像にノイズが入っていた場合、画像生成AIにどのような影響があるのかを調査しました

※この記事群は2024/10末時点の調査に基づいています

## 結論

![summary_mwm20241111_172611.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/9fa1e418-d6d7-62d9-f7d2-8cd86e5c50e4.png)

## 根拠

1. 綺麗な画像を投稿したい

X (旧Twitter) では 2024/11/15 より利用規約が変更になるなど、SNSはノイズなしのオリジナル画像を投稿するのに不向きになってきています

**ニコニコ動画**

明確な禁止ガイドラインは存在しません

https://www.nicovideo.jp/guideline.html

**pixiv**

> pixivおよびその関連サービスに投稿されているものを学習し、その投稿者の不利益となる行為を禁止行為として明記しました。たとえば投稿者本人の許諾を得ずに作品を学習データとして利用し、AI等のプログラムを用いて著しく似た作品を投稿したり、作風を再現するなどして学習元となった作品の投稿者に不利益が発生する場合は禁止行為にあたります。

https://www.pixiv.net/info.php?id=9640

**Xfolio**

> 第 18 条 禁止行為
ユーザーは、本件サービスの利用にあたり、以下の各号に該当する行為を行ってはならな
いものとします。 
> (19)本件サービスに投稿された他の会員の投稿情報の全部又は一部をコンテンツを生
成する AI 等の技術開発のための学習データとして利用する行為、又は当該行為を
助長、誘導する行為 

https://xfolio.jp/portfolio/official/fan_community/12011

-------

２. AIに学習（LoRA）された時に反撃したい

1. [画像生成AIにとって一番嫌なノイズを探す -調査編(1)-](https://qiita.com/miu200521358/items/81439ba159d836faa0f4)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(3)-](https://qiita.com/miu200521358/items/4126f24c26d61e1b9720)

Nightshade, Glaze を強くかけると確かに学習結果に影響が出る事を検証済みです
ただし、Lowでは（少なくともイラスト系画像の生成においては）ほとんど効果は出ませんでした
なお、かける順番については公式アナウンス準拠です

-------

３. AIの学習元として不適切だと思わせたい

1. [画像生成AIにとって一番嫌なノイズを探す -調査編(2)-](https://qiita.com/miu200521358/items/e3e7bee24aee5a6dbe9b)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(3)-](https://qiita.com/miu200521358/items/4126f24c26d61e1b9720)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(4)-](https://qiita.com/miu200521358/items/5140ce700a9481aa15e3)

ランダムウォーターマークは2024/10末時点ではまだAIでも除去しづらい事を検証済みです
ウォーターマークが入ったままの画像を学習すると、生成結果に反映されやすくなるため、学習者によって意図的に除外される可能性が高くなると考えています

-------

４. 自分の著作物である事を主張したい

1. [アートノト - SNS上の権利侵害について](https://note.com/artnoto/n/n9bfaa858952e)
1. [文化庁 - 相談窓口](https://www.bunka.go.jp/seisaku/chosakuken/kaizoku/contact.html)

> サイン（著作者名の表示）が表示されなくなるようなトリミングを行えば、氏名表示権（同法19条1項）の侵害にも該当する。

[アートノト - SNS上の権利侵害について](https://note.com/artnoto/n/n9bfaa858952e) より引用

上記対策四選の画像にも隠し透かし文言「presents by miu」を入れています

## 宣伝

上記対策の2と4を目的としたGUIツールを作成しました
指定した画像にランダムウォーターマーク画像、サイン画像、隠し透かし文言を一度に入れられるツールです
調査編(4)のランダムウォーターマーク付与にも使用しました
フリー配布ですので、よろしければお試しください

[MuWatermark - BOOTH](https://miu200521358.booth.pm/items/6278781)

## 調査資料

1. [画像生成AIにとって一番嫌なノイズを探す -結論編-](https://qiita.com/miu200521358/items/35f19ec198ba1a1fe563)
1. [画像生成AIにとって一番嫌なノイズを探す -準備編-](https://qiita.com/miu200521358/items/379ff032eaf43f055939)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(1)-](https://qiita.com/miu200521358/items/81439ba159d836faa0f4)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(2)-](https://qiita.com/miu200521358/items/e3e7bee24aee5a6dbe9b)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(3)-](https://qiita.com/miu200521358/items/4126f24c26d61e1b9720)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(4)-](https://qiita.com/miu200521358/items/5140ce700a9481aa15e3)
1. [画像生成AIにとって一番嫌なノイズを探す -実装編-](https://qiita.com/miu200521358/items/6ffe0c8db4e3d88bc0c5)

## 最後に

この調査結果がご自身の創作物を大切にされる一助になれたら嬉しいです
無断で採取した作品による安易な学習行動はご再考いただけますと幸いです
【はじめまして Vue.js】はじめの一歩

## はじめに
これまでReactしか触れてきませんでしたが、ここに来てVue.jsの知識習得の必要が出てきたため、インプット定着のためのアウトプットの場としてブログにメモを残していこうと思います。

**筆者レベル感**
- React：大体わかる、実装できる
- Vue.js：名前は知っているけど中身は一切知らない

## Vue.jsの基本
### まずはindex.html, main.js, App.vue を理解する

- `index.html`
    - アプリケーションの土台のHTMLファイル。`<div id="app"></div>`ではmain.jsで定義したVueアプリケーションが表示される
    - `main.js`でこの要素にVueアプリケーションがマウントされている
    ```HTML: index.html
    <!DOCTYPE html>
    <html lang="">
      <head>
        <meta charset="UTF-8">
        <link rel="icon" href="/favicon.ico">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Vite App</title>
      </head>
      <body>
        <div id="app"></div>
        <script type="module" src="/src/main.js"></script>
      </body>
    </html>
    ```
    　
- `main.js`
    - Vueインスタンス（アプリケーションの起点）を作成や、ルートコンポーネント（`App.vue`）を画面にマウントするなど、アプリ全体の初期設定を行う
    ```typescript: main.js
    import { createApp } from 'vue' // vueのアプリケーションを構築
    import App from './App.vue' // component
    
    const myApp = createApp(App)
    
    // createAppで構築したUIを表示できるようにする
    // 以下の引数の #app は、index.htmlのid=appを指している
    // id=appを持つ要素に、ここで構築したUIを渡す
    myApp.mount('#app')
    ```
    　
- `*.vue`
    - コンポーネントを定義するファイル
    - 通常、`<template></template>`、`<script></script>`、`<style></style>`の3部構成
    - 単一ファイルコンポーネント(SFC:Single File Component)と呼ばれる
    - `App.vue`はルートコンポーネント
    ```javascript: App.vue
    <script setup>
    // ここにはjavascriptを書いていく
    
    const message = 'Hello!'
    const name = 'meme'

    console.log(`${message} My name is ${name}.`)
    

    </script>

    <template>
      <!-- 表示させる内容を記載する -->
    
      <h1>{{ message }}</h1>
      <h2>Welcome to my page.</h2>
      <h3>My name is {{ name }}.</h3>
      
    </template>
    
    <style>
    /* ここにはCSSを書いていく */
    h1 {
      color: orange;
    }
    
    h2 {
      color: green;
    }
    
    h3 {
      color: pink;
    }
    
    </style>
    ```

本当に基礎の基礎からのスタートなので、少しずつ重ねてゆきます🙏
もし間違いや、誤解を招きそうな表現がありましたら、お手数ですが
ご指摘をいただけますと幸いです！
UE5.3でStaicMeshEditorSubsystemを使ってみた

EditorScriptingUtilitiesプラグインを利用しているとStaicMeshEditorSubsystemを使えという警告が出て対応してみた内容をメモしておきます。

# 環境

UE5.3.2

# EditorScriptingUtilitiesプラグインの警告

Editor Scripting UtilitiesのMergeStaticMeshActorsノードをBPで使っていたら以下のような警告が出ていました。
Editor Scripting UtilitiesプラグインはdeprecatedなのでStaicMeshEditorSubsystemを使えということらしいです。

```
Merge Static Mesh Actors : Usage of 'Merge Static Mesh Actors' has been deprecated. The Editor Scripting Utilities Plugin is deprecated - Use the function in Static Mesh Editor Subsystem
```

# BPでStaicMeshEditorSubsystemを取得できない

https://kinnaji.com/2022/03/14/deprecated-esup/

上記のような記事を参照してBPでStaticMeshEidotrSubsystemを使おうとしましたがうまくいきませんでした。
確かにContent Sensitiveのチェックを外すとMergeStaticMeshActorsノード(Target is Static Mesh Ediotr Subsystemになっている)は出てくるのですが、StaticMeshEditorSubsystemをgetするノードが出てきません。

以下のForumでも同じ状況のようです。

https://forums.unrealengine.com/t/unreal-has-no-attribute-staticmesheditorsubsystem/1706547/11
> in unreal 5.3.2 on the “DataPrep Editing Operator” BP,
i have the same issue I used an old “Merge Static Mesh Actors” deprecated
unreal tell me to use the new one, but if I try to get the “Static Mesh Editor SubSystem” I doesn’t exist

# 対応してみた

以下のようにしてUStaticMeshEditorSubsystemを得るノードを作ってMergeStaticMeshActorsノードに接続したらうまくいきました。

```c#:[project].build.cs
PrivateDependencyModuleNames.AddRange(new string[] { ... , "StaticMeshEditor", "UnrealEd"});
```

```cpp:
#include "StaticMeshEditorSubsystem.h"
...
UFUNCTION(BlueprintPure)
static UStaticMeshEditorSubsystem* GetStaticMeshEditorSubsystem()
{
    return GEditor->GetEditorSubsystem<UStaticMeshEditorSubsystem>();
}
```

# 補足

ソースコードを参照するとEditorScriptingUtilitiesプラグインのMergeStaticMeshActors関数の中身はそのままStaticMeshEditorSubsystemを使ってるだけなので処理内容は変わらないようです。
https://github.com/EpicGames/UnrealEngine/blob/5.3/Engine/Plugins/Editor/EditorScriptingUtilities/Source/EditorScriptingUtilities/Private/EditorLevelLibrary.cpp#L420-L426

```cpp:Engine\Plugins\Editor\EditorScriptingUtilities\Source\EditorScriptingUtilities\Private\EditorLevelLibrary.cpp
bool UEditorLevelLibrary::MergeStaticMeshActors(const TArray<AStaticMeshActor*>& ActorsToMerge, const FEditorScriptingMergeStaticMeshActorsOptions_Deprecated& MergeOptions, AStaticMeshActor*& OutMergedActor)
{
	UStaticMeshEditorSubsystem* StaticMeshEditorSubsystem = GEditor->GetEditorSubsystem<UStaticMeshEditorSubsystem>();

	return StaticMeshEditorSubsystem ? StaticMeshEditorSubsystem->MergeStaticMeshActors(ActorsToMerge, InternalEditorLevelLibrary::ConvertMergeStaticMeshActorsOptions(MergeOptions), OutMergedActor) : false;

}
```
【エラー解消】AWS SDK for KotlinのS3Client.putObjectで発生したNoClassDefFoundError

# 前提

| 環境              | 値                                            |
| ----------------- | --------------------------------------------- |
| OS                | Mac（M1）                                     |
| Language          | Kotlin                                        |
| IDE               | IntelliJ IDEA 2024.1.1 (Community Edition)    |
| SDK               | corretto-21(Amazon Corretto 21.0.3 - aarch64) |
| aws.sdk.kotlin:s3 | 1.3.67                                        |

# 事象

[AWS SDK for KotlinのDeveloper Guide](https://docs.aws.amazon.com/ja_jp/sdk-for-kotlin/latest/developer-guide/home.html)の[S3Client.putObjectsサンプルコード](https://docs.aws.amazon.com/ja_jp/sdk-for-kotlin/latest/developer-guide/kotlin_s3_code_examples.html)を参考に実装を行なったところ、下記エラーが発生した。

```bash
Caused by: java.lang.NoClassDefFoundError: okhttp3/ConnectionListener
```

## 解消できた方法

S3ClientのhttpClientに対して`CrtHttpEngine`を設定する。

```kotlin
//build.gradle.ktsに下記を追加
implementation("aws.smithy.kotlin:http-client-engine-crt:1.3.20")
```

```kotlin
suspend fun putS3Object(
    bucketName: String,
    objectKey: String,
    objectPath: String,
) {
    val request =
        PutObjectRequest {
            bucket = bucketName
            key = objectKey
            body = File(objectPath).asByteStream()
        }

  	CrtHttpEngine().use { engine ->
        S3Client {
          region = "us-east-1"
          httpClient = engine //<-CrtHttpEngineを使用するよう指定
        }.use { s3 ->
            val response = s3.putObject(request)
            println("Tag information is ${response.eTag}")
        }                
    }
}
```

## 解消できなかった方法

- aws.sdk.kotlin:s3を最新バージョン（1.3.69）に変更する
- [デフォルトのOkHttpEngineが使用できない場合の案内リンク先](https://github.com/smithy-lang/smithy-kotlin/tree/main/runtime/protocol/http-client-engines/http-client-engine-okhttp4)に従い、S3ClientのhttpClientに`OkHttp4Engine`を設定する
- 依存関係に`com.squareup.okhttp3:okhttp:4.12.0`を追加する
- resolutionStrategyで`com.squareup.okhttp3:okhttp:4.12.0`に統一する
- 依存関係に`com.squareup.okhttp3:okhttp:5.0.0-alpha.12（alphaだけど安定版の案内あり）`を追加する
- 依存関係に`com.squareup.okhttp3:okhttp:5.0.0-alpha.11（安定版のひとつ前）`を追加する
- 依存関係に`com.squareup.okhttp3:okhttp:5.0.0-alpha.14（最新版）`を追加する

# TIPS（ChatGPT利用）

## httpClient

HTTP通信を行うためのエンジンを指定するプロパティ。

## OkHttpEngine

### 概要

高速で効率的なHTTPクライアントライブラリ。

### 特徴

- HTTP/1.1、HTTP/2、及びWebSocketサポート
- 接続プールや自動リトライ、接続管理など、高度な機能が提供される
- セッションの管理（クッキー、リダイレクト、キャッシュ）など、標準的なHTTP通信のための多数の機能
- Android向けでよく使われる

## OkHttp4Engine

### 概要

OkHttpライブラリのバージョン4.xを使用するエンジン。

### 特徴

- 非同期処理をより強力にサポート
- Kotlinに対応したコルーチンベースの非同期処理（`suspend`関数等）を利用可能
- HTTP/2、HTTP/3のサポート（特にHTTP/3は4.xからの新機能）
- セキュリティの向上（TLS 1.3、HTTP/2の強化など）
- APIがシンプルで、以前のバージョンよりも直感的に使いやすい

## CrtHttpEngine

### 概要

AWSの `Crt`（Common Runtime）ライブラリに基づくHTTPクライアントエンジン。AWS Crtライブラリのネットワークスタックを利用するため、高性能なHTTP通信を提供してくれる。C/C++で書かれた低レベルのコードが含まれており、効率を重視するシナリオで使用される。

### 特徴

- 高いパフォーマンスと低レイテンシを提供
- AWS SDKやIoTデバイスとの統合で特に効果を発揮
- 設定が豊富で、トラフィック管理やトラフィック制限、接続管理が細かく制御できる
- デバイス向けに最適化された設計（IoTなど）
- HTTP/1.1、HTTP/2に加えて、TLS接続が非常に強化されている
[DataSaber取得を考えている人へ]新卒入社2か月、Tableau知識ゼロからDataSaberに挑戦して感じた４つのポイント

# <a id="section0" href="#section0">はじめに</a> 
こんにちは。DataSabar取得に向け鍛錬中のしまです。
今回は私が新卒入社の配属後2か月ほど経つ2024/8/22からTableau知識ゼロの状態で
DataSaberに挑戦してみて、80日経過した2024/11/11現在思うことを
**4つのポイント**で語ります。
これからDataSaber取得を考えている方の役に立てたらいいな。と思っています。
ぜひ見ていってください。

※タイトルでは入社2か月と書いてますが実際は配属2か月です。少し盛ってます。ご容赦ください(笑)

## <a id="index" href="#index">目次</a>
* [はじめに](#section0)
* [①：なめてかかるな！時間の確保が重要！](#section1)
* [②：「覚える」、ではなく「理解」しろ！](#section2)
* [③：師・仲間を頼れ](#section3)
* [さいごに](#section4)



# <a id="section1" href="#section1">なめてかかるな！時間の確保とスタートダッシュが重要</a> 
DataSaberの資格を取ることの特徴の１つに
「90日間」という期限が存在する部分があります。

期間が設定されているのは、
短期間集中的にひたすらDataと向き合うことで
Dataに関わる自分の殻を破るためだと解釈してます。

この期間を有意義なものにするためにも「**時間の確保**」が重要です。
残業があったり、家庭をもっていたりすると平日なかなか時間が取れません。
DataSaber取得に必要な学習時間は120時間程度（個人差あり）とも言われているので土日に勉強がおすすめです！
先90日の予定でなるべく土日に予定がないことを確認してスタートしましょう。

自分の場合3連続で旅行の予定が入っていて時間が取れず苦しみました、、、
せっかく旅行も思う存分楽しめず、DataSabarの勉強もできずということにならないようにしてください！(笑)


 　
もう１つ、「**早めの着手**」が超重要だと感じます。

スタートダッシュ
↓
早めに１０の試練、コミュニティポイントを突破（70日経過時点で突破を目安）
↓
余裕をもって試験に向けて勉強

とできると理想です。
Tableau初心者の場合は特に、最終試験に向けてTableauの操作を体に覚えさせるために反復が必要です。
そのために早めに試練・コミュニティポイントを突破する必要があり、スタートダッシュが重要ということです。

自分の場合、DataSabarへの道に本気で向き合えたのが2週間経過時点くらいで、それまであまり勉強できていませんでした。。
結果、終盤気持ち的な余裕がなくなりしんどかったです。

よいDataSabar修行ライフを送るためにもDataSabarを理解し、気持ちの用意をしてから望みましょう！




<p class="ec__link-index"><a href="#index">[↑ 目次へ]</a></p>

# <a id="section2" href="#section2">「覚える」、ではなく「理解」しろ！</a>

正直、Tableau初心者では10の試練を何も見ずに解くのは不可能です。
※1度何も見ずに挑戦することはしてみてください
Tableauを知らないのですから当然です。

となるとKTさんの動画視聴をはじめ自分で調べながらやることになります。
とりあえず答えを作り、「ふ～ん、こうやってやるんだ」となると思います。
1回では自分で実装できないのでもう1回、2回同じ問題を解いて自力でできるようになります。
ここまでで、その問題の解き方が覚えられます。
読者の方にはその次を意識してほしいと思います。
それは、問題に対して「なぜそのVizを作るのか」「そのVizを作成するためにどのような操作が必要になったか」「その操作をした根拠は何か」を自分なりに噛み砕いて理解することです。
このうち「その操作をした根拠は何か」は後半の試練に必要になる要素です。
（後半の試練で出てくるクエリパイプラインとLOD表現という概念が物凄く重要になってくるのですがここでは割愛します）
この3点を自分で理解し整理できるとこんな場合にはこれ使うんだなと、汎化できます。
自分の業務や活動での活用シーンを具体的に想像できるとなおよいと思います。
（自分はこれが苦手で修行が必要です、、、）

まとめるとこんな感じです。
【10の試練への向き合い方】
何も見ずに挑戦してみる（時間を使いすぎずわからないところはとばしてよい）
↓
KTさんの動画や調べて答えを作る
↓
繰り返し解いて自力でできるようになる
↓
「課題に対してそのVizを選択した理由」
「そのVizを作成するために必要なTableau操作」
「その操作をした根拠」
を自分なりに嚙み砕いて理解






<p class="ec__link-index"><a href="#index">[↑ 目次へ]</a></p>

# <a id="section3" href="#section3">師・仲間を頼れ</a>
はじめ、Tableauの知識もDataSabarのこともわからないことだらけだと思います。
そこでDataSabar挑戦の上で自分の師となってくれた方と同じタイミングで始めた挑戦者（Apprentice）を頼りましょう。
例えば、
・調べても解決できないTableau知識について会話する
・Tableau勉強の参考になるサイトやおすすめの勉強方法について聞く
・コミュニティポイント獲得のためのテーマを相談する
などがあります。

私の場合、
分からなかったTableau知識に関して師匠やともに挑戦する方とディスカッションすることで理解が大きく進み、深まりました。
また、組織内（社内）のコミュニティポイントのテーマについて、自分で考えたものにたいしてアドバイスをいただきました。
師匠と仲間（先輩）には本当に感謝しています。

師匠や仲間は（たぶん）やさしい方ばかりなので些細なことでもコミュニケーションをとって90日を過ごしましょう！



<p class="ec__link-index"><a href="#index">[↑ 目次へ]</a></p>

# <a id="section4" href="#section4">さいごに</a>

自分は3日後に技術試験、8日後に口頭試験を控えている状況です。
ここまでやってきて、始めと比較するとTableau技術とデータ文化の重要性を理解したうえで広めるマインドの両方が確実についてきたと感じています。
後悔はしない挑戦だと思いますので、ぜひ飛び込んでみてください！

<p class="ec__link-index"><a href="#index">[↑ 目次へ]</a></p>
プチ話 友達と喧嘩したとき、for文であやまった話。

# プチ話書く
友達とまた喧嘩をしたときに、for文であやまった話をします。
ちなみにまた友達から記事を書く許可もらってます。

1年前くらいにはif文であやまってます

https://qiita.com/Atsu1209jp/items/9a85debb364994e51e12

# 本題
友達と喧嘩したときにLineにこんなメッセージ送った。
```javascript
for (let i = 0; i < 100; i++) {
    console.log("sorry");
}
```
そしたら友達から
```javascript
for (let i = 0; i < 100; i++) {
    console.log("I'm sorry too");
}
console.warn("これ前にもやらなかった?");
```
って帰ってきた。
友達もif文のこと覚えてた。
【wxt + Vue3】Chromeの拡張機能を作ろう


:::note info
この記事は Chrome の拡張機能の概要を知っている人向けです
:::

すごく良い記事があったので拝借

https://zenn.dev/cybozu_frontend/articles/introduction-browser-extensions-tools

その中でも `wxt` が `nuxt` ライクで使いやすいとのことで即決


## インストールと起動

```bash
$ npx wxt@latest init <project-name>

wxt@0.19.11
Ok to proceed? (y) y

ℹ Initalizing new project                                             18:16:12
✔ Choose a template › vue
✔ Package Manager › npm

$ cd <project-name>
$ npm install

$ npm run dev
=> なんか開く
```

`npm run dev` を実行すると、自動的にブラウザが開く
何もせずに、この拡張機能がインストールされた状態の `Chronium` ブラウザが使える！！

![スクリーンショット 2024-10-13 21.17.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833190/036c90ae-8585-bdc0-ce8c-7bafdd264440.png)




## Chrome へ登録

とは言っても、通常使用の `Chrome` で動作確認を取りたいと思う
そしたら `.output/dist` を `Chrome` の拡張に追加する

chrome://extensions/  

「デベロッパーモード」をONに、「パッケージ化されていない拡張機能を読み込む」  

![スクリーンショット 2024-10-11 18.31.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833190/4c04d54a-71f9-5877-eb9d-5d7b9c8750ab.png)

こちらに `.output/chrome-mv3` のフォルダを設定する  

> mac の場合、  
> `Command + Shift + .` で `.output` を表示することができる

すると登録される　とても簡単

![スクリーンショット 2024-10-11 18.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833190/744473ee-99a5-7fa7-e1b2-1e92cba15814.png)

このライブラリ、なんと HMR に対応してるので、リロードとかせずに更新される

もし調子が悪かったら、以下の「くるくる矢印」か「更新」を押すと良い
権限など `manifest.json` を書き換える必要がある場合、押さないと変わらないことが多い

![スクリーンショット 2024-10-11 18.41.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833190/18a2c63f-3cd8-1cea-2c5b-fa607bc99dd3.png)


## フォルダ概念

Chrome の拡張は大きく三種類の概念、ファイルに分かれる

### `entrypoints/popup/main.ts`

ポップアップで使用されるコード  
先ほど右上のアイコンから表示させた画面が該当する


### `entrypoints/popup/background.ts`

Chromeの裏側で動くコード
時間経過の処理だったり、ブラウザのAPIを使う時に利用する


### `entrypoints/popup/content.ts`

特定のページを開い際に実行するコード
ページ自体の改造もできるし、ポップアップに情報を渡したり、データを保存したりできる

それぞれは相互に接続可能なので、機能を分割して組み合わせて作成する


## `manifest.json` どこ...？

manifest は `wxt.config.ts` に書くらしい
ただ、ほとんどのマニュフェスト情報は、コードから自動的に回収してくれるみたい
面白いライブラリだぁ

https://wxt.dev/get-started/configuration.html#manifest-json

`storage` 権限の例を下に載せる

```ts:wxt.config.ts
export default defineConfig({
  modules: ['@wxt-dev/module-vue'],

  manifest: {
    permissions: [
      'storage',
      'unlimitedStorage',
    ],
  },
})
```


## おわりに

簡単になったね... :joy:
cscの作法 その530

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
sqlite3でboolを使え。

# 方針
- create table, insert into, select やってみる。

# サンプルコード

```


using System;
using System.Text;
using System.IO;
using System.Data.SQLite;

namespace App
{
	public class Program {
		public static void Main(string[] args) {
			bool check = true;
			Console.WriteLine(check ? "Checked" : "Not checked");
			SQLiteConnectionStringBuilder ConnectionStr = new SQLiteConnectionStringBuilder();
			ConnectionStr.DataSource = "db0.sqlite";
			using (SQLiteConnection Connection = new SQLiteConnection(ConnectionStr.ToString()))
			{
				Connection.Open();
				using(SQLiteCommand Command = new SQLiteCommand(Connection))
				{
					Console.WriteLine("DROP TABLE");
					Command.CommandText = "DROP TABLE user";
					Command.ExecuteNonQuery();
					Console.WriteLine("create table");
					Command.CommandText = "create table user(id integer primary key, name text, updttm text, use bool)";
					Command.ExecuteNonQuery();
					Console.WriteLine("insert x 3");
					Command.CommandText = "insert into user(id, name, updttm, use) values(1, 'hoge', '2022-10-26', True)";
					Command.ExecuteNonQuery();
					Command.CommandText = "insert into user(id, name, updttm, use) values(2, 'fuga', '2022-10-27', False)";
					Command.ExecuteNonQuery();
					Command.CommandText = "insert into user(id, name, updttm, use) values(3, 'piyo', '2022-10-28', True)";
					Command.ExecuteNonQuery();
					Console.WriteLine("SELECTE");
					Command.CommandText = "SELECT * FROM user";
					using (SQLiteDataReader Reader = Command.ExecuteReader())
					{
						while (Reader.Read())
						{
							int Id = Reader.GetInt32(0);
							string Name = Reader.GetString(1);
							string Updttm = Reader.GetString(2);
							bool Use = Reader.GetBoolean(3);
							Console.WriteLine(string.Format("id: {0} name: {1} updttm: {2} use: {3}", Id, Name, Updttm, Use));
						}
					}
				}
			}
		}
	}
}





```

# 実行結果

```
>sql0
Checked
DROP TABLE
create table
insert x 3
SELECTE
id: 1 name: hoge updttm: 2022-10-26 use: True
id: 2 name: fuga updttm: 2022-10-27 use: False
id: 3 name: piyo updttm: 2022-10-28 use: True

```

以上
【Docker】MySQLに接続できない

## はじめに
DockerでMySQLのコンテナを起動した際に、接続できなくなったので、その対応をまとめます。

## 問題
エラー文
```
Access denied for user 'user'@'172.19.0.1' (using password: YES)
```

## 解決方法
このエラーが出た時の原因は色々あると思いますが、自分が遭遇した時の原因はDockerのボリュームでした。
名前付きボリュームを定義して立ち上げた時、文字コードの変更やMySQLバージョンの変更後に接続すると、このエラーが発生することがあります。
以下のコマンドでボリュームを消して再度コンテナを起動すると、エラーが解消します。
```
$ docker-compose down --volumes
$ docker-compose up -d --build
```

## 参考
https://zenn.dev/hotcake34/articles/674df73c39c484
【読書感想文】現場で役立つシステム設計の原則

# この本を読もうと思ったきっかけ
きっかけは、ドメイン駆動設計について勉強したかったからです。
ドメイン駆動設計について調べると大体最初に出てくる説明が、「ソフトウェアで解決したい専門領域を、ソフトウェアの設計にそのまま反映させる」だと思います。
僕には、この説明が抽象的で理解できなかったので、書籍を購入して勉強しようと思い立ちました。

そのうえで本書を選んだ理由ですが、
[本書のAmazonレビュー](https://amzn.asia/d/7URTXmL#customerReviews)で、「ドメイン駆動設計の基本が押さえられた」旨のレビューを多く見たので、購入に至りました。

あとは、単純にタイトルに惹かれました。笑

# 読む前の自分の知識レベル
実務経験は6年目です。
機能設計、詳細設計、実装、テスト（テストコード）等ある程度の開発プロセスは経験しています。

主に読んだことのある書籍は以下になります。
ある程度のシステム設計に関する原則・原理は理解しているつもりです。

- [リーダブルコード](https://amzn.asia/d/jbnfqAN)
- [良いコード/悪いコードで学ぶ設計入門](https://amzn.asia/d/7zY7Web)
- [達人プログラマー](https://amzn.asia/d/cRlLzeo)

また、ドメイン駆動設計に関する知識レベルですが、ざっとこんな感じです。
- ドメイン駆動設計って何が良いの？
- ドメインモデル？ユビキタス言語？ドメインサービス？専門用語はわかりません

ドメイン駆動設計の概念だけは知っていますが、
メリットや具体的な手法についてはわかっていませんでした。

# 読んだ感想

:::note info
本書は10章までありますが、
ドメイン駆動設計について説明がある4, 5, 7, 9章 をメインで読んだ感想になります。
各章のざっくりとした内容は、Amazon商品ページに目次があるのでそちらを参考にしてください。
:::

## ドメイン駆動設計の基本を「ざっくり」理解できた
まず、ドメイン駆動設計のメリットを知れたのは良かったと思います。
本書では、4章の最初に触れています。
ドメイン駆動設計と手続きの設計を比較していて、これが分かりやすかったです。

私が普段使用している手続き型の設計では、データの保持と処理を明確に分離します。具体的には、データベースやWeb APIから取得したデータを格納するエンティティクラスを単なるデータの入れ物として定義し、それらのデータを操作する複数の機能クラスを組み合わせることで、目的の機能を実現していきます。

これに対しドメイン駆動設計は、**ビジネスの概念や規則をクラスに落とし込みます。**
落とし込んだクラスにロジックを書いていきます
こうすることで、**ロジックが複数のクラスに書かれることを防ぐことができます。**

手続き型による設計の場合、複数の機能クラスに似たようなロジックを書いてしまうことが多いため、ここがドメイン駆動設計の大きなメリットだと思いました。

その他にも、手続き型による設計との違いが書かれていて分かりやすかったです。
また、ドメイン駆動設計独自の専門用語も少なかったのもありがたかったです。

## ドメインモデルを具体的にどうやって作るかイメージがわかなかった
ドメイン駆動設計周りの章は、サンプルコードが少なく、具体的な実装イメージが湧きづらかったと感じました。

一応、どうやってドメインモデルを作っていくかの説明はありましたが、抽象的・概念的な説明が多かったように感じます。（特に4章以降は全体的に）

# 主要な学び
以降、本書を読んだ際にメモしたことをそのまま乗せていきます。

## ドメイン駆動設計を採用するとメソッドの置き場所に困らなくなる
ドメイン駆動設計の場合、「合計金額」のような項目をクラスとして表現する形になるため、
金額計算ロジックを、「合計金額」クラスに集約しやすい。

## ドメインオブジェクトには基本となる設計パターンがある
基本的には、以下4つのパターンを組み合わせてドメインオブジェクトを作っていく。


| ドメインオブジェクト | 設計パターン |
|:-:|:-:|
| 値オブジェクト  | 数値、日付、文字列をラッピングしてロジックを整理する  |
|  コレクションオブジェクト | 配列やコレクションをラッピングしてロジックを整理する  |
| 区分オブジェクト  | 区分の定義と区分ごとのロジックを整理する  |
| 列挙型の集合操作  |  状態遷移ルールなどの列挙型の集合として整理する |

:::note info
上記の設計パターンは、本書でも詳しく解説されています。
:::

## 進行役のクラスには、安易にロジックを追加しない
進行役（アプリケーションクラスまたはサービスクラスという）のクラスにロジックを書くと、他のクラスでの流用ができず、コードの重複が起きてしまう。
進行役クラスには業務ロジックを追加せず、
- ドメインクラスを新しく作成する
- 既存のドメインクラスを修正する方向で考えること

進行役クラスは、あくまで**ドメインクラスに指示を出すだけ**に徹することを意識する。


## 1つの画面の役割は1つに絞る
関心事を1つにすることでソースコードがシンプルになる
（用途に特化した小さな画面を用意することを、**タスクベースのユーザーインターフェース**という）
例：商品を購入する画面では、以下のタスクを行う専用の画面を用意したほうがいい。
- 顧客情報の登録
- 注文内容の登録
- 決済方法の登録
- 配送先の登録
- 連絡先の登録
- 注文の登録

逆に、何でもこなす汎用画面を作ってしまうとソースコードも肥大化しやすい。

# 総評
前半は、サンプルコードが多めで内容も具体的なものが多くて分かりやすかったと思います。
ですが、後半（特にドメイン駆動設計の話）は、サンプルコードが少なく説明も抽象的なので具体的な実装イメージが湧きづらいと感じました。

色々な設計パターン・原理・原則を知りたいなら、[ミノ駆動本](https://amzn.asia/d/7zY7Web)の方をオススメします。
サンプルコードも豊富なのでこちらのほうがイメージはつきやすいと思います。

当初の目的だった、「ドメイン駆動設計の基本について知りたい」については、
概ね達成できたと思います。
あくまで「ざっくり」とした理解で、具体的な内容はわかっていません。
もう少しサンプルコードが多めの入門書を買って勉強しようとは思いました。

# どんな人におすすめか
- 実務経験を3年以上積んでいる人
- ドメイン駆動設計を概要を知りたい人


# 今後のアクション
ドメイン駆動設計のメリットやざっくり概要を理解できたので、
次はこの本で具体的にどうやってドメインモデルを作っていくか を勉強しようと思います。
[ドメイン駆動設計入門 ボトムアップでわかる！ドメイン駆動設計の基本](https://amzn.asia/d/3xftVe7)
Transit Gateway入門

# 学習前
ネットワークのサービス…なんか色々してくれる(わかってない)

# Transit Gatewayとは
公式ドキュメントによると、以下の通りです。

>Amazon VPC Transit Gateways は、**仮想プライベートクラウド (VPCs) とオンプレミスネットワークを相互接続する**ために使用されるネットワークトランジットハブです。

https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/what-is-transit-gateway.html

要するに、「オンプレミスのネットワークと、クラウドのネットワークを繋ぐぜ！」なサービスですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c3ece0aa-826a-6d5e-bae8-f646cf0f2063.png)

::: note
ただ、必ずしもオンプレミスとの接続だけを行うわけではなく、複数VPCを繋ぐこともできます!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/2ccc5a2a-152b-0811-5d6b-3269da71997f.png)
:::

Transit Gatewayを使用するメリットとしては、下記の5つが当てはまります。
1. 推移的ルーティングの実現
1. メッシュ化されたネットワーク接続の実現
1. 管理の簡素化
1. スケーラビリティ
1. 集中化されたルーティング制御

ただ、私は1.と2.を聞いてもあまりピンと来なかったので少し調べてみました。

## 推移的ルーティング・メッシュ化されたネットワーク接続
推移的ルーティングとは、<font color="red">**「直接接続されていないネットワーク間でも、トラフィックをルーティングできる能力・機能」**</font> です。

元は数学の推移関係に関係しています。簡単に言うと、
- x = y である
- y = z である
- この時、x = z が成り立つ

みたいな感じです。x と z は直接的に = で繋がれているわけではないですが、他の関係から自然と = の関係にあると導き出されます。

これをネットワークの世界でも活用するのが、推移的ルーティングです。
***
例えば3つのVPCがピアリング接続しているとします。VPC A は B と接続し、VPC B は C と接続しています。
その時、以下のようにVPC A から C へ直接アクセス可能でしょうか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/bc2b36f5-5d69-3709-4107-086d5657b483.png)

これは❌です。上記のようなVPCピアリングを使用しているときは、VPC A から VPC C へ直接接続することはできません(VPC A と C をピアリング接続すれば可能ですが)。

また、ピアリング接続のみで複雑なネットワークを構築するのはかなり負荷が高いです。

VPC100個のネットワークを構築しようとした場合を想定してみてください。
それらをすべて相互に接続できるようにするためには、4950個のピアリング接続が必要になります。

これら全てを構築するのは非常に手間ですし、管理するのも非現実的です。
もっと楽にネットワークを構築したいですよね。
***
そこで、Transit Gatewayを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/6d4ba583-052e-ce63-9ef0-2b6c012609bd.png)

各VPCはTransit Gatewayを経由することで他のVPCと接続することができます。AからBも、BからCも、AからCもすべて接続可能です。もちろん、逆もまた然りです。

各VPCは直接接続されているわけではありませんが、Transit Gatewayがトラフィックをルーティングしてくれるおかげで、それぞれが接続されているような状態になります。

このように<font color = "red">**「ネットワーク内のすべてのノード(ここではVPC)が互いに接続されている状態」**</font>を**メッシュ化されたネットワーク**と言います。

こうすれば、例えVPCが100個あったとしても、各VPCはTransit Gatewayに1つずつ接続を持てば良いので、合計100の接続で済みます。
ピアリングと比べると非常にコンパクトで、**管理が簡素化**されるのがわかります！

また、後からVPCを増やしたい/減らしたいとなった時も、該当VPCとTransit Gatewayの接続のみを新たに構築だけで済むので、非常に**スケーラブル**です！

Transit Gatewayを用いることで、マルチVPC構成など複雑なネットワーク構成でも、柔軟な通信が可能になります。

:::note
Transit Gatewayを使うことで、直接的に接続されていないVPC間の接続が可能になる！
キーワードは、**「推移的ルーティング」と「メッシュ化されたネットワーク」**！
:::

# Transit Gatewayの作り方
以下のクラスメソッドさんのブログがわかりやすいです！

https://dev.classmethod.jp/articles/transit-gateway-vpc/

# CDKで書くとどうなんの？
2024年11月11日現在、L1 Constructでのみ実装可能のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/bac277f8-c871-b4dc-48c4-41f870ee4ee3.png)

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.CfnTransitGateway.html

:::note warn
ただしこれだけだとTransit Gateway本体しか作成されないので、先ほど紹介したアタッチメントやルートテーブルは別途作成する必要があります。(それらも全部L1 Constructしか無いのでめっちゃ大変そう…)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616210/c270efb7-9d7e-1559-ecf7-c945545de376.png)
:::

# 学習後
・Transit Gatewayは、クラウド環境とオンプレミスを繋いでくれたり、複数のVPCを繋いでくれたりするもの！
・キーワードは「推移的ルーティング」と「メッシュ化されたネットワーク」！
・本体を作るだけじゃダメ！アタッチメントやルートテーブルもお忘れなく！
経過時間により伸びる棒

PowerAppsでアプリを作っていると下の図の様に
経過時間により伸びる棒みたいなものを作りたくなりますよね。
そんな時はこうします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737462/6054b15d-019d-f04a-9520-b3066c9c0f4c.png)

まずは今の時間を継続的に取得する為に
`Timerコントロール`を配置する。
単位時間ごと時間を取得したいので
例えば
1秒毎なら`Durationプロパティを1000`、
1分毎なら`Durationプロパティを60000`に
設定する。

次に
`Repeatプロパティ`
`AutoStartプロパティ`
をそれぞれ`true`とする。

さらに、`OnTimerEndプロパティ`に
```
Set(glbNow,Now())
```
と入力して単位時間ごとに現在時刻を取得する。

ここで`時間によって長さを変えたいコントロールを挿入`する。
（例えばLabelコントロールだったりRectangle（長方形）コントロール）
`そのコントロール`の`WidthまたはHeightプロパティ`に
下記の様にコードを入力します。
```
DateDiff(DateAdd(Today(),8,TimeUnit.Hours),
　　　　DateAdd(Today(),Hour(glbNow)*60+Minute(glbNow),
    　　　　　　TimeUnit.Minutes
　　　　　　),
　　　　TimeUnit.Minutes
        )
```
【解説】
DateDiffiの開始日には開始させたい時間を持ってきたいので
DateAddを使い、
日付：適当な日付（打ち消すための）
単位の数：スタートさせたい時間
単位：とりあえず時間
を指定

終了日も同様に
DateAddを使い、
日付：上記開始日と同じ日付
単位の数：今回は分を利用する為に現在時刻の時間x60+分
単位：分

DateDiffの単位も分として時間差を計算する。
それに適当な定数を掛ける事で任意の倍率で
棒を伸ばす事ができる。
JavaScript: template literalの変技

template literalの中に`` ` ``を記述するには`` \` ``などとしなければならないが…。
```js:入れ子
a=`${`${`${``}`}`}`
```

関数呼び出しの`()`を省略して `` `...` ``などと記述
```js:普通
alert`0`
```
```js:返事が…
//ない。ただのシシカバのようだ…
eval`alert(0)`
//あるぇ?
setTimeout`alert(1)`
```
```js:2重
Function`alert(1)```
```
```js:多重
Function`return a=>alert```````
```
```js:連携
Function`return a=>a=>alert`()``(``)`()`
```
```js:new
new Function``
new Function()``
new class{constructor(){return Function``}}()``
new class{constructor(){return Function}}()``
```
```js:ソノメイレイハ、リカイフノウデス
new String``
new class{constructor(){return Function}}``
new class{}()``
new class{}``
```
非常に言いにくい事なのだが…この問題は冷静に対処する必要がある(^o^)
【数値計算】最近使ったライブラリ※日々更新

## 小数点の丸め方 ##
### 数値を丸めたい ###

ある数値(int型)を小数第二位まで表示たい時
```diff_python:python
a = 3.2344567
print(a:.2f)
```
### 行列を丸めたい ###
ある行列(ndarray型)を小数第二位まで表示させたい時`np.round(数値,表示させたい桁数)`
```diff_python:python
a = np.array([1.2345, 2.3456, 3.4567])
print(np.round(a, 2))
```

全ての行列(ndarray型)を小数第二位まで表示させたい時
```diff_python:python
np.set_printoptions(precision=2)　#この設定後に表示する全ての ndarray が小数点以下2桁になる
a = np.array([1.2345, 2.3456, 3.4567])
print(a)
```

## よく使うnumpyのライブラリ ##
### L2ノルム正規化`np.linalg.norm(a)` ###
```diff_python:python
a = np.array([3, 4, 5])
norm_l2 = np.linalg.norm(a)
print(a/norm)
```

### L2ノルム正規化（手動でする場合） ###
```diff_python:python
a = np.array([3, 4, 5])
norm_l2 = np.sqrt(np.sum(x**2 for x in a))
for i, value in enumerate(a): #インデックス番号と数値を同時に取り出す
  a[i] = a[i] / norm_l2
a = np.round(a, 2) #小数第二位まで表示
print(a/norm)
```

### L1ノルム正規化`np.linalg.norm(a, ord=1)` ###
```diff_python:python
a = np.array([3, 4, 5])
norm_l1 = np.linalg.norm(a, ord=1)
print(a/norm_l1)
```
SQLパズル 45 ペパロニピザ　その２の解法メモ

# 概要
SQLパズル　p189 45 ペパロニピザ　その２の解法メモです。
CASE式と集約関数(SUM)の使用方法が肝ですね。


# 要件　
行→列に変換したい。
範囲指定した値毎に列に配置したい。
a,b,c(a<b<c)の数字に対して
0<値<aの場合　１列目
a<値<bの場合　２列目
b<値<cの場合　３列目
値>cの場合　　４列目


今回の場合は以下とする。
a=30 b=60 c=90
値=現在の日付と過去の日付の差
現在の日付は20070601とする



# 図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/206d78ce-b878-7829-9fd5-76ba99be70ab.png)


# SQL

## DDL
```sql

DROP TABLE IF EXISTS FriendsofPepperoni;
--重複行があるというので、主キーなし
CREATE TABLE FriendsofPepperoni
(cust_id INTEGER,
 bill_date DATE,
 pizza_amt DECIMAL(5,2));

--答え３用マスタテーブル
DROP TABLE IF EXISTS ReportRanges;
CREATE TABLE ReportRanges
(day_count CHAR(32), 
 start_cnt INTEGER, 
 end_cnt   INTEGER);

INSERT INTO FriendsofPepperoni VALUES(1, '2007-05-07', 10);
INSERT INTO FriendsofPepperoni VALUES(1, '2007-04-01', 20);
INSERT INTO FriendsofPepperoni VALUES(1, '2007-03-01', 30);
INSERT INTO FriendsofPepperoni VALUES(1, '2007-01-01', 40);
INSERT INTO FriendsofPepperoni VALUES(2, '2007-05-06', 50);
INSERT INTO FriendsofPepperoni VALUES(2, '2007-04-01', 60);
INSERT INTO FriendsofPepperoni VALUES(2, '2007-03-01', 70);
INSERT INTO FriendsofPepperoni VALUES(2, '2007-01-01', 80);

--答え３用
INSERT INTO ReportRanges VALUES('under Thirty days', 00, 30);
INSERT INTO ReportRanges VALUES('Sixty days', 31, 60);
INSERT INTO ReportRanges VALUES('Ninty days', 61, 90);


```



## 答えのSQL
```sql
-- その２答え
-- case式を使用
SELECT cust_id,
        SUM(CASE WHEN bill_date
                       BETWEEN cast( '20070601' as date )  - INTERVAL '30' DAY
                            AND cast( '20070601' as date )
                       THEN pizza_amt ELSE 0.00 END) AS age1,
        SUM(CASE WHEN bill_date
                      BETWEEN cast( '20070601' as date ) - INTERVAL '60' DAY
                            AND cast( '20070601' as date ) - INTERVAL '31' DAY
                        THEN pizza_amt ELSE 0.00 END) AS age2,
        SUM(CASE WHEN bill_date
                      BETWEEN cast( '20070601' as date )- INTERVAL '90' DAY
                            AND cast( '20070601' as date ) - INTERVAL '61' DAY
                      THEN pizza_amt ELSE 0.00 END) AS age3,
        SUM(CASE WHEN bill_date < cast( '20070601' as date )  - INTERVAL '91' DAY
                      THEN pizza_amt ELSE 0.00 END) AS age4
        FROM FriendsOfPepperoni
        GROUP BY cust_id
        ORDER BY cust_id;

-- 各テーブルがどのageに分類されるか確認する
SELECT *,(cast( '20070601' as date ) - bill_date) as diff
	,CASE WHEN cast( '20070601' as date ) - bill_date BETWEEN '0'  AND '30' THEN 'age1'
		  WHEN cast( '20070601' as date ) - bill_date BETWEEN '31'  AND '60' THEN 'age2'
	 	  WHEN cast( '20070601' as date ) - bill_date BETWEEN '61'  AND  '90' THEN 'age3'
		  WHEN cast( '20070601' as date ) - bill_date > '91' THEN 'age4'
		  ELSE '' END
FROM FriendsOfPepperoni;


```



# 参考

SQLパズル　p190 45 ペパロニピザ

SQLパズル　サポートページ
https://mickindex.sakura.ne.jp/database/db_support_sqlpuzzle.html#LocalLink-p45

達人に学ぶSQL徹底指南書第２版 p4 CASE式の真価は他のSQLのツールと組み合わせた時に発揮する。
達人に学ぶSQL徹底指南書第２版 p8 CASE 異なる条件の集計を一つのSQLで行う

github　差分
https://github.com/RYA234/SQL_Puzzle_Learning/commit/2086254c0a40f6ed924586d41d606db3938bfa2e
Webアプリの仕組み

# 初めに
個人でWebアプリの作成を行なっているのですが
実際のWebアプリの仕組みについてよく理解できていないと感じたので

https://www.amazon.co.jp/「プロになるためのWeb技術入門」-――なぜ、あなたはWebシステムを開発できないのか-小森-裕介/dp/4774142352

こちらの書籍で学んだことをアウトプットしていきます

# Webアプリの図解

![スクリーンショット 2024-11-11 5.17.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/3decac40-928b-7468-65ed-174da17be947.png)


<a target="_blank" href="https://icons8.com/icon/63785/chrome">クロム</a> アイコン by <a target="_blank" href="https://icons8.com">Icons8</a>

<a target="_blank" href="https://icons8.com/icon/63801/safari">サファリ</a> アイコン by <a target="_blank" href="https://icons8.com">Icons8</a>

<a target="_blank" href="https://icons8.com/icon/QFcVqyh6lBh6/tomcat">トムキャット</a> アイコン by <a target="_blank" href="https://icons8.com">Icons8</a>

https://www.apache.org/logos/#server

https://assets.adobe.com/public/5ea70229-6b81-4a99-4164-c9b94fdc471b/Logos/NGINX/Colors/Spot/Horizontal/NGINX/NGINX-horiz-black-type-Spot.ai

https://www.mysql.com/jp/about/legal/logos.html

https://wiki.postgresql.org/wiki/File:PostgreSQL_logo.3colors.120x120.png

# それぞれを確認する

## クライアントサイド

![スクリーンショット 2024-11-11 5.19.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/9ac9c7b1-5e1a-d521-e1f5-01b87e1b302c.png)

クライアントサイドとはユーザーサイドの話になります
ここではWebブラウザが当てはまります
WebブラウザとはWebアプリを見るためのものです
例えばChromeやSafariなどの種類があります

## サーバサイド

### Webサーバ

![スクリーンショット 2024-11-11 5.24.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/560d38c6-2252-57c2-d84c-df059e3867c9.png)

WebサーバはWebブラウザのHTTPリクエストを得てアプリケーションサーバやDBサーバを経てHTTPレスポンスを返す役割を担っています
具体例とはApacheやNginxなどがあります

### アプリケーションサーバ

![スクリーンショット 2024-11-11 5.31.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/1ede40cc-0e20-8408-a492-eeb22ce7e603.png)

アプリケーションサーバはWebサーバからのリクエストでアプリケーションを実行するサーバです
具体例はTomcatなどです
動かせるアプリケーションはJavaやPHPなどです
JavaはTomcatを使用してPHPはWebサーバのApacheを使用します
Apacheはアプリケーションサーバの役割も担うことができ
モジュールによってPHPを動かします

### DBサーバ

![スクリーンショット 2024-11-11 5.40.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/b17700ab-d9ac-f93d-42ab-b0e0b78afa8d.png)

最後にDBサーバとはアプリケーションサーバからのSQLのクエリを返すサーバになります
具体例はMySQLやPostgreSQLなどがあります

# 最後に
Webアプリの仕組みについて簡単に説明してみました
サーバサイドを3つに分けましたがアプリケーションの大きさによって構成が変わってくるので
自分が開発するものによって変わることを意識したいと考えています
【Google Clab】わざわざ.csvをエクスポートする必要ないって話

**実行環境: Google Clab**
データ分析初心者な僕は今まで、↓画面から読み込みたい```.csv```などをその都度エクスポートしていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3871898/05960507-86b1-9317-d78a-7d4b345d107b.png)

しかし、読み込みたい```.csv```がいくつもあるときは、とても面倒、、

そこである方法を知りました。

## 解決策
**結論：作業ディレクトリに、分析に使用する`.csv`をまとめておき、clab上でそのディレクトリに移動しておく**

### 事前準備
まずは、google clabを開き、以下のコードを実行してgoogle driveをマウントします。
```python
import os
from google.colab import drive
drive.mount('/content/drive')
```

### 使用するコード
そして、```.csv```が格納されている（今回は、ディレクトリ名```outputdata```に格納されている）ディレクトリに移動します。
```python
# 作業ディレクトリを移動
os.chdir('/content/drive/MyDrive/~~~~/outputdata')
```
※~~~は適宜変更してください。

この際、ポイントとして **絶対パスではなく、相対パスで記述する** ことです。

#### 絶対パスで記述したダメな例
```python
os.chdir('G:MyDrive/ユーザ名/content/drive/MyDrive/~~~~/outputdata')
```
もし、このように記述すると、例えば```outputdata```を1つ上の階層に移動したとき、コード自体も変更する必要が出てくるからです。

ここまで来たら、あとは`outputdata` に格納されている`.csv`を読み込むだけ。
```python
import pandas as pd
sample_data1 = pd.read_csv('outputdata1.csv', encoding='UTF8(任意)')

sample_data2 = pd.read_csv('outputdata2.csv', encoding='UTF8(任意)')

# 略 sample_data3 = ~~
```

## まとめ
:::note info
１．使用する`.csv`をディレクトリににまとめておく
２．clab上でディレクトリに移動する
３．相対パスで記述する
:::
【Linuxコマンド】パッと確認用 ls cd mkdir rm cp mv chmod

# はじめに
こんにちは、エンジニア3年目の嶋田です。
まずは、この記事を開いていただきありがとうございます！

今回は過去にも書いたことがある内容ですが、「Linuxコマンド」について
前回の記事よりも簡略的にまとめてみました。
ぜひ、さらっと確認する用に利用してください！

👇前回の記事👇

https://qiita.com/shimada_slj/items/8f427705a84b2cce2f0a

# Linuxコマンドの基本とオプション
Linuxのコマンドラインは、ファイル操作、システム監視、プロセス管理など、さまざまな操作を可能にします。以下に基本的なコマンドとその便利なオプションを紹介します。

### `ls`（Listの略）
- **使い方**：`ls`, `ls -a`, `ls -l`, `ls -lh`
- **説明**：ディレクトリ内容を一覧表示
- **オプション**:
  - `-a`：隠しファイルも含めて表示
  - `-l`：ファイルの詳細情報をリスト形式で表示(ファイルの権限、所有者、グループ、ファイルサイズ、最終変更日時も表示される)
  - `-lh`：ファイルサイズを読みやすい形式（例：KB、MB）で表示し、その他の詳細情報も併せて表示

### `cd`（Change Directoryの略）
- **使い方**：`cd [ディレクトリ名]`, `cd ..`, `cd ~`
- **説明**：ディレクトリを変更
- **オプション**:
  - `..`：一つ上のディレクトリに移動
  - `~`：ホームディレクトリに移動

### `mkdir`（Make Directoryの略）
- **使い方**：`mkdir [ディレクトリ名]`, `mkdir -p`
- **説明**：新しいディレクトリを作成
- **オプション**:
  - `-p`：親ディレクトリも含めて必要なディレクトリ全てを作成(パスの中に存在しないディレクトリがあれば、それらも一緒に作成)

### `rm`（Removeの略）
- **使い方**：`rm [ファイル名]`, `rm -r [ディレクトリ名]`, `rm -f`
- **説明**：ファイルやディレクトリを削除
- **オプション**:
  - `-r`：ディレクトリとその内容を再帰的に削除
  - `-f`：強制的にファイルを削除(警告や確認なしに削除を実行しますので、慎重に使用してください)

### `cp`（Copyの略）
- **使い方**：`cp [元のファイル名] [新しいファイル名]`, `cp -r`
- **説明**：ファイルをコピー
- **オプション**:
  - `-r`：ディレクトリを含む内容を再帰的にコピー(ディレクトリ内のファイルやサブディレクトリも全てコピー)

### `mv`（Moveの略）
- **使い方**：`mv [元のファイル名] [新しい場所/ファイル名]`
- **説明**：ファイルを移動または名前を変更

### `chmod`（Change Modeの略）
- **使い方**：`chmod [権限] [ファイル名]`
- **説明**：ファイルの権限を変更
- **オプション**:
  - `+x`：実行権限を追加
  - `-x`：実行権限を削除
  - 他にも`u`, `g`, `o`を使って特定のユーザー、グループ、またはその他のユーザーに対して権限を設定することができる(数値を用いて権限を設定する方法もあります)

# 最後に
今回の記事で扱ったもの以外にもコマンドやオプションはたくさんあるので、ぜひ調べて使用してみてください！経験上ですが、使って見れば見るほど覚えられます。

私自身もまだまだですが、他のコマンドやオプションが気になったり、コマンド打ちたくなったり…と少しでも学びのきっかけになれれば幸いです。
2024/11/11主にITとかセキュリティの記事

Palo Alto Networks Expedition に深刻な脆弱性、CISAが緊急警告 – 管理者アカウント乗っ取りのリスク(11/9)
https://innovatopia.jp/cyber-security/cyber-security-news/44623/

AWS WAF での SQL インジェクション対策と誤検知への対応方法(11/9)
https://blog.serverworks.co.jp/AWS_WAF-SQL_Injection

マツダコネクト脆弱性：USBで車両システムへの侵入が可能に – 6つの未修正バグを発見(11/9)
https://innovatopia.jp/cyber-security/cyber-security-news/44617/

Google Chromeにリモートコード実行が可能な攻撃手法が発覚(11/9)
https://news.mynavi.jp/techplus/article/20241109-3060981/

ECサイトの盲点を突かれた個人情報流出事件が発生！？スローヴィレッジから学ぶセキュリティ
https://cybersecurity-park.com/3364/

ウエルシア薬局 不正アクセス受け4万人近くの個人情報漏えいか(11/8)
https://www3.nhk.or.jp/news/html/20241108/k10014633111000.html

ウエルシア従業員が詐欺サイト被害で顧客の個人情報3万9805人分が漏えいか　現時点で被害は確認されず(11/9)
https://www.fnn.jp/articles/-/784683

西宮市の学童保育施設の指定管理者、サイバー攻撃でウイルス感染　個人情報流出は確認されず(11/9)
https://www.kobe-np.co.jp/news/society/202411/0018322196.shtml

CloudFrontからのリクエストのみ受け付けるAPI Gatewayの作り方(11/8)
https://qiita.com/zhang_hang/items/b24a4a75579ca65e0193

米国 Get Cyber Smart 学生、教師、保護者向けの無料の教育リソース(11/9)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/11/post-86de58.html

Meta、オープンソースLLM「Llama」を米国政府機関や防衛関連企業に提供　中国も「Llama」ベースのAIモデルを軍事利用に向けて開発(11/8)
https://ledge.ai/articles/meta_open_source_ai_america_global_security

「ビットコインの最新動向です」…実際は北朝鮮ハッカーのフィッシングメール(11/9)
https://s.japanese.joins.com/JArticle/326003

ドイツ 連邦セキュリティ室 (BSI) 意見募集 TR-03183： 製造者及び製品に対するサイバーレジリエンス要件（一般要求事項、SBOM、脆弱性報告）(11/9)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/11/post-6bf5e1.html

ECサイトからのクレジットカード情報漏洩、前年同期比11倍、12万件超え(11/9)
https://news.yahoo.co.jp/articles/87c11e88bf405b0820a26736a9394e167d7f878f?source=rss

解雇された米国ディズニー元従業員による不正アクセスについてまとめてみた(11/9)
https://piyolog.hatenadiary.jp/entry/2024/11/09/041408

FBIがみんなに広告ブロッカーを使って欲しい理由(11/9)
https://www.gizmodo.jp/2024/11/google-bing-fbi-ad-blocker-scam-ads-2.html

Goのwasmで笑い男の顔はめサイトを作ってみた(11/9)
https://zenn.dev/ponyo877/articles/b506e03bbcbec8

マイナンバーカード利用時にトラブルが発生した時の平均被害額は11万1730円(11/9)
https://dime.jp/genre/1879260/

『マイナンバーカード』8割が持ち歩くも、約6割が活用できていない現状【ノートン調べ】(11/9)
https://news.yahoo.co.jp/articles/c3ce2be89c0805be7005e5d9d51ecdd8e6593b7a?source=rss

（短信）サイバー防御法案の早期成立を首相に要請へ　玉木氏(11/9)
https://www.nikkei.com/article/DGKKZO84687480Y4A101C2EA3000/

派兵された北朝鮮軍、何事にも長じ虚虚実実を具現【コラム】(11/9)
https://japan.hani.co.kr/arti/opinion/51565.html