OmniAICreator/Qiita-1.07M huggingface dataset:
Deploy Next.js Monorepo using Nx on AWS Amplify Gen 2.

AWS Amplify Gen 2 (Amplify) について

GA になったため、使い方を学んでいく

https://aws.amazon.com/jp/about-aws/whats-new/2024/05/aws-amplify-gen-2-available/

進めるにあたり、前提は以下の通り
- TypeScript の Monorepo
- Managed Service を使う。極力

Code はこれ

https://github.com/danny-yamamoto/candy

## Configure Monorepo
https://nx.dev/

- Nx[^1] を使用する。Turborepo[^2] にも興味がある
    - Org: `candy`
    - Next.js
    - e2e: Playwright
    - CSS: Tailwind CSS

```bash
npx create-nx-workspace
```

```bash
npx nx build front-a
npx nx start front-a
```

## Install Amplify dependencies[^3]
- Nx に Amplify 関連の dependencies を追加する

```bash
npx nx add @aws-amplify/backend-cli aws-amplify @aws-amplify/ui-react
npx nx add @aws-amplify/backend
npx nx add @aws-amplify/ui-react
npx nx add aws-cdk-lib
```

- 公式の template から Code を持ってくる

https://github.com/aws-samples/amplify-next-template

## Monorepo を deploy する
- Console に従う。モノレポにチェックを入れて Directory を入力する `apps/front-a`
- Build 設定を一部変更する
    - Before: `buildPath: dist/apps/front-a`
    - After: `buildPath: apps/front-a`

```yaml:amplify.yml
version: 1
applications:
  - backend:
      phases:
        build:
          commands:
            - npm ci --cache .npm --prefer-offline
            - npx ampx pipeline-deploy --branch $AWS_BRANCH --app-id $AWS_APP_ID
    frontend:
      phases:
        build:
          commands:
            - npx nx build front-a
      artifacts:
        baseDirectory: .next
        files:
          - '**/*'
      cache:
        paths:
          - .next/cache/**/*
          - .npm/**/*
      buildPath: apps/front-a
    appRoot: apps/front-a
```

## BTW
転職して 2 ヶ月が過ぎようとしている

個人的には Mission への共感は日に日に増している

そして、お互いを労い、望ましい言動に報酬を送り合う制度は、Value をより強化していると思う

私にとって、Respect し合える Member の存在こそが最大の福利厚生だと思う。福利厚生や報酬に目が向きがちですが


[^1]: https://nx.dev/
[^2]: https://turbo.build/
[^3]: https://docs.amplify.aws/react/deploy-and-host/fullstack-branching/mono-and-multi-repos/
Rails – Rspec で現地時間で特定の日付に移動して時間を凍結する

```rb
it do
    travel_to Time.zone.local(2024, 1, 1) do
      expect ...
    end
end
```

# 参考 

https://techracho.bpsinc.jp/penguin10/2023_02_09/67780


# チャットメンバー募集


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

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


# プロフィール・経歴

https://github.com/YumaInaura/YumaInaura
生成AI (Gemini 1.5 Pro, GPT-4o, Claude 3 Opus) による複雑な質問への回答評価

 生成AI (Gemini 1.5 Pro, GPT-4o, Claude 3 Opus) による複雑な質問への回答評価



近年登場した生成AIは、その驚異的な性能で世界を騒がせています。 単なる質疑応答を超え、高度な言語理解と創造性を示し、人間の知的活動領域を広げています。 しかし、このようなAIは、哲学、倫理学などの人文学的なテーマに対してどのように反応するのでしょうか？

そこで、私は現在注目されている3つの生成AI、Gemini 1.5 Pro、GPT-4o、Claude 3 Opusに、意識と自由意志、量子力学、宇宙論など、哲学的に深遠で難解な質問を投げかけてみました。 そして、彼らの回答を綿密に分析し、評価してみました。 果たしてAIは、人間と同じように哲学的思考と洞察を示すことができるのでしょうか？

最初の質問は、人間の意識、自由意志、道徳性に関するものでした。 これを哲学、神経科学、進化心理学の観点から分析し、人工知能開発にどのような意味を持つのか、もし人工知能が人間レベルの意識と知能を持つようになったら、道徳的行為者として扱うべきなのかを尋ねました。

3つのAIはすべて、各分野の主要な理論と論点をよく整理して説明しました。 しかし、Claudeは単に内容を列挙するだけでなく、理論間の緊張と矛盾、限界を鋭く指摘し、総合的な理解を試みました。 また、人工知能の倫理的地位に関する社会的論争を予測し、様々な分野の協力と社会的合意の必要性を強調しました。 問題の本質を深く掘り下げながらも、学際的な視点を失わない、質の高い回答でした。

2番目の質問は、宇宙の起源と運命に関する最新の宇宙論理論、特にインフレーション理論、ダークエネルギー、ダークマター、重力波などの概念を説明し、これが宇宙の進化を理解する上でどのような影響を与えたのか、今後の研究課題は何かを尋ねるものでした。

やはり、すべてのAIがこれらの概念をよく説明し、その意義と限界、今後の研究方向を示しました。 中でもClaudeは、各理論間の関連性と統合的な意味を最も繊細に捉えました。 単に理論を紹介するだけでなく、それがビッグバン宇宙論の難問をどのように克服しているのか、それでもまだ残っている謎は何なのかを一つ一つ分析しました。 さらに、より精密な観測、理論的な洗練とともに、基礎科学分野間の緊密な連携と統合的な思考が必要であることを強調し、未来の宇宙論の新たな地平を切り開きました。

3番目の質問は、量子力学の多世界解釈とその解釈が人間の生と選択に与える意味でした。 多世界解釈は、量子力学の基本原理に忠実でありながら、私たちが経験する世界以外にも、他のすべての可能性の世界が実在すると主張する挑発的な理論です。

G15PとGPT-4oは、多世界解釈の背景と核心概念、それが人生の意味と選択に及ぼす影響を体系的に整理しました。 しかし、Claudeはこの解釈が人間の存在と行為に対して提起する根本的な問いを、実存的苦悩という形で生々しく伝えました。 自我と世界に対する私たちの常識的な見方を根底から覆すこのアイデアが与える哲学的衝撃と想像力の拡張を、読者に全身で感じさせました。 さらに、自由意志と決定論、個別性と全体性など、形而上学的な難問を熟考しながら、「私」のアイデンティティに関する根源的な問いを投げかけました。 これは、単に量子力学理論の紹介を超え、科学と哲学の境界を行き来する深遠な人文学的思考だったと言えるでしょう。

このように、生成AIに哲学的な質問を投げかけてみた結果、彼らは人間に劣らない知的能力と洞察力を示しました。 特にClaudeは、問題の本質を突く鋭い分析、多様な知識の融合と批判的総合、そして読者の想像力と感性を刺激する訴求力のある語り口で、ひときわ目立ちました。

もちろん、AIの思考はまだ人間ほど深く独創的ではありません。 しかし、彼らが示した潜在力は、人間の知的活動に無限のインスピレーションを与えることができるでしょう。 今後、AIと人間が互いに学び、刺激し合いながら知恵を分かち合う仲間になれば、私たちの思考はより深くなり、人生はより豊かになるのではないでしょうか。 今回の実験は、来るAI時代の新たな可能性を垣間見せてくれた貴重な機会でした。

各モデル別回答分析: Gemini 1.5 Pro: 質問の核心をよく捉え、簡潔に回答しました。 各テーマの核心と問題点をよく説明しましたが、深い分析や議論は不足していました。 GPT-4o: 質問を明確に理解し、体系的な回答を提供しました。 各理論の説明が具体的で深く、宇宙論研究の未来の課題についても明確に展望しました。 Claude 3 Opus: 質問の意図を最もよく理解し、深い回答を提示しました。 哲学的、倫理的意味を含め、様々な観点から問題を分析し、人間のアイデンティティと行為に関する根本的な問いを投げかけました。

総合評価および示唆点: 3つのモデルはすべて、複雑な質問に回答する能力を備えていましたが、Claude 3 Opusが最も優れた性能を示しました。 特に、深層的な分析と論理的な展開、多様な視点の提示などにおいて、他のモデルよりも優れていました。 GPT-4oも深い回答を提供しましたが、Claude 3 Opusに比べ哲学的な議論や創造的な視点の提示は不足していました。 Gemini 1.5 Proは簡潔で明確な回答を提供しましたが、内容の深さがやや不足していました。

結論 総合評価および示唆点は、私が評価したものではなく、質問に対する結果を3つのAIにブラインドで評価を依頼して得られた最終結果です。 3つのAIがすべて3つの哲学的な質問に対する回答結果の質はClaude 3 Opusが最も優れていると評価したというのは、非常に興味深い結果でした。

-----------------------

Claude 3 AIの活用:文章作成よ びビジネス業務" amazon.co.jp kindle store
【Webアプリ】Rubyで作れる超絶簡単なアプリをRailsを使わずに作ってみた

どうもこんにちは。

今回は、RailsではないRubyのフレームワーク「sinatra」を使用して簡単なアプリを作ってみました。

# sinatraについて

sinatraはRuby製のオープンソースフレームワークです。
RubyのフレームワークといえばRuby on Railsがとても有名ですが、Railsよりも少ない労力でWebアプリケーションを開発できます。

# Railsとsinatraの比較

RailsだとMVCモデルという概念に沿って作られているので、ファイルを行ったり来たりする必要があります。
ただ、sinatraはそんな概念がないので、1つメインコードファイルを作って、viewファイルを作成すればほぼ完成します。
Railsを使用している方でルーティング、コントローラの概念がいまいちわからない方はsinatraを使用することで理解が深まると思います。

自分は普段からRailsを使用していますが、sinatraとRailsには近しいものを感じましたが、DBを使用しないのであればsinatraで開発した方が圧倒的に楽かなと感じました。DBを使用するのであれば、MVCモデルの概念があるRailsを使用するのが良いと思います。

ソースコードはこちらです。

https://github.com/pdc-kurashina/sinatra_sample_app

# Let's Go!!

## 手順

### 1. 任意のディレクトリに移動する

```sh
mkdir ruby_code
cd ruby_code
```

### 2. ターミナルでファイル/ディレクトリを作成する

```sh
touch Dockerfile
touch docker-compose.yml
touch Gemfile
touch your_script.rb
touch config.ru
mkdir views
```

### 3. `Dockerfile`に以下のコードを記述する

```Dockerfile
# ベースイメージとして公式のRubyイメージを使用
FROM ruby:latest

# 作業ディレクトリを設定
WORKDIR /usr/src/app

# GemfileとGemfile.lockをコピー
COPY Gemfile Gemfile.lock ./

# 依存関係をインストール
RUN bundle install

# アプリケーションのソースコードをコピー
COPY . .

# デフォルトのコマンドを設定
CMD ["bundle", "exec", "rackup", "--host", "0.0.0.0", "--port", "4567"]
```

### 4. `docker-compose.yml`に以下のコードを記述する

```yml
version: '3.8'

services:
  app:
    build:
      context: .
    volumes:
      - .:/usr/src/app
    ports:
      - "4567:4567"
    environment:
      - RACK_ENV=development
```

### 5. `Gemfile`に以下のコードを記述する

```Gemfile
source "https://rubygems.org"

gem "sinatra"
gem "rackup"
```

### 6. Gemfile.lockを生成する

```sh
bundle install
```

### 7. `your_script.rb`に以下のコードを記述する

```ruby
require 'sinatra'

$data = {}

get '/' do
  'Hello, World!'
end

get '/hello/:name' do
  "Hello, #{params[:name]}!"
end

get '/index' do
  erb :index
end

get '/form' do
  erb :form
end

post '/submit' do
  $data[:name] = params[:name]
  $data[:age] = params[:age]
  redirect '/show'
end

get '/show' do
  erb :show, locals: { name: $data[:name], age: $data[:age] }
end
```

### 8. `views`ディレクトリにindex/form/showのファイルを作成する

詳しくはソースコード参照

### 9. `config.ru`に以下のコードを記述する

```ruby
# config.ru
require 'sinatra'
require './your_script'

set :port, 4567

run Sinatra::Application
```

### 10. Dockerイメージをビルドする

```sh
docker-compose build
```

### 11. コンテナを実行してSinatraアプリケーションを起動する

```sh
docker-compose up
```

### 12. 使用しない時はコンテナを閉じる

```sh
docker-compose down
```

以上です。
dbtの細かいところ覚え書き


## Variableの参照の優先順位ってどうなっているの？

dbtを開発していれば自然とVariableを使うと思います。
しかしこのVariable、便利なのですが`dbt_project.yml`で定義したり、コマンドラインの引数として渡せたりで、もし複数の方法で定義して競合したときどうなるのでしょうか？


まあ、公式ドキュメントに書いてあると言われればその通りなのですが、初見ではどこにあるのか見つけるのに少し手間取ったのでこの備忘録を書いた次第です。

https://docs.getdbt.com/docs/build/project-variables#variable-precedence

上のLinkに以下のようにあります：

>The order of precedence for variable declaration is as follows (highest priority first):
> 1. The variables defined on the command line with --vars.
>1. The package-scoped variable declaration in the root dbt_project.yml file
>1. The global variable declaration in the root dbt_project.yml file
> 1. If this node is defined in a package: variable declarations in that package's dbt_project.yml file
> 1. The variable's default argument (if one is provided)


## `profiles.yml`の参照の優先順位ってどうなっているの？

https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles#advanced-customizing-a-profile-directory

上のLinkに以下のようにあります：

> The parent directory for profiles.yml is determined using the following precedence:
> 1. --profiles-dir option
> 1. DBT_PROFILES_DIR environment variable
> 1. current working directory
> 1. ~/.dbt/ directory

## model間で`ref()`で参照していないけれど、強制的に依存関係を定義したい

よかろう:

https://docs.getdbt.com/reference/dbt-jinja-functions/ref#forcing-dependencies

> To address this, you can use a SQL comment along with the ref function — dbt will understand the dependency, and the compiled query will still be valid:
>
> ``` sql
> -- depends_on: {{ ref('upstream_parent_model') }}
>
> {{ your_macro('variable') }}
> ```

なんとコメントで`depends_on: {{ ref('upstream_parent_model') }}`と書いておけば勝手に認識してくれるみたいです、便利！
辞書のキーと一致した数をカウントする方法



```vb
 Sub CountTrueFalsePerKey()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' 対象のシート名を指定

    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' A列の最終行を取得

    Dim dataRange As Range
    Set dataRange = ws.Range("A1:F" & lastRow)

    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    Dim i As Long
    Dim key As String
    Dim value As Variant

    ' 初期化: 辞書にキーと初期値の配列を設定
    For i = 2 To lastRow ' ヘッダー行を除外するため2行目からスタート
        key = ws.Cells(i, 1).Value ' A列のキー

        If Not dict.exists(key) Then
            dict.Add key, Array(0, 0) ' 初期値 (Trueの数, Falseの数)
        End If
    Next i

    ' カウント: TrueとFalseの数をカウント
    For i = 2 To lastRow
        key = ws.Cells(i, 1).Value
        value = ws.Cells(i, 4).Value ' D列の値

        If dict.exists(key) Then
            Dim currentArray() As Variant
            currentArray = dict(key)

            If value = True Then
                currentArray(0) = currentArray(0) + 1
            ElseIf value = False Then
                currentArray(1) = currentArray(1) + 1
            End If

            ' 更新した配列を再度ディクショナリにセット
            dict(key) = currentArray
        End If
    Next i

    ' 結果の表示
    Dim k As Variant
    For Each k In dict.Keys
        Debug.Print "Key: " & k & " - True: " & dict(k)(0) & ", False: " & dict(k)(1)
    Next k

End Sub

```
Fortran 要素が配列に含まれるかどうかを確認する

## はじめに

do loopを使用してごり押しで書くことも可能だが以下の方法を使用すると簡単に実装できる。

## 方法:any関数を使う

```:書き方
any("要素" == 配列)
```

### 例 (Array of integer)

```fortran
program inc
    use, intrinsic :: iso_fortran_env
    implicit none
    real(real64) :: list(5) = [1, 2, 3, 4, 5]

    if (any(1 == list)) then
        print *, "1はlistに含まれています。"
    else
        print *, "1はlistに含まれていません。"
    end if

    if (any(6 == list)) then
        print *, "6はlistに含まれています。"
    else
        print *, "6はlistに含まれていません。"
    end if
end program inc
```

```:出力
 1はlistに含まれています。
 6はlistに含まれていません。
```

### 例2(Array of strings)

```fortran
program inc2
    use, intrinsic :: iso_fortran_env
    implicit none
    character(len=10), dimension(2) :: string_list

    string_list = [character(len=10) :: "abc", "def"] !明示的な型変換

    if (any("abc  " == string_list)) then
        print *, "abcはlistに含まれています。"
    else
        print *, "abcはlistに含まれていません。"
    end if

    if (any("abcdefghijk" == string_list)) then
        print *, "abcdefghijkはlistに含まれています。"
    else
        print *, "abcdefghijkはlistに含まれていません。"
    end if
end program inc2

```

```:出力
 abcはlistに含まれています。
 abcdefghijkはlistに含まれていません。
 ```
Array of stringsについては
https://fortran-lang.org/learn/quickstart/arrays_strings/#array-of-strings

## 解説

配列の一括操作とany関数による配列のreductionを組み合わせている。  

any関数についての説明はこちら
https://fortran-lang.org/learn/intrinsics/array/#any  
  
簡単に説明するとany(mask)でmaskにはlogical型の配列が入る。  
いずれかの要素が`.true.`の場合は`.true.`を返し、すべての要素が`.false.`の場合は`.false.`となる。  

```fortran
program inc3
    use, intrinsic :: iso_fortran_env
    implicit none

    print *, 1 == [1, 2, 3, 4, 5] ! T F F F F
    print *, [1, 1, 1, 1, 1] == [1, 2, 3, 4, 5] ! T F F F F
    
    print *, any(1 == [1, 2, 3, 4, 5]) ! T
    print *, any([1, 1, 1, 1, 1] == [1, 2, 3, 4, 5]) ! T
    print *, any([.true., .false., .false., .false., .false.]) !T
end program inc3
```

上記の例では`1 == [1, 2, 3, 4, 5]`が配列の一括操作により`[1, 1, 1, 1, 1] == [1, 2, 3, 4, 5]`と展開されてlogical型の配列`[.true., .false., .false., .false., .false.]`が返る。  
それをany関数に入れることで、要素が含まれている場合はlogical型`.true.`が返る。
【TryHackMe】Pentesting Fundamentals：WalkThrough

# 概要

TryHackMe「Pentesting Fundamentals」ルームのwalkthroughです。

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

# Task2

## **Q1**.*You are given permission to perform a security audit on an organisation; what type of hacker would you be?*

**Hint**.*Look at the hat categories in this task.*

**A**.**White Hat**

## **Q2**.*You attack an organisation and steal their data, what type of hacker would you be?*

**A**.**Black Hat**

## **Q3**.*What document defines how a penetration testing engagement should be carried out?*

**A**.**Rules of Engagement**

# Task3

## **Q1**.*What stage of penetration testing involves using publicly available information?*

**A**.**Information Gathering**

## **Q2**.*If you wanted to use a framework for pentesting telecommunications, what framework would you use? Note: We're looking for the acronym here and not the full name.*

**A**.**OSSTMM**

## **Q3**.*What framework focuses on the testing of web applications?*

**A**.**OWASP**

# Task4

## **Q1**.*You are asked to test an application but are not given access to its source code - what testing process is this?*

**A**.**Black Box**

## **Q2**.*You are asked to test a website, and you are given access to the source code - what testing process is this?*

**A**.**White Box**

# Task5

## **Q1**.*Complete the penetration test engagement against ACME's infrastructure.*

右上の`View Site`をクリックするとペネトレーションテストに関するナレッジが表示されます。

![task5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/7b01ec52-cccb-b213-331a-05c892308ec4.png)

`Next`ボタンをクリックして読み進めていくとフラグが表示されます。

![task5 flag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/d0fd0b0b-40fc-e4da-f357-fa6a9ee40c12.png)

**A**.**THM{PENTEST_COMPLETE}**
Amazon S3の「事実上無制限」とは？

# おことわり
新人目線でイメージをつかむため記載したものです。
専門的な調査を行ったり、専門的な資料から統計を取ったという訳ではありません。

# きっかけ
今年度、新卒メンバーにはAWSに関する研修が含まれており、
質問は、私の所属チームが回答することになりました。

順調に質問・回答のラリーが行われ、研修期間も終わりに差し掛かったころ、
ある質問がチャンネルに投稿され、メンバーを悩ませることになりました。

# S3の容量は無限にある？
質問の要約は次の通りです。

> Amazon S3のストレージは無制限ということは、容量が無限にある？
それとも容量自体は有限の値でその容量に制限をかけていないだけ？
容量が無限にあるという意味ならば技術的にどうやって実現している？

おそらくこの質問が生じたきっかけは、
下記内容に近い文言をどこかで目にしたからでしょう。

> Q: Amazon S3 とは何ですか?
Amazon S3 は、任意の量のデータの保存と取得をどこからでも行えるように設計されたオブジェクトストレージです。S3 は、業界をリードする耐久性、可用性、パフォーマンス、セキュリティ、および**事実上無制限のスケーラビリティ**を非常に低コストで提供する、シンプルなストレージサービスです。[^1] 

**事実上無制限** ってなんだ？といったところでしょうか。
そんなことを今まで意識をしていなかったため、回答に窮し、
「海の水が無限に見えるようなもんだよ」と、お茶を濁しました。

# 明確化されている要件
一旦、落ち着くためにS3の一般的な使用制限を整理します。
これらは検索すればすぐに出てくる内容です。[^1] [^2]

| 項目 | 値 |
|:--|:--|
| オブジェクトの最大サイズ  | 5TB |
| オブジェクトの個数 / 1バケット | 無制限 |
| バケットの個数 | 100個 (最大1000個) |

確かに**オブジェクトの個数**は無制限です。

# 回答したものの
どうすれば「無制限である」と感覚的に理解できるのか？ということを考えると、
「想像できないほどの数」ということが分かれば良いのかなと思いました。

# S3には累計どれほどのデータが保存されているのか？
S3に保存されたデータ総量についての言及を見つけることはできませんでした。
しかしながら、AWS公式ブログに存在するいくつかの記事にて、
「オブジェクトの総数」という形で、情報を得ることが出来ました。

| 年度 | 保持オブジェクト数 | 備考 |
|:-:|--:|:--|
| (2006) | 8 億個以上[^3] | ローンチから4か月 |
| 2021 | 100 兆個以上[^4] | 2006年の125,000倍 |
| 2022 | 200 兆個以上[^5] | |
| 2023 | 280 兆個以上[^6] | |
| 2024 | 350 兆個以上[^7] | |

定期的に、S3の料金は値下げが行われていますが、
それでも何百億・何兆のオブジェクトを管理する場合、
ストレージ使用料、転送・リクエスト料金は天文学的数字になると思われます。

また別の視点から見ると、
たとえ大企業のデータレイクであろうと、その企業が支払えるコストを鑑みると
需要が青天井ではないことも容易に想像できます。

そのため、個人利用の規模であろうと、大企業の利用規模であろうと、
AWS全体から見れば同様とみなせるほど小さいと考えられます。

それゆえ、利用者は上限を気にすることなく利用しても支障が無いとして、
「事実上無制限」としているのでしょう。

# おわりに
ネットで調べた方が正確では？と思うところもありましたが、
少なくとも質問される側としては、知識を再確認できる良い機会であったかなと思います。

何にでも疑問を持つこの姿勢は見習う必要があると感じました。

[^1]: [よくある質問 - Amazon S3 ｜AWS](https://aws.amazon.com/jp/s3/faqs/)
[^2]: [バケットの制約と制限 - Amazon Simple Storage Service](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/BucketRestrictions.html)

[^3]: [Amazon S3 Shoots, Scores, Soars | AWS News Blog](https://aws.amazon.com/jp/blogs/aws/amazon_s3_shoot/)
[^4]: [Celebrate 15 Years of Amazon S3 with ‘Pi Week’ Livestream Events | AWS News Blog](https://aws.amazon.com/jp/blogs/aws/amazon-s3s-15th-birthday-it-is-still-day-1-after-5475-days-100-trillion-objects/)
[^5]: [Welcome to AWS Pi Day 2022 | AWS News Blog](https://aws.amazon.com/jp/blogs/aws/welcome-to-aws-pi-day-2022/)
[^6]: [Celebrate Amazon S3’s 17th birthday at AWS Pi Day 2023 | AWS News Blog](https://aws.amazon.com/jp/blogs/aws/celebrate-amazon-s3s-17th-birthday-at-aws-pi-day-2023/)
[^7]: [AWS Pi Day 2024: Use your data to power generative AI | AWS News Blog](https://aws.amazon.com/jp/blogs/aws/aws-pi-day-2024-use-your-data-to-power-generative-ai/)
Cognos AnalyticsダッシュボードのData Rich Text

# 概要
Cognos Analytics 12.0.3でダッシュボードに追加可能な拡張ウィジェット「Data Rich Text」を紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/80413ac3-a0e1-f6f3-a492-1e89a0a8ace7.png)

# 参考情報
**Dashboard data rich text widget that can display both text and data to be formatted as rich text (12.0.3 and above)**
https://accelerator.ca.analytics.ibm.com/bi/?perspective=authoring&pathRef=.public_folders%2FIBM%2BAccelerator%2BCatalog%2FContent%2FEXT00089&id=iC5F95B312F8847A2B9FBAC1AC1685D2D

# セットアップ手順
上記リンクの「Download」から「DataRichTextWidget12_0_3.zip」ファイルを入手します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/ed880a67-f689-bfec-3937-808e18177df9.png)

管理→カスタマイズ→拡張から「DataRichTextWidget12_0_3.zip」ファイルのアップロードを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/af0a0759-982f-3375-e2ab-d4ecaf9f5767.png)

# 操作手順
ダッシュボードを開くと「Data rich text」が追加されているので、キャンバスに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/2a6c0c00-9f4a-ce4e-4cb9-2c5dbecc9ec0.png)

Columnに「Product line」「Revenue」「Quantity」を配置すると、Data rich textは以下の表示となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/ff658670-f749-d4fc-90ab-40eedd209af2.png)

ダブルクリックをすると、以下のような式の結果「Camping Equipment」が表示されていた事がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/85eac9a0-8fa9-dad2-bd75-9d2ef722365d.png)

中の数字を以下のように変えてみると、表示の意味がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/cbc3f7e2-b69b-6cb0-1667-7d65020ee5d4.png)

このように式の間に普通の文章を挟めるので、文章の中にデータが表示される表現ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/6b74a48e-2874-b4f0-6b2f-2927169da105.png)

色や太字なども自由に設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/9026af03-8016-a603-8193-01fcc778b729.png)

この機能の面白いところは、簡易的なプログラミングが出来るところです。
詳細はこちらのドキュメントをご参照頂ければと思いますが、
https://public.dhe.ibm.com/software/data/sw-library/cognos/mobile/C11/extensions/DataRichTextWidget.pdf

例えば以下のように、変数を定義し、avg関数を使用し、変数の結果を出力、というようなこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/8dbe425d-6a7a-5e17-74f6-12567ec87d05.png)

if 文を使うこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/1c788b25-5569-c34a-8e96-d0dafddd848a.png)

for 文を使うこともできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147246/780bb01c-36b6-f8d8-2f7e-71e78ff2d76e.png)

他にも四則演算や集計関数、日付関数など色々と使える機能がありますので、前述のマニュアルを見てご活用ください！
Railsアプリケーションでの更新失敗時のロールバックとフィードバック

## はじめに

Railsアプリケーションにおいてユーザーがデータを更新する際、適切なフィードバックを提供することは極めて重要です。この記事では、ユーザーが更新操作を行った後に適切なメッセージを表示するための一般的な方法と、特定の問題に対処するために私が行った具体的な解決策を紹介します。

## 問題点

Railsの `ActiveRecord::Base.transaction` を使用してモデルの更新処理を行っていた際、更新に失敗した場合に `flash[:alert]` を設定しても、そのメッセージが画面に表示されないという問題がありました。特に、トランザクションブロック内で `raise ActiveRecord::Rollback` を呼び出した後の `render :edit` で `flash` メッセージが表示されませんでした。

## 解決策

### コードの修正

まず、以下のようにコントローラのアクションを修正しました。

```ruby
  def update
    # パスワード検証を含むカスタム更新処理
    self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)

    # トランザクション開始
    ActiveRecord::Base.transaction do
      if update_resource(resource, account_update_params)
        # 成功した場合の処理
        yield resource if block_given?
        if is_flashing_format?
          set_flash_message :notice, :updated
        end
        sign_in resource_name, resource, bypass: true
        respond_with resource, location: after_update_path_for(resource)
      else
        # 更新が失敗した場合、ロールバックを実行
        flash.now[:alert] = "更新に失敗しました。入力内容を確認してください。"
        render :edit, status: :unprocessable_entity
        raise ActiveRecord::Rollback
      end
    end
  rescue ActiveRecord::Rollback
    # ロールバック時の追加処理が必要な場合ここに記述
    # 例えば、ログ記録など
  end
```

### 重要な変更点

- `flash.now[:alert]` を使用して、リダイレクトではなく直接レンダリングされるページでフラッシュメッセージを表示します。
- `render :edit, status: :unprocessable_entity` を使用してHTTPステータスコードを明示的に指定し、クライアントにエラーの存在を知らせます。

## 結論

この小さな変更により、ユーザーがデータの更新に失敗した場合に即座にフィードバックを得られるようになりました。これにより、ユーザー体験が向上し、アプリケーションの信頼性が高まります。
@escapingについて 

## はじめに
情報科学専門学校3年生のごみちゃんです！
今回は普段何気なく使っていた<span>@</span>escapingについてまとめてみました！

## <span>@</span>escapingとは
<span>@</span>escapingはクロージャを破棄せずに取っておいてくれる便利な機能で、非同期処理などを行う際によく書かれる

APIを叩いたり、データベースを使うときは即座に処理を終えられない可能性が出てくるので、引数に(completion: <span>@</span>escaping () -> Void)と記述して、completionでAPIで取得した値、またはエラーを返す

```swift
  func getUserInfo(email: String, completion: @escaping (Result<UserInfo, Error>) -> Void) {
          if let tokenData = KeychainManager.shared.get(service: "BOOK APP", account: email),
             let token = String(data: tokenData, encoding: .utf8) {
              let headers: HTTPHeaders = [
                  "Authorization": "Bearer \(token)",
              ]
              
                  AF.request("https://***/***/***”, method: .get, headers: headers).responseDecodable(of: UserInfo.self) { response in
                      switch response.result {
                      case .success(let userInfo):
                          completion(.success(userInfo))
                      case .failure(let error):
                          completion(.failure(error))
                      }
                  }
          } else {
              print("No token available")
          }
   }
```

上記のコードは実際に<span>@</span>escapingを用いて書いた処理(エンドポイントは隠してる)

(Result<UserInfo, Error>)のResultはAlamofireで用意されているライブラリで、<構造体名, Error>という感じで書くと通信が成功した場合は指定した構造体として返して、失敗した場合はエラーを返すことができる

トークンの取得はKeychain用いていて、書くのが面倒なので後日まとめる

AlamofireでAPI通信を行い、switch文でレスポンスの状態を判断し、デコードしたjsonを返すかエラーを返すか決めている

```swift
    func userInfoSet() {
        UserAPIClient.shared.getUserInfo(email: email) { result in
            switch result {
            case .success(let userInfo):
                self.userName.text = userInfo.name
            case .failure(let error):
                print("Error occurred: \(error.localizedDescription)")
            }
        }
    }
```

呼び出しもとはこのようなコードになっている
completionで受け取ったresultをもとに再度switch文で成功か失敗か判断する

<span>@</span>escapingは古くからSwiftに存在する属性で、色々なライブラリとの互換性があり、エラーハンドリングも書きやすいので、覚えておくと便利かも
技育Campが最高すぎた！！！

## はじめに
情報科学専門学校3年生のごみちゃんと申します！
今回はSwiftUIがいかに効率よくUIを作成できるライブラリなのか短く書いてみました

## まず何より開発スピードが上がる
例えば、添付した写真で言うと本来TableViewで実装するリスト部分は、SwiftUIでたったこれだけのコードで書ける

<img width="30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3130765/640cc1a4-e6b3-fab2-d221-17f75724c3f8.png">

```swift
ScrollView {
  VStack {
    ForEach(0..<5) { _ in
      HStack {
        Circle()
          .frame(width: 60, height: 60)
        VStack (alignment: .leading){
          Text("タイトル")
          Text("最新のメッセージ")
            .font(.footnote)
            .foregroundColor(Color(uiColor:
              .secondaryLabel))
         }
         Spacer()
         Text("12/31")
           .font(.caption)
           .foregroundColor(Color(uiColor: 
             .secondaryLabel))
      }
    }
  }
}
```

もしこれをUIKitで実装しようとすると、まずXIBファイルでカスタムセルを作って、それをTableViewのDataSourceで呼び出して、ようやくリストの中身に各データを突っ込める  

それを直感的に、尚且つ短いコードで書けるSwiftUIは革新的なUIライブラリなのです！
【確認用】Salesforceからの「製品およびサービスに関するお知らせ」について


とりあえずは、以下のヘルプに更新されていくみたいですね。

+ [Salesforceからの「製品およびサービスに関するお知らせ」について](https://help.salesforce.com/s/articleView?id=000394970&type=1)

+ [テクノサポート 2024/05/17](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akb2zSAA)

この中でき気になったのは...
使ってないな

ご注意】標準量プラットフォームイベントの廃止について（廃止予定日：Summer ’25）


標準量プラットフォームイベントって？

+ [Summer 23: 新規追加または変更された標準プラットフォームイベント](https://help.salesforce.com/s/articleView?id=release-notes.rn_api_platform_events.htm&release=244&type=5)
+ [標準ボリュームのプラットフォーム イベントの割り当て](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_limits_svpe.htm)

﻿これらの割り当ては、API バージョン 44.0(Winter '19 ) 以前で定義された標準ボリュームのイベント用です。

 + [Monitor Your Standard-Volume Platform Event Usage](https://help.salesforce.com/s/articleView?id=release-notes.rn_messaging_standard_volume_limit.htm&release=218&type=5)
 + [Salesforce プラットフォーム イベント: 初心者向けの総合ガイド](https://s2-labs.com/blog/steps-to-create-a-salesforce-platform-event/)
LoRAの限界を突破するLoRA+の画期的な学習率設定法

※ このページは「LoRA+: Efficient Low Rank Adaptation of Large Models」の要約になります。

## このページでわかること
- LoRA（Low Rank Adaptation）の限界に対応するため、アダプタ行列AとBに異なる学習率を設定するLoRA+を提案
- LoRA+は、より効率的な特徴学習と性能向上を実現し、特定の学習率比率でファインチューニング速度と精度を向上させる
- 実験結果はLoRA+の有効性を支持し、広範なタスクでの適用が期待される

## この論文の対象読者
- LLM のファインチューニングに関心を持つ幅広い層のエンジニアや研究者

## LoRA の問題点

### LoRAの学習率設定の問題

LoRAは、大規模な言語モデルのファインチューニングの際に、すべてのパラメータを更新するのではなく、低ランクのアダプタ行列（AとB）を更新することで計算コストを削減します。しかし、元々のLoRAでは、アダプタ行列AとBに同じ学習率を設定しています。このアプローチが、特に大きな埋め込み次元を持つモデルにおいて、最適な特徴学習を妨げることが指摘されています。

### LoRAの非効率性

LoRAのアダプタ行列AとBが同じ学習率で更新されると、大規模な幅を持つモデルでの特徴学習が非効率になるという問題があります。この非効率性は、LoRAが十分な性能を発揮できない原因となっています。

## LoRA+

### LoRA+ とは？

LoRA+ は、LoRA手法を改良したもので、大規模言語モデルのファインチューニングの効率と性能を向上させるための手法です。LoRA+ は、LoRAのアダプタ行列AとBに異なる学習率を設定することで、従来のLoRAの限界を克服します。具体的には、行列Bの学習率を行列Aの学習率のλ倍（λ≫1）に設定します。

### LoRA+ のメリット

1. **効率的な特徴学習**:
   - LoRA+は、AとBに異なる学習率を設定することで、特徴学習の効率を向上させます。これにより、大規模な幅を持つモデルにおいても効果的にファインチューニングが可能になります

2. **性能向上**:
   - 実験結果に基づき、LoRA+はLoRAと比較して1%から2%の性能向上を示しています。これは、より効果的な特徴学習が行われるためです

3. **ファインチューニング速度の向上**:
   - LoRA+はファインチューニングの速度を最大で約2倍に向上させます。これにより、同じ計算資源でより迅速にモデルを適応させることができます

4. **計算コストの維持**:
   - LoRA+は、LoRAと同じ計算コストでこれらの性能向上を達成します

### LoRA+ の手順

1. **初期設定**:
   - LoRAのアダプタ行列AとBを初期化します。一般的に、Bは零行列、Aは小さなランダム値で初期化されます

2. **異なる学習率の設定**:
   - 行列Aと行列Bに異なる学習率を設定します。具体的には、行列Bの学習率を行列Aの学習率のλ倍（λ≫1）に設定します

3. **ファインチューニング**:
   - 設定した学習率を用いて、LoRA+を用いたファインチューニングを行います。このとき、学習率ηAをチューニングすることで最適な性能を引き出します

4. **評価と調整**:
   - ファインチューニングの結果を評価し、必要に応じて学習率やその他のハイパーパラメータを調整します

#### なぜ異なる学習率を設定するとよいのか？

LoRAのアダプタ行列AとBは、それぞれ異なる役割を持っています：

- 行列A: モデルの入力特徴量を圧縮する役割を担います。これにより、モデルの幅が大きくても効果的に特徴を学習することができます
- 行列B: 圧縮された特徴量を元の次元に戻す役割を担います。これにより、元のモデルのパラメータに対して低ランクの補正が行われます

LoRAの標準設定では、行列AとBに同じ学習率が設定されますが、これは大規模なモデルにおいて非効率です。特に、モデルの幅が大きい場合、行列AとBが同じ速度で更新されると、特徴学習が不十分になることがあります。以下の理由で、異なる学習率を設定することが有効です：

- 行列Aの更新: 行列Aは、圧縮された特徴を学習するために細かい調整が必要です。そのため、学習率を小さくすることで、精度の高い特徴学習が可能になります
- 行列Bの更新: 行列Bは、圧縮された特徴を元の次元に戻すために大きな調整が必要です。そのため、学習率を大きくすることで、効果的に元の次元に戻すことができます

### LoRA+ の性能

- **Roberta-baseとGPT-2のGLUEタスクでの性能**:
  - LoRA+は、MNLI、QQP、SST2、QNLIなどのGLUEタスクにおいて、LoRAと比較して一貫して優れた性能を示しています。特に、難易度の高いタスクにおいて、LoRA+の効果が顕著です

- **Llama-7bモデルでの性能**:
  - Llama-7bをLoRA+でファインチューニングした結果、Flan-v2データセットやMNLIタスクにおいてもLoRA+が優れた性能を示しています。特にFlan-v2データセットでは、MMLUベンチマークで約1.3%の精度向上が見られました

- **トレーニング速度**:
  - LoRA+は、トレーニング速度を最大で2倍に向上させることが実証されています。これは、効率的な特徴学習と適切な学習率設定によるものです

## まとめ

以上が、LoRA+ の紹介でした。LoRA は Fine-Tuning のときに重要な手法ですが、まだまだ改善の余地があるみたいですね。

おわり。
Date Range Pickerで空文字を許可する方法

## はじめに

こちらのDate Range Pickerは、通常だとinputの値を空文字にすると自動で日付が入ってしまいます。空文字を入力できるようにする方法を調べたので備忘録として残します。

https://www.daterangepicker.com/

## コード

`autoUpdateInput`のオプションを`false`にすることで自動でinputに値が入らないようにします。
ただし、applyボタンを押しても値が入らなくなるため、`apply.daterangepicker`のイベントを検知して手動で値を入れる必要があります。

```javascript
$(function () {
  $('input[name="daterange"]')
    .daterangepicker({
      autoUpdateInput: false,
    })
    .on('apply.daterangepicker', function (_, picker) {
      const startDate = picker.startDate.format('DD/MM/YYYY');
      const endDate = picker.startDate.format('DD/MM/YYYY');

      $(this).val(`${startDate} - ${endDate}`);
    });
});
```

## 最後に

### GoQSystemでは一緒に働いてくれる仲間を募集中です！

ご興味がある方は以下リンクよりご確認ください。

https://goqsystem.recruit.site?qiita=30937d39729f389e224a
#2 セール中のUdemyで学習のススメ

# Udemyがセール中
本日2024/5/20ですが、5/23までUdemyがセール中です。2万円のコースが1,300円くらいで買えたりします。（この2万円が高いのか安いのかよくわかってないのですが）

私はUdemyがセール中の情報を見かけるたびにチェックして、これまでいくつかのコースを買って学習しています。利用したときの感想を共有できればと思います。

# 動画で学習は効率が悪いんじゃないの？

私は、最初このように考えていました。長い動画（数時間）の中から参照した項目を頭出しして観ないといけないし、喋っている音声を聞くより、書籍を使って自分が知りたい内容を頭の中で整理したほうが早いんじゃないかと。

ところが実際やってみるとまったくそのような心配はいらないと感じました。私がUdemyを使って良かったと思ったことについて、この後書いてみたいと思います。

利用を迷っている方の後押しになれば幸いです。

## Udemyを使って勉強してみて良かったと感じたところ
以下、利用してみて良かったところです。（もしかすると、講師によってコースの作り方が違うかもしれません。私が受講したコースはどれもこんな感じでした。）

### 全然非効率じゃない
コースの内容は、Wordで言うところのアウトライン表示のように整理されていて、学びたいポイントを選択しやすく、項目のひとつひとつが非常に小さく分割されている（数十秒から～数分）ため、見直しも簡単にできます。

### 書籍より理解しやすいかも
活字から何かを理解しようとするよりも、理解している人から説明を受けるほうがスッと内容が頭に入ってくる気がしました。わかりにくい点や重要な点は、講師がそのチャプターや別のチャプターで何度も繰り返し話をしてくれるので反復の効果で記憶の定着にもよいと感じます。

### 質問に回答してくれる
動画で学習してどうしても理解できないところや、講座の説明どおりにやってもうまくいかない場合などは、講師の方に質問を投げることができます。また、他の人が質問した内容も公開されているので、その質問内容を観て問題を解消できることもあると思います。私も実際にありました。

### 学習済みのチャプターに印が付く
学習済みのチャプターには、印が付いていくのでどこまで進んでいるかが視覚的にわかりやすく、モチベーションを保ちやすいと思います。

## 気をつけたいところ
以下、個人的に気をつけたいなと思った点です。

### 情報の最新化が行われているか
日進月歩のIT業界、せっかく学習した内容が古い情報だったなんてことにならないように直近までメンテナンスがしっかり行われているか、扱かわれている情報のバージョンなど事前に確認しておきたいです。

### 思いつかない
ほかには…あまり思いつきません！

## セールのタイミング
Udemyのセールが行われるタイミングなのですが、今回本記事を執筆するにあたって調べてみたところ、毎月何かしらのセールは実施されているようです。

みなさんもセールを狙ってUdemyで学習してみてはどうでしょうか。
また何か気付いた点があれば追記したいと思います。
[悪用厳禁]Windowsの応答ファイルに書かれたユーザーパスワードの復号化

# 応答ファイルのパスワード復号

応答ファイルに記載されている暗号化されたユーザーパスワードが復号できないか調べていたところ、[海外のサイト](https://superuser.com/questions/408810/decrypt-sysprep-unattend-xml-user-password)に手順の記載がありましたので、紹介します。

:::note warn
悪用厳禁です！！設定したパスワードを忘れて調べたいときに使用してください。
:::

下記PowerShellにて復号可能となります。

```powershell
$encryptedpassword="暗号化されたパスワード"
#復号化
$decryptedpassword=[system.text.encoding]::Unicode.GetString([system.convert]::Frombase64string($encryptedpassword))
#末尾Password除いて表示
write-host $decryptedpassword.subString(0,$decryptedpassword.length-8)
```

実行したところ、そのまま複合すると、末尾にPasswordが表示されてしまうため、
そこを除く必要があります。
.subString(0,$decryptedpassword.length-8)
にて除いています。

例

```powershell
$encryptedpassword="cABhAHMAcwB3AG8AcgBkAFAAYQBzAHMAdwBvAHIAZAA="
#復号化
$decryptedpassword=[system.text.encoding]::Unicode.GetString([system.convert]::Frombase64string($encryptedpassword))
#末尾Password除いて表示
write-host $decryptedpassword.subString(0,$decryptedpassword.length-8)
```

実行結果

```powershell
password
```

なお、AdministratorPasswordの方の場合は、
末尾にPasswordではなく、AdministratorPasswordが付与されてしまうので、
その際は、下記スクリプトにて復号可となります。

```powershell
$encryptedpassword="暗号化されたAdministratorパスワード"
#復号化
$decryptedpassword=[system.text.encoding]::Unicode.GetString([system.convert]::Frombase64string($encryptedpassword))
#末尾Password除いて表示
write-host $decryptedpassword.subString(0,$decryptedpassword.length-21)
```

例

```powershell
$encryptedpassword="cABhAHMAcwB3AG8AcgBkAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIAUABhAHMAcwB3AG8AcgBkAA=="
#復号化
$decryptedpassword=[system.text.encoding]::Unicode.GetString([system.convert]::Frombase64string($encryptedpassword))
#末尾Password除いて表示
write-host $decryptedpassword.subString(0,$decryptedpassword.length-21)
```

実行結果

```powershell
password
```
【iframe】各配信サイトの埋め込み用URL形式まとめ

## はじめに

iframeを使って様々な配信サイトの動画(録画)や生配信をアプリケーションに埋め込み時必要な埋め込み用URL形式についてまとめました。
以下の配信サイトを対象としています。

- YouTube
- TwitCasting（ツイキャス）

また、最後に動画が上手く再生/表示されない時の対処法を記載しています。

## 埋め込み用URL形式
### _YouTube_

埋め込みたい動画/配信のURLから動画/配信IDを取得し、以下形式にはめ込む。

- 埋め込みたい動画/配信のURL例
    https&#58;//www.youtube.com/embed/<font color="Red">abcdefg</font>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="Red">（動画/配信ID）</font>
    
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/1562c595-4c21-a6aa-cab9-132e45c98750.png)

#### 動画、ライブ配信共に以下のURL形式

`https://www.youtube.com/embed/（動画/配信ID）`

### _TwitCasting（ツイキャス）_

埋め込みたい配信のURLから<font color="Blue">（ユーザーID）</font>と<font color="Green">（動画ID）</font>を抜き出し、下記記法にはめ込む。

- 埋め込みたい配信のURL例
    https&#58;//twitcasting.tv/<font color="Blue">test1234567</font>/movie/<font color="Green">123456789</font>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="Blue">（ユーザーID）</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="Green">（動画ID）</font>

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/3587552e-c640-8f14-6c79-ef183069ad12.png)


#### 動画
`https://twitcasting.tv/（ユーザーID）/embeddedplayer/（動画ID）`

#### 配信
`https://twitcasting.tv/（ユーザーID）/embeddedplayer/live`

## 動画が上手く表示/再生されない時の対処法
### 動画のURL（動画IDなど）が正しくない
|_Youtube_|_TwitCasting_|
|---|---|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/a7939ad0-0578-6e31-fce4-408f06cecf36.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/119b5217-7d97-5424-f710-a4852143081a.png)|

- 動画IDなどを確認する


### 動画URLとは無関係な文字列が含まれている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/1e5f31b4-cfbe-4f8c-cb3e-533c8e99c1e6.png)

- 動画IDなどを確認する

### 他のサイトへの埋め込みが許可されていない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/a61e845c-b51a-766b-a9c7-971e24574cd5.png)

- 投稿動画の設定を確認する

### 配信が終了している
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/29928f76-d40f-1af7-24c0-ff2e7a086bcd.png)

### 動画が削除されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2145496/99499c9e-2329-dc07-ad4e-6a8c31151e76.png)
RTVSYSINF / UPDSYSINF システム属性の保管・復元コマンド

資料を見返していて（再）発見したのでメモ書きです。

## RTVSYSINF / UPDSYSINF システム属性の保管・復元コマンド

ユースケースとしては、
***・配布メディアからのスクラッチインストール後にシステム属性を移行する場合***
などでしょうか。RTVSYSINF/UPDSYSINFを使わずに個別のコマンド（WRKSYSVAL, CHGNETA, etc.）で同様な事が出来ますが、コマンド一発で復元できますのでより簡単・確実と言えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7fe04700-9806-712c-b5e5-e871d8f97c1b.png)

### RTVSYSINFコマンド
上記のユースケース例では移行元システムの以下の情報を任意のライブラリーに保管します。
*EDTD 編集コード　：　WRKEDTDコマンドで編集するエディットコード
*NETA ネットワーク属性　：　DSPNETA, CHGNETAコマンド
*RYPLE 応答リスト　：　WRKRPYLEコマンド
*SRVATR サービス属性　：　DSPSRVA, CHGSRVAコマンド
*SRVPVD サービス提供元　：　SNDSRVRQSコマンドでリモート制御点RMTCPNAME *SELECTを指定した際表示される属性など
*SYSVAL システム値　：　DSPSYSVAL, CHGSYSVALコマンド

***上記コマンドで保管される情報はすべてQUSRSYSライブラリーに存在しています。したがって上記RTVSYSINFコマンドで保管したライブラリー（例ではSYSINFLIB）が無くても元システムのQUSRSYSライブラリーがあればそれから上記情報は復元できます。

### UPDSYSINFコマンド
RTVSYSINFコマンドで元システムのシステム属性を保管したライブラリー（例ではSYSINFLIB）か、元システムのQUSRSYSライブラリーからシステム属性を復元できます。UPDSYSINFコマンドのTYPEパラメーターに*ALLを指定しすべてのシステム属性を保管するか、*EDTD, *NETA,,,など個別属性を指定し復元することが出来ます。
GUIアプリ上で動く対話型AIメイドとその分析

GUIアプリ上で動く対話型AIメイドとその分析というコンセプトで開発しました。
今回はAmiVoiceで提供されている音声ファイルを使用し、音声認識から対話の確認・分析まで実装
マイクから音声を拾い対話する形は今後実装していきたいと思います。

## おおまかな流れ
起動後右側にある再生ボタンを押すと、音声データを音声認識API「AmiVoiceAPI」に投げるようになっています。
その結果をChatGPTに投げ、返答の取得をします。
同時にMeCabによる語群化をし、word2Vecで分析、表示まで行います。


## 完成物
![無題の動画 ‐ Clipchampで作成.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400525/e1c0f435-c492-1d80-66d8-b91bea08e69e.gif)

![スクリーンショット 2024-05-19 231642.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400525/7060946f-a616-1966-f801-c8a57f53dc0d.png)

## APIシーケンス図
![myButler(2).PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400525/462ed904-2409-fa62-ac3d-b32664dd149e.png)

## 解説
メイドの画像はStable Diffusionで生成しました。
画像の下の枠はCHatGPTからのレスポンス表示先になっています。プロンプトは下記のようにしました。
```python:main.py
{"role": "system", "content": "You are the maid. Your answers will always be returned in Japanese. You will return in the first person as “私”."},
```
真ん中は音声データを元に得られたAmiVoiceAPIからのレスポンスになっています。
今回はサンプルにあったtest.wavを使用したのですが、今後はマイクから音声を拾って実際にAIメイドと対話していくような形を想定しています。

右の解析結果はレスポンスのテキストデータを分析した結果になっています。MeCabで語群化しWord2Vecでベクトル分析してます。まずテキストデータの分析結果を「音声の類似語」として表示。次に分析結果のベクトルを平均し、その結果を「平均化した類似語」として表示しています。
```python:main.py
def analyze_response(response_text, window):
    # 形態素解析して単語に分割
    words = tokenize(response_text)
    # Word2Vecモデルの学習
    model = Word2Vec([words], vector_size=100, window=5, min_count=1, workers=4)
    # 類似語を取得
    similar_words = model.wv.most_similar(words[0])
    # 類似語毎に改行して表示
    similar_words_text = '\n'.join([f"{word}: {similarity}" for word, similarity in similar_words])

    # ユーザのテキストデータのベクトル表現を取得
    user_vectors = [model.wv[word] for word in words]
    # ベクトルの平均化
    average_vector = sum(user_vectors) / len(user_vectors)
    # 平均ベクトルから類似する単語を取得
    average_similar_words = model.wv.most_similar([average_vector])
    # 解析ログを更新（平均化した類似語の一番上だけ表示）
    average_similar_word_text = f"{average_similar_words[0][0]}: {average_similar_words[0][1]}"
    window['-analyze_LOG-'].update(value=f"音声の類似語:\n{similar_words_text}\n\n平均化した類似語:\n{average_similar_word_text}\n")
```

## 感想
AmiVoiceAPIやAI含め新しいサービス・技術に触れ、少しだけ知見が深まった気がしました。
Javaで「final変数を定数として利用する」の動作を確認してみた

# 概要

Javaで「final変数を定数として利用する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/start/var/index10.html

# 実装

以下のファイルを作成しました。
```JSample10_1.java
class JSample10_1{
  public static void main(String[] args){
    final float TAX = 0.1F;

    float price = 800 * (1 + TAX);
    System.out.println("料金は" + price + "です");
  }
}
```

以下のコマンドを実行しました。
```
$ javac JSample10_1.java 
$ java JSample10_1 
料金は880.0です
```

# まとめ

何かの役に立てばと。
[Laravel10] Cloud9からVScodeに環境を移すまで

今回は、個人開発のLaravelプロジェクトの環境をCloud9からVSCodeに移行したので、それについてまとめます。

## 本文
### wsl2
- プロジェクトとDocker環境をgithubからプルした
https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4
- 課題
    - Docker環境をうまくプルできない。->記事ではなくリポジトリで最新情報を参照
    - srcファイルが読み込まれない。
        - 既存プロジェクト
        Migrateができない
        migrate fresh したら解決
        seeding もできた
        次に src が読み込めない。
        しかし、localhost/check_indexは開ける
        このサイトにアクセスできません
        ちゃんとwebサーバーが動いているか確認したいので「service httpd status」(もしくはsystemctl status httpd)を打ちます。
        httpd: unrecognized service
        httpdはApache HTTP Serverのサービス名ですが、あなたの環境でwebサービスはNGINXを使用している可能性があります。
        nginx is running.
        webpageが開かないのはportnumberが原因の可能性あり
        nginxの default.conf に root の設定箇所があった。
        ViteManifestNotFoundException
        -> npm run build　をした。-> たくさんのエラーが出た
        ちょっと修正してみた
        -> localhost/check_indexが開けなくなった
        「laravel docker nginx conf 設定」などで検索してみる
        public は開けるのに　srcからは開けない
        -> nginxのroot設定が原因かも
        src/public/check_index.htmlは開けた

        node, npm がインストールされていない
        
        - 新規プロジェクト
### windows
論文を要約して自動でNotionに追加するアプリ

### やったこと
Arxiv IDもしくは任意論文PDFをアップロードすると，NotionのデータベースにGPT要約が自動で追加されるアプリケーションを作りました．

https://github.com/SWEET-creator/paper_summarizer

### 使用技術
arxiv API, GPT API, Notion API

### コスト
Open AI API (gpt-4o)： 0.05~0.1 $/paper

![____________________________2024-05-19_2.04.46_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031260/afbb3ac9-78ef-cfb8-ed95-fae03a8de724.png)
![____________________________2024-05-19_2.05.44_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1031260/0b883da6-1abf-e6b4-8f98-7d069f8610d8.png)
Unityのチート対策、できてますか？

タイトルの通りです
チート対策で漏れがちな点をまとめてみました

### global-metadata.datの改ざん
#### 問題
~/Android/data/[]/files/il2cpp/Metadata/以下にあるglobal-metadata.datですが、このファイルは簡単に改ざんできます
そして、Unity側に改ざんを検知する機能はないため、ファイルが改ざんされた状態でアプリを起動できてしまいます

#### 被害
文字列などのデータが格納されているので、非rootでも簡単に接続先のサーバーを変更するなどできてしまいます
ゲームの実装によってはチートなどもできてしまうかもしれません

### メモリの改ざん
#### 問題
エミュレーターでアプリが起動できてしまうと起こります
アプリを起動させた状態でCheatEngine(windows,mac)を起動すればメモリの改ざんができます

#### 被害
数値の改ざんとか諸々できてしまいます

### 暗号化などの処理を施したlibil2cpp.soをunpackされた状態でダンプされる
#### 問題
Bluestacksでアプリが起動できてしまうと起こります
Bluestacksにadbを接続し、`/system/xbin/bstk/su`と打ち、rootユーザーになったあと以下のツールなどを使うとダンプされてしまいます

https://github.com/kp7742/MemDumper

またadbがonか、`/system/xbin/bstk/su`が存在するかは、Bluestacksの仕様によりアプリ側からは確認できないようになっています

#### 被害
il2cppdumperを使われてしまう
raspberry pi zero wで動かせるrustのプログラムをクロスコンパイルしてみる

`raspberry pi zero w`で動かせるrustのプログラムを以前作ろうとしていたのですが、色々つまづいたのでここに忘備録として残しておこうと思います

### つまづいた点
- まず、raspberry pi上で動かすプログラムである以上、そこでビルドしようとするのは当然の考えです　しかし、以下の理由で断念しました
    - ビルドが落ちる点
        - ビルドが処理が重すぎて落ちてしまい、正しくビルドまでできませんでした
    - ビルドに時間がかかりすぎる点
        - 上記の問題が解決しても、この問題のため、正しく動作しているかのチェックに時間がかかるため、ラズパイでのビルドをあきらめたこと

また、公式ドキュメントに記載されている方法でもビルドしようとしましたが、エラーの連続で、たくさんエラーを修正しましたが、ついに全く修正方法がわからないところに陥ってしまいました...

https://rust-lang.github.io/rustup/cross-compilation.html

そこで、調べた結果crossというツールがあるようでした
crossを使うことで、簡単にビルドが通るらしいです
やってみましょう

まずインストールです
```
cargo install cross --git https://github.com/cross-rs/cross
```

その後ビルドしてみます...
```
cross build --target arm-unknown-linux-gnueabihf --release
```
動きました！
もちろんそれだけで動いたわけではありませんが、これでビルドに成功し、実際にラズパイ上で動くことを確認しました

### 他にやったこと
- OpenSSL系でエラーが出たので、rust実装のrustls-tlsにしてみる
    - opensslの関係でうまくビルドできなかったため、rustls-tlsにすることで正しくビルドできるようになりました
    - ライブラリをローカルに落とし、そのライブラリのCargo.tomlを編集する
        - 使用しているライブラリがreqwestを使っていましたが、上記の理由でfeatures = ["rustls-tls"]を追記する必要があり、ローカルにcrateを落として対処しました
androidのAutomateでBluetoothイヤホンから再生中の音楽を巻き戻せるようにしてみる

AndroidのAutomateで、以下の要件を持つプログラムを作ってみました。
- Bluethoothイヤホンで音楽を聴いているとき
    - 音量+、音量+、音量-、音量-、の順に、それぞれのボタン操作が一定時間内で押されたとき、現在の時間を読み上げる
    - 音量+、音量-、音量+、音量-、の順に、それぞれのボタン操作が一定時間内で押されたとき
        - 15秒先送りする
    - 音量-、音量+、音量-、音量+、の順に、それぞれのボタン操作が一定時間内で押されたとき
        - 30秒巻き戻す
    - 音量-、音量-、音量+、音量+、の順に、それぞれのボタン操作が一定時間内で押されたとき
        - 60秒巻き戻す

また、Automateは無料版の場合、同時実行できるブロック数は30に制限されており、できるだけ少ないブロックで作りたいです
結果として、13ブロックでこの機能を持つプログラムを作ることができました

以下にブロックの詳細とブロックの数を抑えるために工夫した点を書いていきます

1. スタート
    - ここは特に工夫する点はありません
2. 現在のボリュームをbefore_volume変数に入れます
3. 現在の時間(Now)をbefore_date変数に入れます
    - 2と3はまとめたかったのですが、いい方法が思いつきませんでした
4. 音量が変わるまで待機し、変わったらvolume変数に現在のボリュームを入れる
5. もしBluethoothイヤホンで音楽を聴いているとき
    - 次に進む
    - そうでないなら2に戻る
6. counter変数に以下を代入する
    ```js
        counter = (counter = null || counter = 4) ? 
                     ? ++(volume > before_value)
                     : (Now < before_date + 1 ? counter : "") 
                                             ++ (volume > before_volume)
    ```
    わかりやすくjavascriptで書くとこうなります
    ```js
        if (counter === 4 || counter == null) {
            counter = ""
        }
        counter += String(Number(volume > before_value))
    ```
    - 説明すると、前回よりボリュームが大きくなっていれば"1"を、小さくなっていれば"0"をcounterに入れます
    - ブロック数を節約するため、一文で書けるように工夫しています
    - 
7. if文です #counter = 4 && !!matches(counter, "^(1100|1010|0101|0011)$")
    - automateで複雑な処理をさせるとブロック数が多くなりがちなので、正規表現を使い、複雑な処理をさせ、かつブロック数の節約をしています
    - trueなら8へ
    - falseなら2へ
8. 再生中の音楽の現在の位置をcurrent_positionにいれ、音楽の長さをmedia_durationに入れ、音楽のタイトルをmedia_titleに入れる
9. if文です counter != "1100"
    - counterが"1100"な10へ
    - そうでないなら11へ
10. オーディオを以下の位置にシークさせる
    ```js
    max(min(
        current_position + ({
            "1010": 15,
            "0101": -30,
            "0011": -60
        })[counter],
        media_duration
    ),0)
    ```
    - ワンライナーです
    - その後2に戻る
11. 失敗しても5回まではリトライするブロックです
    - 音声合成のプログラムが裏で落ちてることがあるのでその対策です
12. 読み上げの音声合成プログラムを実行できるようにします
13. dateFormat(Now, "HH:mm")をしゃべらせ、Audio fucusをmedia_titleにラジオがヒットしたら0x2、そうでないなら0x3にします
    - ラジオの場合は一時停止してから読み上げ、そうでないなら音楽のボリュームを下げてから読み上げます
    - その後、2に戻ります
2024/5/20主にITとかセキュリティの記事

Next.jsのSSRF脆弱性 CVE-2024-34351(5/18)
https://zenn.dev/akfm/articles/nextjs-ssrf-vulnerability

LINEヤフー問題　韓日間の温度差はどこで生じているのか【寄稿】(5/18)
https://www.chosunonline.com/site/data/html_dir/2024/05/14/2024051480202.html

Google Cloud環境向けのシャドーAPI検出機能が、プレビュー段階へ(5/18)
https://www.infoq.com/jp/news/2024/05/google-apigee-shadow-api/

M5Stack CoreMP135のI2C/SPI内部配線まとめ (上級開発者向け)(5/18)
https://qiita.com/memetan/items/2c1ca1e34b06a2eaaeb8

自治体のシステム統一を　河野デジタル相「まとめて運用した方が効率的」(5/18)
https://www.sankei.com/article/20240518-PXKS74ARWVPS5EBRWRK2WTK4BY/

「Microsoft Edge」で緊急の脆弱性修正、すでに悪用の報告も／v124.0.2478.109への更新を。「Edge 125」のリリースは来週までおあずけか(5/17)
https://nordot.app/1164056293870109082?c=927438800948101120

「能動的サイバー防御」導入へ 政府 有識者会議を近く設置(5/18)
https://www3.nhk.or.jp/news/html/20240518/k10014452861000.html

サイバー防御、4項目議論 自民、通信情報の利用など(5/18)
https://www.nikkei.com/article/DGKKZO80770060X10C24A5EA3000/

サイバー法、早期整備を　高市氏「もう待ったなしだ」(5/18)
https://www.sankei.com/article/20240518-ZVHYZU4WQNN4HHQOGJLQFPM6RY/

AI・Web3.0時代を見据えた暗号資産「ワールドコイン」の将来性は？(5/18)
https://wealthroad.jp/archives/9392

「AWSにおける経済安全保障推進法に関する考慮事項」ホワイトペーパーが発行されました。(5/18)
https://aws.amazon.com/jp/blogs/news/econosecwp/

数百万人が無料で洗濯できるようになるランドリーサービスのセキュリティバグを大学生が発見(5/18)
https://gigazine.net/news/20240518-security-bug-millions-laundry-free/

「スマホがやられた」偽造マイナカードで乗っ取られた東京都議が被害を語る　記者会見で河野太郎氏は(5/18)
https://www.tokyo-np.co.jp/article/327790?rct=national

メールがハッキングされると連鎖して乗っ取り被害に遭いやすい(5/18)
https://news.yahoo.co.jp/articles/4567fae43f8c0a0bb08bb3871a97b4fba6a21e7d

ネットワークパケットの取り方(5/18)
https://blogs.itmedia.co.jp/satou55_makoto/2024/05/post_18.html?ref=rss

OpenAIの「スーパーアライメントチーム」が解散、超人間的なAIの制御を目指す取り組みはどうなる？(5/18)
https://wired.jp/article/openai-superalignment-team-disbanded/

突然のスマホ乗っ取り 200万円以上の買い物も…対策どうすれば(5/18)
https://www3.nhk.or.jp/news/html/20240518/k10014449141000.html

暗号通貨ウォレット アドレスとは何ですか?またその仕組みは何ですか?(5/17)
https://portalcripto.com.br/ja/%E6%9A%97%E5%8F%B7%E9%80%9A%E8%B2%A8%E3%82%A6%E3%82%A9%E3%83%AC%E3%83%83%E3%83%88-%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%E3%80%81%E3%81%BE%E3%81%9F%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B/

全漁連通販サイトで個人情報約2万人分流出か　不正アクセス受け氏名・カード情報など(5/17)
https://news.livedoor.com/article/detail/26427160/

九州の大学、半導体の人材育成に本腰　熊本大は新学部、九州大は育成センター(5/18)
https://news.yahoo.co.jp/articles/0b9423c031d0630a3bb7c98bf8aadcb2e7886fcf?source=rss
vscodeでよく使っている拡張機能

自分がよく使っている拡張機能をまとめてみました

### Auto Rename Tag
片方のタグを修正したら、もう片方も自動で修正してくれます。
便利ですが、たまに変わってほしくない場所が変わってしまうのが使いづらいです

### audio-preview
音声ファイルの情報を見たり、音声を再生できたりします
地味に便利です

### Binary Plist
バイナリのplistファイルをテキスト形式でみることができます

### Bookmarks
プロジェクトの任意の位置にブックマークを貼れます。
たまに巨大プロジェクトで特に有用です。

### Code Runner
ボタンを押すだけでプログラムを実行できるようになります
書き捨てプログラムで特によく使います

### Code Spell Checker
スペルミスを指摘してくれます。
プロジェクト特有の単語などがあると大量の指摘が入るので、それだけ厄介です。

### Color Picker
cssで色をGUIで選択できるようになります

### Comment Anchors
TODOコメントなどをハイライト表示してくれたり、TODOコメントがついている箇所まで飛ぶことができます

### Error Lens
エディタ上でエラーを表示してくれます

### file-size
ファイルサイズを表示します
ごくたまーに使います

### Hex Editor
Microsoft公式のバイナリエディタです
最低限の機能ではありますが使えないことはないです

### indent-rainbow
インデントをカラー表示してくれます

### Live Server
すぐにサーバーを立ち上げられます
便利なのでとてもよく使います

### Material Icon Theme
マイナーなファイルや拡張子にもアイコンが付きます

### Polyglot Notebooks
JavaScriptなどでもJupyter Notebookを使えます
正直あまり使っていないです

### Rainbow CSV
CSVを各列に対してカラー表示できます。

### Regex Previewer
正規表現が特定の文字列とマッチするか確かめられます
あまり使っていません