それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

xargsで複数行のコマンドを実行する方法

xargs で複数行のコマンドを実行したい。

出来ない・・・

ls *.txt  | xargs -I@ echo @ ; sleep 1

forループならできるんだけど、for ループだとどうしても不便。

xargs でシェルコマンドを作って渡す.

xargs だと限界があるので、もうシェルの文字列にして渡すしか、他に選択肢がない。

ls *.txt  | xargs -I@  sh -c 'echo @ ; sleep 1'

これなら動くんです。動くんです。

xargs が1つ実行するたびに、 sh -c 'echo @ ' の@ の部分にファイルを文字列として入れて渡してくれる。

bash でもいい

sh だと機能が少ないので、bashにしてやるという手段も取れる。

ls *.txt  | xargs -I@  bash -c 'echo @ ; sleep 1'

条件分岐も

もうここまできたら、なんでもあり。シェルに文字列渡すんでス。ここなら何でもありです。条件の入力だってできちゃう。

ls *.txt  | xargs -I@  bash -c ' [[ @ =~ 2017 ]]  echo @ ; sleep 1'

脱 for文

これで、for がなくても戦える。

なんだけど、ここまでする必要あるかなぁ。コマンドを履歴に残したいとかパラレルに実行したいときには相当便利だけど、コードメンテしにくい。。。両刃の剣か。

参考資料

HTTPSサイトからの遷移時に内部サイトのリファラがもれないようにする。サーバー側設定Referrer-Policy

nginx をつかってブラウザにリファラをおもらししないように命令する

社内のファイルサーバーのリファラURLが漏れると恥ずい。いやまずい。

何がまずいかというとファイル名が漏れてしまったり、アクセス元のURLとして晒されたり、検索インデックスに追加される恐れがあるからだ。

server {
    add_header Referrer-Policy no-referrer always;
}

これを書くと、ブラウザがリファラを送らなくなる。一般的なブラウザの場合だけどね。 サーバー側で制御できるものはしちゃったほうが良いね。

リファラでファイル名がバレるとそれを使っってターゲット・フィッシングメールが作れるもんね。

選択肢

origin
same-origin
strict-origin

origin

基本的に使わない。このサイトからリファラを送るならURLにパスを入れないでくれ。 リファラURLでなく、リファラドメインだけが送られる。

strict-origin

基本的にコレ。このサイトでは同一ドメインリファラを送ってくれ。 HTTPでセットされたとき、HTTP→HTTP(s)で送られる、HTTPSでセットされたとき、HTTPSHTTPSのみ、HTTPS→HTTPはリファラ対象外。

no-referrer

このサイトではリファラを絶対送らないでくれ。というヘッダ。

詳しくは、参考資料のMDNページ

参考

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Referrer-Policy

tesseractでPDFを検索可能にしてみる

tesseract を使ってPDFをOCRする

https://pypi.org/project/pypdfocr/ というツールを見つけたので、使ってみる

残念なお知らせです。

python 3 系ではシンタックスエラーで動きません。

インストールのログがこちら。

takuya@deskew$ pip install pypdfocr
Collecting pypdfocr
  Using cached https://files.pythonhosted.org/packages/c3/23/1bf42cb12af63d498fcd425882815c21efef37800514dbad9fa28918df5e/pypdfocr-0.9.1.tar.gz
Requirement already satisfied: pillow>=2.2 in /Users/takuya/.pyenv/versions/3.7.0/lib/python3.7/site-packages (from pypdfocr) (5.3.0)
Collecting reportlab>=2.7 (from pypdfocr)
  Using cached https://files.pythonhosted.org/packages/d8/d5/583e6235d0c690c2cda2cd080c60413fbf7be8d8e012e003087202edfb50/reportlab-3.5.9-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting watchdog>=0.6.0 (from pypdfocr)
  Using cached https://files.pythonhosted.org/packages/bb/e3/5a55d48a29300160779f0a0d2776d17c1b762a2039b36de528b093b87d5b/watchdog-0.9.0.tar.gz
Collecting pypdf2>=1.23 (from pypdfocr)
  Using cached https://files.pythonhosted.org/packages/b4/01/68fcc0d43daf4c6bdbc6b33cc3f77bda531c86b174cac56ef0ffdb96faab/PyPDF2-1.26.0.tar.gz
Collecting evernote (from pypdfocr)
  Using cached https://files.pythonhosted.org/packages/f9/6b/877f8edef8ef040d32eb38f3bf6322ba334de9d10614d8db9d869c162fc1/evernote-1.25.3.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/ff/fc49g5wd6xncjylvwy4tdygc0000gn/T/pip-install-yx8p73r2/evernote/setup.py", line 6
        exec x
             ^
    SyntaxError: Missing parentheses in call to 'exec'

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/ff/fc49g5wd6xncjylvwy4tdygc0000gn/T/pip-install-yx8p73r2/evernote/

しかたないので、pyenv で切り替えて使ってみることにしたい。

ちょっと困りますよね。python2系は流石にちょっとと。でも動けばいいしPDFをぱぱっと扱えるならpython2でも我慢する。

pyenv global 2.7.15
pip2 install pypdfocr

tesseractが無いばあい、いれる必要がある。

brew install tesseract

OCR をしてみる

pypdfocr my.pdf

うーん、めっちゃ時間かかる。時間かかる割にtesseractの調整をしてないから精度がいまいちな気がする・・・・・日本語も取れないし。tesseractをちゃんと設定しないとダメだし、所詮OCRなので・・・諦める。

参考資料

https://pypi.org/project/pypdfocr/