投稿者「krote」のアーカイブ

Invalid number of parameters for “mint”. Got 1 expected 2

ジェネラティブNFTの画像生成、スマートコントラクト、Mintサイト作成をする上で、HashLipsが提供しているコードは最初の題材、テンプレートとしてよく出てくる。

HashLips
https://github.com/HashLips

エンジニアのむなかたさんが提供している、「誰でもできる!ジェネラティブNFT開発」を見ながら進めていたのですが、Mintサイトでmint実行時に表題のエラーが出てしまいました

誰でもできる!ジェネラティブNFT開発
https://crypto-code.jp/materials/create-generative-nft

エラー詳細

Error: Invalid number of parameters for "mint". Got 1 expected 2!
▼ 2 stack frames were expanded.
InvalidNumberOfParams
c:/Dev/darejene/hashlips_nft_minting_dapp/node_modules/web3-core-helpers/lib/errors.js:33
_createTxObject
c:/Dev/darejene/hashlips_nft_minting_dapp/node_modules/web3-eth-contract/lib/index.js:669
▲ 2 stack frames were expanded.
claimNFTs
c:/Dev/darejene/hashlips_nft_minting_dapp/src/App.js:132
  129 | console.log("Gas limit: ", totalGasLimit);
  130 | setFeedback(`Minting your ${CONFIG.NFT_NAME}...`);
  131 | setClaimingNft(true);
> 132 | blockchain.smartContract.methods
      | ^  133 |   .mint(mintAmount)
  134 |   .send({
  135 |     gasLimit: String(totalGasLimit),
View compiled
onClick
c:/Dev/darejene/hashlips_nft_minting_dapp/src/App.js:360
  357 |   disabled={claimingNft ? 1 : 0}
  358 |   onClick={(e) => {
  359 |     e.preventDefault();
> 360 |     claimNFTs();
      | ^  361 |     getData();
  362 |   }}
  363 | >

この手のチュートリアルでエラーの原因はチュートリアル上の工程をすっ飛ばしてしまったり、誤字脱字によるタイポなわけです。

ただ、問題なのは、言われるがままにコードを修正する形になるので、そのあたりがつけづらいという点ですね。
特に今回のように、ゼロからコードを書くのではなく、テンプレートから作る場合はそもそも書いていないコードが多いので余計に原因にたどり着きづらいことが多いです。

質問しても良いのですが、それでは理解の助けにならないので自力で解決することを考えます。

mint関数の定義

コード内容としては、Reactで書かれたフロントエンドからスマートコントラクトの呼び出し時にエラー。
エラーメッセージからは「mint」関数の引数が、コード中では “mintAmount”一つに対して2つの引数を期待していると言われています。

というわけで確認するべきはmint関数の定義です。

mint関数の呼び出しとしては

blockchain.smartContract.methods.mint(mintAmount)

という呼び出しになっています。

スマートコントラクト上のコードとしては

// public
  function mint(uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
      require(msg.value >= cost * _mintAmount);
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(msg.sender, supply + i);
    }

と、引数を一つで定義されているので、呼び出しの仕方が問題というよりも、Mintサイトから見たスマートコントラクト上の定義では引数は2つと判断されている、ということなのでは。

という訳で、そのあたりを参照していけば良いはずですが。。。
少なくとも blockchain や smartContract をimport してはいないので、探します。
バックエンド主体で動いてきた私にはなかなか興味深いです

追っかける

blockchain 変数は App.js 内で useSelector によって値が入っています。

function App() {
  const dispatch = useDispatch();
  const blockchain = useSelector((state) => state.blockchain);

useSelectorに関してはこちらを参照

Reac初心者でも読めば必ずわかるReactのRedux講座
https://reffect.co.jp/react/react-redux-for-beginner#useSelector_Hooks

なるほど、さっぱりわからん。

わからんが、スマートコントラクトの定義っぽいところを探すと、bockchainActions.jsに

          const SmartContractObj = new Web3EthContract(
            abi,
            CONFIG.CONTRACT_ADDRESS
          );

という記述がある。

引数として渡しているabiは誰ジェネでも説明されている

ABIとは「Application Binary Interface」の略で、Webアプリからコントラクトへアクセスするために必要な設定となり、HashLipsのWebアプリではabi.jsonというファイルで管理しています

https://crypto-code.jp/chapters/create-mint-dapp/update-setting#index_0-3-0

ん。これが原因っぽい気がする

abi.jsonを見ると、HashLipsデフォルトの記述が書かれていて、更新し忘れていることがわかった。やはりこれが原因だった

という訳で、ここを正しく更新することで問題なくMintできるところまで行けた

最後に

ABIに関しては、公式に仕様が書かれていた

Contract ABI Specification
https://solidity-jp.readthedocs.io/ja/latest/abi-spec.html

とりあえず、なんとなく進め方はわかったけど、実際のところ各工程で行っている作業に対して正しく理解できている場所は少ない気がする。

数こなしていけば自然と覚えるものもあれば、調べて納得して覚えるものもある。

これなんだっけ?となる部分を少しでも減らしていければと思う。

Cloud Native Days Tokyo 2022 にオンライン参加

11/21-22と、オフラインでは有明セントラルタワー。同時にオンラインでも開催された、Cloud NativeにフォーカスしたCloud Native Days Tokyo 2022 にオンラインで参加しました。

といっても、普通に平日の日中帯なので、リモートで業務をしながら流していた形にはなりますが。(流石にMTG中はミュート)

業務中ということもあるし、セッションも同時並行で行われていたこともあるので全然見れていません。
ありがたいことにセッション動画は残されているし、一部は資料も提供されているのでのんびりと見ていきたいところです。

その中でもちょっと気になるセッションを抜粋

エンジニア育成

クラウドネイティブ関連の技術はどんどん増えていくし、新しい考え方や考慮しないといけないことは日に日に増していく一方。
それに対して、そういった業務に巡り合う機会というのは必ずしも多いとは限らず、増えていく技術量・スピードに対して実戦経験を積むスピードは間に合わない。

また、それらの役割を担うエンジニアの裾野が広がらないので、一部のリードエンジニアに集中してしまうことも、更に裾野が広がらない状況を生んでしまい負のスパイラルが起きている。

これらに関するセッションがいくつかあった

クラウドネイティブエンジニアの育成について実践していること
https://event.cloudnativedays.jp/cndt2022/talks/1540
株式会社カサレアル 伊藤さん

SIerで実践!クラウドネイティブを普及させる取り組み
https://event.cloudnativedays.jp/cndt2022/talks/1527
TDCソフト株式会社 島田さん

カサレアルの伊藤さんのセッションは途中まで聞くことはできたのだが、すごい賛同したくなるような内容だったので、見返したい。

今後、技術を学ぶ上でどういう形で向き合っていく上で、一つの参考としたい。
もちろん、正解はそれぞれの場面によって異なるとしても。

Observability

Cloud Native。特にKubernetesやMicroServiceを考える上ではObservabilityは切り離せない考えと思う。
それはわかるが、そんなにこのあたりの案件をこなした経験があるわけではないので、ぶっちゃけ「ふーん」というところではあるんだけど、いざとなったときに「何も知りません」とは、流石に言えなくなってきている昨今。

何も知りません

ということで、このあたりは言葉の意味から把握しておきたいところ

実践!OpenTelemetry と OSS を使った Observability 基盤の構築
https://event.cloudnativedays.jp/cndt2022/talks/1571
逆井さん

しきい値監視からの卒業! Prometheus による機械学習を用いた異常検知アラートの実装
https://event.cloudnativedays.jp/cndt2022/talks/1558
GMO ペパボ株式会社 高橋さん

特に逆井さんの話は途中まで聞いていて、結構気になる単語が目白押しだったので再確認しておきたい。
このあたりは、Kubernetes関連だとどうしてもPrometheusが出てくる印象だなぁ

クラウドリフト

現実問題、一番ありがちな話としては既存システムのクラウドリフトだとは思う。その中でどうしていくのかを取り上げていたいくつかセッションがあった。

なぜ貴方のモダナイゼーションは評価されないのか ~傾向と対策~
https://event.cloudnativedays.jp/cndt2022/talks/1574
株式会社NTTデータ 菅原さん

【既存アプリをコンテナ化したいのじゃが】-Kubernetesへリフトする開発者が乗り越える壁-
https://event.cloudnativedays.jp/cndt2022/talks/1565
RedHat K.K. 北山さん

どれもろくに聞くことができなかったので、見ておかないと。。。

最後に

これ以外にも気になるセッションが目白押しだったのでなかなか面白かった。実際問題、これらを活用する案件がものすごい多いのか?という話になると、所属企業の方向性やらなんやらによって大きく変わるんだろう。

ただ、このあたりの知識や技術を追いかけておくということは、エンジニアにとっては当然のことになっていくと考えているし、そう考えるとやっぱり自分はまだまだだなと、日々痛感してしまう。

だからといって腐らず、前に進むには何をしていくか。

水星ちゃんを見習って前に進むしかないのか。

NFT Startup Conference by #NMO へ参加

最近の興味関心事の一つとして、Web3やNFTに関することがあります。
私自身の現在のスタンスとして、どっぷり使っているわけではありませんが、エンジニアとしての技術的側面や、投資対象。単純にコミュニティ活動と、複数の切り口で面白い可能性があるかな、と考えています。

今回の投稿では、11/19に行われた NFT Marketing Orchestra というコミュニティが主催したカンファレンスのご紹介です

NFT Startup Conference

カンファレンス自体はオンラインで開催され、事前登録者はZoomのウェビナー。当日参加はTwitterスペースで聞くことができ、Twitterのスペースはアーカイブも残されていますので、興味がある方は是非。

NFT Startup Conference by #NMO
https://twitter.com/i/spaces/1zqKVPgnLkVJB

プログラムとしては以下の内容です

13:00 ~ 14:00 エンジニア対談 syou ✕ むなかた ✕ けいすけ
14:00 ~ 15:00 対談① わふくジェネ SOLOさん
15:00 ~ 16:00 対談② しきぶちゃん BUSONさん
16:00 ~ 17:00 対談③ CryptoNinja ikehayaさん
17:00     終了

私はというと、事前登録をしておいたのでZoomで参加しましたが、ランニングしながら聞いていたのでほとんど画面は見ていません。が、多分音声のみだったのではないかと。
セミナーじゃなくて、基本的に対談でしたしね。

それぞれの対談で思うこと、考えさせられることはありましたが、せっかくなのでエンジニア対談で思うところを。

エンジニア対談で思うこと

私自身、Solidityのコードを対価を頂く形で書いたことはなく、あくまでチュートリアルレベルなので、このお三方のような界隈で活躍されている人と比較はできないので、あくまで個人的な感想となります。

NFT。特にジェネラティブNFT関係のエンジニアリングでいうと、今回の対談の中でも出てきていますが、大きく3つの工程があります。

  • 画像生成
  • スマートコントラクト
  • Mintサイトの制作

CryptoZombieをやっているときはそれほど意識しませんでしたが、HashLipsを使うと上記3つが用意されているのでこの点はすごい認識・イメージはしやすかったです。

ただ、基本的にどれもベースとなるものは存在していて、結局のところどういう「画像を生成したいのか?」と、「どういう条件で販売したいのか」が決まれば結構なんとかなりそうな印象です。

あー、でもどこに画像を置くのかとか選択肢がいくつかあって、それらの選択肢の中から何を選んでもらうのか?とか考え始めると大変なのかな。

と言うかもっと言ってしまうと、大抵はエンジニアリングが大変というよりもコミュニケーションが大変なんでしょうね。

いずれにしても、作るものとしてのサイズ感は、凝ったことをしなければ、比較的ボイラープレートがある以上はそこまで大きくならない印象です。

チーム開発と個人開発

昨今のサービスやアプリケーションはどうしてもサイズが大きくなってしまうのでチーム開発が基本だと考えています。

チーム開発では、昔ながらのウォーターフォールで進めていったり、アジャイル的にスクラムを組んでみたりと色々な試行錯誤が繰り返されてきています。

できるエンジニアが一人で組んでしまったほうが、品質的にも安定するというのはあるのでしょうが、作るものの仕様の整理だったり業務知識。また、純粋な作業ボリュームと市場に投入したいスピード感から考えるとチーム開発になる認識です。

現在のNFTのように、比較的個人やコミュニティ手動で動いている場合は、そのWeb3的な考え方からコントラクトは共有ではなく独自が思想的にも好まれます。
そして、多くのギミックを入れられるほど資金が潤沢ではないので、ちょうど個人エンジニアで受けられるサイズ感に収まるのではないかと。

これから

ただし、多くのエンジニアがこれらの技術を習得し、ジェネレラクティブNFTの構築を行うことができたとしても、それを専業でやっていくほどのNFT発行プロジェクト量やエンジニアの需要を賄えるだけの金銭的な余裕も厳しいのでは。

そう考えると、今の私のように趣味で触っているのではなく、これだけでご飯を食べていこうとする道は結構厳しそう。

あるとすれば、自分自身がプロジェクトを立ち上げることによって、エンジニアと言うよりはファウンダーとして成り立たせるのが一番可能性としては高いかもしれない、と感じた。

実際のところ、NFTと言う単独な使い道以外にもスマートコントラクトの活用幅はこれから増えていく可能性がある。
NFTはブロックチェーンやSolidityという枠組みの中のあくまで一つの活用事例として考えて、他の分野も含めた形での目線を持っていたほうがいいかな、と考えている。

もちろん、NFTの活用方法が現在主力のPFPから大きく変わることも考えられ、その際にはNFT関連だけで充分な数のエンジニアを賄える分量が出てくるかもしれない。

いずれにしても、どうなっていくか、楽しみな分野ですね。

まー、そんなこと考えているよりも、手を動かせよって意見には頭が上がらないところではあるけれど。

walkenで垢バン食らった件とwalk to earnに関して

タイトルどおりですが、walkenという walk to earn のアプリ。
平たく言うと、歩くことで稼ぐことができるという類のアプリをしばらく使っていたのですが、チート認定されて使えなくなりました。

というわけで、経緯とその考察。更に他の walk to earn アプリに関して書いてみようと思います。

walken で垢バン食らった経緯と対応

どこでこのアプリの存在を知ったのかはうろ覚えですが、すでにいくつか walk to earn を試していたので軽い気持ちでインストールしました。

walkenでは、比較的可愛らしいキャラクターを歩くことで育てていき、育てたキャラクターをユーザー同士でバトルすることができます。

先週から、急にそれまででは考えられないような強キャラクターが毎回対戦相手として出てくるようになり、何が起きているのかさっぱり。。。

そしたら、どうやらこれはチート扱いされているという言及を頂きました

むぅ。。。って完全にタイミング的にもアクアラインマラソン走ったことがきっかけか。。。確かにその日の歩数は5万は超えている。

と言うか、walk to earn なのに、マラソンで垢BANとか。ぐぬぬ

サポートへ連絡

サポートへ連絡という話だったので、walkenのDiscordに入って確認するとメールで問い合わせろと返事が帰ってきたのでメールで問い合わせ。

言われた通り、ヘルスケアアプリとかのスクリーンショットを送った結果

見事に玉砕しました。

なんやねん

考察

例えば、フルマラソンとか極端な例ではあるんだけど、walkenの場合はAppleのヘルスケアデータへアクセスして歩数を持ってきてしまうので、ユーザ側でその情報をアプリ側に渡さないということができません。

歩数がアプリを起動している間だけカウントされるとかであればユーザー側でやりようがあると思うのですが、これはどうしようもないです。

つまり、walkenはマラソンランナーが使うべきではないアプリとなります。
なぜなら、それまで育てていたキャラクターなどが無駄になるのではっきり言って時間の無駄です。

ただ、開発者の立場で考えると、仮想通貨というお金が絡む以上、何かしらのチート対策が必要となるのはわかります。
ヘルスケアアプリでは、歩数以外にもワークアウトの実績や距離に関する情報も取れると思うので、それらを踏まえて判断する形が良いのではないかと思います。

また、これらの長距離を走る人は、大抵ワークアウト用のアプリを入れています。
私であれば、Nike Run Club ですね。
これらのアプリと連携させることができれば、チート判別の精度は増すのではないでしょうか?

walk to earn で考えると、ランニングやマラソンを趣味としている人が、その趣味を活かせると考えて始めることにもなると思うと、現在の作りは残念で仕方がありません。

その他のアプリに関して

歩数をカウントする系統では、それ以外には、SweatCoinやMiles。DQウォークがを使っています。

SweatCoin

フルマラソン前後からちょっと歩数のカウント。特にBoostの動きが怪しいと思うようになりましたが、問題なく使えています。

こちらは今のところフルマラソンに耐えられるようですね。

Miles

そもそも距離の計測が最近まともにできていません。
以前は、それなりの精度でランニングなどを記録してくれていたのですが、ここ最近はそもそもランニングしても走ったと認知してくれなくなっています。

なんだか最近、やたらと広告も多くなってきたのと、使っていてもそれほどいいMileの利用先が無いのでそろそろ削除を検討し始めてます。

BitWalk、トリマ

この2つは一時期いれていましたが、広告の閲覧が前提となっていて、アプリで定められた出金の条件を満たす前に消耗するな、と考えてすでに削除済みです。

あくまで、ついでにコインを貯めることができたらいいよね!って程度の気持ちなので、これに必死になってしまうのは本末転倒ですし。

最後に

なんというか、ものすごっく気分悪いですが、エンジニアとして似たような人を産まないようなものづくりをしていかないといけないな、と考えました。

Goerli テストネットワークでテストする準備

以前、cryptozombies でNFTやSolidityに関してのチュートリアル的な事をしたものの、それ以来全く触っていなかったNFT周りを改めて触ってみています。

今回は、その中で開発したコントラクトをテストするテストネットワークの一つ、Goerliテストネットを使ってみた話です。

テストネットワーク

今年の9月に実施された、 Ethereum 上の The Merge。
これ以降、それまで使えていたKiln、Ropsten、Rinkebyは廃止され、現状でテストネットワークとしてはGoerliとSepoliaが用意されている形となります。

The Merge以前の学習コンテンツやチュートリアルでは、Rinkebyなどのテストネットワークを採用されているものが多いので、注意が必要となります。

といっても、基本的な扱いが変わるわけではないので簡単に説明します。

Alchemyの登録

テストネットワークでコントラクトを動かすために必要となるGoerliETHを手に入れるために、事前にAlchemyというサービスのアカウントを作成しておきます。

Alchemy
https://www.alchemy.com/

「Get started for free」から、適当に入力をしていくことでアカウントを作成可能です。

途中で、支払い情報などを入力する項目が出てきますが、特に入力せずとも問題ありません。

faucetでGoerliETHをリクエストする

GoerliETHのリクエストは下記サイトにて行います

GOERLI FAUCET
https://goerlifaucet.com/

右上にある「Alchemy Login」から、先程作成したAlchemyアカウントでログインを行うと

アドレスの入力とボタンが活性化されるので、ウォレットのアドレスを入力して「Send Me ETH」ボタンを押下します。

押した瞬間、私の場合はこんな趣味の悪いページが出てきました。。。

ほんと、なんというか変な罠を踏んでしまったかと思いました。。左上にバツボタンがあるので閉じれば問題ありません。

ウォレットで確認

無事にウォレットにGoerliETHが届いていました。

ETHの送金は、24時間に1度可能な形で、送金金額も特に変更はできませんでした。
それくらいのボリュームでテストをしなさいということなんでしょうか?
フリープランだからかな?

ガス代高すぎ?

ちなみに、試しにデプロイしてみようとしたら。。。

まさかの資金不足。

なんか随分とガス代が高い気がする?
そもそもテストネットのガス代って何で決まるんだろうか?
メインネットと同様に、テストネットワークの混雑度によって決まるのだとすると、GoerliとSepoliaでどちらが空いているかとか、考えたほうがいいのかな?

fnm install で os error 5 になる

ちょっと試してみたいことがあって、node.jsの古いバージョンを入れることに。

あまりバージョンをいじることがないんだけど、ローカル環境のバージョンマネージャ何を使っていたんだっけ。。。と考えてfnmを使っていることを思い出した。

fnm
https://github.com/Schniz/fnm

fnmを選んだ当初はそれほど意識はしていなかったんだけど、考えてみるとこれ、RUSTで書かれているんだよな、と。
RUSTはRUSTで元C++エンジニアとしてはいじってみたくなるんだけど、どこで使ったものかということで二の足を踏んでいるんだよな。

閑話休題

さて、目的のfnmを使ってinstallを試みたのだが

> fnm install 14.18.2
Installing Node v14.18.2 (x64)
error: Can't download the requested binary: アクセスが拒否されました。 (os error 5)

あれ?エラーになった

管理者権限はついているので問題はないはずなんだけど?ということで調べてみると、fnmではないけど似た事例が

Thank you for generating this report. It does look to me like a probable anti-virus problem.

fresh install fails on Windows: “error: could not rename component file from ‘… \rust-docs\share/doc/rust/html’ …” #1912
https://github.com/rust-lang/rustup/issues/1912

んー。AntiVirus?

ということで、手元のカスペルスキーを一時停止してみると

>fnm install 14.18.2
Installing Node v14.18.2 (x64)

>node -v
v18.1.0

>fnm use 14.18.2
Using Node v14.18.2

>node -v
v14.18.2

ということで問題なくインストールできました。

参照した先もRustのページだったので、Windows+Rust+ダウンロード処理でアンチウィルスのリアルタイムスキャンが影響を受けているということなんだろうか?

ぐぬぬ。先が思いやられる

アクアラインマラソンをデータで振り返る

2年に1度の大会であるアクアラインマラソン。
前回はコロナで中止となったということもあって4年ぶりの開催となりました。
ここいらで、大会全体の振り返りと、個人としての振り返りをしてみたいと思います

大会概要

コース

コースに関しては大会HPに記載されています

コース紹介
https://chiba-aqualine-marathon.com/2022/info/course/

見ての通り、大会名でもあるアクアラインをフル/ハーフともに走るために前半戦で走ることになります。

逆に言うと、後半戦は市街地を走ることになり、なんというか、風景的な目玉は殆どない状態になってモチベーション的には結構厳しいコースとなっています。

特に、後半34km、38kmで訪れる上り坂は、満身創痍の体と心を平気でへし折ってきます。。。
特に最後の上りは、ほとんどのランナーは歩いてましたね

応援

それでも、市街地を走るということの利点として、街路の応援が結構あります。
特に地元の小学生や幼稚園・保育所の子供たちが応援してくれるのは、「ちょっと無様な姿を見せられないな!」って気持ちにさせてくれます。

いや、結局のところ後半は無様な姿を晒したんですけどね・・・。

そして、前半戦で調子に乗って「応援ありがとう!」って手を振って走ったりして余計に体力を使ってしまったような気がしないでも。。。

記録

個人の記録

開催結果の概要が公開されていました

https://chiba-aqualine-marathon.com/2022/img/news/221111.pdf

こちらを見ると、フルマラソンは完走率90.40%ということもあって、思ったより高いです。
そして、私がリタイアした初回大会の記録も書かれていましたが73.8%となっています。

他のマラソン大会の完走率はどうなんだろう・・・?と調べてみると、大会によってまちまちですが85%~95%くらいが多いようですね。

そう考えると、私がリタイアした初回大会は、やはり過酷な大会だったと言うことなんでしょう。
当日は11月の割に暑く、更に給食所には栄養ドリンク以外、食料が残っていないような形で運営側も対応が充分でなかった印象ですし。

個人の記録

大会として計測タグで測ってくれていたのがグロスタイムとネットタイムということで、キロ毎のラップタイムは手元のスマホ頼みになります。
ちょっとこの点は改善して欲しいですね。。。。
せめて関門ごとには出してもイイのでは。。。

1~10km平均5分39秒
11~20km平均5分25秒
21~30km平均5分16秒
31~41km平均6分38秒

見てわかる通り、前半はそれなりにいいペースで進んでいます。
今回、ペースを考える上で一つの目安にしたのは5:20/kmのペースです。

アクアライン高速道路や、ハーフマラソンコースまではとても気持ちよく走ることが出来、本番はやっぱり違うぜ!マラソン最高だぜ!って思いながら走っていました

右腿に違和感

27kmあたりを過ぎた頃、右腿が少し張ってくるのを感じました。

タイムを見てみると、22kmを過ぎたあたりから、気持ちよくなってペースが格段に上がってしまっています。22km~28kmまでの平均は5分10秒前後。それまでペースをいい感じに調整していたのですが、ハーフマラソンの選手と分かれてから急にペースを上げてしまったようです。

これまでのランニングでの経験で考えると、足がつるのはどちらかといえば左のふくらはぎが最初という認識でいました。次に右のふくらはぎですね。

そういう意味では、腿が最初に来るというのはちょっと以外。
しかし、まだ27km。足攣り対策用に持っているコムレケアゼリーは30kmあたりを目安にしていたのでちょっと早くて最後まで持つのか不安が残りますが、ここで使うことに。

そして、若干ペースを落とします。

両足攣りかける

34km前後になると、両足ともに張りが感じられ、38kmすぎにはついに歩くという選択をしてしまいます。
このあたり、張りを感じたら一度止まって屈伸等をするべきかどうか悩んだのですが、完全に止まってしまうと動き出すのに、精神的にきつくなりそうと感じたので歩くことに。

この判断が正しかったかどうかはわからないですが、歩くことで張りも収まってきてまた走る。そして歩くということを繰り返すようになります。

このあたりになると、完全に市街地なので沿道には応援の人々がいっぱいいて、正直無様な姿を晒すのが辛いのですが、それよりも足が攣りかけている方がきついのでどうしようもないです。

逆に言うと、体力的な面では若干の余裕がありました。
これはひとえに、事前の準備でしっかりと携行食を持っていた事と、各所にある給水所で必ず一口はスポーツドリンクを飲むなどの対応をしていたことが功を奏しているのだと思います。

今後の対策

体力的な面で考えれば、比較的なんとかなりそうな自信は持つことが出来ました。
もちろん、今回は歩いたりしている面もあるので、実際に走り切る体力があるのか?は不安は残りますが、まず対策をしなければならないのは走り切る肉体を作ることが第一ですね。

足を攣りづらくするようなトレーニングはどういうことをするべきなのか。

2時間29分のランニングドクターが教える「足つり」撃退のための4つのポイント
https://runnet.jp/project/comurecare201609/

こちらを見ると、対策としては以下が挙げられています

  1. トレーニングにLSDを組み込む
  2. お尻やハムストリングスを使ったランニングフォーム
  3. レース前・中は、水分+電解質をしっかり補給
  4. レースには芍薬甘草湯しゃくやくかんぞうとうを持って走る

って、よく見ると、今回持っていったコムレケアの広告じゃないか!って気もしますが。

対策の3,4は出来ていたのではないかと。4に関しては、1個ではなく2個持っていっておけばよかったという反省はありますが、そもそもの土台としてはやはり1,2のトレーニングですね。

トレーニングとして紹介されているLSDはちょっと苦手です。
と言うのは、走り始めるとどうしてもペースを上げてしまうからなんですよね。

ここで書いてある「目安は”不快”に感じるくらいゆっくり、最低でも90分以上走り続ける」というのはなかなか難しいです。

“ゆっくり”と言うのは、絶対的な指標ではなく相対的な指標となるので、90分以上走り続けるというトレーニングを考えるのであればそれなりに早いペースでも90分以上走り続ければイイのではないか?と思ってしまいます。

ただ、実はこの”ゆっくり走る”ということ自体が重要であるならば、しっかりとそれに取り組まないと行けないですね。

LSDや、その他トレーニングに関してはもうちょっとしっかりと研究せねば・・・。

最後に

こうやって色々と振り返ってみると、まだまだ良いタイムを残すことができそうです。
それは、やはり成長を実感することができるということですし、マラソンは年をとっても長く楽しめる趣味として良いように感じます。

次にどの大会に出場するのかは未定ですが、今回完走することが出来たことで一つ自信をつけることが出来たので、挑戦を続けていきたいと考えています。

フルマラソン初完走に向けて準備したこと

先日のアクアラインマラソンから1週間立ちました。
まだ、右足の腿が張っていて、曲げると痛い状態なのですが徐々に走り始めています。
しばらくはリカバリーランで様子を見る形ですね。

10年前にガス欠で走りきれなかったフルマラソン。今回、走りきれたということで、今回の準備に関して記録したいと思います

トレーニング

正直、特にトレーニングメニューと言うかたちでこれまで組んでいなかったのですが、たまたま Nike Run Club アプリでマラソン向けトレーニングプランを見つけたので、こちらに沿った形で進めました。

こちらのプランは最長18週間。できれば12週間は続けることを推奨しているのですが、気がついたときにはすでに大会まで10週間近い状態。
とは言え、なにかに寄り添って勧めたいと考えていたので、こちらに取り組みました。

1週間の中の走る内容の組み立てだったり、メンタル面でのコラムだったり、非常に参考になりました。

特に新しい1週間が始まる際のコーチからの言葉や、最後の週のコーチからのメッセージ。ちょっとやり遂げた感と相まってうるっときてしまいました。
初のフルマラソンに挑むにあたってトレーニングプランを考える上では、一つの参考になるのではないかと思います。

なお、ガイドランなどを正しく機能させるには、アプリケーションの言語設定を英語にすることを強くおすすめします。
日本語状態では正常にガイドランが働きません。。。

当日の装備

シューズ

ランニングシューズは今回、Nikeのペガサス39を使いました。

Nike エアズーム ペガサス38
https://www.nike.com/jp/t/%E3%83%8A%E3%82%A4%E3%82%AD-%E3%82%A8%E3%82%A2-%E3%82%BA%E3%83%BC%E3%83%A0-%E3%83%9A%E3%82%AC%E3%82%B5%E3%82%B9-38-%E3%83%AD%E3%83%BC%E3%83%89-%E3%83%A9%E3%83%B3%E3%83%8B%E3%83%B3%E3%82%B0%E3%82%B7%E3%83%A5%E3%83%BC%E3%82%BA-ttBGqz

今年の春頃までは、同じくNikeのインヴィンシブルランを愛用していたのですが、すでに走行距離も2100kmを超えていたこともあり、新調。

最初は厚底のインヴィンシブルランとの違いに戸惑ったりもしたのですが、徐々に慣れていきました。
正直いうと、ペガサスよりもインヴィンシブルランのほうが反発が強くて早く走れそうな気もするのですが、トレーニング観点で言えばペガサスのほうが鍛えられるのかな?
このあたりは、正直、もう少し勉強が必要ですね。

ウェストポーチ

後述する携行品を入れることができるようなウェストポーチが必要になります。
日常的なランニングとしてはこちらを使用しておりました

ただ、正直ボトルホルダーがうまく機能させられずに、ほとんどスマホを入れるのみ。
そういう意味では、ボトル用の場所を有効活用できていないのでちょっとこれを本番で使うのはもったいないかな・・・と正直思っていたので、直前ではありますがレース4日前に急遽別のものを購入。

ちょっと高かったですが。。。当日はこちらのパーゴワークスさんのものを使いました。
全面と背面それぞれにものを入れることができるので、走っている間は背面にスマホを入れ、前面部分に携行品を入れました。

収納量としても意外と多く入れることが出来たので十分。
レース直前に購入したのはちょっと一か八かの博打感がありましたが、乗り切ることが出来ました。

ペットボトルも入れられそうなので、日常的なランニングでも活用していくことが出来たらと思っています

服装

服装に関しては、今回は特に新調はせず、10年ほど前に購入した上下のタイツ、ランニングパンツ、ランニング用Tシャツで臨みました。

結果としてみると、全身真っ黒みたいな装いだったんですよね。

大会の記念品として送られてきた爽やかなブルーのTシャツを着るという選択肢もあったのですが、これまで日常的なトレーニングをともに乗り越えてきたTシャツで乗り越えたい!と思ってあえてこちらを選択。

ただ、次回はもう少し色味のあるシャツを物色したいですね。

今のランニングに使っているTシャツもだいぶ色あせてきてしまっているので、次回大会を何にするかはさておき、色々と見て回りたいです。

携行品

前にフルマラソン走った際に、エイドステーションの配給食を頼りにした結果、何も残っておらずにガス欠になった痛い経験を踏まえ、しっかりと準備することに。

準備すると言っても自分で決めることが出来ないので、色々とWebを回って、最終的にこちらの携行品を持って臨みました

スタート前の栄養補給

スタートに合わせてしっかりとしたパフォーマンスを出すためにはスタート前の影響補給も大事、ということで、こちらを30分ほど前に接種するように持っておきました

ところが、スタート時間をうっかり間違え。。。30分前どころか1時間くらい前に接種してしまうハプニング(?)が。
一応、予備の栄養補給に粉末状のものも持っていたので、30分前にはこちらを飲みました。
ちゃんと時間は確認しましょう。。。

走行中の栄養補給

走行中の栄養補給にはザバスのピットインジェルというものを利用しました。
非常に小さいサイズのジェルになりますが、1本で170kcalと凝縮されております。

今回私が購入したのはこちらのピーチ味になりますが、かなり味が濃かったです。
こちらを3本保持して、15km、25km、35km地点で補給しました。

糖分補給

低血糖の対策としては、ブドウ糖を持っておきました

日常的なランニングでも、30kmを超えるような距離を走ると頭がぼーっとしてきます。
エネルギージェルも持って入るのですが、ブドウ糖は大きさ的にも小さいので、ウェストポーチに入れられるだけ持っていきました。

足攣り対策

足攣りの対策にはコムレケアゼリーを1本持っていきました。

トレーニング中も、35km走ると足がつったりしているので、目安として30km越えたあたりで接種しようと考えていたのですが、結果としては今回28km前後で足に違和感を感じたので接種。

なんとかその後を乗り切ったように見えたのですが最終的には38km~39kmで足がピキピキいい出してしまいました。

足が完全につるところまではいかなかったですが、もう1本持っていけばよかったかも・・・?

反省点・改善点

携行品に関しては、概ね問題なかったと思いますが、足攣り対策グッズは1個ではなく2個もって行けばよかったなぁと走りながら思いました。

そもそもコムレケアゼリーが効いているのかどうかは実感し辛い部分ではありますが、当初想定よりも早くに接種せざるを得なかったというのが、最終的に歩いてしまう時間を生んで、走り続けることが出来なかった敗因な気もします。

それでも、今回なんとか完走することが出来たのでとても良かった。

そして、今までずっと自分はフルマラソンを完走することができるのか?ということに対して不安を抱いていたので、一つの自信になったと思います。
今度は、あるかずに走りきり、4時間を切るということを着実に実現していきたいです。

楽しくなってきたぞ。

10年前のリベンジ達成!

前々からこのブログでも書いてきましたが、今日はアクアラインマラソン!
10年前、第1回大会で悔しくも初マラソン・リタイアの苦い記憶のある大会です。

前回走ったときもそうでしたが、普段は車しか走ることが出来ないアクアラインを走る。
海の上を走るなんて経験はなかなかできません。

途中、海上自衛隊の船舶も応援してくれるなど、なかなかない経験がここにはありますね。

そして一方、このマラソンの一番の楽しみであるアクアラインを走るという行為は、ハーフマラソンとのコースを兼ねているせいもあって序盤です。

中盤から後半にかけては基本的に市街地を走っていくような感じ。

更には38kmあたりからアップダウンの激しいコースレイアウトということもあり・・・

足が持たずつり気味になりながら、歩いたり走ったりを繰り返す始末。

それでもなんとかゴールすることは出来ました

こちらは完走賞のメダル。10年前はこれを手にすることが出来なかったので、とても嬉しいです。

タイムはと言うと、38kmすぎから足がつり気味になったこともあり大失速。
結果的にはグロスで4:08:30。ネットで4:05:17ということで、惜しくもサブフォーならず。

一つの目標だった完走することが出来たのと、自分の実力を知ることが出来たので良しとしましょう。
40kmのタイムが10分くらいなので、ここさえなんとかなれば。。という気もしますが、それも合わせて実力ですね。

今回の準備や結果その他諸々、振り返るべき内容は多いですが、ひとまず今日はお疲れ様でした!ということで寝ますw

盗難対策のためにウォレットを分けた

1年ほど前から仮想通貨を触り始めています。

BitCoinやEthを始め、あれこれ勉強も兼ねて触っているのですが、少し前からNFTを触っているのですが、ウォレットからNFTが盗まれるという事例があちこち。

気持ち的に、自分が罠にかかるというのは無いんじゃないか?と思って入るものの、そう思っている人間が一番引っかかるってこともありそうだな、と思い、ウォレットを分けることにした。

Brave

Metamskのウォレットを分けるには基本的にはChromeで別プロファイルを作って、新規のMetamaskウォレットを作成する形。

私のChromeにはすでにメイン用、ゲーム用(Dai用)、テスト用みたいなプロファイルが作ってある。
どーせだったらということで、ブラウザから分けてみることにした。
というわけでBraveですよ

Brave
https://brave.com/ja/

Braveはセキュリティ。特に個人情報保護に対しての尖った機能を要しているブラウザ。ベースとしてはChroniumなのでChromeと基本的には変わらなくMetamaskも対応している。

そして、広告のブロッキング機能がデフォルトで働いているため、多くの広告が表示されないというなかなか面白い体験を提供してくれる

ChromeでYahooを表示すると右側に広告が入ってくるのだが、

Braveで表示すると

見事に広告を消してくれる。

更に面白いのが、Braveでも広告は出ることがあるのだが、それはBraveに対しての広告であり、Webページに対しての広告ではないという点。
そして、Braveを使うと、その広告料が仮想通貨としてユーザの利用度に応じて支払われる点だ。

日本ではbitFlyerと連携して仮想通貨BATを獲得することが出来ます。
どれくらい使えば、どれくらい手に入るのかな?は気になるところですが、純粋に広告がブロックされるだけでも結構いいかも。

一方で、Chromeと比べると使いづらい点もいくつか見受けられます。
特にパスワードマネージャに関してはちょっといまいちで、URLで覚えているせいなのか、パラメータがついているとうまく反応してくれません。
このあたりはもう少し試行錯誤が必要になりそう

購入用ウォレットと保管用ウォレット

さて、そんなこんなで保管用ウォレットをBraveに追加したわけですが、実際のところ運用は少し悩みどころがあります。

基本運用

購入用ウォレットにETHを入れておき、Opensea等での売買はこちらで実施。
NFTなどを購入した際には保管用ウォレットに転送します。

売却時には保管用ウォレットから購入用ウォレットにNFTを転送する形で基本的には購入用ウォレットしかサイトへの接続はしないという形ですね

ユーティリティ

トレードという観点で考えるのであれば上記運用で事足りるのですが、例えば「このNFTを持っていれば~がもらえる」とか、「Discordの特定チャネルに入るにはこのNFTが必要」のようなユーティリティNFT。

上記のような場合には、NFTが入っている保管用ウォレットをサイトに接続する必要が生じます。
こちらに関しては、基本的に権限に注意数形を取れば。。。多分、大丈夫

ウォレットのアドレスをもとにWLが配られる場合

厄介なのが、特定のNFTを持っていることを条件にWLが配られたりするパターンですね。
この場合、そのウォレットで購入する必要が生じます。
ただ、そのNFTは保管用ウォレットに入っているわけなので、WLは保管用ウォレットにひも付き、保管用ウォレットで売買をする形になってしまいます。

こればっかりは正直気をつけるという、情けない対策手段しか無いんですよね。。。

いずれにしても、注意を払っておくに越したことはないので、みなさんもお気をつけくださいませ