mecablog

Thoughts, stories and ideas.

Hardhat を使った Ethereum スマートコントラクト開発メモ
tech

Hardhat を使った Ethereum スマートコントラクト開発メモ

本記事では、Hardhat を使った Ethereum スマートコントラクト開発について紹介する。Hardhat はスマートコントラクト開発に必要なものが揃った開発環境であり、プロジェクトテンプレートの生成、コントラクトのコンパイルやシミュレーター上でのテスト、デプロイのいずれをも `hardhat` コマンドを通して行うことができる。さらに、TypeScript をサポートしており、TypeScript 版のテンプレートを生成できる上に、typechain を使って、コントラクトに対応する型定義ファイルを出力して開発に利用できる。

  • mecab
    mecab
不動産サイトで坪単価計算を簡単に計算するブラウザ拡張を作った
development

不動産サイトで坪単価計算を簡単に計算するブラウザ拡張を作った

ここ2年間ほど無限に不動産サイトを見ていて、最初は価格しか見ていなかったわけだけど、最終的には毎回坪単価を計算するタイプの人間になってしまった。 毎回電卓を叩くのはめんどくさいので、ブラウザ拡張を作った。名前はそのまま「坪単価計算」という。下記からダウンロードできる。 👉 https://misosi.ru/tsubotanka 面積と価格を選択すると、右クリックメニューから坪単価を計算できるようになる。(現代人向けに平米単価も出る。)実際に動く動画は以下。 元々は Suumo とか Homes のような特定のサイト向けに坪単価を自動で表示するような拡張にしようかと思ったが、ページがリニューアルされたり HTML の構造が変わったりすると使えなくなるし、その変更に追従するのもめんどくさいので、様々なサイトで汎用的に使えるものにしようと思った結果、このような拡張となった。価格と面積さえ選択できれば計算できるので、マイナーなページとか、

  • mecab
    mecab
Nature Remo をかっこよく電源プラグに取りつけるウルトラマル秘テク
nature remo

Nature Remo をかっこよく電源プラグに取りつけるウルトラマル秘テク

本記事では Nature Remo の初期モデルについて書く。製品写真を見る限り、Nature Remo mini(初期モデル)や、現行の Nature Remo 3 や他のモデルにでも適用できると思うが保証しない。(試してみた方はぜひ @mecab まで教えていただけると嬉しい。) Nature Remo という製品があって、これはいわゆるスマートリモコンで、赤外線リモコンに対応した各種家電(主にエアコンやテレビ)をスマートフォンから操作できるようにするものだ。 製品自体は結構便利で、見た目もシュッとしていて良いのだが、USB 給電で動くためにコンセントからの配線がダサくなってしまう。コンセントに

  • mecab
    mecab
tech

WireGuard で VPN サーバーを作り、OpenWRT から接続して拠点間 VPN を構成する

背景 先日引っ越しをした。引っ越し先のインターネット環境は一言で言えば残念で、好きな ISP と契約することができず、マンションが包括して契約している ISP 経由でしかインターネットに接続できない。悲しいことにこの ISP は各個にグローバル IP を割り当てないので、外に向けたサーバーの公開が制限されている [1]。 この問題を回避するため、外部の VPS を VPN サーバーとし、ルータとの間にVPN を張ることでサーバーを公開できるようにした。外部のユーザーは、VPS に割り当てられたグローバル IP を通して、筆者の自宅内のサーバーに接続することができる。 構成 表題の通り、VPN には WireGuard を使う。高速に動作し、設定もシンプルらしい。 図1. ネットワーク構成図 図 1 のように、ルーターには

  • mecab
    mecab

Chia を 換金できる取引所のメモ

1月前から Chia ブロックチェーンのファーミングを行っているが、先日ようやくファーミングに成功した。Chia 自体についての詳細は前記事を参照されたい。 報酬として獲得できるネイティブトークン XCH のうち一部を売却して USDT に換金した。複数の取引所を試したのでそれぞれの比較をメモしておく。 以下は 2021 年 5 月 14 日の情報に基づく。それぞれの取引所で、1) XCH の入金、2) XCH 売り USDT 買いの取引、3) USDT の Binance への送付を試した。以下の全ての取引所で、TRX20 ネットワークでの USDT 送金がサポートされていた。出金手数料は TRX20 を利用した場合の手数料だ。 OKEX 最低出金額: 2USDT

  • mecab
    mecab
tech

破損した動画ファイルを高速に検出する

以前の記事で書いたように、自宅のサーバー上で録画環境を構築している。このサーバーでは、番組の録画が完了すると、録画した TS ファイルを h.264 の MP4 ファイルにエンコードして別のディレクトリに保存するようなスクリプトを動かしている。元の TS ファイルもそのまま保持していたのだが、最近ストレージ容量が厳しくなってきたので、エンコード済みの TS ファイルを削除しようと思い立った。 問題は、エンコードが正しく終了せず破損した MP4 ファイルがいくつか存在することだ。これらのファイルについては元の TS ファイルを残しておきたい。そこで、大量のファイルの中から破損したファイルを高速に検出する方法を調べた。 調べた結果、以下のようにするのが良さそうだ。(ffprobe コマンドは ffmpeg をインストールするとインストールされる) $ ffprobe -v error -f lavfi movie="/path/to/file.

  • mecab
    mecab
tech

ZFS ZVOL の拡張と、その中の ext4 パーティションの拡張

ZFS で作成した ZVOL のサイズが足りなくなり拡張するという作業を数年に一度行っているが、毎回やり方をググっているのでメモを兼ねて書く。ZVOL を拡張しても、内部のパーティション(ext4 を想定)も拡張しないと、実際に使用可能な容量は増えないのでこちらも拡張する。 なお、ここでは内部にパーティションが1つしか無いことを想定している。複数ある場合、末尾のパーティションは簡単に拡張できる (partedで指定するパーティション番号を変更するだけ)が、それ以外は大変なはず.....。 (作業前にスナップショットを取っておくと安心) $ sudo zfs snapshot pool0/vol0@before_expand 作業前にアンマウントすること! $ sudo umount /mnt/path/of/where/volume/is/mounted まず ZVOL を拡張する。 $ sudo zfs set volsize=

  • mecab
    mecab
development

Flow JavaScript SDK で Script を実行してメインネットからデータを取得する。

この記事では Flow メインネットから Flow JavaScript SDKを使ってデータを取得する方法について述べる。 データを取得する方法にも、ブロックやトランザクションを直接指定して記録されたデータを読む方法や、コントラクトが発火させるイベントを取得する方法などいくつかがあるが、ここでは Script を実行してデータを取得する。

  • mecab
    mecab
among us

(Among Us) 「宗教法人エマージェンシークールタイムをキルクールタイムより長くしろの会」を設立します。

Among Us において、エマージェンシークールタイムは、キルクールタイムより長くした方が良い。これは、クルーメイトらがローラーを選択するリスクを引き上げ、ローラーを行う場合でもローラーの順序について熟慮するインセンティブを与える。この設定は、結果としてゲームの持続的な面白さに貢献する。

  • mecab
    mecab
essay

2020年まとめ

この記事は実は2021年1月5日に書いている。が、2020年12月31日として公開する。だってそっちのほうがそれっぽいじゃん。 2020年は新型コロナウィルス感染症、通称コロナが流行った年だった。1月末頃は中国で新しいウィルスが流行っているんだってー。こわいねー。ぐらいのノリだったのが、3月末にはもう世界中で大騒ぎになっていて、怒濤の速さで物事がすすんだように思う。 トイレットペーパーが品切れになりつつあるらしいという話を Twitter で見て、そっかーと思っていたらすでに自分の周りでも品切れになっていて買えなかったり [1]、わずか数日で株価が急落して含み損がすごいことになったと思ったら、その後年末に向けて値を戻すどころか、コロナ以前の水準まで上がってびっくりしたりした[2]。あと、原油の先物価格がマイナスになったのは面白かった。記念スクショを撮った。しかし、1年間コロナが収束する気配はなく、実体経済もボロボロになっているはずなのに、金融緩和のせいか株価だけが上がり続けるのは健全でないような気がして怖い。経済ガチ勢ではないので本当に健全でないのかは分からないのだが、直感的に。 労働環境でも大きな変化があった。基本的に仕事は在宅勤務が推奨(時期によっては強制)されるようになった。元々 VPN 環境が整備されていて Zoom も導入されているにもかかわらず、在宅勤務は特段の事情がないと認められなかった[3]会社だったが、ほとんどの人が在宅で仕事をするようになった。僕は朝が苦手な上に、通勤が1時間半ほどかかるようなところに住んでいるので、

  • mecab
    mecab
CS381 を使って MicroATX に 48 TB 分の HDD を詰める
tech

CS381 を使って MicroATX に 48 TB 分の HDD を詰める

SilverStone SST-CS381B という PC ケースを買った。このケースは、MicroATX にもかかわらず、最大で 12 台と大量の HDD/SSD を積むことができる。ユニークなのはホットスワップベイで、8 台が 4 台ずつまとめられて 2 本の SAS (SFF-8643 Mini-SAS)で接続するようになっている。本記事では、このケースについてレビューする。

  • mecab
    mecab
ghost

Ghost を v0.1 系から v3 系に移行した。あるいは CWM (CJK Writes Matter) について。

‌ このブログは Ghost というブログシステムによって稼働しているが、遙か昔、正式リリース前の v0.1 系 の時に入れたままで、シンプルなブログシステムとしては良く動いていたのもあってずっとアップデートをサボっていた。 しかし、リンクのついた画像を配置した場合に AMP 用のページで画像が表示されない問題に気づき、これは実はテンプレートの問題だったかもしれないのだが、この機会に最新版までアップデートしてみることにした。すんなり行ったのでやり方を記録しておく。 なお、基本的には公式の方法に従っている。まず v0.1 系から v1 系に移行し、それから v3 系に移行した。 なお、CJK Writes Matter という煽りに釣られて来た読者は感想の項を読めば良いかもしれない。 前提 現在、Ghost が /app/ghost/ にインストールされているものとし、移行後も同じディレクトリで動かすものとする。APIの変更により、テーマも移行するためには手動でテーマのファイルを修正する必要があるが、今回はテーマの移行は諦めることにする。

  • mecab
    mecab
「京」コンピューターの CPU が届いた。
essay

「京」コンピューターの CPU が届いた。

理化学研究所が「Society 5.0に向けた高性能計算科学研究支援及び研究者育成支援に関する寄附金」という寄付を募っている。これに 50,000 円以上の寄付をすると、特典として「京」コンピュータで使用されていたCPUを活用したグッズがもらえるとのことだったので、昨年 (2019年) の6月頃に寄付をしていた。 「京」は2019年は8月に運用を終了し、先日、後継機である富岳が TOP500 で1位になり、そして7月2日に CPU が届いた。 メルカリで適当に買ったジャンク CPU よろしく(失礼)プチプチにでも包まれて封筒で適当に届くかと思っていたのだが、段ボールの外箱の中には黒のかっこいい化粧箱が入っていて驚いた。

  • mecab
    mecab
tech

Vetur を複数のルートフォルダを持つワークスペース上で正しく動作させる方法

TL; DR Vetur を動作させたいフォルダをワークスペースの先頭に移動させると良い。 (adsbygoogle = window.adsbygoogle || []).push({}); 本文 Vetur は Visual Studio Code 用の、Vue プロジェクトのための拡張機能だ。これは Vue コンポーネントのためのシンタックスハイライティングやフォーマッティング、Linting などを行ってくれて便利だ。しかし、複数のルートフォルダを持つプロジェクトでは、期待する設定ファイルを読み込まず、上記の機能が正しく動作しないことがある。 以下に例を示す。 上記の画像では、個人的に作っているプロジェクトのビューの一つだが、@/... で始まるパスが VSCode 上で解決されておらず、エラーが出ている。さらにこのために関連するモジュールについて効かなくなっている。参照されるべき tsconfig.json には "paths": { "@/*": [ "

  • mecab
    mecab
ホットクックのレシピを検索する Slack bot を作って、副産物としてホットクックレシピ検索ライブラリができた。
development

ホットクックのレシピを検索する Slack bot を作って、副産物としてホットクックレシピ検索ライブラリができた。

ホットクックという、シャープが販売している自動調理鍋があって、これは神の調理器具だ。材料を切って調味料とともに鍋の中に入れてメニューを選択すれば、いつの間にか料理が完成している。しかもおいしい。さらに Wi-Fi 接続モデルでは、公開された新しいレシピが随時ダウンロードされていく。ダウンロード機能の件を抜きにしても、Wi-Fi があるモデルのほうが画面も見やすく操作しやすいと思うので、どうせ買うなら Wi-Fi 版を買った方が良いと思う。 現代の三種の神器として、ホットクック・ルンバ・食洗機を入れていいのではないかと個人的には感じている。 レシピはホットクックの公式サイトで検索できるが、わざわざブラウザを開くのもめんどくさいので Slack bot として動き、メンションを投げると検索したり、レシピの詳細を表示してくれるプログラムを Node.js 用に書いた。

  • mecab
    mecab
development

TypeScript コードのテスト時、ビルド後のファイルもテストする

TypeScript でコードを書いた際、ソースのテストは通っていても、何かの弾みでビルドされたコードが壊れていないことを念のために確認しておきたいという需要はある。とくにライブラリを作っていて、npm に公開する場合など、publish 前に検証するのは良い考えだろう。 このために、同じテストコードをソースと生成物それぞれに対して適用する方法を考える。つまり、以下のような conditional import を行いたい。 // このコードは動かない。 if (process.env.TESTMODE === 'dist') { import { FooClass, FooString } from '../dist/Foo'; } else import { FooClass, FooString } from '../src/Foo'; } describe('Test foo', function() { it('works', function(

  • mecab
    mecab
Happy Hacking Keyboard Professional Hybrid Type-S を買った。
hhkb

Happy Hacking Keyboard Professional Hybrid Type-S を買った。

2020年1月7日追記: 修正ファームウェアの公開予定日について追記した。 2020年2月5日追記: 修正ファームウェアを適用した感想を追記した。 HHKB 表題の通り、Happy Hacking Keyboard Professional Hybrid Type-S を買った。 Happy Hacking Keyboard Professional Hybrid Type-S Happy Hacking Keyboard (HHKB) は、高級キーボードの一つで、その打鍵感や無駄を省いたキー配置、そしてそのコンパクトさが人気のキーボードだ。2006年に発売された HHKB Professional

  • mecab
    mecab
tech

(未解決)OpenWrtでv6プラス (MAP-E) 接続すると、一部のサイトに接続できなくなった。

先日の記事で、OpenWrtでMAP-E、あるいは国内ではv6プラスと呼ばれる方法での IPv4 over IPv6 接続に成功したことを書いた。 快適に利用できていると思っていたが、ある日、一部のサイトに接続できないことに気づいた。例えば、ニチバン株式会社のWebサイト (https://www.nichiban.co.jp) に接続できない。読み込みまでとても時間がかかったり、あるいはタイムアウトしてしまう。他のサイトでも時々読み込み遅かったり、途切れたりすることがある [1]。 IPv6 ではルータがパケットをフラグメントすることが禁止されているため、MTUが大きすぎた上に経路上で ICMP がフィルタされて Packet too Big が届かなかった場合、接続ができなくなる可能性があるとの情報を見たため、MTUを下げたり、MSS Clamping の設定を有効にしたが、改善しなかった。 @chinjinson さんが、前の記事を読んで同様に MAP-E 接続に成功されたということだったので、ニチバンのサイトに接続できるかどうか伺ったところ、

  • mecab
    mecab
tech

OpenWrtでv6プラス (MAP-E) での IPv6 / IPv4 接続と、IPv4 PPPoEでのサーバー公開を両立する

(追記)この方法は完全ではないです 後日、以下の方法では特定のサイトが見ることができなくなったり、表示が遅くなったりする問題が起こることが分かった。この問題はまだ解決できていない。本記事の内容を試す前に、追記記事を読むことを強く勧める。(そして、発生する現象の解決を試みるのも良いかもしれない。) (未解決)OpenWrtでv6プラス (MAP-E) 接続すると、一部のサイトに接続できなくなった。 概要 IPv6 の普及が進みつつあり、IPv6 での接続オプションを提供するプロパイダも増えている。日本国内においては、光接続において一般的に使われてきた IPv4 PPPoE 接続においてはフレッツ網終端装置での混雑によって速度が低下することが指摘されているが、IPv6 接続ではこの混雑を回避することができ、通信速度が向上するという利点もある [1]。 今回、自宅のインターネット接続を IPv6 化を試み、OpenWrtを導入したルータで IPv6 接続できたので、本記事ではその方法を記録する。IPv6 で接続した際に、 IPv4 の通信をどのように通す(IPv4 over IPv6)

  • mecab
    mecab
Emacs

GUI 版 Emacs のフォントサイズをシュッと変える interactive function

2019年10月15日: さらに簡単に変更する、標準で可能な方法を追記をした。 Mac 上で GUI 版の Emacs を使っているが、フォントサイズを変更したくなることが時々ある。ターミナルで Emacs を使っているならば、ターミナルのフォントサイズを変更すればいいが、GUI 版の場合、set-face-attribute関数を使って変更しなければならない [1]。 そこで、フォントサイズを簡単に変更するための interactive function を書いた。以下のGistにあるスニペットを .init.el 等に追加すれば、M-x change-font-size でフォントサイズを変更できる。現在のフォントサイズも表示されるので分かりやすい。 Gist: mecab/change-font-size.el 以前使っていたビルドではツールバーにフォントサイズ変更のメニューがあったのだが、今使っているビルドでは無くなってしまって少し悲しい。 追記 標準で簡単なキーバインドで変えられるやんけ!!!しかもバッファごとに変更できるし! text-scaleは次のショートカットを覚えてしまうのがいいです。 次のどれか一つを覚えさえすればOKです。 C-x C-+

  • mecab
    mecab