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