2018年11月21日水曜日

Arduinoでビジュアルプログラミングを試す

どうもMokerです。

ソフトウェア入門界隈ではScratchというのはある種の定番になりつつありますが、Maker界隈では似たようなものを聞かないなということに気づきました。

ということでArduinoのビジュアルプログラミングについてまとめておこうと思います。
今回選んだ基準は次の通り。

  • Blocklyベースであること(次期Scratchのベースらしいので移行が楽そう)
  • Githubに上がってること

という感じで検索かけた結果が次の通り。

  • BlocklyDuino
  • ardublockly
  • Mixly_Arduino
  • Blockly@RDUINO

一つずつ試していきたいと思います。

BlocklyDuino


最終更新日:2017年11月

一番Star数多かったやつです。古いだけあってデザインはとてもシンプル。
うちの環境ではオフライン版でもアップロードがうまくいきませんでした。Pythonのバージョンの問題かもしれません。
欠点としては、digitalwriteのHIGH/LOWに変数を使うことができません。
あとsetupとloopという概念がblockly上では存在しません。
Arduinoのコードとblocklyが並列で表示されないのが個人的にはあまり好きになれませんでした・・・

ardublockly


最終更新日:2018年2月

デザインがめちゃめちゃいいです。wikiとかも充実しててすげー好みです。
ただArduinoとの連携が若干うまくいってないのか、めちゃくちゃupload・verifyに時間かかりました。
個人的にはこれにarduinoのCLI統合して、さらにピン番号を変数で指定できるようになったらもう完成形だと思います。

Mixly_Arduino


オンライン版:なし
最終更新日:2018年11月

blocklyベースなのにオンライン版がないという異色のソフト。めちゃめちゃ展開に時間かかりました。
Microbitとかの開発もできるようです。
中華でちょっと怖さはありますが、ピン数を変数で指定できるなどかなり高度です。
デザインもかなりいい感じで、arduinoとの連携もうまくできそうです。
wikiが中国語しかないのと完全なオープンソースでないのが残念な感じですね・・・

Blockly@RDUINO

オンライン版:なし?
レポジトリ:https://github.com/technologiescollege/Blockly-at-rduino
最終更新日:2018年11月

デザインを見る感じは良さそうなのですが、ブロックが全然表示されません。
しかもreadmeなどがフランス語というおまけつき。結局使い方は全く分からず。


というわけで見てきました。
全部微妙といえなくもない結果ですが、使うとしたらardublocklyでしょうか・・・?
性能だけで見ればおそらくmixlyが一番なのですがね・・・、中華というだけで恐怖が・・・

2018年11月3日土曜日

esp-wroom-02にEsp-Linkを導入する vol.2

前回(その1)はesp-linkの導入法について説明しました。
今回は、実際に使ってみた感想とか書き込んでいこうと思います。

Esp-Linkに接続する

Wifiのアクセスポイント一覧からespを探して接続します。
僕の場合は、前回他のプロジェクトで書き込んだ設定が残っていたらしく、そのAP名とパスワードで接続しました。
さらにespのipアドレスを調べます。
コマンドプロンプトから"ipconfig"を実行しました。

ipアドレスをブラウザのURLに打ち込むと次の画面が出て来るはずです。

Espをインターネットに接続する

このままだとメインPCがインターネットに接続できず、作業上不便なので設定をいじっていきます。
まずはmDNSを有効化します。
まずはトップページのSystem overviewにある"Hostname"を"arduino"へと変更します(これがmDNS名となります。arduinoにしたのは後々ArduinoIDEから扱えるようにするためです)。
次に、mDNSのService名を変更します。ServiceタブのmDNSにある"Enable mDNS"にチェックを入れ、"Service Name"を"arduino"へと変更してください(上と同様にArduinoIDEから扱うためです)。
最後に、espをLANへと接続します。
まずはSTA+APモードに変更。
すると次の画面が出るはずです。WifiのAPを選んでパスワードを入力し、Connectをクリックしました。

ブラウザ上でESPのシリアルを触る

さて、本命の一つであるシリアルの無線化を試してみましょう。
幸い、esp-linkではブラウザ経由でシリアルを書き込めるので、それをやってみようと思います。

まず、ESPから出力されたシリアル信号をパソコン側で受信するために、ESPとPCをUSB-シリアル変換で接続します。
そして、シリアルを送受信できるソフトウェアを立ち上げましょう。

続いて、実際にブラウザからシリアルを送ってみます。
まずは、左のメニューから「μC Console」をクリック。

この画面からシリアルを送ることができます。
実際の映像がこちら。
ブラウザで送信してるときの方はほぼ遅延がないので、ブラウザで受信のときに遅延してるのはhttp関連の遅延なのかな、と思ってます。真偽は不明。

ローカルからESPのシリアルを触る

後で書く。com0com(https://sourceforge.net/projects/com0com/)とか使えばよさそう。

最後に

次回はArduinoIDEから扱う編をやりたいと思います。


2018年10月6日土曜日

esp-wroom-02にEsp-Linkを導入する

どうも皆さんこんにちは、二連続で記事を書いているmokerです。

さて、タイトルの通り、Esp-Linkを導入してみようというお話です。
全然日本語のソースが見当たらないので一応書いておきますが、英語読めるならそっちの方がいいと思います(当然ですが)。
ESP-WROOM-02のファームウェア書き換えは電波法に抵触する可能性も指摘されていますので、実行は自己責任でお願いします。


esp-linkについて

次のようなことが実行可能だそうです。
  • ESPのシリアルをwifi経由でいじる。
  • Wifiを用いて、ESPのシリアル経由でAVRなどにプログラムを書き込む。
  • HTTP経由でアップロードしたプログラムをESPに接続されたAVRに書き込む。
  • 接続されたマイコンをインターネットへ接続させる。
  • 接続されたマイコンをwifi経由で操作するUIとなる(一部未実装)。
今回は主に上2つを実行するために書き込んでみました。

全体としては、結構ドキュメントもしっかりしている上に、バイナリも提供されていてかなり扱いやすいと思います。
ただ開発環境がオフィシャルの提供してるやつで、arduino ideとかで製作されてるわけではないので、そこがちょっと僕にとってはいじりにくいポイントです。


書き込んでみる


基本的にはFLASHING.mdを読んでその通りに実行すればうまくいくと思います。
久しぶりにファームウェアの書き換えやったのでそのメモも含めて残しておきます。
環境はWindows10です。

①ダウンロード

リリースからバイナリをダウンロードします。
ダウンロードするのは、source codeではなく、esp-link-v3.x.xx-xxxx.tgzみたいなやつです。
編集時点ではトップに乗っているのがアルファ・リリースだったので注意してください。

②展開

Windowsでtgzを扱う場合、何が正攻法なのかよくわかりませんが、僕は7zipを使って展開しました。多分いろいろソフトがあると思うので適当に選んでください。

③ESPの接続

ESPをシリアル・アップロードモード(実行モードじゃなく)に設定したうえで、PCに接続します。詳しくはこちら:https://ht-deko.com/arduino/esp-wroom-02.html

④書き込みソフトの立ち上げ

ArduinoIDEにespをインストールしている以上、どこかにesptool.pyがあるとは思うのですが、探すのも、コマンドオプションを調べるのもめんどかったのでGUIツールを公式からダウンロードしてきます:https://www.espressif.com/en/support/download/other-toolsの「Flash Download Tool」
起動して、esp8266を選択。

⑤書き込み

オプションは下の通り。
それぞれダウンロードしてきたバイナリファイルと、書きこむ番地を選択します。
  • boot_v1.x.bin : 0x00000
  • blank.bin : 0x3FE000
  • esp_init_data_default.bin : 0x3FC000
  • user1.bin : 0x01000
あとはFlashsizeを自分のやつ選んで(ぼくは32mbitでした)STARTをクリック。

⑥再起動

ESPを実行モードにして、再起動。そうするとwifiのAPに出てくるはずです(なぜか僕の場合は、前回書きこんだwifiの設定がそのまま残ってました)。
ipconfigとかでAPのIPアドレス調べて、そのアドレスをブラウザで開きます。
esp-linkというタイトルのページが出てくればオーケー。

というわけで導入編はこんな感じです。そのうち使ってみた感想を別記事で書くと思います。

Arduinoでシンボリックリンクをライブラリとして使う(Win10)

みなさんお久しぶりです、Mokerです。
忙しさも少し落ち着いたので前回の続きを書いていきたいと思います。

さて今回書くのはタイトルの通り、win10においてシンボリックリンク経由でライブラリを参照できるよっていうお話です。

前回書いた通り、Arduinoでは原則としてライブラリは、ソフトウェア全体で共通のディレクトリか、そのプログラムと同じ階層のsrcフォルダの下(直下でなくてよい)に配置する必要があります。
しかし、この仕様はプロジェクトごとにライブラリを分けたいという場合に少し不便です。
なぜなら、プロジェクトフォルダに共通のlibフォルダを作っても、Arduino側から参照できないからです。

そこで、解決策として今回発見したのがシンボリックリンクを作るやり方。
プロジェクトのlibフォルダに対するシンボリックリンクを.inoファイルと同じ階層に「src」という名前で作っておくと無事参照することができます。

シンボリックリンクの作り方かたは次を参考にしました:http://www.wannko.net/windows10/etc/sinlink.html
うちの環境では、シンボリックリンク作成の際に管理者権限を要求されました。

これでArduino全体のlibフォルダを汚染することなく、プロジェクト全体でlibを共有することができるようになりました。
もしかしたら、srcという名前のシンボリックリンクを直接作るのではなく、srcというディレクトリを作っておいてその直下にcommonとかいう名前でシンボリックリンクを作る方が使い勝手がいいかもしれません(未検証)。

というかArduino用のプロジェクト管理ソフトって何かお勧めないですかね・・・?

2018年9月19日水曜日

Arduinoでサブディレクトリからライブラリを読み込む

こんにちは、mokerです。

今回はタイトルの通りサブディレクトリのライブラリを読み込む方法についてです。
ちょっとした自作ライブラリを作ったのですが、「共通のlibraryフォルダに置いたり、ArduinoIDEに読み込ませるほどでもないな・・・」ということでサブディレクトリに配置したいと考えました。

検索したところ、日本語でヒットするのは、こちらのページ:Arduino用スケッチのサブルーチンをサブディレクトリに配置する: 猫にコ・ン・バ・ン・ワ

なるほどと思い、次のようにディレクトリを作成(思えばここで素直にサイトに従っておけばよかった)。
┬hogehoge.ino
└lib
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
 hogehoge.inoで「#include "lib/HogeLib/HogeLib.h"」とするとヘッダファイルは読み込まれました。
しかし、「Undefined referrence to HogeLib(int, int, etc)」というエラーが発生。つまり、cppファイルが読み込まれていないようなのです。

いろいろ調べてみると原因はこれ:Copy whole sketch source into temp folder to allow local inclusion by cmaglie · Pull Request #172 · arduino/arduino-builder · GitHub
つまり、hogehoge.inoと同じフォルダにsrcというディレクトリを作成し、その下にcppを配置しないとコンパイル時に読み込まれないようです(src直下じゃなくても大丈夫っぽい)。
そこで、次のような構造にしたらうまくいきました。
┬hogehoge.ino
└src
 └HogeLib
  ├HogeLib.h
  └HogeLib.cpp
keywords.txtは反応してないような気もしますが、普段使うのはvsCodeなのでまあどちらでもいいか、という結論に達しました。

<余談>
Arduino一時期触ってなかったので知らなかったのですが、1.5でライブラリ関連は前方互換が途絶えてるんですね・・・。
Githubにまとめられてました:Arduino IDE 1.5: Library specification · arduino/Arduino Wiki · GitHub
日本語だとこことか良くまとまっててよかったです:Arduino開発環境用の「ライブラリ」を作成してみる | KEI SAKAKI's PAGE.

2018年9月13日木曜日

GCEで無料でサーバーを立てるために頑張ったお話

お久しぶりです。mokerです。
さて、今回はタイトルの通り、Google Compute Engine(以下、GCE)を、Google Cloud Platform(以下、GCP)の無料枠の範囲内で使ってサーバー化してみようというお話です。

まずは、アカウントを取得します。ここは特に問題なかったので省略。

いよいよGCEのセットアップをしていきます。
参考にしたサイトはこちら:
GCE の無料枠のサーバを立るときに、初見でハマりそうなところ - Qiita
ちょこちょこ無料枠の制限が複雑なところがあるので注意が必要です。
後、ネットワーク関連の設定は、GCPのハンバーガーメニュー > ネットワーキング > VPCネットワークから設定可能です(最初見つけられなかった)。
OSはDebian9 (Jessie) を選択。
SSHのrestartがsystemctlコマンドで出来なかった(後から気づいたけどsudoしなかったせいかも)ので、「sudo /etc/init.d/ssh restart」から実行してます。
エディタはnanoを使いました(初心者に優しくて好き)。
rootのパスワード設定について一切かかれてないけどやっておいた方がよさそうな気がします。

SSL設定の前にまずNginxサーバーを立てます。
参考にしたのはこちら:Debian 9 (Stretch) - Web サーバ Nginx 構築(Nginx 公式リポジトリ使用)! - mk-mode BLOG
(ちなみにこのサイト、右クリックが無効化されてました。何故・・・?)
必要なところではsudoを忘れずに・・・(Nginxコマンドが認識されずに焦った)。
Nginxの設定は、ServerTokensとlocationを変更しました。

さて最初の参考記事に戻ってSSLの設定をしていきます。
certbotは面倒なことしなくてもapt installからいけるっぽいです。
SSL証明書を取得出来たら、Nginxにそれをインストールします。
なんだかんだうまくいかず、結局httpsへのリダイレクトは行わないで、sslの設定もdefault.confに書き込みました。
これで無事httpsでアクセスできるようになりました。

<後記>
sshがすごく重たくて、とってもストレスがたまりました・・・
レイテンシなのか、それともteratermなのか分からずじまい


2018年6月23日土曜日

Twitterの開発者用アカウントを取得したお話(順次追記)

Twitterの開発者用アカウント(Twitter development account)の取得に挑戦したので、その記録をしておこうと思います。
誰かの参考になれば幸いです。
ちなみにdev accountをとったのは、Activity Acount APIを使ってみたかったからです。

2018/6/9 14:30
dev accountの申請を送りました。(うっかりスクショを取り忘れました)
特段書くべきことはないですが、「なぜアカウントをとりたいか」だか「どんなアプリを開発してるか」だか(どっちだったか忘れた)を最低300文字の英文で説明しなければなりません。作文です。これが結構大変でした(英弱)。

2018/6/11 23:00
twitter dev teamから英語でメールが届きました。
内容としては、「お前は複数のアプリ開発してるけどトークン使いまわしてるんじゃねえよな?一応それぞれのアプリの説明をメールの返信でくれ。もしくはアプリを1つに絞って作業完了報告メールを返信しろ」みたいな感じです。

2018/6/13 1:00
仕方ないので、使ってなかったアプリを削除、使用中のアプリケーションについては説明を英語で返信しました。

2018/6/15 5:40
twitter devから英語でメールが来ました。内容は「お前の申請通ったぞ」とのことです。

2018/6/16 20:00
メールが来ていたことに気づき、twitter devのマイページを見に行きました。
が、「You are on the waitlist」(申し込み審査中)と表示されたままでした。

2018/6/17 12:30
仕方がないので、来ていたメールに「まだ審査中って出るんだけどどうなってんの?」って英語で返信しました。

2018/6/23 13:00
メール帰ってこないのでどうすべきか悩み中です。
開発者向けの窓口もよく分からんっていう

2018/7/28 1:40
Twitter APIの厳格化が発表されたので、自分のdevページを見に行ったら通ってたっぽい・・・です。
ちょこちょこ確認してたので許可下りたのはつい最近だと思われますが・・・
何がきっかけだったのかは正直謎

2018年5月27日日曜日

Waves full nodeを立ててみた(が失敗した)

お久しぶりです。
前回のくっさい記事を早く過去のものとするためにとりあえず新しい記事を書いておこうと思います。
Wavesというのは、ブロックチェーンを用いて自分のトークン/アセット(仮想通貨)を発行できるサービスです。
そのブロックチェーンのノード(トランザクションを実際に処理しているサーバー/コンピューター)を立てれると聞き、実際に試してみました。
実際のやり方は、https://dekirukigasuru.com/blog/2017/08/25/waves-fullnode/や、https://docs.wavesplatform.com/waves-full-node/how-to-install-a-node/how-to-install-a-node.htmlを参照することをお勧めします。
今回の記事はあくまで記録用です。


さて、まずRaspi1B(revision2)で試してみました。
OSはstretch,javaはインストール済みでした。
Raspi3Bでの動作報告が掲示板で上がっていたので楽勝だと高をくくっていたんですが、コンフィグをいじって実際に起動してみても、APIを返してくれません。
journalctlコマンドでログを確認してみるとどうやら1分おきぐらいにJAVAがエラーを吐いて、プロセスを再起動していることがわかりました。
いまだに原因は不明なんですが、考えられる理由として32bitアーキテクチャだからということがあります。
実は公式のマニュアルをしっかりと読むと64bitで実行してくださいって書いてあるんですよね。しかも、Raspi3Bは64bit、Raspi1Bは32bitなんですよ・・・


というわけでRaspiでの実行はすっかり諦め、WSLのDebianで実行してみました。
まずは、同様にインストールして実行します。
すると以下のエラーが出ます。
>>sudo systemctl start waves.service
Failed to connect to bus: No such file or directory
調べてみるとどうやらWSLではsystemctlが使えないとのことです。
代わりにsystemコマンドを使ってみます。
>>sudo service waves.service start
waves.service: unrecognized service
???
systemctlが使えないせいでインストールがうまくいっていないのでしょうか?
いやー困った...


とここまで作業して気づいたんですが、どうせWSLで動かすならwindowsで動かせばいいじゃん!ということで、また今度win10へのインストールを試みようと思います。(疲れた)
PS:今回初めてhighlight.jsなるものを使ってみました。ぶっちゃっけシンタックスハイライトいらない内容だけどね!

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月22日木曜日

Mirrativコメ録(chrome拡張機能)を公開しました

お久しぶりです。mokerです。
タイトルの通り、生放送配信サイトMirrativ上のコメントをjsonで出力できるchrome拡張機能を公開しました:https://github.com/moker-spaghetti/Mirrativ-Comment-Recorder
詳細はreadmeに書いてありますので、そちらをご覧ください。
また、質問、バグ報告、感想などありましたら、twitter(@moker_spaghetti)までどうぞ。

以下、mokerの雑談です。
さて、今回初めてchrome拡張機能作ってみましたが思ってたよりも簡単なんですね。(それでも難産でしたが)
ポップアップのUIとかいろいろ直したいところもあるんですけど、ちょっと技術力不足でまあ使えないことはないか、くらいのレベルでリリースすることになりました。

使用用途としては、コメントの解析とか、あとからコメントを振り返ったりとか、youtubeとかにアーカイブ載せるときにコメントを合成したりとかを考えています。
というか、本当は動画化するときにコメントを合成できたらいいなと思って作ってたんですけど、そのためには、jsonからコメント動画を生成するソフトウェアも作らねばならないんですよね。
たぶんaviutlのプラグインとかになるとは思うんですけど、僕はもう力尽きたのであとは有志の方にお任せしたいと思います。

jsonの整形ですが、僕はsublimetext3にprettyJsonというプラグインをいれてやってます。もし、興味あるかたいればググってみてください。
まあいろいろwebサービスもあるみたいですので、そちらを使うのも結構だと思います。

さて、そもそも今回の拡張機能をつくるきっかけになったのは、vTuber、とりわけにじさんじの皆さんでした。ここで改めてお礼を申し上げます。
それでは、皆さんのvTuberライフがより幸せになることを願って。
mokerでした。

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