2025年6月3日火曜日

3Dプリンターを買った。

 3Dプリンターを買った。

ちょっと前に、塩ビパイプとアクリル丸棒でレーザーポインターをラインレーザーにするアタッチメントを作った。



のだが、これが微妙なズレはできるし時間はかかるのでどうしたものかな?と思っていた。








そうだ、3Dプリンターに挑戦してみよう。こういうものを作るのにこそ最適なのでは?と思ったので、アマゾンのセールを待って入手した。


色々と調べてみて評判の良い Bambu Lab の A1 minだ。


開封から組み立てまでは難なく進んだけど、ちょっとした問題が発生。

本体から直接生えてる電源ケーブル、コンセントに刺すところがアース付の3ピンのものなのだ。

幸い使用中のテーブルタップで3ピンのものに空きがあったからなんとかなったけど、変換アダプタを買ってこよう。

次に、キャリブレーションとテスト印刷。

床に直置きではじめたのだけど、キャリブレーションは下階の住民から怒鳴りこまれないかとビクビクするほど本体が震えるのでビックリした。

そして印刷。キャリブレーション中ほど激しくはないが、案外と床まで振動が伝わってる。

これはちょっとした設置台を作った方がよさそうだ。



2024年12月11日水曜日

aes-ccm を Java で

aesCcmJava.md

先日作った OpenSSL での aes-ccm の暗号化結果が正しいのか?
OpenSSL で復号化して検証してもなんだかなぁ。と思ったので Java で検証してみた。
普通に Java をインストールした状態の jce では aes-ccm はサポートされていない。
そんな時は BouncyCastle だ。

package aesccm; import java.util.HexFormat; import java.crypto.Cipher; import java.crypto.IvParameterSpec; import java.crypto.SecretKeySpec; import org.bouncycastle.jcajce.spec.AEADParameterSpec; class App { private static byte[] keyBytes = {(略)}; private static byte[] ivBytes = {(略)}; private static byte[] plainDataBytes = {(略)}; private static byte[] encryptDataBytes = {(略)}; private static byte[] encryptDataWithTagBytes = {(略)}; public static void main( String[] args) { try { java.security.Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch( Exception e) { e.printStackTrace(); return; } var hex = HexFormat.ofDelimiter( ", ").withPrefix( "0x"); var encryptData = encrypt( plainDataBytes); System.out.println( encryptData); var encryptFreeTagSizeData = encryptFreeTagSize( plainDataBytes); System.out.println( encryptFreeTagSizeData); var decryptData = decrypt( encryptDataBytes); System.out.println( decryptData); var decryptFreeTagSizeData = decryptFreeTagSize( encryptDataWithTagBytes); System.out.println( decryptFreeTagSizeData); } public static byte[] encrypt( byte[] dataBytes) { // rfc 規定の方法で暗号化 Tag は暗号化データと連結される try{ var ciper = Cipher.getInstance( "AES/CCM/NoPadding"); var key = new SecretKeySpec( keyBytes, "AES"); var iv = new IvParameterSpec( ivBytes); cipher.init( Cipher.ENCRYPT_MODE, key, iv); return cipher.doFinal( dataBytes); } catch( Exception e) { e.printStackTrace(); } return new byte[0]; } public static byte[] encryptFreeTagSize( byte[] dataBytes) { // Tag のサイズを指定した暗号化 try{ var ciper = Cipher.getInstance( "AES/CCM/NoPadding"); var key = new SecretKeySpec( keyBytes, "AES"); // Tag のサイズは "bit"数 で指定する。ゼロを指定するとタグは付かない var aeadParameterSpec = new AEADParameterSpec( ivBytes, 32); cipher.init( Cipher.ENCRYPT_MODE, key, aeadParameterSpec); return cipher.doFinal( dataBytes); } catch( Exception e) { e.printStackTrace(); } return new byte[0]; } public static byte[] decrypt( byte[] dataBytes) { // rfc 規定の方法で暗号化 されたデータの復号化 try{ var ciper = Cipher.getInstance( "AES/CCM/NoPadding"); var key = new SecretKeySpec( keyBytes, "AES"); var iv = new IvParameterSpec( ivBytes); cipher.init( Cipher.DECRYPT_MODE, key, iv); return cipher.doFinal( dataBytes); } catch( Exception e) { e.printStackTrace(); } return new byte[0]; } public static byte[] decryptFreeTagSize( byte[] dataBytes) { // Tag のサイズを指定した復号化 try{ var ciper = Cipher.getInstance( "AES/CCM/NoPadding"); var key = new SecretKeySpec( keyBytes, "AES"); // Tag のサイズは "bit"数 で指定する。ゼロを指定するとタグの検証は行われない var aeadParameterSpec = new AEADParameterSpec( ivBytes, 32); cipher.init( Cipher.DECRYPT_MODE, key, aeadParameterSpec); return cipher.doFinal( dataBytes); } catch( Exception e) { e.printStackTrace(); } return new byte[0]; } }

2024年12月3日火曜日

aes-ccm を OpenSSL で

aes-ccm を OpenSSL で

発端

aes-ccm を OpenSSL で処理しようにもコマンドでは対応していない。
OpenSSLのライブラリを使ってプログラムで処理するしかない。

どうすればいい?

OpenSSL WikiのEVP Authenticated Encryption and Decryptionを参考にして検証してみた。(aad は面倒なのでなくした)

int ccm_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext, unsigned char *tag) { EVP_CIPHER_CTX *ctx; int len; int ciphertext_len; /* EVP_CIPHER_CTX の確保 */ if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors(); /* aes-256-ccm 暗号化モードで初期化(復号化の場合はEVP_DecryptInit_ex) */ if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_ccm(), NULL, NULL, NULL)) handleErrors(); /* IV の長さを設定 */ if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, 7, NULL)) handleErrors(); /* Tag の長さを設定 */ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, 14, NULL); /* key と IV の値を設定 */ if(1 != EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)) handleErrors(); /* 暗号化対象データの長さを設定 */ if(1 != EVP_EncryptUpdate(ctx, NULL, &len, NULL, plaintext_len)) handleErrors(); /* 暗号化対象のデータ、暗号化データの出力先、暗号化データサイズの出力先を渡して 操作の実行 /* if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) handleErrors(); ciphertext_len = len; /* 操作の完了。通常、暗号化データはこの時点で書き込まれるが CCM の場合は書き込まれない。 */ if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors(); ciphertext_len += len; /* Tag の取得 */ if(1 != EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_GET_TAG, 14, tag)) handleErrors(); /* 終了処理 */ EVP_CIPHER_CTX_free(ctx); return ciphertext_len; }

2024年3月12日火曜日

Google Chat に Webhook で投稿するときに文字色を変えたい

Google Chat に Webhook で投稿するときに文字色を変えたい

発端

「開始時と終了時にChatにメッセージ投げてくれるのはいんだけど、同じ文字数で同じ色だとわかりにくいんだよね。」
と言われてしまった。俺もそう思ってた。

どうすればいい?

普通にChatにメッセージ投げる場合は

{ "text":"処理を開始しました" }

と簡単なjsonをWebhookのurlにcurlでpostしれやればOK。文字を太くしたり、斜体にするのもおなじみのMarkdown表記で大丈夫だが、色を付けるとなると途端に面倒になる。

文字に色をつけてChatに投稿するにはCard V2をpostする必要がある。
最低限、一部の文字に色を付けるには以下のようなjsonにすればよい。

{ "cardsV2": [ { "card": { "sections": [ { "widgets": [ { "decoratedText": { "text": "処理を<font color=\"#ff0000\">開始</font>しました" } } ] } ] } } ] }

一気に面倒になった。
[]{}の具合が変更するときに面倒なら、こんな具合にjqを使ってみるのもいいかも。

jq -c -n '.cardsV2 = [.card.sections = [.widgets = [.decoratedText.text = "処理を<font color=\"#ff0000\">開始</font>しました"]]]'

2023年9月17日日曜日

簡易版グラインダールールの紹介【書いてる途中】

grinder_lite.md

ぐらいんだーって遊び方があるよ

説明

どういう目的で、こんな遊びだよ レベル、G/Pの調整がなぜ行われているかの説明

遊び方

始め方、手順、通常とは違うイニシアチブ、移動・射撃

機体一覧

Columnの説明

  • Level1

    機種名 型番 G/P BV ton 製品 PDF
    Wasp WSP-1A 0/0 930 20 c A.58
    Locust LCT-1E 2/2 974 20 a A.52
    Commando COM-1B 2/4 949 25 a C.12
    Jenner JR7-D 4/4 963 35 d B.83
    Panther PNT-9R 3/5 923 35 d B.85
    Wolfhound WLF-1 4/5 949 35 d B.81
  • Level2

    機種名 型番 G/P BV ton 製品 PDF
    Blackjack BJ-1 2/3 1595 45 d B.93
    Phoenix Hawk PXH-1 2/4 1604 45 c A.67
    Vindicator VND-1R 2/4 1577 45 b D.105
    Shadow Hawk SHD-2H 3/3 1533 55 a A.73
    Wolverine WVR-6R 3/3 1586 55 a A.76
    Griffin GRF-1N 3/5 1527 55 b A.69
    Rifleman RFL-3N 2/4 1601 60 c A.79
  • Level3

    機種名 型番 G/P BV ton 製品 PDF
    Thunderbolt TDR-5S 3/4 1763 65 a A.84
    Catapult CPLT-C1 3/4 1847 65 a A.81
    Warhammer WHM-6R 3/3 1871 70 c A.90
    Awesome AWS-8Q 4/5 1926 80 a A.94
    BattleMaster BLR-1G 4/3 1823 85 a A.96
  • 製品

    • a: Game of Armored Combat
    • b: Beginner Box
    • c: Inner Sphere Battle Lance
    • d: Inner Sphere Striker Lance
  • PDF

    • A: BATTLETECH ForcePacks Record Sheets - Wave One
      https://bg.battletech.com/download/BATTLETECH%20ForcePacks%20Record%20Sheets%20-%20Wave%20One.pdf
    • B: BATTLETECH ForcePacks Record Sheets - Wave Two
      https://bg.battletech.com/download/BATTLETECH%20ForcePacks%20Record%20Sheets%20-%20Wave%20Two.pdf
    • C: BATTLETECH: Record Sheet: 3050U Unabridged: Inner Sphere
      https://store.catalystgamelabs.com/collections/battletech/products/battletech-record-sheet-3050u-unabridged-inner-sphere-pdf
    • D: BattleTech: Record Sheets: Succession Wars
      https://store.catalystgamelabs.com/collections/battletech/products/battletech-record-sheets-succession-wars

バトルテック製品ガイド

battletech_guide.md

バトルテックの発売元であるCatalystから様々な製品が発売されています。公式ストア
しかしながら、色々と並んでいて何が何やらさっぱり。
大雑把にわけて以下のような製品があります。

  • ボックスセット
  • ミニチュアセット
  • ルールブック
  • ゲーム用アイテム
  • 小説・設定資料

というわけで、それぞれのちょっとした製品ガイドのようなものを書いてみようと思います。

ボックスセット

ゲームに必要なルールブック、ミニチュア、マップ、そのほか諸々のアイテムがセットになった製品です。
値段から見るとお買い得です。
現在発売されているのは

  • a Game of Armored Combat
  • Beginner Box
  • Clan Invasion
  • Alpha Strike

あとはアメリカのディスカウントストアTarget専売の「Essentials」というのがありますが、Targetが国際配送を行っていないので日本国内からの入手はかなり難しいです。

a Game of Armored Combat

まずはこれを入手しましょう。これが基本です。
バトルテックをプレイするうえで基本的なルールが含まれたセットです。
このボックスセット(とプレイヤー)があればバトルテックがプレイできます。

Begginer Box

正直なところ微妙なセットです。
マップとミニチュアを安く入手するための手段、と割り切るのがいいかも。
クイックスタートルールが付属していますが、省略している部分が多すぎて、魅力がスポイルされすぎています。
このボックスでしか入手できないVindicatorというメックのミニチュアが含まれているのが憎いところです。

Clan Invasion

バトルテック世界で時代が進み「クラン」と呼ばれる連中が攻めてきた、という設定の追加ルール、新しいメックを中心としたセットです。
強力な武装が導入され、ゲームの進行がダイナミックになりプレイ時間が短くなるような工夫がされているなと感じます。

Alpha Strike

通常のルールとは一変し、テレイン(岩や木、建造物)を配置したマップ上にたくさんミニチュアを並べ、それぞれのメックに設定されたインチ数動かすアルファストライクというルールで遊ぶためのセットです。ウォーハンマーをはじめとしたミニチュアゲームでなじみのあるルールですね。
射撃のルールも簡略化され、軽量級のメックが重量級メックをやっつける場面も発生します。
付属のルールはアルファストライクで遊ぶための基本的なルールになります。アルファストライクで遊ぶための各メックのデータを記したアルファストライクカードは上記の各ボックスセット、後述のミニチュアセットすべてに含まれています。
ミニチュアがたくさん付属していて、何気にお買い得です。

ミニチュアセット

高機動型の偵察機や重装甲・高火力のダメージソースとなる機体など、様々なコンセプトに基づいて組まれたメックのミニチュアセットです。
バトルテックの小説に出てくる軍団の機体がセットになったものもあります。
PDF形式のレコードシートが公式HPの(Downloads-RecordSheets)[https://bg.battletech.com/downloads/]から無償でダウンロードできます。
用紙サイズがアメリカの用紙サイズになっているので、印刷の際は注意しましょう。
(Alpha Strike付属のミニチュアのレコードシートもここからダウンロードできます)

ルールブック

各ボックスセットに付属のルールは遊ぶための基本的なルールになっています。追加のルール、詳細な判定、武装の効果等はルールブックを参照することになります。なくても遊べるんですけどね。
また、「こういう遊びをしたい」という場合にも有効です。
PDF版、物理本とPDFのセット、の2種類が売られています。

Total Warfare

メック・歩兵・戦車・航空機、その他すべてのルールが載った本。

BattleMech Manual

上記からメック戦闘だけをまとめた本。読み易い。

Tactical Operations

気象や条件の厳しい惑星、砲撃や地雷というったオプションルールを扱ったものです。

Campaign Operations

部隊を構築、運用してキャンペーンとして遊ぶためのルールを扱ったものです。

Strategic Operations

バトルテックの世界において、人類は宇宙に進出しています。その宇宙空間での戦闘を扱うためのルールです。

Techmanual

異色のルールブックで、メックをデザインするための資料となるルールです。
バックグラウンドとなるテクノロジーの解説も行われています。

Alpha Strike: Commanders Edition

アルファストライクで遊ぶためのすべてのルールを扱ったものです。

MECHWARRIOR DESTINY

BATTLETECH A Time Of War

これらの2冊はTRPGとして遊ぶためのルールです。

ゲーム用アイテム

ゲームをちょっと便利にするカウンターパックや各勢力のアイコンが彫られたダイスなどありますが、最も重要なのはマップパックとバトルマットだと思います。
各ボックスセット付属のマップでばかりで遊んでいるとマンネリ化は避けられません。そこで、新し戦場で新しい闘争を提供するのがマップパックとバトルマットです。
マップパックは、ボックスセット付属のものと同様に紙に印刷されたマップが何枚かセットになったものです。
バトルマットは、ネオプレンゴムのシートに布に印刷したマップが貼り付けられたものです。マップパックに含まれている地形を連ねて印刷したものもあります。

小説

歴史の長いバトルテックは数々の小説が書かれてきました。
公式ストアで「Fiction」を選択するとリストアップされます。
「SHRAPNEL」は公式雑誌です。

設定資料

公式ストアで「Sourcebooks」、「Tech Readouts」を選択するとリストアップされます。
バトルテック世界の惑星や軍団、時代背景、テクノロジー等の解説資料です。

2023年9月4日月曜日

バトルテック事始め

バトルテック事始め

バトルテックに興味があるんだけど、どれから手を出したらいいのかわからないという声をよく聞きます。
バトルテックの発売元、Catalystに公式ページがあるのですがさっぱりわかりません。
ゲームを始めるには何を買えばいいの?
「BATTLETECH: A GAME OF ARMORED COMBAT」まずはこれを入手しましょう。

BATTLETECH: A GAME OF ARMORED COMBAT

まずはこれ。「BATTLETECH: A GAME OF ARMORED COMBAT」。通称、基本ボックス。
中身は

  • ミニチュア8体
    「メック」と呼ばれるバトルテック世界の巨大戦闘ロボのミニチュアです。
  • ルールブック
    ゲームを遊ぶのに必要な基本となるルールです。
  • レコードシート
    各メックの武装や装甲が記載されています。ゲームで使用します。攻撃時に武装を参照したり、被弾したときに装甲点を減らしたりします。クリアファイルに挟んで、その上から水性ペンでマークするのがおすすめです。
  • リファレンスシート
    ゲームの判定に使う数値がまとめられた厚紙のシートです。ルールブックから抜粋された一番重要なアイテムです。ちなみに、公式通販の箱の写真、内容物一覧のところに2枚入っているようなことが書かれていますが実際は1枚しか入っていません。誤植です。今入手できるものは、内容物一覧の記載は修正されています。
  • 両面マップ2枚
    これがオマエの戦場だ!4つ折りの紙製なので、たくさん遊んでいると折り目がヘロヘロになってきてちょっと悲しい。
  • パイロットカード
    追加ルールで使ったりします。書いている人はほとんど使ったことがありません。
  • 世界観資料
    これを読み込めばゲームをするときに世界観に浸れてもっと楽しめることでしょう!(書いてる人は読んでない)
  • 小説
    バトルテック世界がどんな世界なのかを知るのに大いに役立つことでしょう!(書いてる人は読んでない)
  • メックと追加地形の紙コマ
    付属のミニチュアが足りなくなったときや、マップに変化をつけないときに使う。
  • 6面体ダイス2個
    オマケレベルの品。お気に入りのダイスがあるならそれを使おう!

入手は以下でできます。

  • CMONJAPAN通販
    日本国内での取り扱いなので安心。
  • US Amazon
    取り扱いはAmazon。評判の悪いマケプレ品ではありません。海外からの発送なので送料が取られますがそれほど高くありません。まとめて買っても余計に関税がとられてりしないので安心です。
  • 公式通販
    送料が高いのではっきり言っておすすめできません。