ocoge/index.html

1050 lines
36 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./node_modules/dracula-prism/dist/css/dracula-prism.min.css">
</link>
<link rel="stylesheet" href="./node_modules/prismjs/plugins/line-numbers/prism-line-numbers.min.css">
</link>
<link rel="stylesheet" href="./fonts/css/all.min.css">
</link>
<link rel="stylesheet" href="./index.css">
</link>
<link rel="shortcut icon" type="image/png" href="https://ocoge.club/assets/img/favicon.png">
<meta property="og:url" content="https://ocoge.club/demo/" />
<meta property="og:title" content="『オコゲ』Web 体験版" />
<meta property="og:description" content="ブロックプログラミングを体験してみましょう" />
<meta property="og:site_name" content="『オコゲ』Web 体験版" />
<meta property="og:image" content="https://ocoge.club/assets/img/mimmy_360.webp" />
</head>
<body>
<!-- コードダイアログ -->
<dialog id="codeDlg">
<div id="dlgTitle">Source Code:</div>
<!-- <pre id="dlgContent" class="prettyprint lang-js linenums"></pre> -->
<pre id="dlgContent" class="line-numbers"><code id="code"></code></pre>
<button id="dlgClose" title="このダイアログを閉じます。">閉じる</button>
<button id="dlgExport" title="ソースコードを保存します。">保存</button>
<!-- <span id="cli" class="dlgCli" title="ソースコードの window.alert() などを console.log() に置換します。コンソールで動作させるときにちょっと便利です。"><input
type="checkbox" id="dlgCli">CLI</span> -->
<!-- <div id="conmenu">
<ul>
<li><a href="#" onclick="document.execCommand('copy');" class="conCopy">コピー</a></li>
</ul>
</div> -->
</dialog>
<!-- ツールバー(左) -->
<div class="oc_toolbar">
<div class="toolbar-left">
<span class="appTitle" title="ocoge: code generator" onclick="testfunc()"><span class="o"></span><span
class="co"></span><span class="ge"></span></span>
</div>
<!-- ツールバー(右) -->
<div class="toolbar-right" id="toolbar-right">
<button class="toolbarButton" title="JavaScriptのプログラムコードを表示・保存します。" onclick="ugj_showCode()"><i
class="fas fa-code"></i> CODE</button>
<button class="toolbarButton" title="ワークスペースや設定を削除して最初から始めます。" onclick="ugj_newWorkspace()"><i
class="fas fa-file"></i> 新規</button>
<button onclick="ugj_loadWorkspaceFromFile()" class="toolbarButton"
title="ファイルに保存したブロックプログラムを読み込みます。既にワークスペースにあるブロックは削除されません。"><i class="fas fa-folder-open"></i> 開く</button>
<button onclick="ugj_saveWorkspaceToFile()" class="toolbarButton" title="ワークスペースのブロックプログラムをファイルに保存します。"><i
class="fas fa-save"></i> 保存</button>
<button class="toolbarButton" title="ワークスペースのブロックプログラムを別名でファイルに保存します。" onclick="ugj_saveWorkspaceAs()"><i
class="fas fa-clone"></i> 別名</button>
<button class="toolbarButton" title="ブロックプログラムを実行します。" onclick="ugj_runCode()" id="runbtn"><i
class="fas fa-play-circle"></i> 実行</button>
<button class="iconbutton redo" title="アプリを再読み込みします。" onclick="location.reload()"><i
class="fas fa-redo-alt"></i></button>
</div>
</div>
<!-- Blockly -->
<div id="blocklyArea"></div>
<div id="blocklyDiv" style="position: absolute"></div>
<!-- ディスプレイカラム(ビデオ・ターミナル表示) -->
<div class="rightPane" id="dispColumn">
<div id="display_area"><canvas id="canvas_bg" class="display" width="480" height="360"></canvas><canvas id="canvas"
class="display" width="480" height="360"></canvas><canvas id="gcanvas" class="display" width="480"
height="360"></canvas><video id="maindisplay" class="display" width="480" height="360" autoplay
muted></video><video id="subdisplay" class="subdisplay" width="160" height="120" autoplay muted></video></div>
<pre id="blackboard" disabled></pre>
<form name="inputForm" onsubmit="return false" autocomplete="off" id="inputForm">
<div class="inputDiv"><input type="text" id="inputBox">
<div class="inputBtnDiv"><input type="submit" value="&#xf058" class="inputBtn fas"></div>
</div>
</form>
</div>
<!-- ツールボックス定義 -->
<xml xmlns="https://developers.google.com/blockly/xml" id="toolbox" style="display: none">
<category name="論理" css-icon="customIcon fas fa-random" categorystyle="logic_category">
<block type="controls_if"></block>
<block type="logic_compare">
<field name="OP">EQ</field>
</block>
<block type="logic_operation">
<field name="OP">AND</field>
</block>
<block type="logic_negate"></block>
<block type="logic_boolean">
<field name="BOOL">TRUE</field>
</block>
<block type="logic_null"></block>
<block type="logic_ternary"></block>
</category>
<category name="ループ" css-icon="customIcon fas fa-redo-alt" categorystyle="loop_category">
<block type="controls_repeat_ext">
<value name="TIMES">
<shadow type="math_number">
<field name="NUM">10</field>
</shadow>
</value>
</block>
<block type="controls_whileUntil">
<field name="MODE">WHILE</field>
</block>
<block type="controls_for">
<field name="VAR" iid="oFFZ#D{*XbIVL=!W~X]w">番号</field>
<value name="FROM">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="TO">
<shadow type="math_number">
<field name="NUM">10</field>
</shadow>
</value>
<value name="BY">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="controls_forEach">
<field name="VAR" iid="k4+0elF%?J]_)8fo((-m">項目</field>
</block>
<block type="controls_flow_statements">
<field name="FLOW">BREAK</field>
</block>
</category>
<category name="数・計算" css-icon="customIcon fas fa-calculator" categorystyle="math_category">
<block type="math_number">
<field name="NUM">0</field>
</block>
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="math_round">
<field name="OP">ROUND</field>
<value name="NUM">
<shadow type="math_number">
<field name="NUM">3.1</field>
</shadow>
</value>
</block>
<block type="math_single">
<field name="OP">ROOT</field>
<value name="NUM">
<shadow type="math_number">
<field name="NUM">9</field>
</shadow>
</value>
</block>
<block type="math_modulo">
<value name="DIVIDEND">
<shadow type="math_number">
<field name="NUM">64</field>
</shadow>
</value>
<value name="DIVISOR">
<shadow type="math_number">
<field name="NUM">10</field>
</shadow>
</value>
</block>
<block type="math_random_int">
<value name="FROM">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="TO">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
</block>
<block type="math_random_float"></block>
<block type="ugj_bintodec">
<value name="bin">
<shadow type="text">
<field name="TEXT">0000</field>
</shadow>
</value>
</block>
<block type="ugj_hextodec">
<value name="hex">
<shadow type="text">
<field name="TEXT">ff</field>
</shadow>
</value>
</block>
<block type="ugj_dectohex">
<value name="dec">
<shadow type="math_number">
<field name="NUM">255</field>
</shadow>
</value>
</block>
<block type="oc_text_to_number">
<value name="text">
<shadow type="text">
<field name="TEXT">0</field>
</shadow>
</value>
</block>
</category>
<category name="テキスト" css-icon="customIcon fas fa-font" categorystyle="text_category">
<block type="text">
<field name="TEXT"></field>
</block>
<block type="text_print">
<value name="TEXT">
<shadow type="text">
<field name="TEXT">こんにちは!</field>
</shadow>
</value>
</block>
<block type="text_join">
<mutation items="2"></mutation>
</block>
<block type="text_length">
<value name="VALUE">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
</value>
</block>
<block type="text_indexOf">
<value name="VALUE">
<block type="variables_get">
<field name="VAR">text</field>
</block>
</value>
<value name="FIND">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
</value>
</block>
<block type="text_charAt">
<value name="VALUE">
<block type="variables_get">
<field name="VAR">text</field>
</block>
</value>
</block>
<block type="text_getSubstring">
<value name="STRING">
<block type="variables_get">
<field name="VAR">text</field>
</block>
</value>
</block>
<block type="ugj_charcode">
<value name="char">
<shadow type="text">
<field name="TEXT">a</field>
</shadow>
</value>
</block>
<block type="ugj_codechar">
<value name="code">
<shadow type="math_number">
<field name="NUM">97</field>
</shadow>
</value>
</block>
</category>
<category name="リスト" css-icon="customIcon fas fa-list-ol" categorystyle="list_category">
<block type="lists_create_with">
<mutation items="2"></mutation>
</block>
<block type="lists_length"></block>
<block type="lists_isEmpty"></block>
<block type="lists_indexOf">
<field name="END">FIRST</field>
<value name="VALUE">
<block type="variables_get">
<field name="VAR" iid="3kh{pye%.qbQf]}y64q6" variabletype="">list</field>
</block>
</value>
</block>
<block type="lists_getIndex">
<mutation statement="false" at="true"></mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get">
<field name="VAR" iid="3kh{pye%.qbQf]}y64q6" variabletype="">list</field>
</block>
</value>
</block>
<block type="lists_setIndex">
<mutation at="true"></mutation>
<field name="MODE">SET</field>
<field name="WHERE">FROM_START</field>
<value name="LIST">
<block type="variables_get">
<field name="VAR" iid="3kh{pye%.qbQf]}y64q6" variabletype="">list</field>
</block>
</value>
</block>
<block type="lists_split">
<mutation mode="SPLIT"></mutation>
<field name="MODE">SPLIT</field>
<value name="DELIM">
<shadow type="text">
<field name="TEXT">,</field>
</shadow>
</value>
</block>
<block type="lists_sort">
<field name="TYPE">NUMERIC</field>
<field name="DIRECTION">1</field>
</block>
</category>
<category name="変数" css-icon="customIcon fas fa-bars" categorystyle="variable_category" custom="VARIABLE">
</category>
<category name="関数" css-icon="customIcon fas fa-yin-yang" categorystyle="procedure_category" custom="PROCEDURE">
</category>
<sep></sep>
<category name="GPIO" css-icon="customIcon fab fa-raspberry-pi" categorystyle="gpio_category">
<label text="基本"></label>
<block type="ugj_gpio_open"></block>
<block type="ugj_gpio_close"></block>
<block type="oc_gpio_set_output">
<value name="ugpio">
<shadow type="math_number">
<field name="NUM">5</field>
</shadow>
</value>
</block>
<block type="ugj_gpio_write">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">5</field>
</shadow>
</value>
<field name="level">1</field>
</block>
<block type="oc_gpio_set_input">
<field name="lflag">SET_PULL_NONE</field>
<value name="ugpio">
<shadow type="math_number">
<field name="NUM">6</field>
</shadow>
</value>
</block>
<block type="ugj_gpio_read">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">6</field>
</shadow>
</value>
</block>
<label text="I2C" web-line="4.0" web-line-width="200"></label>
<block type="oc_i2c_open">
<field name="i2c_hand">I2Cデバイス</field>
<value name="addr">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="oc_i2c_close">
<field name="i2c_hand">I2Cデバイス</field>
</block>
<!-- <block type="ugj_i2c_close"></block> -->
<block type="oc_i2c_write_byte">
<field name="i2c_hand">I2Cデバイス</field>
<value name="byte_val">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_write_byte_data">
<value name="reg">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="byte_val">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_read_byte_data">
<field name="i2c_hand">I2Cデバイス</field>
<value name="reg">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_read_word_data">
<field name="i2c_hand">I2Cデバイス</field>
<value name="reg">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_write_i2c_block_data">
<field name="i2c_hand">I2Cデバイス</field>
<value name="reg">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="data">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_read_device">
<field name="i2c_hand">I2Cデバイス</field>
<value name="count">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="ugj_i2c_write_device">
<field name="i2c_hand">I2Cデバイス</field>
<value name="data">
<shadow type="text_join">
<mutation items="2"></mutation>
<value name="ADD0">
<shadow type="text">
<field name="TEXT">ohayo-.</field>
</shadow>
</value>
<value name="ADD1">
<shadow type="ugj_text_cr"></shadow>
</value>
</shadow>
</value>
</block>
<label text="シリアル" web-line="4.0" web-line-width="200"></label>
<block type="oc_serial_open">
<field name="ser_hand">シリアルデバイス</field>
<field name="baud">9600</field>
<value name="port">
<shadow type="text">
<field name="TEXT">/dev/ttyACM0</field>
</shadow>
</value>
</block>
<block type="oc_serial_close">
<field name="ser_hand">シリアルデバイス</field>
</block>
<block type="oc_serial_read">
<field name="ser_hand">シリアルデバイス</field>
<value name="count">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="oc_serial_write">
<field name="ser_hand">シリアルデバイス</field>
<value name="data">
<shadow type="text">
<field name="TEXT">hello</field>
</shadow>
</value>
</block>
<!-- <block type="ugj_serial_open">
<field name="baud">9600</field>
</block>
<block type="ugj_serial_close"></block>
<block type="ugj_serial_read">
<value name="count">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="ugj_serial_write">
<value name="data">
<shadow type="text_join">
<mutation items="2"></mutation>
<value name="ADD0">
<shadow type="text">
<field name="TEXT">ohayo-.</field>
</shadow>
</value>
<value name="ADD1">
<shadow type="ugj_text_cr"></shadow>
</value>
</shadow>
</value>
</block> -->
<label text="Extra" web-line="4.0" web-line-width="200"></label>
<label text="_" web-line="4.0" web-line-width="200"></label>
</category>
<category toolboxitemid="category_sensors" name="モジュール" css-icon="customIcon fas fa-microchip"
categorystyle="sensor_category">
</category>
<category name="マルチメディア" css-icon="customIcon fas fa-gamepad" categorystyle="multimedia_category">
<label text="キャンバス" web-line="4.0" web-line-width="200"></label>
<block type="ugj_canvas_init"></block>
<block type="ugj_canvas_clearrect">
<value name="x">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="y">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="w">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="h">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
</block>
<block type="ugj_canvas_width"></block>
<block type="ugj_canvas_height"></block>
<block type="ugj_canvas_drawcircle">
<value name="x">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="y">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="r">
<shadow type="math_number">
<field name="NUM">10</field>
</shadow>
</value>
<value name="color">
<shadow type="colour_picker">
<field name="COLOUR">#9999ff</field>
</shadow>
</value>
</block>
<block type="ugj_canvas_drawrect">
<value name="x">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="y">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
<value name="w">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="h">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="color">
<shadow type="colour_picker">
<field name="COLOUR">#ff0000</field>
</shadow>
</value>
</block>
<block type="ugj_canvas_loadimg">
<value name="imgfilename">
<shadow type="text">
<field name="TEXT">photo.jpg</field>
</shadow>
</value>
</block>
<block type="ugj_canvas_finalize"></block>
<label text="色" web-line="4.0" web-line-width="200"></label>
<block type="colour_picker">
<field name="COLOUR">#ff0000</field>
</block>
<block type="colour_random"></block>
<block type="colour_rgb">
<value name="RED">
<shadow type="math_number">
<field name="NUM">100</field>
</shadow>
</value>
<value name="GREEN">
<shadow type="math_number">
<field name="NUM">50</field>
</shadow>
</value>
<value name="BLUE">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<label text="サウンド" web-line="4.0" web-line-width="200"></label>
<block type="ugj_sound_play">
<field name="sound">meow</field>
</block>
<label text="イベント" web-line="4.0" web-line-width="200"></label>
<block type="ugj_event_key">
<field name="updown">keydown</field>
<value name="key">
<block type="variables_get">
<field name="VAR" iid="Tf-2_OhUEAcOe;U}wu%I">キー</field>
</block>
</value>
</block>
<label text="顔認識" web-line="4.0" web-line-width="200"></label>
<block type="ugj_face_init"></block>
<block type="ugj_face_display"></block>
<block type="ugj_face_detect">
<value name="preditions">
<block type="variables_get">
<field name="VAR" iid="TLZRpW`yXuYE3Z31)B=2">検出結果</field>
</block>
</value>
</block>
<block type="ugj_face_location">
<field name="member">topLeft[0]</field>
<value name="prediction">
<block type="lists_getIndex">
<mutation statement="false" at="true"></mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get">
<field name="VAR" iid="_W]y2e!_~suF]yM;LQ1~">検出結果</field>
</block>
</value>
<value name="AT">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
</block>
<block type="ugj_face_draw">
<field name="with_landmark">TRUE</field>
<value name="prediction">
<block type="lists_getIndex">
<mutation statement="false" at="true"></mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get">
<field name="VAR" iid="E-Bsl~,RZG]E)v`k![_p">検出結果</field>
</block>
</value>
<value name="AT">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</value>
</block>
<label text="音声コマンド認識" web-line="4.0" web-line-width="200"></label>
<!-- <block type="oc_speechcommands_init">
<value name="custom_model">
<shadow type="text">
<field name="TEXT"></field>
</shadow>
</value>
</block> -->
<block type="oc_speechcommands_init">
<field name="classlabels" iid="aV;:;wdjQ;:3+(Bx8Z!$">ラベル</field>
<value name="custom_model">
<shadow type="text">
<field name="TEXT"></field>
</shadow>
</value>
</block>
<!-- <block type="oc_speechcommand_listen">
<field name="classlabels" iid="-aysulrCq~BT0?GQL|V:">ラベル</field>
<field name="scores" iid="#?-HvxDFqQ#vb+swl_k:">スコア</field>
</block> -->
<block type="oc_speechcommand_listen">
<field name="scores" iid="|!AWY]V:il;fu;lRwDC*">スコア</field>
</block>
<label text="_" web-line="4.0" web-line-width="200"></label>
</category>
<category name="ネットワーク" css-icon="customIcon fas fa-wifi" categorystyle="network_category">
<label text="基本" web-line="4.0" web-line-width="200"></label>
<block type="ugj_network_axios_geturl">
<value name="url">
<shadow type="text">
<field name="TEXT">http://www.yahoo.co.jp/</field>
</shadow>
</value>
</block>
<block type="ugj_network_sendmail">
<value name="to">
<shadow type="text">
<field name="TEXT">to@example.com</field>
</shadow>
</value>
<value name="subject">
<shadow type="text">
<field name="TEXT">おはよう</field>
</shadow>
</value>
<value name="text">
<shadow type="text">
<field name="TEXT">朝ですよ</field>
</shadow>
</value>
</block>
<label text="サーバー" web-line="4.0" web-line-width="200"></label>
<block type="ugj_network_httpserver">
<value name="url">
<block type="variables_get">
<field name="VAR" iid="b`}7sB~6O9+IKJ!vJzA`">URL</field>
</block>
</value>
<value name="response">
<shadow type="text">
<field name="TEXT">オコゲ</field>
</shadow>
</value>
</block>
<label text="ウェブチャット" web-line="4.0" web-line-width="200"></label>
<block type="ugj_library_load">
<value name="lib">
<shadow type="ugj_library_skyway"></shadow>
</value>
</block>
<block type="ugj_webchat"></block>
<block type="ugj_getusermedia"></block>
<block type="ugj_skyway_newpeer">
<value name="my_id">
<block type="variables_get">
<field name="VAR" iid="P$},PvZ}j#)8lw++|u7h">自分のID</field>
</block>
</value>
<value name="apikey">
<shadow type="text">
<field name="TEXT"></field>
</shadow>
</value>
</block>
<block type="ugj_skyway_called"></block>
<block type="ugj_skyway_events">
<value name="remote_id">
<block type="variables_get">
<field name="VAR" iid="lN*;t*HFF;@[)a_m3#F8">相手のID</field>
</block>
</value>
</block>
<block type="ugj_skyway_eventopen"></block>
<block type="ugj_skyway_eventdata">
<value name="data">
<block type="variables_get">
<field name="VAR" iid="l[-u+nGf?P~Zu?k(bgP)">発言</field>
</block>
</value>
</block>
<block type="ugj_skyway_eventsend">
<value name="data">
<block type="variables_get">
<field name="VAR" iid="NbC3[s+Uilk#moos+bn8">内容</field>
</block>
</value>
</block>
<label text="_" web-line="4.0" web-line-width="200"></label>
</category>
<category name="特殊" css-icon="customIcon fas fa-plug" categorystyle="special_category">
<label text="制御" web-line="4.0" web-line-width="200"></label>
<block type="ugj_sleep">
<value name="sec">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
<block type="ugj_async_iife"></block>
<label text="出入力" web-line="4.0" web-line-width="200"></label>
<block type="ugj_canvas_say">
<value name="say">
<shadow type="text">
<field name="TEXT">コンニチワ!</field>
</shadow>
</value>
<field name="sec">2</field>
</block>
<block type="ugj_event_answer">
<value name="question">
<shadow type="text">
<field name="TEXT">お名前は?</field>
</shadow>
</value>
<value name="answer">
<block type="variables_get">
<field name="VAR" iid=":w)sl|yxx4k^W-~-VM#,">答え</field>
</block>
</value>
</block>
<block type="ugj_blackboard_show"></block>
<block type="ugj_blackboard_write">
<field name="style">normal</field>
<field name="line">new</field>
<value name="text">
<shadow type="text">
<field name="TEXT">コンニチワ!</field>
</shadow>
</value>
<value name="color">
<shadow type="colour_picker">
<field name="COLOUR">#ccffff</field>
</shadow>
</value>
</block>
<block type="ugj_blackboard_content"></block>
<block type="ugj_clearblackboard"></block>
<block type="ugj_control_button">
<value name="label">
<shadow type="text">
<field name="TEXT">ボタン1</field>
</shadow>
</value>
<value name="textcolor">
<shadow type="colour_picker">
<field name="COLOUR">#ffffff</field>
</shadow>
</value>
<value name="bgcolor">
<shadow type="colour_picker">
<field name="COLOUR">#999999</field>
</shadow>
</value>
<value name="title">
<shadow type="text">
<field name="TEXT">ここをクリック</field>
</shadow>
</value>
</block>
<block type="ugj_localstorage_save">
<value name="keyValue">
<shadow type="text">
<field name="TEXT">abc</field>
</shadow>
</value>
<value name="keyName">
<shadow type="text">
<field name="TEXT">storage</field>
</shadow>
</value>
</block>
<block type="ugj_localstorage_load">
<value name="keyName">
<shadow type="text">
<field name="TEXT">storage</field>
</shadow>
</value>
</block>
<block type="ugj_localstorage_remove">
<value name="key">
<shadow type="text">
<field name="TEXT">storage</field>
</shadow>
</value>
</block>
<label text="外部アプリ連携" web-line="4.0" web-line-width="200"></label>
<block type="ugj_spawnsync">
<value name="data">
<block type="variables_get">
<field name="VAR" iid="9z28J37fMu2VaWhbd4*=">実行結果</field>
</block>
</value>
</block>
<block type="ugj_spawn">
<value name="data">
<block type="variables_get">
<field name="VAR" iid=";i*e;NG!%_g}7}wTeaQc">データストリーム</field>
</block>
</value>
</block>
<block type="aquestalk_pi">
<value name="talk">
<shadow type="text">
<field name="TEXT">おはようございます。</field>
</shadow>
</value>
</block>
<block type="ugj_child_fswebcam">
<value name="filename">
<shadow type="text">
<field name="TEXT">photo.jpg</field>
</shadow>
</value>
</block>
<block type="ugj_child_pyscript">
<value name="script_path">
<shadow type="text">
<field name="TEXT">test.py</field>
</shadow>
</value>
</block>
<label text="特殊記号" web-line="4.0" web-line-width="200"></label>
<block type="ugj_text_cr"></block>
<block type="ugj_text_lf"></block>
<block type="ugj_text_cursor"></block>
<label text="特殊" web-line="4.0" web-line-width="200"></label>
<block type="ugj_socket">
<field name="data" iid="Y^@?sd}wN]H+nmK=[{wL" variabletype="">受信データ</field>
<value name="host">
<shadow type="text">
<field name="TEXT">localhost</field>
</shadow>
</value>
<value name="port">
<shadow type="math_number">
<field name="NUM">23</field>
</shadow>
</value>
</block>
<block type="ugj_socket_write">
<value name="cmd">
<shadow type="text">
<field name="TEXT">Hello</field>
</shadow>
</value>
</block>
<block type="ugj_file_readsync">
<field name="encoding">utf8</field>
<value name="filename">
<shadow type="text">
<field name="TEXT">example.txt</field>
</shadow>
</value>
</block>
<!-- <block type="ugj_dev_run_js"></block> -->
<label text="_" web-line="4.0" web-line-width="200"></label>
</category>
<category name="RP2 専用" css-icon="customIcon fab fa-python" categorystyle="rp2_category">
<label text="テキスト" web-line="4.0" web-line-width="200"></label>
<block type="oc_rp2_print">
<value name="text">
<shadow type="text">
<field name="TEXT"></field>
</shadow>
</value>
</block>
<block type="oc_rp2_input"></block>
<label text="JSON" web-line="4.0" web-line-width="200"></label>
<block type="oc_rp2_ujson_dumps"></block>
<block type="oc_rp2_ujson_loads"></block>
<label text="パルス" web-line="4.0" web-line-width="200"></label>
<block type="ugj_pwm">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">29</field>
</shadow>
</value>
<value name="pwm_frequency">
<shadow type="math_number">
<field name="NUM">50</field>
</shadow>
</value>
</block>
<block type="oc_pwm_duty">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">29</field>
</shadow>
</value>
<value name="duty">
<shadow type="math_number">
<field name="NUM">0</field>
</shadow>
</value>
</block>
<block type="oc_rp2_ir_rx">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">26</field>
</shadow>
</value>
</block>
<block type="oc_rp2_ir_record">
<value name="timeout">
<shadow type="math_number">
<field name="NUM">3</field>
</shadow>
</value>
</block>
<block type="oc_rp2_ir_tx">
<value name="gpio">
<shadow type="math_number">
<field name="NUM">27</field>
</shadow>
</value>
</block>
<block type="oc_rp2_ir_transmit"></block>
</category>
</xml>
<script src="./node_modules/blockly/blockly_compressed.js"></script>
<script src="./node_modules/blockly/javascript_compressed.js"></script>
<script src="./node_modules/blockly/python_compressed.js"></script>
<script src="./node_modules/blockly/blocks_compressed.js"></script>
<script src="./node_modules/blockly/msg/ja.js"></script>
<script src="./node_modules/@blockly/field-slider/dist/index.js"></script>
<script src="./lib/custom-dialog.js"></script>
<script src="./apptool.js"></script>
<script src="./index.js"></script>
<script src="./blocks/blocks.js"></script>
<script src="./blocks/index.js"></script>
<script src="./node_modules/js-beautify/js/lib/beautify.js"></script>
<script src="./node_modules/prismjs/prism.js"></script>
<script src="./node_modules/prismjs/components/prism-python.js"></script>
<script src="./node_modules/prismjs/plugins/line-numbers/prism-line-numbers.js"></script>
<script src="./node_modules/prismjs/plugins/toolbar/prism-toolbar.js"></script>
<script src="./node_modules/prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js"></script>
</body>
</html>