2017年7月20日 (木)

Python3のenumは遅い?

Python3.4からenumがサポートされたというので使ってみたところ、どうも遅いらしいです。

以前自分で作ったテキスト処理スクリプトの字句解析部にステートマシンを使っていたので、そのステートを示す定数をenumに変えたところ、もとの整数の変数で代用したものでは2.1秒くらいの処理だったのが、4.2秒くらいに増加しました。

整数の変数を使ったものはこんなコードです。ちなみにこの関数は1行ごとに呼び出していますが、range(4)を外に追い出してもほとんど速度は変わりませんでした。

def _split_words(line):
    ...
    ( ST_INDENT, ST_FIRST_CHAR, ST_SEARCH_TOKEN, ST_TOKEN ) = range(4)
    ( QT_SINGLE, QT_DOUBLE, QT_BACK, QT_NOTHING ) = range(4)
    st = ST_INDENT
    ...
    for idx in range(len(line)):
        ...
        if st==ST_INDENT:
            ...
            st = ST_FIRST_CHAR
        elif st==ST_FIRST_CHAR:
            ....

enumを使ったものは次のコードになります。forループは1文字ずつ全部まわる動作回数の多いコードになりますが、ステート定数は比較と代入しかしていません。

_split_words_st = enum.Enum('_split_words_st', 'INDENT FIRST_CHAR SEARCH_TOKEN TOKEN')
_split_words_qt = enum.Enum('_split_words_qt', 'SINGLE DOUBLE BACK NOTHING')

def _split_words(line):
    ...
    ST = _split_words_st
    QT = _split_words_qt
    st = ST.INDENT
    ...
    for idx in range(len(line)):
        ...
        if st==ST.INDENT:
            ...
            st = ST.FIRST_CHAR
        elif st==ST.FIRST_CHAR:
            ....

OSはLinuxで、Pythonは3.5.3と3.6.2で確認しました。実行時間は_split_words()関数の呼び出し前後をtime.perf_counter()で囲って測っていますが、8万回くらいある呼び出しそれぞれの実行時間を合計しています。

2017年7月 7日 (金)

Fontconfigを使ってフォントの横幅を変える方法

ヒンティングの設定や、fontconfigかなにかの更新でurxvtの横幅が大きく変わることがあったので、フォントの横幅を変えて対処してみました。

もとのフォント設定はPrimaSansMono BTで、新たにPrimaSansMono BT2を作ってその横幅を縮めます。この設定は~/.config/fontconfig/fonts.confに加えました。

<match>
  <test name="family" compare="eq"><string>PrimaSansMono BT2</string></test>
  <edit name="family" mode="assign" binding="same"><string>PrimaSansMono BT</string></edit>
  <edit name="matrix" mode="assign">
    <matrix><double>0.95</double><double>0</double>
            <double>0</double><double>1</double>
    </matrix>
  </edit>
</match>

0.95のところの数字を適当に変えます。わたしの今の環境では、これを0.96にすると1倍と同じくurxvtの横幅が一気に150ドット伸びました。どこかに閾値があるみたいです。

urxvtの設定はxrdbに読みこませるリソースなどでおこないます。もともとPrimaSansMono BTだったのをPrimaSansMono BT2にします。

URxvt*font: xft:PrimaSansMono BT2:pixelsize=14,\
            [codeset=JISX0208]xft:FGHeiseiKakuGothic:pixelsize=16

2017年7月 5日 (水)

Wesnothアドオンに関するメモ

Wesnothアドオンに関するメモ。Translation MODとか。

» 続きを読む

2017年6月25日 (日)

Pangoと倍角ダッシュ

いまさらの倍角ダッシュ問題。

Pangoが使われる描画で倍角ダッシュをどうできるかという話なのですが、PangoではEM DASH (U+2014)もHORIZONTAL BAR (U+2015)も分割禁止なようです。というわけで、どちらも使えます。

確認したPangoのバージョンは1.40.5-1です。

ちなみに、DejaVuSans (バージョン2.37) はHORIZONTAL BARのほうがつながるやつで、DroidSansFallbackFull (バージョン2.53) はEM DASHのほうがつながるやつです。

TWO-EM DASH (U+2E3A) を使えばすむのでしょうが、DejaVuSans (バージョン2.37) とDroidSansFallbackFull (バージョン2.53) には入っていません。TWO-EM DASHが入った規格 (Unicode 6.1.0 2012年) より古いフォントだからあたりまえだけど。

2016年4月23日 (土)

ENDLESS SKY (ゲーム)の紹介

マルチプラットフォーム、オープンソースのゲームであるENDLESS SKYの紹介です。

このゲームは交易や任務をこなしつつ銀河を旅して、宇宙船や装備をアップグレードしていくタイプの、シングルプレイヤー、2Dのゲームです。簡単に感想を言うと、とにかく面倒なことのないシンプルかつ気軽に楽しめるゲームになっています。ルールはかなり簡略化されており、動作も軽いです。そして情報がまとまった星系マップがあって、いちいち探しにいったりするような面倒な作業はありません。10分とか30分とかくらいの時間をつぶすのに最適です(一気に進めたくなって1日つぶれても責任もてませんが)。

ストーリーラインはメインプロットがなかなかのボリュームで、サブプロットもけっこうあります。

ダウンロードはこちらからできるようです。また、Steamはよくわかりませんが、そちらにもあるみたいです。それとDebian testingにはendless-skyというパッケージが(古い版ですが)すでにあります。

PlayersManual (英語)もあります。このマニュアルはいろいろゲーム内世界の雰囲気を伝えていておもしろいので、ぜひ読んでみてください。

難易度は、死んだら終わりみたいな修行僧プレイをしないかぎり、簡単です。行きたい方向に行きながら荷物を運んだりしているとかならず儲かります。割のいい交易ルートを探そうとかいう気はあまりおきませんでした。また、ある星系間で儲かる荷物の種類というのがあるのですが、それは事前にわかります。経済的には全然難しくありません。ただし、いきなり海賊の群れに突っ込んでなすすべもなく死ぬことがあります(治安のいいところもあります)。再ロードは一瞬でできますので、これについてもそういう意味で簡単です。

さて、このゲームは国際化されていません。1.0版(おそらくつぎのメジャーバージョン)では国際化する予定のようです。中国語翻訳を申し出ている人がいるのでおそらくCJK対応も大丈夫じゃないでしょうか。ただ、ミッションと各種説明の対訳は作ったので置いておきます(ライセンスはGPLv3またはそれ以降です)。自分が扱いやすいのでPOファイル形式にしました。かなり読みにくくてネタバレになりますが、ご了承ください。あいさつ文とか船の名前とかも作ってみましたが、(表示されないのはともかく)正しく動くかは未確認です。

最新版である0.9.8版向け。

ダウンロード endless-sky-0.9.8-ja-10.zip

ところで、ほかのだれも言ってないようなのでわたしのところだけかもしれませんが、キーを押すとリピートがかかってまともに動きません(Debian Testingの2016年11月あたりから。Debian9が出た時点でStableを再インストールしてもだめでした)。解消するパッチを置いておきます。

ダウンロード endless-sky.key-repeat-patch

PlayersManualとかぶるところもあると思いますが、つづきでちょっと解説します。

» 続きを読む

2016年2月 1日 (月)

Wesnothアドオンキャンペーン紹介(一覧)

Wesnothについて

Wesnothとかアドオンキャンペーンについては日本語情報がまとまっているWesnoth Wikiという定番サイトがあるので、そちらをご覧ください。

ゲームの中身については前述のwikiに書いてあるので、ここではおもに未プレイの人向けにストーリーその他の紹介をします。ネタバレなども含みますので、プレイする気になったらそこで読むのをやめたほうがよいかもしれません。

Wesnothアドオンキャンペーン紹介

このブログで紹介しているWesnothのアドオンキャンペーンの一覧を書いておきます。(アルファベット順)

題名日本語題名お勧めポイントお勧め度1.12対応
Affably Evil優しい悪意フィールドタイプのRPGのようなキャンペーンです。2/5
Alariel's Journey: A Faerie Taleアラリエルの旅——あるおとぎ話——かわいらしい妖精が登場するまさにおとぎ話です。3/5
Amaranthine Stone常世の石かわいらしい姫が登場する独特の雰囲気を持つキャンペーンです。3/5
A New Order新しい秩序高水準のストーリーとゲーム性を兼ね備えています。5/5
A Rough Lifeある粗末な人生ストーリー重視、ゲームは簡単。3/5
A Song of Fire炎の歌『ウェスノスの兵士』と同じ作者による、ファンタジーらしい設定の話です。3/5
Case of the Missing Scepter失われた笏の事件ホームズパスティーシュ。コミカルで気楽に楽しめます。皮肉が効いています。4/5
Legend of the Invincibles無敵の者たちの伝説RPGふうのやりこめるキャンペーン。英雄譚が好きな人へ。5/5
Only Death Behind死だけを背後に小さめのキャンペーンで、気軽に遊べます。2/5
Roboke's Islandローボークの島神秘の島を探検します。開発中。2/5
Saving Elensefarエレンスファー救援昔からずっとあるキャンペーン。高難度(経済的な意味で)。1/5
Soldier of Wesnothウェスノスの兵士WesnothやUMCの設定をていねいに拾ってる密度の濃いキャンペーンです。4/5
Swamplings沼人たちユーモラスな語り口で語られるストーリーがゲーム中のイベントとうまく組みあわされたクオリティの高いキャンペーンです。戦闘はふつう。5/5
The Flight of Drakesドレークの飛行小さめのキャンペーンで、気軽に遊べます。さわやかなお話。2/5
To Lands Unknown未知の土地へ全体で大きな絵になったマップが特徴です。3/5

おすすめ度は相対評価です。1でも普通レベル(翻訳したいと思えるレベル)です。(当たり前ですが、お勧めというのは、その対象より勧めてる人についてわかることの方が多そう…)

Wesnothアドオンキャンペーン紹介(番外編)

何のコンテンツも提供できませんが、有名どころも含めておもしろいやつ紹介しておきます。上のおすすめ度との比較にでも使ってください。

題名お勧めポイントお勧め度1.12対応
Elvish Dynasty RPGランダムシナリオかつ戦略要素ありの楽しいキャンペーンです。あの楽しい翻訳のノリは私には出せません。(0.12版はまだやったことがありませんが…)4/5
Fate of a Princess昔からあるキャンペーン。この作者はほかにもたくさん作っているので、気に入ったらやってみましょう。だいたい似た感じです。2/5
Invansion from the Unknownマンパワーが投入されていることがよくわかる作品。細部まで気を使っていることがわかります。シリアスな話というより英雄譚的なものと思います。そういう意味では似た感じの『炎の歌』と比較すると、ゲームとしての完成度が高く、登場人物などの魅力には乏しいといった感じです。(ここまでは1.90版以前の話です。1.99版は気になってたところ(Elyniaと会うところ)までしか見てませんが、細部は修正されていて、受ける印象は大きく変わるかもしれません。)3/5
Ooze Mini CampaignElvish Dynasty RPGの前日譚とも言える作品で、短いですがElvish Dynasty RPGと同様に楽しい作品です。3/5
Story of the Wose短いですが、とぼけた雰囲気(日本語訳の味?)が楽しいキャンペーンです。1/5
The Library of Kratemaqht楽しいキャンペーンですが、考えさせられるストーリーです。アンデッドの邪悪さ、人間性に対する絶望を思わせます。ゲームのバランスは悪いです。翻訳可能でないのが残念。作者はもう放棄したんだろうか?4/5

以下のつづきはだれの役にもたたないかも。ただの個人的覚書なので、すくなくともプレイヤーの役にはたちません。

» 続きを読む

『優しい悪意』 (Affably Evil) の紹介

Wesnothのアドオンキャンペーンである『優しい悪意』 (Affably Evil) の紹介です。

『無敵の者たちの伝説』 (以下LotI)と同じ作者による作品で、その前日譚です (ただし別の話なので、無関係にプレイできます)。自由に移動できるシナリオとクエストシナリオのある、フィールドタイプのRPGのような感じのキャンペーンです。まあ、クエストと言ってもかなり直線的ですが。

LotIに比べればふつうの長さのキャンペーンですが、ターン数制限のない移動用シナリオでレベルアップに励めるので、LotIのレベルアップやアイテムのしくみをあの長大キャンペーンをやることなく楽しめます。

念入りにレベルアップしておけば (ついでにアイテムとゴールドを集めれば) 簡単になるので、気楽にゲームを楽しみたい方にも向いています。困難にチャレンジしたければ、寄り道せずに進むこともできます。

ストーリーなんですが、プロットはよくできたほうでしょう。文章量も多いです。ですが、なんというか……自分の感想に正直言って自信がないのですが、変人の集まりのドタバタ物??? なんだろうか。でも喜劇じゃないです。最初はもしかしてまじめな風刺なのかと思いましたが、そうするとあまりにおかしいのでそれはなさそうです。皮肉っぽいのはおもしろくするための味つけでしょう。

LotIと関係するところとしては、あのダジャレみたいな名前の由来がわかります。それとちょっと前までのLotIとは矛盾しますが、最近LotIのほうが修正されつつある、ある人物の背景についてちょっと分かります。どちらもおまけ程度の話なので、どちらを先にやっても、あるいは片方しかやらなくても、まったく問題ないと思います。

で、メッセージの翻訳を置いておきます。ライセンスはGPLv3またはそれ以降です。

ダウンロード wesnoth-affably_evil-1.0.0b-ja-3.zip (493.9K)

穴からアンデッドが出てくるところでレベルアップに励むのが簡単だと思います。だたしクラックスの遺産が選べるのはストリクに行ったときです。遺産を育てたい場合は先にストリクに行きましょう。

2015年12月29日 (火)

Pangoって何のソフト?

Pangoって何のソフト?

はじめに

Pangoっていったいなんなんでしょう? 作っている人がどう思っているかはともかく、現状どうなっているか調べたものを、(五月雨式ですが)書いておきます。まあ、組版をしてくれるんじゃねーの? ということで日本語組版処理の要件(日本語版)を参考に調べました。

Pangoのマークアップだけで〜の続編みたいなものです。Battle for Wesnoth (以下Wesnoth)のgettext機構だけを使って(要するに食わせる文字列だけが変更できる)、きれいに日本語を出そうというのが動機です。

Wesnothは両端揃えしない設定だったので、Imagemagickを使って両端揃えした時の結果も追加しました。

» 続きを読む

2015年10月29日 (木)

Fontconfigを使って日本語斜体を別フォントに置き換える方法

Fontconfigを使って日本語斜体を別フォントに置き換える方法

はじめに

具体例としては特定のソフトの話なのですが、何かのヒントになるかもしれないのでfontconfigの話として書いておきます。そもそもの動機はPangoのマークアップだけで〜の最後をご覧ください。傍点は結構良かったのですが、怪しげなやりかたなのでいつか人に迷惑をかけそうでした。そこで、自分の設定だけで良くしようと思ったのがこの設定を試した理由です。

» 続きを読む

2015年9月23日 (水)

『未知の土地へ』 (To Lands Unknown) の紹介

Wesnothのアドオンキャンペーンである『未知の土地へ』 (To Lands Unknown) の紹介です。

意外に楽しめた、というと失礼だろうか。ただ戦うだけかと思ったら、まあただ戦うだけだったけど、いろいろ趣向が凝らしてあります。

ストーリーの特徴としては、「未知の土地へ」という主題をもとにした連作短編ふうになっています。Wesnothキャンペーンには向いた形式のような気もするけど、なぜかあまり見ないね。もちろん大枠としての「未知の土地」は「深淵Abyss」なんだけど、この作品中ではいわゆるマクガフィンに近いものがあります。

さて、このキャンペーンのいちばんの特徴は3D rendered mapだかmulti-hex landscape mapだかいう、マップ全体で立体的な大きな絵になっているやつです。最初はちょっと面倒ですが、慣れるでしょう。たしかに背景はきれいです。人物の絵のほうはこれとはまたちがう味のある独特な絵柄です。

ゲーム的にはEra of Magicのユニットを使うキャンペーンとなっています。プレイヤーの使うものは召喚士で、アラビアふうです。2版になってEra of Magicに特有な魔法円や魔法の存在の説明がされるようになってわかりやすくなりました。

メッセージの翻訳を置いておきます。ライセンスはGPLv3またはそれ以降です。

ダウンロード wesnoth-To_Lands_Unknown-2.1.0-ja-7.zip (304.7K)

簡単なヒントを書いておきます。

  • オアシスで回復できます。
  • とにかく使い捨てユニットをたくさん雇います。あからさまに水のあるところ以外はいつも火系でいいんじゃないでしょうか。ほかのはあまり試しませんでした。
  • 右クリックで何かできるってやつは、1ターン完全に消費します。すこしでも動いたら使えません。2版だと途中のシナリオで説明が入ります。
  • メヒールは戦闘中にはAMLAで能力アップするだけで、ユニットタイプは変わりません。ストーリー進行でユニットタイプが変わります。足は速くしておいたほうがよいと思います (が、試せなかった)。
  • 雇用できるユニットは結構増えます。黙って増えるので注意してください。ユニットタイプが変わるたびかもしれないけど、気をつけて見てませんでした。

難しかったので、つづきでネタバレヒントも書いておきます。

» 続きを読む

«dkmsの--kernelsourcedirは機能しない