2016-09-25

Ren'Py とビジュアルノベル

Ren'Py(レンパイ)とは、ビジュアルノベルの制作を容易にするフリーソフトウェアエンジンです。主に Python で記述されているマルチプラットフォーム対応のエンジンです。当然 Linux にも対応していますし、AndroidiOS にも対応しているようです [1]

この記事を書くまで「ビジュアルノベル」なる用語を知らなかったのですが、調べてみると、かつて PC がマイコンと呼ばれていた 1980 年代に流行ったアドベンチャーゲームの延長上にあるゲームのジャンルであると判りました。

かたわ少女

いきなりゲームの話になりましたが、きっかけは、とあるブログの記事でした。本ブログはにほんブログ村のブログランキングに参加していますが、参加カテゴリー Linux 人気ブログランキングの上位常連、ふつかさんの記事で、参考サイト [2] の記事が目を引きました。

まず、放送禁止用語である「かたわ」をタイトルに使ったゲームを紹介していることです。

Wikipedia で「かたわ少女」を調べてみると、18+ のアダルトゲームで以下のような特徴があります。

  • フリーゲーム
    • 非営利-改変禁止 (CC BY-NC-ND) ライセンスで開発・無料配布
  • MIT ライセンスの Ren'Py をゲームのエンジンに使用
  • 対応機種
    • Windows, Mac OS X, Linux
  • 多言語対応
  • 最終版 Ver1.3.1
    • 2015年6月7日リリース

ダウンロードして動作確認をしてみました。動作環境は次の通りです。

今回は BitTorrent を利用してダウンロードすることにします。参考サイト [3] から、Vollversion の Torrent: Linux x86 をクリックします。すると、18 歳以上の年齢制限がある旨が示されますので、年齢確認のチェックボックスにチェックを入れてから Submit ボタンをクリックするとダウンロードが始まります。

ダウンロードしたファイル [4ls]_katawa_shoujo_1.3.1-[linux-x86][18161880].tar.bz2.torrentTransmission で読み込んでプログラムをダウンロードします。

ダウンロードしたファイル名は、'[4ls]_katawa_shoujo_1.3.1-[linux-x86][18161880].tar.bz2' と、シングル・クォーテーションで囲まれていますが、構わず展開します。

$ tar jxvf '[4ls]_katawa_shoujo_1.3.1-[linux-x86][18161880].tar.bz2'
Katawa Shoujo-1.3.1-linux/
Katawa Shoujo-1.3.1-linux/Game Manual.pdf
Katawa Shoujo-1.3.1-linux/Info.plist
Katawa Shoujo-1.3.1-linux/Katawa Shoujo.py
Katawa Shoujo-1.3.1-linux/Katawa Shoujo.sh
Katawa Shoujo-1.3.1-linux/LICENSE.txt
Katawa Shoujo-1.3.1-linux/game/
Katawa Shoujo-1.3.1-linux/game/_ui_early.rpyc
Katawa Shoujo-1.3.1-linux/game/bytecode.rpyb
Katawa Shoujo-1.3.1-linux/game/data.rpa
...
...
$

早速、起動してみましょう。

$ cd 'Katawa Shoujo-1.3.1-linux'
$ ls
'Game Manual.pdf'  'Katawa Shoujo.py'  LICENSE.txt  lib            renpy
Info.plist         'Katawa Shoujo.sh'  game         localizations
[bitwalk@stream11 Katawa Shoujo-1.3.1-linux]$ ./'Katawa Shoujo.sh' &
[1] 8511
$ Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to [:<exec_prefix>]
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to [:<exec_prefix>]

なにやらエラーらしきメッセージが出ていますが、しばらく待つと無事プログラムが起動しました。

Options を選択して言語の設定をします。

「はじめから」をクリックしてゲームを始めます。

ゲームのやり方や攻略法については、いろいろなサイトで紹介されていますので、ここでは触れません [4]

Ren'Py のつかいみち

前述したように、かたわ少女は Ren'Py というビジュアルノベルの制作を容易にするゲームエンジンを利用しています。Wikipedia によると Ren'Py には以下のような特徴があります。

  • ストーリーの分岐
  • ゲームのセーブやロード
  • 前の場面へのロールバック
  • 様々なトランジション
  • 国際化対応
  • OpenGL によるレンダリング
  • Python による拡張可能
  • Android、iOS、Linux、Mac OS X、Windows での動作をサポート

正直なところ、こういったビジュアルノベルのゲームに熱くなるほどの興味はありません。しかしゲームエンジンである Ren'Py には、もっと他に応用できるのではないかと興味があります。

それは、現場でのオペレーション補助です。一言で「現場」といってもいろいろありますが、リアリティを持たせるため、経験に基づいた半導体製造現場(前工程)を例に話を進めます。前工程とは、ウェハーと呼ばれるシリコンの円板上に、半導体素子や配線で構成された何百あるいは千以上の四角形のチップを形成する工程で、通常何百という工程が続きます。工程間のウェハー移動およびウェハー処理は高度に自動化されているので、製造上、人間が介在するのは、ウェハー上の検査(測定を含む)ぐらいになってしまいました。

しかし、製造装置のメンテナンスは依然として人手で対応しているのが現状です。半導体素子や配線を形成するのに化学反応を利用する工程が多いので、副生成物などで装置の反応室は汚れ、部品も劣化します。そのため、定期的に反応室を大気開放して洗浄します。アセンブリを分解して必要な部品交換もします。その作業手順を手順書として文書化していますが、膨大な量になります。スタッフ全てが作業に熟練していれば良いのですが、現実はそうではありません。

作業の熟練度に寄らず一定のオペレーション品質を確保するために、現場ではタブレットを導入して画面上でチェックリストにチェックしながら作業を進めたり、必要に応じて手順書を確認できるような取り組みが始まっています。こういったオペレーションは、作業フローに従ってチェック箇所をクリアしながら次に進んでいくわけですので、ストーリーのあるゲームと似ています。

そんなタブレットを導入するプロジェクトが自分の仕事に近いところで進んでいるので、Ren'Py のようなエンジンを利用すればもっと効果的な運用ができるかもしれないと感じたのでした。

チェックリストを必要とする作業は、この例に限らず他業種でも多々あることでしょう。応用できる分野は意外と多くあると思います。カスタマイズ容易でインテリジェントなチェックリストへの応用はビジネスチャンスかもしれません。ちょっと大袈裟かな?

参考サイト

  1. The Ren'Py Visual Novel Engine
  2. Linux版美少女ノベルゲーム、かたわ少女|ゲーム画像 | お手軽に楽しむBSDへの道〜FreeBSDとLinuxの話題〜
  3. Katawa Shoujo ◊ Download
  4. ReadMe!Girls!の日記・雑記: かたわ少女完全版 ゲーム攻略
  5. Ren'Py のドキュメントにようこそ! — Ren'Py Documentation

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-09-22

Fedora 25 リリーススケジュール

1 年に 2 回の頻度でリリースするというのは、なかなか忙しいことです。つい先日 Fedora 24 がリリースされたと思っていたら、もう Fedora 25 のリリースが迫ってきています。Fedora 25 の新機能についてはこれから内容をまとめて紹介するとして、とりあえず資料 [1] に掲載されているスケジュールを引用して再掲しました。

Key Milestones

2016-02-23 Branch Fedora 24 from Rawhide (Rawhide becomes future F25)
2016-06-21 Fedora 24 Release
2016-07-05 Change Checkpoint: Proposal submission deadline (System Wide Changes)
2016-07-05 Mass Rebuild (not planned for F25)
2016-07-12 Change Checkpoint: Proposal submission deadline (Self Contained Changes)
2016-07-26 Branch Fedora 25 from Rawhide (Rawhide becomes future F26)
Change Checkpoint: Completion deadline (testable)
2016-08-09 Alpha Freeze
Software String Freeze
Bodhi activation point
2016-08-23
2016-08-30
Alpha Release
2016-09-06
2016-09-13
Software Translation Deadline
2016-09-20
2016-09-27
Beta Freeze
Change Checkpoint: 100% Code Complete Deadline
2016-10-04
2016-10-11
Beta Release
2016-10-25
2016-11-01
Final Freeze
2016-11-08
2016-11-15
Fedora 25 Final Release (GA)

参考サイト

  1. Releases/25/Schedule - FedoraProject

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-09-18

WebAssembly と Google Chrome 53

Google Chrome のバージョンがいつのまにか 53 になっていました。

Google Chrome バージョン 51 から stable なバージョンでプラットフォームに依らず利用可能になった WebAssembly ですが、昨 5 月にそのバージョン 51 で WebAssenbly の機能が有効時と無効時で、JavaScript の ベンチマークを取って結果を比較しました。[1]

その後も定点観測的に、Google Chrome のバージョンが上がるたびに同じ比較をしようと考えていましたが、いつの間にかバージョンが 53 になってしまいました。バージョン 52 ではできませんでしたが、バージョン 53 で同じように Google の Octane でベンチマークを取って比較してみました。

動作環境は次の通りです。使用した PC は前回と同じです。

  • PC: HP Stream 11-r016TU
  • OS: Fedora 24 (x86_64)
  • Google Chrome バージョン 53.0.2785.116 (64-bit)

ベンチマークの結果にはばらつきがありますので、 Octane を 5 回連続実施して一番高いスコアを残しています。

WebAssembly の有効化|無効化

Google Chrome のアドレスバーに chrome://flags/#enable-webassembly と入力します。

試験運用版 WebAssembly の行で「有効にする」|「無効にする」をクリック後、画面下の「今すぐ再起動」をクリックして Google を再起動して機能を有効|無効にします(右図)。

WebAssembly 無効時

まずは、WebAssembly を無効にした時にベンチマークを 5 回実施した中でベストの結果です。

WebAssembly 有効時

次が、WebAssembly を有効にした時にベンチマークを 5 回実施した中でベストの結果です。

まとめ

Octane の総合スコアでは、WebAssembly を有効にした場合の方が若干高くなっていますが、各項目を較べると、SplayLatency と pdf.js の二項目を除き、パフォーマンスは似たりよったりです。前回確認した時のベストスコアより、どちらのスコアも高くなっているのは、WebAssembly だけでなく、Google Chrome の Javascript エンジンである V8 もまた、改良が続けられているからでしょう。

このベンチマークで確認する限り、今のところ WebAssembly の機能が圧倒的に既存の方法より優れているとは言えません。ひきつづきこのベンチマークを、ある程度定期的に実施していく予定です。


Default WebAssmbly
Enabled
change ratio
[%]
Richards 9366 9087 -3.02
Deltablue 16642 16053 -3.60
Crypto 9708 9755 0.48
Raytrace 15656 16986 8.15
EarleyBoyer 11618 11521 -0.84
Regexp 870 878 0.92
Splay 6122 6250 2.07
SplayLatency 9694 11139 13.87
NavlerStokes 11724 11961 2.00
pdf.js 3879 4394 12.45
Mandreel 5713 6194 8.08
MandreelLatency 14408 13294 -8.04
GB Emulator 17618 17660 0.24
CodeLoad 3337 3307 -0.90
Box2DWeb 10822 10871 0.45
zlib 23263 23359 0.41
Typescript 7817 7800 -0.22
TOTAL 8487 8651 1.91

参考サイト

  1. bitWalk's: WebAssembly と Google Chrome 51
  2. Octane  |  Google Developers

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-09-11

ASUS TransBook T100HA と Fedora 24 (2)

Amazon.jp の 「プライムデー 2016 (7/12)」で、破格な値段の誘惑に負けて買ってしまった 2 in 1 PC、ASUS TransBook T100HA ですが、なんとか Fedora 24 をインストールして使っていますが、搭載されている機能がほとんど利用できないばかりか、起動も何回に一回しか成功しないという有様でした [1]

日々の忙しさにかまけて、Fedora の kernel をアップデートしていれば、なにか変化があるかもしれないという消極的な対応しかしてきませんでした。kernel が 4.7.2 になってからも、何かの機能が有効になったということは全然ないので、もう少し積極的に改善していこうと重い腰を上げました。

使用環境は以下のとおりです。

  • PC: ASUS TransBook T100HA
  • OS: Fedora 24 (x86_64)
    • kernel: kernel-4.7.2-201
    • desktop: gnome-desktop3-3.20.2-1

まずは確実に起動するための調整です。参考資料 [2] によるとカーネルパラメターに画面の解像度を指定しておくとほぼ確実に起動するとあります。

詳しく書かれていないので具体的にどうするか悩むところですが、普通に考えれば GRUB2 で起動するときに kernel へ渡す引数のことだろうと考え、何回か起動時に起動コマンドを編集してテストした後、最終的に以下のようにしました。

まず、/etc/default/grub を編集します。

/etc/default/grub の編集
$ su
パスワード:
# vi /etc/default/grub

GRUB_CMDLINE_LINUX の行を編集します。quiet を消して、video=1280x800@60 を加えます。

/etc/default/grub の編集 (2)
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb video=1280x800@60"
GRUB_DISABLE_RECOVERY="true"
~                                                                               

/etc/default/grub を編集後、grub2-mkconfig を使用して /boot/efi/EFI/fedora/grub.cfg ファイルを再生成します。

grub2-mkconfig を使用して grub.cfg ファイルを再生成
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.7.2-201.fc24.x86_64
Found initrd image: /boot/initramfs-4.7.2-201.fc24.x86_64.img
Found linux image: /boot/vmlinuz-4.6.7-300.fc24.x86_64
Found initrd image: /boot/initramfs-4.6.7-300.fc24.x86_64.img
Found linux image: /boot/vmlinuz-4.6.6-300.fc24.x86_64
Found initrd image: /boot/initramfs-4.6.6-300.fc24.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d3f67c2d11bc43afaf55d8e621c9a3f8
Found initrd image: /boot/initramfs-0-rescue-d3f67c2d11bc43afaf55d8e621c9a3f8.img
done
# 

この変更によって、確かに起動できる頻度が向上したように思います。しかし繰り返しリブートしてテストしてみると、参考資料 [2] に書かれているように 99% 動くというレベルではなく、まだまだ起動に失敗します。

他にもいろいろと試していることがあるのですが、はっきりとした成果があがっていません。うまくいったことを少しずつ書き残していきたいと思います。

参考サイト

  1. bitWalk's: ASUS TransBook T100HA と Fedora 24
  2. Running Fedora 23 Workstation Linux on an Intel BayTrail tablet

 

ブログランキング・にほんブログ村へ
にほんブログ村

2016-09-04

Python で Excel ファイルを読み込む

Python に限らず、ちょっとした自作のプログラムでデータを読み込む時 CSV 形式のデータを読み込むルーチンを作ってよく使っています。CSV 形式を使う理由は、コンマで区切られているだけという簡単な構造であることに他ならないからです。

しかし、Windows 上ではデータ形式が Excel 形式であることがままあり、そういう時は自作のプログラムでそのようなデータを持ち込むために、わざわざ CSV ファイルに保存し直して使っていました。それでも長年このようにしていると慣れてしまうもので、データを読み込む必要がある時は、とりあえず CSV 形式のファイルを読み込むルーチンをつくることが当たり前と思うようになってしまいました。

考えてみると、こういった場合の Excel ファイルは読むこむだけです。そんな Excel ファイルを読むだけの目的で簡単に使える Python のライブラリがないかと探すと、xlrd というライブラリが簡単に見つかりました。私の場合、最終的に Windows 上で使うにしても、最初は Linux (Fedora) 上でプログラムを作ってあれこれ試してみるのが常なのですが、都合の良いことにこの xlrd は Fedora のパッケージでも利用可能でしたので早速試してみました。

使用環境は以下のとおりです。

  • OS: Fedora 24 (x86_64)
  • Python: python-2.7.12-2.fc24.x86_64
  • xlrd: python2-xlrd-0.9.4-3.fc24.noarch

xlrd については、紹介されているサイトがたくさんありますので、ここであらためて同じように使い方の紹介はしませんが、xlrd の機能を網羅的に紹介しているサイトが見つかりませんでしたので、下記参考サイト [1] にマニュアルサイトを紹介しています。

ちなみに、私は、以下のように使っています。

import xlrd

class ...:
    ....
    ....
    # -------------------------------------------------------------------------
    # Read Excel File
    # -------------------------------------------------------------------------
    def read_excelfile(self, filename):
        book = xlrd.open_workbook(filename)
        sheet = book.sheet_by_index(0)

        self.rows = sheet.nrows
        self.cols = sheet.ncols
        self.header = ['' for col in range(self.cols)]
        self.data = [[0 for col in range(self.cols)] for row in range(self.rows - 1)]

        for row in range(self.rows):
            for col in range(self.cols):
                value = sheet.cell_value(row, col)
                if row == 0:
                    self.header[col] = value
                else:
                    self.data[row - 1][col] = value

参考サイト

  1. API Reference — xlrd 1.0.0 documentation

ブログランキング・にほんブログ村へ
にほんブログ村