<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>cc-memo</title>
    <description>Computer Craft  のメモ</description>
    <link>https://cct.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>build craftの水門とタートルを使ったバケツフィラー（動画有り）</title>
      <description>&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-06-15_09.06.48.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
・空バケツで液体を汲む作業の自動化。バケツフィラーのタートル版。&lt;br /&gt;
・前回作った「autoRefuel」で面倒くさかった、溶岩バケツの補充を楽にする為に作成。&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;・この &amp;rdquo;システム&amp;rdquo; から、どこかの「autoRefuel」施設までバケツを運ぶ部分は&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;未完なので、&lt;br /&gt;
　まだ面倒くさいままですが。&lt;/span&gt;&lt;br /&gt;
・溶岩以外の液体でも使用可能。Build Craftのオイルとか。&lt;br /&gt;
・作っている途中で「&lt;a href=&quot;http://hevohevo.hatenablog.com&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;Minecraftとタートルと僕&lt;/a&gt;」の中の人に、&lt;br /&gt;
　&lt;a href=&quot;http://forum.minecraftuser.jp/viewtopic.php?t=17132&quot; title=&quot;&quot; target=&quot;_blank&quot;&gt;MoreTurtles&lt;/a&gt;の「液体タートル」を使う方法を教えていただいたのですが、&lt;br /&gt;
　作りかけを捨てるのももったいないので、意地で作成。&lt;br /&gt;
　（早くこれを終わらせてえさやりタートル使いたい、、、）&lt;br /&gt;
&lt;br /&gt;
【構成要素の説明】&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/33fbc813.jpeg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/build%20craft%E3%81%AE%E6%B0%B4%E9%96%80%E3%81%A8%E3%82%BF%E3%83%BC%E3%83%88%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%90%E3%82%B1%E3%83%84&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/build%20craft%E3%81%AE%E6%B0%B4%E9%96%80%E3%81%A8%E3%82%BF%E3%83%BC%E3%83%88%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%90%E3%82%B1%E3%83%84</link> 
    </item>
    <item>
      <title>filer（ファイラー）</title>
      <description>標準の ls が遅いので、単に早いだけの ls を作ろうとしていたはずだったのだが、ついつい機能を追加してしまい、ファイラーのようなものになってしまったので、filerという名前にした。&lt;br /&gt;
※どうでもいいけど、得られる便利さに見合わないぐらいソースが長い気がする、、、&lt;br /&gt;
&lt;br /&gt;
画像で説明&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-06-02_02.00.02.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
filerコマンドを実行すると、カレントディレクトリのファイルとディレクトリが、画像のように表示される。&lt;br /&gt;
・qキーを押すと、filerコマンドを終了する。&lt;br /&gt;
・カーソルの上下でページを切り替えることができる。&lt;br /&gt;
　&amp;rArr;５ページ目を表示した後で、４ページ目に戻る、という操作が可能。&lt;br /&gt;
・この状態でカーソルキーの右を押すと、、、&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-06-02_02.06.07.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
画像のように、ファイル／ディレクトリを選択する矢印（--&amp;gt;）が表示される。&lt;br /&gt;
・カーソルキーの左を押すと、最初の状態（矢印が表示されない状態）に戻る。&lt;br /&gt;
・カーソルキーの右を押すことで、矢印の左側にある&amp;rdquo;アクション&amp;rdquo;を切り替える事ができる。&lt;br /&gt;
　以下の&amp;rdquo;アクション&amp;rdquo;が選択できる。&lt;br /&gt;
　・cd　　 ディレクトリ移動（選択項目がディレクトリの場合）&lt;br /&gt;
　・edit　　選択したファイルを edit コマンドで開く（選択項目がファイルの場合）&lt;br /&gt;
　・delete　選択したファイルを削除する&lt;br /&gt;
　・rename　選択したファイルのファイル名を変更する&lt;br /&gt;
　・copy　　選択したファイルをコピーする。（同一ディレクトリ内でのコピー専用）&lt;br /&gt;
　・move　　選択したファイルを移動、または、コピーする。&lt;br /&gt;
　　（別のディレクトリに移動／コピーする場合に使用）&lt;br /&gt;
　・[other]　任意のコマンドを実行する。&lt;br /&gt;
　　　コマンドを入力する場面で、カーソルキーの上を押すと、&lt;br /&gt;
　　　選択したファイル／ディレクトリ名が表示され、それを編集できるので、少し楽かも。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/filer%EF%BC%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A9%E3%83%BC%EF%BC%89&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/filer%EF%BC%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A9%E3%83%BC%EF%BC%89</link> 
    </item>
    <item>
      <title>tr (turtle runner)</title>
      <description>&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-19_04.35.34.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
・trというコマンドを作ってみた。&lt;br /&gt;
・いつもの俺々フレームワークの「ミニ言語」を使ってタートルを動かす為のプログラム。&lt;br /&gt;
・ちょっとした用事の為にタートルを使いたいと思っても、&lt;br /&gt;
　わざわざその為のプログラムを書くは面倒くさい、という場合に&lt;br /&gt;
　このtrコマンドを使って、使い捨てのプログラムを作って走らせると良いかもしれない。&lt;br /&gt;
　ファイルに保存することも可能。&lt;br /&gt;
　そのファイルをeditで編集して、trで実行させることも可能。&lt;br /&gt;
　（但しまだ改行は非対応、、、だと思う）&lt;br /&gt;
・ヘルプ機能付き。&lt;br /&gt;
&lt;br /&gt;
　tr --help&lt;br /&gt;
&lt;br /&gt;
　というように、trコマンドの後に「--help」オプションを付けて実行すると、&lt;br /&gt;
　linuxとかの「manページ」風のヘルプが表示される。&lt;br /&gt;
&lt;br /&gt;
　また、「ミニ言語」のスクリプト入力中に、&lt;br /&gt;
　どんなコマンドが有るか忘れてしまった場合は、スクリプト中に「?」と入力し、&lt;br /&gt;
　Enterキーを押すことでもヘルプが表示される。&lt;br /&gt;
　ヘルプ終了後、元のスクリプトの作成を再開することができる。&lt;br /&gt;
・もう少し盛り込みたい機能もあるのだが、とりあえず投稿。&lt;br /&gt;
&lt;br /&gt;
画像で説明。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-19_03.50.27.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
trと打つと上記のメッセージが表示されるので、ここにタートルを動かす手順を記入する。&lt;br /&gt;
この例では&lt;br /&gt;
((ffr)4)2&lt;br /&gt;
と入力しているが、これは&lt;br /&gt;
前進、前進、右に９０度回転&lt;br /&gt;
を８回繰り返す、という意味。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/tr%20-turtle%20runner-&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/tr%20-turtle%20runner-</link> 
    </item>
    <item>
      <title>autoRefuel</title>
      <description>タートルの給油、面倒ですよね。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-14_03.33.26.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
そこで今回ご紹介したいのが、この、&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width=&quot;600&quot; height=&quot;338&quot; src=&quot;http://www.youtube.com/embed/8abg6NEl1cU&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/autorefuel&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/autorefuel</link> 
    </item>
    <item>
      <title>バグ取り</title>
      <description>&lt;span style=&quot;color: #ff0000;&quot;&gt;（注：バグまだ取れてません、、、）&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
『テスト用拠点６号』。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-13_20.45.17.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
&lt;span style=&quot;color: #000000;&quot;&gt;『遠征どこでもドア』と『ChickenChunks』を愛用しています。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
今回はバグ取りをしてゆきます。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-13_20.57.49.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
タートル同士で共食いをしてしまう件。掘られたタートルが持っていたアイテムが散らばってしまうので、デフォルトでは行えないようにする。&amp;lt;&amp;lt;&amp;lt; 1 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
目の前にブロックが有って、それがタートルではない場合は掘っても良い。という条件にした。&lt;br /&gt;
（turtle.detect() == true かつ、peripheral.getType(&quot;front&quot;) が &quot;turtle&quot; を返さない場合。）&lt;br /&gt;
&lt;br /&gt;
turtle.detect()を条件に加えていないと、&lt;br /&gt;
判定しようとしている場所に、タートルが移動して入り込んできているが、まだ止まっていない状態を検知できずに、タートルをdig()してしまう。&lt;br /&gt;
この時、peripheral.getType(&quot;front&quot;) 等が &quot;turtle&quot; を返さない為。&lt;br /&gt;
&lt;br /&gt;
でも、溶岩や水源等もturtle.detect() == falseなので、それらを掘って排除することが出来なくなってしまった。&lt;br /&gt;
&lt;br /&gt;
拠点を作ろうとした場所に溶岩の池があったとしても、これまでは、溶岩を掘って消し去ることが出来たのだが、これからどうしたものか、、、（拠点を作る場合は、他のタートルを壊しても良い、というふうに割り切るのも何か微妙。）&lt;br /&gt;
&lt;br /&gt;
次、&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E3%83%90%E3%82%B0%E5%8F%96%E3%82%8A&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E3%83%90%E3%82%B0%E5%8F%96%E3%82%8A</link> 
    </item>
    <item>
      <title>昨晩のブランチマイニング結果</title>
      <description>バグ取りする気が起きないので、ちょっとお茶を濁してみる。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-12_19.54.54.png&quot; alt=&quot;&quot; /&gt;『テスト用拠点４号』。マイニングタートル８機で採掘。&lt;br /&gt;
上段の４機は行儀良く待機していてくれたが、エラーが出てた。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-12_19.55.37.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
下段の４機には、fuelLevelが2000以下の時にスタート地点で中断するコードが入っていなかった為、各機好き勝手な場所で燃料切れ。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-12_20.10.40.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
別のタートルに掘られてチェストに収まってるやつとかも居た。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-12_20.11.30.png&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
成績はこんな感じ。&lt;br /&gt;
&lt;img src=&quot;http://file.cct.blog.shinobi.jp/2014-05-12_21.25.55.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E6%98%A8%E6%99%A9%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E7%B5%90%E6%9E%9C&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/%E6%98%A8%E6%99%A9%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%E7%B5%90%E6%9E%9C</link> 
    </item>
    <item>
      <title>mining （ブランチマイニング）</title>
      <description>&lt;img src=&quot;http://file.cct.blog.shinobi.jp/mining_img.jpg&quot; alt=&quot;&quot; /&gt; &lt;br /&gt;
&lt;br /&gt;
mining&lt;br /&gt;
ブランチマイニングを行うプログラム。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/mining%20%EF%BC%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%EF%BC%89&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/mining%20%EF%BC%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0%EF%BC%89</link> 
    </item>
    <item>
      <title>nekoPosi() / nekoNega()</title>
      <description>&lt;iframe width=&quot;400&quot; height=&quot;225&quot; src=&quot;http://www.youtube.com/embed/2lMCYawDoTw&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;br /&gt;
lib_neko_0.1.1&lt;br /&gt;
マイニングタートルで、ブランチマイニングをする時などに使用する、&lt;br /&gt;
必要なブロックだけを根こそぎ採集するプログラム（ライブラリ）。&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/nekoposi_nekonega&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/nekoposi_nekonega</link> 
    </item>
    <item>
      <title>kyoten／採掘・移動に失敗する場合の考慮</title>
      <description>kyoten&lt;br /&gt;
地下深くに拠点（と称した適当な大きさの部屋）を作るプログラム。&lt;br /&gt;
ブランチマイニングの拠点として使用する場合は、高度80以下の場所から開始する必要有り。&lt;br /&gt;
&lt;br /&gt;
lib_turtle_0.2.1&lt;br /&gt;
毎度の俺々フレームワーク&lt;br /&gt;
以下は、lib_turtle_0.2.0からの更新点&lt;br /&gt;
&lt;br /&gt;
[採掘時に砂とか砂利が落ちてくる場合を考慮して処理を追加した]&lt;br /&gt;
上を掘る場合&lt;br /&gt;
砂や砂利が崩れてくる場合があるので、掘った方向のブロックがなくなるまで、採掘を繰り返す。&lt;br /&gt;
&lt;br /&gt;
正面を掘る場合&lt;br /&gt;
砂や砂利が崩れてくる場合があるので、掘った方向のブロックがなくなるまで、採掘を繰り返す。&lt;br /&gt;
&lt;br /&gt;
①はsleep(0)の間隔で目の前のブロックがなくなるまでdig()することでクリア出来るが、、、&lt;br /&gt;
&lt;br /&gt;
①&lt;br /&gt;
　砂&lt;br /&gt;
　砂&lt;br /&gt;
　砂&lt;br /&gt;
亀石&lt;br /&gt;
石石石&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/kyoten%EF%BC%8F%E6%8E%A1%E6%8E%98%E3%83%BB%E7%A7%BB%E5%8B%95%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E8%80%83%E6%85%AE&quot; target=&quot;_blank&quot;&gt;つづきはこちら&lt;/a&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/kyoten%EF%BC%8F%E6%8E%A1%E6%8E%98%E3%83%BB%E7%A7%BB%E5%8B%95%E3%81%AB%E5%A4%B1%E6%95%97%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E8%80%83%E6%85%AE</link> 
    </item>
    <item>
      <title>archer3</title>
      <description>archer2をさらに改良。繰り返し処理も「ミニ言語」？内で行えるようにした。&lt;br /&gt;
debug.logには、かなりお世話になった。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;lib_log&lt;/span&gt;&lt;br /&gt;

&lt;div&gt;LOG_FILE_NAME = &quot;debug.log&quot;;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;function log(txt)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local hFile;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if fs.exists(LOG_FILE_NAME) then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; hFile = fs.open(LOG_FILE_NAME, &quot;a&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; hFile = fs.open(LOG_FILE_NAME, &quot;w&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; hFile.writeLine(txt);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; hFile.close();&lt;/div&gt;
&lt;div&gt;end&lt;br /&gt;
&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;br style=&quot;color: #000000;&quot; /&gt;&lt;br style=&quot;color: #000000;&quot; /&gt;lib_turtle_0.2.0&lt;/span&gt;&lt;br /&gt;

&lt;div&gt;
&lt;div&gt;dofile(&quot;lib_log&quot;);&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function myPlace(para1)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if para1 == 0 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.placeUp();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.place();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 2 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.placeDown();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function myThrow(para1, para2)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if para1 == 0 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.dropUp(para2);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.drop(para2);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 2 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.dropDown(para2);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function myExcavate(para1)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if para1 == 0 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.digUp();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.dig();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif para1 == 2 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; turtle.digDown();&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function myZzz(para1)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; sleep(para1 / 1000);&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function myOutput(para1, para2)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local dir = { [0] = &quot;top&quot;, &amp;nbsp;[1] = &quot;front&quot;, [2] = &quot;bottom&quot;,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [3] = &quot;left&quot;, [4] = &quot;back&quot;, &amp;nbsp;[5] = &quot;right&quot; };&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if para2 == 1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; rs.setOutput(dir[para1], true);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; rs.setOutput(dir[para1], false);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local cmdInfo =&lt;/div&gt;
&lt;div&gt;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp; f = { paraCnt = 0, func = turtle.forward; &amp;nbsp; }, -- [f]orward&lt;/div&gt;
&lt;div&gt;&amp;nbsp; b = { paraCnt = 0, func = turtle.back; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [b]ack&lt;/div&gt;
&lt;div&gt;&amp;nbsp; l = { paraCnt = 0, func = turtle.turnLeft; &amp;nbsp;}, -- turn [l]eft&lt;/div&gt;
&lt;div&gt;&amp;nbsp; r = { paraCnt = 0, func = turtle.turnRight; }, -- turn [r]ight&lt;/div&gt;
&lt;div&gt;&amp;nbsp; u = { paraCnt = 0, func = turtle.Up; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [u]p&lt;/div&gt;
&lt;div&gt;&amp;nbsp; d = { paraCnt = 0, func = turtle.Down; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [d]own&lt;/div&gt;
&lt;div&gt;&amp;nbsp; s = { paraCnt = 1, func = turtle.select; &amp;nbsp; &amp;nbsp;}, -- [s]elect&lt;/div&gt;
&lt;div&gt;&amp;nbsp; p = { paraCnt = 1, func = myPlace; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [p]lace&lt;/div&gt;
&lt;div&gt;&amp;nbsp; t = { paraCnt = 2, func = myThrow; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [t]hrow = drop&lt;/div&gt;
&lt;div&gt;&amp;nbsp; e = { paraCnt = 1, func = myExcavate; &amp;nbsp; &amp;nbsp; &amp;nbsp; }, -- [e]xcavate = dig&lt;/div&gt;
&lt;div&gt;&amp;nbsp; z = { paraCnt = 1, func = myZzz; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}, -- [z]zz = sleep&lt;/div&gt;
&lt;div&gt;&amp;nbsp; o = { paraCnt = 2, func = myOutput; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }, -- set [o]utput (redstone)&amp;nbsp;&lt;/div&gt;
&lt;div&gt;};&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function getParam(command, idx)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local buff = &quot;&quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local ch = &quot;&quot;;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; for i = idx, command:len() do&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; ch = command:sub(i, i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot;getParam i = &quot; .. i .. &quot; / ch =[&quot; .. ch .. &quot;]&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; if ch == &quot;,&quot; then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if buff == &quot;&quot; then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return nil, i + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return tonumber(buff), i + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; elseif nil ~= string.find(&quot;0123456789&quot;, ch, 1, true) then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; buff = buff .. ch;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if buff ~= &quot;&quot; then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return tonumber(buff), i;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if buff == &quot;&quot; then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return nil, command:len() + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return tonumber(buff), command:len() + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function get1Cmd(command, idx)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local cmd = string.sub(command, idx, idx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local para1, para2, nextIdx, paraCnt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; --log(idx .. &quot; / &quot; .. cmd);&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if nil ~= cmdInfo[cmd] then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; paraCnt = cmdInfo[cmd].paraCnt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot;unknown command [&quot; .. cmd .. &quot;]&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; error(&quot;unknown command [&quot; .. cmd .. &quot;]&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; if -1 == paraCnt then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return nil, nil, nil, idx + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif paraCnt == 0 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return cmd, nil, nil, idx + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif paraCnt == 1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; para1, nextIdx = getParam(command, idx + 1);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return cmd, para1, nil, nextIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; elseif paraCnt == 2 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; para1, nextIdx = getParam(command, idx + 1);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; para2, nextIdx = getParam(command, nextIdx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; return cmd, para1, para2, nextIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local function checkLoop(command)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local kBgn = {&quot;&quot;};&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local loopInfo = {};&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local ch, repeatCnt, nextIdx, kBgnIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; for i = 1, command:len() do&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; ch = command:sub(i, i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; if &quot;(&quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; table.insert(kBgn, i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; elseif &quot;)&quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; repeatCnt, nextIdx = getParam(command, i + 1);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; loopInfo[i] = { beginIdx &amp;nbsp; = table.remove(kBgn),&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; endIdx &amp;nbsp; &amp;nbsp; = i,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nextIdx &amp;nbsp; &amp;nbsp;= nextIdx,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; repeatCnt &amp;nbsp;= repeatCnt,&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentCnt = 0 };&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot;loopInfo[&quot; .. i .. &quot;]&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;beginIdx &amp;nbsp; = &quot; .. loopInfo[i].beginIdx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;endIdx &amp;nbsp; &amp;nbsp; = &quot; .. loopInfo[i].endIdx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;nextIdx &amp;nbsp; &amp;nbsp;= &quot; .. loopInfo[i].nextIdx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;repeatCnt &amp;nbsp;= &quot; .. loopInfo[i].repeatCnt);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;currentCnt = &quot; .. loopInfo[i].currentCnt);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; i = nextIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; return loopInfo;&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;function doCommand(command)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&amp;nbsp; command = command .. &quot; &quot;;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local loopInfo = checkLoop(command);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; --for i, dat in pairs(loopInfo) do&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot;check loopInfo&quot;)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;i = &quot; .. i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;&quot; .. dat.beginIdx .. &quot; / &quot; .. dat.endIdx .. &quot; / &quot; .. dat.repeatCnt);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; --end&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local cmd, para1, para2, nextIdx, ch;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; local i = 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; while true do&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; ch = command:sub(i, i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; --log(&quot;doCommand idx = &quot; .. i .. &quot; [&quot; .. ch .. &quot;]&quot;);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; if &quot;)&quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot;i = &quot; .. i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log( &amp;nbsp; loopInfo[i].beginIdx .. &quot; / &quot; .. loopInfo[i].endIdx .. &quot; / &quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -- &amp;nbsp; &amp;nbsp;.. loopInfo[i].nextIdx &amp;nbsp;.. &quot; / &quot; .. loopInfo[i].repeatCnt);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; loopInfo[i].currentCnt = loopInfo[i].currentCnt + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if loopInfo[i].repeatCnt &amp;lt;= loopInfo[i].currentCnt then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loopInfo[i].currentCnt = 0;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = loopInfo[i].nextIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; i = loopInfo[i].beginIdx;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; elseif &quot; &quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; i = i + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; elseif &quot;\n&quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; i = i + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; elseif &quot;(&quot; == ch then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; i = i + 1;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; else&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cmd, para1, para2, nextIdx = get1Cmd(command, i);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --log(&quot; &amp;nbsp;nextIdx = &quot; .. nextIdx);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; i = nextIdx;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if cmd ~= nil then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cmdInfo[cmd].func(para1, para2);&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; if command:len() &amp;lt;= i then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; break;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; end&lt;/div&gt;
&lt;div&gt;&amp;nbsp; end&lt;/div&gt;
&lt;div&gt;end&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;div&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;archer3&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;dofile(&quot;lib_turtle_0.2.0&quot;);&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local NUM_SHOT = 3;&lt;/div&gt;
&lt;div&gt;local NUM_STEP = 4;&lt;/div&gt;
&lt;div&gt;local SHOT_WAIT = 0.2 * 1000;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;local cmd =&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;ll&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n(&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp;s2 p0 s3 t0,&quot; .. NUM_SHOT&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp;(&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp; &amp;nbsp;o0,1&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp; &amp;nbsp;z&quot; .. SHOT_WAIT&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp; &amp;nbsp;o0,0&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp; &amp;nbsp;z&quot; .. SHOT_WAIT&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp;)&quot; .. NUM_SHOT&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n &amp;nbsp;s2 e0 (b)4&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; .. &quot;\n)&quot; .. NUM_STEP;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;print(&quot;cmd:&quot; .. cmd);&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;doCommand(cmd);&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</description> 
      <link>https://cct.blog.shinobi.jp/%E6%9C%AA%E9%81%B8%E6%8A%9E/archer3</link> 
    </item>

  </channel>
</rss>