今日も微速転進

ここではないどこかへ

開発版のTesseract 4.0 alpha をためしてみる その2

前回に引き続き、開発版のTesseract 4.0alpha ネタです。大した内容はありません。

a244.hateblo.jp

やったこと

前回の続きとして、新しいjpn.trainneddataファイルをバラして内容を確認してみます。

ファイルが混ざると面倒なので作業ディレクトリを2つ作ります。

$ mkdir 4.0a
$ mkdir 3.04

まず新しい方のjpn.traineddata。パスは Homebrew で開発版をインストールした場合した関係で、/usr/local/Cellar/tesseract/配下の'HEAD-'で始まるディレクトリ(フォルダ)になります。

$ combine_tessdata -u /usr/local/Cellar/tesseract/HEAD-23e420a_2/share/tessdata/jpn.traineddata 4.0a/jpn.
Wrote 4.0a/jpn.config
Wrote 4.0a/jpn.unicharset
Wrote 4.0a/jpn.unicharambigs
Wrote 4.0a/jpn.inttemp
Wrote 4.0a/jpn.pffmtable
Wrote 4.0a/jpn.normproto
Wrote 4.0a/jpn.punc-dawg
Wrote 4.0a/jpn.word-dawg
Wrote 4.0a/jpn.number-dawg
Wrote 4.0a/jpn.freq-dawg
Wrote 4.0a/jpn.shapetable
Wrote 4.0a/jpn.params-model
Wrote 4.0a/jpn.lstm
Wrote 4.0a/jpn.lstm-punc-dawg
Wrote 4.0a/jpn.lstm-word-dawg

以前と比較して、さりげなくファイルが増えています。

  • jpn.lstm
  • jpn.lstm-punc-dawg
  • jpn.lstm-word-dawg

dawgというのはデータ構造の名称の方(directed acyclic word graph : DAWG)のことでで、要は辞書データです。新しいlstmエンジン用の記号(句読点、Punctuation)辞書(punc-dawg)と、単語辞書(word-dawg)かと思います。

DAWGに関する参考ページ

tesstrain.shおよび、tesstrain_utils.shの修正内容からすると、既存コマンドのいくつかが新しく生成するファイルをリネームしているようです。

いつの間にかlstmtrainingというコマンドが追加されていますが、このコマンドが直接呼び出されている箇所は見つけられず。


比較対象のバージョン3.04用のjpn.trainneddataは以下の通り。

$ combine_tessdata -u ~/workspace/github_tesseract/tessdata/jpn.traineddata 3.04/jpn.
Extracting tessdata components from /Users/atuyosi/workspace/github_tesseract/tessdata/jpn.traineddata
Wrote 3.04/jpn.config
Wrote 3.04/jpn.unicharset
Wrote 3.04/jpn.unicharambigs
Wrote 3.04/jpn.inttemp
Wrote 3.04/jpn.pffmtable
Wrote 3.04/jpn.normproto
Wrote 3.04/jpn.punc-dawg
Wrote 3.04/jpn.word-dawg
Wrote 3.04/jpn.number-dawg
Wrote 3.04/jpn.freq-dawg
Wrote 3.04/jpn.shapetable
Wrote 3.04/jpn.params-model

md5チェックサムを比較すると新しく増えたファイル以外は全く同一でした。langdataリポジトリにはまだ更新はないみたいなので妥当といえば妥当です。


ついでなのでjpn.lstm-word-dawg を元のテキストに戻してみます。下記のコマンドでtemp.txtにdawg形式に変換される前の状態に戻せるはず。

$ dawg2wordlist 4.0a/jpn.unicharset 4.0a/jpn.lstm-word-dawg temp.txt
Loading word list from 4.0a/jpn.lstm-word-dawg
Reading squished dawg
Word list loaded.

中身を見ると理解不能な単語の羅列になっているようです。

$ wc -l temp.txt
  110077 temp.txt

先頭だけ抜粋。正直、何これというのが感想。

$ head -n 10 temp.txt
ワ
ワマ
ワマ想プ
ワマ想プナク燻ーア
ワマ想プナク燻ーア信
ワマ想プナク燻ーアな
ワマ想プKク燻ーア
ワマ想プケク燻ーア
ワマ想プれマ
ワマ想想|ナ

単語辞書をニューラルネットワークで自動生成したのでしょうかね? それともn-gram データから文字列生成したとか?


[2016/12/04 追記]

上記の件はバグかも。あるいは新しいエンジンは単語辞書を必要としないのか。

参考:LSTM: traineddata seem to be missing the lstm version of unicharset · Issue #527 · tesseract-ocr/tesseract · GitHub

jpn.unicharsetというファイルじゃなくて、専用のファイルがいるのか云々というのがIssueの内容。

まあ要調査ということで。

追記

OCRエンジンの再学習(トレーニング)について、公式Wiki に情報が記載されています*1

github.com

ざっくりいうと、以下のような感じ。

  • 学習プロセスの基本的な流れは同じだが、細部で変化している
  • 以前より遥かに時間がかかる
  • 完全に再学習させなくても良くなった
  • どこまで再学習させるかによって、いくつかの方法を選べる
  • これまでとは違い、非常に時間のかかるプロセスが存在するので完全に再学習プロセスを自動化できない

完全に再学習させない場合については以前より便利になると考えて良さそう。例えば書体の追加だけ、とか。


ざっと見たところ、変更点は以下。

  • 従来の.trファイルに変わり、.lstmfというファイルを修正する
  • .boxファイル(学習用の画像の、文字の位置と幅・高さ情報を記録したファイル)の書式の簡略化(行についての情報だけいいと書いてある)
  • これまでと異なり、同一画像内に複数のフォントが混在していても問題ない
  • クラスタ化ステップ(mftraining、cntraining, shapeclustering)にlstmtraining が使用される(と、書いてある)
  • たとえ新しいOCRエンジンしか使わないとしても、combine_tessdataコマンドは従来式のOCRエンジン用のファイルを要求する*2

新しいjpn.traineddataファイルが追加されたファイルを除いて以前とほとんど同じなのは、結局、追加されたファイル以外は従来式のOCRエンジン用ということで良さそう。

上記のWikiを見る限りjpn.lstm-number-dawgファイルが存在してもおかしくないはずだけど、そもそも生成元のファイルが空だったような気がするので当然か。

まとめ

ひとまずファイルが増えているということまでは確認しました。

それとlstmtrainingという思わせぶりなコマンドが追加されているようです。

以上です。

*1:二日前とか書いてあるし

*2:この点については将来改善予定と書いてある

開発版のTesseract 4.0 alphaをためしてみる(macOS)

この記事は開発中のアルファ版を対象にしてます。その点には十分注意してください。要するに自己責任でどうぞって話です*1

github.com

微妙に出遅れている感じがありますが……。

11月中旬ごろからメイン開発者のRay Smith氏によるバージョン 4.x のコードがgithubにコミットされています。

2、3日前からで各言語のXXX.traineddataファイルもアップロードされており*2ひとまず試せる状態。

まだ全ての言語が出揃っていませんが、英語などの主要言語はアップロードされているようです。

日本語用の言語別のデータもアップロードされています。


正式リリースがいつになるのかは不透明ですが、バージョン4.x の最大の特徴は今流行りのニューラルネットワーク技術の採用とのことです。 要するに深層学習とか強化学習とか言ってるアレ。

Long short-term memory(LSTM)による新認識エンジン*3

参考:4.0 with LSTM · tesseract-ocr/tesseract Wiki · GitHub

Ray Smithの講演資料:docs/das_tutorial2016 at master · tesseract-ocr/docs · GitHub

そもそもLSTM自体の仕組みがよくわかっていないので、OCR処理のどの部分にどういう形で組み込まれているのかはよくわかりません。


もう一つの新機能はTSV出力。地味だけど表形式のデータを読み取る場合には便利なはず。一応3.05ブランチ*4で入った新機能。

ただし、3.05というバージョンは今のところリリースされていません。されるかどうかは不明です。

macOS へのインストール

横着ですがHomebrew でインストールします。ビルドツールとして今までのautoconfとは別にcmakeも使えるようです。

依存ライブラリとしてOpenMPが必要になっています。そのため何も考えずに開発版をインストールしようとすると余裕で失敗します。

$ brew install tesseract --HEAD --with-training-tools
<skip>
lstm.cpp:22:10: fatal error: 'omp.h' file not found
#include <omp.h>
         ^
1 error generated.
make[2]: *** [lstm.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
<skip>

ヘッダファイルが見つからないというエラーですが、そもそもmacOS 付属のllvmOpenMPに対応していないようです。
対処法は、ビルド用のコンパイラとしてgccをインストールするか、llvmの最新版をインストールするか、です*5

Homebrew で使用するコンパイラを切り替える最も簡単な方法として、--ccオプションにコンパイラのパッケージ名を指定する方法を利用します。

パッケージ名としてllvmを指定しても受け付けてくれないのでgcc6をインストールしました。本来であれば、brew edit tesseractするか、横着せずにgit cloneしてビルドする方が望ましいはずですが、面倒なので……。

$ brew install homebrew/versions/gcc6

非常に時間がかかります。泣きたくなります。バージョン番号なしのgccパッケージの場合、brewコマンド側がパッケージ名として認識しないので苦肉の策です。

依存ライブラリだけHomebrewでインストールして、コンパイラ環境変数CCとかCXX)で切り替える方が短時間で済んだような気もします。


さて本命。

$ brew install tesseract --HEAD --with-training-tools --cc=gcc-6

ビルドにさほど時間はかからないはずですが、--HEADを指定すると各言語用のデータを全部ダウンロードする*6のでそれなりに時間がかかります。

バージョンの確認

お約束。

$ tesseract -v
tesseract 4.00.00alpha
 leptonica-1.73
  libjpeg 8d : libpng 1.6.26 : libtiff 4.0.7 : zlib 1.2.8

やたらゼロの数が多い。


オプションを眺めてみる。

$ tesseract -h
Usage:
  tesseract --help | --help-psm | --help-oem | --version
  tesseract --list-langs [--tessdata-dir PATH]
  tesseract --print-parameters [options...] [configfile...]
  tesseract imagename|stdin outputbase|stdout [options...] [configfile...]

OCR options:
  --tessdata-dir PATH   Specify the location of tessdata path.
  --user-words PATH     Specify the location of user words file.
  --user-patterns PATH  Specify the location of user patterns file.
  -l LANG[+LANG]        Specify language(s) used for OCR.
  -c VAR=VALUE          Set value for config variables.
                        Multiple -c arguments are allowed.
  -psm NUM              Specify page segmentation mode.
  -oem NUM              Specify OCR Engine mode.
NOTE: These options must occur before any configfile.

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,
            bypassing hacks that are Tesseract-specific.
OCR Engine modes:
  0    Original Tesseract only.
  1    Cube only.
  2    Tesseract + cube.
  3    Default, based on what is available.
  4    Neural nets (LSTM) only.

Single options:
  -h, --help            Show this help message.
  --help-psm            Show page segmentation modes.
  --help-oem            Show OCR Engine modes.
  -v, --version         Show version information.
  --list-langs          List available languages for tesseract engine.
  --print-parameters    Print tesseract parameters to stdout.

Page segmentation mode(psm)として11、12、13が追加されています。11と12は以前から存在したみたいです(ドキュメント未記載の隠しオプション扱い)。Sparse text と言われてもピンと来ませんが、文字(文章)がページ内に散らばっているイメージだと思います*7

特筆すべきは-oemオプションの方。

$ tesseract --help-oem
OCR Engine modes:
  0    Original Tesseract only.
  1    Cube only.
  2    Tesseract + cube.
  3    Default, based on what is available.
  4    Neural nets (LSTM) only.

ただし、Cubeエンジンは日本語非対応です。Cubeエンジンは将来廃止するという話だったはずですが、どうなるのかはわかりません。

お試し

まだアルファ版なので旧バージョンとの比較は先送りにします。

画像は過去記事から流用。

その1

f:id:atuyosi:20161201000524j:plain

その2

f:id:atuyosi:20161201003810j:plain

従来の認識エンジン

$ tesseract -oem 0 -psm 6  -l jpn image.jpg default_output
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica

最後の引数は出力ファイルの接頭辞です。この記事を書いている最中に思い出しましたが、ファイル名の接頭辞を指定する代わりにstdoutを指定すると標準出力に結果を出力してくれます……。

なお、設定を切り替えたい場合はコマンドライン引数の最後に指定できます(ドキュメント参照)。

$ cat default_output.txt
こ れは 日本語の文章です。 随 ヽろ はに ほへ と

まあ、平常運転です。サボらずに画像を拡大すべきです。-psmは6ではなくて7の方がベターかも。

その2

$ tesseract -oem 0 -psm 6  -l jpn image2.jpg default_output2
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
$ cat default_output2.txt
オープンソースの光学文字認識ライブラリを試してみます。 )
Tesseractー〇CR は600gーeの資金援助宣受けてゝ開発されてしヽるりししヽです。
英数字の認識率は97%とか。漢字や平仮名はどっでしよつか。

画像を拡大すればもっと良くなったはず。

新しい認識エンジン

$ tesseract -oem 4 -psm 6  -l jpn image.jpg lstm_output
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file

警告メッセージから見ると、一時ファイルに書き出して読み込んでる?

結果その1

$cat lstm_output.txt
これ は 日本 語 の 文章 で す 。 いろは に ほ へ と

結果その2

$ tesseract -oem 4 -psm 6  -l jpn image2.jpg lstm_output2
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file

認識対象の行数が増えると警告メッセージの行数も増えるの?

$ cat lstm_output2.txt
オープン ソ ー ス の 光 学 文 字 認 識 ラ イブ ラ リ を 試し て み ま す 。 。 _
TesseractLOCR は Google の 賄 金 援 助 を 受 け て 開発 され て いる ら し いで す 。
英 数 字 の 認 識 率 は 9700 と か 。 漆 字 や 平仮名 は どう で しょ うか 。

文字間のスペースが気になりますが、許容範囲でしょう。2行目は格段に良くなっているように見えます。3行目は"%"と”漢”を ミスってます。

いままでイマイチだった日本語中の英単語の認識率が改善しているかも。

警告メッセージが気になりますが、認識率自体は改善しそうです。


せっかくなので画像を拡大してみます。

$ convert -geometry 120% image.jpg image2_large.jpg
$ tesseract -oem 4 -psm 6  -l jpn image2_large.jpg lstm_output2
Tesseract Open Source OCR Engine v4.00.00alpha with Leptonica
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file
Warning in pixWriteMemPng: work-around: writing to a temp file
Warning in pixReadMemPng: work-around: writing to a temp file

さて、結果はどうか。

$ cat lstm_output3.txt
オ ー プ ブ プ ブン ソース の 光 学 文字 認識 ラ イ ブラ リ を 試し て み ます 。 。 __
TesseracrOCR は Google の 賞 金 援 助 を 受 け て 開発 され て いる らし い です 。
英 数字 の 認識 率 は 979%% と か 。 漢 字 や 平仮名 は ど う でしょ うか 。

1行目と3行目が不思議な出力になっています……。Google 翻訳も謎の文字列の繰り返しを出力するケースがあるので同じようなもの?


他にも試したいことはありますが、ひとまずここまで。

追記

tesseractコマンドのオプション形式が変化するようです。

Support standard parameter form --oem, --psm for tesseract executable by stweil · Pull Request #515 · tesseract-ocr/tesseract · GitHub

当面は 従来と同じ形式も使用できるようですが、今後は-psm(ハイフンは1つ)から--psm(ハイフンは2つ)になるようです。

一般的なGNUのコマンドと形式を合わせましょう、という変更です。影響の大きい変更はメジャーバージョンアップの時にやった方がいいよねとかなんとか。

まとめ

新しいOCRエンジンはこれまでよりは期待できるのではないでしょうか。

Google group のやり取りを読む限りでは従来の認識エンジンをどうするか、とか、メジャー番号が上がるついでに互換性のない変更を入れようとか色々と議論がされいます。

バージョン 4.0の前に3.05 をリリースするとかしないとか。

個人的にはTSVファイル出力機能だけでいいので3.05がリリースされる方がいいと思っています。


githubwikiにはSSE命令がどうのこうのという記述があるのでiOS用のライブラリへの移植は時間がかかりそうな雰囲気。

かなり適当なエントリになってますが以上です。

*1:安定版リリースだろうと転んでも泣かないのがOSS

*2:tessdata リポジトリの方を参照

*3:ニューラルネットワーク関連の技術を活用したということしか理解していないです

*4:いつのまにか3.05devから3.05にリネームされてる

*5:llvm の clang 3.9 からOpenMPに対応したとのこと

*6:tesseractのFormulaがそうなっているせいです

*7:試してないです

ConoHa から Vultr のVPS に移行したので簡単な紹介

Vultr のVPSに移行完了したので簡単な紹介。

海外VPS勢の中ではちょっとマイナーなようですが、なかなか良いVPSです。

  • 概要など
    • 特長
  • 各種設定
    • 制限など
  • 感想
  • 紹介とかクーポン
    • 公式の期限付きクーポン

概要など

  • KVMベースのVPSサービスで100% SSD。競合他社のVPSより高パフォーマンスというのが売り文句(と、主張している)。

特長

  • 時間あたり or 月額単位の課金
  • 支払いにクレジットカード、PayPal、ビットコインが使える(デポジット式)
  • 北米を筆頭に15のロケーションから選べる(東京リージョン提供中)
  • 通常のインスタンスとは別にストレージ用インスタンス(Storage Instance)と専有型のインスタンス("Dedicated Instance")
  • 一部のロケーション限定であるが、DDoS対策サービスを提供している(東京は対象外)
  • サポートからのレスポンスがとても速い
  • 一応、APIも提供されている

ストレージ用インスタンスはCPUコア数、メモリ容量よりメインのストレージの容量が欲しいケース向けのもの。ただし、ストレージ用と専有型のインスタンスはリージョンによっては売り切れ中。

サポートからのレスポンスの速さは圧倒的。

古い紹介記事だと東京を選ぶとネットワーク転送量が200MBとか400MBとか書かれていますが、現時点では一番安いタイプのインスタンスで月間1,000GBになっています。

また、ネットワーク転送量はinbound かoutbound の多い方が適用されるとのこと(Vultrの1ヶ月の基準は672時間)。

他にもKVMのスナップショットをアップロードしてOSイメージの代わりにできる模様。

続きを読む

Vultr における Ubuntu 16.04 Server の設定メモ

www.vultr.com

VPSConoha からVultrに移行したので備忘録。

一般的なUbuntu の設定については省略しています。

ConoHa では不要だった作業のみ。

作業内容など

VPS上で稼働しているという点を除けばただのUbuntuです。(記憶違いでなければ)さくらインターネットVPSなどは初期設定に修正が入っていたようですが、そういうお節介は無いようです。Vultr から提供されているOSイメージを使う場合の注意点を以下の通り。

よって上記2点のみ作業手順を記録しておきます。

なお、初期状態でOP25BによりSMTPポートからの通信がブロックされているのでサポートに解除を依頼し、VPSの管理画面から対象のサーバーを再起動する必要があります。

Ubuntu の設定としては過去記事を参照。

a244.hateblo.jp

どこのVPSを使うにしてもファイアーウォール(UFW or iptables )とssh、メールの転送設定は最低限必要だろうと思います。

Swap (swapfile) の設定

自分でISOイメージをアップロードしてOSをインストールした場合を除き、swapパーティションが作成されていません。また仮想ディスクに空き領域もないのでSwapパーティションの代わりにswapfileを作成、有効化します。

最も安いプランで768MBあるので以外にSwapなしでもいけそうに思えますが、用途によってはメモリを割り当てられなかった("cannot allocate memory")というエラーでプログラムのビルドや実行に失敗することがあります。設定しておいて損はないはずです。


基本的に公式サイトのドキュメントにしたがあって作業すれば問題なし。

Setup Swap File on Linux - Vultr.com

作業前の状態では、freeコマンドの出力を見てもSwap のトータルの容量はゼロのはず。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            740         483          54          10         202         117
Swap:             0           0           0

ddコマンドでディスクファイルを作成し、一般ユーザーが読み書きできないようにパーミッションを設定。

dd if=/dev/zero of=/swapfile count=2048 bs=1M
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 17.1776 s, 125 MB/s

$ sudo chmod 600 /swapfile

$ ls -lh /swapfile
-rw------- 1 root root 2.0G Nov  7 05:56 /swapfile


mkswapコマンドでswapパーティションとしてフォーマット。

$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=67eaf63b-e876-4528-b4dd-8bf4b910ea3d


swaponコマンドで有効化。

$ sudo swapon /swapfile

状態を確認。

$ free -m
              total        used        free      shared  buff/cache   available
Mem:            740         484          53          10         202         115
Swap:          2047           0        2047

問題がなければ再起動後もSwapを有効にするために/etc/fstabをに設定を追加。

/swapfile        none        swap    sw    0        0

タイムゾーンの設定

別に設定しなくてもログに表示される時刻が日本時間と9時間ずれるだけす。

サーバー側のアクセスログと、Google Analytics の時間がずれたり不便なので設定しておきます。手順はsystemd環境における設定手順と同じ。

まず現状確認から。

timedatectlコマンドのstatusを使うことで現在の状態を確認。

 $  timedatectl status
      Local time: Sun 2016-11-20 11:55:29 UTC
  Universal time: Sun 2016-11-20 11:55:29 UTC
        RTC time: Sun 2016-11-20 11:55:29
       Time zone: Etc/UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

設定可能なタイムゾーンtimedatectl list-timezonesで確認できます。ただし、全体で422、アジアだけでも80のタイムゾーンがあります。日本の時間に合わせるのであれば、"Asia/Tokyo"にすればOKです。

grepで絞り込みをかけてやると、以下の通り。

$ timedatectl list-timezones | grep Tokyo
Asia/Tokyo

素直に設定します。

$ sudo timedatectl set-timezone Asia/Tokyo

設定の確認

 timedatectl status
      Local time: Sun 2016-11-20 21:28:35 JST
  Universal time: Sun 2016-11-20 12:28:35 UTC
        RTC time: Sun 2016-11-20 12:28:35
       Time zone: Asia/Tokyo (JST, +0900)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

その2

$ date
Sun Nov 20 21:29:27 JST 2016

手元の時計と一致していれば問題なし。

何かと批判の多いsystemdですが、こういった基本設定に関して手順がが共通化されたという点はsystemdのメリットです。

そのほか

初期設定のNTPサーバーが海外のサーバーになっていますが実害はなさそうなので放置しています。

書評:『自作ゲーライフ: 個人スマフォゲームアプリのマネタイズ本』

購入して一気読みしたので簡単にレビューしておきます。

はてなの商品リンクが機能してないようです。商品名に記号が入るとダメなのか……。

概要

Kindle Unlimited の対象にもなってますね*1

Kindle の表示だと1742センテンス、紙媒体換算で200ページだそうなので比較的すぐ読めるボリュームです。

対象読者としては、

  • 「ゲームアプリだけ作って暮らしたい!」人
  • 「暮らせてるけど、もっといける気がする!」人

専業から兼業、学生その他、未経験まで含む。ただし最低限の用語を知らないと辛いかも。

書籍のテーマは マネタイズ(収益最大化)に関するネタ一般。

書いている方は個人向けゲームアプリ開発者としてはかなりすごいらしい。ゲームしない人間からしたらよく分からない。

難点を挙げるとするなら文章ばっかりやや単調な点。大まかな内容ごとにパートⅠとかパートⅡで分割するとか、あるいは適当な画像(ランキングのキャプチャ画像とか)でも入れると良かったのでは*2

面白いと思ったネタ

  • 意外と簡単なサーバー側の構成(というかまさかの……)
  • 飲んでいるサプリ
  • 食事の話
  • チート被害と対策

まさかアプリ関連のノウハウ本でサプリや食事の話が出てくるとは思わなかった。それと、あまり難しく考えない方がいいのかな、と思った。

そもそも個人の作ったアプリがヒットしないぐらいで「爆死」っていうのか、とか「サーバー炎上」などあまり聞かない言い回しが気になった。

ゲームアプリ業界はかなりカオスなんだろうという印象。

サーバー炎上って、要するにC10K問題じゃないのかな。

健康関係

『36. どんなサプリメントを食べてるの?』より引用*3

マルチビタミン剤・・・サプリメントの基本。Nature Made スーパーマルチビタミン&ミネラル。手始めにこれだけでも感。
②植物系錠剤・・・クロレラスピルリナ。野菜不足補強。座り作業は●●●命
エビオス錠・・・消化促進だけでなく栄養補給とも思ってます(笑)。座り作業は●●●命
養命酒・・・座り作業で足元の体温下がりがちなので、冬場は重宝。ジンジャーハイボールも相当体が温まる。ただしアルコールは飲みすぎると眠くなるので注意。
(後略)

「●●●」の部分はあえて伏せておきました。伏せるほどでもないですが、食事の前後に避けたい単語です。お察しください。

『座り作業は〜』というのはなかなかインパクトのある一文。クロレラスピルリナエビオス……。

『座り作業は〜』の文が2回出てくるのはよほど重要なのでしょう。

クロレラスピルリナのコンボは鉄分過剰が心配ですが、大丈夫なんでしょう、きっと*4


あと養命酒。まさかの養命酒

【第2類医薬品】薬用養命酒 1000mL

【第2類医薬品】薬用養命酒 1000mL

かなり年齢層が上の世代のイメージなんですが。

養命酒ってものすごく久しぶりに聞きましたよ。昔親が飲んでた時期があったかな。アルコールは飲まない主義なんでさすがにパスです。

養命酒、中身は変わっていないそうですが、キャッチコピー(キャッチフレーズ?)は年々変化してるらしいです。なんの本だったかマーケティング上の理由だとかなんとか。

食事関係

他人の食生活についてはあまり話題にならなそうなので貴重なんではないでしょうか。

『37. どんな食事を食べるの?』より引用。

もちろん高給半額弁当や半額の刺身狙いです・・!(笑)

閉店間際のスーパーに行くといかにもな人たちを沢山見かけます。

主に炭水化物+卵&肉野菜という組み合わせが言及されています。私も炭水化物に偏るとまずいので卵は割と意識して取るようにしています。

チート対策

被害額もかなりショッキングですが、それ以上にチート対策が面白い。

『44. チートの被害総額と、チート対策について』より。

「本人以外のランキングから見えないようにする」

・・・つまりサーバー側から亜空間に葬る処理をしています。

某忍者漫画の神威(かむい)、ですね。こんなところにすごい写輪眼(笑)の使い手が……。

モチベーション対策など

手塚治虫氏などの事例を筆頭に、最初はみんな鳴かず飛ばずだったという事例がいくつか紹介されてる。


『51. 爆死にはどう対応すれば良いですか?』より 。

(前略)ちゃんと作ったアプリを100本ぐらい出すまでは、あきらめるには早すぎると思います。

こういう文章を読むと救われるというか、どこかへ消えたやる気が戻ってくる感じがします。ある意味で「ふっかつのじゅもん」。いやザオリクか。

一万時間の訓練とかいうのもあるので100は無理でも10ぐらいは頑張りましょうか。

……耳鳴りを何とかしてからね。

まとめ

ゲームアプリ作者じゃなくても有益な本です。結局銀の弾丸というか、これだけやればいいというメソッドはなくて、コツコツといろんな施策を積み上げるしかないということだと思います。

……ついでいうと労働という魔王から逃げられない。

逆に言えば、特別な才能がなくても*5データを見ながら試行錯誤、トライアンドエラーの積み重ねでもある程度の収益までは十分狙える、と。

食事はともかくサプリメントについては考慮しようかと検討中。運動については言及されてないですが大丈夫なんでしょうかね((他人のことはとやかく言えないですが。

特に後半のトピックはやる気が消えそうなときに読み返すようにしたいと思います。

適当な書評になってますが、細かい部分を取り上げるときりがないのでこの辺で。


それではでは。

*1:今月はちょっと解約していますが

*2:似たようなことをAmazonのレビューに書いた

*3:サプリメントは「飲む」だと思うのだがまあいいや

*4:そういうのは栄養士さんに聞いてくれ

*5:あるに越したことはないですが

広告