koogawa blog

iOS、Android、foursquareに関する話題

はてなブックマークしたページをTwitterにシェアしてくれるアプレットを作りました

2023.4.26 追記:ブコメもツイートに含めることができるようになりました!すでにお使い頂いている方は、もう一度Connectから再設定してください🙇🏻

はてなブックマークTwitter連携が使えなくなってしまったので、IFTTTのアプレットを作りました。

使い方

ブックマーク時、コメントに「#tw」を入力することでTwitterにシェアしてくれます(#twは別のワードにカスタマイズ可能)

インストール

次のURLにアクセスし、Connectスイッチをオンにします。

ifttt.com

ツイートのトリガーとなる文字列 #tw は自由にカスタマイズできます。

Feed URLの (user_account) の部分を自分のアカウント名に書き換えてください。

デフォルトでは {コメント} / {ページのタイトル} {URL} という形式でツイートされますが、Tweet textを書き換えることで、ツイート本文をカスタマイズできます。

制限事項

  • IFTTTの仕様により、ブックマーク時のコメントはツイート本文に含めることができません -> 2023.4.26 コメントにも対応しました!
  • IFTTTの無料プランではツイート送信までに最大1時間の遅延が発生します
  • Twitter APIの仕様変更により、本アプレットが動作しなくなる可能性があります

2022年を振り返る

今年も色々あったなぁ

門川神社からの景色
宮崎県 門川神社から

そんなわけで、2022年を振り返ってみたいと思います。

仕事・スキル面

ブロックチェーン分野へ

今年の大きな変化として、技術分野をブロックチェーン領域へシフトした、というのがあります。Ethereum等は全く未知の分野でしたが、半年間でなんとかSolidity でスマートコントラクトを書けるぐらいまでにはなりました。自分が書いたコードでトランザクションが動き、ブロックチェーンにデータが書き込まれる体験は本当に面白いです。

12月にはNFT関連のプロダクトである「dango」もベータリリースしました。dangoはgiveaway*1をかんたんにするサービスです。当選後のNFT譲渡(Transfer)までサポートしているので、ぜひ使ってみてください !

dango.ooo

web3ハッカソンにも参加

11月には日本最大級のweb3ハッカソンが開催されるということで、私も参加しました。NFT関連のプロダクトを1番乗りで提出しましたが、残念ながら決勝進出はならず。しかし、なにより「参加」することに意義があったので良しとします。

久しぶりに勉強会で発表

ちょこちょこweb3コミュニティにも顔を出すようになり、Solidity-jp さん主催の勉強会に登壇者として招いて頂きました。私以外の登壇者の面々が豪華で、発表内容も非常にレベルが高いイベントでした。著名な方々に混じって登壇側に立てたのはとても良い経験になりました。

solidity-jp.connpass.com

Next.js

今年使い始めた技術としてNext.jsがあります。Next.jsはReactをベースに開発されたフロントエンドフレームワークです。私はReact未経験でしたが、チュートリアルがしっかりしているため、スムーズに使い始めることができました。

nextjs.org

また、Next.jsに慣れるためには、ひとつ個人でアプリを作ることが手っ取り早いということで、ひとつプロダクトもリリースしました。

NFT Trade スクショ
NFT Trade

残念ながらまったく使われませんでしたが、それも含めて勉強になりました。

会社でMVPを頂いた

ありがたいことに今年は全社MVPを頂きました🎉

評価してもらえる環境に身を置けることを大変嬉しく思います。これからもやっていきます💪

プライベート

ご当地ヒーロー映画に出演が決定

ご当地ヒーロー作品が映画化されるということで、出演者を県民から募集していることを知りました。演技経験は問わないそうなので、私もオーディションに応募してみることに。

演技は全くの未経験でしたが、なんとか1次選考を通過。最終選考は人通りも多い宮崎駅前の特設ステージで行われました。寒さと緊張で終始震えていましたが、見事に合格を勝ち取ることができました🎉

  • 台詞をしっかり暗記してきたこと
  • 大勢のプレッシャーに負けず、台詞が飛ばなかったこと
  • どこにでもいるお父さんっぽいこと

が勝因だったようです。

集合写真
天尊降臨ヒムカイザー THE MOVIE

ついに 映画のエンドロールに自分の名前が載る、という夢が叶いそうです🌟

ミニ四駆大会で優勝

今年の目標に「ミニ四駆大会で優勝する」というのがありましたが、4月に開催されたミニ四駆大会でついに優勝できました🏆

優勝したときの顔
念願の初優勝

かなり運が左右するレースでしたが、それも勝負のうちということで、良しとします。

来年の目標

さて、最後に来年の目標を宣言して締めたいと思います。

皆さま良いお年をお迎えください🎍

*1:NFTを他の人に無料プレゼントすること

Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient

SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで

👆こちらの本のサンプルを試していると大量に出てくる警告です。

constructor() public {
    _owner = msg.sender;
}

どうすればよい?

public を削除します。

constructor() {
    _owner = msg.sender;
}

solidity - Visibility for constructor is ignored. If you want the contract to be non-deployable, making it "abstract" is sufficient - Ethereum Stack Exchange

解説

Solidity 0.7.0からコンストラクターVisibility ( public / external ) は不要になりました。

Visibility (public / external) is not needed for constructors anymore:

Solidity v0.7.0 Breaking Changes — Solidity 0.7.0 documentation

本の執筆時点ではまだ必須だったのだと思われます。

Truffleで特定のファイルだけmigrateする

ethereum.stackexchange.com

Truffleのmigrationファイルは 2_wallet_factory.js のように数字が頭に付きます。例えば 2_ から始まるファイルだけmigrateするには以下のようにします。

truffle migrate -f 2 --to 2

If you intended this as a fallback function or a function to handle plain ether transactions, use the "fallback" keyword or the "receive" keyword instead.

SolidityとEthereumによる実践スマートコントラクト開発 ―Truffle Suiteを用いた開発の基礎からデプロイまで

👆こちらの本のサンプルを試しているとたまに出てくる警告です。

function () public payable {}

上記のようなフォールバック関数の定義箇所に原因がありそうです。

どうすればよい?

function() public payable {}

の代わりに

fallback() external payable {}

を使いましょう。

payable - Compiler solc expected a state variable declaration - Ethereum Stack Exchange

解説

Solidity v0.6.0からフォールバック関数の定義方法が変わったようです。

The unnamed function commonly referred to as “fallback function” was split up into a new fallback function that is defined using the fallback keyword and a receive ether function defined using the receive keyword.

Solidity v0.6.0 Breaking Changes — Solidity 0.7.4 documentation

夜9時には寝て朝5時に起きる生活を試してみてわかったこと

最近、夜9時には寝て朝5時に起きる、という生活を試している。なかなか良い感じなので、今回はその知見をメモしたいと思う。

そもそものきっかけは子供の寝かしつけ中に自分も寝落ちしてしまう問題が多発していたこと。やってみるとわかるが、暗い部屋で眠気に耐えながらじっと待つという行為は本当に疲れる。ひどい場合は1時間ぐらい寝てくれない日もざらにある。

・・・この時間、なんとかならないか?

そこで思いついたのが、それなら一緒に寝てしまおうというアイデアである。

実際に何度かこのスタイルを試してみてわかったメリットを挙げていく。

朝方はエアコンが要らない!

朝5時ぐらいの時間帯だと、ここ南国🌴宮崎でもエアコンが要らないぐらい涼しい。2〜3時間ぐらいだが、窓からの風だけで作業ができるのは身体にも環境にもよいのではないだろうか。

朝コーヒーを飲まなくなった

朝5時に起きるといっても夜9時には寝ているので、たっぷり8時間睡眠を取っているのである。そのため、眠気覚ましのコーヒーが不要になった。調子が良いときにはランチ後も眠くならないほどである。

作業の質が良くなった気がする

これはちゃんと計測したわけではないが、体感として深夜に頭を使うより、朝方に頭を使ったほうが効率が良い気がしている。眠っている間に頭が良い感じにリセットされているのかもしれない。

***

メリットばかりを挙げてきたが、もちろんデメリットもある。

例えば、夜9時以降に開催されるTwitterスペースでのイベントをリアルタイムで聴きたい場合は、どうしても起きている必要がある。私が大好きなF1なんかは夜11時スタートのレースもよくあるので、毎日この生活リズムを送るのは難しいのが現実である。

とはいえ、メリットが多いのは事実なので、夜9時に寝られる日は積極的に寝ていきたいと思っている😪

TruffleでEtherScan上のスマートコントラクトをVerifyしてみる

※2022/8/8追記: xdai, sokol にも対応した truffle-source-verify というプラグインを見つけたので、必要であればそちらもおすすめです

Etherscanのサイトから手動でもVerifyできるが、非常に大変なのでコマンドラインからVerifyする方法をメモ。

truffle-plugin-verify というTruffleプラグインが便利。

github.com

インストール

  1. npm または yarn でインストール

    npm install -D truffle-plugin-verify
    yarn add -D truffle-plugin-verify
    
  2. truffle-config.jsプラグインを追加
   module.exports = {
     /* ... rest of truffle-config */

     plugins: ['truffle-plugin-verify']
   }
  1. Etherscan websiteにてEtherscanのAPI Key を作成

  2. Etherscan API keyを truffle-config.js に追加

API keyを直書きするのではなく、dotenv 経由で読み込むのが望ましい。

   module.exports = {
     /* ... rest of truffle-config */

     api_keys: {
       etherscan: 'MY_API_KEY'
     }
   }

使い方

スマートコントラクトのdeployが完了したら、次のコマンドで1つ以上のコントラクトをVerifyできる。

truffle run verify SomeContractName AnotherContractName --network networkName [--debug]

--network には truffle-config.js に記載したネットワーク名を指定できる。

例えば、 rinkeby にdeployした SimpleStorage コントラクトをVerifyするには次のコマンドを実行する。

truffle run verify SimpleStorage --network rinkeby

コントラクトのアドレスを指定することもできる。

truffle run verify SimpleStorage@0x61C9157A9EfCaf6022243fA65Ef4666ECc9FD3D7 --network rinkeby

サポートされているチェーン

EtherScan以外も多様なチェーンがサポートされている。

module.exports = {
  /* ... rest of truffle-config */

  api_keys: {
    etherscan: 'MY_API_KEY',
    optimistic_etherscan: 'MY_API_KEY',
    arbiscan: 'MY_API_KEY',
    bscscan: 'MY_API_KEY',
    snowtrace: 'MY_API_KEY',
    polygonscan: 'MY_API_KEY',
    ftmscan: 'MY_API_KEY',
    hecoinfo: 'MY_API_KEY',
    moonscan: 'MY_API_KEY',
    bttcscan: 'MY_API_KEY',
    aurorascan: 'MY_API_KEY',
    cronoscan: 'MY_API_KEY'
  }
}

最新のサポート状況は公式の https://github.com/rkalis/truffle-plugin-verify をチェックしてほしい。