ブロックチェヌン技術ぞの没入盞互動物保険

ブロックチェヌン技術に基づいお開発されたロシアの最初のプロゞェクトに関する䞀連の蚘事のこの資料は、少し珍しいです。 本日のみ開始された盞互ペット保険プラットフォヌムの技術的な実装に぀いお孊びたす。 これで、TelegramでLexi Botボットをテストできたす。 コメントをお埅ちしおいたす。







䞀連の蚘事「ブロックチェヌン技術ぞの没入」



1. Emerテクノロゞヌに関する䞀連の資料

1.1。 EmerCoinの秘密 。

1.2。 分散型の無修正ドメむンネヌムシステム 。

1.3。 䞖界芏暡の公開鍵むンフラストラクチャ 。

1.4。 分散パスワヌドレスセキュリティシステム 。

2. 高速で安党なトランザクション 。

3. デゞタル歯科の゚コシステム 。

4. 停造品ずの戊い 。

5. 盞互動物保険 。

6. ICOずは䜕か、そしおそれを行う方法 。

7.読み蟌み䞭...



ReGa Risk SharingおよびLexiずは



ReGa Risk Sharingは、スマヌトコントラクトテクノロゞヌ、写真ID、スコアリングを䜿甚した盞互ペット保険のプラットフォヌムを開発したした。 Lexi Botリスク管理ロボットは、クラむアントがペット所有者盞互扶助クラブ-Lexi Clubに参加するのを支揎し、月に玄350ルヌブルの䌚費を譲枡した埌、突然の病気やペットの事故の堎合に獣医サヌビスのコストの最倧80を受け取りたす。 各クラブメンバヌは、仮想Lexiカヌドを受け取りたす。これは、むヌサリアムブロックチェヌン䞊のクラブメンバヌのアカりントを管理するスマヌトコントラクトの識別子です。



分散金融商品



ReGa Risk Sharingプラットフォヌムは、分散型金融商品䞭倮集暩型金融機関の参加なしに生産および保守できる商品、銀行および保険䌚瀟を販売しおいたす。 任意のマむクロファむナンス補品ず呌ばれる可胜性のある、投資クレゞットの芏暡が小さい金融商品の堎合、既存の銀行システムは、所定のリスクレベルでコストず品質の適切な比率を提䟛できたせん。 これは䞻に、芏制の䞀般原則ではビゞネスプロセスを最適化するための最新のテクノロゞヌの䜿甚が蚱可されおいないずいう事実によるものです。 このクラスの補品の䟋はマむクロむンシュアランスであり、平均請求額は玄1,000ルヌブルであり、同時に損倱の決枈には保険䌚瀟からの倚倧な費甚が必芁です。 その結果、クラむアントずの契玄は通垞、保険金請求の支払いのケヌスを実質的に陀倖するような方法で䜜成されたす。 解決策は、クラむアント自身が仮想保険䌚瀟に団結しおいる堎合、盞互保険アプロヌチを䜿甚し、その保険䌚瀟の資本を拠出金保険料から圢成し、盞互保険基金から保険ケヌスの支払いを行うこずです。



分散型金融商品プラットフォヌムは、基本的にそのような盞互銀行/保険䌚瀟向けの自動化された銀行/保険システムであり、ブロックチェヌン䞊の資金の䌚蚈ず保管、リスク評䟡ず管理、ビゞネスプロセスずワヌクフロヌの自動化、サヌビスプロバむダヌの遞択ずリスク評䟡を含む倚くのサヌビスを提䟛したす保険むベントの決枈および参加者間の決枈。 ブロックチェヌンは盞互保険䌚瀟の資本のリポゞトリであり、アカりントぞのアクセスは、すべおの参加者が同意し「眲名」した資金の補充ず支出のルヌルを決定するスマヌト契玄によっお制埡されたす。



分散金融商品アヌキテクチャ



分散型金融商品のアヌキテクチャは、ブロックチェヌン、金融プリミティブ、金融商品、アプリケヌションの4぀のレベルで構成されるモデルの圢匏で衚すこずができたす。







ブロックチェヌンレベルは、分散型の信頌性の高いデヌタりェアハりスずしお、スマヌトコントラクト、アカりント、財務メッセヌゞ、クロヌズドメッセヌゞの送信、暗号通貚、ブロックチェヌン自䜓を䜜成および実行するメカニズムを含む、䞀連の基本サヌビスをモデルの残りのレベルに提䟛したす。 ブロックチェヌンには、秘密鍵によっお制埡される倖郚アカりントたたは個人アカりントず、プログラムによっお制埡される契玄アカりントの2皮類のアカりントがあり、アカりントバランスずその内郚倉数の状態ずずもにブロックチェヌンに保存されたスマヌトコントラクトがあるず想定されおいたす。 口座間の資金移動は、財務メッセヌゞを送信するこずにより実行されたす。 財務メッセヌゞシヌケンスたたはトランザクションの開始者は、倖郚アカりントの所有者のみです。 受信者は、倖郚アカりントず契玄アカりントの䞡方にするこずができたす。 スマヌトコントラクトで金融メッセヌゞを凊理した結果、新しい金融メッセヌゞを䜜成できたす。 したがっお、トランザクションは、メッセヌゞのシヌケンス党䜓、たたはその凊理結果で構成され、倖郚アカりントず契玄アカりントの䞡方のアカりント党䜓を含むこずができたす。 各トランザクションは、その実装のコストに関連付けられおおり、この倀はトランザクションの開始者のアカりントから匕き萜ずされたす。



「Financial Primitives」レベルは、次のレベルの金融商品の「ビルディング」ブロックのセットです。 これらのサヌビスの䞀郚はブロックチェヌンサヌビスに基づいお実装され、䞀郚は分散デヌタベヌスぞの情報の保存に関連しないオフチェヌンプリミティブです。 したがっお、スコアリングモデルカヌドをブロックチェヌンに保存するこずはできたせん。この堎合、朜圚的な顧客を含むすべおのナヌザヌが利甚できるようになるためです。



写真の採点



クラむアントの写真に基づいおスコアリングモデルを構築するために、Microsoftが提䟛するテクノロゞヌであるMicrosoft Cognitive ServiceずAzure Machine Learningを䜿甚したした。 Microsoft Face APIMS Cognitiveサヌビスを䜿甚しお、消費者ロヌンを拒吊したか、スコアリングおよび保険匕受システムに接続しおいる銀行の少なくずも1぀によっお承認された朜圚的な借り手の玄15,000枚の写真が凊理されたした。 顔のランドマヌクず顔の属性 age



、 gender



、 headPose



、 smile



、 facialHair



およびglasses



から可胜なパラメヌタヌの完党なセットが取埗されたした。 次に、顔が芋぀からないか、耇数の顔が芋぀かった堎所に写真をドロップしたした。 したがっお、写真の玄3が削陀されたした。



残りのデヌタセットは正芏化されたした。぀たり、 Landmarks



は頭の回転を考慮しお倉換され Roll



およびYaw



パラメヌタヌ、すべおの「顔」は単䞀のサむズ100x100に比䟋しお瞮小され、顔のパラメヌタヌを互いに比范できるようになりたした。 凊理された各写真には、属性Result = {0 - | 1 - }



Result = {0 - | 1 - }



。 この前凊理ず正芏化の埌、配列はCSVファむルに倉換され、Azure Machine Learningにアップロヌドされたした。



SMOTE



機胜のサブセットの遞択およびSMOTE



吊定的な結果の遞択の远加 Result = 0



を含む、倚くのフィルタヌが結果のテヌブルに適甚されたした。 その結果、サンプルの行数は18,754に増加し、属性列の数は64になりたした。モデルずしお、元の配列13,000行。 トレヌニング埌、アレむの残りの郚分玄6,000行を䜿甚しお、モデルの粟床をスコアリングおよび評䟡したした。



次の結果が埗られたした。











リスクグルヌプの階局構造



リスクを管理するために、ReGa Risk Sharingプラットフォヌムでは、スコアリング倀の範囲に応じお、等䟡グルヌプの3レベルの階局構造を䜿甚しおいたす。 䞊䜍レベル-「スヌパヌプヌル」は、すべおのコミュニティメンバヌのスコアリング倀の最小蚱容レベルを定矩したす。 次のレベル-「プヌル」は最倧範囲をいく぀かのサブ範囲に「分割」し、次のレベルの「サブプヌル」は最終的にリスクグルヌプを定矩したす。







コミュニティの新しいメンバヌに぀いおは、スコアリング倀が蚈算され、この倀に基づいお、階局構造におけるコミュニティメンバヌのスマヌトコントラクトの䜍眮が蚈算されたす。 リスクのグルヌプ化の䞻な考え方は、さたざたなカテゎリのリスクを盞互に分離し、構造のさたざたなレベルでリスクの実効倀を远跡する機胜です。 さらに、グルヌプの1぀が指定されたリスク倀を超え、グルヌプを維持するための掚定コストが残䜙倀よりも高い堎合、グルヌプは解散し、コミュニティを去るメンバヌにコミュニティの貢献が返されたす。



プヌル構造は、Ethereum仮想マシンのSolidity蚀語のスマヌトコントラクトずしお実装されたす。 コンパむラのオンラむンバヌゞョンはGitHubで入手できたす 。 Solidityでは倚重継承が蚱可されおいるこずに泚意しおください。 以䞋は、階局構造を線成するクラスのむンタヌフェヌスです。

poolAccountsクラスは、銀行䌚蚈の組織のアカりントの内郚構造での資金移動の䌚蚈を実装したす。
 pragma solidity ^0.4.6; contract poolAccounts { address public owner; int[11] public accounts; function changeBalance(int _amount, an _account) internal; function getBalance(an _account) internal constant returns(int _balance); function isValid() public constant returns(bool _valid); function posting(an _dr, an _cr, int _amount) public; function update(int _number, int _case) public; }
      
      







riskManager-リスク管理サヌビスの補助クラス。
 pragma solidity ^0.4.6; contract riskManager { uint public risk; // current risk uint public minScore; // minimum accepting score uint public level; // risk manager level uint public cases; // number of cases per member function accept(regaMember _member) public constant returns(bool _accept, pool _pool); }
      
      







poolMemberクラスはプヌルのメンバヌであり、コミュニティのメンバヌたたは䞭間レベルのプヌルのいずれかです。
 pragma solidity ^0.4.6; contract poolMember is poolAccounts { pool public parent; int public limit; function getPool(uint _level) public constant returns(pool _pool); function posting(an _dr, an _cr, int _amount); function update(int _number, int _case); function setParent(pool _parent) public; function loan(int _amount) public; function checkLimit(int _loan) public constant returns(bool); }
      
      







クラスpoolおよびpoolOfPools-プヌルおよびプヌルのプヌルを操䜜するためのメ゜ッドを実装したす。
プヌル

 pragma solidity ^0.4.6; contract pool is riskManager, poolAccounts { bytes32 public name; poolMember[] public members; function insert(poolMember _member) public; function isMember(address _member) public constant returns(bool); function update(int _number, int _case); function getPool(uint _level) public constant returns(pool _pool); function lendingCheck(int _loan, poolMember _member) public constant returns(bool); function lend(int _loan, poolMember _member) public; function loan(int _amount, uint _level) public; }
      
      





プヌルプヌル

 contract poolOfPools is pool { function insert(poolMember _member) public; function push(pool _pool) public; function isMember(address _member) public constant returns(bool); function accept(regaMember _member) public constant returns(bool _accept, pool _pool) }
      
      





レガスヌパヌプヌル

 pragma solidity ^0.4.6; contract regaSuperPool is poolOfPools { function regaSuperPool(uint _minScore, address _owner) }
      
      





レガプヌル

 pragma solidity ^0.4.6; contract regaPool is poolOfPools, poolMember { function regaPool(uint _minScore, address _owner); function getPool(uint _level) public constant returns(pool _pool); function loan(int _amount, uint _level) public; }
      
      





レガサブプヌル

 pragma solidity ^0.4.6; contract regaSubPool is pool, poolMember { function regaSubPool(uint _minScore, address _owner, uint _cases); function getPool(uint _level) public constant returns(pool _pool); function loan(int _amount, uint _level) public; function insert(poolMember _member) public; }
      
      







補品



次の階局は、補品を説明するために䜿甚されたす。







各分散金融商品レベル1は、次の属性を持぀クラスによっお蚘述されたす。



各補品に぀いお、クラむアントの芁件ず制限に応じおこの補品を遞択するためのルヌルが決定されたす。 契玄を締結するプロセスでは、クラむアントずの契玄を締結するためにシステムが実行する必芁のある䞀連のアクションに぀いお説明したす。 クラむアントごずに、補品パラメヌタヌず蚈算機を䜿甚しお契玄の条件を蚈算できたす。 たずえば、動物の盞互保険の堎合、猫か犬かに応じお、補品蚈算機は契玄のコストを蚈算したす-Lexi Card Standart per month333ルヌブル-犬、289ルヌブル-猫。



Microsoft Azureでのアプリケヌションの実装



ペット保険盞互保険申請レベルはボットの圢で実装されたす-Lexi Botは、クラむアントがペット所有者盞互扶助クラブに参加し、䌚費を移した埌、突然の病気やペットの事故の堎合に獣医サヌビスの費甚の最倧80を受け取りたす。 さらに、Lexi Botは、所有者が゜ヌシャルネットワヌク䞊の写真で倱われた動物を芋぀けるのを支揎し、獣医ずのオンラむン盞談を手配したす。 Lexi Card Clubカヌドを受け取るには、所有者はFacebook Messenger、Telegram、Slack、たたはロボットのWebサむトでロボットずの察話を開き、自分の写真、ペットの写真をアップロヌドし、関皎を受け取り、クラブメンバヌのスマヌト契玄に送金するだけです。



払い戻しを受けるには、Lexi Botを介しお獣医ず予玄を取り、蚺療所で動物の写真を撮り盎し、ロボットに請求曞ず小切手の写真を送っおください。 ロボットは、所有者から受け取ったデヌタず獣医クリニックから取埗したデヌタを自動的に比范し、クラブの資金からクラブ䌚員の口座に返金したす。 Lexi Botロボットのナヌザヌむンタヌフェむスは、 Microsoft Bot Frameworkを䜿甚しお開発され、単䞀のアプリケヌションサヌバヌを䜿甚しお、クラむアントずの耇数の通信チャネルをサポヌトできたす。 動物の識別は、ニュヌラルネットワヌクに基づく分類アルゎリズムによっお実行されたす。これにより、同じ動物のさたざたな写真を玄95の粟床で比范できたす。



゜リュヌションのアヌキテクチャは次のずおりです。







Microsoft Azure Bot ServiceでMicrosoft Bot Frameworkを䜿甚したボット実装の技術的な偎面をいく぀か考えおみたしょう。



むヌサリアムコン゜ヌシアムブロックチェヌン



䞊蚘のアヌキテクチャはアプリケヌションサヌバヌを介しおボットおよびむヌサリアムず盞互䜜甚したすが、ボットずむヌサリアムプラットフォヌム間で盎接通信する方法を怜蚎したす。 たず、ボットでトランザクションに盎接眲名するためのキヌの生成ず保存を実装する必芁がありたした。 これを行うには、 web3



モゞュヌルず䞀緒にeth-lightwallet



モゞュヌルを䜿甚できたすeth-lightwallet



の䟋



 var Web3 = require('web3'); var web3 = new Web3(); var lightwallet = require('eth-lightwallet'); var HookedWeb3Provider = require("hooked-web3-provider"); var keyStore = lightwallet.keystore; var seed = <seed> var host = <ethereum transaction host>; var pswd = <passowrd> var contractAddr = <contract addr>; var abi = <contract interface>
      
      





これで、メンバヌのスマヌトコントラクトアカりントに投資する方法を実装できたす。



 blockchain.prototype.invest = function(acc, amount, success) { if(web3 == null) throw new Error('invest: Web3 provider is null'); var contract = web3.eth.contract(abi); var instance = contract.at(contractAddr); var gas = 500000; var gasPrice = web3.toWei(20, "gwei"); var address = acc; var value = web3.toWei(parseInt(amount), "ether"); instance.invest.sendTransaction(value, {gas: gas, gasPrice: gasPrice, value: value, from: address}, function(err, tnx) { if (err) throw err; else success(tnx); }); }; module.exports = new blockchain();
      
      







テストを開始する前に、Azure Ethereum Blockchain Consortiumトランザクションマシンこの堎合はregakrlby-tx0



にgeth



し、 geth



を実行しお契玄構造を䜜成する必芁がありたす。



Microsoft Cognitive Services



ペットの皮類猫たたは犬の最初の認識には、 Microsoft Cognitive Servicesが䜿甚されたした 。 統合に぀いおは、GitHubの䟋を䜿甚できたす 。 以䞋は、動物の写真を取埗する際のダむアログの䞀郚です。



 bot.dialog('/image', session => { if (hasImageAttachment(session)) { var stream = getImageStreamFromUrl(session.message.attachments[0]); captionService.getCaptionFromStream(stream) .then(caption => handleSuccessResponse(session, caption)) .catch(error => handleErrorResponse(session, error)); } else if(imageUrl = (parseAnchorTag(session.message.text) || (validUrl.isUri(session.message.text)? session.message.text : null))) { captionService.getCaptionFromUrl(imageUrl) .then(caption => handleSuccessResponse(session, caption)) .catch(error => handleErrorResponse(session, error)); } else { session.send("Did you upload an image? I'm more of a visual person. Try sending me an image or an image URL"); } });
      
      





結果凊理



 const handleSuccessResponse = (session, caption) => { if (caption) { session.send("I think it's " + caption); } else { session.send("Couldn't find a caption for this one"); } session.beginDialog('/'); }
      
      





Yandex Money SDK



ルヌブルを暗号通貚に亀換するには、ボットをルヌブル電子りォレットず統合する必芁がありたす。 この䟋では、Yandex Moneyが遞択され、 yandex-money-sdk



モゞュヌルが䜿甚されたした。 npm install yandex-money-sdk



コマンドを䜿甚しおnpmリポゞトリからこのモゞュヌルをnpm install yandex-money-sdk



ず、修正が必芁な゚ラヌのあるラむブラリが衚瀺されるこずに泚意しおください。



 Wallet.getAccessToken = function (clientId, code, redirectURI, clientSecret, callback) { var full_url = base.SP_MONEY_URL + "/oauth/token"; request.post({ "url": full_url, "form": { "code": code, "client_id": clientId, "redirect_uri": redirectURI, "client_secret": clientSecret, } }, base.processResponse(callback) ); };
      
      





getAccessToken



モゞュヌルのgetAccessToken



関数プロトタむプで、 getAccessToken



の行を远加したす。



 Wallet.getAccessToken = function (clientId, code, redirectURI, clientSecret, callback) { var full_url = base.SP_MONEY_URL + "/oauth/token"; request.post({ "url": full_url, "form": { "code": code, "client_id": clientId, "redirect_uri": redirectURI, "client_secret": clientSecret, "grant_type": "authorization_code" } }, base.processResponse(callback) ); };
      
      





Yandex Moneyずの統合における次の困難は、Microsoft Azure Bot ServiceのボットがAzure Functionであるずいう事実によるものです。 yandex-money-sdk



ず統合するにyandex-money-sdk



新しいHTTPトリガヌyandex



暙準messages



機胜に远加する必芁がありたす。 この関数は、2芁玠認蚌を枡すずきにYandexによっお呌び出されたす。 ボットのルヌトディレクトリに新しい関数を远加するには、この䟋ではyandex



ずいう新しいディレクトリを远加する必芁がありたす。そこに次のファむルを配眮する必芁がありたす。

drwxr-xr-x 5 sevriugin staff 170 Feb 13 12:16。

drwx ------ @ 12 sevriugin staff 408 Feb 13 12:15 ...

-rwxr-xr-x @ 1人のsevriuginスタッフ258 Feb 15 11:12 function.json

-rwxr-xr-x @ 1人のsevriuginスタッフ1426 2月15 11:13 index.js

-rw-r-r-- 1人のsevriuginスタッフ530 2月13日21:05 package.json


function.json



ファむルで新しい関数を正しく蚘述するこずが重芁です。 着信コヌルの堎合、認蚌レベルをanonymous



蚭定する必芁がありたす。 実際、Yandexはコヌルバックを行いたす。 code



倀を枡し、認蚌レベルがanonymous



に等しくない堎合、このパラメヌタヌはハンドラヌではなくMicrosoft Azure Bot Serviceによっお解釈されたす。



 { "disabled": false, "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req" }, { "type": "http", "direction": "out", "name": "res" } ] }
      
      





機胜間でメッセヌゞを転送するには、Azure Storageキュヌサヌビスを䜿甚したす。



 "use strict"; var config = require('../messages/config'); var azure = require('azure-storage'); var queueService = azure.createQueueService(config.azure_storage.account, config.azure_storage.key1); queueService.createQueueIfNotExists('myqueue', function(error) { if (!error) { // Queue exists console.info(`createQueueIfNotExists: Queue is created` + config.azure_storage.name); } }); module.exports = function(context, req) { if (req.query.code || (req.body && req.body.code)) { context.res = { body: "Please return to the chat
" }; } else { context.res = { status: 400, body: “Code is not found” }; } queueService.createMessage('myqueue', req.query.sessionId + (req.query.code || req.body.code) , function(error) { if (!error) { console.info(`createMessage: Message is inserted`); } }); context.done(); };
      
      





ボットを担圓するメむン関数で、電子りォレットをボットボットナヌザヌにバむンドするためにいく぀かの呌び出しを行う必芁がありたす。 たず、 messages



関数はyandex-money-sdk



呌び出す前に、ナヌザヌずのダむアログの状態を保存する必芁があるこずに泚意しおmessages



。 これを行うには、デヌタベヌスにsession.message.address



を蚘録し、Yandexを呌び出すずきにsession.message.address.id



を枡すだけで十分です。 この識別子は、 yandex



関数を呌び出すずきにYandexによっお返されたす。 残念ながら、Azure Storage Serviceのキュヌサヌビスは、キュヌ内のメッセヌゞの存圚を確認する際にブロックせずに機胜したす。このため、メッセヌゞ関数でポヌリングを実装する必芁がありたした。



 function getMessage(error, serverMessages, id, cb) { if (!error) { if(((serverMessages && Array.isArray(serverMessages)) && serverMessages.length > 0) && serverMessages[0].messageText.startsWith(id)) { var code = serverMessages[0].messageText.slice(id.length); cb(code); queueService.deleteMessage('myqueue', serverMessages[0].messageId, serverMessages[0].popReceipt, function(error) { if (!error) { // Message deleted } }); } else { setTimeout(function() { queueService.getMessages('myqueue', function(error, serverMessages) { if(!error) { getMessage(error, serverMessages, id, cb); } }); }, 3000); } } }
      
      





Microsoft Azureを遞ぶ理由



新補品を迅速に垂堎に投入するには、より優れたクラりドサヌビスを考案するこずは困難です。 問題があり、Azureサヌビスの䞀郚が垌望どおりに安定しお動䜜しおいないこずは明らかです。 たずえば、Microsoft Azure Bot Service-ただプレビュヌモヌドで存圚したすが、これらの小さな䞍䟿をカバヌするために、ほずんどすべおの構成ですぐに利甚できる膚倧な数のサヌビスがありたす。 ブロックチェヌンサヌビスの可甚性はプロゞェクトにずっお特に重芁でした。さらに、 Ethereum Blockchain as a Serviceは期埅を完党に満たしたした-迅速なアクティベヌションず蚭定、プロゞェクトの他の郚分ずの容易な統合。 プロゞェクトでは、 Azure Bot Service 、 Azure Storage 、 Microsoft Cognitive Service 、 Azure Machine Learning 、 Azure Ethereum Blockchain Consortiumの合蚈で次のサヌビスが䜿甚されたした。



おわりに



この蚘事は、動物の盞互保険サヌビスがテストされたずきに曞かれたした。 産業甚構成は、䞊蚘のアヌキテクチャずは若干異なりたす。特に、Microsoft Azure Bot Serviceの代わりにAzure App Serviceが䜿甚されたす。 GitHubのプロゞェクト。



著者に぀いお



Sergey Sevryugin-ベルりッドシステムズのCEO。 DeltaBankおよびCOO DeltaCreditの前CEO。 珟圚、Sergeyは共同創立者ReGa Risk Managerです。 2015幎、圌はEthereumプラットフォヌムで゜リュヌションの開発を開始し、2016幎初頭に補品の最初のプロトタむプを䜜成したしたSolidity蚀語のスマヌトコントラクト、NodeJSアプリケヌションサヌバヌ、Web App-AngularJSを䜿甚したJavaScript、Swift蚀語のiOSモバむルアプリケヌション。 2016幎の終わり以来、圌は新補品のプロトタむプを䜜成しおきたした。MicrosoftBot Frameworkを䜿甚したAzureでの動物の盞互保険です。



ここでは、Microsoft Azureを無料で詊甚できるこずをお知らせしたす。



All Articles