2019年12月6日金曜日

venv のpython バージョンを変える

python3.7.3 で作ったプロジェクトをバージョン3.8.0 に変更
python -m venv venv --upgrade (upgradeオプションを付ける)
バージョンを戻すときも同じ。

現状確認。
$ python -V
> Python 3.7.3
$ . venv/bin/activate
(venv)$ python -V
> Python 3.7.3
(venv)$ ls venv/lib
> python3.7
python 3.8 をインストールしたので
venvもversion3.8に合わせる
もう一度、確認
$ python -V
> Python 3.8.0
$ . venv/bin/activate
(venv)$ python -V
> Python 3.7.3         # venvのpythonは3.7.3 のまま

upgradeオプションをつけて!
(venv)$ deactivate
$ python -m venv venv --upgrade
$ . venv/bin/activate
(venv)$ python -V
> Python 3.8.0         # venv の環境でもバージョン3.8.0
(venv)$ ls venv/lib
> python3.7 python3.8  # venv/libにも 3.8用ディレクトリができている
- 念のため pip --version も確認しておく
- pip install -r requirements.txt を実行 (マイナーバージョンの変更時は必要ないと思う)

参考
venv --- 仮想環境の作成

2019年12月5日木曜日

簡単! appimage でneovim。

レンタルの共用サーバーにvim8を入れようかと思って、なぜかneovim 入れました。
しかもappimage
appimage の利用は初めてだったんですが、ダウンロードしてすぐに利用できるの簡単でした。

https://github.com/neovim/neovim/wiki/Installing-Neovim
curl -LO https://github.com/neovim/neovim/releases/download/stable/nvim.appimage
chmod u+x nvim.appimage

ダウンロードしてすぐに利用できるので、Windows のアプリケーションみたいな感覚。
make はもう遠い世界へ.....

とりあえず自分のホームディレクトリにappimage ディレクトリを作って、その中に入れておきました。
あと、自分のbin ディレクトリ内にnvim.appimage へのシンボリックリンクを作成。

/home/hoge/appimage/nvim.appimage # appimage 用のディレクトリ
/home/hoge/usr/bin/nvim           # nvim.appimage へのシンボリックリンク

今後、appimage を利用する場合は、このルールで利用するつもり。
- appimage ディレクトリに入れる
- ローカルのbin ディレクトリにシンボリックリンクを作成


AppImage はWindowsのポータブルアプリみたいな感じですね。
ダウンロード、バージョンの切り替え、起動ランチャーなどの便利ツールも既にあるのかな?

■ pynvim
pip install pynvim

nvim で:CheckHealth を確認。
## Python 3 provider (optional)
  - INFO: pyenv: Path: /home/hoge/.pyenv/libexec/pyenv
  - INFO: pyenv: Root: /home/hoge/.pyenv
  - INFO: `g:python3_host_prog` is not set.  Searching for python3 in the environment.  - INFO: Executable: /home/hoge/.pyenv/versions/3.7.5/bin/python3  - INFO: Python version: 3.7.5  - INFO: pynvim version: 0.4.0  - OK: Latest pynvim is installed.

2019年11月23日土曜日

python3.8 で追加された機能

Python Release Python 3.8.0
とりあえ、以下の2つは覚えておく。

■ f-strings
>>> val1 = "111"
>>> val2 = 222
>>> f"{val1}, {val2}")
"'111, 222'"

# =を付けると変数名も一緒に表示してくれる (今回のリリースで追加された)
>>> f"{val1=}, {val2=}")
"val1='111', val2=222"

■ PEP 572, Assignment expressions

やっとpython で代入式が使えるようになった。
正規表現の結果をif でチェックする処理が1行で書けるようになった。
if res := re.search(ptn, words):

2019年11月22日金曜日

systemdを更新したらエラー

最近いろいろサボっていたけど、久しぶりの「yum update」です。
(centos のバージョンも7.7 になってる気がする)

systemd の更新があったようで、mongodb, nginx が起動しませんでした (涙
エラーです...

■ systemd のエラー表示
# nginx の場合
> Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links

# mongodb の場合
> Can't open PID file /var/run/mongodb/mongod.pid (yet?) after start: Too many levels of symbolic links

■ エラーの関連リンク
- Systemd error: 'Refusing to accept PID outside of service control group, acquired through unsafe symlink chain'
- service: relax PID file symlink chain checks a bit (#8133)
cgroup 対応でチェックを追加したという事です。

■ 対処
 - /usr/lib/systemd/system/mongod.service
 - /usr/lib/systemd/system/nginx.service
このファイルを編集して
pid のパスを /var/run から /run に変更。

nginx, mongo を起動
> systemctl daemon-reload
> systemctl reload nginx
> systemctl reload mongod
OK ... 無事起動 (うれし涙

一応、nginx, mongo のconf も変更しておく
 - /etc/nginx/nginx.conf
 - /etc/mongod.conf
pid のパスを変更。/var/run -> /run
(/var/run は /run へのシンボリックリンクなので変更しなくても動きますが、systemdの変更に合わせておきます)

mongodbやnginx のように、centos 以外のレポジトリからインストールしたものがあれば、しばらくは要注意。
Can't open PID file /var/run/xxxxx.pid (yet?) after start: Too many levels of symbolic links
このエラー表示を頭の片隅に。

(そもそも、cgroup の勉強ができていないので何とも言えませんが、別の対応方法があるような気もする.....)

2019年4月23日火曜日

メモリが安いので増設

今年はメモリが安いということで、増設することにしました。
数年前に買ったHPのコンパクトPC。
SO-DIMM 4GB が1枚だけだったので、8GB x 2枚に変更です。
(4GB -> 16GB  すごいパワーアップ!)

アマゾンで購入。
CFDの8GBメモリが1枚 4,132円。それを2枚購入して 8,264円 でした。
(なぜか、1枚を2つ注文すると 8,246円で、2枚セットだと 9,460円でした。謎)

カカクコムで確認すると、1年前のちょうど半額まで値下がりしてました。
スマホ販売の落ち込みが原因らしいので、まだ下がるかもしれませんね。
(*´Д`)

メモリを触るときは、少し緊張しますね。
新しいメモリに交換した後は、BIOSで確認 (HPのBIOS画面はF10)
8GBx2、dual channel を認識。

TODO: linux でスワップ領域の作り直し。


CFD販売 ノートPC用 メモリ
PC3-12800(DDR3L-1600) 8GB×1枚 1.35V対応 SO-DIMM
(無期限保証)(Panram)
D3N1600PS-L8G


samsung のメモリ 4GBx1枚

増設後。8GBx2枚
Linuxでも確認。15.4GiB

lvm でswap サイズを変更

メモリを追加したのでスワップも拡張
4GB -> 16GB CentOS7
スワップがどのくらい必要かわからないので、とりあえず10GBほどにしておく。


# ボリュームの確認
$ lvscan 
  ACTIVE            '/dev/centos/swap' [<3.88 GiB] inherit
  ACTIVE            '/dev/centos/root' [200.00 GiB] inherit

$ swapoff -v /dev/centos/swap
swapoff /dev/centos/swap

# スワップ用ボリュームのリサイズ。6GB 追加
$ lvresize -L +6G /dev/centos/swap 
  Size of logical volume centos/swap changed from <3.88 GiB (992 extents) to <9.88 GiB (2528 extents).
  Logical volume centos/swap successfully resized.

# リサイズ後の確認
$ lvscan 
  ACTIVE            '/dev/centos/swap' [<9.88 GiB] inherit
  ACTIVE            '/dev/centos/root' [200.00 GiB] inherit

# スワップ作成
$ mkswap /dev/centos/swap
mkswap: /dev/centos/swap: warning: wiping old swap signature.
Setting up swapspace version 1, size = 10354684 KiB
no label, UUID=172f0357-4a83-477e-a364-9023e6e28e2e

# 
$ swapon -v /dev/centos/swap
swapon /dev/centos/swap
swapon: /dev/mapper/centos-swap: found swap signature: version 1, page-size 4, same byte order
swapon: /dev/mapper/centos-swap: pagesize=4096, swapsize=10603200512, devsize=10603200512

# 確認
$ cat /proc/swaps
$ free -h


■ redhat7 のドキュメント
- 論理ボリュームマネージャーの管理
- CHAPTER 15. SWAP SPACE

2019年4月14日日曜日

コード表示を改善

このブログ、プログラム中心のブログなのに、何の色付けもされていないので見づらい。
今更だけど、ほんのりと色指定をしてみました。

スタイルを追加
<style type='text/css'>
  pre.code{color:#ccc; background-color:#2d2d2d; padding:0.5em 1em; white-space: pre-wrap; word-wrap: break-word;}
</style>
背景色を黒にしただけです。 (かなりの手抜きだぁ)
highlight系のjs,css は見送りました。大変そうなので...

いままでは、こんな感じでした。
#!/usr/bin/env python

print('hi python')

変更後
#!/usr/bin/env python

print('hi python')
すこーしだけいい感じになったかな (;'∀')

今回は、preタグを直接書き込みましたが、Bloggerの編集モードと相性悪いですね。
改行<br />, スペース &nb; が自動挿入されるので、pre内は自分で消すしかないのかな?

2019年4月7日日曜日

splash でuser-agent を設定

splash のリクエストでuser-agent を設定する。
目的のサイト <-uaを指定- splash <-- python(requests)

# ここを参考
https://splash.readthedocs.io/en/stable/faq.html

ローカルのsplashサーバーへはrun、メソッドはPOST を指定。
(もっとドキュメントを読む必要あり.....)

以下の2点は確認済み
 - リスエストのヘッダーを見ると、期待したuser-agentが設定されている。
 - メソッドはGETになっている。(たぶんデフォがGET)

import requests

def splash_scripts():
  return """
splash:set_user_agent(args.ua)
splash:go(args.url)
return splash:html()
"""

def req_page(url):
  ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'

  url_local = 'http://localhost:8050/run'
  prms = {
    'lua_source': splash_scripts(),
    'url': url,
    'ua': ua,
    # 'wait': 2
  }
  res = requests.post(url_local, json=prms)
  return res

if __name__ == '__main__':
  # リスエストのヘッダーを確認
  url = 'http://tools.up2a.info/ja/requestheaders'
  # url = 'http://192.168.1.3/'
  res = req_page(url)
  print(res.text)

2019年1月21日月曜日

Xvfb

# yum install xorg-x11-server-Xvfb

# export DISPLAY=:1
# Xvfb :1 -screen 0 1280x1024x24 &

# killall Xvfb

参考
https://qiita.com/kt3k/items/cea3c6de3c2337004a84
https://en.wikipedia.org/wiki/Xvfb

必要ならsystemd で自動起動
https://qiita.com/ine1127/items/363b597f895c6663ddb7