2019年9月29日日曜日

rstファイルをvimで編集リアルタイム更新

rstファイルをリアルタイムでプレビューできるriv.vimをインストールしました。ちょっと大変でした。Python2と3が混ざっている感があります。

Ubuntu16.04 LTS ではOK。
Windowsでは×です。

インストール方法(無理やり感あり)


riv.vim (vim) とInstantRst (web server) を組み合わせます。サーバはflaskと同じ仕組みを使っているようです。

riv.vim, InstanRstを入れる。instant-rst.pyを入れる。こちらはPython2.7用しかないので、追加の設定が要りました。

・python2.7のディレクトリのパーミッションを追加する。

pipでThe directory '/home/.../.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

と出るので sudo -H でインストールしました。

・python2.7のPATHを追加する。


 instantRst test.rst で起動すると、こんなエラーが出ていました。
 instantRst -f test.rst
test.rst
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
 * Serving Flask app "instant_rst.server" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

Some error/exception occurred.
(, TypeError('port must be an integer',), )


Portがintになっていないということで見てみると、Python2から3に値を渡すときに変換されているということでした。

エラーの該当部分はpython2.7/dist-packages/werkzeug/serving.py で、追加した結果はこうなりました。

port = int(native(port))  

if not isinstance(port, int):
    raise TypeError("port must be an integer")

入力されるportをtype(port)として調べると、型は future.types.newint.newint となっており、これは

from future.utils import native
int(native(port))

でintにできました。nattive(port) によって long にしてからint を使っています。

https://python-future.org/what_else.html

これで無事にInstantRstサーバが立ち上がって、ほぼリアルタムでrstファイルの更新ができます。

使い方メモ

起動するには、vim で rstファイルを開いた状態で
:InstantRst
これでブラウザが立ち上がります。

デフォルトのブラウザはfirefoxですが、
let instant_rst_browser='usr/bin/google-chrome'
とすることでクロムに変えました。vimrcにこれを書いても効果ないようです。

2019年9月23日月曜日

condaが壊れたので再インストールで直した

Ubuntu16.04, conda 4.7.10

condaで何かをインストールしたときに、conda自身もアップデートして、そのときに壊れました。アップデート時にcondaが壊れる現象は、他でも起こっているようです。

結論


解決方法を試行錯誤しましたが上手く行かず。結局、再インストールしました。

壊れたのを確認


condaを呼んだらモジュールありません、というエラーが出ました。PATHの設定が壊れたのかと思って確認しましたが、変わっていませんでした。

Traceback (most recent call last):
  File "....py", line 6, in
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'

解決しようとした方法 -- 失敗


https://github.com/conda/conda/issues/2463
に同様のケースがあって、

https://github.com/conda/conda/issues/1733#issuecomment-150641779
に再インストールする解決策がありました。

※anaconda というディレクトリに入っているとします。
※user名はwakari

# 現状の名前を変えておく
cd anaconda
mv anaconda anaconda_orig
# sh ファイルをインストールする
wget Anaconda.shchmod a+x Anaconda.sh./Anaconda.sh # install to /opt/wakari/anaconda(Downloadしてから)
sh pathto/Anaconda_hoge.sh

# 新しいanacondaディレクトリに元のディレクトリと同期させる
rsync -a anaconda_orig/ anaconda/

# アップデートする
chmod -R a+rX anacondachown wakari:wakari anacondasudo /anaconda/bin/conda update conda
sudo /anaconda/bin/conda install -f conda-env


しかし、上手くできませんでした。コンフリクトしまくりのようです。
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:

  - https://repo.continuum.io/pkgs/free/linux-64::path.py==10.0=py36_0
  - defaults/linux-64::pycosat==0.6.3=py37h14c3975_0
  - defaults/linux-64::pathlib2==2.3.4=py37_0
こういうエラーが延々と続きます。
Package setuptools conflicts for:
wurlitzer -> python[version='>=2.7,<2 .8.0a0="">=3.6,<3 .7.0a0="">=3.7,<3 -="" .8.0a0=""> pip -> wheel -> setuptools
pandas -> numpy[version='>=1.11.3,<2 .0a0="">=1.9,>=1.9.3,<2 -="" .0a0=""> mkl_random[version='>=1.0.2,<2 -="" .0a0=""> numpy-base[version='>=1.0.2,<2 -="" .0a0=""> python[version='>=2.7,<2 .8.0a0="">=3.5,<3 .6.0a0="">=3.6,<3 .7.0a0="">=3.7,<3 -="" .8.0a0=""> pip -> wheel -> setuptools
<2 .8.0a0=""><3 .7.0a0=""><3 -="" .8.0a0=""><2 .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 .8.0a0=""><3 .6.0a0=""><3 .7.0a0=""><3 -="" .8.0a0="">
<2 .8.0a0=""><3 .7.0a0=""><3 -="" .8.0a0=""><2 .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 .8.0a0=""><3 .6.0a0=""><3 .7.0a0=""><3 -="" .8.0a0="">

結局、再インストール

原因は、 py3.6で最初にインストールして、途中で3.7にしたので、もう戻れない、ということのようです。 Anaconda丸ごとクリーン再インストールしました。

(コマンドは上の続きで)

sh pathto/Anaconda_hoge.sh
でAnacondaを再インストールして
cp -ar dir_new dir_old
で全部をコピーします。

2019年9月9日月曜日

seleniumで認証つきページのログイン(むりやり感あり)

ログイン画面がポップアップで現れるページにseleniumで自動で入りたい、ということがありました。

成功した方法(むりやり)


アドレスにusername:passwordをつけて、http://username:password@www.xxxx.co.jp としてアクセス。

それ以外のやり方ではログイン画面をseleniumがつかめませんでした。

ここからは失敗例


import time
from selenium import webdriver

try:
    driver = webdriver.Firefox()
    time.sleep(3)
except:
    quit()

driver.get(target_url)

これでブラウザは起動できます。Username, Passwordの入力画面が出ます。画面のidがわからないので画面ごとつかみます。

alert = driver.switch_to_alert()

alert.textなどはOKですが、alert.sendkeys()、alert.authenticate()はNGで、こんなエラーが出ます。

WebDriverException: Message: User prompt of type promptUserAndPass is not supported
WebDriverException: Message: POST /session/..../alert/credentials did not match a known command


--ここまで失敗例--

別に今の目的では、アドレスに直接打っても問題ないのですが、ちょっともやっとしますね。

答えが書いていたもの。

その他参考


2019年9月7日土曜日

メモ ソフト起動方法

VirtualBOX


ログイン、ターミナル立ち上げ

$ cd MyVagrant/MyCentOS

に入る。(VagrantFileがあるところ)

$ vagrant up

でVirtualBOX立ち上げる


Filezilla


$ filezilla

SiteManager の項目→Connect

RemoteSite は空白

LocalSite /home/username/


1回設定していれば設定が保管されているかも。

実用的なリンク集

HR系会社のコンサルタントインタビューがたくさんある
https://hrbc.porters.jp/magazine/topconsultant/?pageID=1

マネーフォワード 基礎知識が充実している。
https://biz.moneyforward.com/

freeeバックオフィスの基礎知識
https://www.freee.co.jp/kb/

クロネコファイナンス経営に役立つブログ
https://www.yamato-b2b-pay.com/blog

三井住友カードの法人、起業関連の知識ブログ

https://www.smbc-card.com/hojin/magazine/bizi-dora/index.jsp


ーーー

調査レポートR&A発行「オタクのコンテンツ消費の行動と心理調査」
https://www.kddi-research.jp/topics/2018/062701.html

「オタク」市場に関する調査
https://www.yano.co.jp/press-release/show/press_id/2070

jupyter %%timeit を使うときにセルの一行目にないとエラーになる

%timeit は一行を測定
%%timeit はセル全部を測定します

s = (size, size)
%%timeit -n1 -r1 m = np.zeros(s, dtype=np.int32)
mandelbrot_cython(m, size, iterations)

というように、同じセルの中でやると

UsageError: Line magic function '%%timeit' not found.

となります。

この内容をやっていたときに起きたエラーです。
https://ipython-books.github.io/55-accelerating-python-code-with-cython/

読書メモ

サブスクリプション のメモ

フォード車で、「好きな色のT型フォードを買える、ただし黒である限り」という言葉がある。黒色は乾くのが速いから生産が速かった。3分に1台。

コロンビアハウスは通販ビジネスで加入者との関係性のマネジメントに失敗した。最初の無料のお試しやディスカウントにつられて登録すると、解約し損ねると続けて請求された。不透明な請求、複雑なキャンセル手続き、お粗末なコミュニケーション。顧客無視のゾンビビジネスモデル。

インタラクティブ・アドバタイジング・ビューローによると、2016年に支出された全オンライン広告費の49%がグーグルに、40%がフェイスブックに。

アドビは2011年11月にサブスクリプションモデルに以降を発表した。その翌日から、経営陣が恐れていたほどではないが、株価は暴落した。

シュナイダーエレクトリックとそのパートナー企業は、ニュージーランドの農場と協力して灌漑水管理、天候予想、電力購入管理などのためのセンサーを設置している。


2019年9月4日水曜日

IT勉強メモ

閉域接続 通信業者が提供する特定ユーザどうしのグルーピングサービス。通話の制限など。

リバースプロキシ 外部からのアクセスに対してキャッシュを返すプロキシサーバ

SOAP Simple Object Access Protocol は、XMLをベースとした、他のコンピュータにあるデータやサービスを呼び出すためのプロトコル


2019年9月2日月曜日

subprocessでPythonからコマンドを打つときJupyterは使えない

Ubuntu16.04, Python3.6

Pythonからコマンドラインを呼んで、test.pyを実行しようとします(他のプログラムとかでもOK)。これをJupyterでやってしまうとNGです。

import subprocess
import sys

p = subprocess.Popen(["python", "test.py"],
                    stdout=sys.stdout)
p.communicate()
Jupyter(ipython)上で実行するとこういうエラーが出ます。
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
 in ()
      3 
      4 p = subprocess.Popen(["python", "test.py"],
----> 5                     stdout=sys.stdout)
      6 p.communicate()

/home/shimo/anaconda3/lib/python3.6/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)
    665         (p2cread, p2cwrite,
    666          c2pread, c2pwrite,
--> 667          errread, errwrite) = self._get_handles(stdin, stdout, stderr)
    668 
    669         # We wrap OS handles *before* launching the child, otherwise a

/home/shimo/anaconda3/lib/python3.6/subprocess.py in _get_handles(self, stdin, stdout, stderr)
   1182             else:
   1183                 # Assuming file-like object
-> 1184                 c2pwrite = stdout.fileno()
   1185 
   1186             if stderr is None:

/home/shimo/anaconda3/lib/python3.6/site-packages/ipykernel/iostream.py in fileno(self)
    357 
    358     def fileno(self):
--> 359         raise UnsupportedOperation("IOStream has no fileno.")
    360 
    361     def write(self, string):

UnsupportedOperation: IOStream has no fileno.

Jupyterでなく、コマンドラインからPythonを呼ぶとOKです。

# from_commandline.py
import subprocess
import sys

p = subprocess.Popen(["python", "test.py"],
                    stdout=sys.stdout)
p.communicate()

$ python from_commandline.py     

でtest.pyが実行されるはずです。


https://stackoverflow.com/questions/31080829/python-error-io-unsupportedoperation-fileno
https://github.com/ipython/ipykernel/issues/272

参考:Powershellを呼ぶ場合


subprocess.Popen(["powershell.exe", ".....ps1"], stdout=sys.stdout)

2019年9月1日日曜日

日誌2019年9月

2019/09/01

アップルミュージックが「1か月分の料金で3か月ご利用できます。」という告知をしてくるのですが。ファミリープランで登録してしまっているので、これを個人プランに変えてから3か月にしたいんですけど・・・どうにもできなさそうです。ネットで情報を調べても同じようなオファーは少ないのか?出てきません。ほとんど3か月無料の情報しかないです。


2019/09/02

adsenseがいつのまにか独自ドメイン必要、となったようです。このブログはかつてadsense貼っていて外したまま忘れていてそろそろ再開しよっかな、と思ったらひっかかってしまったようです。こりゃこまりました。1000円くらいだから出してもいいのかな、とは思いますが。


2019/09/06

adsenseが無料で使えなくなったという理由で、別のbloggerに移転しようとしています。しかし面倒だな・・:・。

天気が不安定でゲリラ豪雨などで大変ですね。こういう災害から見を守るためのサービスが流行るんでしょうね。最近のゲリラ豪雨は雨量が多すぎて、等高線の最大のエリアの(80ミリ/時かな)を超えている範囲が大きすぎだったりしますね。これもそのうち変更されるんでしょう。年間雨量の統計とかどうなっているんでしょうか。