金曜日, 7月 18, 2025
No menu items!
ホーム ブログ ページ 2553

「春麗&ジュリがカラオケ!『スト6』×ジャンカラコラボ」


🔸 ざっくり内容:

「がんばれジュリちゃん」と題したコラボイベントが、人気ゲーム『ストリートファイター6』(通称: スト6)とカラオケチェーン「ジャンカラ」の間で期間限定で開催されています。このコラボでは、キャラクター春麗やジュリがカラオケを楽しむ姿が描かれた可愛いイラストが特徴です。観虐氏による描き下ろしの新しいアート作品が、ファンの間で話題を呼んでいます。

背景情報

『ストリートファイター』シリーズは、格闘ゲーム界の巨塔として知られ、多くのキャラクターとその魅力的なストーリーを持っています。春麗やジュリは、その中でも特に人気のあるキャラクターです。カラオケイベントを通じて、ゲームと実際のエンターテイメントが融合し、ファンに新たな楽しみを提供しています。

重要な視点

  1. キャラクターの魅力: 春麗やジュリの楽しい一面が強調され、ファンに親しみを感じさせます。
  2. クリエイターの寄与: 観虐氏の独自のアートスタイルが、コラボをさらに魅力的にしています。
  3. イベントの参加機会: 限定的な期間での開催が、ファンの参加意欲をかき立てています。

カラオケという楽しい空間を舞台にした、この魅力的なコラボを楽しむチャンスをお見逃しなく!

🧠 編集部の見解:
この記事を読んで、カラオケを楽しむ春麗やジュリの姿が想像しているだけでワクワクします!ストリートファイターのキャラクターたちがカジュアルなシチュエーションで楽しんでいるのは、ファンにとっても新鮮ですよね。

「がんばれジュリちゃん」の描き下ろしイラストがあるってことは、アーティストの個性が光る瞬間でもあります。観虐氏のスタイルが加わることで、さらに魅力的になるのは間違いなし。キャラクターたちが普段とは違う一面を見せることで、ファンの心の距離もぐっと近くなる感じがします。

このコラボは、ストリートファイターという伝統的なゲームの世界に、カラオケという要素を持ち込むことで、より多くの人に楽しんでもらう狙いがあるのでしょう。最近では、作品の枠を超えたコラボが多くなっていますが、こういったユーモラスで親しみやすい企画はとても良い試みだと思います。

社会的な影響として、こうしたコラボレーションはシーズンごとのイベントとして定番化していますし、ファンの交流の場ともなります。カラオケだけでなく、ストリートファイターの世界観を生かした様々なイベントが増えることで、ゲーム文化がさらに広がることが期待されます。

豆知識として、カラオケの起源は日本で、1970年代に開発されたそうです。もともとはライブで歌った曲を録音した音源を流して、自分がそのアーティストになりきるというスタイルだったんですね。そう考えると、春麗たちがカラオケで楽しむ姿も、「なりきり」の一環とも言えるかもしれません。

今回のコラボ、ぜひ参加してみたいですね!

  • 「スト6」と「ジャンカラ」の期間限定コラボで、春麗やジュリが可愛いイラストで登場!


【注目アイテム】

カラオケを楽しむ春麗やジュリたちをAmazonで探す

『スト6』をAmazonで探す

ジャンカラをAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 5

「『エルデンリング』毒沼が話題?!意外な魅力が!」

📌 ニュース:
『エルデンリング ナイトレイン』が好評です。特に、ゲーム中盤で登場する「腐れ森」が注目されています。

プレイヤーはリムベルドで生き残るため、夜の王に挑みます。このゲームは新鮮な体験を提供し、地形が変化する要素(地変)があるのも特徴です。

「腐れ森」は特に人気で、一定の攻略条件を満たすことで「腐れ森の加護」を得られ、スリップダメージを無効化します。また、強敵が密集しているため、効率的に経験値を稼げる狩場としても注目されています。

毒沼は存在せず、代わりにユーザーはこの新しい挑戦を楽しんでいるようです。今後のアップデートで夜の王の強化版が配信予定で、さらなる攻略が求められます。

  • 『エルデンリング ナイトレイン』のポイントをまとめました!✨

    1. 腐れ森の人気🌲
      「腐れ森」は中盤で訪れる地変で、予想以上の好評を得ています。プレイヤーは特定のアイテムを取得することで、朱い腐敗からのダメージを無効化できるため、攻略がしやすいと感じているようです。

    2. 新鮮なリプレイ体験🔄
      リムベルドのマップが毎回変化するので、プレイヤーは新しい冒険を楽しむことができます。特に腐れ森では、ボスが密集しており、連戦が可能なため、高い報酬を得やすくなっています。

    3. 毒沼の不在🚫
      『エルデンリング ナイトレイン』では、過去作でおなじみの「毒沼」が登場しないことが話題になっています。新しい地形やギミックが楽しめる一方で、コミュニティでは意外にも「腐れ森」が歓迎されている様子です。

    ぜひ、ゲームを楽しんでくださいね!🎮


※以下、出典元
▶ 元記事を読む

Views: 0

ゲーミングヘッドセット「G PRO X」が20%OFF!迫力の音響体験を!

📌 ニュース:
迫力の立体音響が楽しめる
ゲーミングヘッドセット「ロジクール G PRO X」が
Amazonで20%オフで販売中です。

好みで選べる2種類のイヤーパッドを採用しており、
長時間使用しても快適に楽しめます。

「PRO X」ヘッドセットとステッカーのセットも入手可能。
この機会に、迫力の音質をお試しください!

  • この記事のポイント 🎧💻

    1. 迫力の立体音響 🌟
      ロジクール「G PRO X」は、ゲームの臨場感を引き立てる立体音響が楽しめます。これにより、プレイ中の没入感が一段とアップします。

    2. 快適な着け心地 🛌
      イヤーパッドは2種類から選べるため、長時間使用しても快適です。自分の好みに合わせて選んで、快適なゲーム体験を実現しましょう。

    3. お得なセール中! 🤑
      現在、Amazonで「G PRO X」とステッカーのセットが20%オフで販売中です。お得なこの機会をお見逃しなく!

※以下、出典元
▶ 元記事を読む

Views: 0

Meta、1.4兆円で「Scale AI」に大型投資へ!


🔸 ざっくり内容:
MetaがAI企業「Scale AI」に対して約1兆4400億円(100億ドル)の投資を行う方向で検討中です。この投資は、Metaが外部AI企業に行う投資としては歴史的な規模となる見込みです。MetaのCEOマーク・ザッカーバーグは、2025年にAIに最大で650億ドルを投入する計画を表明しており、この投資はその一部を構成しています。

Scale AIは2016年に設立され、主に機械学習モデルに必要なデータラベリングサービスを提供しています。顧客にはMicrosoftやOpenAIが名を連ねており、2024年の資金調達では140億ドルを調達しています。2024年の売上高は約1260億円とされており、2025年には2900億円に達することが期待されています。

現在、MetaとScale AIは共同で軍事向けの大規模言語モデル「Defense Llama」を開発しており、このプロジェクトの進展も投資の背景にあると考えられます。なお、MetaとScale AIは、現時点で協議に関する詳細なコメントを発表していません。

🧠 編集部の見解:
この記事に関して、MetaのScale AIへの巨額投資が示唆するのは、「AI戦争」の激化です。筆者として感じるのは、これが単なるビジネスの枠を超えた競争になる可能性があることです。

### 感想
Metaがこれほどの金額を投じる背景には、AIの可能性への期待が見え隠れしています。彼らが「AIは最優先事項」と位置づけているのは、その重要性を理解しているからでしょう。しかし、単なる投資だけではなく、AI技術を通じた社会への影響力も大きくなります。例えば、AIによるデータ解析や自動化は産業構造を変えつつあり、職業の新しい形も生まれるかもしれません。

### 関連事例
Scale AIのようにデータラベリングを専門に行う企業は、AIモデルのトレーニングにおいて極めて重要な役割を果たしています。AmazonやGoogleなどがこの分野に多くのリソースを投入していることからも、その重要性が伺えます。特に、Scale AIの過去の顧客にはMicrosoftやOpenAIも名を連ねており、その信頼性は折り紙付きです。

### 社会的影響
一方で、AI技術の発展には懸念も付きまとうことを忘れてはいけません。例えば、プライバシー問題や職業の自動化による失業リスクは、社会全体に影響を及ぼし得る重要課題です。これからの技術開発においては、社会的責任を果たすことが不可欠です。

### 豆知識
実は、AIは私たちの生活のあらゆる場面に浸透しており、すでに日常生活に欠かせない存在になっています。音声アシスタントやレコメンデーションシステム、さらには自動運転技術にも利用されています。今後もますます普及が進み、私たちの生活がどのように変わるか楽しみな反面、注意深く見守る必要があると思います。

そんなわけで、MetaとScale AIの動きは、今後のAIの進化に与える影響を考える上で、とても興味深いニュースになりますね。

  • キーワード: 投資

    要約: MetaがAI企業Scale AIに約1兆4400億円(100億ドル)の投資を検討中で、これは同社の外部AI企業への最大規模の投資となる見込みです。MetaはAIを優先事項としており、会話中の投資は以前の内部開発とオープンな戦略に対する大きな一歩です。Scale AIはデータラベリングサービスを提供し、既にMetaと協力して特定のプロジェクトに取り組んでいます。


Scale AI をAmazonで探す

AI技術 をAmazonで探す

大規模言語モデル をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0

バージョン1.6.2バグ修正(6月5日)



親愛なる目標、
プレイ中に問題が発生した場合は、次の方法を使用してお問い合わせください。

PC:ゲーム内のESCメニューを開き→フィードバックとカスタマーサポート→バグレポートを選択して、問題を送信します。

モバイル:右上隅のメニューボタンをタップ→サイドバーのヘッドフォンアイコンをタップ→カスタマーサポートを選択→バグレポートを選択してフィードバックを送信します。

オフラインの場合は、公式のメールで問題を報告することもできます。 https://[email protected]。あなたのメッセージを受け取ったらすぐに調査します。

Oce Humanバージョン1.6.2の公式リリース以来、私たちはコミュニティのフィードバックを収集し、あなたの懸念に積極的に対処してきました。 実装した最新の修正は次のとおりです。

1。最近の遅延と損傷の損失の問題について:

未登録のダメージや高い遅延など、サーバーの過負荷の問題について心からお詫び申し上げます。これらの問題は、あまりにも多くのプレーヤーと特定の武器効果が1つの領域に集中している場合に発生することがよくあります。

関連するモジュールを最適化してサーバーのひずみを削減するために一生懸命取り組んでいます。エンドレスドリームの夢のゾーンなど、これらの問題に起因するモードでは、プレーヤーの努力をよりよく反映し、AFK農業を阻止し、過度の混雑を妨げるように報酬分布を調整することができます。これらの最適化は、6月末までに完了する予定です。

2.一部のサーバー上の地域の領土ターミナルの位置に影響を与える問題を修正しました。

3.シナリオは、プレーヤーがマニブスを倒すことを要求するシナリオチャレンジタスクで問題を修正しました。忍び寄ることは完了できませんでした。

4.シナリオチャレンジタスクの説明を変更しました。「ミニインクエンスによって生成された模倣物」から「ドリームゾーンで5つのナイトメアテレビを倒す」に変更しました。

5.シナリオチャレンジタスクの説明を変更しました。「永遠の夢想家を排除し、難易度に関する固定サイロチャレンジを完了する」から「永遠の夢想家を排除し、悪夢の難易度に関する固定サイロチャレンジを完了する」に変更しました。

6.ドリームゾーンにダミーを構築する能力を削除しました。

7.更新後に一部のプレイヤーがNOVA逸脱機能を確認できなかった問題を修正しました。

8.悪夢の難易度に関する断片的なサイロの稲妻の損傷に影響を与える問題を修正しました。

9.カスタムサーバーの文字削除を防ぐ問題を修正しました。

10.ダンジョン関連のパラメーター設定がカスタムサーバーに適用されなかった問題を修正しました。

11.異常な脚モデルの外観を引き起こす量子エコー底の問題を修正しました。

12.特定のアイテムがキャンプのマーチャントショップに登場できなかった問題を修正しました。

13.一部のサーバーを永続的なサーバーにマージできず、代わりに直接決済に送られた問題を修正しました。

14.タブレットのグラフィックパフォーマンスを最適化しました。最大グラフィックの品質とフレームレートの設定が上昇しました。

15.短剣の下降攻撃の位置に影響を与える問題を修正しました。

16.建設中にいくつかの天井構造が予期せず崩壊する問題を修正しました。

17.状況によって弾丸が建物を通過できる問題を修正しました。

18.クローンが敗北した後に貪欲なハンターの本体が現れなかったという、無限の夢の問題を修正しました。

19.雄牛の目の脆弱性効果を積み重ねることができる問題を修正しました。

かつて人間開発チーム



続きを見る


🧠 編集部の感想:
このバージョン1.6.2の修正は、プレイヤーのフィードバックに迅速に対応している点が素晴らしいです。特にサーバーの過負荷問題が解消され、プレイの快適さが向上することを期待します。ゲーム体験がよりスムーズになることで、コミュニティがさらに盛り上がることを願っています。

Views: 0

SPEC、新世代「RSP-55」登場!リアルサウンド革命!

📌 ニュース:
SPECから、
“リアルサウンドプロセッサー”
第5世代モデル「RSP-55」が
6月6日(月)に発売されます。

価格は49,500円(税込、ペア)。
新モデルでは音質の向上と
ユーザビリティの改善が図られ、
よりリアルな音響体験を提供します。

オーディオ愛好者にとって、
魅力的なアイテムとなることでしょう。
ぜひチェックしてみてください。

  • この記事のポイントを以下にまとめました!🎉

    1. 新モデル登場!
      6月6日(月)に、オーディオアクセサリー「リアルサウンドプロセッサー」の第5世代モデル「RSP-55」が発売されます。✨

    2. お手頃価格
      価格は49,500円(税込)で、ペアでの販売となっています。💡

    3. オーディオ性能向上
      新モデルは、音質や機能が向上しており、よりリアルな音の体験を提供しています。🎶

    ぜひお楽しみに!


※以下、出典元
▶ 元記事を読む

Views: 0

AtCoder ABC409 振り返り(緑コーダーがPythonでABCD問題) #競技プログラミング – Qiita



AtCoder ABC409 振り返り(緑コーダーがPythonでABCD問題) #競技プログラミング - Qiita

ABC409を振り返ります

今回はABCDまで4問解答、(2回誤答)でした。

問題文の意味を把握するのが不十分で、2回誤答を提出してしまいました。日中から、どうも文章を読んでいても頭に入らなくて嫌な予感があったのですけども、それが結果に出てしまいました。

レーティングは微増でした。2ペナがなければもう少し増えたのでしょうけども、減らなかっただけで良かったのかもしれません。

T、Aを全探索しまして、両方とも “o” かどうかをチェックします。

N = int(input())
T = list(input())
A = list(input())

for i in range(N):
    if T[i] == "o" and A[i] == "o":
        print("Yes")
        exit() 
print("No")

解法は、0…100の中で、条件を満たすものを全探索しました。 Aをソートしておき、i がAの中でどこに位置するか…を求めれば、Aの中でi以上の要素数を求めることができます。

N = int(input())
A = list(map(int, input().split()))

# Aをソートしておく
A.sort()

# 要素数は最大100なので、とりあえず最大までループ
answer = 0
for i in range(101):
    # Aの中で i の入る位置を求める
    index = bisect.bisect_left(A, i)

    # 残り枚数が i 以上であれば、条件を満たす
    remaining = N - index
    if remaining >= i:
        answer = i
print(answer)

ここで1ペナしてしまいました。見落としていたのは、例えば入力列が A=[7, 7, 7] のときに答えが 3 になるパターンです。てっきり答えは Aiの中のどれか…だと思い込んでしまったためでした。

この問題も、問題の意味を理解するのに時間がかかりました…。

円周が L で与えられているので、点1 を含む頂点で正三角形ができるのは、以下の3点が選ばれたときです。

  • 点 1
  • 点 1 + L // 3
  • 点 1 + 2 * (L // 3)

ということで、円周上の各点の位置の数を求め、上記の条件を満たす組み合わせの数を数えればokです。

N, L = map(int, input().split())
D = list(map(int, input().split()))

# 円周が3の倍数でない場合は、正三角形は存在しない
if L % 3 != 0:
    print(0)
    exit()

# 各ポイントに何個の点があるかを記録する配列
points = [0] * (L + 1)
points[0] = 1
current = 0

# 時計回りに d 進めて、そこの点を数をカウントする
for d in D:
    current = (current + d) % L
    points[current] += 1

# 正三角形の数をカウント
count = 0
for i in range(L // 3 + 1):
    point1 = points[i]
    point2 = points[i + L // 3]
    point3 = points[i + 2 * (L // 3)]
    count += point1 * point2 * point3

print(count)

テストケースを観察すると、以下のことがわかります。

ATCODER → ACODERT
* A  C ... なので、Tを交換して後ろに持っていく
* T 以降に Tより大きい文字が無いので、Tは一番うしろにつける

SNUKE → NSUKE 
* S > N なので、Sを交換して後ろに持っていく
* S 以降で Sより大きい文字はUなので、SはUの前につける

ABCDEF → ABCDEF
* A 
  • 文字が昇順に並んでいるときは交換する必要がない。降順の所があれば、文字を交換する
  • 交換する文字は、交換文字よりも大きい文字の手前にシフトする

という操作をすれば、辞書順で最小になります。

T = int(input())

# 最小の文字列を求める
def calc_small_string(s):
    n = len(s)

    # 交換候補を求める
    swap_candidate = ""
    for i in range(n-1):
        if swap_candidate == "" and s[i] > s[i + 1]:
            swap_candidate = s[i]
            break

    # 交換候補があれば、交換
    if swap_candidate != "":
        done = False
        swap = ""
        queue = deque()
        for i in range(n):
            # 交換候補はキューに入れずに保持する
            if not done and swap == "" and s[i] == swap_candidate:
                swap = s[i]
                continue

            # 交換候補を入れる場所があれば、そこにいれる
            if not done and swap != "" and s[i] > swap:
                queue.append(swap)
                queue.append(s[i])
                done = True
                continue
            
            queue.append(s[i])

        # 交換候補をいれる場所がなければ、文字列の最後につける
        if not done:
            queue.append(swap_candidate)

        return "".join(queue)

    # 交換候補がなければ、文字列はそのまま
    return "".join(s)

# 各候補に対する処理を行う
for i in range(T):
    N = int(input())
    S = list(input())
    small_s = calc_small_string(S)
    print(small_s)





Source link

Views: 0

Vibe CodingでTLS 1.3を実装してみたら、思ったより人間が必要だった話



人間はコードを書かずに自然言語でLLMアプリに指示を与えることでソフトウェアを開発する、いわゆる「Vibe Coding」が普通になりました。プログラミング言語よりも自然言語のほうが得意っていう自分みたいな人間にとっては、いろいろ夢が広がります。

そんな夢の1つとして「プロトコルの実装」がありました。ネットワークの解説書を作る仕事をしているので、さまざまなプロトコルでやり取りされるメッセージの仕様に触れる機会はわりとあるほうです。それなのにプロトコルを実装したことがないのは実に残念な話だなと思っていました。

プロトコルの実装に必要なスキルは、プロトコルそのものの理解よりも、コンピューターの低レイヤの仕組みであるような気がします。仕組みを何となく知っていたとしても、そのためのコードを書くとなるとまたさらに別の話です。そういうわけで、プロトコルについては、「まったくの無知ではないけれど実装したことはない」という頭でっかちな状態に甘んじてきました。

そこでVibe Codingです。「自分でコードを書かないなら実装したとは言えないから、やはり頭でっかちなのでは?」と自問自答しつつも、「まあでも試しにやってみよう」ということで、やってみることにしました。題材はTLSプロトコルです。なぜなら、HTTPより実装したことがある人は少なそうだし、そこそこ知っているから。

方針

クライアントよりもサーバのほうが実装しやすそうなので(単なるイメージ)、「TLS 1.3サーバでクライアントからのハンドシェイクを完遂する」を目指すことにしました。利用するLLMアプリは、本格的にやるならDevinとかClineとかClaude Codeとかなんでしょうが、慣れているのでCursorのAgent Modeです。

Cursorに対する最初の指示もLLMアプリで書きます。これにはChatGPT 4oを使いました。理由はやはり「慣れているから」です。o3でもよかったんですが、「RFC 8446に基づいてTLS 1.3サーバの要件を絞り、実装のためにCursorに与える指示を生成する」みたいなタスクなら4oでいい気がします。

そのときのプロンプトはこれ(それぞれの後に4oの応答が挟まる)。

TLS1.3を試しに実装してみたいと考えています。言語はRustかHaskellで。

プロトコルの実装を試してみたい、というのが主な動機です。おそらくはサーバーを作るほうが手間がかからない気がしています。最低限のハンドシェイクと終了処理ができるようにしたいです。できるだけライブラリは使わずに実装することを考えています。

実装はCursorで行います。Cursorのエージェントに対する指示をTODOリストとし、それを読ませることで実装を進めていきます。実装とテスト(OpenSSLのクライアントから接続を試してみるので十分)をしながら目標を達成するというプロンプトを書いてください

生成されたCursorへの指示はこれでした。

生成されたCursorへの指示内容

Implement a minimal TLS 1.3 server that completes the full handshake and shutdown process, without delivering application data.
The server will be tested using openssl s_client with TLS 1.3.
External dependencies must be minimized—cryptographic primitives (e.g., HKDF, AES-GCM, X25519) can be borrowed from existing crates if necessary, but protocol logic must be implemented manually.


1. TCP Server

2. TLS Record Layer

3. ClientHello Parsing

4. Key Exchange & Key Schedule

5. ServerHello Construction

6. EncryptedExtensions

7. Finished Messages

8. Shutdown

9. Testing

  • Do not use full TLS libraries (e.g., rustls).
  • Use only low-level cryptographic crates (e.g., ring) where necessary.
  • Prefer manual parsing and message construction.

最初の実装

CursorのAgent Modeは、「ClientHelloを解析してServerHelloを返す」ところまではすんなり実装してくれました。

TLS 1.3では、ハンドシェイクの段階でも、ServerHello以降に送信するメッセージはすべて暗号化が必要です。この暗号化では、ClientHelloとServerHelloに基づいてサーバとクライアントがそれぞれ共有鍵を生成し、それを使います。この共有鍵を導出する処理は「鍵スケジュール」と呼ばれます。

CursorのAgent Modeは、この鍵スケジュールの処理を最後まで自力では書けませんでした。そもそもRustのringクレート(BoringSSLのコードに基づくRustの暗号ライブラリ)を正しく使えるようになるまでに、けっこう試行錯誤してました。それでもまあ、サーバからハンドシェイクで送る最後のメッセージのFinishedを送り付けるところまでは、なんとかCursorのAgent Modeだけでたどり着きました。

もちろん鍵スケジュールが正しく実装されていないので、ServerHelloよりも後に送ったメッセージはすべてクライアントに受け付けてもらえません(クライアントはAlertというメッセージを返して終了する)。

https://x.com/golden_lucky/status/1927345378891854107?conversation=none

LLMアプリをClaudeCodeに移行して再挑戦

これ以上はCursor一本ではつらそうだったので、ここでClaudeCodeを試してみることにしました。年契約しているCursorと違い、ClaudeCodeを使うには課金が必要です。ひとまずUSD 5だけお小遣いを投入して作業を始めてもらいました。

プロンプトはこれ。

This is an implementation of TLS 1.3 server. It only do handshake without
any app data with openssl s_client. Server certificate is in the top
directory. tls13_server_todo.md is the TODO list. Now I keep getting an
error on saying “Failed to initialize key schedule: Failed to fill client
handshake key: ring::error::Unspecified”. Try fixing it and complete the
implementation.

はじめてClaudeCodeを使ったので、おっかなびっくりCLIモードでプロンプトを投入したのですが、かなりよい体験でした。どのモデルが使われたのかすら関知しないまま、こちらは特に何もしなくてもring関連のエラーがすべて潰されて、OpenSSLのクライアントアプリからエラーが返ることはないという状態になりました。

https://x.com/golden_lucky/status/1928439860072730941?conversation=none

まやかしだった

一見するとOpenSSLのクライアントアプリとの接続に成功したかに見えたClaudeCodeによる実装ですが、このときClaudeCodeが自分で検証に使っていたのはOpenSSL 1.1.1wでした(マシンのDebianがbullseyeなので)。OpenSSLの最新バージョンは3.5ですが、このバージョンのクライアントアプリからも接続を試してみると、この時点での実装にはまだバグがあることがわかりました。

具体的には、ServerHelloの直後に暗号化して送信すべきEncryptedExtensionsというメッセージを送らず、その時点でTCPを切断しているという状態でした。OpenSSL 1系では、このようなサーバーの挙動も許容される(SSL_OP_IGNORE_UNEXPECTED_EOF)のですが、OpenSSL 3系ではこれを明確に禁止するようになっていて、クライアントではAlertメッセージを返します。つまりTLSのハンドシェイクが完遂しません。

ChatGPT o3+Cursorで再挑戦

この時点で選択肢はいくつかありました。

  • さらにClaudeCodeに課金してVibe Codingを続ける
  • 自分でコードを調べて修正する
  • コードをLLMに調べさせて、Cursorに修正指示を出す

1は予算の関係でパス。2は、ClaudeCodeが生成したコードを自分で見始める気力はなかったので、やはりパス。残る選択肢は3です。いわば「半Vibe Coding」ですね。

既存のコードベースについて相談するならChatGPT o3だろうということで、ソース全体と実行時に出力していたデバッグ情報などを与えて、下記のように指示しました。

下記に、サーバのデバッグ出力、keylog.txt、クライアントのログを提示します。これらを見て問題を特定し、添付したソースの間違いを見つけなさい。ログでエラーになっている箇所や理由をいちいち説明する必要はありません。修正にあたっては下記を絶対に守ること。

  • ぜったい添付のソースのみを参照すること
  • 典型的な間違いによる憶測をしないこと
  • どこか一か所を直せば解消するという予断を持たずに、徹底的にログに現れている問題を引き起こしているソースの誤りを探すこと。pinpointの修正では解消しませんし、それを目指してはいけません
  • 修正箇所の指摘にはソース自体を使い、疑似コードは使わないこと。具体的な修正方法も提示すること。

(以下にサーバーとクライアントのデバッグ情報などが続く)

これに対するo3の応答から判明したのは、鍵スケジュールの実装に引き続きバグがあるという事実でした。それ自体は最初の実装の時点で判明していたことなので意外ではないのですが、先ほどのClaudeCodeでは問題が何も解決していなかったということなので、ちょっと拍子抜けです。

o3はわからずやだし、Cursorはあわてんぼう

o3が鍵スケジュールの実装について指摘してきたバグも、その指摘をCursorに伝えて直させるだけでは解決しませんでした。

o3は、最初のうちはわりと素直に「ああ、確かにおかしいね」というバグを指摘してくれるのですが、鍵スケジュールのような複雑な処理では、「何か1つを解決すれば万事OK」とはなりにくいものです。そのため「修正後に改めて実行結果を見せる」を何回か繰り返すわけですが、だんだん「もともと何をしていたのか」を忘れてきます(o3が)。そのうち「その指摘は、すでに無意味だと判明している修正と本質的に同じでしょ」みたいなやり取りが増えていき、何も解決しない。

またo3はすぐにコードの現物を無視しようとします。修正後のコードを見せているのに過去に提供したコードだけを見て回答したり、場合よっては「よくある実装ミス」みたいな回答をでっちあげてきます。

これらを防止すべく、プロンプトにも先のような注意書きを含めるようにしているのですが、やり取りが長くなるとこれも忘れられがちです。

CursorもCursorで、o3が指摘したバグを認識しつつも、まったく関係ない箇所まで同時に直して別のバグを混入させたり、自分がコード中に書いたコメントに惑わされて以前の修正を勝手にリバートしようとしたり、わりとよく手が付けられなくなります。指示の際に「まず落ち着いて過去の修正を振り返ってから作業をしてください」などと言っておかないと暴走しがち。

以下、この方法によるデバッグで苦労したところ。

Server Handshake Traffic Secretが一致しない

TLS 1.3の処理でもっとも基本になるのは、暗号に使う共通の鍵をサーバーとクライアントが独立に生成することです。サーバ側から送信するメッセージの暗号に使う鍵は、Server Handshake Traffic Secretという値から計算します。このServer Handshake Traffic Secretなどを求める一連の処理が鍵スケジュールで、これをCursorでもClaudeCodeでもバグなしに実装できませんでした。

この鍵スケジュールのデバッグでは、o3に相談しつつ、『プロフェッショナルTLS&PKI』の2.5.2項を何度も読み返すことになりました。最終的に、ここまでの実装の何がバグっていたかというと、以下の2点です。

  • クライアントから提示されてサーバーで選択したハッシュ関数を使わず、最初にCursorが実装でハードコードしたSHA-256が固定的に使われていた
  • ring::hkdfに渡すトランスクリプトハッシュの計算が雑だった

1つめの問題は、クライアントとのやり取りで使われた実際の値を使って鍵スケジュールの計算ステップを1つずつo3に辿らせているときに判明しました。気づいたのはもちろん人間のほうです。o3は、クライアントのログを与えているにもかかわらず、「計算ステップは合っている」という事実に縛られてまったく関係ない主張(後述するトランスクリプトハッシュが違うという可能性)を繰り返すだけでした。

2つめは、鍵スケジュールの材料として使う「トランスクリプトハッシュ」と呼ばれる値の導出方法です。ClientHelloとServerHelloを連接したものにハッシュ関数を施して求めるのですが、最初の実装でハッシュ関数が二重に施される状態になっていることにLLMアプリが誰も気づいてくれませんでした(仕様でHKDF-Expand-LabelおよびDerive-Secretと呼ばれている関数の実装が単純でないからだと思う)。

トランスクリプトハッシュは、ハンドシェイク中にどんどん変化していって、適切なタイミングで適切なデータを使う必要があります。o3は、鍵スケジュールの導出過程にあからさまなバグがなくなった後はこの点に異常に執着し、いつまでも「トランスクリプトハッシュが正しい値から計算されていることを確認せよ」と繰り返すだけでとてもつらかったです。計算に使っている値は正しいけど、あなたたちの実装でクライアントと合意したハッシュ関数を使ってなかったのが問題だったんだよ!

EncryptedExtensionsには何も入れてはいけない

鍵スケジュールに成功したら、その鍵を使ってサーバーが最初に送るのはEncryptedExtensionsというメッセージです。このメッセージには、クライアントから要求されたTLS拡張のうち、サーバが対応しているものを入れます。拡張がなければ、EncryptedExtensionsを表すサブタイプを指定した空のレコードを返します。今回の実装では拡張には一切対応しないので、この場合に該当します。

しかし、どこかの時点でChatGPTかCursorのチャットで「OpenSSLのクライアントでは、TLS 1.3に対応していることを表す拡張を要求するんです!」という嘘情報があり、それでsupported_versionsという種類の拡張をずっと指定していました。「これ、もしかして不要なのでは?」という仮定に基づいた試行も、人間が指示しないといつまでも気づかなかったままだったような気がします。

あと、拡張を何もしていないときでもEncryptedExtensions自体のメッセージ長は「2」になるという事実も、人間に言われて調べさせられるまでLLMアプリたちは気づかなかったっぽい。

CertificateVerifyがクライアントで受け付けてもらえない

Server Handshake Traffic Secretが正しく導出できて、その鍵で暗号化したEncryptedExtensionsをクライアントで受け取ってもらえるようになったら、次は証明書のやり取りによる認証のフェーズになります。ここでも重要になるのはトランスクリプトハッシュなんですが、CursorとClaudeCodeによる実装はそのためにトランスクリプトハッシュを正しく更新していないという雑なものでした。

これはすぐに人間が気づいて修正させたのですが、その修正がまた雑で、これで少しハマりました(こっちも「修正させた」気になっていてうかつだった)。具体的に言うと、トランスクリプトハッシュの計算対象は暗号化する前の平文のメッセージなんですが、やつらが修正したやり方は暗号化された値を連接してハッシュにかけるという杜撰なものでした。

あと、ここでも最初の実装でハードコードされていたハッシュ関数の問題にハマりました。

クライアントからのFinishedを復号できない

CertificateVerifyの後は、サーバーとクライアントによるFinishedのやり取りです。ここまでにだいぶ人間がコードに馴染んだこともあり、サーバーからのFinishedについては簡単な修正指示で一発で通りました。

問題はクライアントからのFinishedの処理です。サーバーではここではじめて復号処理が必要になります。そのための鍵はServer Handshake Traffic Secretとは別のClient Handshake Traffic Secretから生成し、さらに復号処理そのもの正しく実装しなければなりません。

ここでハマったのは、シーケンス番号の扱いでした。TLS 1.3による暗号化と復号では認証付き暗号(AEAD)を使うわけですが、その処理にはnonceが必要です。このnonceの使いまわしを避けるため、TLS 1.3ではシーケンス番号を生成に利用することになっているのですが、これは送受信のメッセージで別々に管理することになっています。Cursorはこれを知らなかったので、シーケンス番号を送受信両方のメッセージでカウントするという実装になっており、ちょっとハマりました。

シーケンス番号については、レコードプロトコルのメッセージではないChangeCipherSpecで加算すべきかもよくわからず、ChatGPTに聞いたら「加算するよ」というのでそう実装させたのですが、これもまた嘘でした。ChangeCipherSpecはトランスクリプトハッシュで考慮しないというのは知っていたので、これは怪しいと思い、事なきを得ました。

おわりに

最終的な実装はこちら。OpenSSL 3.5のクライアントからTLS 1.3で接続してハンドシェイクを完遂できるようになっています。

https://github.com/k16shikano/my-tls-server

こうしてふりかえってみると、けっこういろいろな箇所でハマってますが、出来上がった実装を眺めると何もかもが自明に見えるので不思議です。プロトコルの実装、おもしろい。とくに暗号プロトコルは「クライアントにおける挙動と合わせる」ために鍵の共有という処理が必要なので、そのデバッグがけっこう面白かったです。

一方、Vibe Codingの体験談としては、けっこうモヤモヤするところもあります。コードを手で書いた箇所は、実際のところほとんどないんですが、RustのringクレートをCursorが最後まで使いこなせず、特にfillの処理でエラーを引き起こすたびに無駄なあがきを始めるので困りました。そのたびに、「それは用意しているバッファの長さが間違ってるから実行時にエラーが起きてるんだよ」と教える必要がありました。型エラーを直すのはわりと得意に見えるんですが、こういう実行エラーの原因を推察して直すのは得意ではないようです。

もっと課金して高いモデルを使い、全部をClaude Codeでやれば、また違った体験になるのかもしれません。上述したような今回のハマりポイントは、高いモデルだと回避できるものなのだろうか。

とはいえ、趣味だとこれくらいがちょうどいいという見方もありそうです。特に自分は、こうして生成AIにコードを書かせたことで、TLS 1.3やOpenSSLの動作に対する理解がだいぶ深まりました。

それにしても『プロフェッショナルTLS&PKI』はよくできた本でした(宣伝)。第2章「TLS 1.3」は本当に焦点がうまく絞られていて、いまのIT技術書に求められるであろう「生成AIに指示するのに必要な知見が得られる」に適った内容であることを再確認できました。TLS 1.3の実装をしてみたいという夢がある人はぜひ読んでみてください!

https://www.lambdanote.com/products/tls-pki-2



Source link

Views: 0

54年ぶり!地獄の門が閉鎖開始!

📌 ニュース:
トルクメニスタンの「地獄の門」は、直径約70メートル、深さ30メートルのクレーターで、1971年に掘削中の事故で誕生しました。天然ガスが漏れ出し、調査隊はその点火を決定、以来54年間燃え続けています。この状態は温室効果ガスの漏出や安全面での問題を引き起こしており、国際的な批判を受けています。大統領は地獄の門を封鎖する方針を示しており、2025年6月には閉じ始めたとのニュースが伝えられました。実現性が懸念される中、今後の動向が注目されています。

  • 以下が「地獄の門が54年ぶりに閉まり始める」記事のポイントです!

    1. 🔥 地獄の門とは?
      トルクメニスタンにある直径約70メートル・深さ30メートルの巨大な火口で、1971年の事故で誕生しました。炎が燃え続ける姿から「地獄の門」と名付けられました。

    2. 🌎 環境への影響
      この炎は50年以上燃え続け、国際社会からは燃料資源の無駄遣いや温室効果ガスの排出が問題視されています。

    3. 🔒 閉鎖の動き
      ベルディムハメドフ大統領が地獄の門を閉鎖する方針を示し、2025年6月には閉まる動きが始まったとのニュースが届きました。過去の試みは多くが失敗していたため、実現が期待されています。

※以下、出典元
▶ 元記事を読む

Views: 0

ハピネット、アニメ『追放白魔導師』ミニアニメ制作決定!


🔸 ざっくり内容:

ハピネットは、2025年7月10日から放送予定のTVアニメ『勇者パーティーを追放された白魔導師、Sランク冒険者に拾われる ~この白魔導師が規格外すぎる~』(通称:追放白魔導師)について、ミニアニメの制作を発表しました。このミニアニメでは、愛らしいデフォルメキャラクターたちが織りなす短いストーリーが展開され、本編とは異なる楽しみ方が提供されます。初公開のPVはハピネットの公式YouTubeチャンネルで視聴可能です。

さらに、ユイ役の日高里菜さんとシリカ役の白石晴香さんがパーソナリティを務めるラジオ番組も配信予定で、プラットフォームはインターネットラジオステーション「音泉」となっています。詳細は音泉の公式サイトやSNSで確認できます。

配信情報

アニメは、7月5日からdアニメストアやABEMAで最速配信され、その後他のプラットフォームでも順次配信されます。以下が主な配信プラットフォームのスケジュールです:

  • 7月5日24:00 – dアニメストア、ABEMA
  • 7月12日24:00以降 – AnimeFesta、DMM TV、Huluなど多数のプラットフォーム

放送情報

  • 放送開始日: 2025年7月10日
  • 放送局: TOKYO MX、サンテレビ、BSフジなど

ハピネットはこのプロジェクトを通じて、視聴者に新たな魅力を提供しようとしています。アニメファンにとって、見逃せない作品となることが期待されます。

🧠 編集部の見解:
この記事では、ハピネットの新作TVアニメ「勇者パーティーを追放された白魔導師、Sランク冒険者に拾われる」が紹介されており、ミニアニメや配信情報が盛りだくさんです。アニメ本編に加え、デフォルメキャラたちが織りなすプチストーリーがとても楽しみです。特に、キャラクターたちが可愛く描かれているのが、視聴者の心を掴みますね!

### 感想
このニュースを見て感じたのは、アニメ業界の展開の早さです。新作アニメはもちろん、派生コンテンツやラジオ番組まで広がることで、ファンとの距離が近くなります。キャラクターへの愛着が深まる仕掛けだと思います。今や、アニメはただ映像を楽しむだけでなく、様々な媒体を通してキャラクターたちと触れ合うことができる時代になっているんですね。

### 関連事例
最近のアニメでは、原作を基盤にしたスピンオフやミニアニメが増えてきています。例えば、「進撃の巨人」や「鬼滅の刃」のような大ヒット作も、関連する短編や特別編を制作することで、ファンの期待に応える姿勢が伺えます。

### 社会的影響
アニメは文化の一部として重要な存在になっており、特にSNSでの拡散力は驚異的です。キャラクターが人気を集めることで、関連商品やイベント、そして観光産業にまで影響を及ぼすことが多くなっています。アニメの新しいコンテンツが多様化することで、ファンのコミュニティも広がり、より多くの人々がアニメに触れるようになっているのかもしれません。

### 豆知識
ちなみに、「追放された白魔導師」というタイトルからも分かるように、近年は「追放」や「スローライフ」といったテーマが流行っています。原作のストーリーが共感を呼ぶ要素を持っているのも人気の秘訣ですね。また、声優さんたちがパーソナリティを務めるラジオ番組というのは、彼らのキャラをさらに深く理解できる貴重な機会です。これからの展開が本当に楽しみです!

  • キーワード: ミニアニメ


勇者パーティーを追放された白魔導師 をAmazonで探す

TVアニメ をAmazonで探す

アニメ放送情報 をAmazonで探す


※以下、出典元
▶ 元記事を読む

Views: 0