OmniAICreator/Qiita-1.07M huggingface dataset:
DynamicFrameをRedshiftにロードする際のファイル形式にParquetを指定するとError code 15007が発生する

```
error:  Spectrum Scan Error
code:      15007
context:   File 'https://s3.ap-northeast-1.amazonaws.com/xxx.snappy.parquet' has an incompatible Parquet schema for column 's3://xxx
query:     00000
location:  dory_util.cpp:1671
process:   worker_thread [pid=000]
  ```

デフォルトはCSVで、Parquetに変更することでエラーが発生する。


#### 原因1
##### CSV形式
- データはテキストとして保存される
- 各フィールドは文字列として扱われ、データ型の情報は含まない
- Redshiftにデータをロードする際、必要に応じてデータ型のキャストや変換が自動的に行う

##### Parquet形式
- データとともにスキーマ情報（データ型、列名など）を持つ
- 各フィールドのデータ型が明示的に定義され、厳密に管理される
- Redshiftにデータをロードする際、ParquetファイルのスキーマとRedshiftテーブルのスキーマが完全に一致する必要がある
【おすすめ】絵文字ミックス ゲーム：創造力を育む無料パズル

![絵文字ミックス ゲーム](https://emojimix.fun/social.png)

## はじめに
最近見つけた面白いブラウザゲーム、[絵文字ミックス ゲーム](https://emojimix.fun/games)をご紹介します。絵文字を使った創造的なパズルゲームで、論理的思考力を楽しく育めます。

## ゲームの特徴

### 🎮 直感的な操作性
- マウスドラッグで簡単に絵文字を結べる
- スマホでもPCでも快適にプレイ可能

### 🧩 豊富なパズル要素
- 通常の関連付けパズル
- 記憶力を鍛える特別ステージ
- レベルアップで解放される新ステージ

### 📚 教育的な要素
- 論理的思考力の向上
- 感情知能（EQ）の発達
- 創造力の育成

## 遊び方

1. 異なる列の絵文字の関連性を見つける
2. マウスドラッグで線を引いて結ぶ
3. 「王様」と「城」、「ライオン」と「王冠」など、意味のある組み合わせを作る
4. ヒント機能で詰まった時もスムーズに進める

## おすすめポイント

- 無料で遊べる
- 子供から大人まで楽しめる
- 空き時間に気軽にプレイ可能
- 教育的要素と娯楽性のバランスが良い

## まとめ

[絵文字ミックス ゲーム](https://emojimix.fun/games)は、単なるパズルゲームを超えた、創造力と論理的思考力を育む優れた教育ツールです。無料で遊べるので、ぜひ一度試してみてください。

#ゲーム #パズル #知育 #無料ゲーム #絵文字 #ブラウザゲーム
MFA有効ユーザーを利用しCLIを使う方法

## 概要
MFAを有効にしているユーザーを使い、CLIを使う方法について説明します。
かなり苦戦したので、記載します。
## 状況
<font color="red">*AdministratorAccessとMFAを認証をクリアした場合のみ各種操作が可能なポリシーを付与したユーザー*</font>を利用して、通常通りCLIを使おうとすると、下記エラーになります。
```
An error occurred (AccessDenied) when calling the ListBuckets operation: User: arn:aws:iam::[アカウント番号]:user/[利用しているユーザー名] is not authorized to perform: s3:ListAllMyBuckets with an explicit deny in an identity-based policy
```
エラー文をストレートに取ると、s3:ListAllMyBucketsの実行権限がないと受け取れると思います。この状態で仮に別ポリシーでs3:ListAllMyBucketsを付与した場合でも同様のエラーが発生します。


これを解決するのが、STSを利用し一時的なアクセスキーを発行することになります。

## STSについて
STS?なにそれという方もいると思います。
正式名称は「AWS Security Token Service」といいます。
ざっくり説明すると、「一時的な鍵を発行してそれを用いて接続する」という感じです。

## 実際のコマンド等について
1. 利用するユーザーのIAMに入る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/db21f8e0-c2be-a40d-5927-97b683e85863.png)
上記の画面の「セキュリティ認証情報」タブをクリックします。

2. <font color="red">MFAデバイスのARNをコピーして控えておく。</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/00a4ca39-fb51-9544-c433-eb2fb2c5cae7.png)<br>
3. 下記コマンドを実行する。
```
aws sts get-session-token --serial-number [先ほどコピーしたARNを貼り付ける] --token-code [認証に使うワンタイムパスワード] --profile [プロファイル名]
```
成功すると、AccessKeyId,SecretAccessKey,SessionTokenが表示されます。
再度確認する方法がないので、控えておいてください。<br>
4. キーをプロファイルに記載する
ホームディレクトリ配下に「.aws」というフォルダがあり、その中に「credentials」というファイルが入っています。
こちらに、先ほどのAccessKeyId,SecretAccessKey,SessionTokenを貼り付けて保存します。<br>
5. ターミナルを再起動して、再度コマンドを入力すると閲覧可能になります。

## まとめ
今回はプロファイルに対して直接記載する方法について説明しました。
コンソールを閉じると再設定が必要なのですが、下記コマンドでも可能です。
```
  set AWS_ACCESS_KEY_ID=
　set AWS_SECRET_ACCESS_KEY=
　set AWS_SESSION_TOKEN=
 ```

 また、通常有効期限が１２時間ですので期限が切れたら再度発行する必要があります。
 恐らくこれからMFAを推奨していく流れになりそうなので、この知識はあった方が楽できるかと思われます。
[tips][cpp] 0詰めて桁を揃える表示

# 0詰めて桁を揃える

tipsです。`#include <iomanip>`が必要みたいです。

このように、桁数を決めて、指定した値以外の桁を0で埋めるような表示をしたい時のtips。

```cpp
000123
001234
000777
```

```cpp
#include <iomanip>
#include <iostream>

using namespace std;
int main(){
  cout << setw(5) << setfill('0') << 123 << endl;
  cout << setw(5) << setfill('0') << 1234 << endl;
  cout << setw(5) << setfill('0') << 777 << endl;
}
```

```cpp
000123
001234
000777
```

## 参考

https://cpprefjp.github.io/reference/iomanip/setw.html
https://en.cppreference.com/w/cpp/io/manip/setw
https://scrapbox.io/rustacean/C++_0%E5%9F%8B%E3%82%81
FPCのstringでハマりまくった件

FPC(Free Pascal Compiler)で簡単な外部コマンドを実行した後、その戻り値が途切れる問題で一晩ハマったのでメモしておきます。

### 問題のコード

実行したのは、次のようなコードです。

```pascal
var
  jsonResponse: string;
  jsonData: TJSONData;
begin
  jsonResponse := MyExecCommand(params);
  jsonData := GetJSON(jsonResponse);
  // …省略…
end;
```

少し長いJSONデータだと、必ずエラーがでます。
これ、何が問題か分かるでしょうか？

### 答え

問題点は、変数`jsonResponse`の定義が`string`となっている部分です。

今回、FPCの設定でstringがShortString(つまり、255文字以下)と定義されていたため、255字以上の文字列が壊れてしまっていたのです。これに気付くまでに一晩かかりました(T_T)

ShortStringは255以下の文字列しか扱えないという制限があります。そのため、上記の`string`を`AnsiString`に定義を変えると問題は解決します。

### ShortStringとAnsiStringの違い

`ShortString` と `AnsiString` は、Pascalで使用される文字列型で、それぞれ以下のような違いがあります。

- `ShortString` --- **固定長文字列**：最大長が255文字に制限されています。スタック上に配置され、メモリの再割り当てを行わないため、サイズの範囲内で高速に処理できます。
- `AnsiString` --- **動的長文字列**：サイズに制限がなく、メモリの許す限り長い文字列を扱えます。ヒープに配置され、メモリの再割り当てによりサイズを自動で調整します。これにより、大きな文字列を動的に扱うことが可能です。

ただし、AnsiStringは、Unicode非対応であるため、1バイト単位で文字を扱います。多言語文字が必要な場合は `UnicodeString`を利用します。

FPC/Delphi/Pascalの文字列処理は、文字列型がたくさんあって、扱いが本当に複雑です。「**文字列型を制する者がPascalを制する**」と言って良い状況かもです。

### FPCにはモードがある

なお、コンパイル指示で {$H+}を有効にすると、stringが、AniStringになります。多くのIDE環境でこれが自動で指定されているため、コマンドラインでFPCを適当に使った場合に、今回の問題に遭遇してしまいます。また、最初から「Delphi」互換モードにしておけば、stringは勝手にAnsiStringになります。

FPCには次のように多くの互換モードがあり、それぞれの違いを把握するのは非常に難しい状況です。モードによって、型が変更になるというのは、最初に知っておくべきですね。

1. **FPCモード** (`{$MODE FPC}`)：デフォルトモードで、FPC独自の構文や仕様を使用。
2. **Delphiモード** (`{$MODE Delphi}`)：Delphi互換モードで、Delphiコードの互換性を高める。
3. **OBJFPCモード** (`{$MODE OBJFPC}`)：オブジェクト指向拡張が強化されたモード。
4. **TPモード** (`{$MODE TP}`)：Turbo Pascal互換モード。

### まとめ

FPC深い。
【新卒1年目】合格記② AWS Certified Cloud Practitioner

# はじめに
AZ-900に引き続き資格を取得しました！!
合格記として記します。

# AWS Certified Cloud Practitionerとは
" AWS Certified Cloud Practitioner は、AWS クラウド、サービス、用語の基礎的かつ高度な理解を持っていることを証明します。 "

https://aws.amazon.com/jp/certification/certified-cloud-practitioner/

# 使用した教材

■ Udemy「CLF-C02版】この問題だけで合格可能！AWS 認定クラウドプラクティショナー 模擬試験問題集」
https://www.bing.com/ck/a?!&&p=3d2dc5a0cd712e76f137fa127d7cebb0063c053560261340f4852d7a867787cfJmltdHM9MTczMDMzMjgwMA&ptn=3&ver=2&hsh=4&fclid=12549f4b-4c21-60a2-30e4-8b1f4de86166&psq=%e3%80%90CLF-C02%e7%89%88%e3%80%91%e3%81%93%e3%81%ae%e5%95%8f%e9%a1%8c%e3%81%a0%e3%81%91%e3%81%a7%e5%90%88%e6%a0%bc%e5%8f%af%e8%83%bd%ef%bc%81AWS+%e8%aa%8d%e5%ae%9a%e3%82%af%e3%83%a9%e3%82%a6%e3%83%89%e3%83%97%e3%83%a9%e3%82%af%e3%83%86%e3%82%a3%e3%82%b7%e3%83%a7%e3%83%8a%e3%83%bc+%e6%a8%a1%e6%93%ac%e8%a9%a6%e9%a8%93%e5%95%8f%e9%a1%8c%e9%9b%86%ef%bc%886%e5%9b%9e%e5%88%86390%e5%95%8f%ef%bc%89&u=a1aHR0cHM6Ly93d3cudWRlbXkuY29tL2NvdXJzZS9hd3MtNDI2MC8&ntb=1

# 学習方法
前回の学習方法が自身にあっているのか調べるために勉強方法を変えてみました。

### １． **ひたすら演習(約１２時間)**
Udemyの演習を行い、公式サイトをテキスト代わりに参照しました。ひたすらに演習を進めました。
何度も同じ分野で躓き同じサイトを何度も見ました。(後述します)
６つの演習テストで８割を取得するまで繰り返しました。

# 何度も繰り返し閲覧したWebサイト

### ■ AWS CAF
https://docs.aws.amazon.com/ja_jp/whitepapers/latest/overview-aws-cloud-adoption-framework/welcome.html

### ■ AWS Well-Architected Framework
https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/welcome.html

この２つは超頻出にもかかわらず何度見ても覚えることができませんでした。そこで非常に参考になったものがコチラ
↓↓↓↓↓

https://blog.serverworks.co.jp/muriyari-aws#Well-Architected-%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF6%E6%9C%AC%E3%81%AE%E6%9F%B1-%E9%81%8B%E4%BF%A1%E6%8C%81%E3%82%BB%E3%83%91%E3%82%B3

# いざ受験
前回同様にオンライン試験（自宅）にて受験しました。
今回も英語の試験監督を選択。日常会話レベルの英語力でOKでした

# 結果
受験日: 2024/09/30
合格点：700
得点：716


AWS CAF、Well-Architected Frameworkからは3題出題されていました。このサイトのおかげで合格しました
（感謝の再掲）

https://blog.serverworks.co.jp/muriyari-aws#Well-Architected-%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF6%E6%9C%AC%E3%81%AE%E6%9F%B1-%E9%81%8B%E4%BF%A1%E6%8C%81%E3%82%BB%E3%83%91%E3%82%B3

# まとめ
なんとかギリギリ合格しました。
紙媒体のテキストを手元に置いた方が良いことを実感しました。
ゴリ押し演習はもうしません。
WireShrak Modbus RTU

WireSharkでUDPのLuaプラグインを作る機会があり、
BACnet MS/TP(mstpcap.exe)で使用している
USB-RS485アダプタでパケットさえ取れれば
Modsbus/RTUのプラグインも作れるのではと思ったのですが
いつの間にかできるようになっていて
日本語のサイトがなかったので記録として残す。


# いつものキャプチャツール
https://www.lineeye.co.jp/html/product_LE-200PF_summary.html

Modbus RTUをキャプチャするときは
LINEEYEのLEシリーズを使っていたのだけど
ちょっと見るだけならWiresharkと下記のUSBアダプタをつけるだけなので便利だった。

# 今回使ったUSB-RS485アダプタ
https://www.fa.hdl.co.jp/jp/plink/usb-003.html

BACnet MS/TPやModsbus/RTUでいつも使用している
USB-003を使用した。


# WiresharkSerialAdapter
https://github.com/jzhvymetal/WiresharkSerialAdapter

GitHubからWiresharkSerialAdapter.exeをダウンロードしてきてextcapの下に置く
(参考のURLは\Wireshark\extcap\Wiresharkだったがいつも\extcapに入れている)
C:\Program Files\Wireshark\extcapなど

そのあとWiresharkを起動するとSerialPortAdapterが出てくるので選択して起動する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/89c7b033-60fd-1795-5626-a174a5947b22.png)

通信速度の設定をしてWireshark DLTを147にするみたいです。
(各項目の詳細は参考URLで説明しているかも)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/931cfdfc-02b5-ccd6-32d9-fea0c4a871ae.png)

設定にてUser DLTにModbus/RTUを割り付ける(mbrtu)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/7969ec10-8d04-de16-3a2a-4010c727eac5.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/991f58a9-9326-a824-4d15-59bd6b24c038.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/9af89198-248d-1d5a-0e2f-49e3e51a191c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/91a5a886-260d-e761-d1c1-5e7b8d37b896.png)

実際に使ったらこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/f8873e6e-156c-0719-e3b7-15ef40ce3957.png)

# おまけ
GitHubに複数USBキャプチャをしたい場合は
WiresharkSerialAdapter.exeをリネームしておくと複数使えると書いてたので
コピーすると２つ表示されるみたいなので複数環境キャプチャしたい場合は
こちらの方が安く済むかも。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/47c3827f-7eb5-b6cb-30b4-0f84dbf92d0c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3852763/a604ecd5-e34a-00dd-77ac-b88bec33141e.png)



# 参考にしたURL
https://search.abb.com/library/Download.aspx?DocumentID=LVD-EOTKN179U-EN&LanguageCode=en&DocumentPartId=&Action=Launch
【FakerPHP】Laravelのfakerでひらがなのランダム文字列を作成する


## 現象

ある日上手くテストが動かなかった。。。

```bash
$ php artisan tinker
> fake()->regexify("/[ぁ-ん]{6}/")
= b"ôôü-Ò-"

> fake()->regexify("/[ぁ-ん]{6}/u")
= b"ÒéÒüÒÒ/u"
```

謎の文字化け ﾀｽｹﾃ...  



## 調査

Faker は今 `FakerPHP` に置き変わってる  
`regexify()` の実コードはここ  

https://github.com/FakerPHP/Faker/blob/2114cc6a05b6e371368adfd4261378d7b0f87d84/src/Provider/Base.php#L542  

なんか色んなことやってる  
ランダムを実現するために、正規表現を読み取って文字を当てはめてるみたい  
すごい地道なコードだ...  

> 正規表現の区切り文字 '/.../' と開始/終了マーカー '^...$' は無視されます。
> 
> 正規表現構文の小さなサブセットのみをサポートします。たとえば、
> Unicode、否定クラス、無制限の範囲、サブパターン、後方参照、
> アサーション、再帰パターン、コメントはサポートされていません。エスケープ
> サポートは非​​常に脆弱です。
> 
> このメソッドは非常に低速です。他のフォーマッタが
> 必要な偽のデータを生成できない場合にのみ使用してください。たとえば、以前の正規表現で `regexify` を呼び出すのではなく、 `$faker->email` を呼び出すことを推奨します。
> 
> また、`bothify` はおそらくこのメソッドが行うことのほとんどを実行できますが、はるかに高速です。たとえば、ダミーの電子メールを生成するには、 `$faker->bothify('?????????@???.???')` を試してください。

だそう！！！  
そりゃ日本語に対応してないわ  

`bothify()` ってのも初めて知った  
`regexify()` はあんまり使わないほうが良さそうだね  



## 対策

色々あるが `mb_chr` を使ってみる  

Unicodeでひらがなの範囲は `\u3040-\u309F`  
これを10進数に変更すると `12352-12447`  

つまりランダムな数値を生成すれば、ひらがなが生成できる

```php
> mb_chr(fake()->numberBetween(12352, 12447))
= "た"

> mb_chr(fake()->numberBetween(12352, 12447))
= "む"

> mb_chr(fake()->numberBetween(12352, 12447))
= "ね"
```

成功  
これを `Faker` に登録する

参考記事：

https://webspace.jp/389/

```php:app/Faker/Provider/Hiragana.php
<?php

namespace App\Faker\Provider;

use Faker\Provider\Base;

class Hiragana extends Base
{
    /**
     * ひらがなの生成
     *
     * @param integer $length 長さ
     * @return string
     */
    public function hiragana(int $length = 1): string
    {
        return collect(range(1, $length))
            ->reduce(fn ($stack) => $stack .= mb_chr(fake()->numberBetween(12352, 12447)), '');
    }
}
```

```php:app/Providers/AppServiceProvider.php
// ...
class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        // ...
        
        // Faker 拡張
        $faker = fake();
        $faker->addProvider(new Hiragana($faker));
    }
    // ...
}
```

これで成功！  

```php
> fake()->hiragana();
= "お"

> fake()->hiragana(10);
= "えだらそかいみぁるき"
```

こんな簡単にできるなら、拡張ライブラリ作ってもいいかも！
転売目的かどうかの判定にCookiesが使えないかなと思い分析してみた

# はじめに
キティーのニュースを見て、そういえばここ数年ずっと転売の問題って出てきてるなと思った。転売かどうかの判定に商品について質問するとか、その商品の好きなことを質問するとかの方法があるらしい。ただ、結局問題は無くならないなあ。何かしらの解決策ってないのかなあと思った。
[「怒号と悲鳴が飛び交っている」 ハローキティ展の開催初日に“転売ヤー”殺到か 「人が雪崩れ込んで……」「横入りがひどい」/ Yahoo Japan ニュース](https://news.yahoo.co.jp/articles/8c89a56db464d71254d6afaeb681208d6c3a3657)

# 考えたこと
ウェブサイトとかでCookiesってすごい見るけどあれって使えないのかなとふと思った。
ちょっと調べてみた感じ、サイトを訪れた日時や、訪問回数とかがローカルに保存されるらしい[1]。第一印象結構使えそうじゃんと思った。

例えば、キティーならキティーのサイトをどれくらい訪問したか、どれくらいの期間訪問し続けてるのかとかがわかればキティーへの愛がわかるのではないかなと思った。（愛がそんなに単純なものかは置いといて、ある程度観測できる愛は探せそう）

ただ、ありそうな問題点
* Cookiesの有無で商品への愛がわかるのか
* Cookiesが十分にないから買えませんは納得できるのか
* もし学習して判定できるようにするとしたら学習用のデータをどうするのか

色々問題点はあるが、そもそも判定できるのかとかがわからないと元も子もないということでとりあえず軽く自分のcookiesを使って分析してみよう。

# 自分のcookiesで分析してみた
1. 自分のCookiesを取得し、csvにする
1. ChatGPTとコードの相談をする
安全面からこのcsvをそのままchatgptに投げない方がいいのかなと思い、コードの相談に留めておいた
creation_dateの処理がchatgptだけではうまくいかなかった。
creation_dateに関する最初のChat GPTの回答
```
Windowsや一部のシステムでは、タイムスタンプの基準が「1601年1月1日」から始まる「Windows FILETIME」形式を採用しており、この形式は「1601年1月1日 00:00:00 UTC」からの経過時間を100ナノ秒単位で記録します。
```
[2]を見せてあげると、うまく処理ができるコートを生成してくれた。

**実行結果**
生成されたコードを実行してみると、結果は以下の通り

* qiita.comに関するCookies
![スクリーンショット 2024-11-05 2.17.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788759/3da70c42-c75b-681f-6c8b-92b5ede4202d.png)

* yahooに関するCookies
![スクリーンショット 2024-11-05 2.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788759/690b4955-2d63-d738-8450-b8ed27c300e4.png)

* googleに関するcookies
![スクリーンショット 2024-11-05 2.18.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788759/2ac80307-7416-175c-dd37-60435e34d7eb.png)

どのサイトも定期的に訪れていたので安定してcookiesが作られるべきなんだろうが、なんでこのような結果になったのかがいまいちわからない。ぱっと見だと判別は難しそうだなと感じた。何も考えず、creation_dateを使ったけどそれが良くなかったのか？他にはlast_update_utcとかlast_access_utcもあるけどそっちを使った方が良かったのか？結局最後の変更しか見れないけど、

# 結論
そんな簡単にはいかないのかもしれない。
転売ってここ数年ずっと問題になってるけど、そろそろ解決策が出てきてほしいなと思う。何かいい方法ってないものですかね、、真面目な人が得をする社会にしたい。
もしこうしたらいいのではとかがあればぜひ教えていただきたい。
深夜テンションでここまで分析して記事を書いてみたが、流石に眠いので寝る。。。

# 参考文献
[1] [初心者でもわかる『Cookie（クッキー）』講座 危険性やスマホでの設定方法もズバリ解説/ KDDI トビラ](https://time-space.kddi.com/ict-keywords/20180726/2392.html)
[2] [How to read the cookie creation date (not expiration)/ Stack Overflow](https://stackoverflow.com/questions/17722084/how-to-read-the-cookie-creation-date-not-expiration)
Lambda（Node.js）のDockerイメージをデプロイしてみた。（その３，EC2上でDocker上のLambdaを実行してデバック）

# はじめに
LambdaをDockerイメージでデプロイする方法を、調査する機会があったので自分の備忘用にメモ書きを残します。

今回は、Dockerを起動して動作確認をする所をメモ書きします。
実行環境は、前回からの続きです。

# イメージをビルドする

```shell
cd
cd DeployProject
docker build -t deployproject:test1 .
```
-t オプションで、「名前：タグ」を指定しながらビルドします。

前回、Dockerファイルに「COPYコマンド」など正常に動くか確認します。

# デバック用の端末用意
デプロイする前の動作確認は、Teratermの端末を３枚用意するとデバック作業が楽でした。

Teratermは、「File」→「Duplicate session」で同じ接続端末を増やせるので３枚に増やして、下記の用な配置でデバックしてました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/d2af27f4-4b93-329b-2ac9-974ad12b08a7.png)

# Docker起動　※デバック繰り返し①
【端末①】で、下記のコマンドでDockerを起動する。

```shell
docker run -p 9000:8080 --read-only deployproject:test1
```

# Docker上のLambda起動　※デバック繰り返し②
【端末③】で、下記のコマンドを利用してリクエストを投げると起動できる。
```shell
curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'
```
-d オプションで指定するJSONは、Lambdaの起動引数に与えたいJSONに書き換える

【端末①】には、CloudWatch logsに出力されるようなLambda実行ログが出力される。
【端末③】には、Lambdaの応答JSONが出力される。

# Docker停止　※デバック繰り返し③
【端末②】で、下記のコマンドを利用して「CONTAINER ID」を確認し、docker kill で停止する。

```shell
docker ps
docker kill 「CONTAINER ID」
```

# まとめ
Ec2のDocker上で動くLambdaの動作確認までを記載しました。

端末を３枚開きにしておくと、ちょっとだけデバックがやりやすい。というメモ書きでした。
ソースを修正して動作確認し直すときは、「※デバック繰り返し①～③」を繰り返す感じになります。

# AWSの相談・お困りごとありましたら、、、

AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。
AWSのLambda開発関連で、ライトな開発や、ちょっと、こんな事を自動化したい！等も、お気軽に問い合わせください。

https://www.cs-cloud-aid.com/
Flutterでリリースビルドにおいてのみ灰色の表示（エラー）がある時

デバッグビルドではなぜかエラーとして表示されないエラー。（本来なら赤背景に黄色字のやつのはず）
AppStoreに提出したものをインストールしてから判明した涙
AppStoreに提出したもの=リリースビルドなので、リリースビルドで確認を行うが、
リリースビルドではログに出ない可能性があるので、main関数に 
FlutterError.onError = (FlutterErrorDetails details) {
    FlutterError.dumpErrorToConsole(details);
  };
を追加したうえで、
flutter run --release --dart-define-from-file=scripts/flavors/prd.json
でリリースビルドしてログを取って対応。恐らく以下の通り

https://www.kzyrepository.com/2021/06/flutter%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%93%E3%83%AB%E3%83%89%E3%81%A7%E7%94%BB%E9%9D%A2%E3%81%8C%E3%82%B0%E3%83%AC%E3%83%BC%E7%81%B0%E8%89%B2%E3%81%AB%E3%81%AA%E3%82%8B%E7%8F%BE%E8%B1%A1%E3%81%AE%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95%E3%82%92%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC/
srcフォルダがgitの管理外になっていた問題

- `.gitignore` ファイルを srcで検索しても、見当たらないものがない
- `find ./ -name .gitignore` で検索しても、`./.gitignore` しかない
- 最終的に`git check-ignore -v src/*`を掛けて、やっと `.gitignore`に`*`? みたいな記述があることがわかり、それを消したら問題解決した
sudoコマンドと権限について

# はじめに
1年ほど前から業務でちょこちょこ触っているLinux。
今回は、普段なんとなく使用してしまっているsudoコマンドと、それに関連してユーザー権限についてまとめました。

# sudoコマンドとは
一般ユーザーにroot権限を一時的に与えるコマンド
※root権限とはLinuxでの最高権限者(何でもできちゃう)

主な使い方は以下の2通り
①一般からrootへログインユーザーを切り替える
```
sudo su -
もともとログインしていたユーザーのパスワード
```

②一般ユーザーのときに一時的にroot権限で実行する
```
sudo コマンド
```

個人的には①のほうがよく使う。深い理由はないが、毎度sudoをつけるのが面倒なので。(脳死)

# なぜ簡単にsudoコマンドが使えるのか
実は、みんながsudoコマンドでroot権限になれるわけではない。
以下の設定ファイルで明示的に許可されたユーザーのみがsudoコマンドでrootになることを許されている。
なお、この許可はユーザーに直接与えられることもあるが、ユーザーにが属するグループに対し許可が与えられることの方が多いみたい。
```
/etc/sudoers
```
もしsudoコマンドが使えないユーザーに使用権限を付与する場合、上記の設定ファイルを編集するか、ユーザーを権限が付与されているグループに所属させる必要がある。

## sudoコマンドを使えるようにするためには
①ユーザーを権限があるグループに所属させる場合
```
usermod -aG group add_user
```


②直接編集し、権限を付与する場合
```
visudo
```
のコマンドを使用する。他にもやり方は存在し、
```
vi /etc/sudoers
```
でも編集をすることができるらしい(編集内容の例は後日追記)。
だが、visudoというコマンドを使用すると、ファイルを保存する際に自動的に構文チェックを行ってくれるので、誤った記載をして取り返しがつかなくなることを防いでくれるため、visudoコマンドから編集するのが一般的である。

※2024/10/30時点でのメモ
AWS環境でlinuxサーバたてて検証してみます。
ご参考までに。
HA/FA with NAND Gates

## HALF ADDER (5)

1-5 implies NAND Gate

```mermaid
flowchart LR
    A[In-1]
    B[In-2]
    C[Out-S]
    D[Out-C]
    E((1))
    F((2))
    G((3))
    H((4))
    I((5))
    E-->I
    E-->I
    I-->D
    B-->E
    B-->G
    E-->F
    E-->G
    A-->F
    A-->E
    F-->H
    G-->H
    H-->C
```

## FULL ADDER (9)

1-9 implies NAND Gate

```mermaid
flowchart LR
    A[In-1]
    B[In-2]
    C[In-3]
    D[Out-S]
    E[Out-C]
    F((1))
    G((2))
    H((3))
    I((4))
    J((5))
    K((6))
    L((7))
    M((8))
    N((9))
    A-->F
    B-->F
    A-->G
    F-->G
    F-->H
    B-->H
    G-->I
    H-->I
    I-->K
    J-->K
    I-->J
    C-->J
    K-->M
    L-->M
    J-->L
    C-->L
    F-->N
    J-->N
    M-->D
    N-->E
```
【Ruby】素数を求める方法

# はじめに
こんにちは！アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日は「たのしいRuby 第6版」という教材の中で「素数を判定するメソッドを作成せよ」という練習問題に挑戦してみたのですが、Rubyには他にも素数を求める方法があるのか気になり、記事にしてまとめてみました。

# 素数を求める方法
教材で紹介されていた方法では、素数を判定するメソッドを自分で作ることが求められていましたが、素数を効率よく判定するにはいくつか重要なポイントがあります。
特に次の点を理解すると、素数判定がより効率的に行えるようになります。
* ある自然数$N$が合成数であれば、$N$は$\sqrt{N}$以下の範囲に素因数を少なくとも1つ持つ。

例えば、N = 49の場合、素数かどうかを調べるには7以下の数で割り切れるかを確認すれば十分です（7 x 7 = 49）。

数学が得意な方は知っているかもしれませんが、素数にはこのような特徴があるため、素数を求める方法も工夫できます。
以下に、いくつかの素数判定方法を紹介します
* $\sqrt{N}$の範囲で判定する方法
* Rubyの標準ライブラリ`prime`クラスを使用
* 単純な除算チェック法
* エラトステネスの篩（ふるい）法 

### $\sqrt{N}$の範囲で判定する方法
教材ではこちらの方法が紹介されていました。
指定した数`N`が素数かどうかを、2から$\sqrt{N}$までの数で割り切れるかを確認することで判断します。
```ruby
def prime?(num)
    return false if num < 2
    2.upto(Integer.sqrt(num)) do |i|
        if num % i == 0
            return false
        end
    end
    return true
end

puts prime?(7)
```
この方法のポイントは、平方根以下の範囲だけをチェックするため、計算量を抑えられることです。
ちなみに`Math`モジュールではなく`Integer`クラスメソッドを使用する理由についてはこちらがとても分かりやすいのでご覧ください

https://qiita.com/scivola/items/1518f3dacfdb7759f72e

### Rubyの標準ライブラリ`prime`クラスを使用
Rubyには、素数を効率よく扱うための `Prime` クラスが標準で用意されています。
このクラスを利用すると、素数の判定や特定範囲の素数リストの取得が簡単にできます。
手軽で速度も速いため、素数判定にはよく使用されます。
```ruby
require 'prime'

# 素数判定
puts Prime.prime?(7)     # => true
puts Prime.prime?(10)    # => false

# 素数のリストを取得
p Prime.each(30).to_a    # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
```
`Prime `クラス内部では、エラトステネスの篩（ふるい）などの効率的な手法が組み込まれているため、範囲指定で素数リストを取得する場合には速度が速くなるようです。
ただし、単一の数の素数判定に関しては、計算のオーバーヘッドがあるため、場合によっては上記の平方根を用いた方法よりも遅くなる可能性があります。

### 単純な除算チェック法
`2`から`num - 1`までの範囲で、指定した数が割り切れるかを一つずつ確認する方法です。シンプルですが計算量が大きくなるため、大きな数を判定する際には非効率です。
```ruby
def is_prime?(num)
  return false if num < 2
  (2...num).each do |i|
    return false if num % i == 0
  end
  true
end

puts is_prime?(7)  # => true
puts is_prime?(10) # => false
```

### エラトステネスの篩
エラトステネスの篩自体は理解できたのですが、コードがとても難しかったので、エラトステネスの篩の説明だけこちらに載せておきます

エラトステネスの篩は特定の範囲内のすべての素数を求める時に有効な方法です
* まず2から始め、倍数をすべて削除します。
* 次の未削除の数に移り、再びその倍数を削除していきます。
* この処理を繰り返して、消去されずに残った数が素数となります。

以下のサイトがとてもわかりやすかったので詳細を知りたい方は見てみてください

https://algo-method.com/descriptions/64

# まとめ
今回は、Rubyで素数を判定する方法について解説しました。以下に各手法の特長をまとめます。
素数判定をする際はPrimeクラスを使っていておけば速さ的にも間違いはないと思います。
CloudFront Continuous Deployment を試した

# CDN の設定変更

- CDN は変更に時間がかかったりすることがある
    - なので，staging distribution という別の設定を追加して，その動作を確認してから反映させられたりするので便利という機能がある

## 見た感じ

- continuous deployment を作成すると
    - 2つのdistribution ができる
        - primary distribution / staging distribution
            - type だと production になってそうなので，用語を統一して欲しい
- 反映するには，promote すればよい
    - distribution を切り替えるのかと思ったけど，既存の primary 側に設定を反映してそうだった

## ステージング状態だと

- staging に向ける方法が2種類ある
    - 荷重
    - header
- header を使った方が良さそうに感じてはいる
    - cache したりして，header が付かないミスに注意する

## ハマったところ

- 何故か primary distribution と link してくれない状態でstaging distribution が作成されてしまって，delete するしかない状態になった
    - よくわからない……
- staging 環境の staging distribution とかで，会話でよくわからない状態になったりする．
    - しょうがなさそう

## 気になるところ

- どっちの distribution を使っているかどうか確認する術ってあるんだろうか
    - 特に荷重だと，どっちに割り振られてるか知りたくない？

## Refs

- https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/continuous-deployment.html
Deno Deployさわってみた


風速です。今回はDeno Deployというものをさわっていきたいと思います。
前回Denoをさわってみたので今回はそれを用いてDeno Deployにデプロイまでをしてみたいと思います。

# Deno Deployとは
Deno Deployは、サーバーレスJavaScriptアプリケーション用のグローバル分散プラットフォームです。
JavaScript、TypeScript、WebAssemblyコードは、ユーザーに地理的に近い管理対象サーバー上で実行されるため、待ち時間が短くなり応答時間が速くなります。
Deployアプリケーションは、仮想マシンではなく、Denoランタイムを搭載した高速で軽量なV8アイソレート上で実行されます。
とのことで、web上でみると、githubにあるリポジトリからデプロイしたり、playgroundからはソースを作成、githubにもexportできたりするみたいです。

![スクリーンショット 2024-11-04 21.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/8a0ae81d-e0b8-43c4-6635-9651c82c009c.png)

# インストール
前回Deno自体のインストールをしているので、deployctlユーティリティというものをインストールします。自分の環境だとpathの追加まではやってくれなかったので、インストールのメッセージに書かれているpathを追加しました。
```
$ deno install -A jsr:@deno/deployctl --global
```

インストールされているかの確認をします。
```
$ deployctl --help
deployctl 1.13.0
Command line tool for Deno Deploy.

SUBCOMMANDS:
    deploy      Deploy a script with static files to Deno Deploy
    projects    Manage projects
    deployments Manage deployments
    logs        View logs for the given project
    top         Monitor projects resource usage in real time
    upgrade     Upgrade deployctl to the given version (defaults to latest)
    api         Perform raw HTTP requests against the Deploy API

For more detailed help on each subcommand, use:

    deployctl <SUBCOMMAND> -h
```

# デプロイ
準備が整ったのでデプロイをしていきます。前回作成したプロジェクトは単純なtsの単一ファイルだったので、新しくDenoが提供しているFreshというフレームワークのプロジェクトを作成しました。
![スクリーンショット 2024-11-04 22.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/e83338d4-66ba-e0f6-cc14-6ea03f900b37.png)
テンプレートのままですが、、、

```
$ deployctl deploy
```
コマンドをん実行すると、githubがブラウザで立ち上がるので、承認等をするとデプロイされたように見えましたが、エラーがでていました。

![スクリーンショット 2024-11-04 22.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/728fc615-62e2-552f-a7cf-522e1b6d152d.png)
メッセージをみると、settings -> Git IntegrationのBuild Commandの場所に`deno task build
`を入れてくださいとのこと。

なので一旦リポジトリにしてgithubにあげます。
![スクリーンショット 2024-11-04 23.45.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/ca55461b-1c2b-95a1-5a18-f812bdd8cdcf.png)

webからリポジトリにあげたプロジェクトを確認すると、presetがすでに設定されていたので、そのままDeploy Projectを押します。

![スクリーンショット 2024-11-04 23.47.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/e1cbf61d-3623-976e-2924-343681045f1d.png)

# まとめ
今回はコマンドからやろうとしてみましたが、結局webの画面からポチポチとやる方が簡単で良い気と感じました。
ただcliツールはよしなに使えて、何かと便利なところがあると思うので痒いところに手が届くのかなと思いました。playgroundでwebのエディタからそのままgithubのリポジトリにエクスポートできるというのは初めてみる機能だったので面白いと思いました。

以上、風速でした。
Denoをさわってみた

風速です。今回はDenoをさわってみたいと思います。
# Denoとは
Denoは、TypeScriptとJavaScript用のオープンソースランタイムで、
組み込みの開発ツール、強力なプラットフォームAPI、TypeScriptとJSXのネイティブサポートを備えています。

# インストール
インストールします。
```
$ brew install deno

$ deno -v
deno 2.0.4
```
# Denoプロジェクトの作成
```
$ deno init deno_test
✅ Project initialized

Run these commands to get started

  cd deno_test

  # Run the program
  deno run main.ts

  # Run the program and watch for file changes
  deno task dev

  # Run the tests
  deno test
```
# プロジェクトの実行
Denoはネイティブでtsをサポートしているので、トランスパイルを必要とせず実行できます。個人的に学習している、npmで実行していたプロジェクトも`deno run dev`すると普通にそのまま動きました。
```
$ cd deno_tes
$ deno run main.ts
Add 2 + 3 = 5
```

```main.ts
export function add(a: number, b: number): number {
  return a + b;
}

// Learn more at https://docs.deno.com/runtime/manual/examples/module_metadata#concepts
if (import.meta.main) {
  console.log("Add 2 + 3 =", add(2, 3));
}

```

# テストの実行
テストランナーもネイティブサポートされていて、Deno.test()の関数を使用することで記述可能です。
`deno test`をすると現在のディレクトリ内の`{*_,*.,}test.{ts, tsx, mts, js, mjs, jsx}`のファイル名から検索して実行してくれます。
`--filter`オプションで対象を絞ることもできます。
```
$ deno test

```

```main_test.tsx
import { assertEquals } from "@std/assert";
import { add } from "./main.ts";

Deno.test(function addTest() {
  assertEquals(add(2, 3), 5);
});
```

# まとめ
今回はDenoの基本的な機能をさわってみました。個人的にはテストがデフォルトでサポートされているのはお手軽でよいのかなと思いました。
package.jsonもサポートされているので、node.jsからの移行などもしやすいのかなと思います。
2.0のリリースもあり多くの機能が増えていて、ロゴが好みですので、機会があれば深くさわってみようと思います。

# 参考
https://docs.deno.com/
JavaGold 基本データ型とラッパークラス: BoxingとUnboxingの仕組み


Javaには、基本データ型（プリミティブ型）とそれに対応するラッパークラスが存在します。基本データ型は直接メモリに格納されるシンプルなデータ型ですが、Javaのコレクションフレームワークなどのオブジェクト型が必要な場面ではラッパークラスが利用されます。この基本データ型とラッパークラス間の自動変換を、それぞれ Boxing と Unboxing と呼びます。この記事では、BoxingとUnboxingの仕組み、各基本データ型に対応するラッパークラス、そして実際の使用例をご紹介します。

## 1. BoxingとUnboxingとは？
Boxing: 基本データ型から対応するラッパークラスへの自動変換のこと。Javaでは基本データ型（int, double など）をラッパークラス（Integer, Double など）に自動的に変換できます。
Unboxing: ラッパークラスから基本データ型への自動変換のこと。
Boxingの逆で、Integer から int などの変換が自動で行われます。
Java 5 以降では、BoxingとUnboxingは自動的に行われるため、コードがシンプルで可読性の高いものになります。

## 2. 基本データ型と対応するラッパークラス
基本データ型	ラッパークラス
``boolean``	``Boolean``
``byte``	``Byte``
``char``	``Character``
``short``	``Short``
``int``	``Integer``
``long``	``Long``
``float``	``Float``
``double``	``Double``
## 3. 各基本データ型のボクシング例
Boxing と Unboxing の例をそれぞれ見ていきましょう。

#### int と Integer
```java
int intVal = 100;
Integer intObj = intVal; // Boxing: int を Integer に自動変換
int intResult = intObj;  // Unboxing: Integer を int に自動変換
```
#### double と Double
```java
double doubleVal = 3.14159;
Double doubleObj = doubleVal; // Boxing
double doubleResult = doubleObj; // Unboxing
```
#### その他の基本データ型
```java
boolean boolVal = true;
Boolean boolObj = boolVal; // Boxing

char charVal = 'A';
Character charObj = charVal; // Boxing

float floatVal = 3.14f;
Float floatObj = floatVal; // Boxing
```
## 4. オートボクシングとアンボクシングの利点
コレクションへの格納: Javaのコレクションフレームワーク（ArrayList, HashMap など）は参照型のみを扱うため、ArrayList<int> の代わりに ArrayList<Integer> として格納する場合に便利です。
コードの簡潔さ: 手動で変換するコードを省略できるため、コードがスッキリします。
## 5. 注意点
```パフォーマンスへの影響```: Boxing/Unboxing ではオブジェクトが生成されるため、頻繁に行うとメモリ使用量や処理速度に影響を与える可能性があります。
null の扱い: Integer 型の変数が null の場合に、int へアンボクシングしようとすると `NullPointerException` が発生するため注意が必要です。
【MantineCharts】BarChart で上から下方向の棒グラフを実装する

# はじめに
React 向けコンポーネントライブラリである Mantine に含まれるチャート（グラフ）機能の  **MantineCharts** で上から下方向の棒グラフを実装する方法を記載します。

https://mantine.dev/charts/bar-chart/

一般的な棒グラフは下から上方向に表示されます。また、そうしたグラフでは、売り上げなど数字が大きいほどよいという判断をされるケースが多いです。一方、数字が大きいとマイナスの判断をされる数字もあります。そういった場合に上から下方向のグラフを利用できると思います。

# 開発環境
開発環境は以下の通りです。

- Windows 11
- Next.js 14.2.4
- React 18.3.1
- TypeScript 5.5.2
- @mantine/core 7.13.4
- @mantine/hooks 7.13.4
- @mantine/charts 7.13.4
- Recharts 2.13.2

# 実装
`yAxisProps` に `reversed: true` を渡すと上から下方向の棒グラフになります。

https://recharts.org/en-US/api/YAxis#reversed

```page.tsx
import { BarChart } from "@mantine/charts";

const data = [
  { month: "January", gap: 20 },
  { month: "February", gap: 90 },
  { month: "March", gap: 40 },
  { month: "April", gap: 100 },
  { month: "May", gap: 80 },
  { month: "June", gap: 75 },
];

export default function Page() {
  return (
    <BarChart
      h={400}
      data={data}
      dataKey="month"
      series={[{ name: "gap", color: "blue.6" }]}
      yAxisProps={{
        reversed: true,
      }}
    />
  );
}

```

![localhost_3000_charts_mantine-charts_bar-charts_top-to-bottom-Google-Chrome-2024-11-03-08-26-45 (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/501a53fc-21cd-f2bf-b7ba-a80187847baa.gif)


:::note
`xAxixiProps` に `orientation: "top"` を渡すと目盛りの位置をチャートの上に表示できます。

https://recharts.org/en-US/api/XAxis#orientation

:::

# 関連記事

https://qiita.com/Yasushi-Mo/items/cb09c41b5fb9e79df48f

https://qiita.com/Yasushi-Mo/items/91fe3a4367af55d759a7

https://qiita.com/Yasushi-Mo/items/8fb08b6fd43f39650e05

https://qiita.com/Yasushi-Mo/items/8fe248c9b16b60ed249b

# 参照
- [BarChart](https://mantine.dev/charts/bar-chart/)
- [XAxis](https://recharts.org/en-US/api/XAxis)
- [YAxis](https://recharts.org/en-US/api/YAxis)
メンバーに交代でリーダーを任せてシェアドシーダーシップと主体性を高める

## はじめに

リモート環境でも、チームが主体的に楽しみながら成長するためには、リーダーシップのスタイルを柔軟に進化させる必要があります。
今回は、メンバー全員にリーダーの役割を交代で担わせることで、シェアドリーダーシップを育み、主体性を引き出すための具体的なプラクティスをご紹介します。

## 全員にリーダーを任せる意義

**「自分がリーダーのつもりで考えてみて」と若手メンバーに伝えても、視座を変えるのは難しい**ものです。
通常、チーム全体のことはリーダーに委ねてしまい、自分のタスクにのみ集中してしまう傾向があります。
この状態では、メンバーが主体的に動き出すきっかけを得にくいのが現実です。

そこで、**実際にチームリーダーを交代で任せ、意思決定をメンバー自身が行う経験を積んでもらうことで、自分がチームの意思決定に関われることや、チームを変えられる楽しさを体験**してもらいます。
そうした経験を通じ、チームへの主体的な提案が自然と増え、全員がリーダーシップを発揮できる環境が整っていきます。

## リーダーを任せる前のステップ

リーダーを任せるための前段階として、以下の二つのステップを踏みます。
私のチームの場合は、ここに数ヶ月の期間をかけて、メンバーがリーダーをするときに様々な判断ができる下地を作ってもらいます。

1. **意思決定の判断ロジックの説明を繰り返す**  
   チームとしての意思決定時(タスクの優先度や不具合の修正要否など)に、毎回意思決定の判断ロジックを説明します。説明に時間がかかりますが、これを繰り返します。もしも理由を説明しないまま決定が進むと、「自分が知らないところでチームが勝手に動く」という感覚をメンバーが抱きやすくなり、主体性が発揮されにくくなるからです。

2. **意思決定の訓練を繰り返す**  
   チームとしての意思決定を行う際に、「どうすると良いと思いますか？」と質問します。質問されたメンバーは、その場で一生懸命に考えて結論を出すための判断ロジックを説明してくれます。妥当な回答であれば、それをチームの意思決定として採用します。その経験を繰り返し積むことで、メンバーが自信の判断に自信を持ち、次第にスムーズに意思決定できるようになります。


## ステップを踏んだ後にリーダーを任せる

上記のステップを経たら、いよいよリーダーを任せます。
私のチームはスクラムで開発しているので、チームリーダー兼スクラムマスターをスプリントごとに交代で任せています。
リーダーは、**スプリントの計画作成、進捗管理、タスクの割り当て、朝会やスプリントレビューなどのすべての会議の準備と進行を担当し、チームを牽引する役割を体験**してもらいます。

初めてのリーダーに不安を持つメンバーもいるので、**初めてリーダーを任せるときは、難しいリーダーの仕事はペアプロで行うことで、メンバーが安心して役割に取り組めるようにサポート**します。
たとえば、スプリント計画MTGやスプリントレビューの事前準備は、初めてでは難しいのでペアプロで行います。

このペアプロでの注意点は、それまでのステップでリーダーとして意思決定するための訓練は十分にしているので、ティーチングよりもコーチングを中心に行うことです。
メンバーに問いかけながらメンバーが自分の判断で意思決定してもらいます。
具体的な問いかけ方は、以下のコーチングプログラミングの記事を参照ください。

https://note.com/kojimadev/n/n523c21870347

最初はチームの意思決定が怖くてできないメンバーもいるかもしれませんが、繰り返すうちに自信がつき、次第に自ら判断して進めるようになっていきます。


### リーダーの主体性を発揮できる余地を広げる

**リーダーとしての主体性を発揮しやすい場面を意識的に増やすことも重要**です。
例えば、スプリント終了後のレトロスペクティブのやり方をリーダーに任せるなどです。
KPT、YWT、Fun/Done/Learnなど、様々なレトロスペクティブのやり方の中からリーダーがやりたいものを選択することから始め、慣れてきたら「オリジナルの振り返り方法」を考案してもらったりします。
詳細は以下の記事を参照ください。

https://note.com/kojimadev/n/n4d19df2945ba

https://note.com/kojimadev/n/n1b213a95033a

このように、リーダーとして自分の色やオリジナリティを出せる機会があると、自分がチームに貢献できている実感が得やすくなります。
たとえば、オリジナルの振り返り方法がチームにフィットして盛り上がったり、新たな発見があったりすると、リーダーは「自分のアイデアがチームの成果に影響を与えた」と強く感じることができます。
この成功体験は、次にリーダーを務める時の自信となり、主体的にチームのために新しい提案やアイデアを出す姿勢につながります。

さらに、他のメンバーもそれを目の当たりにすることで、「リーダーは自分の考えを出して良い」という前向きな認識が広まり、チーム全体での提案・改善の文化が醸成されていきます。


### 全員にリーダーを任せた後のチーム

交代でリーダーを経験したメンバーは、自分がチームを変えられる実感と楽しさを得ているため、各自が自分のタスクだけでなく、チーム全体のために積極的に提案を行うようになります。
たとえば、朝会ではマネージャーである自分はあえて発言を控え、メンバー同士が助言し合いながら意思決定を進める場をつくることで、自然と「頼り合い、支え合うチーム」が形成されていきます。

リーダーとしての経験があることで、メンバー同士で解決を模索する力が備わり、メンバー全員が「チームのリーダー」という意識を持ち、主体的に行動できるようになります。

### まとめ

メンバーに交代でリーダーを任せ、シェアドリーダーシップを育むことは、チームの主体性と成長に大きく寄与します。
よろしければ試してみてください。

---

ちなみに私はITエンジニア向け情報誌「Software Design」の2022年5月号から「ハピネスチームビルディング」を題材に連載記事を書いています。Web上でも以下で公開しています。

https://note.com/kojimadev/m/me68d438e12d4

X(旧Twitter)でも役立つ情報を発信しますのでフォローしてもらえると嬉しいです → [@kojimadev](https://X.com/kojimadev)
ロード画面の作成

PowerAppsでアプリを作っていると
ロード画面みたいな機能を付けたくなりますよね。
そんな時はこうします。

まずは下の様に適当な`Iconコントロールを３つ配置`
`Timerコントロールを2つ配置`する。
また、`Timerコントロール`の`Textプロパティ`は見た目でわかりやすくするために
```
Self.Value
```
と入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3737462/5e6ec35a-84cf-0b98-2c8f-abf6824586bb.png)

`Timerコントロール`の`Durationプロパティ`はそれぞれ適当に
`3000と5000`とする。
3000は`ロード中の1サイクル時間(Timer1とする)`
5000は`仮想のロード時間を表す。(Timer2とする)`

次に`Iconコントロール`を左から①②③とすると
`Visibleプロパティ`に
```
①If(Timer1.Value>=800,true,false)
②If(Timer1.Value>=1600,true,false)
③If(Timer1.Value>=2400,true,false)
```
と入力する。

Timerコントロールの設定に戻り
`Timer1,Timer2コントロール`の
`Startプロパティ`はl
```
locStart
```
`Resetプロパティ`は
```
locReset
```
と入力する。

次に
`Timer1コントロール`の`Repeatプロパティ`は
```
true
```
`Timer2コントロール`の`Repeatプロパティ`は
```
false
```
`Timer2コントロール`の`OnTimeEndプロパティ`を
```
UpdateContext({locStart:false,locReset:true});
UpdateContext({locReset:false})
```
と入力する。

最後に`Buttonコントロールを配置`して
ロード画面開始させるため
`OnSelectプロパティ`に
```
UpdateContext({locStart:true})
```
と入力して

そのボタンを押すと5秒のロード画面が仮想的に始まる。

また、ロード中に画面のボタンを操作できないよう
画面全体に色のついたLabelやRectangle（四角形）
コントロールを配置して若干透過率を上げて
VisibleコントロールにはlocStart
と入力しておけばTimerが動いている間は画面操作が
できなくすることもできる。
Databricksで複数ページのレポート作成がサポートされました！

これは嬉しい。今までは1ページのレポートしか作成できなかったので、縦長になってしまいがちでしたが、複数ページにレポートを分割することができるようになりました。

マニュアルはこちらです。

https://docs.databricks.com/ja/dashboards/index.html#create-multi-page-reports

レポート作成画面に移動すると左上に**無題のページ**のタブが。名前の変更、ページの追加、ページの移動ができるようになっています。

![Screenshot 2024-11-05 at 6.58.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6dfd17c8-8305-7fee-7d76-6ace409c8fab.png)

既存のレポートでもページを追加できるようになっています。

![Screenshot 2024-11-05 at 7.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/fd1a4488-d648-b54c-d7f9-528a7ca5afd4.png)

![Screenshot 2024-11-05 at 7.00.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4f983b3e-a8d0-18c6-d44f-034996194d42.png)

![Screenshot 2024-11-05 at 7.00.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7375d5da-9d07-8cc4-c8fd-a6b142f11cdc.png)

ご活用ください！

![Screenshot 2024-11-05 at 7.04.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/af2c13ff-08f6-72c6-e93e-e9c05ac90d69.png)
![Screenshot 2024-11-05 at 7.04.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/78852b45-17e8-94e0-3a84-f492b2162c9a.png)



### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
ソースコードの著作権は誰のもの？

# はじめに
個人的にqiitaへの投稿数が増えてきて、法律を意識するようになってきました。

実際のシステム開発の現場でもソースコードの一部をQiitaに上げ、数千万の損害賠償が発生したというケースも聞きます。
今回はそれらのインシデント対策も兼ねて著作権についてまとめます。

# 例
## 著作権の帰属先について
> A社は、B社と著作物の権利に関する特段の取決めをせず、A社の要求仕様に基づいて、販売管理システムのプログラム作成をB社に委託しました。この場合のプログラム著作権の原始的帰属はどれか。
（ア）A社とB社が話し合って決定する。
（イ）A社とB社の共有となる。
（ウ）A社に帰属する。
（エ）B社に帰属する。

[基本情報技術者平成30年春期　午前問79](https://www.fe-siken.com/kakomon/30_haru/q79.html)より引用




正解は、
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
`正解：エ`でした！

「**ん？なんでA社に依頼されたのに著作権はB社にあるの？**」と疑問に思った方もいるでしょう。

解説は[こちらのページ](https://www.fe-siken.com/kakomon/30_haru/q79.html)よりご確認ください。
> 著作権は「著作物を創作した者」に対して与えられる権利ですので、委託開発で作られたプログラムの著作権は、原則として委託者（発注者）ではなく制作者（受注者）に帰属します。
...
本問では、A社からB社にプログラム作成業務が委託されているので、著作権の原始的帰属先はプログラムを作成したB社となります。

また、著作権についてより詳しく知りたい方のために、抜粋して以下にまとめました。

# 著作権法より抜粋
## 著作物の例示
> 第十条 この法律にいう著作物を例示すると、おおむね次のとおりである。
一小説、脚本、論文、講演その他の言語の著作物
二音楽の著作物
三舞踊又は無言劇の著作物
四絵画、版画、彫刻その他の美術の著作物
五建築の著作物
六地図又は学術的な性質を有する図面、図表、模型その他の図形の著作物
七映画の著作物
八写真の著作物
九プログラムの著作物
２事実の伝達にすぎない雑報及び時事の報道は、前項第一号に掲げる著作物に該当しない。
３第一項第九号に掲げる著作物に対するこの法律による保護は、その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。この場合において、これらの用語の意義は、次の各号に定めるところによる。
一プログラム言語プログラムを表現する手段としての文字その他の記号及びその体系をいう。
二規約特定のプログラムにおける前号のプログラム言語の用法についての特別の約束をいう。
三解法プログラムにおける電子計算機に対する指令の組合せの方法をいう。

上記は[著作権法第十条（著作物の例示）](https://laws.e-gov.go.jp/law/345AC0000000048#Mp-Ch_2-Se_1-At_10)の内容です。<INS>**九プログラムの著作物**</INS>に記載されている通り、ソースコードも著作物に該当します。


## 著作物に該当しないもの
以下はプログラムの著作物には含まれません。
- プログラム言語
- 規約
- 解法・アルゴリズム
> ３第一項第九号に掲げる著作物に対するこの法律による保護は、その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。この場合において、これらの用語の意義は、次の各号に定めるところによる。

## 職務上作成する著作物の著作者
> 第十五条 法人その他使用者（以下この条において「法人等」という。）の発意に基づきその法人等の業務に従事する者が職務上作成する著作物（プログラムの著作物を除く。）で、その法人等が自己の著作の名義の下に公表するものの著作者は、その作成の時における契約、勤務規則その他に別段の定めがない限り、その法人等とする。
２法人等の発意に基づきその法人等の業務に従事する者が職務上作成するプログラムの著作物の著作者は、その作成の時における契約、勤務規則その他に別段の定めがない限り、その法人等とする。

職務でプログラムを作成した場合、著作権は**作成者が所属する法人**に帰属します。

ただし以下の場合などは、プログラムの発注者に著作権が帰属します。
- 製作者が発注者に対して著作権を譲渡することに合意した場合
- プログラムの発注者の指示に基づいて作成された場合
- プログラムの作成が、発注者の業務の一環として行われた場合

# より複雑なケース
## 発注者（客先）からの指示を受けていないかつプログラムに関する契約合意をしていない
例えば、常駐先などで開発を行わない業務を行なっていて、自分がプログラムを作成したとします。
その場合、会社と自分のどちらに著作権が帰属するのか？

結論から言うと、**ケースバイケース**です。

一般的には、プログラムの作成者が著作権を保有します。
しかし、以下の要素によって状況が変わる場合もあります。
1. 作成の目的
    - プログラムを作成した目的が、あくまでも**個人のスキルアップや趣味**であったか、それとも**発注者の業務に役立てること（業務効率化など）**を目的としていたか
2. 使用機器
    - **発注者のコンピュータやネットワーク**を使用して作成されたか
    - **発注者が提供したデータや情報**を用いて作成されたか
3. 成果物の帰属
    - 作成したプログラムが、発注者の成果物とみなされるか

## 対策
1. **記録を残す**
    - プログラムの作成経緯、目的、使用した機器などを記録しておくと、将来の紛争に備えることができます
2. **発注者との話し合い**
    - 作成したプログラムについて、発注者と事前に話し合い、著作権に関する取り決めをしておくことが望ましいです
3. **契約内容を見直す**
    - プログラムの作成に関する契約合意をしていたかどうかなど、書面などを読み返しておくと将来のトラブルを未然に防げる可能性が高まります

# おわりに
法律を知るということは、自分や会社の権利を守るためにあります。

qiitaで自分の投稿が評価されると誰しも嬉しいものですが、それは一時的なものです。
ドーパミンがどんどん放出されているだけです。
それ以上に、自分が無知であるために不当な扱いやトラブルに巻き込まれたくはないと思います。

エンジニアである私たちも例に漏れず、日々スキルアップしていく中でこういった法律面の知識も学んでいければと思います。

# 参考記事
- [著作権法第十条（著作物の例示）](https://laws.e-gov.go.jp/law/345AC0000000048#Mp-Ch_2-Se_1-At_10)
- [著作権法第十五条（職務上作成する著作物の著作者）](https://laws.e-gov.go.jp/law/345AC0000000048#Mp-Ch_2-Se_2-At_15)
- [ソースコードに著作権はある？権利者の変更方法などを解説](https://bolt-dev.net/posts/11777/)
VPCフローログの取得（S3へ保存）


こんにちは。
VPCフローログの取得とログをS3へ保存する設定をします。

S3に保存するメリット、デメリットを簡単に記載。
メリット
- Athenaなどログ分析を利用できる
- S3は長期データ保存に向くため大量のデータをコスト効率よく保存できる

デメリット
- リアルタイム分析や検知に不向き

ログ取得から通知設定をしたい場合はCloudWatch logsがおすすめのようです。

## フローログの設定

設定はとても簡単でした。以下、設定の流れです。
・S3バケットの作成（S3操作）
・ログを取得したいVPCでフローログの設定（VPC操作）

### S3の設定

バケット作成ですが、特に詳細な設定は不要です。


### VPCの設定
まずは設定したいVPCを選択、フローログタブをクリックしてフローログ作成をクリック。
（私はすでに作成しているので画像にフローログ設定が表示されています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902743/217fee34-76ae-9c03-998c-2863837c6bfa.png)

下記項目でフローログの名前、フィルタ設定、集約間隔を設定（設定項目には説明がついているのでどういった内容か分かりやすいですね）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902743/8cc673f2-5330-2a47-3cfe-254d748a87eb.png)

送信先の選択。ここは今回S3に設定してください
S3を選択するとARN入力項目が表示されるので作成したS3バケットのARNを入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902743/a7a319c7-e063-1e72-81a1-868b97adc853.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3902743/3638f3a9-76d3-c4fb-193f-1795e52ea58b.png)


殆どの項目はデフォルトのままで大丈夫です。
取得したいメタデータの追加などあればカスタム形式にして追加設定を行なってください。
ここまで設定すれば作成をクリック。

ログの確認をしたい場合は設定したVPC内にEC2を設置してpingなど行なってみてください。
時間が経つとバケットにログが保存されているはずです。
Docker composeを使ったLaravelの環境構築

### はじめに
前提環境
docker
docker-compose

dockerとdocker-composeは以下の公式URLからインストール前提でお願いします。
[Docker desktop](https://www.docker.com/ja-jp/products/docker-desktop/)

### 環境構築ファイル
以下のURLからdocker-composeを実行する上での環境をクローンしてください。
[URL:github laravel-docker](https://github.com/genie-ru/laravel-docker)

### ディレクトリ構成
クローンしてきたディレクトリ構成は以下のようになります。
```
LARAVEL/
├── .gitignore                  # Gitで追跡しないファイルやディレクトリを指定
├── docker-compose.yml          # Dockerのサービス構成ファイル
├── README.md                   # 環境構築手順や使用方法の説明書
├── docker/                     # 各サービスのDocker設定をまとめたディレクトリ
│   ├── app/
│   │   ├── Dockerfile          # アプリケーション（Laravel）用のDockerfile
│   │   └── php.ini             # PHPの設定ファイル
│   ├── db/
│   │   ├── Dockerfile          # データベース用のDockerfile
│   │   └── my.conf             # MySQLの設定ファイル
│   └── web/
│       ├── Dockerfile          # Webサーバー（例: Nginx）用のDockerfile
│       └── default.conf        # Webサーバーの設定ファイル

```

## Laravel プロジェクト構築手順

1. **ディレクトリの移動**
    
    LaravelプロジェクトのDocker設定があるディレクトリに移動します。
    
    ```bash
    cd laravel
    ```
    
2. **Dockerコンテナのビルドと起動**
    
    Dockerイメージをビルドし、コンテナをバックグラウンドで起動します。
    
    ```bash
    docker compose build
    docker compose up -d
    ```
    
3. **Laravel プロジェクトのセットアップ**
    - **Laravel プロジェクトを作成**
        
        コンテナ内にLaravelプロジェクトを作成します。
        
        ```bash
        docker compose exec app composer create-project --prefer-dist laravel/laravel .
        ```
        
    - **アプリケーションキーの生成**
        
        Laravelのアプリケーションキーを生成して、`.env`ファイルに設定します。
        
        ```bash
        docker compose exec app php artisan key:generate
        ```

    - **Laravelの環境設定ファイル `.env` の編集**

        Docker Compose で指定されているデータベースの接続情報を `.env` ファイルに設定します。

        ```
        DB_CONNECTION=mysql
        DB_HOST=db                # Docker Composeで定義されているサービス名
        DB_PORT=3306
        DB_DATABASE=database      # docker-compose.yml の MYSQL_DATABASE と同じ値
        DB_USERNAME=user          # docker-compose.yml の MYSQL_USER と同じ値
        DB_PASSWORD=password      # docker-compose.yml の MYSQL_PASSWORD と同じ値
        ```

    - **ストレージリンクの作成**
        
        `public/storage`ディレクトリへのシンボリックリンクを作成します。
        
        ```bash
        docker compose exec app php artisan storage:link
        ```
        
    - **ディレクトリの権限設定**
        
        `storage` と `bootstrap/cache` ディレクトリに書き込み権限を設定します。
        
        ```bash
        docker compose exec app chmod -R 777 storage bootstrap/cache
        ```
        
    - **データベースのマイグレーション**
        
        データベーステーブルを作成します。
        
        ```bash
        docker compose exec app php artisan migrate
        ```
#### 最後にlocalにアクセスしてサーバー立ち上がっていれば完了です。
[http://localhost:8080/](http://localhost:8080/)
![スクリーンショット 2024-11-05 5.24.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927075/2d906b9a-a2ed-a432-4d65-1848d56b81af.png)
OIDC Front-Channel Logoutの目的と特徴

OIDC（OpenID Connect）における「Front-Channel Logout」は、ユーザーのブラウザを通じてセッションを終了するためのログアウト方式です。この方式の目的と特徴について説明します。

### 目的

1. **複数クライアントのログアウト**: Front-Channel Logoutは、ユーザーがOIDCプロバイダ（IdP）からログアウトしたときに、同じ認証セッションを使用している複数のクライアント（Relying Parties, RPs）にもログアウト通知を送信し、各クライアントでユーザーセッションを終了させることを目的としています。
2. **ユーザー体験の向上**: ユーザーのブラウザを介して複数のクライアントに対し同時にセッション終了を通知できるため、SSO（シングルサインオン）環境でのログアウト処理がスムーズになります。

### 特徴

1. **ブラウザを経由した通信**: Front-Channel Logoutは、ユーザーのブラウザを介してクライアントと通信します。具体的には、OIDCプロバイダがログアウトページに埋め込まれたiframeを使用し、各クライアントにログアウトリクエストを送信します。
2. **iframeを用いたログアウト通知**: IdPはユーザーのブラウザ上で、クライアントが登録したログアウトURLに対してiframeを挿入し、ログアウトリクエストを送信します。これにより、クライアントはユーザーのセッションを終了します。
3. **リアルタイム性**: ユーザーのブラウザが使用されるため、ログアウト通知はリアルタイムで各クライアントに送信されます。ユーザーがログアウトした際、その場でセッション終了が通知されます。
4. **単純な実装**: フロントチャネルログアウトは、比較的実装が簡単で、クライアント側ではiframeリクエストを受信し適切にセッションを無効化するだけで済みます。

### 実装の流れ

1. **ユーザーのログアウトリクエスト**: ユーザーがIdPにログアウトをリクエストします。
2. **IdPのログアウトページ**: IdPはユーザーのブラウザにログアウトページを表示し、そのページ内にクライアントのログアウトURLに向けたiframeを埋め込みます。
3. **クライアントへの通知**: iframeを通じて、各クライアントに対してログアウトリクエストが送信されます。
4. **クライアント側の処理**: クライアントは通知を受け取り、ユーザーセッションを終了します。
5. **ログアウト後のリダイレクト**: ログアウト処理が完了した後、ユーザーは指定されたリダイレクトURLに誘導されます。

### 利点と制約

**利点**:

- **シンプルな実装**: クライアント側の対応が比較的簡単で、iframeによる通信を利用するだけで済みます。
- **リアルタイムな通知**: ブラウザを経由するため、ユーザーのログアウト後すぐに通知が送信されます。

**制約**:

- **ブラウザ依存**: ブラウザを介した通信に依存しているため、ユーザーがブラウザを閉じたり通信が途中で中断された場合、ログアウト通知が届かない可能性があります。
- **セキュリティ上のリスク**: CSRF（クロスサイトリクエストフォージェリ）など、ブラウザを利用した通信の特有の脆弱性に注意が必要です。
- **同期の問題**: ブラウザ内で複数のiframeを利用するため、全てのクライアントが正常に通知を受け取るかどうかは、ブラウザやネットワーク環境による影響を受けることがあります。

### まとめ

Front-Channel Logoutは、ユーザーのブラウザを通じて複数のクライアントに対してログアウトを通知するため、シンプルでリアルタイムなログアウト処理を実現します。ただし、ブラウザ依存やセキュリティ上のリスクなどの制約も考慮する必要があります。より信頼性を高めたい場合は、バックチャネルログアウトと組み合わせて使用することが推奨されます。
【TryHackMe】Red Team Threat Intel：Walkthrough

# 概要

TryHackMe「Red Team Threat Intel」のWalkthroughです。

https://tryhackme.com/r/room/redteamthreatintel

# Task5

## **Q2**.*How many Command and Control techniques are employed by Carbanak?*

**Hint**.*https://mitre-attack.github.io/attack-navigator//#layerURL=https://attack.mitre.org/groups/G0008/G0008-enterprise-layer.json*

`AmmyyAdmin`,`Team Viewe`などをC2に使用したと情報があります。

https://attack.mitre.org/groups/G0008/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/5d15c4d7-4764-5879-a1f4-56724c18752e.png)

**A**.**2**

## **Q3**.*What signed binary did Carbanak use for defense evasion?*

**Hint**.*"Defense Evasion" tactic*

`rundll32.exe`を利用して防御回避をしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/cbbb10b6-70b4-2873-fb85-e814cf26fe99.png)

https://attack.mitre.org/techniques/T1218/011/

**A**.**Rundll32**

## **Q4**.*What Initial Access technique is employed by Carbanak?*

**Hint**.*"Initial Access" tactic*

https://mitre-attack.github.io/attack-navigator//#layerURL=https://attack.mitre.org/groups/G0008/G0008-enterprise-layer.json

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/35e24ca6-2b89-b4a0-ac43-cee5fd9edc77.png)

**A**.**Valid Accounts**

# Task7

## **Q1**.*To complete the challenge, you must submit one technique name per kill chain section.Once the chain is complete and you have received the flag, submit it below.*

**Hint**.*PowerShell, Spearphishing Attachment, External Remote Services, BITS Jobs, DNS, Keylogging*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f9f74c0d-bd51-9f62-d09d-268404da0300.png)

**A**.**THM{7HR347_1N73L_12_4w35om3}**

## **Q2**.*What web shell is APT 41 known to use?*

下記サイトから`ASPXSpy`が使用されたと分かります。

https://attack.mitre.org/groups/G0096/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f463b61d-2f38-9711-eee7-9b46b5d0d1eb.png)

**A**.**ASPXSpy**

## **Q3**.*What LOLBAS (Living Off The Land Binaries and Scripts) tool does APT 41 use to aid in file transfers?*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/49d96243-35f0-217b-080f-9a94f15a6df5.png)

**A**.**certutil**

## **Q4**.*What tool does APT 41 use to mine and monitor SMS traffic?*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/da8ac626-e79d-6c31-c3ad-d5030ab7664a.png)

**A**.**MESSAGETAP **
2024/11/5主にITとかセキュリティの記事

石光商事、個人情報の漏えいなし　ランサムウエア被害・紛失173件(11/2)
https://news.kobekeizai.jp/blog-entry-18072.html

ハッカーがカフェチェーン「Black Canyon」に、顧客データを盗んだと脅迫。Xデーは11月5日。(11/3)
https://x-bomberth.com/20241103blackcanyon/

リコー製プリンタと複合機に深刻な脆弱性、ただちに更新を(11/3)
https://news.mynavi.jp/techplus/article/20241103-3057226/

キッザニアを襲ったサイバー攻撃！企業と消費者が考えるべきセキュリティ対策とは？
https://cybersecurity-park.com/3303/

ドメインハイジャック(11/3)
https://cybersecurity-jp.com/security-words/104673

通信暗号化(11/3)
https://cybersecurity-jp.com/security-words/105005

通信トンネリング(11/3)
https://cybersecurity-jp.com/security-words/105003

米国 NIST SP 800-131A Rev.3（初期公開ドラフト） 暗号アルゴリズムと鍵長の使用の移行 (2024.10.21)(11/3)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/11/post-08dad8.html

米国 NIST IR 8528 耐量子暗号標準化プロセスにおける追加デジタル署名スキームの第一ラウンドに関する状況報告書(11/3)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/11/post-2ef8bd.html

Amazon Bedrock Guardrailsをknowledgebaseやtool use、クエリ拡張で試す。(11/2)
https://qiita.com/revsystem/items/cbfa54cbcdd0f83a0ac2

ローソンや東京ディズニーリゾートなどでクレカ決済が一時できない状況に(11/3)
https://newsdigest.jp/news/0a4b24c4-3dd7-4da5-83d8-2707ed56388e

米国 NIST CSWP 37（初期発行ドラフト）NIST 暗号モジュール妥当性確認プログラムの自動化： 2024 年 9 月状況報告書 (2024.10.31)(11/3)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2024/11/post-d30923.html

サイバー法案、年内見送りへ　首相交代で設計議論停滞(11/3)
https://www.sanyonews.jp/article/1633243/

焦点：米大統領選、激戦州選管が偽情報対策や警備を強化(11/3)
https://jp.reuters.com/world/us/JWQZBSKNDVOQREAAT3ETJ64F7Y-2024-11-02/
「OIDC Back-Channel Logout」の目的と特徴

「OIDC Back-Channel Logout」は、OIDC（OpenID Connect）認証におけるセキュアなログアウトメカニズムの一つです。この方式の目的と特徴を以下に説明します。

### 目的

1. **セキュアなログアウト**: バックチャネルログアウトの主な目的は、ユーザーのセッションを確実かつセキュアに終了することです。ユーザーのブラウザを経由せずに、IdP（アイデンティティプロバイダ）とクライアントサーバー間で直接通信を行い、セッションを無効化します。
2. **信頼性向上**: ブラウザを使用したログアウト（フロントチャネルログアウト）では、通信の信頼性がユーザーのブラウザに依存しますが、バックチャネルログアウトではサーバー間で通信を行うため、ログアウト処理の信頼性が向上します。
3. **複数クライアントのセッション管理**: シングルサインオン（SSO）環境では、同じ認証情報を使用する複数のクライアントにおいてセッションを同時に終了することが必要です。バックチャネルログアウトは、複数のクライアントに対して確実にセッション終了を通知できます。

### 特徴

1. **サーバー間通信**: OIDCプロバイダ（IdP）がバックチャネルログアウトリクエストをクライアントのサーバーに直接送信します。ユーザーのブラウザは介在しないため、ユーザーがログアウト後にブラウザを閉じたり、通信が中断されてもセッション終了の通知は送信されます。
2. **高いセキュリティ**: サーバー間の直接通信は、ブラウザを経由するフロントチャネルログアウトに比べて、CSRF（クロスサイトリクエストフォージェリ）などの脆弱性を減らすことができます。
3. **セッションの一貫性**: IdPは、セッションIDやログアウトトークンを使用して、関連するすべてのクライアントに対して同じユーザーのセッション終了を通知します。これにより、クライアント間でセッション状態が一貫して保たれます。
4. **同期・非同期対応**: クライアントはバックチャネルログアウトリクエストを同期的または非同期的に処理できます。これにより、クライアント側でセッションの無効化が適切に行われるように設計することができます。

### 実装の流れ

1. **ユーザーのログアウトリクエスト**: ユーザーがOIDCプロバイダにログアウトリクエストを送信します。
2. **ログアウト通知の送信**: OIDCプロバイダは、登録されているすべてのクライアントに対してバックチャネルログアウトリクエストを送信します。この通知はHTTP POSTリクエストで行われ、ログアウトトークンが含まれます。
3. **クライアント側のセッション無効化**: 各クライアントはログアウト通知を受け取り、対象となるセッションを無効化します。
4. **レスポンス**: クライアントは通知を受け取ったことを確認するためにレスポンスをOIDCプロバイダに返します。

### 利点と制約

**利点**:

- 高いセキュリティレベルでのセッション終了。
- 複数クライアントへの確実なログアウト通知。
- ユーザー体験に依存しないログアウト処理。

**制約**:

- クライアントサーバーがバックチャネルログアウトに対応している必要がある。
- 通信経路や設定が適切に構成されていないと通知の受信に失敗するリスクがある。

バックチャネルログアウトは、特にセキュリティを重視した環境や複数クライアントを一貫して管理する必要があるシングルサインオン環境で重要な仕組みです。