Mint Square:ZK Rollupを活用した安価で高速なNFT取引プラットフォーム

Mint Squareは、マルチチェーンのZK Rollupソリューションを活用し、安価で高速なNFT取引を提供するプラットフォームです。現在のEthereumネットワーク上で高額なトランザクション手数料と遅延が問題とされていますが、Mint Squareはこれらの問題を解決することを目指しています。

ZK Rollupは、ブロックチェーンのセキュリティを維持しながら、オフチェーンでトランザクションを処理することができるスケーリングソリューションです。これにより、Mint Squareは複数のトランザクションをまとめてオフチェーンで処理し、それぞれのトランザクションに必要な時間とコストを大幅に削減することができます。

Mint Squareは、Ethereum、Binance Smart Chain、Polygonなど、複数のブロックチェーンネットワークをサポートしています。これにより、ユーザーは自分に最適なブロックチェーンを選択できます。

Mint Squareは、NFTの購入、販売、取引を行うマーケットプレイスであり、クリエイターが自分のNFTを制作して販売するためのツールや、コレクターが新しいNFTを閲覧・発見するための機能も提供しています。

Mint Squareは、ZK Rollupテクノロジーを活用して、ユーザーフレンドリーでアクセスしやすいNFT取引プラットフォームを提供することを目指しています。

EpsonプロジェクターのWi-Fi接続に関する情報まとめ

Epsonのプロジェクターについて知ろう!】

Epsonのプロジェクターは、高品質な映像や画像を提供することができる優れた製品として知られています。しかし、一部のユーザーからは、Wi-Fi接続に関して問題が生じることがあるという声も聞かれます。そこで、今回はEpsonのプロジェクターに関する情報をまとめてみました。

まず、Epsonのプロジェクターには、Wi-Fi接続に対応している機種があります。代表的な機種として、Epson EB-FH52が挙げられます。このモデルは、IEEE802.11a/b/g/n対応の無線LANを搭載しており、スマートフォンタブレットとの接続にEpson iProjectionアプリを使用することができます。また、高輝度の3,400ルーメンを実現しており、フルHD解像度に対応しているため、高品質な映像や画像を提供することができます。

Wi-Fi接続に関しては、プロジェクターとの接続が確立された後、一時的にインターネット接続が切断されることがあります。そのため、プロジェクターに別途Wi-Fiアダプタを接続するか、有線LAN接続との併用を検討することが推奨されます。

また、Epsonのプロジェクターをネットワークに接続するには、まず初期設定時に有線接続をすることが推奨されています。有線接続を行った後、プロジェクターの設定画面でWi-Fiを有効にし、ネットワークに接続することで、Wi-Fi接続が可能になります。

以上のように、Epsonのプロジェクターに関する情報をまとめてみました。ご利用の環境や目的に応じて、適切な接続方法を選択することが重要です。

QuickSwapの基本を学ぼう:Swap、LP、Farmの仕組みと使い方

DeFi(分散型金融)は近年、ブロックチェーン技術を用いた金融サービスを提供する分野で注目されています。QuickSwapはPolygonネットワーク上に構築された分散型取引所(DEX)であり、ユーザーは中央機関やインターメディエイリーを必要とせず、暗号通貨を分散的かつ安全に交換できます。

QuickSwapは自動市場メーカー(AMM)モデルに基づいて運営されており、流動性プロバイダー(LP)がファンドをプールして価格をアルゴリズム的に決定します。QuickSwapはQuickトークンを使用し、QuickSwap Farmプログラムを通じてステーキングや報酬を提供しています。

以下では、QuickSwapでのSwap、LP、Farmの基本的な概念と使い方を説明します。

  1. Swap:Swapは暗号通貨を交換する行為です。QuickSwapでは、売りたいトークンと買いたいトークン、取引したい金額を指定することで交換が可能です。価格は、流動性プール内のトークリザーブの比率に基づいて算出されます。
  2. LPまたは流動性プロバイダー:LPはQuickSwap上の流動性プールにファンドを提供するユーザーのことです。流動性プールにファンドを提供することで、トレーディング手数料の一部を受け取ることができます。LPは同じ価値の2つのトークンを流動性プールに入金し、その割合に応じてLPトークンを受け取ります。このLPトークンは、そのユーザーの流動性プール内のシェアを表し、いつでも引き出すことができます。
  3. Farming:Farmingは、DeFiプロトコル上のスマートコントラクトに暗号通貨をステーキングまたはロックすることで報酬を獲得することを指します。QuickSwapでは、Quickトークンを報酬として提供するQuickSwap Farmプログラムを通じて、LPトークンをステーキングすることで報酬を受け取ることができます。

QuickSwapでのSwap、LP、Farmの基本的な概念を理解したら、以下の手順に従って実際に取引してみましょう。

  1. QuickSwapのウェブサイト(https://quickswap.exchange/)にアクセスして、MetaMaskやWalletConnectなどのWeb3ウォレットに接続します。
  2. ドロップダウンメニューから、売りたいトークンと買いたいトークンを選択します。トークンを検索することもできます。
  3. 売りたいトークンの金額または買いたいトークンの金額を入力します。交換レートと見積もりの手数料が表示されます。
  4. 「Swap」をクリックして、Web3ウォレットでトランザクションを確認します。
  5. Polygonブロックチェーントランザクションが確認されるのを待ちます。トランザクションが確認されると、トークンが交換され、ウォレットに反映されます。

LPトークンをステーキングする場合は、以下の手順に従ってください。

  1. QuickSwapのウェブサイトにアクセスして、Web3ウォレットに接続します。
  2. 「Farm」タブをクリックします。
  3. 「Gamma Farms」セクションにスクロールし、「Stablecoins」を選択します。
  4. USDC/DAIの流動性プールを見つけてクリックします。
  5. 「Add Liquidity」ボタンをクリックして、USDCとDAIをプールに入金します。
  6. 入金後、あなたのシェアを表すLPトークンを受け取ります。このLPトークンは、流動性プールページの「Stake LP Tokens」セクションにステーキングすることができます。
  7. ステーキングしたいLPトークンの金額を入力し、Web3ウォレットでトランザクションを確認します。
  8. Polygonブロックチェーントランザクションが確認されるのを待ちます。確認されたら、Quickトークンの報酬を受け取ることができます。

注意点として、DeFiにはリスクがあるため、必ず自己責任で取引してください。

また、Farmingには潜在的な損失があるため、十分にリサーチを行い、失うことのできる資金の範囲内でのみ投資するようにしてください。

QuickSwapはPolygonネットワーク上に構築されたDEXであり、Swap、LP、Farmの機能を提供しています。これらの機能を利用することで、ユーザーは暗号通貨を分散的かつ安全に交換し、報酬を得ることができます。しかし、これらの機能にはリスクがあるため、十分にリサーチを行い、慎重に取引することが重要です。

この記事を参考に、QuickSwapでの取引やステーキングを試してみてください。それでは、Happy Trading!

Asanaプレミアムプランのユーザーかどうかの確認方法

Asanaは、プロジェクト管理ツールとして幅広く利用されています。ユーザーは無料プラン(ベーシックプラン)から始めることができ、必要に応じて有料プランにアップグレードすることができます。この記事では、Asanaのプレミアムプランのユーザーかどうかを確認する方法を解説します。

手順1: Asanaにログイン まず、Asanaにログインしてください。アカウントがない場合は、アカウントを作成してログインしてください。

手順2: 左下のプロフィール画像またはイニシャルをクリック 左下にあるプロフィール画像またはイニシャルをクリックして、アカウントメニューを開きます。

手順3: 「Organization Settings」または「Workspace Settings」をクリック アカウントメニューから、「Organization Settings」をクリックして、組織設定画面に移動します。もし「Organization Settings」が見つからない場合は、「Workspace Settings」があるかどうか確認してください。それでも見つからない場合は、あなたのアカウントはおそらく無料プラン(ベーシックプラン)になります。

手順4: 「Billing」タブを選択 組織設定画面の上部にあるタブから、「Billing」を選択してください。ここで現在のプランの詳細を確認できます。

手順5: プランの詳細を確認 「Billing」タブで、現在のプランの詳細を確認できます。ここでAsanaのプレミアムプランに加入しているかどうかを確認できます。

もしメインダッシュボード画面の右上に「Upgrade」の表示がある場合、通常は現在のアカウントが無料プラン(ベーシックプラン)であることを示しています。プレミアムプランにアップグレードするには、「Upgrade」ボタンをクリックし、指示に従ってください。

Apple Watch 3を無償交換したはなし

2018年に購入したApple Watch 3、だいぶ前にスクリーンの側面が割れて浮き上がってきて、最終的には電源が入らなくなって、そのまま放置していた。

新しいモデルが出るも、触手が動かず買い控えていたが、iOS14.5でウォッチつけれてばマスクしててもiPhone解除できるよっていうandroidの周回遅れのようなハイテクノロジーが実装された。

手元にあったSeries 3はアルミニウムモデルのスクリーン交換プログラムで紹介されている画像に酷似しているのでただで交換できるならとダメ元で正規サービスプロバイダにウェブから予約をしてみた(交換プログラムのリンクから近くのサービスプロバイダの検索、予約までできるのはよき)。

Screen Replacement Program for Aluminum Models of Apple Watch Series 2 and Series 3 - Apple Support https://support.apple.com/en-my/screen-replacement-program-apple-watch-series-2-3

マレーシアにはアップルの直営店がないので正規代理店で購入したものを正規サービスプロバイダに持っていくというフローで、購入したお店では先のプログラムの手続きができないと言われた。

さっそくApple Watchを持っていくも、レシートが不鮮明でシリアル番号が確認できない上に、Watchのシリアル番号もベルトの摩擦で末尾の文字が読めなくなっていた。

このままリペアセンターに送ってもリジェクトされる恐れがあるからと、販売店にレシートを再発行してもらうようにアドバイスをもらったので、早速近くの販売店に足を運び、レシートを再発行してもらって事なきを得た。

レシートの整理番号を読み取ることができたのは不幸中の幸いである。

ちなみに交換プログラムは今年の7月で打ち切りらしく、滑り込みセーフで最新のOSにギリギリ対応できる旧型モデルを新品に交換できてよかった。申し込みから受け取りまで2週間だった。

交換後のウォッチはベルトの取り外しで摩擦が少ないところへシリアル番号の位置が移動している。

iPhoneをiOS14.5、Watch OSを7.4に更新して設定のFace IDからWatchでアンロックの項目をONして、マスクをつけててもiPhoneのロック解除できることを確認した。

YouTubeのプレイリストからPodcastのフィードを作成

YouTube で Listen Later プレイリスト作成して URL をコピー

https://www.youtube.com/view_all_playlists で作成

https://www.youtube.com/playlist?list=yzyVrL2gQesngUUgRcMmbEnru7H7jpPXda

Raspberry Pi の準備

Raspberry Pi Imager をインストールして起動。SD Card Formatterでフォーマットした SD カードをパソコンに挿して Imager で Raspberry Pi OS 32-bitを選択して書き込む

microSDカードのドライブを開いて、ドライブ直下に空の ssh ファイルを作成して SSH を有効化する

Wi-Fi接続する場合は wpa_supplicant.confssh と一緒に作成する

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="My Home"
    psk="yNLVb9V4JG"
}

Tera Term で Raspberry PiSSH 接続

ホスト: raspberrypi.locale ユーザー名: pi パスフレーズraspberry

ターミナルで sudo raspi-config を叩いて、Interface Options→VNC に☑

ディスプレイなしのラズパイに VNC 接続する際に解像度を設定しておかないと Raspberry Pi 4 のデスクトップが見えないので sudo raspi-config から

Display Options → Resolution → DMT Mode 85 1280x720 60Hz 16:9 を選択

再起動して VNC Viewerで接続して Update Software やっとく

Docker のインストール

curl -sSL https://get.docker.com | sh

PodSync用のフォルダを作成

mkdir -p ~/podsync/config ~/podsync/data

YouTube API の取得

https://console.developers.google.com/project でプロジェクトを作成

プロジェクトを開いて YouTube Data API v3 を有効したら認証情報を作成する

使用する API: YouTube Data API v3
API を呼び出す場所: ウェブブラウザ (JavaScript)
アクセスするデータの種類: 一般公開データ

PodSyncの設定

~/podsync/config/config.toml

[server]
port = 8080
data_dir = "/app/data"

[tokens]
# The API token you created
youtube = "ZSXKKp3gwpewP3Ga2GAVCGYDL6NGUKXQ9cZVCra"

[feeds]
  [feeds.listen_later]
  # The playlist you created earlier
  url = "https://www.youtube.com/playlist?list=yzyVrL2gQesngUUgRcMmbEnru7H7jpPXda"
  # The number of episodes to query each update
  page_size = 25
  # How often query for updates, examples: "60m", "4h", "2h45m"
  update_period = "10m"
  quality = "low"
  format = "audio"

Podsync の Dockerイメージをクローンしてビルド

git clone https://github.com/pblgomez/PodSync-Armv6-Docker podsync-docker
cd podsync-docker
sudo ./build.sh

$MACHTYPE の返り値が違うっぽいので

pi@raspberrypi:~ $ echo $MACHTYPE
arm-unknown-linux-gnueabihf

build.sh を書き換え

if [[ ${MACHTYPE} =~ "aarch64" ]]; then
  echo "aarch64"
  LatestRelease=$(curl -s https://github.com/mxpv/podsync/releases/ | grep -e 'href.*arm64' -m 1 | cut -f2 -d \")
elif [[ ${MACHTYPE} =~ "arm-unknown-linux-gnueabihf" ]]; then
  echo "x86_64"
  LatestRelease=$(curl -s https://github.com/mxpv/podsync/releases/ | grep -e 'href.*armv6' -m 1 | cut -f2 -d \")
fi

Alpine 3.13は musl ライブラリが新しくなって 32-bit 環境下では設定を葬らないといけないらしくめんどくさいのでバージョンを下げてビルド

/home/pi/podsync-docker/Dockerfile

FROM alpine:3.12
Successfully built 14ad32de3545
Successfully tagged local/podsync:latest

めでたく Podsync Docker イメージが構築できたので Podsync docker コンテナを起動

docker run -d \
    --name='Podsync' \
    --net='bridge' \
    -e 'PODSYNC_CONFIG_PATH'='/app/config/config.toml' \
    -v ~/podsync/data/:'/app/data':'rw' \
    -v ~/podsync/config/:'/app/config':'rw' \
   'local/podsync'

Docker を sudo なしで実行するには pi ユーザーを docker グループに追加しておく

sudo gpasswd -a pi docker

docker daemonの再起動

sudo service docker restart

systemd で起動時に Podsync を実行する

Podsync コンテナのサービスエントリを作成

sudo nano /etc/systemd/system/docker-podsync.service

設定はこんな感じ

[Unit]
Description=Podsync Container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a Podsync
ExecStop=/usr/bin/docker stop -t 2 Podsync

[Install]
WantedBy=graphical.target

WantedBy は現在のシステムモードを下記で調べてその値を設定

systemctl get-default

systemd をリロードして新しいサービスを登録

sudo systemctl daemon-reload
sudo systemctl start docker-podsync.service
sudo systemctl enable docker-podsync.service
sudo reboot

起動を確認

systemctl status docker-podsync

S3でのフィードのホスティング

ホームネットワーク上のものをオープンなインターネットに公開したくないので、Podsync フィードとファイルをクラウドストレージプロバイダ(S3)に同期

これをやることでどこからでも最新のポッドキャストフィードを取得可能

AWSの設定

AWS はその昔アカウントだけ取得して放置していたので設定するところからはじめる

住所の更新とクレジットカード情報の登録を余儀なくされる

認証時に電話がかかってくるのでキーパッドで4桁の数字+#を入力

S3でバケットを作成

バケット名: lifeline-balsa-oilskin-denounce

☐パブリックアクセスをすべて ブロック

☑ 現在の設定により、このバケットバケット内のオブジェクトが公開される可能性があることを承認します。

AWS アクセスキーの作成

AIMでグループを作成

グループ名: Admin

ポリシー名:

☑ AdministratorAccess

☑ AmazonEC2FullAccess

☑ AmazonS3FullAccess

☑ AmazonRDSFullAccess

ユーザの作成

ユーザを追加

ユーザ名: username

☑ プログラムによるアクセス

アクセス許可の設定

☑ Admin

rclone のインストール

curl https://rclone.org/install.sh | sudo bash

次に、選択したクラウドストレージプロバイダでrcloneを設定します(ここではS3のチュートリアルを紹介します)。

rclone config

こんな感じに

[s3]
type = s3
provider = AWS
env_auth = false
access_key_id = 4KNBJD3RLKXKZQK58JVR
secret_access_key = BU8NT3QGWZLCKFQ9LGK4RHCJUTXUV5Q5DBZ5UV94
region = ap-southeast-1
location_constraint = ap-southeast-1
acl = public-read

~/podsync/config/config.toml にホスト名を設定。ポッドキャストRSSフィードが、localhostではなくS3バケット内のファイルになる。

[server]
port = 8080
data_dir = "/app/data"
hostname = "https://lifeline-balsa-oilskin-denounce.s3.amazonaws.com"

Podsyncのdockerコンテナをdocker restart Podsyncで再起動し、フィードの更新が完了するのを待ちます。

sudo docker restart Podsync

crontab -eを実行し、以下のエントリを追加します。これで、rcloneを実行して、PodsyncからMP3とRSSフィードをストレージバケットにアップロードできます。

rclone sync /home/pi/podsync/data/ s3:lifeline-balsa-oilskin-denounce --include "*.{xml,mp3}"

すべてが正しくアップロードされていれば、次のURLをお使いのPodcastプレーヤーに読み込み、Podsyncがダウンロードしたすべてのエピソードを見ることができます。

https://lifeline-balsa-oilskin-denounce.s3.amazonaws.com/listen_later.xml

crontab -eを実行し、以下のエントリを追加

*/30 * * * * /usr/bin/rclone sync /home/pi/podsync/data/ s3:lifeline-balsa-oilskin-denounce --include "*.{xml,mp3}"

ファイルの定期削除

sudo nano /etc/rc.local

ファイルの最後にexit 0とあるので、その手前に起動時に実行したいコマンドを書く

find /home/pi/podsync/data/listen_later/ -type f -printf "%A+\t%p\n" | sort -r | cut -f2 | tail -n +20 | xargs --no-run-if-empty rm --

f:id:akifumi-ichiki:20210510114548p:plain
Overcastで購読したとこスクショ

参考リンク
Creating a Podcast Feed from a YouTube Playlist | Ben Congdon

Install notion-py on Pythonista3

Windows 機でテスト

Anaconda の 仮想環境にインストール

pip install notion

token_V2 は Chrome 拡張機能の EditThisCookie で Notion にアクセスして取得する

database の URL は Notion上で Copy link して取得する

from notion.client import NotionClient

# Obtain the `token_v2` value by inspecting your browser cookies on a logged-in (non-guest) session on Notion.so
client = NotionClient(token_v2="************************************************************************************************************************************************************")

# Access a database using the URL of the database page or the inline block
cv = client.get_collection_view("https://www.notion.so/********************************?v=********************************")

# List all the records with "Bob" in them
for row in cv.collection.get_rows():
    print("We estimate the value of '{}' at {}".format(row.name, row.url))

# Add a new record
row = cv.collection.add_row()
row.name = "Just some data"
row.url = "https://learningequality.org"

iPhone でテスト

Pythonista を起動して getstash.py を作成して

import requests as r; exec(r.get('https://bit.ly/get-stash').content)

Home Screen Icon が動かないので Python Tools Installer から ShortcutGenerator をインストール

ptinstaller

/bin/Utilities/ShortcutGenerator

ShortcutGenerator.py を開いて▷長押しで Run with Python 2.7 をタップ

Title: StaSh

URL: pythonista3://launch_stash.py/?action=run

アイコンにする画像は予めカメラロールに保存しておく

notion-py のインストール

関連モジュールのインストールに失敗するがプログラムを実行してみて一つずつ入れれば自分のやりたい範囲は動作した

pip install notion
pip install cached-property
pip install commonmark
pip install python-slugify
pip install tzlocal
pip install dictdiffer

Reminders to Notion

早速 Reminders リストの取得を試みるもURLが取得できなかった。notionにポストする方じゃなくてiOSアプリでコケるとは。

import reminders
todo = reminders.get_reminders(completed=False)
print('TODO List')
print('=========')
for r in todo:
    print('[ ] ' + r.title)
    print('[ ] ' + r.url)

気を取り直して、Shortcuts アプリを使って Reminders を辞書化して作ったテキストデータをクリップボード経由で Pythonista に渡すことにした。Pythonista 側ではタイトルのリストを作成してクリップボードにセットして、shortcuts をコールバックする。

クリップボードにタイトルが含まれるものは完了マークを付ける。Shortcuts の Automation 機能で Reminder アプリを閉じた時にショートカットを開く設定にしておけば Reminder to Notion は半自動化される。

import clipboard
import webbrowser
from ast import literal_eval

from notion.client import NotionClient

# Obtain the `token_v2` value by inspecting your browser cookies on a logged-in (non-guest) session on Notion.so
client = NotionClient(token_v2="************************************************************************************************************************************************************")

# Access a database using the URL of the database page or the inline block
cv = client.get_collection_view("https://www.notion.so/********************************?v=********************************")

reminders = clipboard.get().splitlines()

titles = []
for reminder in reminders:
    reminder = literal_eval(reminder)
    title = reminder.get('title')
    url = reminder.get('url')
    
    row = cv.collection.add_row()
    row.name = title
    row.url = url
    
    titles.append(title)
    
output = ''
clipboard.set(output.join(titles))

webbrowser.open('shortcuts://')

ここまでやっといて数回使ったあとに notion に inbox 運用はなんかしっくりこなくてやめた。やっぱ Gmail とか Google Tasks でいいんだよね、受信箱は。