2018/10/24

pip (pip-18.1) を一括アップデートする方法

以下のサイトの方法などを試したが,そのままではうまくいかなかったので修正した.
https://qiita.com/Klein/items/a3110d20532ba9f9057b

修正したコマンドは以下の通り.

pip list -o | grep -v -e Package -e --- | awk '{print $1}' | xargs pip install -U pip


pip list -oで出てくるフォーマットが以下のようなものなので,最初の2行をgrepでパスしているだけ.

Package           Version   Latest     Type 
----------------- --------- ---------- -----
beautifulsoup4    4.6.0     4.6.3      wheel
...

2018/09/30

GCPのdebian上でseleniumのheadless firefoxを試みる

GCPのdebian上でseleniumのheadless firefoxを試みる

結論を言いますとうまくいきませんでした.
手元のMac上なら動くが,GCP上ではうまく行かず.


以下,やったことの記録.

以下のサイトに習い,geckodriveをインストール.
https://a-zumi.net/selenium-ubuntu-geckodriver/
https://github.com/mozilla/geckodriver/releases


firefoxをインストール.
sudo apt-get install firefox-esr

他にも,mozillaのリポジトリを追加して最新版を追加したり,debファイルを引っ張ってきて,旧版をインストールしたりしたが,結果的にはあまり意味なかった.

python3で以下のように実行.

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('-headless')
driver = webdriver.Firefox(firefox_options=options)


次のようなエラーが出る.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in __init__
    keep_alive=True)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 156, in __init__
    self.start_session(capabilities, browser_profile)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 251, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities


試行錯誤の上,capabilities の marionette を False にするとcapability のエラーが無くなった.


from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.options import Options
options = Options()
options.add_argument('-headless')
desiredcapabilities = DesiredCapabilities.FIREFOX.copy()
desiredcapabilities['marionette'] = False
driver = webdriver.Firefox(capabilities=desiredcapabilities, firefox_options=options)


しかし,まだ以下のようなエラーが出る.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 187, in __init__
    self.binary, timeout)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/firefox/extension_connection.py", line 52, in __init__
    self.binary.launch_browser(self.profile, timeout=timeout)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 73, in launch_browser
    self._wait_until_connectable(timeout=timeout)
  File "/opt/bitnami/python/lib/python3.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 104, in _wait_until_connectable
    "The browser appears to have exited "
selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.


以下のようにすると,geckodriverのログを出力できる.

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
desiredcapabilities = DesiredCapabilities.FIREFOX.copy()
desiredcapabilities['marionette'] = False
binary = FirefoxBinary(log_file=open("geckodriver.log", "wb"))
binary.add_command_line_options('-headless')
driver = webdriver.Firefox(capabilities=desiredcapabilities, firefox_binary=binary)

ログを見ると,以下のような内容.

XPCOMGlueLoad error for file /usr/lib/firefox-esr/libmozgtk.so:
/usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0: undefined symbol: FcConfigReference
Couldn't load XPCOM.

このエラーがどうしても解決できずに断念.
chromeに切り替えることにした.


2018/10/8 追記
Chromeに変えても同様の問題が発生し,散々色々やった挙げ句,解決せず途方に暮れた.
結局,vmをbitnamiのdjangostacでやっていたのが問題だったようで,vmをbitnamiを使わず新たに立ち上げ直してやってみたらすんなり行って,拍子抜けした.

2018/07/22

スフレパンケーキのレシピ

2人分4枚の分量

卵黄 2個
卵白 2個
砂糖 10g
強力粉 30g
ベーキングパウダー 2g
牛乳 30g


レシピ
1) 卵白と砂糖以外の材料を混ぜる.
2) 卵白と砂糖をかなり固めのメレンゲにする.
3) 1)に2)を少し混ぜて,混ぜたら全部混ぜる.
4) 弱火に蓋をして,焼く.

2018/06/12

latex2rtf で LaTeX 原稿を Word に変換する方法.

latex2rtfが素晴らしい.
数式は画像に変換してくれる.

凝った LaTeX 原稿だといろいろとエラーが出たりするので,プレーンな jarticle などにコピペして,(日本語を含む場合)以下の行を追加.

\usepackage[utf8]{inputenc}

そして,以下のコマンドを実行.

latex2rtf -M12 -D 600 <ファイル名>.tex

これだけで,<ファイル名>.rtf というファイルが完成.
Macのデフォルトのrtfのエディタだと,数式等が表示されないが,Word などで開くと表示されている.

M12オプションは,すべての数式を画像化するオプション.
M6とすると別立ての数式のみ画像化.
M3または無指定で,画像化は行わない.

Dオプションは数式の画像化のdpiを指定する.
デフォルトは300.



よく確認すると,何故かインラインの数式の前にドットが入ってしまう問題があったので,その治し方も追記.

変換中に以下のようなエラーが出ていることを発見.

Rendering '$k$'/usr/local/bin/latex2png: line 263: identify: command not found
/usr/local/bin/latex2png: line 264: [: -gt: unary operator expected

identifyはimagemagickと一緒に入るものらしい.
imagemagickは入っているはずだが,とりあえずbrewで再インストールしようとしたが,どうやらbrew以外でインストールしていたようなので,

brew link --overwrite imagemagick

で上書きしたら治った.

2018/06/10

djangoで特定のappのデータベースだけリセット

全体をリセットする場合は,

manage.py flush

一部のappだけのときは

migrate app zero
migrate app

でできるっぽい.

2018/05/16

Mac Sierra で XQuartz 2.7.11 にアップデートしたら,XQuartz が起動しなくなった問題の解決法

Mac Sierra で XQuartz 2.7.11 にアップデートしたら,XQuartz が起動しなくなった.
Inkscape が使えなくて困る.

2.7.10 を入れ直したらとりあえず解決.

MacのOfficeでPDF出力時の挿入画像の解像度が異常に低くなる問題の解決法


MacのOfficeをアップデートしたら,PDF出力時の挿入画像の解像度が異常に低くなるようになってしまった.

TeXclipからいつも通りPNGに出力して,その画像をパワポに挿入,スライド全体をPDF出力したら,PNG部分だけ異常に解像度が悪い.
Excelの方もグラフに挿入したPNG画像が同様の症状.


試行錯誤の結果,パワポについては,図の書式設定から,解像度に合わせてサイズを調整するにチェックを入れて,解像度を高めに設定すれば良いことがわかった.

Excelについては,該当する設定が見つからなかったので,さらに試行錯誤.
TeXclipからEPSで出力して,PDFに変換してから挿入すれば良いことがわかった.

2018/03/11

美味しいポークソテーのレシピメモ

美味しいポークソテーのレシピメモ.

豚肉の筋を落とし,塩胡椒,少しの小麦粉をする.
豚肉を多めの油で片面をしっかり焼く.
裏返して,蓋をし,火を止めて5分放置.
ウイスキー50cc,醤油小さじ2,バター15gを加えて,フランベ.
蓋をして消化して,蓋を取る.
適度にソースを煮詰めて,乳化させれば完成.

肉の量が増えても,あまり量を増やす必要はなし.

2018/02/16

Time Machineが進まなくなったときの解決法メモ

Time Machineが進まなくなったときの解決法メモ

Time Machine で Time Capsule にバックアップを取りはじめたが,一向に進まない.

以下のページを参考に,spotlightを無効にするコマンドを打ったら少しだけ進行.
https://www.drk7.jp/MT/archives/001982.html

mdutil -sa
sudo mdutil -i off <バックアップ先>/Backups.backupdb


その後,また止まってしまったので,以下のページを参考にSpotlightを停止,再起動して,インデックスを再構築した.
http://tukaikta.blog135.fc2.com/blog-entry-96.html

sudo mdutil -i off -E /

その後,しばらく待ったら,動き出した.
バックアップ終了後,以下のコマンドでSpotlightを戻した.

sudo mdutil -i on -E /

Spotlightのインデックスを再構築することになるり,非常に時間が掛かる.

2018/02/04

ポートフォワーディングに関するメモ

ローカルマシンから下記コマンドによりsshアクセス.
8081は適当な空きポートでOK.

ssh -L 8081:[リモートサーバ]:[ポート番号] [ユーザ名]@[経由サーバ]

ポート番号はwebなら80や443.
例えば,sshアクセスした状態で,ローカルマシンのブラウザから

http://localhost:8081

にアクセスすれば,経由サーバからでなければ閲覧できないウェブサイトの閲覧が可能.

sshのポート番号が22番から変更されている場合は以下のオプションを付けるのを忘れないようにする.

-p [sshのポート番号]


2018/01/28

GCE + Django でGoogle Cloud Storageにstaticファイルを配置する際のメモ

Google Compute Engine (GCE) + Djangoでサイトを構築する場合に,staticファイルをGoogle Cloud Storageに配置する場合の設定に関するメモ.

pip で必要なモジュールをインストール.

pip install django-storages
pip install boto
pip install google-compute-engine

ただし,google-compute-engine はローカルでの実行では不要っぽい.

次にGoogle Cloud Platform のコンソールから,

Storage => バケットを作成

でバケットを作成し,バケットのページの

設定 => 相互運用性 => 新しいキーを作成

でキーを作成.
アクセスキーとシークレットを記録しておく.

加えて,settings.py に以下を追加.

DEFAULT_FILE_STORAGE = 'storages.backends.gs.GSBotoStorage'
GS_ACCESS_KEY_ID = '<アクセスキー>'
GS_SECRET_ACCESS_KEY = '<シークレット>'
GS_BUCKET_NAME = '<バケット名>'
STATICFILES_STORAGE = 'storages.backends.gs.GSBotoStorage'

あとは,manage.py で collectstaticすれば,Google Cloud Storageにstaticファイルがアップロードされる.

以上の設定をすれば,ローカルでも本番でもGoogle Cloud Storageからstaticファイルを参照するようになる.
サイトを開いてstaticファイルの参照元を調べれば,以下のようにstorage側から取ってきているっぽいことが確認できる.

<link rel="stylesheet" href="https://<バケット名>.storage.googleapis.com:443/css/<ファイル名>?Signature=<???>&amp;Expires=<???>&amp;GoogleAccessId=<???>">


参考リンク
https://github.com/RaRe-Technologies/gensim/issues/898
https://stackoverflow.com/questions/34247702/configure-django-and-google-cloud-storage