Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

書いたコードを他人に見てもらおう(マサカリのすすめ)

はじめに

全国で5000人くらい*1はいると思われるComputerCraftユーザーの皆様こんにちは。

今日はまず、こちらの動画を紹介します(ニコ動です)。

職業プログラマーならばさほど問題ないのですが、僕を含む趣味プログラマは、日々、独自の作法でCCプログラミングをしています。

しかし、そのコードが他人からみて見やすいのか、変な癖がついていないか、そしてよりよいコードにするために何を心がければ良いか。

一人孤独にCCプログラミングしていると不安になりますよね。

「誰かに見てもらえないかなー。チラッチラッ。でも恥ずかしいしなぁ・・・。悩ましい悩ましい」

そこで、この動画です!

なんと、マサカリを投げてくれるCCプログラムのコードレビューをしていただけるとのこと。

すばらしい! この機会を逃す手はありませんよね。

動画でコードレビューの説明を聞き、コードレビューを受けるときの心構えを理解したら、mesさんにTwitterなどでお願いしてみましょう。

コードレビューをお願いする方法

説明されているコード提供方法は2つ。

  1. Gistに自分のコードを貼って、Twitterでmesさんにコードレビュー依頼する。
  2. GitHubにアカウントを持っていてGitを使い慣れているならば、プルリクエストでコード提供。

見やすさと言う点では2.ですし動画ページのコメント欄でも推奨されていますが、Gitわからんという人は1.でも良いのではないかと。なお、Gistというのは、Gitサイトがpastebinを真似したサービスと説明するとおおよそのイメージがつかめるのではないでしょうか。

どちらかの方法でコードを提供する準備ができたら、Twitterでmesさん(twitter: @mes_mc)にお願いしましょう。

マサカリ投げていただきました

僕もコードレビューをお願いしました。

お願いしたコードは以下のとおり。(長いですしあまり良いコードではありませんが><)

そしてプルリク経由でコードレビューお願いして、いただいたコメントは以下のとおり。

たくさんレビューコメントをいただいたのですが、簡単にまとめると、以下の4つが中心になります。

  1. 誤解をまねく関数名がある
  2. loadAPI()を使ったほうがよい
  3. 改行を入れてもっと見やすく
  4. 植林部分のコードについて改善案

1.の関数名については、つい手を抜きがちなところなので、今後も気をつけたいところです。

2.のloadAPIは、できるだけファイル1つだけのプログラムにしようと手持ちのAPIから関数を無理やりコピペしたのですが、そのコピペという手抜きバレバレだったようです。申し訳ないw

3.の改行について。これは僕の悪い癖です。おそらく今回のレビューで一番気をつけないといけない部分。

空行を入れないというのは、ブログにコードを掲載することを前提とした悪癖なんですよね。レビューをお願いしたコードは210行程度ですが、改行入れて見やすくすることを考えるとおそらく250行近く行くはずです。

250行のコードをブログに掲載しても大丈夫かな? ドン引きしません? むしろ見やすくするために空行入れたほうがいい? このあたりぜひ皆さんのご意見を聞きたいところ。

とはいえ、コードレビューしていただくなら、ブログ掲載用にコードを密集させたものではなくより見やすく改行をいれたコードを送るべきでした。このあたり、一般的な常識と外れていたんだなと反省しきり。

4.の植林部分のコードついては、松の巨木の生長パターンと関連していろいろ試行錯誤した結果なのですが、改善案をいただいて、より工夫ができそうなことに気づきました。

これらコメントにより自分の癖を自覚でき、また色々な発見もあり大変有意義な機会でした。

つまり、mesさんの投げたマサカリが僕の頭に綺麗に刺さって、いろいろと目が覚めたわけですね*2

ありがとうございました。

僕ももっと勉強して、成長して、色々な方と互いにマサカリを投げ合えるくらいにまでなりたいものです。

もう一つ重要なコメント

上記の4つのコメント以外にも、重要なコメントがありました。

[IMO] Turtleの仕様上の問題などもありますが、関数名の方向だけが違うものが結構多いので、メタプログラミングとかで重複部分をまとめてあげたいですね。 実際にやろうとするとかなり面倒ではありますが...

これね・・・。本当にそう思います。新しい関数を定義するときに、正面/上/下と必ず三方向の関数を作らないといけないのは面倒ですよね。なんとかうまい方法ないものか。

やるとしたらTurtleAPI自体を拡張しないといけないでしょうね・・・。今後の課題です。

おわりに

まとめ。

  • 自分ひとりでCCプログラミングしている人はぜひ他人に見てもらいましょう。
  • 他人に見せることを意識したコードを書くというのはとても良い経験になります。
  • 実際に見ていただくことで、自分だけの視点では気づかない発見があるかも。
  • 自分の悪癖にも気づくかも。無くて七癖と言いますよねw
  • 今なら、mesさんがレビューしてくれるそうですよ!ぜひお願いしてみよう。
  • mesさん素敵。抱いて!

*1:てきとー

*2:変な性癖に目覚めたわけではありませんw

クリエイティブモードを強烈にクリエイティブにするComputerCraft1.7 がリリースされました

はじめに

2月16日にComputerCraft1.7がリリースされました。

さあ、ダウンロードしてインストールしましょう。

なお、Minecraft1.7.10用ですのでご注意を!

ComputerCraft | Programmable Computers for Minecraft f:id:hevohevo:20150221201311j:plain:w400

なにが新しいの?

念のためWhat's Newを適当和訳しておきますね。「」内は僕のコメントです。

  • コマンドコンピュータ(Command Computer)を追加
    • 「使えるのはクリエイティブモードだけです」
  • 新しいAPIを追加: commands
    • 「コマンドコンピュータだけが使えるAPIです」
  • 新しいプログラムを追加: commands, exec
    • 「commandsプログラムは、使えるコマンド一覧を表示します」
    • 「execプログラムは、引数でコマンドを与えたら実行します」
      • 「例)コンソール画面で> exec time set 700
  • textutils.seriaizeJSON( Table )関数を追加
    • 「JSON!JSON! テーブル→JSON形式に変換の模様。コマンドでJSON使うよね」
    • 「マイクラのオプションとして認識されるには、シリアライズ化したJSON文字列から「"」を削らないといけないかもしれません。string.gsub(json_str, "\"", "")のように」(こちらについては現在試行錯誤中)
  • ILuaContext.executeMainThreadTask() 周辺機器開発者向けに追加
    • 「CCの周辺機器を開発しているmodder向け」
  • 金床でディスクドライブとプリンターの名前変更をできるように
  • HD texture packsの問題を解決
    • 「高解像度のテクスチャで不具合起こしていたのかな?」
  • いろんなバグを修正
  • ゲーム内ヘルプシステムに全ての新しい機能をドキュメント化した
    • 「コンソール画面でhelpコマンドを使ってみよう」

Command Computer !!

1.6系統から1.7系統へとメジャーバージョンアップしたわけですが、その目玉は、クリエイティブモードのときだけ作成できるCommand Computerです。

クリエイティブモードでは、(チート的に便利な)様々なコマンドを使うことができますが、Command ComputerはそのコマンドをLuaプログラムを使って実行できます。

どんなことができるのかは、この動画を見たほうが早いかも。雰囲気はつかめるはずです。

Command Computer: Command Blocks ComputerCraft Style - YouTube

動画中で紹介されたSummon(サモン、召喚)プログラムは面白いですね。

モニターを右クリックしたら、コマンドを使って鉄柵を四方に設置し、ゾンビを召還しています。

もう一度右クリックしたら、柵だけ消し去っているようですね。ギャー!ゾンビーキター!

Commands API

Command Computerでは、用意されたcommands APIを使って、各種コマンドを実行することができます。

たとえば、以下のようなバニラのコマンドに対応するのは、

/time set 700

以下のような関数です。

-- Lua Program
commands.time("set", 700)

commands APIにtime()関数が用意されているので、引数"set"700を与えて実行しているわけですね。

え? 引数が文字列か数字かをいちいち区別するのが面倒だって?  これまで培ってきた、溜め込んできた「コマンド群」資産をできるだけそのまま利用したいだって?

もう仕方ないなぁのび太くんは。

次のように手抜きしてプログラム書いてもいいのよ?

-- Lua Program
commands.exec("time set 700")

commands.exec()関数は与えた引数文字列をそのままコマンドとして解釈してくれるみたいですね。すばらしい。これだけあれば他の関数いらないんじゃないかな。引数はstring.format()で連結すればいいし。

こんなプログラム組んでみた

想像が広がりんぐ

これまで、マインクラフトのコマンドはシンプルすぎてそれを組み合わせるのに非常に苦労していました。

コマンドブロックを使うにしても、覚えさせておくことができるコマンドは1ブロックあたり1つだけなので、複雑な作業をさせるために、複数のコマンドブロックを用意し複雑なレッドストーン回路を組んでロジックを組み立てていました。

今回のCommand Computerの実装によって、1台のCommand Computerと1つのLuaプログラムだけでそれらが代替できるようになります。

便利すぎて味気ない? ええ、その気持ちは良くわかります。でもクリエイティブモード限定ですし! 住み分け、住み分けw

このように、今回のバージョンアップはメジャー番号を上げるにふさわしい意義深いバージョンアップだったと思います。

クリエイティブモードをより創造的にできるCC1.7を、僕は歓迎します!

テキスト読み上げアプリ、VoiceTextApp. を公開しました

VoiceTextApp. version 0.3

f:id:hevohevo:20150215141704p:plain

このアプリについて

これは、 HOYAサービス株式会社さんのVoiceText Web API(β版)を利用した、 入力テキストを読み上げるアプリです。

VoiceTextは、高品質の読み上げエンジンとして定評があり、商業ベースでは多くの場面で採用されています。 このような素晴らしいエンジンを「無料」で提供してくれるHOYAサービス株式会社さんには、百万の感謝を!

動作環境

このアプリの動作確認は、Windows7 かつ Java7(JRE1.7.0_65)で行っています。

Javaが入っていればどの環境でも動くはずですが、未検証なので、動作報告お願いします。

インストール方法

  1. このページの下の方にある「ダウンロード」より圧縮ファイルをダウンロードして、適当な場所に展開。
  2. 内部にあるvoiceTextApp.jarファイルがこのアプリの実行ファイル(jar)です。

アンインストール方法

展開したフォルダごと消してください。

本アプリの使い方

  1. VoiceTextWebAPI公式ページへ飛んで、API Keyを入手します。
    • 入手方法については割愛します。基本的に、メールアドレス登録してメールで受け取る流れです。
    • https://cloud.voicetext.jp/webapi
    • このWebAPI使用上の注意ということで、利用規約をしっかりと読んでください。
  2. このアプリを起動します。Java7(JRE7)が入っていれば動くはずです。
    • Javaのインストール方法は自分で調べてください。
  3. 右上の空欄に、API Keyを入力する。
    • メニューの「ヘルプ」→「API Keyのセーブ」を選ぶと、このKeyをファイル保存して次回起動時に自動的にこれを使うようになります。
    • ただし、素のテキストファイルとして保存されるので、取り扱いには注意してください。間違えても流出させたりしないように。
  4. 左側の編集窓にテキストを入力します。
    • テキストを他からコピペしても良いですし、メニューの「ファイル」→「ロード」からテキストファイルを読み込んでもかまいません。
    • ただし、一度に読み上げてくれるテキストは200文字以下という制限があるので注意してください。これはWebAPI側の制限です。
  5. 右側のパラメータをいじる
    • 声の選択: show(機械的な男声)、takeru(青年)、haruka(ロリ)、hikari(女性)、santa(サンタクロース)、bear(凶暴なクマ)
    • 感情の選択: none(標準)、happiness(幸)、sadness(悲)、anger(怒)。showは、感情音声をサポートしてないので注意。
    • 感情レベル: デフォルトは弱となっています。強にすると強調されます(?)
    • ピッチ: 値を大きくすると高い声になります。50-200まで。
    • スピード: 値を大きくすると早くしゃべります。50-200まで。
    • 音量: 声の大きさです。50-200まで。
  6. 「読み上げ」ボタンを押すと、そのパラメータで音声を生成&再生します。
  7. 「停止」ボタンを押すと、再生中の音声を停止します。

トラブルシューティング

Q0. バグ多くない?

  • A0. 作者がJavaの勉強がてらに作ったものなので、いろいろと不具合があると思われます。
    • ぜひご報告ください。そしてもちろん、感想もお待ちしております。

Q1. アプリのアイコンダブルクリックしても起動しないんだけど?

  • A1. Javaはインストールされていますか?
    • 動作検証は、Windows7 かつ JRE7 (1.7.0_65)で行っています。
    • MacやLinuxで動くかどうかは不明です。動作報告や不具合報告待ってます!

Q2. 「401: Basic認証に失敗。API Keyを見直してください」というメッセージでるけど、Key間違えてないはずだよ?

  • A3. API_Keyの入力が正しいか、もう一度確認してください。
    • 画面表示上では●●●のような伏字になっているので、メニューからAPIキーを一旦保存して、api_key.txtファイルを開いて確認してください。

Q3. テキストファイルを読み込んだり、書き込んだりしたときに表示が文字化けしているんだけど?

  • A4. プラットフォームのデフォルト文字コードを使うようにしています(例:もしWindowsならMS932)。もしかしたらその他の文字コード使っていませんか? お手元の別ソフトで文字コードを変えてみてください。

注意事項

  • 本ソフトの二次配布は禁止します。
  • 取得したAPI_KEYはしっかりと管理をしましょう。
  • 本ソフトは、HOYAサービス株式会社様のAPIを利用しやすくするためのソフトです。メイン機能は、Web APIによるものなので、APIの利用規約をしっかりとお読みいただいた上で、ご利用ください。
  • VoiceTextAPI利用規約に反することがないようご注意ください。

本サービスで作成した音声データの商用利用、二次利用及び配布する行為は禁止されております。 利用規約をご確認の上、本サービスをご利用ください。
「VoiceTextWebAPI(β版)トップページの注意書きより引用」

ダウンロード

Dropbox - VoiceTextApp_0_3.zip

要望等

  • hevohevoのTwitter、あるいはこの記事のコメント欄までどうぞ。
    • Twitter: @hevohevo

バグ修正には積極的に応じるつもりです。つもりですが、リアル(Minecraft)が忙しいのでそのあたりご了承を。

機能追加の要望については、前向きに検討させていただきます(玉虫色の表現)。

更新の履歴

  • version 0.3 (2015/02/15)
    • GUIの見直し(ウィンドウの微妙な小型化)
    • VoiceTextAPIの発話者追加に対応(「サンタクロース」「凶暴なクマ」)
  • version 0.2 (2014/08/09)
    • コードのリファクタリング。GUIの見直し。
    • 再生した音声の停止ボタンをつけるなど機能強化。
  • version 0.1 (2014/08/01)
    • 公開しました。