yukuro’s blog

ぽえむ日記

Aries Cloud Agent Pythonでハマった点まとめ

Aries Cloud Agent Python(ACA-Py)とは

Aries Cloud Agent Pythonは非モバイル環境でDID(decentralized identity)のアプリケーションやサービスを動かすための開発環境です.

DIDに必要な処理がREST APIの形で提供されているので、APIを叩くだけでDIDが出来るようになります.

ハマった点

ACA-Pyは非常に有用な開発環境なのですが、デモに載っていない範囲が存在したり、ドキュメントが散逸していたりと、若干不親切です.

学習ついでに実装をしている中で、実際にハマった事がわりとあるので、備忘録的にまとめます.

なお、使用しているバージョンは 0.5.6 で、Ledgerはvon-networkを想定しています.

Ledgerとのやりとり

DIDに関して学習する際にACA-Pyのデモを参考にすることが多いのですが、(恐らくACA-Pyの範囲ではないため)デモではLedgerとのやり取りに関しては明示的には触れられていません

具体的には次のようなことです

  • LedgerへのPublic DIDの登録
  • LedgerへのSchemaの登録
  • LedgerへのCredential Definitionの登録
Public DIDの登録

von-networkの/registerに以下の内容のようなjsonをPOST

{
    "alias":"issuer1",
    "seed":"gLyjhihWzueCSkCygJEJdyzNHWMSPStM", //32byte
    "role":"TRUST_ANCHOR"
}
Schemaの登録

ACA-Pyのadministrative API/schemasに以下のようなjsonをPOST

{
    "attributes": ["hoge", "fuga"],
    "schema_name": "hoge",
    "schema_version": "1.0"
}

Credential Definitionの登録

ACA-Pyのadministrative API/credential-definitionsに以下のようなjsonをPOST

{
    "revocation_registry_size": "1000", //0にすると怒られる
    "schema_id": "hoge", // ↑のschemaを発行すると発行される
    "support_revocation": "false", // revocation(失効)を有効化するかどうか
    "Tag": "hoge"
}

issue-credential

Issue credentialの定義に関してはAries RFC 0036に記載があります.

これによると

Note: In Hyperledger Indy, where the request-credential message can only be sent in response to an offer-credential message, the propose-credential message is the only way for a potential Holder to initiate the workflow.

とあるので、いきなりCredentialをIssueするrequest-credentialは(Hyperledger Indyでは)ダメらしい (ACA-PyのデモではいきなりIssueしてたような...? 明示的に行われてないだけで、勘違いでした)

なので、ここではHolderがproposal-credentialをIssuerに送るフローを想定します

proposal-credentialするには

proposal-credentialするには、Holderのadministrative APIに以下のjsonをPOSTします

{
    "connection_id": "hoge-hoge-hoge-hoge-hoge", // connectionを確立した相手のconnection id. /connectionsで確認可能
    "cred_def_id": "hoge:3:CL:15:default", // ↑で定義したcredential definition id
    "credential_proposal": {
      "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/issue-credential/1.0/credential-preview",
      "attributes": [ //罠
        {
          "name": "name",
          "value": "Yukuro"
        },
        {
            "name": "number",
            "value": "12"
        }
      ]
    },
    "issuer_did": "hoge", //issuerのDID
    "schema_id": "hoge:2:test-schema-01:1.0", // ↑で定義したschema id
    "trace": false
  }

なお、connection_idcredential_proposalの箇所以外は全てoptionalらしいです

このjsonですが、attributesの箇所が割と罠だと個人的には思っています

というのも、attributesnameにはschemaの属性名を、valueにはセットしたい値をいれるのですが、自分はattributesと書いてあるので以下のようなjsonのように書くものだと思いこんでました...(なので、気づくまでに1日溶かしました)

"attributes": [
    "name":"Yukuro",
    "number":"12",
]

このproposal-credentialを発行するとcred_ex_id(credential exchange id)というものが発行されるので、それを各エージェントのAPIで扱うという流れになります

おわりに

DIDは、ただでさえ新たな分野で参照元が少ないのに加え、ググることが大変に難しい(doの過去形としてヒットする)ので学習するのに割と苦労しています

今後もこのようなハマりポイントは出てくると思うので、追記したいと考えています

(あと、マサカリもお待ちしています)

Amazfit band 5のバンドを交換した

先日購入したAmazfit band 5のバンドを交換した。

なぜ交換したか・作ったか

  • Amazfit band 5に付属のラバーバンドだと肌荒れが起き、かゆくてたまらなかった
    • ナイロン製のバンドは肌荒れが起きにくいという噂を聞いたため
    • Apple watch等のデフォルトでラバーバンドが交換できるようになっているスマートウォッチを買う資金がなかった
  • Thingiverse等でAmazfit band 5用のファイルが見つからなかった

製作

  • 作ったのはAmazfitを接続する部分だけ
  • Fusion360で設計してEnder3で出力した
  • バンドとの接続にはフィラメントをそのまま通して、はんだごてを使ってTPUで刷った部分と共に溶着した f:id:kuroblo039:20201203020458j:plain

交換後

  • ナイロンバンドはめちゃめちゃ快適
    • さらっとしているし、蒸れない
  • 割と不格好になってしまったが、少なくとも冬のシーズンは服の袖に隠れるし、妥協することにした f:id:kuroblo039:20201203020842j:plain
  • 今回作成したデータはThingiverseで公開しているので、気に入ったバンドがあれば適当に付けられる

  • フィラメントによる溶着を初めて試したが、割と耐久性があって驚いた

技術書典9で3Dプリンタの本を出した

技術書典9で3Dプリンタの本を出した

現在行われている技術書典9において、3Dプリンタの本を出しました。

techbookfest.org

本の紹介

出した本では「Ender3の改造を通じて3Dプリンタに詳しくなる」ことを目的として以下の内容を書きました。

  • ノズル/ホットエンド(Microswiss All Metal Hotend kits)の購入/交換方法
  • モータードライバ(TMC2208)の購入/交換方法
  • マザーボード(SKR v1.3)の購入/交換/配線
  • Octoprintの導入
  • Klipperの導入/設定

また、付録として以下の内容も書きました。

主に自分がEnder3を買ってからBLTouch(3DTouch)をつけたり、Octoprint/Klipperを導入したりする流れをまとめました。

なので、最新の情報かと言われると微妙ですが、3Dプリンタに興味をもつ or 改造を始める第一歩になれば良いなと思い書きました。

付録として3Dプリンタの基礎に関する説明も入っているので、これから3Dプリンタを始めようとする方にもおすすめです。

書いた動機

技術書典には秋葉原通運会館で行われていたころから色々技術書を買っていたりしたので、いつか自分で書いてみたいなぁと思っていました。

ただ、物理本を印刷する手間(印刷代、紙面の調整etc...)を考えると敷居が高いし、せっかくの即売会なのに電子版のDLカードだけ持っていくのもなぁとも思っていました。

しかし、技術書典9になるとオンラインであるためか

  • 販売手数料が無料(売上が20万円以下の時)
  • 電子版が中心(?)

になっており、これは出すしかない!と思い、サークルとして出展するに至りました。 あと、コロナの影響でバイトが消えたので収入が欲しかった...

書いた環境

執筆にはRe:VIEW+GitHub ActionsとTechboosterさんが出してくださっているRe:VIEW-Templateを使用しました。

Word等で書いてもよかったと思うのですが、ある程度モダンな環境で書きたいし、Re:VIEWを使用して技術書を書いている方が割といたのでRe:VIEWを使いました。

レビュー環境

今回は何名かの方に書いた書籍のレビューをお願いしたのですが、最終的なレビューの環境にはGoogle Driveのコメント機能を使用しました。

f:id:kuroblo039:20200921164931p:plain

理由としては、GitHubを普段使わない方が多く、その負担から本来出るはずのレビューが出てこない懸念があったためです。

ただ、Google Driveに一々レビュー対象のPDFファイルを手動で上げたりしていたので、次回書く時までにはいろいろと整備したいですね。

感想

思っていたよりもずっと簡単に技術書を書くことが出来ました。

今のところ、想定していたよりも多くの人に読んでいただけて、感動するばかりです。

次に技術書を頒布できる場所が出来たら、是非参加したいです(そのためにはネタを仕入れなくてはならないのですが...)

SORACOM Summer Challenge 2020で不快指数通知デバイスを作った

SORACOM Summer Challenge 2020に参加してきました

作ったもの

Challengeの中では以下のような不快度通知デバイスを作りました

  • GPSマルチユニットから温度と湿度をもとに不快指数を計算し、不快指数が80以上ならSlackに通知します

f:id:kuroblo039:20200812050530p:plain

続きを読む

3Dプリント造形物のための熱圧入の検証

はじめに

  • 先日、初めてインサートナットを熱圧入した

  • インサートナットを使うにあたって、以下のようなことがわからなかったので検証した
    • 熱圧入の方法
    • 下穴の径
    • 熱圧入時の温度

モデルの作成

  • 基本的には以下のサイトを参考にして、モデルの作成、インサートナットの熱圧入をした

hackaday.com

  • 下穴の深さはインサートナットの全長の1.5倍、淵は面取りした
  • Cura 4.4.1のShell > Wall line counts を4に設定した

熱圧入の方法

  1. インサートナットを垂直に載せる

    1. 穴の淵を面取りしておくと載りやすい(写真撮り忘れた)
  2. はんだごてで挿入する

    1. はんだごてはFX-601, こて先は1.6Dを使用した
      f:id:kuroblo039:20200206020827j:plain
      なるべく垂直にするべき
  3. インサートナットの全長の95%ぐらいが造形物の中に埋まったら、反転させて押し付ける

    f:id:kuroblo039:20200206021501j:plain
    金属に押し付けるといい感じになる

  4. 完成

    f:id:kuroblo039:20200206021639j:plain
    割とうまくいった図

検証

1. 下穴径の検証

所感

穴の径 所感
Φ4.5 ちょうどよい
はんだごてを抜いた後の糸引きがない
Φ4.0 多めの糸引きが発生(ねじ山のところに引っかかって使用不可になるレベル)
Φ4.38 糸引きはΦ4.0に比べ少ないが、使用不可になるレベルではない
Φ4.25 糸引きはΦ4.38に比べ少ないが、注意しないとネジ山に引っかかりそう
  • サイトの相手材参考寸法に合った通り、D1(ギザギザがない部分の直径)ぐらいに合わせると良さそう(+0.05 mmはPLA の熱収縮やら膨張やらで相殺されそう)

2. 熱圧入時の温度の検証

  • プリント時の温度 + 10, 50, 100, 150℃にはんだごての温度を設定して熱圧入した
    • 印刷に使用したPLA Carbonは230℃で印刷したので、実際には240, 280, 330, 380℃となる

所感

f:id:kuroblo039:20200206024024j:plain
左上から時計回りに+10, 50, 100, 150℃

こて先温度 所感
+10℃(240℃) インサートナットと造形物の間に隙間が割と大きな空く
+50℃(280℃) ナットと造形物の間に隙間がやや空く
+100℃(330℃) ナットと造形物との間にほぼ隙間が空かず、強度も良さそう
+150℃(380℃) ナットと造形物との間に隙間が空かないが、造形物表面に余分な樹脂があふれ出る

余談

  • 上記のHackadayのサイトには金属の熱収縮でナットが取れなくなるとのことで専用のこて先を使用していたが、今のところは取れなくなることはなかった
  • PLA Carbonだけでなく、普通のPLAでも下穴をD1、こて先温度 + 100℃(290℃)にしたところ、よさげな感じになった
    f:id:kuroblo039:20200206030416j:plain
    いい感じ

まとめ

  • 下穴の径はD1, 深さはナットの全長の1.5倍が一番よさそう
  • こて先温度をプリント時温度 + 100℃にして熱圧入すると強度的にもよさそう
  • 「よさそう」といった主観的基準でしかわかってないので、客観的、定量的に強度の評価とかしたい

KlipperでAuto bed levelingする

はじめに

  • この記事はTeaching Techのビデオに基本的に従っており、ビデオで説明されているところは省略
  • しかしながら、ビデオとの相違点(Klipper最新版での変更点とか)も多々あるので、それを中心に記述している


Using a 32 bit Raspberry Pi to boost your 3D printer mainboard - Klipper Ender 3 guide

用意したもの

  • 3DTouch

    • AntclabsやCreality3Dから発売されている純正のBL-Touchでも良かったのだが、高価(約4000円ほど)だったのでクローン品にした
    • 送料込みで1282円だった
  • Hero me

    • シンプルなファンダクトもThingiverseに上がっていたが、エアフローとかが考えられていそうなHero meにした
    • Hero meの別バージョン(?)のHero me Gen 3もあるが、シンプルな方を選んだ

詰んだ点

  • 基本的には上記のビデオ通りにいったが、以下のようなエラーが表示された
NoOptionError: No option 'min_point' in section: 'bed_mesh'
No option 'min_point' in section: 'bed_mesh'

何か最新版で変わったのかなと思いChange logを見に行くと

20200109: The bed_mesh module now references the probe's location in for the mesh configuration. For rectangular beds, min_point and max_point have been renamed to mesh_min and mesh_max respectively. Note that these changes are also incompatible with previously saved mesh profiles. (抜粋)

というようなことが書いてあったのでKlipperをアップデートすることで解決した
また、上記の変更でmesh_min(旧min_point)で指定する点がノズルの位置→プローブの位置に変更になったらしいのでmesh_minの指定値も変更した

結果

余談

@BEDLEVELVISUALIZER
BED_MESH_OUTPUT

Ender3にKlipperをインストールする

  • 自宅の3DプリンターにKlipperをインストールした
  • 基本的にはInstallationに従うだけだが、いくつかハマったポイントがあったので書き残しておく

Klipperとは

インストール環境

インストール

1. git cloneする

git clone https://github.com/KevinOConnor/klipper
sh ./klipper/scripts/install-octopi.sh

2. ビルドする

cd ~/klipper
make menuconfig
  • 出てきた設定画面で以下のように設定する
    • Micro-controller Architecture (LPC1768x(Smoothieboard))
    • 他は何もいじらなくてok
  • ビルドする
make
  • ~/klipper/out/klipper.binが生成されるのでWinSCPとかを使ってローカルに落としておく

3. SKR v1.3に書き込む

  • 公式のInstallationにはmake flashをしてラズパイからマザーボードに直接書き込むやり方が紹介されていたが、上手く行かなかった

    • よって、SKR v1.3のSDに直接焼く
    • ローカルに落としたklipper.binfirmware.binにリネームしてmicroSDにコピーするだけ
    • 上手く行けばSKR v1.3の電源を入れた後、もう一度microSDの中身を覗くとFIRMWARE.BINに名前が変わって、他の設定ファイルも生成されている
  • 注意事項:

    • SKR v1.3の中心ぐらいにある赤いジャンパピンを+5VUSBに繋いで書き込みを行うこと
    • 自分の環境では当初はINTと+5Vに繋いでいて、上手くフラッシュされず、サポートにまで連絡してしまった(アホすぎ...)

4.Octoprintを設定する

  1. 設定(レンチのアイコン) > Serial connection > General > Serial Port/tmp/printerを追記しSave
  2. (もう一度設定を開き)上記のSerial Port/tmp/printerを選択
  3. 設定(レンチのアイコン) > Serial connection > BehaviorCancel any ongoing prints but stay ...を選択しSave
  4. Connection(メイン画面の左上)のSerial Port/tmp/printerを選択し、Connect
  5. Terminalタブ(メイン画面)でstatusと打ってsendする

5. printer.cfgの設定

  1. github上にあるskr v1.3用cfgファイルをダウンロードしてprinter.cfgとして保存する
  2. [mcu]のセクションでserial:以降をls /dev/serial/by-id/*して出てきたものにする(klipperがうまくflashされていればusb-a...klipper...port0のようにklipperの文字が入っている気がする)
  3. 完成したprinter.cfgをラズパイ上の/home/[ユーザー名]/へコピー(WinSCPとかで)
  4. Octoprint上のterminalでrestartコマンドを打つ
  5. Klipper state : Readyが出てきたらインストール完了

printer.cfgの書き方

  • xxxx_pin:
  • PID制御のパラメータ(pid:)はで設定するのでいじる必要はない

6. Octoklipperの導入(任意)

  1. 設定(レンチのアイコン) > Plugin manager > Get more...Octoklipperを検索&インストール
  2. Octoprintの右端にKlipperタブが現れてGet statusボタンとかが押せるようになる

まとめ

  • Klipperのインストールが完了した
  • 次はKlipperの(個人的)目玉機能であるPressure Advanceなどを設定していきたい