愛記システム概念設計:システム構築の品質評価のポイント3 簡潔性 | 続・ティール組織 研究会のブログ

続・ティール組織 研究会のブログ

ティール組織が話題になっているが、具現化するにはどうしたらよいか?
その研究を続けるにあたり、さらに次の形態である、続・ティール組織なるものまで視野に入れ、具体的な施策・行動内容を研究・支援する会。

先までは、"愛記"についての記載で、どのようにブロックチェーンSNSに組み込んで実装していけばよいのか、概念的なところからアプローチ方法を記載していった。大まかな概念としてはひとまず終えた。次は、ブロックチェーンの概念設計といえるところまで、基本設計書に着手できるようなところまで、概念を具体化していきたい。

愛記システムのシステム評価について

システム評価とは、つまりは、このシステムを導入して成功だったか失敗だったかという効果検証という意味だ。概念設計をする上で必ず抑えておくべきポイントということだ。それには各項目があり、それぞれの項目を見ていくことで、その結果が得られる。そのシステム評価項目を1つずつ見ていきたい。

システム構築の品質評価のポイント1:理解可能性(Understandability)

システム構築の品質評価のポイント2:完全性(Completeness)

システム構築の品質評価のポイント3:簡潔性(Conciseness)

システム構築の品質評価のポイント4:移植性(Portability)

システム構築の品質評価のポイント5:一貫性(Consistency)と構造化の度合い

システム構築の品質評価のポイント6:保守性(Maintainability)

システム構築の品質評価のポイント7:試験性(Testability)

システム構築の品質評価のポイント8:ユーザビリティ(Usability)

システム構築の品質評価のポイント9:効率性(Efficiency)

システム構築の品質評価のポイント10:セキュリティ(Security)

システム構築の品質評価のポイント3:簡潔性(Conciseness)

システム構築の品質評価に繋がる大きなポイントが、いかに簡単に使いこなすことができるシステムになっているかどうかである。高性能なソフトは簡潔性から遠のいていることが多いので、ユーザーの使いやすさを開発者側がどれだけ理解して実現しているのかが重要になる。熟練したエンジニアほどその技量は一般ユーザー離れするので、落とし穴にもなりやすい部分である。

 

愛記システムで最も簡潔性が要求されるのが、愛の行動の仕訳であろう。これを自動仕訳で処理するにしても、科目、次元、相手、波動レベル、行動内容、などを設定しないと自動仕訳できない。これを1つ1つユーザーに操作してもらってはじめて仕訳が完了するというのでは、工数がかかりすぎるのだ。これではシステムとして成立しない。できれば1ステップで、どうしても難しいならば最悪2ステップで仕訳を完了させねばならない。ここが簡潔性の最大のポイントであろう。

 

そこで、ブロックチェーンSNSを立ち上げ、①科目選択、②次元選択、③行動内容、さらに相手を特定してから④投稿という作業を、何とか1つの作業で終わらせることができないか?と考えるのだ。そのためには、生成AIと連携するのが早いのであろう。音声入力モードで、上記のようなことを網羅して話しかければ良いのかもしれない。すると、AIが自動処理してくれるということになるのだろう。例えば、

「”愛記システム”を立ち上げ、科目は、Lv7:”瞑想し無意識になる”を選択し、次元は、”8次元”を選択し、内容は、”心が安らぐ”と記載し、”NFT化”して!」

と頼めば良いのかもしれない。このNFT化された行動がQRコードやURLになってくれば、これで1ステップの作業となる。目の前に相手が居るのなら、このQRコードを相手にかざして相手が読み込んでくれるかどうかだ。目の前に相手が居ないのであれば、URLを相手に渡して相手が読み込んでくれるかどうかだ。読み込んでくれれば、NFTを受け取ったことになるような仕組みにすればよい。NFT化の処理は、以前にも記載したので割愛し、下記に簡易的に記載する。

愛貨のやりとり自動処理について

スマートコントラクトでは、LoveChain構造体がLoveActionを管理し、新しい愛のアクションを追加し、それをNFT化してQRコードを生成する。具体的には、次の機能が実装されている: 

  • create_love_action: 新しい愛のアクションを作成し、LoveChainに追加する。アクションには、対象、次元、説明などの情報が含まれる。アクションは一意のIDで識別される。 
  • share_love_action: 指定されたアクションを共有済みにマークする。これにより、他の人がそのアクションを閲覧できるようになる。 
  • approve_love_action: 指定されたアクションを承認済みにマークする。これは、アクションがNFT化され、QRコードが生成されるための前提条件である。 
  • to_qr_code: 指定されたアクションをQRコードに変換する。このQRコードには、アクションの詳細情報が含まれる。 これらの機能を使用することで、愛のアクションを管理し、NFTとして保存し、QRコードとして表示することができる。 

なお、このQRコードを相手が読み込むと、DApps側であるPythonプログラムが発動して、愛貨がやりとりされる。そのプログラムを下記に記載してみよう。以下は、スマートコントラクトとDApps側であるPythonプログラムの例である。スマートコントラクトは、愛のアクションを管理し、NFTとしてQRコードを生成する。Pythonプログラムは、QRコードを読み込んで愛貨のやりとりを行う。ただし、実際のブロックチェーンやDAppsに接続するためには、必要なライブラリやAPIを使用する必要がある。

 

■スマートコントラクトのプログラム

use std::collections::HashMap;

#[derive(Debug)]
struct LoveAction {
    id: u64,
    target: String,
    dimension: u32,
    description: String,
    shared: bool,
    approved: bool,
}

impl LoveAction {
    fn new(id: u64, target: &str, dimension: u32, description: &str) -> Self {
        LoveAction {
            id,
            target: target.to_string(),
            dimension,
            description: description.to_string(),
            shared: false,
            approved: false,
        }
    }

    fn share(&mut self) {
        self.shared = true;
    }

    fn approve(&mut self) {
        self.approved = true;
    }
}

#[derive(Debug)]
struct LoveChain {
    actions: HashMap<u64, LoveAction>,
    next_id: u64,
}

impl LoveChain {
    fn new() -> Self {
        LoveChain {
            actions: HashMap::new(),
            next_id: 0,
        }
    }

    fn create_love_action(&mut self, target: &str, dimension: u32, description: &str) -> u64 {
        let id = self.next_id;
        self.next_id += 1;
        let action = LoveAction::new(id, target, dimension, description);
        self.actions.insert(id, action);
        id
    }

    fn get_love_action(&self, id: u64) -> Option<&LoveAction> {
        self.actions.get(&id)
    }

    fn share_love_action(&mut self, id: u64) -> Result<(), &'static str> {
        if let Some(action) = self.actions.get_mut(&id) {
            action.share();
            Ok(())
        } else {
            Err("Love action not found")
        }
    }

    fn approve_love_action(&mut self, id: u64) -> Result<(), &'static str> {
        if let Some(action) = self.actions.get_mut(&id) {
            action.approve();
            Ok(())
        } else {
            Err("Love action not found")
        }
    }

    fn to_qr_code(&self, id: u64) -> Result<String, &'static str> {
        if let Some(action) = self.actions.get(&id) {
            let qr_code_data = format!("Love Action: {}\nTarget: {}\nDimension: {}\nDescription: {}\n", id, action.target, action.dimension, action.description);
            Ok(qr_code_data)
        } else {
            Err("Love action not found")
        }
    }
}

fn main() {
    let mut love_chain = LoveChain::new();
    let action_id = love_chain.create_love_action("Target1", 1, "Description1");
    println!("Created Love Action: {:?}", love_chain.get_love_action(action_id));

    love_chain.share_love_action(action_id);
    println!("Shared Love Action: {:?}", love_chain.get_love_action(action_id));

    love_chain.approve_love_action(action_id);
    println!("Approved Love Action: {:?}", love_chain.get_love_action(action_id));

    match love_chain.to_qr_code(action_id) {
        Ok(qr_code_data) => println!("QR Code Data:\n{}", qr_code_data),
        Err(err) => println!("Error: {}", err),
    }
}
 

■DApps側であるPythonプログラム:

from pyzbar.pyzbar import decode
from PIL import Image
import requests

def scan_qr_code(image_path):
    image = Image.open(image_path)
    decoded_objects = decode(image)
    if decoded_objects:
        qr_code_data = decoded_objects[0].data.decode('utf-8')
        print(f"Scanned QR Code Data:\n{qr_code_data}")
        # Send a request to the blockchain server to perform love currency transaction
        response = requests.post('http://blockchain-server-url/love-currency-transaction', data=qr_code_data)
        if response.status_code == 200:
            print("Love currency transaction successful")
        else:
            print("Failed to perform love currency transaction")
    else:
        print("No QR Code found in the image")

# Example usage
scan_qr_code('path/to/qr_code_image.png')
 

この例では、スマートコントラクトが愛のアクションを管理し、NFTとしてQRコードを生成する基本的な機能が実装されている。Pythonプログラムは、QRコードをスキャンして読み取り、ブロックチェーンサーバーに愛貨のやりとりを要求する。これは、実際のプロジェクトに応じて適切に変更する必要がある。

 

■ブロックチェーンのプログラム

Pythonプログラムから送信されたQRコードのデータを受け取り、愛貨のやりとりを処理する。この例では、ブロックチェーンの構造体を簡略化し、QRコードから受け取ったデータを元にトランザクションを作成し、ブロックに追加する方法を示している。実際のブロックチェーンの実装は、ライブラリやフレームワークに依存するため、必要に応じて変更する必要がある。

from typing import Any, Dict
from datetime import datetime
from hashlib import sha256

class Blockchain:
    def __init__(self):
        self.chain = []
        self.transactions = []

        self.create_block(proof=1, previous_hash='0')

    def create_block(self, proof: int, previous_hash: str) -> Dict[str, Any]:
        block = {
            'index': len(self.chain) + 1,
            'timestamp': str(datetime.now()),
            'proof': proof,
            'previous_hash': previous_hash,
            'transactions': self.transactions
        }
        self.transactions = []
        self.chain.append(block)
        return block

    def add_transaction(self, sender: str, receiver: str, amount: float) -> int:
        self.transactions.append({
            'sender': sender,
            'receiver': receiver,
            'amount': amount
        })
        return self.last_block['index'] + 1

    @property
    def last_block(self) -> Dict[str, Any]:
        return self.chain[-1]

# Example usage
blockchain = Blockchain()

# Assume QR code data format is 'sender:receiver:amount'
qr_code_data = 'sender1:receiver1:10.0'  # Example QR code data
sender, receiver, amount = qr_code_data.split(':')

blockchain.add_transaction(sender, receiver, float(amount))
new_block = blockchain.create_block(proof=2, previous_hash='hash_of_previous_block')

print("New block added to the blockchain:")
print(new_block)
 

この例では、ブロックチェーンは簡易的に記載し、シンプルな構造を持ち、トランザクションを追加し、新しいブロックを作成している。実際のプロジェクトでは、ブロックの構造やトランザクションの処理方法など、詳細な実装はプロジェクトの要件に応じて変更する必要がある。

 

 

いかがであろうか、システム評価の簡潔性について記載した。最悪でも2ステップで自動仕訳がなされないと、システムとしては機能しないだろう。それを実現させるためにNFT化という手法は欠かせない。これを如何に愛貨と結びつけることが出来るか?が最大のポイントになるだろう。