今日も微速転進

ここではないどこかへ

Kindle Unlimited で読んだ本(2017年8月)

久しぶりに読み放題。来月も継続の方向。

a244.hateblo.jp

分類はちょっと面倒なのでやめました。

あまりにひどかった本は載せてないです。

『老人と海』

老人と海 (光文社古典新訳文庫)

老人と海 (光文社古典新訳文庫)

不漁続きの老人が、沖合で大きな獲物に遭遇。三昼夜にわたる格闘の末……という小説。

古い翻訳版は読んだことはないのでこの訳が他の訳と比べてどうかというのはわからない。ただ言えることは、独り言ブツブツ言いながらきっちり仕事はこなす職人気質の老人というのは嫌いじゃない。

本文自体はそこまですごいとは思わなかったが、作者の解説とあとがきを読んでから改めて感想について考えると味わい深い小説だと気づく。

訳者の解説を読むまで気がつかなかったが、老人の世話を焼く少年*1と、師匠風を吹かす老人の関係という点に着目するとなかなか面白い。つまらない意地をはる老人と、プライドを尊重しつつも世話を焼く少年。

老人の不調(不漁)により老人の元を離れざるを得ない弟子(少年)と、それを受け入れつつもどこかで惜しむ老人(師匠)の葛藤。これはこれで趣があるというかなんというか。

ヘミングウェイの小説はこの本が初。意外と読みやすかった。

『ハリー・ポッターと賢者の石 』

ハリー・ポッターと賢者の石 - Harry Potter and the Philosopher's Stone (ハリー・ポッターシリーズ)

ハリー・ポッターと賢者の石 - Harry Potter and the Philosopher's Stone (ハリー・ポッターシリーズ)

読みかけだけど書いておく。

意外なことに読み放題の対象になっていてびっくりした。読むのは初めてだけど面白い。

話題作を敬遠して起きながら旬が過ぎてから結局読んでいる……。

まあこれはこれで。

フリーランスで1000万

フリーランスの心構え的な感じの抽象論。

具体的なテクニックの話はなし。ちょっと肩透かしを食らった感じだけど、まあ読んで損するというわけでもないか。

Kindle Unlimited ではないけど、IT系としては『エンジニアがフリーランスで年収1000万円になるための稼ぎ方』の方が参考になりそう。

本当は正しかった日本の戦争

中国・韓国が死んでも隠したい 本当は正しかった日本の戦争

中国・韓国が死んでも隠したい 本当は正しかった日本の戦争

読後感は良くないが、有意義な本なのは間違いない。

普通高校の出身者ではないので日清戦争前後の事件・背景についてよく知らないところがあった。そういう意味では参考になったと思う。

しかしなんというか、やるせないなあホント。

日本は日本の歴史観があって当然。最後の一文を引用しておく。

自分たちの国のことは自分たちで決める。それが誇りある国と国民の姿である。他国の主張や恫喝を唯々諾々と受け入れてしまうことは、文化、文明の自殺・魂の死だけでなく、日本の死だと知るべきである。
黄文雄. 中国・韓国が死んでも隠したい 本当は正しかった日本の戦争 (Kindle の位置No.2801-2804). . Kindle 版.

Mac Fan 2017/09

Mac Fan 2017年9月号 [雑誌]

Mac Fan 2017年9月号 [雑誌]

固定レイアウトで字が小さいってのはちょっと辛い。

第2特集は悪くはなさそうだがすでにプログラムを書いているのでスルーした。

本文の後に付録の冊子が収録されているけど、ページ順序が逆なんですが。 これはどうなんだろうなあ。

付録の冊子は秀逸。この雑誌はたまにいい仕事をする。

テキストエディットの縦書き表示とか、(macOSの国語辞書も)結構知らない機能がある。知らない機能がある。

『「愛」で育てるコンテンツ! アイドル育成に学ぶ創作プロット術』

「愛」で育てるコンテンツ! アイドル育成に学ぶ創作プロット術 (トークメーカー新書Cheers!)

「愛」で育てるコンテンツ! アイドル育成に学ぶ創作プロット術 (トークメーカー新書Cheers!)

神戸アニストの件で話題になった方との座談会。これはこれで面白い。

宝島

宝島 (光文社古典新訳文庫)

宝島 (光文社古典新訳文庫)

新しい翻訳?

これも読みかけ。子供の頃になぜか親に読めと言われて一度読んだはずだけどかなり忘れている。どこの版だったか思い出せない……。

[証言録]海軍反省会

[証言録]海軍反省会

[証言録]海軍反省会

海軍オンリーだけど中堅幹部の証言録を文字起こししたもの。日本の組織のダメさというのを嫌という程実感させられるとともに、組織運営の参考になる。

ものすごく価値のある証言録。

紙媒体版と、Kindle版があって、Kindle Unlimited で読める。

難点はルビがないこと、注釈がないこと。

いくつかよくわからない語があったのでメモ。

  • GF(Grand Fleet または General Fleet から)

https://twitter.com/atuyosi_5/status/893460503518826498

SPI本

コンセプトは悪くないが、組版がイマイチ。本文ゴシックはちょっと。

固定レイアウト。110ページ。Wordあたりで作ったのかな?

SPI方式のメリットをイマイチ説明していない。 「はじめに」を読む限り、SPIに対応ししているが、I2C通信には対応していないデバイスが使えるようになる、と言いたいのかな?

この本の内容を実践するには、オシロスコープ、ラズパイ一式、温度センサ、が必要。 オシロスコープはなくても掲載されている画像を見るだけでも悪くはなさそう。

さすがにオシロスコープは本気で電子工作やるわけじゃないので持ってないやろ。

「SDのブートに〜」これはおかしい。SDのフォーマットの話をしていないのと、 空のSDのルートフォルダと書くべき。

Python のバージョンは?

ラズパイのデフォルトなら2.7系だけどさ。

重箱の隅ではあるけど、ところどころ「と思います」が気になった。

まとめ

海軍反省会は読み応えがある。時間はかかるだろうけど組織運営の参考になるのは確実だと思っている。

あとは教養として小説系は積極的に読むようにしたい。

*1:最初は15、6歳くらいだろうと思いながら読んでいた

厚生労働省のブラック企業リストをPythonで解析する(PDFMiner.six)

タイトルの通り、5月ごろに話題になった例のPDFをPython3 + PDFMiner.six でパースしてTSV(タブ区切りテキスト化)する話です。

以前からやろうと思っていながら放置していました。

すでにgithub でTSVデータにして変換してくださった方がいるので完全に二番煎じ。

ただ、そのTSVデータ、PDFをWordで開いてHTMLに変換してパースしていると書かれており、さすがにナンセンスな感じが拭えない*1

github.com

自分でやらなくても他人様の成果物をありがたく使わせてもらえばいいやと言いたいところですが、このTSVファイル、ちょっと気に入らないところがあって……。

  • 行末に余計なタブがある
  • 各列の値が全部ダブルクォートで囲まれている
  • 右端のカラムが複数行になっている場合の扱い(送検、不起訴処分、とか)*2

まあちょっと自分でやってみたら地味に面倒でした。

PDFのまま解析するライブラリあるんだからそっちを使えばすぐに解決するかと思ったら大違いだったという。

PythonのPDFライブラリを使えばいいと安直に考えたのがそもそもの発端……。

準備

PythonにはPDFMiner というライブラリがあるのでこれを使用。

Google先生のご託宣によると、Python 2.x 版とPython 3.x 版がある。今回はPython 3.x版を使う。

github.com

PDFMiner2というのも見つけたが、メンテナンスされているのかはっきりしない。PDFLibの方は読み書き両方できるようだけど構造解析まではできるのかわからなかったのでひとまず保留。

PDFMiner のインストール

まずはインストールする。pip3は環境によってはpipのはず。

pip3 install pdfminer.six

web上の情報を見ると日本語を扱うためにはcmapが必要なのでソースからビルドしろと書いてある……。何も気にせずパッケージ管理ツール任せでインストールしたけど問題は起きていない。

注意点としては、付属のコマンドの文字コードがCR+LFになっているせいでpyenv環境下ではエラーになって実行できない。

$ pdf2txt.py pdfminer.six/samples/simple1.pdf
env: python\r: No such file or directory

適当にエディタで開いて開業コードを変換しておく(もしくはdos2unixとか)。

日本語の縦書きサンプル(宮沢賢治の文章の序文)が付属しているのでテストできる。

$ pdf2txt.py pdfminer.six/samples/simple1.pdf
(省略)

“Hello"とか"World"とか出力されれば正しくインストールされている。なんか違和感のあるサンプルだけどそっとしておこう。

$ pdf2txt.py -V pdfminer.six/samples/jo.pdf
(省略)

ちゃんと日本語の文章が(横書きに変換されて)表示される。-Vオプションは縦書き用のオプション。

解析

表部分がどういう形式になっているのかPDFの構造を確認しないとなんとも言えない。表の行と列に対してループをまわしてそれぞれのセルのデータを取り出せるというのが理想。

そもそものPDFのファイル形式は下記のサイトが詳しい。今回はPDFMinerライブラリが細かいことはやってくれるのでそれほど気にしなくてもいい。

参考:詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方 - プログラムモグモグ

ファイルの構造を確認

厚生労働省のPDFが素直なPDFファイルだといいのですが、変な構造だったりすると非常に困る……。

結論から言うと、2ページ目位以降はタイトルと都道府県労働局の名称、日付のデータの下にテキストがたくさん並ぶという形式。

  • なぜか文字列の最後に全角スペースがくっついている箇所がある(北海道の「(有)市木 」 *3) -カラムの幅を超える文字列は折り返される
  • 複数の要素を列挙しているカラムがある(「違反法条」、「その他参考事項」)
  • 会社名と支店名の間の空白が不統一(兵庫県労働局と岡山県労働局)

PDFMinerでPDFを読み込むとLTTextBoxクラスのインスタンスからget_textメソッドでテキストを取り出せる。

表紙ページをダンプすると全角スペース*4がずらりと出力されるのでびっくりする。おそらく右寄せせずに全角スペースを連打して書式を整えたんでしょう、わかります。
WordかExcelかはともかく、文字列を右寄せしたいならちゃんとソフトウェア側の機能を使うべき。

PDFMiner によるページ構造解析について

PDFそのものにはページ以外の論理構造はない。紙を模した論理的な領域の特定の位置に文字を配置するというデータ形式なので表なのか普通の文章かどうかは関係がない。よって表形式だからといってそのまま構造を保ったまま文字を取り出すには構造を推定する必要がある。

PDFMinerは不完全ながら構造を解析(推定)してページ内のオブジェクトにアクセスできる。一見、ちゃんと表の行と列の順序になっていると見せかけてところどころ変な順序になっている。そのためバウンディングボックスの値を確認してソートし直す必要がある……。

ドキュメントによるとLTTextBoxの中にLTTextLineクラスのノードとLTCharが格納されているはずだけど、LTTextBoxget_textメソッド経由で文字列としてテキストを取り出せているので深追いはしない。

このPDF、一部のセル(1列目と4、5列目)は折り返されているので改行コードを除去する必要があるのと、4列目および5列目はリスト形式にする必要がある。

大雑把にいうと、各ページの0番目のオブジェクトがページのタイトル、1番目が都道府県労働局となっている。最終更新日だけが6番目という不自然な位置だけど残りの2番目から8番目がヘッダ行。

残りが実際のデータなんだけど、微妙に面倒なことになっていて列の切り出しが不完全な箇所がある。どのタイミングで切り出すかはともかく、基本的にはテキストを取り出して半角スペースで分割すれば良い。

出力用のスクリプト

実装するうえでの方針の説明(こっちが本命)。

  • 1ページ目はスキップする
  • 企業名だけではなくどこの都道府県の労働局の管轄かという情報も残す
  • 出力形式はひとまずTSV(将来的にはJSONか)

ごく一部とはいえ複数の列が結合してひとまとまりのテキストの数号になってしまう。バウンディングボックスの左上の座標でソートして整列しようとしたが各カラム内でy軸方向にセンタリングされているせいでうまくいかず……。

試行錯誤の末、バウンディングボックスのx座標と、y座標の平均をそれぞれ使用してソート。バウンディングボックスを綺麗に切り出して重心を計算してソートすればもっとスマートなコードになるはず。もっと踏み込むならモンキーパッチ(オープンクラス)でバウンディングボックスの重心を計算するメソッドを追加してもいいかも。

なお、PDFの座標系は左下原点系なので注意。

Convert PDF to TSV ( from Japan's MHLW illegal com …

対症療法的なスクリプトとなっております。PDFMiner側のオブジェクトのままではなく自前で扱いやすいデータ構造に変換してしまった方がもっとスマートにできたような気がします。

特に隣の列と結合している部分は罫線のオブジェクトから幅に関する情報を取り出せばすんなり処理できたんじゃないかと。

テキストの集合に対して自分で領域分割してやればよかったのか。

PDFのファイル構造の仕様書と解説本自体はあるので時間のあるうちにしっかり勉強したいと思ってます。

成果物

冒頭のリンク先のリポジトリにあるものとは微妙に形式が異なります。ダブルクォートによるエスケープがないのと、最終カラムはカンマ区切りのリストになっています。各カラムの列の順序は元のPDFと同じです。

厚生労働省ブラック企業リスト(2017年8月15日版) · GitHub

また、企業名の表記における区切り文字は元のまま統一されていません。

そのほか感想など

地味に面倒だったというのが一番の感想。PDFの構造解析の問題をWordでHTMLに変換することで回避できているとすると、Microsoftの文書の構造解析技術はかなりすごいのではないかと思った。

過去記事でネタにしたMicrosoftのOCR用のAPIの性能から推測すると文書の構造解析はかなりいいのではないかと思う。


それはさておき、5月に公表されてから基本的に毎月更新しているみたいですが、大変残念な欠陥があるようです。

毎回ファイル名が同じ!!

つまり、一定期間経過するとこのリストから企業名が消えてしまうことが予想される。というか掲載基準にそう書いてある……。

ほとぼりが冷めたら勝手に消えていくというシステム。これはどうかと思います。


このデータをもとに検索サイトを作ってやればいいだけですし、もちろんそのつもりだったりします。

補足

厚生労働省のサイト。

各都道府県別のデータが欲しいなら、それぞれの都道府県の労働局のページで公開されているPDFを入手してパースしてもいいと思う。

例えば北海道労働局。

労働基準関係法令違反に係る公表事案 | 北海道労働局

厚生労働省と更新されるタイミングが違うのかどうかは未確認。

参考サイト

関連資料・本

*1:Word 2013からPDFをインポートできるらしい

*2:最後のカラムなので複数列に分割した方が実は扱いやすい?

*3:元は全角記号と全角空白。macOSのプレビューでコピーすると半角に変換される

*4:ユニコードエスケープされた状態

ZenFone 3 Max(ZC553KL)をAndroid 7.1 に更新してみた話

ま・さ・かのアップデート提供。Android 7.1.1 Nougat へのアップデート。

「ZenFone Zoom S (ZE553KL)」のポートレートモード実装と「ZenFone 3 Max (ZC553KL)」のデュアルスタンバイ(4G+3G)実装を含む、Android 7.1への FOTAアップデート開始

海外版に遅れることほぼ3ヶ月。個人的に完全に絶望視していたところにサプライズ。

しかも新機能としていわゆるDSDS対応(4G+3G)。

元からハードウェア的には対応していたけどソフト的に無効化していたということになるのか。


Zenfone 3 Max の、5.5インチモデル(ZC553KL)についての記事です。廉価版と誤解なきよう。

DSDSはともかく、レッツゴー人柱。

f:id:atuyosi:20170816230132j:plain:w320 f:id:atuyosi:20170816230112j:plain:w320

アップデート後のバージョン情報とファームウェアの詳細。

Android 7.x Nouget に関して

あとは適当にググってくださいってことで。

アップデートについて

データのバックアップなどは有志によるWikiを参照。

Android 7.1 Nougat アップデートまとめ - ZenFone 3(ASUS)まとめWiki

アップデートした人間が言うのもなんか変だけど、ダウングレードは不可能ではないみたいだけどめんどくさいっぽいのでよく考えた方がいいと思う。

バックアップなど

購入してから日が浅いのと、課金アプリは購入していないのでそれほど大事なデータはない。

Android 自体の機能で、Google アカウントに紐づいたデータは自動バックアップされている*1

課金系のアプリの場合は引き継ぎ手順を開発元に確認するべき。アプリ側が対応しているなら機種変更用のコードか何かあるはず。

念のため写真データをmicroSDにコピーしておいた。

アップデート後に気づいたが、K-9 Mail はアカウント情報をエクスポート・インポートできるみたい。

アップデート

16:00過ぎぐらいに通知が表示された。

表示されないなら「設定」から「システムアップデート」

所要時間10分は大嘘で、30分ぐらいで完了した。

アップデート後の作業

誤動作対策として「設定」から「データの初期化」。初期設定を一通りやり直し。

画面の表示に従っていけば特に難しくはない。めんどくさいだけ。

感想

  • 「設定」メニューの項目が増えている
  • ロック状態で電源ボタンを押した後の反応が速い気がする
  • ロック画面の背景が動的に変わってカッコいい

ロック状態からの反応が改善したっぽいので個人的には満足です。あとは不定期にmicroSDを見失うと挙動*2が改善されているといいのですが。

新機能について

UIに関してはASUS独自のカスタマイズとしてZenUIなるものがインストールされている関係で大きく変化はしない。

ひとまず便利そうなものだけリストアップ。

  • 電話番号のブロックリスト(標準機能として)
  • マルチウィンドウ
  • アプリショートカット(未対応っぽい)

1番目はそのまんま。データ通信用のSIMではあまり恩恵がなさそう。

2番目のマルチウィンドウモードを使うには、「設定」から「ASUSカスタマイズ」とメニューを辿って、「マルチタスクボタン」の設定を変える必要がある。便利なのか疑問。タブレット向けの機能だろうと思う。

f:id:atuyosi:20170816224034j:plain
Chormを起動しつつATOKの設定画面を表示した状態

3番目はよくわからない。アプリのアイコンを長押しすると、ホーム画面の編集、つまりアイコンの移動になってしまうのですが……。

ランチャー上でロングタップってどこのことを言っているのか。あるいはZenUI ではできない?

この機能についてはしばらく保留。

各種初期設定

初期化した関係でやり直し。メール設定がめんどい。

削除アプリ

とりあえず確実に消せるものは削除。

  • 電子書籍
  • i-フィルター
  • No Limit
  • Puffin
  • SimCity
  • TripAdvisor

Facebook は無効化。Messenger も無効化。Facebook App Manager は消したいけど消せないし無効化もできない?

Facebook よ、どれだけヘイトを高めるつもりなんだ……。

省電力設定

とりあえず「スマート」に設定した(多分デフォルト)。気が向いたらちゃんとやる予定。

ベンチマーク

同じハードウェアなんだからOSのアップデートで大きく変わるはずはないだろうと思ったら意外とスコアが変化している。

f:id:atuyosi:20170816223240j:plain:w320

GeekBench ver. 4 の結果。

  • シングルコアの値がAndroid 6.01 に対して約5%ほど低下している
  • マルチコアの値は約20%アップ
  • なぜかメモリに関するスコアが低下している

メモリバンド幅の値が低下している影響なのか、画像処理系のスコアが落ちている。一方、特定の測定項目(Luaとか HTML5 Parse)においてはダブルスコアになっている項目がある。

新規導入のJITコンパイラ(?)のおかげでマルチコアの値が伸びているっぽいけどちょっと不思議。メモリバンド幅の低下原因は不明。

スコアの下がった項目の分を、他の項目のスコアの向上で補った結果、トータルで20%アップというスコアになっている。
ただし、体感速度に効いてくるかどうかはアプリの種類による。

測定パラメーターが違うのか、あるいはこの機種自体、チューニングがイマイチだったのか。


ベンチマークスコアの変化の理由は釈然としませんが、体感速度は改善している気がします(個人の感想です)。

関連情報

Android 7.1 Nougat アップデートまとめ - ZenFone 3(ASUS)まとめWiki

まとめ

アップデート直後の印象としてはまあ悪くない、という感じです。逆にいうと無理にアップデートするほどでもない。

個人的にはロック状態(スクリーンOFF)の状態で電源ボタンを押してからの反応が速いので満足です。

一度アップデートしてから元に戻すのは面倒な感じなので慌てずにしばらく様子見するのがいいのではないでしょうか。


こちらからは以上です。

*1:有効にしている場合

*2:バッテリ残量が一定値を下回って節電モードになると発生することが多い

今更かよASUS……(ZenFone 3 Max(ZC553KL)、待望のアップデート)

www.itmedia.co.jp

アップデートの提供開始は8月16日の15:00以降、らしい。

本当に国内向けなのかね?
ホントにアップデートきました。

ZenFone 3 Maxでは、新たにLTEと3Gのデュアルスタンバイ(DSDS)に対応する。ZenFone 3 MaxにはSIMスロットが2つあるが、当初はLTEと3Gのデュアルスタンバイには対応していなかった。

まあ、DSDS使う予定は今の所ないけど。

Android 7系の新機能は興味あるので、大変結構ではある。

公式アナウンス:「ZenFone Zoom S (ZE553KL)」のポートレートモード実装と「ZenFone 3 Max (ZC553KL)」のデュアルスタンバイ(4G+3G)実装を含む、Android 7.1への FOTAアップデート開始


アプリの動作テスト用としてはAndroid 6.x のままの方がいいけど、新機能を試す方がいいか。

経緯

まあ、数ヶ月遅れはひどいよね。

a244.hateblo.jp

a244.hateblo.jp

その後

アップデート完了。下記のエントリを参照。

a244.hateblo.jp

アメリカの納税者番号(EIN)の手続きをした話(郵送待ち)

f:id:atuyosi:20170812015915j:plain:w320

呼称の日本語訳が複数あって、よくわからないのですが、いわゆる納税者番号、米国法人番号、法人納税者番号とか雇用者番号呼ばれているという。


英語表記はEmployer Identification Number: EIN、です。雇用者識別番号という訳が一番自然な気がしますが。

このEINというのをゲットしておくとアメリカ企業経由の収入に関して二重課税を回避できるらしいので。


AndroidアプリとかKindleで本を出したりとかして左団扇で暮らしたいのです。

とりあえずFAX送りつけただけなので結果はまだなんですが。

申請手段ですが、アメリカ合衆国内国歳入庁(IRS)のサイトによれば、

  • 電話
  • FAX
  • 郵送
  • Web申請

という手段があるようです。残念ですがWebからの申請フォームはアメリカの社会保障番号の入力が必要なので日本人(というか外国人)には無理です。

残念ながらFAXの送受信手段がないので、コンビニからFAXして郵送で受け取る作戦です。

e-FAXなどPCからFAXを送受信する手段もありますが、あまりあちこち個人情報をばら撒きたくないんで見送り。

FAXを送信してあとはのんびり郵便が来るのを待つ作戦。

用紙の入手と記入

IRSのWebサイトへ。

How to Apply for an EIN

文中の"Form SS-4 (PDF) “というリンクをクリックするとPDFが開く。

もしくは、以下のページからForm SS-4のリンクをたどる。

Forms & Pubs

各記入欄についての注意事項:https://www.irs.gov/pub/irs-pdf/iss4.pdf


申請用のpdfの冒頭にあれこれ注意書きがありますが、"Disregarded entities"のための注意書きであり普通は無視でいいはず。

実際に記入するには3ページめ。どの記入欄に書き込むべきかは、4ページ目を参照。

“Is a foreign person needing an EIN to comply with IRS withholding regulations"に該当すると判断しました。

署名欄以外はPC側で記入して、印刷して署名と日付を書く。


色々と不明な用語が出てきます。"P.O. box number"というのはアメリカの郵便局の私書箱番号のことみたいです。

参考:Post-office box - Wikipedia

また、"Disregarded entities"というのは法人格扱いされない法人、らしいです。「みなし事業体」というものがあるそうで。税務上は個人事業主だけど法律上は別の事業主体として扱われるので責任は限定され、失敗しても個人資産は保護されるとかなんとか。

FAX 送信について

FAX番号は下記のページにある。ただし、国番号が付加されていないので注意する*1

“Where to File Your Taxes” (for Form SS-4)

実際の送信時は、

010 1 304 707 9471

※ 2017年8月時点

送信失敗続きで心を折られるらしいですが、私は2回目で成功。夜の10時ごろ送信。

海外からの申請用のFAX番号なんで、アメリカより他の国の人間が活動していない時間がいいのではないかと思いました。

あとは3、4週間待つだけ。

参考サイト


ではまた。

*1:危うく違う番号にに送信しかけたが通信エラーでことなきを得た……。なんかおかしいと思いつつ送信して、送信結果表に「米国/カナダ以外」と書いてあるのを見て気がついた。

広告