先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。大まかな概念としてはひとまず終えた。次は、ブロックチェーンの概念設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。
個人の評価項目について③
愛の行動の評価は何を規準に、どのようになされていくのであろうか。そこを記載したい。先に評価項目について記載した。評価を設計するに際し、コンピテンシーなる標準行動を考えていくべきなのであろう。この標準行動をとるような人が設計のモデルとなり、そこからどれほどバラつくかを設計していくことで良いのだろう。
・”ゆらぎ”件数:3件/月以上
・対象相手:偏りすぎないこと
・次元:偏りすぎないこと
・波動レベル:偏りすぎないこと
・愛の行動量:30回/月以上
これらの状態を見える化する、つまりはフィードバックすることがなによりも、落ちていることを自分に気づかせる手段なのであり、”愛記”により、一目瞭然となるのである!とても分かりやすいフィードバックであるので、自己理解ツールにもなり得るだろう。
◆”ゆらぎ”件数について
前回、”ゆらぎ”について記載した。”愛記”により、各人がどれだけ”ゆらぎ”を発生させているかは、カウントできる。この場合の”ゆらぎ”とは、生命体組織を作るぞ!という意志をもった愛の行動と思ってもらえれば良い。つまり、ティール組織化のところで記載してきたが、単に愛の行動をやりとりすれば良いというわけではない。きちんと組織が生命体のように躍動することを意識しての愛の行動、生命体組織の各部位の役割を担うことを意識しての愛の行動、それらの行動を”ゆらぎ”と呼ぶ。それゆえ、まだ組織になっていない一人二人だけの状態でも組織が生命体のように躍動することを意識して行動するのであれば、それは”ゆらぎ”に該当するのであった。
そして、”ゆらぎ”を発足させるためには”役割”を決めねばならない!役割がかぶったり、決めずに単独で動いていてもチームにならない。”ゆらぎ”増幅する時点での決断のポイントにもなるのが”役割”であった。
それゆえ、まず”ゆらぎ”を発足させたいのであれば、ゆらぎ名、ゆらぎ目的、ゆらぎ内容、などを設定する必要がある。この設定は初期設定画面で行う。また、”ゆらぎ”の参画も同様に初期画面設定から行う。例えば、下記のような場合であるとしよう。
○2019年8月10日、”ゆらぎ”に参画
・ゆらぎ名:続・ティール組織研究会
・ゆらぎ役割:左足の役割
○2019年4月1日、”ゆらぎ”発足
・ゆらぎ名:健康な生活をしよう!
・ゆらぎ目的:定期的に温泉に入ってグッスリ寝るという健康的な生活をしよう。
・ゆらぎ内容:毎週数回は温泉に入ることで、心身共にリラックス出来て、グッスリ寝ることができ、健康的な生活を送ることができるので、一緒に習慣化しましょう!
このような”ゆらぎ”を発足したいと思ったとしよう。すると、初期設定画面で”ゆらぎ”を設定することになる。
・氏名:石川太郎、在住:石川県加賀市、他はマイナンバーカードと紐付け
Total: 8000000愛貨を行動宣言
第10次元:太陽系(デフォルト)
第9次元:地球(デフォルト)
第8次元:人類(デフォルト)
第7次元:世界経済(デフォルト)
第6次元:日本国(デフォルト)
第5次元:情報通信業(選択した)
第5次元:石川県(選択した)
第4次元:情報サービス業(選択した)
第4次元:加賀市(選択した)
第4次元:(一社)石川県情報システム工業会(記入した)
第4次元:”ゆらぎ名:続・ティール組織研究会”における”左足の役割”で参画
第3次元:株式会社スマートバリュー(仮)(記入した)
第3次元:加賀市ブロックチェーン都市構想プロジェクト(記入した)
第2次元:技術営業部(記入した)
第2次元:アプリ開発チーム(記入した)
第2次元:KYC認証チーム(記入した)
第2次元:”ゆらぎ名:健康な生活をしよう!”における”脳の役割”で発足
第1次元:個人(デフォルト)
ここで気づいたと思うが、この”ゆらぎ”の増幅過程でも、生命体を創っていく過程と同じになるということだ。今まで、会社組織をどうしたら生命体のように機能させることができるのであろうか?と必死で研究してきたのだが、じつは、ティール組織での1つの”ゆらぎ”にも、この生命体と同じような仕組みが導入されるのである。
つまり、発足された”ゆらぎ”は、当初は一人だが、賛同してくれる仲間が社内外から加わると各部位の役割を担ってくれる。12もある役割が少しずつ埋まってきて、チームらしくなっていく。
10人以上仲間が集まれば、愛記システム上では自動的に”ゆらぎ”から”チーム”へと昇格する。なお、この”ゆらぎ”内で愛の行動をやりとりする場合は、下記のように生成AIに頼めば良い。
「”愛記システム”を立ち上げ、”ゆらぎ名:続・ティール組織研究会”を選択し”左足の役割”を選択し、科目は、Lv7:”瞑想し無意識になる”を選択し、次元は”4次元”、内容は、”心が安らぐ”と記載し、”NFT化”して!」
と頼めば良いのかもしれない。このNFT化されたQRコードやURLが相手に送付されれば良いのであろう。ただ、初期設定で”ゆらぎ”を発足or参画していなければ、”ゆらぎ”はありません!とエラーになってはじかれる設定にしておく。
同様に受け取る側も、”ゆらぎ”を発足or参画して、ある部位の”役割”をになっていなければ、エラーになってはじかれる設定にしておく。上記の初期設定画面にあるように、石川太郎さんは下記のように、とある”ゆらぎ”に賛同して参画していたのであった。
○2019年8月10日、”ゆらぎ”に参画
・ゆらぎ名:続・ティール組織研究会
・各部位の役割:左足の役割
このように発足or参画していれば、初期設定画面でも表示され、”ゆらぎ”として愛の行動を受け取ることが出来るようになるという具合だ。
なお、音声入力に基づいて同様のNFT発行およびシェアを行うためには、以下の手順で設計できる。音声入力からテキストに変換するための音声認識システム(例:Google Speech-to-Text)が組み込まれていることを前提としている。
1. 音声入力の受付:
- ユーザーが音声で愛の行動を実行すると、システムが音声認識を行い、その結果をテキストに変換する。音声認識からNFTの発行までのプロセスをDApps側であるPythonで実装する例を示す。この例では、Google Cloud Speech-to-Text APIを使用して音声をテキストに変換し、そのテキストを解析してNFTを発行する。
from google.cloud import speech_v1p1beta1 as speech
from google.cloud.speech_v1p1beta1 import enums
def transcribe_speech(audio_file):
client = speech.SpeechClient()
with open(audio_file, "rb") as audio_file:
content = audio_file.read()
audio = {"content": content}
config = {
"language_code": "ja-JP",
"enable_word_time_offsets": True,
"enable_automatic_punctuation": True,
}
response = client.recognize(config=config, audio=audio)
for result in response.results:
alternative = result.alternatives[0]
print("Transcript: {}".format(alternative.transcript))
print("Confidence: {}".format(alternative.confidence))
# ここで解析処理を行い、NFTのメタデータを構築する関数を呼び出す
process_transcript(alternative.transcript)
def process_transcript(transcript):
# ここでテキストの解析を行い、NFTのメタデータを構築する
# 例えば、愛の行動レベル、次元、内容、ゆらぎを抽出する処理を実装する
# 抽出した情報を使用してNFTを発行する処理を行う
pass
# 音声ファイルから音声を取得してテキストに変換する
transcribe_speech("path_to_audio_file.wav")
Pythonで音声入力を受け付け、Speech-to-Text APIを使用してテキストに変換している。この例では、音声ファイルから音声を取得しているが、実際にはマイクからの入力なども可能である。
2. NFTの発行:
音声入力によるNFTの発行時に、愛の行動レベル、次元、内容、ゆらぎなどを判別してNFT化するためには、音声認識結果から得られるテキスト情報を解析し、それに基づいてNFTのメタデータを構築する必要がある。以下は、その一般的な手順である。
-
音声入力のテキスト化:
- 音声入力をテキストに変換するために、Speech-to-Text サービス(例: Google Speech-to-Text API)を使用する。
-
テキスト情報の解析:
- テキスト情報を解析して、以下の要素を抽出する。
- 愛の行動レベル
- 次元
- 内容
- ゆらぎ(もしあれば)
- テキスト情報を解析して、以下の要素を抽出する。
-
メタデータの構築:
- 抽出した情報を使用して、NFTのメタデータを構築する。これは通常、JSON形式で表現され、NFTのURIとして格納されることが一般的である。
-
NFTの発行:
- メタデータが構築されたら、それを元にしてスマートコントラクト上でNFTを発行する。
- NFT発行のトランザクションがブロックチェーン上に記録され、ユーザーにNFTが送信される。
以下に、上記手順を具体的な例を交えて示す。
// スマートコントラクト contract LoveActionNFT is ERC721, Ownable { using SafeMath for uint256; uint256 public nextTokenId = 1; constructor() ERC721("LoveActionNFT", "LOVEACT") {} function mintNFTFromVoiceInput(address to, uint256 level, uint256 dimension, string memory content, uint256 fluctuation) external onlyOwner { // メタデータの構築 string memory metadata = constructMetadata(level, dimension, content, fluctuation); // NFTの発行 _safeMint(to, nextTokenId); _setTokenURI(nextTokenId, metadata); nextTokenId = nextTokenId.add(1); } // メタデータの構築 function constructMetadata(uint256 level, uint256 dimension, string memory content, uint256 fluctuation) internal pure returns (string memory) { // メタデータの構築処理 return string(abi.encodePacked('{"level": ', uint256ToString(level), ', "dimension": ', uint256ToString(dimension), ', "content": "', content, '", "fluctuation": ', uint256ToString(fluctuation), '}')); } // uint256をstringに変換する関数 function uint256ToString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } }
これにより、スマートコントラクトは、音声認識の結果を直接受け取るのではなく、解析された結果を受け取るようにした。音声認識結果は、外部のシステムやサービスでテキストに変換および解析され、その結果がスマートコントラクトに渡されることになる。
なお、Google Speech-to-TextはGoogle CloudのAPIの一環で、スマートフォンには標準で組み込まれているものではない。しかし、スマートフォン上で利用可能なアプリやサービスがSpeech-to-Textの機能を利用している。例えば、AndroidやiOSデバイス上で音声認識を行いたい場合、以下のような方法が考えられる。
Androidデバイス:
AndroidはGoogleのオペレーティングシステムであり、GoogleのSpeech-to-Text APIを使用できる。多くのAndroidデバイスは標準でGoogleの音声検索機能を搭載している。
iOSデバイス:
iOSデバイスでも、Siriを通じて音声認識が利用できる。また、特定のアプリケーションやサービスがSpeech-to-Textの統合を提供していることがある。
上記の手段を使用することで、スマートフォン上でGoogle Speech-to-Textの機能を利用することが可能である。ただし、APIの利用には通信環境が必要であり、Google Cloud PlatformのアカウントとAPIキーが必要である。
-
Google Cloud Platform (GCP) アカウントの作成:
- Google Cloud Platformの公式ウェブサイトでアカウントを作成する。
- https://cloud.google.com/
-
プロジェクトの作成:
- GCPコンソールにログインし、新しいプロジェクトを作成する。
-
Speech-to-Text APIの有効化:
- プロジェクト内でSpeech-to-Text APIを有効化する。
-
APIキーまたは認証情報の取得:
- Speech-to-Text APIを使用するためには、APIキーまたはサービスアカウントの認証情報が必要である。
- APIキーの場合、APIとサービス > 認証情報 からAPIキーを作成する。
- サービスアカウントの場合、APIとサービス > 認証情報 からサービスアカウントを作成し、そのアカウントにSpeech-to-Textの権限を付与する。認証情報はJSON形式でダウンロードできる。
-
APIのエンドポイントとキーの設定:
- Speech-to-Text APIのエンドポイントとキーを取得する。これはAPIを呼び出す際に使用される。
-
APIの呼び出し:
- 取得したAPIキーまたは認証情報を使って、Speech-to-Text APIを呼び出す。
- 通信環境が必要なので、APIへのアクセスにはインターネット接続が必須である。
以上の手順を経て、Google Speech-to-Text APIを利用できるようになる。利用するアプリケーションやサービスで、これらの認証情報を組み込んで音声認識を実行することが可能である。
・”ゆらぎ件数”の集計
10人以上仲間が集まれば、愛記システム上では自動的に”ゆらぎ”から”チーム”へと昇格する。なお、この”ゆらぎ件数”と愛の行動量との違いだが、”ゆらぎ”の中で行われる愛の行動件数を抽出してカウントしたものである。チーム以上になるとカウントされないということだ。初期設定で、”ゆらぎ:続・ティール組織研究会”などと申請してあった”ゆらぎ”の中で行われる愛の行動件数のみをカウントする。このような”ゆらぎ件数”を集計したい場合、以下のDApps側であるPythonプログラムを修正してみた。
from collections import defaultdict
from datetime import datetime
import random
class User:
def __init__(self, name, initial_love_tokens):
self.name = name
self.volunteer_hours = 0
self.event_contribution = 0
self.love_tokens_received = 0
self.love_tokens_given = initial_love_tokens
self.yearly_score = defaultdict(int)
self.is_team = False
def participate_in_volunteer_activity(self, hours):
self.volunteer_hours += hours
def contribute_to_event(self, level):
self.event_contribution += level
def receive_love_tokens(self, amount):
self.love_tokens_received += amount
def give_love_tokens(self, amount):
self.love_tokens_given += amount
def update_yearly_score(self, year):
if datetime.now().month >= 4:
fiscal_year = datetime.now().year
else:
fiscal_year = datetime.now().year - 1
self.yearly_score[fiscal_year] = self.volunteer_hours + self.event_contribution
def get_yearly_score(self, year):
return self.yearly_score[year]
def calculate_evaluation_score(self, year, initial_love_tokens):
received_difference = self.love_tokens_received - initial_love_tokens
given_difference = self.love_tokens_given - received_difference
evaluation_score = (given_difference - received_difference * 0.25)
return evaluation_score
class TaxSystem:
def __init__(self, tax_rate):
self.tax_rate = tax_rate
def apply_tax_reduction(self, user):
total_reduction = 0
for year, score in user.yearly_score.items():
tax_reduction = min(score, user.event_contribution) * self.tax_rate
total_reduction += tax_reduction
return total_reduction
class Blockchain:
def __init__(self, tax_rate):
self.chain = []
self.transactions = []
self.users = {}
self.tax_system = TaxSystem(tax_rate)
self.yuragi_actions = defaultdict(int) # ゆらぎで行われた愛の行動件数を記録する辞書
def create_genesis_block(self):
genesis_block = {
'index': 1,
'timestamp': str(datetime.now()),
'transactions': [],
'proof': 100,
'previous_hash': '0'
}
self.chain.append(genesis_block)
def get_last_block(self):
return self.chain[-1]
def add_transaction(self, sender, receiver, amount):
transaction = {
'sender': sender,
'receiver': receiver,
'amount': amount
}
self.transactions.append(transaction)
if sender not in self.users:
self.users[sender] = User(sender, amount)
if receiver not in self.users:
self.users[receiver] = User(receiver, 0)
self.users[sender].give_love_tokens(amount)
self.users[receiver].receive_love_tokens(amount)
# ゆらぎで行われた愛の行動件数をカウント
if sender.startswith('ゆらぎ'):
self.yuragi_actions[sender] += 1
# チームへの昇格チェック
if len(self.users) >= 10:
team_candidate = self.users[sender]
if not team_candidate.is_team:
team_candidate.is_team = True
print(f"{team_candidate.name} has been promoted to a team.")
def mine_block(self):
last_block = self.get_last_block()
new_block = {
'index': last_block['index'] + 1,
'timestamp': str(datetime.now()),
'transactions': self.transactions,
'proof': 0,
'previous_hash': last_block['previous_hash']
}
self.chain.append(new_block)
self.transactions = []
for user in self.users.values():
user.update_yearly_score(datetime.now().year)
def evaluate_and_apply_tax_reduction(self):
for user in self.users.values():
tax_reduction = self.tax_system.apply_tax_reduction(user)
if tax_reduction > 0:
print(f"{user.name} earned {user.volunteer_hours} hours of volunteer activity and contributed at level {user.event_contribution}.")
print(f"{user.name} is eligible for tax reduction of {tax_reduction}.")
evaluation_score = user.calculate_evaluation_score(datetime.now().year, 0)
print(f"{user.name}'s evaluation score for the year is {evaluation_score}.")
# ゆらぎで行われた愛の行動件数を表示
print("Yuragi actions:")
for yuragi, count in self.yuragi_actions.items():
print(f"{yuragi}: {count}")
# サンプルデータ
blockchain = Blockchain(0.1) # 10% tax rate
blockchain.create_genesis_block()
for _ in range(5):
sender = 'Alice'
receiver = 'Bob'
amount = random.randint(1, 10)
blockchain.add_transaction(sender, receiver, amount)
# ゆらぎで行われた愛の行動件数を集計
blockchain.yuragi_actions['ゆらぎ:続・ティール組織研究会'] = 15
blockchain.mine_block()
blockchain.evaluate_and_apply_tax_reduction()
修正後のコードでは、"ゆらぎ"の中で行われる愛の行動件数をカウントする機能が追加されている。指定された初期設定の"ゆらぎ"で行われた愛の行動件数をカウントし、最終的に表示される。
いかがであろうか、これで、音声入力によるNFT発行が可能となり、さらに”ゆらぎ件数”がカウントできることが理解出来たであろう。このようにすれば、現実的にスマートフォンによる操作が可能となるのであろう。