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

Deno Fresh環境の構築とチュートリアル

少し前になるが、DenoにおけるフロントエンドWeb開発フレームワークとしてFreshがリリースされている

https://fresh.deno.dev/

今月のWEB+DB Press の裏表紙を見たら、Denoが広告を打っていて超びっくりした

せっかくなのでさわりとして、いくつかの情報をまとめた

Denoとは

Node.js の作者であるライアン・ダール氏によって作成された、Node.jsにおける反省点を踏まえて作られたJavaScript 及び TypeScript のランタイム環境

Node.js環境下では、TypeScriptはトランスパイラを通したりビルドしたりする必要があるがDenoはTypeScriptをそのまま実行することができるようになります。

特にNode.jsと比較して強化されているのはセキュリティ周りです。
Denoはデフォルトでサンドボックス内で動作する形を取っているため、明示的にアクセスを許可してあげないとファイルシステムなどへのアクセスの確認が頻発したりします。

Fresh

TypeScriptのランタイム環境としてのDenoは、それはそれでTypeScript使いに取ってはいいものに見えましたが、Webフロントエンド開発は別に用意する必要がありました。

ところが、今年の7月にDeno用のフルスタックWebフレームワークとしてFreshをリリースしました

ちなみに、8/16現在でバージョンは1.0.2
できたてホヤホヤですな

Freshの特徴としては Islands Architecture を採用しており極力SSRで処理を行う形でクライアント側でのJavaScript配信を行わないような思想のようです

Islands Architecture
https://www.patterns.dev/posts/islands-architecture/

環境構築とチュートリアル

せっかくなので環境はDockerを使ってやろうと。
このあたりは、あちこち参考にさせていただきながらやっているのでツッコミどころは満載かも知れないが、誰かの役に立てればと思いDockerFileを公開する

FROM debian:stable-slim

WORKDIR /var/www/html

RUN apt-get -qq update \
  && apt-get -qq -y install curl zip unzip \
  && curl -fsSL https://deno.land/x/install/install.sh | sh \
  && apt-get -qq remove curl zip unzip \
  && apt-get -qq remove --purge -y curl zip unzip \
  && apt-get -qq -y autoremove \
  && apt-get -qq clean \
  && echo 'export DENO_INSTALL="/root/.deno"' >> ~/.bash_profile \
  && echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bash_profile

CMD ["/bin/bash", "-c", "source ~/.bash_profile && bash"]

チュートリアルに関しては公式を参照

Getting Started
https://fresh.deno.dev/docs/getting-started

Denoでは、Deploy先としてDeno Deployというエッジ環境を提供してくれているので、Githubと連携させたりしてPush=Deployの環境の構築も簡単にできた。

チュートリアルがうまくいかない?

Deno の Web フレームワーク Fresh チュートリアル
https://zenn.dev/azukiazusa/articles/fresh-tutorial

チュートリアルを用意してくれている人もいたので、こちらもやってみた。
ただ、スタイルの適用が何故かうまく行ってくれずに困っている

https://krote–ample-resh.deno.dev/blog

このあたり、フロントエンド開発はからっきしなので、ちょっと詰まってしまったなぁ。
開発者ツールで見る限りでは、想定した通りのclassが割り当てられているようにみえるんだけど。。。

まだまだですねぇ
教えて、偉い人。

Gartner先進技術ハイプ・サイクルと社内タレントマーケットプレイス

Gartnerが出しているハイプ・サイクル。
これの先進技術に関するものが公開されていました

Gartner Identifies Key Emerging Technologies Expanding Immersive Experiences, Accelerating AI Automation and Optimizing Technologist Delivery
https://www.gartner.com/en/newsroom/press-releases/2022-08-10-gartner-identifies-key-emerging-technologies-expanding-immersive-experiences-accelerating-ai-automation-and-optimizing-technologist-delivery

先進技術ということもあって、そのどれもが黎明期~過度な期待のピーク期という扱い。これら技術が幻滅期やそれ以降のフェーズへの生き残りをかけた戦いがこれから始まるわけですね。

先陣を切っているものが「Cloud Data Ecosystems」ということで、若干他のラインナップからするとここに並ぶのかな?という気がしないでもないです。
NFTに関しては、あと2~5年で安定期に入るとGartnerは予想しているんですね。

どの技術が実際に今後のキーとなるのか、ハイプ・サイクルからそれを導き出すというのはあまり現実的ではないかもしれないけれど、少なくともここに載っている内容に関しては、ある程度何を指し示しているのか、ということに関しては知っておくに越したことはないと考えている。

そういう意味で、ちょっと気になったものとしては「Internal Talent Marketplaces」というキーワードだ。

Internal Talent Marketplaces

正直あまり聞き慣れていない言葉ではあった。
デロイトのページがよく書かれているので読んでみた

社内に労働マーケットの考え方や手法を持ち込み、人材のキャリアやスキルを可視化・拡張し、柔軟に配置転換をしながら育成、活用するマネジメント・プラットフォームのあり方

https://www2.deloitte.com/jp/ja/pages/human-capital/articles/hcm/internal-talent-marketplace.html

タレントマネジメントは、ここ数年で随分といろいろな企業で話を聞くようになった。私が所属している会社でも、タレントマネジメントツールを導入している。
一方で、タレントマネジメントがちゃんとできているのか?という点や、そもそもなんでタレントマネジメントが必要なのか?ということに対して有効な動きを取ることができていないのが実情でもあるように感じる。

実際のところ、社内マーケットプレイスというものはどこまで有効なのだろうか?

プロジェクト単位にメンバーを公募。つまり社内のタレントマーケットから探し出して~というと、連続性のないプロジェクトであればいいかもしれないが、連続性のあるプロジェクト・業務の場合、どうしてもこれまでの業務知識なり経験というものがあると嬉しい状態になる。

もちろん、メンバーを固定化させたほうがいいというわけではなく、門出は開いておき流動性は持たせたい。
ただ、流動性をもたせ過ぎるとオンボーディングが大変になる。

また、全部のプロジェクトが同じ期間で区切りがあるなんてことはないだろうから、タイミングにも左右されるようになるんだろう。

一方で、新しいことへ挑戦するという風土みたいなものは培われるだろう。
また、そういった高いメンタリティでプロジェクトへJOINするのであれば、実際のところそこまで大きな問題にはならないのかもしれない。

つまりは、それだけ成熟した。レベルの高い組織であれば成り立つということなのかな?とも思った。全員売れ残りみたいな社内マーケットになり、有用なメンバーは全部外部調達(外注)なんてシャレにならないよ。

タレントマネジメント

社内マーケットプレイスに到達するのは一足飛びには難しいかもしれないけど、タレントマネジメントとして、自分が培った技術や知識を可視化して、それを自分が従事したいプロジェクトへアピールしていくという考え方はとても大事だとは思う。

日々の業務におわれていると、なかなか今この業務が自分のなんのスキルアップにつながる可能性があるだろうか?ということに関しては埋もれていってしまう。

また、それらを意識して仕事をするのとしないのとでは、明確にスキルアップ速度が異なると考えている。
そういう意味でも、もう少ししっかりとタレントマネジメントに関しては実施していく必要があるだろうな、と考えた。

なんとか乗り切った!

前回の投稿でお伝えした通り、妻がコロナ陽性となったわけですが、その後、3男が発熱、陽性。残った子供と私で抗原検査キットを試してみたところ、私以外が全員陽性という状態でした。

もはや、家の中は魔界!

というわけで、この1週間は基本的に私が食事当番。
(陽性者が作ったものを食べるのは流石にアウトだろうと)
できるだけ隔離する意味も含めて、台所に私以外が立ち入ること禁止にしたので、必然的に洗い物だとかそういった系統は私が担当。
子供たちの相手は、熱が下がった妻がやっていくというフォーメーション

買い物も、基本的に外に出ていいのは私だけなので私が担当。。。

何度となく、完全に隔離できていないのでいずれは私もかかるのだろうと思っていましたが、今日、もう一度抗原検査キットで検査しても陰性を継続していました。

熱は、もはや誰もない状態であり、濃厚接触者としての隔離期間もなんとか明けることなので、ようやく明日から出社することができそうです。
1週間、まるっと休んでしまった。。。

しかし、今のコロナウィルスは感染力が強いという話だったけど、意外となんとかなるもんだなぁ。。。と。
3月末に感染したことで、免疫みたいなものがついているからなんとかなったのだろうか?
でも、娘は今回2回目だし、よくわかりませんね。。。

再びコロナ感染(家族)

第7波ということで、日々感染者数が記録を樹立しているわけですが、我が家でも2回目となる感染となりました。
今回は妻です。

ぶっちゃけ、最近私が都内に毎日出勤しているので、一番確率的に高いのは私経由ではあるんでしょうけれど、現時点では症状が出ているのは妻のみ。

簡易的に隔離はしているものの、これから家庭内感染という形で広がっていかないかが心配です。
3月末に私が罹患した際は、基本的に私は部屋にこもっている形で家事育児は妻に任せている形でしたが、今回は私がその役目を担わないと行けないということで。。。大変です。

今日はとりあえず休暇を頂いたので対応できましたが、仕事+育児+家事となると、ちょっとどう回していったものか頭が痛くなりますね。

妻の偉大さを改めて感じるばかりです。

これから家庭内感染が広がらないように注意しつつ、なんとか頑張って過ごしていかなければ!!

Audibleお試し中

前々から気になっていたAmazonが提供しているAudibleが3ヶ月無料ということでお試し中です

もともと、音声コンテンツとしてはPodcastやVoicyを愛用しているのでAudibleにも注目していたのですが、サービスへの申込み+書籍代がかかるというところでちょっと二の足を踏んでいたのですよね。

気づいていなかったのですが、Audibleは今年の1月に刷新し、定額聴き放題プランに移行していたのですね。これは、試してみるのには絶好の機会!ということで早速申し込んでみた次第です

聞いてみたのは以下の書籍の音声版

他にもちょこちょこと聞いています。

ながら聞きすることができるので、時間や場所を選ばない。通勤時間や散歩、ジョギング中に聞くことが出来るのはいいです。
ちなみに、1.5倍速くらいで聞いているので、しっかり時間を取って本を読むよりも進むことができます。

Kindleとの使い方の違い

私はKindleで本を読むときは気にかかった部分をアンダーラインを残したりして、後にその部分をサマリして眺めたりするような使い方をしていました。
Audibleの場合、音声に対してのそういった注釈的な行為はできず、ながら聞きしているためメモを取るような場面でもなく。。。となると扱いがだいぶ違います。

ながら聞きしているために本に対して100%集中しているわけでもないことを考えると、実はくり返し聞くということがいいのではないかと考えています。
頭への刷り込みですね。

また、やはり読み手による違いも気になるところです。
これに関しては、もう少しあれこれと聴き比べてみて違いを考えたいところです。
どうしても、例えば先に上げた厚切りジェイソンさんの著書の場合だと、あのハイテンションを期待してしまいますよね。
文面でもそれがにじみ出てますし。
とは言え、読み手がものまねのように読むわけにもいかず、強弱はつけるものの、という形になります。

これ自体は決して悪いという話ではないですが、例えば小説のようなものの場合、どういう読み方をしている人がいるのだろうか?というところは気になります。

読み放題のラインナップには、小説はもちろんライトノベルまで幅広い分野が揃えられているので、聞いてみようかな~と思っています。

音声コンテンツといろいろな付き合い方が出てきて、いいですね。
そのうちAIが読み上げるようなものも出てきて、それが一つの劇のような形で展開されることもあるのかもしれません。

どんなふうにこの分野が発展していくのか、楽しみです

アクアラインマラソンに挑戦するにあたって

少し前にこんな投稿をしました

実は、しばらくしてから忘れた頃にこんなメールが。。。

いや、2次抽選なんて話あったっけ。。。?
個のメールが届いたのが、1次抽選結果の約一ヶ月後ということで、完全に頭の外で別の大会を探し始めていたところ。驚きのニュースですね。

とは言え、せっかくの参加の機会を頂いたのでもちろん申し込み。
11月が楽しみです
楽しみではあるものの不安要素盛りだくさんなんですよね

RTO

このところ暑い日が続いていたこともあるのですが、最近長距離を走ることが体力的に辛くなってきています。これまでは週末に20キロ超走っていたのが10~16kmくらいで音を上げるように。

水分補給とか、暑さ対策とか。しっかり考えないといけないな、と思いながらも大した手を打っているわけではないので、行けないですね。
いっその事、瞬発力を鍛える方にトレーニングを変えていくのもありなのかもしれません。

そしてRTO(リターン・トゥー・オフィス)です

正確に言うと、7月からお客様先で業務をすることになって、通勤が発生しています。
通勤で電車に揺られるということも、ずいぶん久しぶりのことだなぁと思いながらも、この往復の時間取られるのが非常に痛いです。

これまでは平日の朝、始業前に6~7km走るのを習慣化させていたところが一気に0に。
朝は家を7時前に出て、家に帰るのは20時近辺。更にそこから少し雑務をして。。。となるとちょっと平日は厳しい。

そりゃ往復で4時間位使っていればそうなるわな。。。ってところです

とは言え、この部分が変えられないのであれば、この環境下で出来ることを考えるしかありません。いやぁ、厳しい

今の候補としては、帰宅後に何かをするのは正直厳しいので、業務終了後に客先周辺で軽く汗を流すとかそういうことかなぁ?

感染者数も増えてきているし、色々と思うところもありますが頑張って生きてます(なんだそれ)

乾いているか

先週はちょっとイマイチな一週間だったなぁとシミジミと思ったわけです。

前週まで、仕事が忙しくてちょっと疲れが溜まっていたところではあったのですが、先週は打って変わって余裕があったわけです。
余裕があった割に、なにか、前に進めることができた気がしていない。
なんだか無駄に過ごしてしまったなぁ、と感じたわけです。

では、その前の週までの忙しい毎日はどうだったのかと言われると、忙しかったには忙しかったのですが、前に進んだのか?に関しては非常に疑問が残る感じがします。

結局のところ、忙しい日々を過ごしていたとしても、それが前に進むことができているかと言うと、必ずしもそうではない。
無駄かと言われると無駄でもないんだけど、結果がついてきていない状態とも言える。

乾き

では、何が出来るとこの、「無駄に過ごしてしまったなぁ」という感覚が無くなるのか。
どういう状態が自分にとって「充実した日々」足り得るのか?ということに関しては、非常に悩ましいテーマだといつも思うわけです。

将来の目標だとか、達成すべきゴールだとか

わかりやすいそう言ったものを持つことができればそれに向かって動くことは出来る。
そういった、一種の「乾き」のような「飢え」のような。そう言った気持ちがずいぶんと薄れてしまっているように感じる。

社会的な成功を考えるのであれば出世だったり給与アップだったりするものなのだろう
技術者として考えるのであれば、世界的なカンファレンスに登壇したり、OSSへのコントリビュートなどになるのかもしれない

後輩には偉そうなことを言っておいて、自分自身としてはそういったことに対しての強い憧れみたいなものはなく、まるで諦めてしまっているのではないだろうか?と、自分で自分を疑いたくもなる

つまらない

それでも、まだ現状を「つまらない」と思えている。

現状に対して「満足している」となると、それはそれでゴールなわけで、そこからの成長というものは、自発的には難しいのではないかと思う。

もちろん「つまらない」と言っているだけでは何も変わるわけもないのだから、自分の行動を変えていく必要があるんだよな。

という、当たり前の結論に毎度のこと行き着くわけで、詰まるところは成長できていない気がするわけだ。

今週のわたしはちょっと違うぞ!?と、言えるように頑張ろう

FlexiSpot があたった!

というわけで、

昇降デスクいいなー。高いなー。なんかキャンペーンやってるなー。ポチッとこうかなー

程度ののりで応募したキャンペーンが見事にHITしてしまい、昇降デスクのFlexiSpotが大当たりしました!
いや、何がおきるかわからない。。。まじで

これで私もシャレオツなワーキングスタイルをエンジョイできるぜ!ってニコニコしながら妻に報告したら、「まじでこいつ何考えてんだ。どこ置くんだ?それ」って顔された。

到着~開梱

まずはその重さと大きさにビビる。
考えてみると応募する際に大きさとか全く確認せずに応募しているわけで、ひとしきり置く場所を考えた結果、子供部屋に置くことにした。

本来であれば、私の部屋に置きたいところであったが、大きさが思いの外大きく、天板サイズ的にちょっと無理があった。

FlexiSpotの公式ページでは天板のサイズとしていくつか用意されていて、今回届いたものは一番大きい160x70x2.5ということだった。

昇降デスクを子供部屋に置くということは、多少もったいない気もするが、子供部屋は私の部屋の隣でノートPC持っていくことも出来る。
更に、我が家は中2~小2まで幅広い年代の子供がいるので、広いスペースと高さを変えることが出来るのは良いのではないか?と考えたのだ。

組み立て

組み立てに関しては付属のレンチとプラスのドライバーがあれば殆どは出来るが、一箇所。天板をつけるところでは電動ドライバーが必須なように感じた。

また、天板をつけるところ(ステップ4)あたりから、説明書の説明書きが急に分かりづらくなる。
ここでは、Youtubeに組み立て動画がおいてあったのでこちらを参照したほうがわかりやすかった

とは言え、躓くポイントがあるとすると、天板を取り付ける際に電動ドライバーが必要なところ。
天板を取り付ける前に、ネジ穴を保護しているカバーを外してから天板を取り付けること。
また、ケーブルカバーをどう取り付けていいのか分かりづらかったところくらいかな。

足が非常に重いので、組み立てることはできても女性が机を起こすのは結構たいへんかも知れない。

完成!

ネジ穴カバーを付けたまま天板を取り付けてやり直したりと、ちょっと手間はかかったけど無事に完成。写真は一番低いモードで。。。

一番高くするとずいぶんと上まで上がることがわかる。
これは楽しい。

二段ベッドがあるところにおいているので、非常に狭く感じなくもないけど、色合い的にはそれほど圧迫感を感じないのでとてもいい感じだ。
(ケーブル周りが汚いのは後でなんとかしないと)

そして何よりも天板が広いので、これまで小さめの机で勉強していた子どもたちからすると二人分の机ができたような感じになる。

何よりも上げ下げが出来るというのは、子供心をくすぐるようで、暫くの間子どもたちが興味津々だった。
多分、気分的には秘密基地に近い感覚なんだと思う。
妻は、「絶対これ、男の人が考えているよね」なんて冷めたことを言ってるが、気にしない。
いいじゃないか、かっこいいぞ。なんか基地からなにか発信するような音楽流れないかな。

夜に覗いてみると早速長男と次男が新しい机の使い心地を見るべく勉強していた。
こういったかっこいい机を手に入れると、もう少し周りを整備したくなってしまう。
特に、電源やケーブル周りはもう少しなんとかしないと行けないな。。。

このあたりは、ネットを徘徊して良い活用事例を参考にして組み上げていきたいところ。

良いものをいただけて、大変感謝。
ありがとうございます!

Hardhatを使ってNFTを触ってみる

先日会社の飲み会で、デザイナーの人とたまたま同席になったのでNFTに関して軽く聞いてみた。
結論からすると、デザイナーって言ってもWebデザインやアプリのデザインばかりでいわゆる”絵”を書いていない。”絵”を書けないからWebデザインやってる的な話をされていた。

そうは言っても、私よりセンスあるだろうしやってみればいいじゃないって感じでNFTに関して軽く話をしたんだけど、エンジニアの人たちは難しいことをやっているんだな、って感じの印象しか与えることができなかった気がする。

といっても、NFTに関しては大雑把な話しか私も把握していないわけで、直接的に話の筋とは関係ないが、独自コントラクトを書いてみて理解を深められればと思った。

Hardhat・環境作成

数年前にBlockchain関連を触ったときには、Truffle と Ganache を使って開発を行った記憶があるが、今は Hardhat という開発環境を使う形でも出来るようなので、せっかくだから試してみることにする

Hardhat
https://hardhat.org/

早速、Hardhatをnpm経由でインストールする

PS C:\dev\base-nft> npm init --yes
PS C:\dev\base-nft> npm install --save-dev hardhat
PS C:\dev\base-nft> npm install @openzeppelin/contracts web3
PS C:\dev\base-nft> npx hardhat
You are using a version of Node.js that is not supported by Hardhat, and it may work incorrectly, or not work at all.

Please, make sure you are using a supported version of Node.js.

To learn more about which versions of Node.js are supported go to https://hardhat.org/nodejs-versions
888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888

Welcome to Hardhat v2.9.7

? What do you want to do? ...
> Create a basic sample project
  Create an advanced sample project
  Create an advanced sample project that uses TypeScript
  Create an empty hardhat.config.js
  Quit

上記のような形となり、Hardhatで何をするのか選択肢が出てくるので、「Create a basic sample project」を選択する。

ちなみにnpm install で hardhat をすると警告が出てくる

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: 'hardhat@2.9.7',
npm WARN EBADENGINE   required: { node: '^12.0.0 || ^14.0.0 || ^16.0.0' },
npm WARN EBADENGINE   current: { node: 'v18.1.0', npm: '8.8.0' }
npm WARN EBADENGINE }

node.js バージョン互換が取れていないということのようで、このまま突き進むとHardhat起動できないので16系に切り替えておく必要があった

ここでHardhatが問題なく起動するかを確認するためにtest実行してみる

PS C:\dev\base-nft>npx hardhat test
Error HH12: Trying to use a non-local installation of Hardhat, which is not supported.
Please install Hardhat locally using npm or Yarn, and try again.

エラーが出てきた。。。
Hardhatの公式を見てみるも特に解決せず、Stackoverflowでも同じ問題が出ていた

Can’t properly install hardhat using Powershell! Persistent Error HH12: Trying to use a non-local installation of Hardhat, which is not supported

あれこれと試してみて、結果としてはPowershellではなくコマンドプロンプトで実行したらうまくいった。謎い。

コントラクトの構築

コントラクトに関しては基本的にopenzeppelinえ用意されているものを利用する

pragma solidity ^0.8.0;

import "hardhat/console.sol";
import "@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol";

contract BaseNft is ERC721PresetMinterPauserAutoId {
    constructor() ERC721PresetMinterPauserAutoId("BaseNft", "nft", "https://raw.githubusercontent.com/krote/BaseNft/main/metadata/")
    {}
}

ERC721PresetMinterPauserAutoIdに渡している第3引数にMetadataの格納先を指定する必要があって、今回はGithubを指定してみた。

ローカルネットワークへのデプロイ

まずは、Hardhatを使用してローカルネットワークのノードを立ち上げる

C:\Dev\base-nft>npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

Accounts
========

WARNING: These accounts, and their private keys, are publicly known.
Any funds sent to them on Mainnet or any other live network WILL BE LOST.

Account #0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
<<略>>

起動すると、ノードのアドレスとテスト利用可能なアカウントを20個ほど作ってくれる。これが後々利用するPublicKeyとPrivateKeyとなる

下記の様にdeploy.jsを用意

const hh = require("hardhat");

async function main() {
    const BaseNft = await hh.ethers.getContractFactory("BaseNft");
    const nft = await BaseNft.deploy();

    await nft.deployed();

    console.log("Deployed at: ", nft.address);
}

main()
    .then( () => process.exit(0))
    .catch( (error) => {
        console.error(error);
        process.exit(1);
    });

nodeを起動したコマンドプロンプトとは別のコマンドプロンプトにてdeploy.jsを実行する

C:\Dev\base-nft>npx hardhat run --network localhost scripts/deploy.js
Compiled 23 Solidity files successfully
Deployed at:  0x5FbDB2315678afecb367f032d93F642f64180aa3

無事にDeploy成功して、スマートコントラクトのアドレスを入手できた。
では続いてMintだ

Mint

Mint用にscripts/mint.jsを用意する

const Web3 = require("web3");

// CONTRACTをDeployした際のnodeアドレス
const CONTRACT_ADDRESS = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
// PUBLIC_KEY, PRIVATE_KEY は本来Metamaskなどを接続した際に取得可能なもの
// ここではHardhat起動時に作られたアカウントを固定で書く
const PUBLIC_KEY = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266";
const PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
// Deploy時に表示されたアドレスは127.0.0.1:8545だがlocalhostとする
const PROVIDER_URL = "http://localhost:8545";


async function mintNFT() {
    const web3 = new Web3(PROVIDER_URL);
    const contract = require("../artifacts/contracts/BaseNft.sol/BaseNft.json");
    const nftContract = new web3.eth.Contract(contract.abi, CONTRACT_ADDRESS);
    const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest");
    const tx = {
        from: PUBLIC_KEY,
        to: CONTRACT_ADDRESS,
        nonce: nonce,
        gas: 500000,
        data: nftContract.methods.mint(PUBLIC_KEY).encodeABI(),
    };

    const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY);
    signPromise
        .then((signedTx) => {
            const tx = signedTx.rawTransaction;
            if( tx !== undefined ){
                web3.eth.sendSignedTransaction(tx, function(err, hash) {
                    if( !err ) {
                        console.log("The hash of your transaction is:", hash);
                    } else {
                        console.log("Something went wrong when submittion your transaction:", err);
                    }
                });
            }
            console.log("row36");
        })
        .catch( (err) => {
            console.log("Promise failed:", err);
        });
}

mintNFT();

先に入手しているPublicKeyとPrivateKey。Deployしたアドレスをそれぞれ当てはめている。これを実行するとNFTを発行することが出来る

C:\Dev\base-nft>npx hardhat run --network localhost scripts/mint.js
The hash of your transaction is: 0xbdf81461a5416fe9c6903dba1d6780d576cf979b74ab87a43e1e7e0658d723fc      

これでMintされたことになるわけだけど、実際のところGithubの当該アドレスには特になにかおいているわけではないけど問題なくMintの処理自体は行われている。

そう考えると、指定したアドレスと言う文字列に対してBlockchain上のアドレスを割り当てているだけということで、色々と危うい仕組みなんだなぁということがよく分かる。

とりあえず、ここで使ったソースはGithubにおいた

https://github.com/krote/BaseNft

アクアラインマラソン落ちた!

というわけで、エントリーしていたアクアラインマラソンに落選しました。

フルマラソンへの挑戦

10年前の2012年。初回大会にエントリーして走ったものの、初めてのフルマラソンだったり何だったりで途中でガス欠になり棄権。
それ以来フルマラソンに挑戦していませんでした。

リモート勤務生活からのランニング時間確保に成功してからは、それなりに自信もついてきたことだし、一つの目標としてエントリーしていたのですが。。。残念。

一応、5万ほど追加で費やせば別枠でのエントリーもできるのですが、流石にそこまででも。。。という形です。

というわけで、別の大会を探さないとなぁ

関東近辺でフルマラソン。。。

これか?

https://earthrunclub.net/competition/20220807_2022kumagawa_summer_marathon/

ちょっと考えます。。。