ラベル OpenComputers の投稿を表示しています。 すべての投稿を表示
ラベル OpenComputers の投稿を表示しています。 すべての投稿を表示

2018年4月26日木曜日

【OpenComputers】OpenOS基礎知識

この記事はLinux未経験者を対象としています。
経験者は適宜読み飛ばしてください。

さて、OpenOSはLinuxライクに作られています。
そのため、Linux経験者には簡単に理解できることが、未経験者には全くわからないということがしばしば発生します。
また、Linuxライクとはいえ、Linuxとは少し異なる部分もあります。
今回は、そんな方々のために、これだけ理解しておけばとりあえずプログラムを実行させることができる、というようなレベルの解説をやっていきたいと思います。

ファイルシステム

Linuxでは、フォルダのことをディレクトリと呼びます。
ディレクトリのそれぞれの位置を表すものを「パス」と呼び、現在の参照フォルダを基準として位置を表すパスを「相対パス」、参照フォルダに関係なく一意に位置を表すパスを「絶対パス」と呼びます。
例えば、homeディレクトリの中の、programフォルダにあるhelloworld.luaというファイルの絶対パスは、「/home/program/helloworld.lua」と表されます。
もし、あなたが今homeディレクトリにいるのならば、相対パスでは、「./program/helloworld.lua」(正式)もしくは「program/helloworld.lua」(略式)と表されます。
(「./」は、現在の参照ディレクトリを表す。ちなみに、「../」は現在の参照ディレクトリの1つ上の階層のフォルダを表す。)

それでは、ファイル全体の構造について説明していきましょう。
最も上位のディレクトリ(すべてのディレクトリを含むディレクトリ)を、「ルートディレクトリ」と呼びれ、「/」というパスで表されます。
OpenOSでは、ルートディレクトリの下にbin,boot,etc,home,lib,mnt,usrの7つのディレクトリとinit.luaというファイルが初期状態であります。

bin(/bin)

コマンドの処理が書かれたプログラムが保存されています。たぶん、binaryが語源。

boot(/boot)

起動時の処理が書かれたプログラムが保存されています。

dev(/dev)

windwosユーザーにとって一番理解しがたいディレクトリ(だと個人的には思います)
普段使ってる分には、あまり関係のないディレクトリなので、読み飛ばして構いません。
「デバイスファイル」というファイルが保存されています。
そもそもはlinuxの、周辺機器をファイルと同様に扱おうという設計思想から来ています。
このファイルに書き込むことでそのデバイスにデータを送信できたり、逆にこのファイルを読み込むことでデータを受信したりできます。

etc(/etc)

様々な設定ファイルが保存されています。
ここを書き換えると、そのコンピューターの設定が変わります。(windowsでいうコントロールパネルみたいなもの)

home(/home)

ユーザーのファイルを保存しておくところです。
computer起動時に、プロンプト(コマンド入力画面)が最初に参照しているのはこのディレクトリです。

lib(/lib)

様々なライブラリが保存されています。
luaのrequireの一部はたぶんここを参照しているんだと思います。

mnt(/mnt)

HDDやフロッピーといった、ファイルシステムがこのディレクトリに属します。
windowsでいう「コンピューター」フォルダみたいなイメージです。(内部に様々なドライブが配置されていますよね)

tmp

一時的なファイルの保存場所です。
再起動すると中のデータが全部消えます。
ディレクトリ名は、temporaryから来ています。

コマンド

コマンドは、プロンプト(コマンド入力受付)画面で入力することで使用可能です。
プロンプトの、「#」より前は、現在参照中のディレクトリのパスを表しています。
linuxのコマンドは、「コマンド コマンドに渡す引数 --オプション(-オプションの頭文字)」という風に使用されます。(オプションを付けるかどうかは任意。各ワードの間は半角スペース。)
各コマンドは、「--help(もしくは-h)」オプションを持っており、このオプションを指定して実行すると、そのコマンドに関するヘルプを参照できます。

「ls」:現在参照中のディレクトリの中にあるファイル一覧を表示します。
「cd (パス)」:指定されたパスへと移動します。
「mkdir (フォルダ名)」:指定された名前のフォルダを作成します。
「edit (ファイルのパス)」:指定されたファイルを編集します。
「(ファイルのパス)」:指定されたファイルを実行します。
「shutdown」:シャットダウンします。
「reboot」:再起動します。
「mount」:HDDなどをマウントする(HDDやフロッピーといった外部ドライブをファイルシステムに組み込んで利用可能な状態にすること)際のコマンドです。複雑なので-hを確認してください。
「label (UUID) (名前)」:指定されたUUIDのコンポーネントに名前を付けます。UUIDは他と区別できる長さまで書けば問題ありません。(たいていは3文字か4文字)
「lua」:対話モード。https://moker-minecraft.blogspot.jp/2018/04/opencomputerslua.html
「flash (ファイルのパス)」:指定されたファイル(luaプログラム)をEEPROMに書き込みます。

ショートカット

Ctrl+D:入力待機画面中に押すことで、プログラムを終了させることができます。
Ctrl+Alt+C:実行中のプログラムを強制終了させることができます。


思いついたことはだいたい書きましたが、書き残しがあったらあとで追記します。

<参考>

【OpenComputers】対話モード(luaコマンド)の使い方

皆さん、対話モードというのをご存知でしょうか?
一行ずつ入力されたコマンドを実行していくというモードです。

スクリプト言語と呼ばれる言語のIDEにはほとんど実装されているこの機能ですが、LuaベースのOpenComputersにも実は実装されています。
検証作業に、大変便利なので覚えておくととても便利です。

起動するには、OpenComputersの入力受付(プロンプト)画面で、「lua」と入力してください。
これで、対話モードに入りました。
試しに「print("Hello World")」と入力してみてください。
「Hello World」と表示されると思います。

それでは、基本的な使い方を紹介していきましょう。

「=(変数)」というコマンドを打つと、変数の中身が表示されます。
たとえば、=computer.energy() と打つと、コンピューターが属するネットワーク内のエネルギー残量を調べることができます。

対話モードを終了するには、Ctrl+Dを押してください。
また、Ctrl+Alt+Cを押すと、たとえos.sleep()中でも、プログラムを強制終了することができます。

さて、解説は以上です。
良きOCライフを!

【OpenComputers】外部エディタの利用法

(a)コピー&ペーストする

まず、エディタで書いた内容をコピーしましょう。
あとは、editコマンドで編集モードを開いて、insertキーでクリップボードの内容を貼り付けるだけです。
なお、コピーできるのは最大1024文字だという情報があります。
https://oc.cil.li/index.php?/topic/1113-is-there-a-way-to-use-an-external-text-editor-to-edit-programs/

(b)ファイルを直接編集する

(最初は読み飛ばしても大丈夫です)
opencomputersにはeditコマンドを含め、ファイルを作成する/編集するコマンドが多数存在しています。
ただし、このコマンドの実行結果は即座に実際の.minecraft内のsaveファイルに反映されるわけではなく、一時的にメモリ内にバッファーされ、ワールドのセーブ(リログ)が入るたびに実際のsaveファイル内に書き込まれ、読み込まれるのです。
このような仕様になっているのは、クラッシュ発生時でもコンピューターの状態とファイルの状態を一致させるためだそうです。
例えば、セーブしてから少し時間がたって、ゲームがクラッシュした場合を考えてみましょう。
ロボットやコンピューターはセーブした時点での状態から、次回起動時に再開するわけです。
ここで、もし、ファイルが逐次保存される設定になっていると、クラッシュ直前のファイル状態が再現されてしまうことになります。
これでは、プログラム上、バグが発生する恐れがあります。
なお、この設定はconfig内の「bufferChanges」の項目で変更することが可能です。
(ただし、変更することで上記のようなトラブルが起きる可能性もあります。)

さて、前置きが長くなってしまいました。
とにかく、実際のsaveファイルからファイルが読み込まれるのは、ワールドにリログがかかったときのみなのです。
この前提を抑えたうえで、手順を説明していきましょう。

まず、先にコンピューター/ロボットなどの電源を落としておきます。

次に、ファイルをwindowsのフォルダに書き込みます。
フォルダのアドレスは、.minecraft/saves/(ワールド名)/opencomputers/(HDDのUUID)/home/です。
UUIDとは、opencomputersのコンポーネント類すべてに割り振られる、かぶることのないアドレスです。アルファベットと数字の羅列で構成されています。HDDのアイテムにマウスカーソルをかざすと、アイテム説明欄(ツールチップ)の左下にHDDのUUIDが表示されます。ロボットなどHDDを組み込むタイプの機械では、lua対話モードで、「=component.filesystem.address」と入力すると表示されます
また、(HDDのUUID)以下は、linuxに似たディレクトリ構造になっています。気になった方は調べてみてください。

最後に、OCとファイルの同期をかけます。
おそらく、最も簡単な方法は、HDDを取り外して、再挿入した上で、もう一度起動するというやり方だと思います。

さて、うまくいっているでしょうか?
lsコマンド、editコマンドなどで確かめてみてください。
まれに、opencomputersのキャッシュされたデータが、windowsファイルの方を上書きするということもありますので、注意して下さいね。


2018年3月13日火曜日

【OpenComputers】1.7.2リリースノート

<注意>
この記事は、公式のリリースノートの一部を勝手に翻訳したものです。
情報はあくまで自己責任で利用してください。
間違い等あれば指摘お願いします。未翻訳部分の協力大歓迎です。コメントください。

原文:https://github.com/MightyPirates/OpenComputers/releases/tag/v1.7.2

新機能・サポート

  • 追加:羊発電機(とオセロット発電機)
    • Carpeted Capacitorが追加されました。通常のcapcaitorと同様の動作をします。
    • 羊やオセロットがCarpeted Capacitorの上を歩くと、電力が発生します。
    • いずれかの動物が少なくとも2匹存在しなければ、発電は行われません。すなわち、羊一匹と猫一匹がCarpeted Capacitor上に居ても、一切発電されません。
    • オセロットは羊よりも多くの電気を発電します。
    • このブロックの追加により、IC2などのエネルギー系MODを追加したり、configを変更したりしなくとも、OCを楽しめるようになりました。
    • Insert interesting reference mentioning electric sheep here
  • 変更:新しくクラフトされたCPUのデフォルトアーキテクチャはLua5.3となります。
    • このアップデート以前にクラフトされたCPUのデフォルトアーキテクチャは、変更されません。
  • 追加:Tier1 Wireless Network Card (TheCodex6824)
    • 同時に1つのポートしか開くことができません。
    • 信号到達範囲は16ブロックです。
    • 既存のWireless network cardはTier2 cardとして扱われます。(性能に変化はありません。)
  • 追加:Creative Component Bus (Xyxen)
    • 1024個のcomponentを扱えます。
  • 追加:computerからrobotの名前を変更できるようになりました。
    • robotsに関数setNameとgetNameが追加されました。
    • robotに接続されたcomputerは、robotをcomponentのように扱うことで、これらの関数を呼び出すことができます。
    • このとき、robotは事前にシャットダウンさせておかなければなりません。
  • 修正:画面に表示される特定の文字、絵文字の幅
  • 修正:特定の状況において、インベントリ付きのブロックがセーブできない現象
  • 修正:droneに載せてあるchunkloader upgradeが正常に動作しない問題(TheCodex6824)
  • 修正:AppliedEnergistics2対応
    • getItemsInNetwork()、getCpus()、exportIntoSlot()におけるバグ
    • item dataにisCraftableを追加
  • 修正:computer.addUserが正しくエラーを吐くように
  • 修正:cable collision boxの形がよりケーブルに近くなりました。 (SquidDev)
  • 修正:Crafting Upgradeが誤ったものをクラフトしてしまう問題
  • 修正:Crafting Upgradeがアイテムをクラフト不能にしてしまう問題
  • 修正:Motion Sensor
  • 修正:IC2の液体セルなど、インベントリを直接変更してくるアイテムへのロボットの対応
  • 修正:ネットワーク関連におけるメモリーリーク
  • 修正:MC1.10以上において、Debug CardのgetMetadataを修正 (BrisingrAerowing)
  • 追加:MC1.10以上において、Debug CardにgetBlockStateを追加 (BrisingrAerowing)
  • 修正:MC1.12において、EEPROMを搭載したrobotやdroneがクラフトできなかった問題を修正
  • 修正:MC1.7.10において、Inventory Controller UpgradeとTransposerにgetAllStacks()が逆輸入されました
  • 言語:フランス語翻訳をアップデート (Naheulf)

OpenOS関連

  • 修正:install.lua はより期待通りの動作をするようになった。
  • 変更:uuid.luaはRFC4122 version 4のUUIDを生成するようになった。 (jobe1986)
  • 修正:vt100サポートのための様々な修正
  • 修正:メモリーリーク問題
  • 修正:Made modifier keypresses more specific in /bin/edit

貢献者一覧

payonel, Vexatos, Xyxen, TheCodex6824, SquidDev, BrisingrAerowing, jobe1986,
Naheulf, SDPhantom, Zerotiger, anar4732

2017年12月21日木曜日

【OpenComputers】1.7.1リリースノート

<注意>
この記事は、公式のリリースノートの一部を勝手に翻訳したものです。
情報はあくまで自己責任で利用してください。
間違い等あれば指摘お願いします。未翻訳部分の協力大歓迎です。コメントください。

原文:https://github.com/MightyPirates/OpenComputers/releases/tag/v1.7.1


新機能、サポート、バグ修正

  • 変更:diamond chipのレシピ - cutting wireが必要になった
  • 追加:extracellsとmekanismへ対応(1.10.2)
  • 追加:ComputerCraftへと再対応(1.12.2)
  • 修正:タブレット内のdiskdriveやその他のコンテナへのアクセス(1.11.2)
  • 修正:putting items into database upgrades (1.11.2)
  • 修正:旧I2Cmodとの互換性
  • 追加:tabletのcomponentを使ってプレイヤーの向きの取得が可能に(ChristCoder)
  • 修正:MicrocontrollerとEnderIOのアイテムコンジットとの相性
  • 追加:modemのdevice infoに最大パケットの情報が表示されるように
  • 修正:chunkloaderアップグレードとdroneの相性を改善
  • 修正:tabletが適切に自身の画面を適切にシャットダウンできるように
  • 修正:motion sensorの視野
  • その他:翻訳をアップデート
    • ロシア語(S0ZDATEL, Fingercomp, makkarpov)
    • 繁体字(mymagadsl)
    • ドイツ語(Nex4rius)

OpenOSに関するバグ修正、アップデート

  • 修正:きわめて遅いサーバーでopenosを起動する際に発生する問題
  • 追加:custom error objectをstderrに表示できるように
  • 追加:マウントポイントで既存のディレクトリを扱えるように(?)
  • 追加:あるディレクトリを別のディレクトリとしてマウントできるように
  • 修正:.shrcがtty stdinを扱えるように
  • 追加:Lua REPLの入力は暗黙の改行によりパースされるように
    • Adding a = in front of the code to explicitly add it still works.
  • 変更:shellの履歴においてまったく同じ項目は追加されなくなった(同じコマンドを複数回実行しても一回しか履歴に残らないようになった?)
  • 修正:IRCクライアントにおけるCTCPメッセージ(Michiyo, skyem123)
  • 修正:keyboard APIにおけるキーの逆引き
  • 修正:event.cancelとevent.ignore
  • 修正:連続したOOMの失敗からlua shellを保護
  • 修正:/bin/treeの実行時にエラーが発生せずに長時間経過するバグ(LeshaInc)
  • その他:vt100ライブラリの改善
  • その他:メモリー使用量削減のためのたくさんの小さな改善

貢献者一覧

payonel, Vexatos, S0ZDATEL, Fingercomp, makkarpov, mymagadsl, Nex4rius, ChristoCoder, DrummerMC, LeshaInc, SquidDev, Michiyo, josephcsible, skyem123, TheCodex6824, AmandaCameron, Pwootage

2017年10月31日火曜日

【OpenComputers】Robotを作ってみよう

検証環境
 MC1.10.2/OC1.7.0.124

レシピは公式wiki、またはJust Enough Itemsなどのレシピmodをご確認ください。
今回はエネルギーを無効にした状態で検証しているため、エネルギー関係はすべて未検証です。間違いがあれば教えてください。


Robotの特徴

充電中のロボット
工業化Mod導入環境では、充電が必要になります。
充電するには、レッドストーン入力を与えられたChargerの近くに設置してください。(レッドストーン信号の強度により充電速度が変わります)

また、ワールドに設置してある外部コンポーネント(ブロック型のコンポーネント)にはアクセスできないという点に注意が必要です。(もし外部コンポーネントの機能を使いたいならば、組み立て時に内部に組み込む必要があります。)

Robotの組み立て

Robotを組み立てるには、Assemblerを使います。
(Assemblerはほかにも、DroneやMicrocontrollerなどの組み立てに用います。)

まずは、Assemblerの左上のスロットにComputer Caseをセットしましょう。
今回はTier1のComputer Caseを使います。

さてComputer Caseをセットすると、パーツをセットするためのスペースが表示されます。ここにパーツをセットして左下の三角ボタンをクリックすることでRobotを作成することができます。(工業mod導入環境ではAssemblerに対してエネルギーの入力が必要です。)
AssemblerのGUI

各CaseにはComplexityと呼ばれる値が設定されており、パーツのComplexityの合計はその上限以下でなければなりません。(上限を超えるとComplexityが赤く表示されます。)



さて、右側はコンピューターと同じなので詳細は割愛しますが、次のような点を述べておきます。

  • HDDは原則として一度組み立てたら取り外しできません。先にOpenOSをHDDに書き込んでおくことをおすすめします。
  • EEPROMは、Robotとクラフトすることで、組み立て後でも交換が可能です。
  • また、EEPROMは空のものと書き込み済みのものを一緒にクラフトすることで、複製することが可能です。おそらく、LuaBIOSのEEPROMは持っているでしょうから、それを複製して、Robotの組み立てに使用するといいでしょう。
  • Screenを使用するには、graphics cardが必要です。


左上のスペースは、組み立て後にアイテム欄を占有しないパーツ、左下は占有するパーツ(diskdriveやアップグレード・カードのコンテナーなど)に用います。
次の点に注意が必要です。

  • keyboardがないと、入力ができません。
  • screenがないと、画面が表示されません。
  • Inventory Upgradeがないと、インベントリがなくなります。また、4つまで重複して効果を発揮します。(1つで16スロット、4つでは64スロットのインベントリ)

さて、基礎的なRobotにおすすめのパーツは次のような感じです。

  • CPU Tier1
  • Memory Tier1(もしくは1.5) x2
  • EEPROM(Lua BIOS)
  • OpenOSをinstall済みのhard disk drive Tier1
  • Graphics Card Tier1
  • Screen
  • Keyboard
  • Inventory Upgrade

ちなみに、作ったロボットはdisassemblerで分解することができます。
(disassemblerではパーツも分解することができます)
ただし、5%の確率でパーツが消失します。(平均的には95%の素材しか返ってきません)

【OpenComputers】Not Enough Energy問題

うちの環境もとうとうOC1.7にアップデートしたんですが、その途端に、工業化mod非導入環境にもかかわらず、ロボットやコンピューターがエネルギーを要求し始めました。

うちの環境は次の通りです。

  • Minecraft 1.10.2
  • Forge 12.18.3.2185
  • OpenComputers 1.7.0.124
  • Just Enough Items 3.14.7.420

うちの環境だけがバグってる可能性もあるので、何とも言えないところがあるので、情報募集中です。

で、原因なんですが、たぶんForge energyへの対応なんではないかと思います。
実際、この機能のプルリク上でその問題が提示されてます。(https://github.com/MightyPirates/OpenComputers/pull/2369
ただ、もし実際そうだとすれば、ほかに一切公式からの情報がないのは変なような気もするんですよね…
だとすれば、やっぱりうちの環境だけの問題なんでしょうか…?

で、解決法なんですが、OpenComputersの設定ファイル(settings.conf)のignorePowerの項をfalseからtrueに変更すれば治りました。(当然ですが)

もし同じ状況で悩んでる方いれば参考にしてください。
(工業化modを導入せずにOpenComputersを使っている奇特な人間がどれだけいるかは謎ですが)


やり方詳細解説

まずは、configファイルのバックアップをとりましょう。
configファイルは.minecraft/config/OpenComputers.cfgです。(.minecraftフォルダ内の、configというフォルダの中のOpenComputers.cfgというファイルです。)
どこか適当な場所へ(ex:デスクトップ)コピーしておいてください。
それでは、編集に移ります。
メモ帳を立ち上げてください。
立ち上がったら、メモ帳の画面に、先ほどのconfigファイルをドラッグ&ドロップしてください。
configファイルが表示されると思います。
CtrlとFキーを同時に押してください。
すると、検索画面が出てくるので、「ignorePower」と入力して、「次を検索」をクリックしてください。
そうすると「ignorePower=false」と書かれた部分があると思います。
これを「ignorePower=true」に書き換えてください。
書き換えが完了したら、CtrlとSキーを同時に押して上書き保存してください。

これで、完了です。
minecraftを起動して、設定が無事変わってるか確認してください。
お疲れさまでした。


--2018/04/23 一部追記--

2017年10月30日月曜日

【OpenComputers】1.7リリースノート

<注意>
この記事は、公式のリリースノートの一部を勝手に翻訳したものです。
情報はあくまで自己責任で利用してください。
間違い等あれば指摘お願いします。未翻訳部分の協力大歓迎です。コメントください。
基本的にはバグフィックスなどは訳しません。

原文はこちら

Version 1.7.0 - Herman Toothrot

新機能・サポート

  • MC1.11および1.12に対応
  • OpenoS threadライブラリを追加
  • Forgeのエネルギーに対応
  • ComputerCraftに再対応
  • Project:Redに再対応
  • WR-CBEに再対応(gamax92に感謝)
  • IC2に再対応
  • Waila/Hwylaに再対応
  • Motion Sensor はアップグレードパーツになった
  • 液体タンクプロパティ用の変換機を追加
  • zh_CN と ru_RU 言語に対応
  • AE2に再対応(Leonに感謝)

OpenOSの修正・改良

  • 大幅のコードの整理
  • 使用メモリー量の削減(shell promptの起動には現在では140kbほどが必要です)
  • 劇的な起動時間の短縮
  • /bin/ls fix for -p option to show / on dirs
  • /lib/eventを修正し、タイマーに対してsignalを発火できるように
  • /lib/keyboardの使用メモリー量を削減し、ターミナルにおけるnumpadへの対応を修正
  • 相対パスを利用できるようにloadfileを修正
  • core ttyのコードを/lib/termから分離し、vt100に対応
  • ENV and _G fixes for load, lua shell, and shell environment
  • edge case in quoted whitespace in shell commands respected
  • mv and cp error message conformance and cleanup
  • install tool fixes
  • fix exit code issues with ls and piping
  • pastebinをアップデートしてhttpsに対応
  • シリアル化のパフォーマンスを劇的に改善
  • lsのカラーは、LS_COLORSにおいてvt100のカラーコードを使用して指定する
  • あらたなファイル一覧表示プログラム:/bin/tree(Leshalncに感謝)

その他の修正・改善

  • 鉄ナゲットを削除(現在ではバニラに追加されているため)
  • scalaの整理、APIのリファクタリング
  • より良いインベントリ管理のために、Transposerとinventory controllerにgetAllStacksとgetInventoryNameを追加(thiakilに感謝)
  • Robotの名前を追加(Nexariusに感謝)
  • ドラッグなしでもマウスのクリックを離すだけでdropイベントが発生するように
  • 複数のタンクを内包するブロックとのtank controllerの相性を改善
  • 修正:filesystem.copy()(#2432)(SDPhantomに感謝)
  • Fixed: Make wtrunc count missing glyphs as 1 (thanks gamax92)
  • Fixed: Infinite loop in manual.
  • ロボットがすべてのアイテムを適切に扱えてはいなかった問題を修正
  • Fixed: case where computers could run minecraft host machine cpu too high
  • getAllStacks().getALL()で返されるテーブルが0スタートになってた問題を修正
  • 道具スロットの動作を改善
  • Fixed: bounding box issues that affect things like waypoints

2017年8月24日木曜日

【OpenComputers】Component(構成パーツ)のAPIを利用する方法

※これは、公式Wikiのページ(http://ocdoc.cil.li/component:component_access)を翻訳し、一部補足を加えたたものです。(2017/08/24)
Component APIの一覧は、http://ocdoc.cil.li/api:componentを参照してください。
以下、※はおもに訳注を表します。

<本文>
このページでは、Component(構成パーツ)のAPIをLua内で利用する方法を説明しています。おさらい:Componentとは、接続されたコンピューターで実行されているLuaプログラムにたいして、何らかのAPIを提供する、ブロックやアイテムのことを指します。

(※Computer APIやRobot APIなどはここでいう構成パーツには含まれないと思われます。これらを利用するには、require("xxx")を用いてください。)

アドレス

Componentには、それぞれアドレスが設定されています。このアドレスはUUID、すなわちほかの機器とかぶることのない、オンリーワンなものです。多くの場合、アドレスは短縮表記することが可能です。(※つまり、同一コンピューターに接続されたものの中でかぶらなければ、先頭の数文字のみで元のアドレスと同等の意味を持ちます。イメージはかるたの決まり字のようなものです。)たとえば、短縮表記されたアドレスから、元のアドレスを取得するには、component.get()を用います。特定のブロックのアドレスを調べるには、Ctrlキーを押しながら、Analyzerをもって右クリックしてください。

コンピューターに接続されたComponentの一覧を取得するには、次の通り実行してください。http://ocdoc.cil.li/_export/code/component:component_access?codeblock=0

アイテムは、通常、コンピューターから取り外されたあとでもアドレスを保持します。よって、Hard Driveを一度取り外し再び挿入してもアドレスは変化しません。ただし、これは、ブロックには適用されません。ブロックは破壊し、再度設置すると、毎回新たなアドレスへと変化します。

プライマリーコンポーネント

1種類につき1つのComponentが、プライマリーコンポーネントとして登録されます。もし同種類のコンポーネントが複数ある場合は、プライマリーコンポーネントはランダムに決まります。プライマリーコンポーネントにアクセスするには、component.xxx(xxxにはComponentの種類をいれてください)を用います。
たとえば:http://ocdoc.cil.li/_export/code/component:component_access?codeblock=1

なお、かわりに、component.getPrimary("xxx")を用いることもできます。(※component.xxxはcomponent.getPrimary("xxx")のシンタックスシュガーです。)
もし、プライマリーコンポーネントが存在しない場合(指定された種類のComponentが一つも接続されていない場合)、これはエラーを返すことに注意してください。先に、component.isAvailable("xxx")を用いて、確認することをお勧めします。

プロキシ

さて、Componentのアドレスの取得方法はわかりましたから、次は、Componentの利用方法について学びましょう。これには、2通りの方法があります。第一に、component.invoke(address, method, ...)を呼び出す方法です。たとえば、http://ocdoc.cil.li/_export/code/component:component_access?codeblock=2

しかし、推奨されている方法は、もう一つの方法、プロキシを取得する方法です。プロキシは、簡単に言えば、API callbackごとに一つの関数を提供するテーブルです。(※この文は原文が理解できませんでした。おそらく、プロキシは関数のテーブルである、という意味だと推測します。)加えて、それぞれのプロキシは2つの要素変数をもちます。addressとtypeです。プロキシは次のように、取得することができます。http://ocdoc.cil.li/_export/code/component:component_access?codeblock=3

component.getPrimaryやcomponent.xxxは実際にはこのプロキシを取得する関数です。


(※以下は、個人的には知らなくてもあまり困らない情報だと思います)

Direct Calls

一部のcomponentのcallbackはdirect callsとして実行されます。Direct Callsはコンピューターのworkerスレッド内で実行されるため、素早く応答します。通常の呼出しでは、競合やその他のスレッドの問題が起こるのを避けるため、メインのサーバースレッドにおいて実行されます。この場合、1tick(50ms)を必要とします。ただしこれはComponent APIのみに適用されることに注意してください。

Signals

componentを利用する際に重要なものに、Signals(原文)があります。これは、componentが外部環境の変化やイベントをコンピューターに知らせるために送るものです。たとえば、ユーザーによる入力はsignalsを利用してcomputerに伝えられます。コンピューターは、自身のsignalsを送ることもできます。これは、コードの再利用やコード内の別の部分に対して非同期的に情報を送るのに役に立つことがあります。

2017年8月16日水曜日

【OpenComputers】ケーブルの染色について

<環境>
Minecraft : 1.10.2
Forge : 12.18.3.2185
OpenComputers : 1.6.2.7

まずケーブルのレシピは次の通り


1.6からケーブルの染色が可能になった。
染色すると別の色のケーブルとは接続しなくなる(ただし、無色のケーブルとは接続する)


染色するには、次の2通りの方法がある。

  1. ケーブルと染料をクラフトする
  2. 染料を手にもってケーブルを右クリック

また、脱色するには次の2通りの方法がある。

  1. 水バケツとクラフトする(水は消費されるが、バケツは消費されない)
  2. 薄灰色の染料で染色する(なぜか、アイテム欄ではdyed=染色済みと表記されるが、挙動は無色のものと同じだと思われる)

2017年8月9日水曜日

【OpenComputers】1.6リリースノート

<注意>
この記事は、公式のリリースノートの一部を勝手に翻訳したものです。
情報はあくまで自己責任で利用してください。
間違い等あれば指摘お願いします。未翻訳部分の協力大歓迎です。コメントください。
基本的にはバグフィックスなどは訳しません。

原文はこちら
より分かりやすいまとめを後日作る予定です。

<本文>

  • ラックに格納可能なフロッピーディスクドライブを追加
  • inventory controllerを使ってインベントリが操作できるように
  • RotaryCraft powerに対応(AE2と同じ変換効率)
  • GPUがviewport(表示範囲?)を定義できるようになった。これによって、電源がオフになったスクリーンからデータをコピーできるようになった(?)
  • ケーブルが自身の色を記憶(?)するようになった。染料とクラフトすることで染色可能
  • 1.8.9においてIC2へ再対応
  • レンチとクラフトすることで、loot diskが循環するようになった(プログラムが切り替わるようになった?) (レンチは消費されない).
  • Device info APIを追加した。computer.getDeviceInfo()を用いて属性情報を知ることができる。
  • computer.getProgramLocations() APIを用いることで、存在しないプログラムを実行しようとしたときに、役立つ情報を得ることができる(こともある)。
  • Trading upgradeを用いて、村人と貿易できるようにした。
  • カスタムHTTPリクエストヘッダを定義できるようになった.
  • debug.playSoundAt (gamax92).
  • クラフトをリクエストするときにAE2 CPUを特定するためのパラメーターを追加
  • ThaumicEnergisticsに対応
  • Hover bootsを染色することでライトの色を変更できるように
  • サーバーのネットワークアクティビティインジケーターを追加
  • ブラジル系ポルトガル語の翻訳に対応
  • ラックの機能を変更した。サーバー以外のものも格納できるようになった。またより柔軟に接続できるようになった(?)
  • ラックに搭載可能な新型のRemote Terminal Serverが導入され、Remote Terminalはそちらに紐づけられるようになった。
  • フロッピーが挿入されているか確認したり、フロッピーを排出(取出)したりするComponentをDisk Driveに追加した。
  • 今までGeolyzerのスキャン範囲は円のみだったが、任意の立方体範囲も利用可能になった。ただし、合計の体積は円の体積を超えてはならない。
  • いくつかのレシピを変更した。高ティアにおいてダイアモンドの消費が急激に増えることを防ぐため、diamond shardsやchipsを導入した。
  • より読みやすいunsciiというフォントをスクリーンに導入した。もし気に入らない場合は、リソースパックを用いて古いフォントを復活させることができる。
  • OpenOS got a major overhaul, in particular term related things, and また、いくつかのビルトインプログラムが追加された。 This would deserve a changelog of its own, really...
  • Added sided version of block drivers, deprecated non-sided one
  • Processors/Memory may now define a provided call budget.
  • スキャンエリアの自由化に伴い、Geolyzerがイベントにかかわるようになった。

2017年4月11日火曜日

【OpenComputers】Computerをつくってみよう

OpenComputersで最も基本になるのが、Computerです。
OpenComputersになれるためにも、ぜひとも、作ってみましょう。
(英語のわかる方には、公式チュートリアルを参照することをお勧めします)
現実世界のデスクトップコンピューターをイメージしながら読むと、わかりやすいかもしれません。
レシピは公式Wikiもしくは、Just Enough Itemsのようなレシピmodで確認してください。

なお、バージョンは、OpenComputers1.6.2.7です。

それでは、説明していきます。

まず、必要となるのが、Computer Caseです。
Computer Caseは4種類あり、内1種はクリエイティブ専用です。
残りの三種にはTier1、Tier2、Tier3と名前がついており、Tierが高くなるほど、より多くのパーツを組み込むことができ、また、よりTierの高いパーツを組み込むことができます。ただし、その分、製作コストはあがります。

今回はTier1のComputer Caseを使っていきましょう。
さて、クラフトしたComputer Caseを適当な場所に設置し、右クリックすると、次のようなGUIが表示されます。

それぞれのスロットにパーツを入れることによって、コンピューターが組みあがっていきます。
なお、それぞれのスロットの背景画像は、入れられるパーツの種類を、右下の数字は、入れられるパーツのTier数の上限を表しています。
たとえば、右上のスロットは、HDD系のTier1までのパーツが入るわけです。

では、パーツの選定を行いましょう。
コンピューターに最低限必要なパーツは次の通りです。
  • CPU
  • メモリ
  • BIOSが書き込まれたEEPROM
  • OSが書き込まれたハードディスクorフロッピー
今回は、次のパーツを使います。
  • EEPROM(Lua BIOS)
  • Graphics Card
  • CPU Tier1
  • Memory Tier1 x2
  • Hard Disc Drive Tier1
Graphics Cardはスクリーンを表示させるために、必要なパーツです。
Memoryは1枚でも動くことは動きますが、2枚あった方がよいでしょう。
また、パーツ一覧中にかいてある、Hard Disc Driveには初期状態では、OSは書き込まれていません。そこで、外付けのディスクドライブを用いて、OS入りのフロッピーをよみこませ、後で、HDDにインストールする、という手段をとります。

さて、それでは周辺機器をつくっていきましょう。
周辺機器は、Computer Caseに隣接して設置するか、Computer Caseとケーブルを介して接続することで、Computerに認識されます。今回は、隣接して設置していきましょう。
今回使用する周辺機器は、次の通りです。
  • Screen
  • Disk Drive
  • Keyboard
スクリーン、ディスクドライブについては説明の必要はないと思います。Computer Caseに隣接して設置してください。(あるいはCableを介しての接続も可)
問題は、Keyboardです。キーボードは設置位置が少し特殊です。スクリーンの上面、側面、底面に設置するか、スクリーンの前に設置してください。


あと一つクラフトしなければならないものがあります。
そうOSの入ったフロッピー(Open OS Floppy Disk)です。
クラフトしたら、DiskDriveを右クリックして、GUI内のスロットにフロッピーを入れてください。

さて、ここまででコンピューターは完成しました。
ただし、buildcraft、ic2、TEなどの工業MODが入ってる場合、コンピューターにエネルギーを供給してやらなければいけません。Computer Caseにエンジンを接続してください。
(入ってない場合は不要です)

電源を早速入れてみましょう。
Computer Caseを右クリックして、GUIを開き、電源ボタンを押してください。
起動すると次のような画面が表示されるはずです。(一部文章が違うことがあります。)
(もし、起動していないようであれば、コメント欄等で教えていただければ幸いです。)

それでは、OSをHDDにインストールしましょう。
まず、「install」コマンドを実行してください。
そうすると、"Install OpenOS?"と表示されて、入力を求められるはずです。
そこでyを入力し、エンターキーを押してください。
そうすると、インストールが始まります。
インストールが完了すると、次のような画面が表示されます。
これが表示されれば、もうOSのフロッピーは必要ありませんから、フロッピーディスクを取り外してかまいません。(もっと言えば、Diskdriveも破壊してかまいません。ちなみに素手で破壊することが可能です。)
"Reboot now?"に対しては、yを入力してください。
再起動が始まります。

これで、コンピューターのセットアップは完了です。

それでは、お疲れさまでした。


エラー対応表

一部のエラーは、analyzerでshift+右クリックで確認できます。

"Not Enough Energy":電力不足。
"no bootable medium":OSが見つからない。OSフロッピー+diskdriveかOSインストール済みのHDDをセットすること。
"no bios found":EEPROM(Lua BIOS)をセットすること。
"No ... is installed in ~":...のパーツが足りません。セットすること。

「うまく起動しない」:analyzerでエラーを確認すること。もしエラーが起きてないのであれば、画面がついてないだけの可能性もある。graphics cardが設置されてるか確認すること。
「起動はするが、入力できない」:キーボードを正しく設置すること。


--2017/08/26 一部追記、変更--
--2018/04/22 一部追記--

2017年4月9日日曜日

OpenComputersについて詳しいHPまとめ

自分用にOpenComputersについて書かれているHPをまとめておきます。
残念なことにまだ日本語サイトはほとんどないですね。

公式
英語の公式HP。ちょっと見づらい。
ただ、ここ以外にほぼ情報ソースがない。
ちなみに、一部のページを除き、パブリックドメイン(=著作権が放棄されている)になっている。

Youtubeのチュートリアル動画
英語のチュートリアル動画。公式なのか、有志なのかは謎(英語ムズカシイ)
探した中で、一番体系的にまとまっててわかりやすかった。

以上、2つのサイトのリンクを貼っておきます。
Mokerでした。