OmniAICreator/Qiita-1.07M huggingface dataset:
[ReviewAI 使用例] 名家  [新大久保 韓国料理店]


# はじめに

レビュー分析AIサービスの ReviewAI (レビューアイ) を開発しています。
本記事ではレビュー分析の例として、新大久保の韓国料理の人気店を取り上げていきます！
[人気店の記事をまとめているページはこちらです。](https://qiita.com/RetegyLink/items/3d94852bf25a724a82cc)

今回は、名家 の食べログに集まっているレビューを分析します。

## 名家

> 料理が美味しく、くつろげる店

[食べログ](https://tabelog.com/tokyo/A1304/A130404/13004157/)

## ReviewAI (レビューアイ)

弊社 RetegyLink が開発中のレビュー分析 AI です。
https://reviewai.next-seed.work/
試作版を公開中で、現在は
- [食べログ](https://tabelog.com/)
- [じゃらん](https://www.jalan.net/)
のレビューを分析できます。

# レビュー分析

さっそくですが、こちらが分析結果です！
チヂミ・カンジャンケジャン・キムチと美味しそうな単語に加えて
ランチ・円 という気になる単語もありますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776808/46921c45-22f3-705c-7405-c959027caf0a.png)


## チヂミ

<font color=steelblue>**良い評価**</font>

- 期間限定、生牡蠣のチヂミは最高。
- カンジャンケジャンは文句なしに美味しいし、具材が主役のチヂミも好み。
- 海鮮チヂミも外はカリッと香ばしく、具沢山で最高すぎる。


## カンジャンケジャン、ケジャン

<font color=steelblue>**良い評価**</font>

- このお店で必食なのはカンジャンケジャン。
- ボリュームもなかなかありこのお値段でこのクオリティのカンジャンケジャンは日本ではあまり食べられないのでは？と思います。
- ここのケジャンが大好き、ご飯にタレかけて食べんの最高


## キムチ

<font color=steelblue>**良い評価**</font>

- ここのキムチの味が好き。
- 白菜キムチ、サンチュ、エゴマが付いてきます。
- 帰りにはキムチのお土産まで頂いて帰ってきました。

## ランチ

<font color=steelblue>**良い評価**</font>

- ランチで行きましたが、単品でも頼めるとのこと。
- お酒を飲みながらのゆっくりランチに最適。
- ランチで訪問5品のおかずもついてきてコスパとてもいいです。


## 円

<font color=steelblue>**良い評価**</font>

- 漬け具合もちょうど良くてたっぷり食べれて至福ごはんセット＋330円は必須注文です✍
- ランチは1000円以内でおかずが4か5品ついてボリューム満点。


<font color=chocolate>**黄色・橙色の評価**</font>

- カンジャンケジャンを単品一匹注文4000円でしたライスは別料金で注文が必要、　シェアにしても半身で2000円というのは高過ぎました



## ReviewAI の改善点

カンジャンケジャン、ケジャンが分かれてしまっていますね。
ユーザーが辞書を調整できる機能を作った方がよいかもしれません。

# おわりに

カンジャンケジャンを注文する人が多いようです。
値段については賛否両論でした。

観点ごとの詳細を確認されたい方は、ぜひサイトにアクセスして確認してください！
レビュー分析AI の [ReviewAI](https://reviewai.next-seed.work/) は試作版を公開中です。
今回分析した 名家 の URL はこちらです。
```
https://tabelog.com/tokyo/A1304/A130404/13004157/
```

今後どんどん使いやすくしていく予定ですので、
ぜひ皆様の ReviewAI に関するご意見を[アンケート](https://docs.google.com/forms/d/e/1FAIpQLSc-yVTDeqqMc9GqM93BvzaYWCB6wyToesYj_wl8bhwKgw8LqQ/viewform?usp=sf_link)で教えてくださると幸いです。
論文を読んで LLM のセキュリティについて考える：Adversarial Attacks and Defenses in Large Language Models: Old and New Threats

※ この記事は「Adversarial Attacks and Defenses in Large Language Models: Old and New Threats」を要約になります。

## 対象読者
- 自然言語処理（NLP）や大規模言語モデル（LLM）研究者・エンジニア
- セキュリティ専門家
- LLM のセキュリティに関心があり、攻撃と防御に関する最新の研究動向を理解したい方

## この記事を読むと何がわかるか
- LLMに対する既存および新しい脅威についての概要
- 攻撃の種類とその影響
- 防御方法の現状とその評価の課題
- LLMに特有の攻撃や防御の実例
- より効果的な防御評価のための指針

## 背景と問題点

LLM は、近年の AI 技術の進歩によって、NLP や他の多くの分野で驚異的な成果を上げています。ChatGPT、Google Bard、Anthropic の Claude などのモデルは、多くのユーザーに利用され、実用的なアプリケーションに広く採用されています。しかし、これらのモデルには依然として多くの課題が存在します。その中でも特に重要なのが、敵対的攻撃に対する脆弱性です。

### 敵対的攻撃の脆弱性

**敵対的攻撃**は、モデルの入力に対して微小な変更を加えることで、誤った出力を誘発する攻撃です。これらの攻撃は、以下のような問題を引き起こします：
- **セキュリティリスク**：攻撃者がシステムを悪用して不正な操作を行ったり、データを盗んだりする可能性があります。
- **信頼性の低下**：ユーザーがモデルの出力に対して信頼を置けなくなり、システム全体の信頼性が低下します。
- **倫理的問題**：攻撃によって生成された出力が有害な内容を含む場合、社会的に重大な影響を与えることがあります。

### 防御の課題

多くの研究が敵対的攻撃に対する防御策を提案していますが、これらの防御策には以下のような問題点があります：

**防御評価の不備**：
- **過剰な防御評価**：新しい防御方法はしばしば過剰に評価されることが多く、実際の耐性が過信されることがあります。これにより、誤った安心感が生まれます。
- **標準化された評価手法の欠如**：評価手法が統一されていないため、異なる研究間での比較が困難です。これにより、最適な防御方法の特定が難しくなります。

**具体的な例**：
- 例えば、ある防御策が特定の攻撃手法に対して効果的であっても、他の手法に対しては脆弱であることが多いです。このため、包括的な防御が難しく、部分的な防御にとどまってしまうことが多いです。

### 大規模言語モデル（LLM）に特有の課題

LLMには、以下のような特有の課題があります：
- **閉鎖型モデルの増加**：ChatGPT や Google Bard など、閉鎖型のLLMは外部からのアクセスが制限されており、攻撃や防御の研究が難しくなっています。
- **エンベディング空間攻撃**：オープンソースの LLM では、エンベディング空間を利用した新しいタイプの攻撃が可能です。この攻撃は、従来の離散空間攻撃よりも効率的であり、より少ない計算資源で大量の悪意あるコンテンツを生成できます。

## じゃあ、これらの問題にどう対処すればいいの？

LLMに対する脅威を効果的に防御するためには、以下のような具体的なステップを実施することが重要です。

### 1. 脅威モデルの明確化

まず、脅威モデルを明確に定義することが必要です。これには以下の要素が含まれます：
- **攻撃者の目標**：攻撃者が何を達成しようとしているのかを明確にします。
- **ハイパーパラメータの設定**：攻撃に使用されるハイパーパラメータを具体的に定義します。
- **ベンチマークデータセット**：評価に使用するデータセットを統一します。これにより、異なる研究間での結果比較が容易になります。

### 2. ベンチマークの統一

LLMの防御策を評価するために、統一されたベンチマークを使用することが重要です。これにより、以下の利点が得られます：
- **結果の一貫性**：異なる研究間での比較が可能になり、最適な防御方法を特定しやすくなります。
- **有害行動の定義**：文化的背景に左右されない狭いベンチマークデータセットを使用することで、簡潔に評価を行います。

### 3. エンベディング空間攻撃への対策

エンベディング空間攻撃は、新しい脅威モデルとして特に注意が必要です。以下の手法を取り入れることで、効果的な防御が可能です：

- **エンベディングの最適化**：LLMのエンベディング層を通過させた後、特定のトークンエンベディングを最適化して攻撃を防ぎます。
- **初期応答の管理**：エンベディング空間攻撃に対して初期応答の生成を制御することで、LLMの出力を監視・管理します。

### 4. 最近の防御方法の評価

新しい防御方法を評価し、実際の効果を確認します。具体的には以下のような手法があります：

- **部分文字列分析**：LLMの入力を全ての可能な部分文字列に分割し、代用モデルを用いて有害な指示を検出します。有害な部分文字列が見つかると、LLMはリクエストに応答しません。
- **攻撃の回避方法**：攻撃者が有害な指示を含まない攻撃を行うことで防御方法を回避できる可能性があるため、これに対する対策も検討します。

### 5. 脅威モデルの緩和

現実的なシナリオに基づいた脅威モデルを緩く設定し、現実の攻撃シナリオに近づけることで防御評価の精度を向上させます。

### 実施手順の例

1. **脅威モデルの策定**：研究チームは攻撃者の目標や使用するデータセット、評価方法を明確に定義します。
2. **ベンチマーク設定**：統一されたベンチマークを選定し、全ての評価に一貫して使用します。
3. **エンベディング空間攻撃対策の実装**：モデルのエンベディング層を最適化するアルゴリズムを導入し、攻撃に対する防御を強化します。
4. **防御方法の評価**：新しい防御方法を適用し、ベンチマークデータセットを用いてその効果を検証します。
5. **結果の共有**：評価結果をコミュニティと共有し、フィードバックを基に更なる改善を行います。

## まとめ

以上が、「Adversarial Attacks and Defenses in Large Language Models: Old and New Threats」の要約になります。いかがだったでしょうか？
LLM をただ単に利用するだけじゃなくて、セキュリティに関しても考えたいですね。

おわり。
[翻訳] コントラクトをローカルにデプロイする際のプライベートキーのハッキングリスク


:::note info
本記事は下記の翻訳となります。
[『The Hacking Risk of Private Keys When Deploying Contracts Locally』](https://blog.bunzz.dev/the-hacking-risk-of-private-keys-when-deploying-contracts-locally/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/632917ee-a8c4-7982-712c-90cd8532f8b3.png)

## ETH Global Tokyo からの真実の物語

この物語は ETH Global Tokyo で展開されました。Bunzz Prize ハッカソンに参加した開発者が、プレゼン中に凍りつき、「攻撃を受けた！」と叫びました。何が起こったのか尋ねると、「私のウォレットがハッキングされ、資金が抜き取られました」と言いました。原因はすぐに明らかになりました。彼はローカルの開発環境を使用し、契約をデプロイするためにプライベートキーをローカルに保存していました。

残念ながら、このプライベートキーは、彼が開発していた DApp プログラムのコードで指定された保存場所が公開された GitHub リポジトリにプッシュされていました。要するに、彼のプライベートキーは世界中のどこからでも見える状態でした。

## ハッカソンの慌ただしい環境

以下は考えられる理論です。ハッカソンが開催されると、初心者を含む多くの開発者が参加し、通常よりもプレッシャーの中でコードを書くことがあります。締め切りが迫るにつれ、急いでコードを GitHub にアップロードすることになるかもしれません。世界のどこかで、悪意のある人物がハッカソンのスケジュールを把握し、新しいリポジトリが次々と作成されるのを待っているかもしれません。彼らはこの山のようなコードを見て、プライベートキーを見つけ出します。

これは考えられないシナリオではありません。なぜなら、私たちの被害者はコードの提出後すぐに資金が引き出されたからです。実際、特定のキーワードを使用して GitHub を検索すると（さらなる悪用を防ぐために明かしません）、プライベートキーが明示的にリストされているいくつかのリポジトリが見つかりました。

![](https://super-translator.inaridiy.workers.dev/assets/image/a7c1eeaa-3a26-4ca4-a56d-7b0429a22364)

開発者は、ローカル環境からデプロイする際に GitHub に機密キーを無意識にアップロードすることがあり、ハッカーの攻撃を受ける可能性があります。

恐ろしい事実は、Hardhat、Truffle、Foundry などのローカル開発環境を利用するユーザーなら誰にでも起こり得るということです。これらの環境では、プライベートキーをローカルに保存し、その場所をコードで指定する必要があります。

## 安全な Web3 開発環境の探求

このような事故を回避する方法は、ローカル環境の代わりに Remix のような IDE を使用することです。ただし、Remix を主要な開発環境として使用している開発者は少なく、安全な Web3 開発環境がまだ存在しない可能性があります。

このため、[Bunzz](https://bunzz.dev/)のデプロイプロセスは MetaMask を介して行われ、このようなリスクを軽減しています。また、私たちは開発インフラの一環として理想的な IDE の開発の可能性を継続的に探求しています。プライベートキーのセキュリティを向上させることは、Web3 の発展を確実に推進するでしょう。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
メディアクエリ

# はじめに
media queryの使い方を知らなかったのでメモ

デバイスに応じてスタイルを変えれるようになる

@mediaを使って何かしらのパラメータを設定
例

```.css
@media (max-width: 800px) {
    h1 {
        color: red;
    }
}
```

# サンプル
```.html
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Media Queries</title>
    <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap" rel="stylesheet">

    <link rel="stylesheet" href="style.css">
</head>

<body>
    <nav>
        <a href="#home">Home</a>
        <ul>
            <li>
                <a href="#Home">Learn More</a>
            </li>
            <li>
                <a href="#Home">About</a>
            </li>
            <li>
                <a href="#Home">Contact</a>
            </li>
        </ul>
        <a href="#signup">Sign Up</a>
    </nav>
    <h1>Media Queries</h1>
</body>

</html>
```

```.css
body {
    font-family: 'Open Sans', sans-serif;
}

h1 {
    font-size: 6rem;
    text-align: center;
}

nav {
    font-size: 1.5rem;
}

ul,li {
    display: inline;
    margin: 0;
    padding: 0;
}

@media (width: 800px) {
    h1 {
        color: red;
    }
}


/* 800以上のサイズがある時に適用 */
@media (min-width: 800px) {
    h1 {
        color: red;
    }
}

/* 800px以下のサイズの時に適用 */
@media (max-width: 800px) {
    h1 {
        color: red;
    }
}

/* 600pxから800pxの間に適用 */
@media (min-width:600px) and (max-width: 800px) {
    h1 {
        color: red;
    }
}

/* 以下の順番だと、1000pxまでの方が優先されるのでオレンジのまま */
@media (max-width:500px) {
    h1 {
        color: red;
    }
}

@media (max-width:1000px) {
    h1 {
        color: orange;
    }
}

/* 順番を入れ替えると想定通り */
@media (max-width:1000px) {
    h1 {
        color: orange;
    }
}

@media (max-width:500px) {
    h1 {
        color: red;
    }
}

/* デバイスを横に向けると背景色が変わる */
@media(orientation: landscape){
    body {
        background-color: yellow;
    }
}
```
特定のclassを持つ最後の要素

以前は出来なかった特定のclassを持つ最後の要素への装飾。
それが今なら **:has()** を使って実現できるなと気づいたのでメモ。

## これまで

これまで最後の要素への装飾で使われてきたのは **:last-child** と **:last-of-type** の2種類かと思います。

### :last-child

文字通り最後の要素。

> The :last-child CSS pseudo-class represents the last element among a group of sibling elements.

[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-child) にこうある通り、兄弟要素の中の最後の要素を指定できます。
以前は親がある要素という縛りがありましたがSelectors Level 4からそれもなくなった様です。（Safariは未対応。執筆時点）

### :last-of-type

こちらはタグの種類の中での最後の要素。

> The :last-of-type CSS pseudo-class represents the last element of its type among a group of sibling elements.

[MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/:last-of-type) にこうある通り、兄弟要素の中でタグの種類ごとに分けたグループの中の最後の要素を指定できます。

### class名を起点にした選択はできなかった

これまでは上記2つしかなかったので、特定のclassを持った中の最後の要素という指定はできなかった。
それほどの頻度ではなかったが指定したい場面には何度か遭遇したことがあり、地味に困った記憶だけがある。

## 現在

:last-child や :last-of-type のように直接選択できる擬似クラスが登場したわけではないが、なんとも便利な `:has` 擬似クラス関数が登場したことで、特定のclass名を持つ最後の要素という指定も可能になった。

```html
<div class="has">
  <div class="start">div.start</div>
  <div class="item">div.item</div>
  <div class="item">div.item</div>
  <div class="item">div.item</div>
  <div class="end">div.end</div>
</div>
```

例えばこういったHTMLがあった場合、最後の div.item を指定するにはどうしたらいいか。

```css
.item:not(:has(~ .item)) { ... }
```

こういう形で、「以降の兄弟要素に指定したいclassを持たない」という指定をしてあげることで選択することができる。

以下実際の表示になります。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="LYoVgOL" data-user="forty4_jp" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/forty4_jp/pen/LYoVgOL">
  Last element with :last-child, :last-of-type and :has</a> by Masato Saito (<a href="https://codepen.io/forty4_jp">@forty4_jp</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

has() がほとんどのブラウザで使える様になり、以前は出来なかったことがいろいろできる様になりましたね。
【AtCoder】備忘録345-B

## 問題

https://atcoder.jp/contests/abc345/tasks/abc345_b

PHPで解いています。

## 解答

```php
<?php

$x = intval(trim(fgets(STDIN)));

if($x % 10 === 0){
    $result = $x / 10;
} elseif ($x > 0){
    $result = intdiv($x, 10) + 1;
} else {
    $result = intdiv($x, 10);
}

echo $result.PHP_EOL;
```

## つまづいたポイント

:::note info
正の整数、負の整数それぞれの切り上げ方法
:::

正の場合：単純に入力値を10で割ってしまうと切り捨てになってしまうので+1をする。
```php
$result = intdiv($x, 10) + 1;
```

負の場合：整数の商そのものが切り上げとなるため、単に整数の商を求める。
```php
$result = intdiv($x, 10);
```
イラヴ語の「喉頭破裂音」にはどういう文字コードを割り当てるべきなのか

富浜定吉『宮古伊良部方言辞典』(沖縄タイムス社, 2013年12月)は、喉頭破裂音(グロッタルストップ)をかなり特殊な仮名で表している。

![irav-east.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/c035a645-93ca-801a-9c04-321a13a3a120.png)

![irav-mirror.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/cff3e155-848e-fe3c-ab42-af373665b455.png)

![irav-grave.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428317/1c9f84cd-91a3-ad8a-e523-b7e96bf2c94b.png)

「あ」の上に乗っているのは「COMBINING RIGHT ANGLE ABOVE」とでも呼ぶべき記号なのだが、私(安岡孝一)の知る限り、ISO/IEC 10646 (Unicode)にはU+031A「COMBINING LEFT ANGLE ABOVE」はあっても、逆向きは無い。意味的にはU+02E4「MODIFIER LETTER SMALL REVERSED GLOTTAL STOP」が近いが、この文字は「あ」の上に乗せることができない。

ならば、発音記号の「aʔaᶻï」「kaʔam」「paʔa」はどうだろう。『[南琉球宮古方言調査報告書](https://doi.org/10.15084/00002456)』(国立国語研究所, 2012年8月)の基礎語彙aデータと見較べてみよう。

| |a143 東|a124 鏡|a186 墓|
|--|--|--|--|
|池間|aɡai|kaɡaŋ|haka|
|狩俣|aːɯ /「東風」aːɡaʥi|kʰaɡaŋ|pḁka|
|島尻|aʁaɿ|kʰaʁaŋ|pḁχa|
|大浦|(aɡaɿ ～) aːɿ|kʰaɡaŋ / kʰaɡammu (鏡を)|pʰaka|
|久貝|aɡ̄az (ɡ̄ = 後ろ寄りのɡ) /「東風」aɡ̄azkʰaʥi|kʰaɡam|pʰḁka|
|与那覇|aɡaᶻɿ|kʰaɡam|pʰaka|
|上地|aɣal|kaɡam̩|pḁka|
|来間|aɡaɭ [A]// aɡaz [B]|kaɡam|pḁka|
|砂川|aɡaz̩|kaɡam̩|pḁka|
|保良|aɡaɿ|kʰaɡam|pʰḁka|
|伊良部|aˁaɿ|kʰaaˁm|pʰaː ～ pʰa̰ː|
|国仲|aɡaɭ|kaɡam̩|pḁka|

伊良部の「aˁaɿ」を見る限り、U+02E4で「喉頭破裂音」を表しているように見える。ただし「pʰaː ～ pʰa̰ː」でなくて「pʰaˁa」あたりでないと話が合わないし、U+02E4を仮名に挟んで「あˤあイ゚」「かˤあン」「ぱˤあ」でガマンする、というのは、やっぱりうまくいかなそうだ。このあたり、どうしたらいいかなあ。
ancel タイトルを入力してください

fasffasdsfd
![translated_image_mn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3792699/53760c0a-e967-c2f1-ded3-42efbbc4d20d.png)
fasddddddddddddddddddddddddddddddd
Databricks にて dbutils.notebook.run によるノートブックワークフロー実行に関する出力結果が改善されていることに歓喜

## 概要

Databricks で他のノートブックを実行する際に`dbutils.notebook.run`機能を使用する際の出力結果が非常に見やすくなりました。この変更は少し前から適用されていましたが、Databricks Release のドキュメントではまだこの点についての言及がないようです。私のように`dbutils.notebook.run`を単体テストに頻繁に使用しているユーザーにとっては、この視覚的な改善は大変喜ばしいことです。ただし、ジョブの実行結果を確認するには、`Start time`または`End Time`をクリックする必要がある点に留意してください。新しい UI について解説します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/da5ca404-a50e-8bd8-4e6e-8055dd9936d8.png)

## ノートブックワークフロー実行に関する出力結果について

### 新旧比較

従来は`Notebook job #{job_id}`のような質素なものでした。実行するノートブックが少数や並列で実施しない場合などには特に不便ではありません。単体テストやテーブルの作成を実施する際などには 50 以上のノートブックを実行することがあり、エラーが起きた時などにはどこでエラーが起きているかを確認することが困難でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1917c47e-2541-af9c-f05f-32e57e47f618.png)

引用元：[Run a Databricks notebook from another notebook | Databricks on AWS](https://docs.databricks.com/en/notebooks/notebook-workflows.html#example)

新 UI では下記画像のようになり、開始時刻、実行しているノートブック、実行状況、および、パラメータを確認できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2ca95e84-3ee8-eebc-e536-10b2ee860942.png)

### 出力される項目

2024年5月15日時点で、出力される項目としては次表の項目があります。非表示になっている項目については、後述の方法で表示することができます。

| #    | 項目           | デフォルトでの表示 | 概要                                 |
| ---- | -------------- | ------------------ | ------------------------------------ |
| 1    | Run ID         |                    | ノートブック実行（ジョブ）のラン ID  |
| 2    | Start time     | 〇                 | ノートブック実行（ジョブ）の開始事項 |
| 3    | End Time       | 〇                 | ノートブック実行（ジョブ）の終了事項 |
| 4    | Notebook Path  | 〇                 | ノートブックのパス                   |
| 5    | Duration       | 〇                 | 実行時間                             |
| 6    | Status         | 〇                 | 実行状況                             |
| 7    | Error code     | 〇                 | エラー時の出力結果                   |
| 8    | Run parameters | 〇                 | 実行時のパラメータ                   |

### Tips

#### 実行中のノートブックを停止する方法

右端にある`■`を選択することで実行中のノートブックを停止できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/dc39ea46-0426-1238-83c9-aa90ca43d1d4.png)

#### 実行結果のジョブ画面に移動

`Start time`、あるいは、`End Time`をクリックすると、実行しているジョブの画面に移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8cc19966-dc3c-d155-6814-e3bfbb58f756.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/babf9f4d-67a7-77c7-d0b0-d2934ea96794.png)

#### 実行しているノートブックに移動

`Notebook Path`をクリックすると、実行しているノートブックに移動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3ddc532f-dc4c-9c83-8001-2b3733708c29.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c4cc7668-fcd3-1dac-c2bc-7fb1e0a99b24.png)

#### 非表示の項目を表示

右端にある窓枠のようなロゴを選択し、表示したい項目（例：`Run ID`をクリックすると表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ab552119-31cb-f0d5-7470-c3bdb4f15276.png)
LINEヤフーのclip-japanese-baseをDatabricksで動かしてみる

マルチモーダルもどんどん進化していきますね。

https://techblog.lycorp.co.jp/ja/20240514b

GPUクラスターで動かします。

https://huggingface.co/line-corporation/clip-japanese-base

```py
%pip install pillow requests sentencepiece transformers torch timm
dbutils.library.restartPython()
```

画像を確認します。

```py
import io
import requests
from PIL import Image
import matplotlib.pyplot as plt

image = Image.open(io.BytesIO(requests.get('https://images.pexels.com/photos/2253275/pexels-photo-2253275.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260').content))

# 画像の表示
plt.imshow(image)
plt.show()
```

犬です。
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/75fa13e4-dc1e-d57c-1f0d-58c425d5b96a.png)

```py
import io
import requests
from PIL import Image
import torch
from transformers import AutoImageProcessor, AutoModel, AutoTokenizer

HF_MODEL_PATH = 'line-corporation/clip-japanese-base'
tokenizer = AutoTokenizer.from_pretrained(HF_MODEL_PATH, trust_remote_code=True)
processor = AutoImageProcessor.from_pretrained(HF_MODEL_PATH, trust_remote_code=True)
model = AutoModel.from_pretrained(HF_MODEL_PATH, trust_remote_code=True)
device = "cuda" if torch.cuda.is_available() else "cpu"

image = Image.open(io.BytesIO(requests.get('https://images.pexels.com/photos/2253275/pexels-photo-2253275.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260').content))
image = processor(image, return_tensors="pt")
text = tokenizer(["犬", "猫", "象"])

with torch.no_grad():
    image_features = model.get_image_features(**image)
    text_features = model.get_text_features(**text)
    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)

print("Label probs:", text_probs)
```

```
Label probs: tensor([[1., 0., 0.]])
```

犬にフラグが立っています。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
TypeScriptにおける末尾再帰最適化の理解と実践

## はじめに
末尾再帰最適化は、再帰関数の効率を大幅に向上させる重要な技術です。この記事では、末尾再帰最適化の基本概念と、TypeScriptにおける実装方法について説明します。

## 末尾再帰最適化とは？
末尾再帰最適化とは、再帰呼び出しが関数の最後に行われる場合に、スタックフレームを再利用してメモリの使用量を減らす技術です。これにより、深い再帰でもスタックオーバーフローを避けることができます。

通常の再帰関数では、関数が呼び出されるたびにスタックフレームが積み重なります。スタックフレームには、関数の引数、ローカル変数、戻りアドレスなどが保存されます。深い再帰が続くと、スタックフレームが大量に作られ、スタックオーバーフローを引き起こす可能性があります。

しかし、末尾再帰の場合、再帰呼び出しが関数の最後に行われるため、現在の関数の処理が終わった時点で新しいスタックフレームを作成する必要がありません。その代わりに、現在のスタックフレームを再利用できます。

## 末尾再帰の例
まず、通常の再帰関数と末尾再帰関数の違いを見てみます。

### 通常の再帰関数
```ts
function factorial(n: number): number {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}
```
この関数は、n が 0 に達するまで再帰的に呼び出されます。しかし、再帰呼び出しが関数の最後ではないため、末尾再帰ではありません。

### 末尾再帰関数
```ts
function factorial(n: number, acc: number = 1): number {
  if (n === 0) {
    return acc;
  } else {
    return factorial(n - 1, n * acc);
  }
}
```
この関数は、再帰呼び出しが関数の最後に行われるため、末尾再帰最適化が適用されるべき構造になっています。

## TypeScriptでの末尾再帰の実装
次に、TypeScriptでフィボナッチ数列を末尾再帰で計算する例を示します。

```ts
type Fib = (x: number) => number;
const fib: Fib = n => innerFib(0)(1)(n);

type InnerFib = (x: number) => (y: number) => (z: number) => number;
const innerFib: InnerFib = a0 => a1 => n =>
  n === 0 ? a0 : innerFib(a1)(a0 + a1)(n - 1);
```
このコードでは、innerFib 関数が末尾再帰の形をとっています。

## 末尾再帰最適化のメリット
- **メモリ効率の向上**：スタックフレームを再利用するため、メモリの使用量が減ります。
- **パフォーマンスの向上**：スタックフレームの作成と破棄が少なくなり、実行速度が向上します。
- **スタックオーバーフローの回避**：再帰呼び出しが深くなってもスタックフレームが増えないため、スタックオーバーフローのリスクが減ります。
## 現実のサポート状況
現在のJavaScriptエンジンは、末尾再帰最適化を完全にはサポートしていません。そのため、理論上は末尾再帰であっても、実際には最適化されない場合があります。
[翻訳] Bunzz for Enterprise: ビジネスにWeb3を利用しやすくする

:::note info
本記事は下記の翻訳となります。
[『Bunzz for Enterprise: Making Web3 Accessible for Businesses』](https://medium.com/@bunzzdev/bunzz-for-enterprise-making-web3-accessible-for-businesses-e86cbae86515)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/7b7f1e45-001c-ce43-7612-b35edaf410ac.png)

[Bunzz](http://bunzz.dev/)は、[Bunzz for Enterprise](https://enterprise.bunzz.dev/en)のローンチを発表して大喜びです。これは、あらゆる規模のビジネスが Web3 で始めて成功することを容易にする新しいプラットフォームです。

Web3 は次世代のインターネットであり、ビジネスの運営方法を革命化する可能性があります。Web3 はブロックチェーン技術に基づいており、従来のインターネットよりも安全で透明性があり、効率的です。

しかし、Web3 は新しい領域に参入するビジネスにとっても複雑でナビゲーションが難しい場合もあります。Bunzz for Enterprise は、ビジネスが Web3 のニーズを一括で解決するためのワンストップショップを提供することで、この問題を解決します。

Bunzz for Enterprise には、以下のようなさまざまな機能と利点があります：

- **エンタープライズブロックチェーンのコンサルティング**：Bunzz は、ビジネスが成功する Web3 戦略を開発・実施するために必要な戦略的なアドバイスとガイダンスを提供します。
- **Web3 PoC（概念実証）の開発**：Bunzz は、ビジネスがアイデアを検証し、潜在的な課題を特定するために Web3 の概念実証（PoC）を開発・テストするのを支援します。
- **エンタープライズシステムの開発**：Bunzz は、ビジネスの特定のニーズを満たすカスタムの Web3 エンタープライズシステムを開発・提供します。

Bunzz for Enterprise は、Web3 を始めたいビジネスにとって最適なパートナーです。Bunzz for Enterprise を利用することで、ビジネスは最高のアドバイス、ガイダンス、サポートを受けることができます。

Web3 がビジネスにどのような利益をもたらすかに興味があるビジネスオーナーや起業家の方は、Bunzz Enterprise との無料相談を申し込むことをお勧めします。

今すぐ[ここをクリック](https://enterprise.bunzz.dev/en)して無料相談を申し込んでください！

## Bunzz for Enterprise の利点

- 競争相手に先んじる：Web3 を早期に採用することで、ビジネスは競争上の優位性を得ることができます。
- 顧客体験の向上：Web3 は、忠誠プログラムやピアツーピアの支払いなど、新しい機能やサービスを提供することで、ビジネスの顧客体験を向上させることができます。
- 収益の増加：Web3 は、新しい市場を開拓し、新しい製品やサービスを提供することで、ビジネスの収益を増加させることができます。

Bunzz Enterprise との[無料相談](https://enterprise.bunzz.dev/en)を申し込んで、Web3 がビジネスにどのような利益をもたらすかをもっと学んでみましょう！

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
[翻訳] Bunzzが無料のAI搭載スマートコントラクト監査ツールをリリースしました。

:::note info
本記事は下記の翻訳となります。
[『Bunzz Launches AI-Powered Smart Contract Audit Tool with Free Audit』](https://medium.com/coinmonks/bunzz-launches-ai-powered-smart-contract-audit-tool-with-free-audit-8960726c535f)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/438597/da77e81c-55b7-d1f6-05e6-23f1b1aa3bf0.png)

私たちは、AI を活用したスマートコントラクト監査ツール「Bunzz Audit」のオープンベータ版のリリースを喜んでお知らせします。これを記念して、最初の 20 プロジェクトに対して[無料の監査レポート](https://9vi3topj6b2.typeform.com/to/EAb8IHmA)を提供しています。

## スマートコントラクト監査における課題の克服

Web3 プロトコルやアプリケーションを含む多くのプロジェクトは、スマートコントラクトの脆弱性や論理的な矛盾により、重大な運用上の問題やユーザー資産の不正ハッキング、サービスの停止などの被害を受けてきました。

これらの重大なリスクを回避するために、「スマートコントラクト監査」が行われています。しかし、既存の主要な監査企業のユーザーは、以下の課題に直面しています：

1. 監査にかかる非常に高額な費用（5 万ドルから 100 万ドルまで）
2. 財務負担により監査を行わずにプロジェクトを開始することが増え、脆弱性を悪用されて資産が盗まれる事例が頻発している
3. 時間のかかる監査により製品開発スケジュールが遅れる
4. 監査人によって報告の正確性やコミュニケーションコストが異なる

スマートコントラクト開発インフラストラクチャである Bunzz は、「Bunzz Audit」の研究開発によりこれらの課題を解決し、Openβ 版をリリースしました。

## Bunzz Audit の主な特徴と既存の監査サービスとの比較：

1. 監査企業と比べて格段に安価な費用
2. 製品開発のあらゆる段階での監査が可能（ローンチ後の継続的なコントラクト監査も含む）
3. SaaS モデルの採用により、ユーザーフレンドリーな UX で監査レポートに簡単にアクセスできる

ユーザーは、[Bunzz Audit を無料でお試しください。](https://9vi3topj6b2.typeform.com/to/EAb8IHmA)

Bunzz Audit は、監査業界の課題を根本的に解決します。

監査企業は通常、過去の既知の脆弱性パターンとクライアントの契約を比較し、プロジェクト固有の論理から生じる脆弱性や運用上の矛盾を探します。前者の検出は通常、監査人によって手動で行われ、高いコストと報告品質のばらつきにつながります。Bunzz Audit は、既知の脆弱性パターンのデータベースと既存の契約分析ツールの結果を、微調整された AI を使用して統合することで、これらの課題にスマートに対応しています（プロジェクト固有の脆弱性については手動監査が計画されています）。

1. 人間の目視チェックよりも正確な脆弱性の検出
2. 監査レポートの一貫した品質の維持
3. 監査人とのコミュニケーションコストの最小化
4. 監査レポートの作成にかかるリードタイムの大幅な短縮

## Bunzz Audit は、最初の 20 プロジェクトに対して無料の監査を提供します

Openβ 版のリリースを記念して、Bunzz Audit は最初の 20 プロジェクトに対して「無料」で監査を実施し、レポートを提供します。通常の監査費用が 5 万ドルから 100 万ドルに及ぶことを考えると、この機会を利用するユーザーには大きなメリットがあります。

ユーザーは、Bunzz Audit に無料のスマートコントラクト監査をリクエストすることができます。[こちらから](https://9vi3topj6b2.typeform.com/to/EAb8IHmA)

（注：長大または複雑な契約の場合、別途見積もりが必要な場合があります）

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
【PHP】西暦から世紀を求める方法

# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。

## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/

## 問題の内容
かなりざっくりと書くと、以下のような問題があった。

>西暦から何世紀かを返す関数を書け。例えば西暦2000年は20世紀、西暦1705年は18世紀を返すこと。

このような世紀を求める問題にぴったりの関数がある。

## ceil関数
>ceil(int|float $num): float
必要に応じて num を切り上げ、 num の次に大きい整数値を返します。


https://www.php.net/manual/ja/function.ceil.php

この関数を使えば以下のような処理で西暦から世紀を求めることができる。

```ruby:PHP
function centuryFromYear($year)
{
    return ceil($year / 100);
}
```

`$year`=1705年の場合、`$year/100`は17.05になる。さらにceil関数によって17.05を切り上げて、次の大きい整数値(この場合は18)を返す。

# 終わり
初めはif文を使って問題を解こうとしたが、調べてみるとちょうどよい関数があることが分かった。
PHPのマニュアルを見て、関数を使いこなせるようになりたい。
[翻訳] Bunzzのモニタリング機能が開始されました！

:::note info
本記事は下記の翻訳となります。
[『Bunzz Monitoring Feature launched!』](https://medium.com/@bunzzdev/bunzz-monitoring-feature-launched-d0a44c8456a)
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/3ec3d94d-c8a3-7bfd-8963-faa3bc1b9b08.png)

Bunzz Monitoring Feature がリリースされました！

Bunzz は、約束するのではなく、過剰に提供することを誇りにしています。

ロードマップで予想されていた通り、ダッシュボードで利用できる MONITORING 機能を発表できることを喜んでお知らせします。この機能は、Dapp のための分析システムを提供します。

Dapp を最終ユーザーに公開した後、当社の SDK はユーザーのアクティビティを追跡し、情報を保存します。これらの情報は Bunzz のダッシュボードセクションで利用可能で表示されます。

モニタリング機能には以下が含まれます:

- 初期化の回数に関する統計情報
- 各関数の呼び出し回数（日別）
- すべての関数呼び出しの合計回数（日別）
- \*フロントエンドアプリケーションがアナリティクスを取得するために、bunzz-sdk のバージョン 1.1.1 以上を使用していることを確認してください

Bunzz ダッシュボードにサインインして、こちらをチェックしてください: https://app.bunzz.dev/

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
AWS ではどうやって1日5回のコードリリースを可能にするのか？

### なぜこの記事を書いたのか？
- AWS-SAP の問題文に、「1日5回のコードリリースは可能。本番環境とテスト環境のVPC を交換できる」と書かれていて、実装に興味を持ちました

#### 前提条件
- [AWS のブルー/グリーンデプロイ](https://aws.amazon.com/jp/quickstart/architecture/blue-green-deployment/)で実現可能

[AWS のブルー/グリーンデプロイ](https://aws.amazon.com/jp/quickstart/architecture/blue-green-deployment/)
AWS CodePipeline を使用した AWS Elastic Beanstalk 環境へのデプロイ

#### 概要
- AWS CodePipeline を使用してElastic Beanstalk 環境へデプロイする過程で、本番環境をブルーとし、同一環境をグリーンとして一時的に構築し、 ブルーとグリーンのURL を交換することで、ブルーに対して安全にデプロイしサービスを継続したままデプロイを完了します
- デプロイとテストが完了すればブルーとグリーンのURL を元に戻し、グリーンの環境を終了させます

#### AWS のブルー/グリーンデプロイを使う利点
- 利用者はアプリケーションコードのテストとデプロイパイプラインの作成を担当し、デプロイに集中できる
- 任意のタイミングでブルーとグリーンのURL を交換できる
- ロールバックが迅速に行える
- グリーンの環境構築と終了をAWS に分担できる

#### アーキテクトのカギ
- 本番環境の複製を作るのに、Elastic Beanstalk で一気に構築するので、デプロイ中のアプリケーション継続とロールバックを簡単にしているのがすごい
Rails Ransack 複数カラムを使用した絞り込み検索の実装

検索機能を作っていると、単一のカラムだけではなく複数カラムを使った検索が必要になることがありますよね。
例えば、商品価格と送料を合計した値で絞り込みたいなど。
この記事では、RailsでRansackを使って複数カラムの合計値で絞り込み検索を実装する方法を紹介します。

# 実装の概要
## モデルにransackerを定義する
まず、Productモデルにカスタムransackerを定義します。ここでは、item_priceとshipping_priceを合計したprice_totalという仮想的なカラムを作成します。

```ruby
class Product < ApplicationRecord
  ransacker :price_total do
    Arel.sql('(item_price + shipping_price)')
  end
end
```
## コントローラでの検索処理
次に、コントローラでRansackを使用して検索を実行します。以下はProductsControllerの例です。

```ruby
class ProductsController < ApplicationController
  def index
    @q = Product.ransack(params[:q])
    @products = @q.result
  end
end
```

## ビューでの検索フォーム
最後に、ビューで検索フォームを作成します。以下は、price_totalが指定の値以上の商品をフィルタリングするための検索フォームの例です。

```erb
<%= search_form_for @q do |f| %>
  <%= f.label :price_total_gteq, "合計価格が指定以上" %>
  <%= f.number_field :price_total_gteq %>
  <%= f.submit "検索" %>
<% end %>
```

# まとめ
これで、商品価格と送料の合計が指定された値以上の商品をRansackでフィルタリングできるようになりました。
Ransackを使うことで、カスタムransackerを定義し、複数カラムを使った複雑な検索条件も簡単に実装できます。
[翻訳] ERC-5791: Physical Backed Tokens【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『ERC-5791: Physical Backed Tokens Smart Contract Module in Bunzz』](https://blog.bunzz.dev/erc-5791-physical-backed-tokens-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/f9d29393-55dd-4272-8691-7e4d009e3260.png)

ERC-5791: Physical Backed Tokens モジュールは、EIP-721 の拡張であり、EIP-721 NFT の所有権を物理チップにリンクするための最小限のインターフェースです。

このモジュールは、EIP-721 NFT が「物理的にバックアップされ、NFT の物理的な対応物を所有する人によって所有されることを提案しています。

これは、すべての chipAddress -> tokenIds がコントラクトオーナーによって契約に事前設定された PBT の実装です。

このモジュールとコードには、[https://bit.ly/3JV9Ijl](https://bit.ly/3JV9Ijl)からアクセスできます。

### 使い方

各 NFT は概念的に物理チップにリンクされています。

NFT が作成されるとき、対応するチップアドレス（チップの公開鍵から派生した 20 バイトのアドレス）を含むイベントも発行する必要があります。これにより、ダウンストリームのインデクサーは、NFT コレクションのどのチップアドレスがどのトークンにマップされているかを知ることができます。NFT は、特定のチップにトークン ID がリンクされていない場合には作成できません。

このインターフェースには、transferTokenWithChip という関数が含まれており、有効な署名（チップによって署名されたもの）が渡された場合、NFT を関数呼び出し元に転送します。有効な署名は、EIP-191 および EIP-2 で設定されたスキームに従う必要があります（s-value の制限）。署名するデータは、対象の受信者アドレス（関数呼び出し元）と最新のブロックハッシュ（最新性のレベルは実装による）で構成されます。

このインターフェースには、物理アイテムのチップがコレクション内の既存の NFT をバックアップしているかどうかを誰でも検証できる他の関数も含まれています。

EIP-721 トークンがこの EIP を介して物理的なバインディングを実装していることを認識するためには、EIP-165 の`function supportsInterface(bytes4 interfaceID) external view returns (bool)`を`interfaceID=0x4901df9f`として呼び出すと、この EIP を実装した契約は true を返さなければなりません。

ミントのインターフェースは実装によるものです。ミントされた NFT の所有者は、物理チップの所有者であるべきです（この認証は、{transferTokenWithChip}に定義された署名スキームを使用して実装することができます）。

### 関数

**#WRITE**

- transferTokenWithChip
- safeTransferFrom
- transferFrom
- transferTokenWithChip
- approve
- setApprovalForAll
- safeTransferFrom

**#READ**

- getApproved
- isChipSignatureForToken
- name
- symbol
- tokenIdFor
- tokenURI
- balanceOf
- isApprovedForAll
- ownerOf
- supportsInterface
- tokenIdMappedFor
- getMaxBlockhashValidWindow

このモジュールとコードには、[https://bit.ly/3U7lg7T](https://bit.ly/3JV9Ijl)からアクセスできます。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
[翻訳] Merkle Tree Airdrop【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『Merkle Tree Airdrop Smart Contract Module in Bunzz』](https://blog.bunzz.dev/merkle-tree-airdrop-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/9e27aae6-89d6-0b84-0a55-02210c2d475a.png)

MerkleTreeAirdrop コントラクトモジュールは、ERC20 のためのエアドロップとして機能します。データの検証、つまりユーザーのために Merkle ツリーを構築するために使用される Merkle プルーフと適切な引数に基づいてトークンを送信します。このコントラクトでは、ウォレットアドレスのリストとルートハッシュが必要であり、これらはツリー内のそのアドレスに対して指定されたデータが存在することを検証するために必要な葉と Merkle プルーフです。

このモジュールとコードには、[こちら](https://bit.ly/3UraBEX)からアクセスできます。

## 使用方法

1.  ERC20 トークンをエアドロップトークンとして準備します。既存のトークンを使用するか、DApp のページで新しい ERC20 トークンをデプロイできます
2.  ホワイトリストとそのドロップ量を準備し、Merkle ツリーを生成し、JSON ファイルに出力します。以下に JSON ファイルの形式を示します。それには Merkle ルート、エアドロップの合計トークン量、個々のトークン量、および Merkle プルーフのリストが含まれています
3.  Merkle ルートで`MerkleTreeAirdrop`コントラクトをデプロイします
4.  ドロップアセットをこのコントラクトに転送します
5.  受益者は`claim`関数を使用してドロップトークンを請求できます
6.  検証済みのユーザーのみが請求できます

```
{
  "merkleRoot": "0x73e9ab882da5e26fbfb0323ad8c171fa34847aedf17518960144a3d7712b8fb0",
  "tokenTotal": "12000000",
  "claims": {
    "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65": {
      "index": 0,
      "amount": "5000000",
      "proof": [
        "0x7084f9587399496b678c3c3bc2e260bde1a36c4ef20e5ba31a6586a78ea84052",
        "0xca1fa0f64eefb1c6dd3e7f07e195c823422dc15d36b308bcbd96c972f031c060"
      ]
    },
    "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC": {
      "index": 1,
      "amount": "1000000",
      "proof": [
        "0xf7f4759620b7517d89196c50cee28b670bc9269d7671dfd9a403e79ba1dda996",
        "0x8e20e72ee3a98a39b7fb5b1b7eb0bd446a6bfadf5ed012e0f5d29220312c1076"
      ]
    }
  }
}
```

## 関数

**#書き込み**

- connectToOtherContracts
- renounceOwnership
- claim
- transferOwnership

**#読み取り**

- isClaimed
- merkleRoot
- owner
- token

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
[翻訳] ERC-4626: Tokenized Vault Standard 【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『ERC-4626: Tokenized Vault Standard Smart Contract Module in Bunzz』](https://blog.bunzz.dev/erc-4626-tokenized-vault-standard-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/c5c96a36-4197-2e02-d5b6-1827e87080bc.png)

Tokenized Vault Standard（ERC-4626）モジュールは、「シェア」（ERC20 の継承を使用して表される）を基に、標準化された{deposit}、{mint}、{redeem}、{burn}のワークフローを通じて「資産」との交換による「シェア」の発行と破棄を可能にします。

このコントラクトは ERC20 標準を拡張しています。それに付随する追加の拡張は、このコントラクトによって表される「シェア」トークンに影響を与え、独立したコントラクトである「資産」トークンには影響を与えません。

\[注意\]

ボールトが空またはほぼ空の場合、シェアの価格を膨らませる「寄付」を通じて預金が盗まれるリスクが高くなります。これは寄付またはインフレ攻撃とも呼ばれ、基本的にはスリッページの問題です。

ボールトのデプロイヤーは、価格操作が不可能になるような非自明な量の資産の初期預金を行うことで、この攻撃に対抗することができます。引き出しも同様にスリッページの影響を受ける場合があります。

ユーザーは、予期しないスリッページや攻撃から保護するために、受け取った量が予想通りであることを確認するために、[https://github.com/fei-protocol/ERC4626](https://github.com/fei-protocol/ERC4626)などのチェックを行うラッパーを使用することで保護することができます。

\[参照\]

https://eips.ethereum.org/EIPS/eip-4626

このモジュールとコードにアクセスできます：[https://bit.ly/3TWuWSe](https://bit.ly/3TWuWSe)

### 使用方法

すべての EIP-4626 トークン化ボールトは、株式を表すために EIP-20 を実装する必要があります。

ボールトが譲渡不可能である場合、transfer または transferFrom への呼び出しでリバートする場合があります。EIP-20 の操作 balanceOf、transfer、totalSupply などは、ボールトの基礎となる保有物の一部に対する所有権のクレームを表す「シェア」に対して操作します。

すべての EIP-4626 トークン化ボールトは、EIP-20 のオプションのメタデータ拡張を実装する必要があります。name および symbol 関数は、基礎となるトークンの名前とシンボルをいかなる方法でも反映するべきです。

EIP-4626 トークン化ボールトは、さまざまな統合でのシェアの承認の UX を改善するために EIP-2612 を実装することができます。

### 関数

**#書き込み**

- deposit
- mint
- redeem
- transfer
- approve
- transferFrom
- increaseAllowance
- withdraw
- decreaseAllowance

#読み取り

- asset
- allowance
- convertToShares
- decimals
- maxDeposit
- maxRedeem
- name
- symbol
- totalAssets
- totalSupply
- balanceOf
- maxMint
- maxWithdraw
- previewDeposit
- previewRedeem
- previewWithdraw
- previewMint
- convertToAssets

このモジュールとコードにアクセスできます：[https://bit.ly/3TWuWSe](https://bit.ly/3TWuWSe)

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
[翻訳] BinaryConfig【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『BinaryConfig Smart Contract Module in Bunzz - Blog on Bunzz, a DApp development platform』](https://blog.bunzz.dev/binaryconfig-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/cb70cab0-e55e-a96f-76bb-75ec0530f86d.png)

Binary Game 製品の BinayConfig モジュールは、Price Games の基本設定を提供します。1 つの BinaryConfig 契約は複数の Price Games に対応できます。

このモジュールとコードには、[こちら](https://bit.ly/3AbtMcA)からアクセスできます。

### 使用方法

1. `Bunzz`を介してスマートコントラクトをデプロイします。デプロイ時に、デプロイヤーは`tradingFee`、`claimNoticePeriod`、および`treasury`のデフォルト値を設定する必要があります。
2. オーナーは`setTradingFee`、`setClaimNoticePeriod`、および`setTreasury`関数を呼び出して、これらの設定変数を更新できます。
3. ユーザーは`getFeeBase`、`getTradingFee`、`getClaimNoticePeriod`、および`getTreasury`関数を呼び出して、設定の詳細をクエリできます。

### 関数

**#書き込み**

- renounceOwnership
- setClaimNoticePeriod
- setTradingFee
- setTreasury
- transferOwnership

**#読み取り**

- claimNoticePeriod
- FEE_BASE
- getClaimNoticePeriod
- getFeeBase
- getTradingFee
- getTreasury
- owner
- tradingFee
- treasury

このモジュールとコードには、[こちら](https://bit.ly/3AbtMcA)からアクセスできます。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::
あｓ

import pandas as pd
import matplotlib.pyplot as plt

# Excelファイルを読み込む
dt_with_bpr_and_roa = pd.read_excel('/mnt/data/Book2.xlsx')

# TDATE列を文字列として扱う（YYYYMM形式のデータを維持するため）
dt_with_bpr_and_roa['TDATE'] = dt_with_bpr_and_roa['TDATE'].astype(str)

# 月次リターンを計算する関数を定義する
def calculate_monthly_returns(df):
    df = df.sort_values(by='TDATE')
    df['Return'] = df['PRC'].pct_change()
    return df

# 銘柄コードごとにグループ化し、月次リターンを計算する関数を適用する
dt_with_bpr_and_roa = dt_with_bpr_and_roa.groupby('SICC_CODE').apply(calculate_monthly_returns).reset_index(drop=True)

# 'Return'列にNaN値がある行を削除する（最初の月にはリターンが計算できないためNaNが含まれる）
dt_with_bpr_and_roa = dt_with_bpr_and_roa.dropna(subset=['Return'])

# 各分位（quantile）の平均リターン、リスク、効率性を計算する
quantile_stats = dt_with_bpr_and_roa.groupby('qua')['Return'].agg(['mean', 'std'])
# 効率性（平均リターン/リスク）を計算し、新しい列'Efficiency'に追加する
quantile_stats['Efficiency'] = quantile_stats['mean'] / quantile_stats['std']
# 列名をわかりやすくする
quantile_stats.columns = ['Mean Return', 'Risk', 'Efficiency']

# ベンチマークとして全体の平均リターンを計算
benchmark_return = dt_with_bpr_and_roa['Return'].mean()

# 各分位の平均リターンに対してベンチマークを引いた超過収益を計算
quantile_stats['Excess Return'] = quantile_stats['Mean Return'] - benchmark_return

# 各分位の累積リターンを計算する
cumulative_returns = dt_with_bpr_and_roa.groupby(['TDATE', 'qua'])['Return'].mean().unstack().cumsum()

# 累積超過収益を計算する
cumulative_excess_returns = cumulative_returns.subtract(benchmark_return, axis=0).cumsum()

# 累積超過収益をプロットする
plt.figure(figsize=(12, 8))
for qua in cumulative_excess_returns.columns:
    plt.plot(cumulative_excess_returns.index, cumulative_excess_returns[qua], label=f'Quantile {qua}')
plt.title('Cumulative Excess Returns by Quantile')
plt.xlabel('Date')
plt.ylabel('Cumulative Excess Return')
plt.legend()
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()

# プロットを表示する
plt.show()

# 累積超過収益を表示する
print("\nCumulative Excess Returns by Quantile:\n", cumulative_excess_returns)
[翻訳] BinaryOracle【Bunzzスマートコントラクトモジュール】

:::note info
本記事は下記の翻訳となります。
[『BinaryOracle Smart Contract Module in Bunzz』](https://blog.bunzz.dev/binaryoracle-smart-contract-module-in-bunzz/)
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/61bdadd3-4482-7137-757a-10b3db62f0f6.png)

Binary Game 製品の BinayOracle モジュールは、時間をラウンドに分割し、各ラウンドには独自の価格があります。管理者（ライターを変更できる）とライター（各ラウンドの価格を書くことができる）が使用できます。

このモジュールとコードには、[こちら](https://bit.ly/40qBr1v)からアクセスできます。

### 使用方法

1. `Bunzz`を介してスマートコントラクトをデプロイします。デプロイ時に、デプロイヤーは管理者とライターの両方になります。
2. ライターは、ラウンドの価格を書くために`writePrice`と`writeBatchPrices`関数を呼び出すことができます。
3. ユーザーは、価格データをクエリするために`getRoundData`と`getLatestRoundData`関数を呼び出すことができます。

### 関数

**#書き込み**

- grantRole
- renounceRole
- revokeRole
- setWriter
- writeBatchPrices
- writePrice

**#読み取り**

- DEFAULT_ADMIN_ROLE
- WRITER_ROLE
- allRoundIds
- genesisStarted
- getLatestRoundData
- getRoleAdmin
- getRoundData
- hasRole
- isAdmin
- isWriter
- latestRoundData
- roundLength
- rounds
- supportsInterface

このモジュールとコードには、[こちら](https://bit.ly/40qBr1v)からアクセスできます。

まだ[**Bunzz**](http://bunzz.dev/)に登録していない場合は、何を待っているのですか？

[**こちら**](https://app.bunzz.dev/signup)から登録し、素晴らしい GUI を通じて 5 分でスマートコントラクトをデプロイしましょう。

---

---

:::note info
【Bunzz とは】
Bunzz はアジア最大級の DApps 開発インフラを運営する、web3×LLM におけるリーディングカンパニーです。「公共財としてのスマートコントラクト」の実現に向けて、各種 web3 インフラやサービスを開発・提供しております。

【Our Projects】

- **[Smart Contract Hub | スマートコントラクトの Github](https://www.bunzz.dev/)**
- **[DeCipher | "Read me" for All of Contracts](https://www.bunzz.dev/decipher)**
- **[Bunzz for Enterprise | Tier1 の技術リソースを日本企業に提供](https://enterprise.bunzz.dev/ja)**
- **[Bunzz Audit | 透明かつ持続的なコントラクト監査の仕組みを実現](hhttps://www.bunzz.dev/audit)**

【Social Links】

- [X(旧 Twitter))](https://twitter.com/BunzzDev)
- [Discord Community](https://t.co/6hHgssJdvW)
- [Youtube](https://www.youtube.com/@bunzzdev)
- [Instagram](https://www.instagram.com/bunzzdev/)

【お問合せ】
web3 開発・コンサルティングのご相談はこちらから 👉[Google Form](https://forms.gle/4tgQjWSw2MMMZW6E6)
:::

:::note info
Bunzz R&D エンジニア荒巻さんの著書[『スマートコントラクトの仕組みと法律』](https://amzn.to/3V03sNH)が好評発売中です 📕
<a href="https://amzn.to/3V03sNH" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">
<img
    src="https://m.media-amazon.com/images/I/81wopoZ1K4L._SY522_.jpg"
    alt="『スマートコントラクトの仕組みと法律』（中央経済グループパブリッシング）"
    width="200px"
    height="auto"
    Style="border: 0px;"
  />
</a>
:::