読者です 読者をやめる 読者になる 読者になる

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

OCR tesseract

前回に引き続き、開発版の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 データから文字列生成したとか?


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

追記

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)

OCR tesseract

この記事は開発中のアルファ版を対象にしてます。その点には十分注意してください。要するに自己責任でどうぞって話です*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 に移行したので簡単な紹介

IT VPS Vultr

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

海外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 の設定メモ

Linux VPS Vultr ubuntu

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:あるに越したことはないですが

iOS アプリ開発入門本いろいろ(Swift 3 / Xcode 8 )

iOS 技術書 Swift

今年もiOS アプリ入門本の出版シーズン到来のようです。

さすがに初級向けの本を買う気はあまりないですが、過去に関連本の紹介記事(比較記事)を書いているので全くスルーするのも如何なものかと。

本屋で現物確認したものと過去に購入したものの改訂版を中心に紹介してみます。

少なくとも萩原先生のSwift 本の改訂版が出たら買うだろうとは思いますが。


出揃った時点で記事の構成を変える予定です。悪しからず。

すでに発売されているもの

『これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~ Swift3/Xcode8対応』

これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~ Swift3/Xcode8対応

これからつくる iPhoneアプリ開発入門 ~Swiftではじめるプログラミングの第一歩~ Swift3/Xcode8対応

iOSアプリ開発の未経験者向け。まず手を動かそうというスタイルの入門書。すでに固定レイアウトだけどKindle版が出てる。

サンプルアプリもタイマーアプリからカメラアプリ、WebAPIを利用するものまで幅広い(計6本)。非常にバランスが良い内容になっている。

書店で見た印象としては、プログラミング未経験者向けの講座の教科書としては非常に良さそう。 パート1とパート2の二部構成で、概ね丸二日あれば全体を修了できるような構成になっていて、セミナー教材としての利用をかなり意識しているように見える。

気になった点としてはメソッドの引数を列挙した表の説明文がリファレンスの直訳になっている点。そのままではわかりにくいのではないかと思った。

『詳細! Swift 3 iPhoneアプリ開発 入門ノート』

定番の解説書の改訂版。どちらかというと他のプログラミング言語の経験者向け。

この出版社はKindle版の発売が遅い印象だったんですが早くもKindle版が出ています(固定レイアウト)。

サポートサイト:詳細! Swift 3 iPhoneアプリ開発 入門ノート サポートサイト

特徴は、以下のとおり。

  • 旧版と同じく白地に青と黒の2色刷り。
  • サンプル数は旧版の347から360に増加
  • カバー範囲が広いのである程度はリファレンスとしても

内容はいいと思うのだけど、本の装丁(見た目)としては他と比べると少し見劣りする印象。早速正誤訂正ががっつり出てるじゃないですか。相変わらずです。

サポートページの本文1行目からして誤植ってるじゃないですか(詳細は1回でいい)。

弊社刊「詳細! 詳細! Swift 3 iPhoneアプリ開発 入門ノート」

基本的に解説する項目ごとに簡単なサンプルを解説し、そのサンプルに補足的な項目を加えていくスタイルなので360という数字に特に意味はないです。

旧版と大きく章構成は変化してないようです。Swift 3/Xcode 8への対応が中心。クラス名や定数のプレフィックスの変更への対応ぐらいに見える。

サンプルコードの新旧比較を取ろうかと思いましたが、フォルダ名の数字がズレていて面倒なのでやめました。

旧版を持っている立場からすると躊躇しますね。Swift 3対応のUIKitのリファレンス本とか逆引き系の本の電子版が出版されるならそちらを買いたいところです。

iPhoneアプリ開発講座 はじめてのSwift』

iPhoneアプリ開発講座 はじめてのSwift

iPhoneアプリ開発講座 はじめてのSwift

これもまだ発売されてないので不詳。12月1日付で販売開始されています。

今のところKindle 版はなし。

著者ご本人による紹介記事:Swift 入門書「iPhoneアプリ開発講座 はじめてのSwift」を執筆しました! | Developers.IO

クラスメソッドの中の人が書いてる。プログラミング未経験者がターゲット。

@ITにSwiftの解説記事を書いたり、雑誌に記事書いてる人みたいなのでそれなりに期待して良さそう。

クラスメソッド社の技術者ブログ:諏訪 悠紀 | Developers.IO

未発売

『本気ではじめるiPhoneアプリ作り Xcode 8.x+Swift 3.x対応』

本気ではじめるiPhoneアプリ作り Xcode 8.x+Swift 3.x対応 (ヤフー黒帯シリーズ)

本気ではじめるiPhoneアプリ作り Xcode 8.x+Swift 3.x対応 (ヤフー黒帯シリーズ)

まだ発売されていませんが、旧版と同じ構成を踏襲するならプログラミング経験者向けになりそう。

おそらく他のプログラミング言語の経験はあるけど、iOS向けは未経験という層がターゲット。

『ノンプログラマーのためのSwift教室 ゼロから作ろう! iPhoneアプリ

ノンプログラマーのためのSwift教室 ゼロから作ろう! iPhoneアプリ

ノンプログラマーのためのSwift教室 ゼロから作ろう! iPhoneアプリ

プログラミング未経験者向け。専門学校の非常勤講師の方が書いてる。

紹介文によると、

このプログラミング言語は奥が深いので、まずはお手本通り間違いなくソースコードを入力し、iPhoneアプリを動かすことを第一に目指してください。

と書いているのでサンプルを示した後で理屈を紹介するタイプだと予想される。

これまでにSwift or iOS 向けの本を書いた実績はないみたいなので関連本の著者としては新規参入組。

文法書

詳解Swift 第3版

詳解Swift 第3版

入門書を読んでさらにSwift を学ぶなら必須。

Amazon で予約できるようになってます。今のところ紙媒体のみか。第2版のKindle版はリフロー形式だったはずなのでKindle版を待つ予定。

まとめ

今から手を出すなら「これからつくる iPhoneアプリ開発入門」が未経験者に優しいと思います。

以前は森巧尚さんのほんもありだったけど、11月中旬時点で改訂版のアナウンスはないみたいです。
大重さんの方は手堅くまとめてるんだろうけど未経験だとちょっとしんどい。

iOSアプリ開発の入門本を書く著者陣も淘汰されているのかな。Swiftビギナーズ勉強会とクラスメソッドの方が新規参入組。

というか、同じ出版社(SBクリエイティブ)から入門本出し過ぎ。ちゃんと差別化はするんだろうけど、中級者向けとか、もう少し尖った内容の本もお願いしたい。


また後で追記すると思います。

それではでは。

今度の新機能「こよみモード」は面白い

雑記 はてな

昨日気づいたけど11月7日付ではてなブログのダッシュボードに「こよみモード」という新機能が追加されてる。

f:id:atuyosi:20161112115552p:plain

staff.hatenablog.com

非常にいい機能だと思う。特に毎日ブログを書くことを目標にしている方には有益では。

週1〜2記事レベルの更新頻度でもカレンダーで一覧表示するとすごい達成感がある。

手帳のカレンダーも月間ブロック表示が好きなのでこのUIは非常に好印象です。

ただし、スマートフォンからは使えないので注意。

ブログにログインしてダッシュボードから個別のブログ名を選択してタブを切り替えるという2ステップがちょっと面倒。

サブブログを作成している場合は複数ブログ統合してもらえると助かるかと思う。

面倒だからタブ切り替えではなく設定でデフォルトにできるようになるといいんじゃないでしょうか。

現状、カレンダーの日付部分をクリックするとその日付の0時扱いで予約投稿するように設定された状態で記事編集画面に切り替わるようです。これはどうなんだろう。

0時じゃないくてもいいと思うけど。


あまりUIに改善の余地はないかと思っていましたが、なかなか工夫の余地があるものですね。


これはLGTMというやつですよ。

それではまた。