中野智文のブログ

データ・マエショリストのメモ

mac の gimp から印刷

背景

証明書写真を印刷したい。1mm もサイズが違わないように印刷したい。

結論

macgimp から印刷はうまくいかない。一旦、jpeg にして、jpegmac の previewer で詳細な印刷設定をしてうまくいく。

印刷前までの方法

ほぼ、下記の通り

fanblogs.jp

ただし事前に次のようなプロセスがあった。

背景にできる影

壁までの距離が近いと、本人の影ができる。 だから、壁までの距離がそれなり(3m)にある場所を選んだ。

縦撮り

横にしても横が無駄に広いばかりか、上と下が規定のサイズに収まらないことが過去にあった。証明写真は縦向きなんだから縦撮り。

フラッシュ

フラッシュは使ったが、手で遮って、反射光を天井に当てるようにした。ビルトインのフラッシュじゃなければ特にこのあたりのテクニックは必要なさそう。

切り抜き

証明写真を加工する前に、始めに証明写真のサイズに切り抜きたい。なぜなら、切り抜きの段階で写真が不適切なことがわかることもあるから。 自分はpicasa を利用しているので picasa で切り抜きを証明写真のサイズのカスタムアスペクト比を先に作ってから、目視 で切り抜き。

gimp での加工

背景の処理

背景はオフホワイトとかでもNGで完全な白が必要らしい。そこで背景を選択し、白にした。

レンジの調整

これは

上記のページのように、写真を入れる。

既にサイズ通りの比になっているので特に難しいことは無いはず。

背景に grid を書く。

背景が白だと、どこを切ったらいいかわからない。トンボを入れると、ぎりだと写真の中に線が入ってしまう。 無難そうな水色の格子を背景に作った。

https://docs.gimp.org/ja/plug-in-grid.html

gimp での印刷

何度やってもうまくいかない。そもそも後部トレーの紙を給紙しなくてはいけないのに、普通紙を給紙してくる。馬鹿か。 そして、結論の方法を試し、やっと印刷できた。

トラフィックエクスチェンジの闇

背景

ad fraud を追う間に、「トラフィックエクスチェンジ」というサービスを知ることになった。

トラフィックエクスチェンジとは、サイト間でユーザを交換しようという試みである。 まだ検索エンジンがあまり発展していなかった時代などは、サイト間のリンクのみが唯一自分のサイトに訪れてもらえる方法だった。 そのようなときに相互リンクをはることで、お互いのページを行き来できるようになる。 相互リンクを貼る場合、お互いにメールや掲示板を利用して連絡をする必要がある。

トラフィックエクスチェンジのシステムはそのような背景があって、登録しておけば別の登録サイトにランダムにジャンプしてくれるツールだった。

トラフィックエクスチェンジの闇

検索エンジンSNSが発達した今、それは全く別物になっている。 詳しくは下記のページを御覧いただきたい。

https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8

トラフィックをやり取りすることで、将来的に換金可能なポイントがもらえるシステムになっている。 それも自動的に別サイトに遷移する仕組みになっていて、人間が不在でも時間が経てばどんどんポイントがたまるのだ。

こういう本もあるくらいだから、

初めから自動化されているのは、本当に素晴らしいことだと思う。 人間不在でページが遷移することになんの意味があるかわからないが、その自動化まですでに仕込んであるのは、素晴らしいとことだと思う。

ところが、Web広告を出す側にとっては大きな問題だ。人間が見ていない広告に価値はない。

トラフィックエクスチェンジを行っている方へお願い。

adblock を入れてください。

Chromeこちhttps://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjyiJb7r-XUAhWDerwKHc3CCi0QFgguMAE&url=https%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fadblock-plus%2Fcfhdojbkjhnklbpkdaibdccddilifddb%3Fhl%3Dja&usg=AFQjCNHqQbwfsSRVUqnfKN4MDGPo2VCs5g

Firefoxこちhttps://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwjyiJb7r-XUAhWDerwKHc3CCi0QFgg1MAI&url=https%3A%2F%2Faddons.mozilla.org%2Fja%2Ffirefox%2Faddon%2Fadblock-plus%2F%3Fsrc%3Dhp-dl-mostpopular&usg=AFQjCNGhrDoOldicKhr0a9YJbDWgsfvO8g

29戦中29連勝の勝率の信頼区間を求める

背景

仕事でどうしても必要になった(嘘)

Wilson score interval で計算する。

早速だけど、下記の式を使ってみよう。

nakano-tomofumi.hatenablog.com

今回は、p = 0.05 で求める。標準正規分布の分位数はZ=1.96となる。

よって、

UCB: (29+1.96*1.96/2+1.96*sqrt(29*(29-29)/29+1.96*1.96/4))/(29+1.96*1.96)
LCB: (29+1.96*1.96/2-1.96*sqrt(29*(29-29)/29+1.96*1.96/4))/(29+1.96*1.96)

これを python でそれぞれ求める。

$ python
>>> import math
>>> (29+1.96*1.96/2+1.96*math.sqrt(29*(29-29)/29+1.96*1.96/4))/(29+1.96*1.96)
1.0
>>> (29+1.96*1.96/2-1.96*math.sqrt(29*(29-29)/29+1.96*1.96/4))/(29+1.96*1.96)
0.8830264055344441
>>>

勝率は 88.3%から100%(p=0.05)となった。

結論

勝率は 88.3%から100%(p=0.05)

信頼上限より大きくないから、片側の信頼区間は両側の信頼区間と同じである。

勝率は 88.3%以上(p=0.025)

でもいいかもしれない。

BigQuery でテーブルを正規表現を指定して削除する

背景

BigQuery で特定のテーブルをワイルドカードで指定して削除したいことがある。ところが、CLIコマンドである bq はそのようなワイルドカード指定はできない。

データセットのファイル一覧を出して、それを egrep で抽出する

下記の <dataset_name> と、<regular expression> にそれぞれ、データセット名と正規表現を書く。

bq --format json ls -n 10000 <dataset_name> | jq -r 'map("<dataset_name>."+ .tableReference.tableId)|.[]' | egrep '<regular expression>' | xargs -L1 bq rm -f

ただし、本当に望ましいファイルが対象となっているかを最後の削除を除いたコマンドである、

bq --format json ls -n 10000 <dataset_name> | jq -r 'map("<dataset_name>."+ .tableReference.tableId)|.[]' | egrep '<regular expression>' 

で一旦確認したり、ファイル数を少なくして実行してみることをおすすめする。

追記

  • 2018-06-12 .tableId で取得できなくなっていたので、.tableReference.tableId に修正

pdf を送ると、「Kindleに送信された文書に問題がありました」

症状

次の論文をchromeでダウンロードして、

https://openreview.net/pdf?id=BkJsCIcgl

mail で kindle に送信すると次のようなエラーメールが届く

2017年6月19日(月) 午前 09:59(JST) に送信された以下のドキュメントは、指定されたKindle に送信できませんでした:
XXXXX.pdf

Kindle パーソナル・ドキュメントで変換・転送できるドキュメントは以下のファイル形式です:
Microsoft Word (.doc, .docx)
Rich Text Format (.rtf)
HTML (.htm, .html)
Text (.txt) documents
圧縮フォルダ (zip , x-zip)
Mobi book

画像ファイル: JPEG (.jpg)、GIF (.gif)、Bitmap (.bmp)、PNG (.png)。
Adobe PDF (.pdf) ドキュメントは、Kindle DX, 第二世代および最新の Kindle には変換されずに送信されます。

PDF ファイルの Kindle フォーマットへの変換・転送は試験段階の機能としてご提供しております。

転送に失敗したドキュメントが上記の形式だった場合は、ファイルがパスワード保護されていたり、暗号化されていたりしないかをご確認ください。最新の Kindle はパスワード保護された PDF ファイルの転送が可能です。

パーソナル・ドキュメントの添付ファイルに関するご注意:
添付ファイルは、それぞれ ZIP 圧縮前のサイズが50MB未満である必要があります。
一通のEメールで送信できるファイル数の上限は25個です。

パーソナル・ドキュメントの転送についての詳細は、ヘルプページをご覧ください:
http://www.amazon.co.jp/kindlepersonaldocuments/

調査

当初ファイル名の問題かと思われたが、同じエラーメールが来る。

解決

mac のプレビューワで 「ファイル」「pdf として書き出す」で送信後、問題なく、kindle で表示されることを確認。

原因(不明)

オリジナルのPDFに何かあったのか、chrome で一旦表示後、ダウンロードしたのがよくないのか、そのあたりは不明。

おまけ

kindle ではPDF版の論文を読むのは苦痛でしかない。スマホkindle アプリの方が無料にも関わらず、簡単に拡大縮小でき、はっきり言って楽。 でもこのページに来たということは、既に何かしらの kindle を持っているということかも。もし安 kindle で論文を読もうと思っているのであれば、 諦めてPDFをスマホで読むか、最低でも paper white を購入することをおすすめする。

Permission denied while globbing file pattern. のエラー

症状

BigQuery のWebコンソールでは特にエラーは出ないのに、redash だと Error running query: The job encountered an internal error during execution and was unable to complete successfully. みたいなエラー。

調査

コマンドコンソールにて同クエリーを実行。 すると、

Permission denied while globbing file pattern. 

のエラー。 そのエラーのクエリをヒストリから選び、Open Query から RUN QUERY を再実行するも、正常に返ってくる。

Webで調べてみると、google drive がらみの権限エラーの模様。

stackoverflow.com

Google Driveは全く使っていないが、たしかに 直接インポート した。

インポートしたテーブルを外すと、コマンドからでも正常にクエリは実行された。

該当テーブルの detail をwebコンソールから見ると、

External Data Configuration
Source URI(s)   https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXX/edit#gid=0
Auto-detect Schema  true
Source Format   GOOGLE_SHEETS
Max Bad Records     10

となっており、たしかに外部から持ってきたデータであることと、source format も GOOGLE_SHEETS となっている。

対応

原因が分かったが、対応方法は不明。

まず、bq コマンドによりコピーを試みるが、当然失敗した。

次に、

SELECT * FROM [TABLE_NAME]

を実行し、その結果を別テーブルに保管した。そしてそのテーブルを参照するようにすると、bq コマンドで問題なくクエリは実行できた。 redashも問題なく動作した。

luigi の exit status

luigi の exit status

は失敗しても 0 が返ってくるので、make などから呼び出した場合、そのまま通過してしまう。

調べると、次のページが見つかる。

qiita.com

実はコマンドラインのオプションでも設定できる。

$ luigi --help-all
...
  --retcode-unhandled-exception RETCODE_UNHANDLED_EXCEPTION
                        For internal luigi errors.
  --retcode-missing-data RETCODE_MISSING_DATA
                        For when there are incomplete ExternalTask
                        dependencies.
  --retcode-task-failed RETCODE_TASK_FAILED
                        For when a task's run() method fails.
  --retcode-already-running RETCODE_ALREADY_RUNNING
                        For both local --lock and luigid "lock"
  --retcode-scheduling-error RETCODE_SCHEDULING_ERROR
                        For when a task's complete() or requires() fails, or
                        task-limit reached
  --retcode-not-run RETCODE_NOT_RUN
                        For when a task is not granted run permission by the
                        scheduler.
...

オプションで指定できることは、設定ファイルでも設定できるといったほうがいいのか、設定ファイルで設定できることはオプションで指定できるといったほうがいいのか。 いずれにしろ便利。

already_running については悩ましいが、とりあえず、全て非ゼロに設定ファイルにしておき、必要に応じてオプションで指定するなどがいいのでは。