<Shell script> シェルのジョブ制御を有効にする

シェルスクリプトShell scriptで、バックグラウンドbg/ backgroundに落としたジョブjobを、
フォアfgに持ってくるには??? で悩んだ。

こちらにお世話になり解決。
set -mらしい。

ksaito11.blogspot.jp

Xvfbコマンドで、仮想ディスプレイを立ち上げ、リモートからコマンドラインで制御かける時に使ったなり。

#! /bin/sh

set -m

Xvfb :2 -screen 0 800x600x24 &
export DISPLAY=:0.0

python selenium_hogehoge.py

kill %1

参考。

Linuxコマンド集 - 【 set 】 シェルのオプションを設定する:ITpro

<Python, codecs> 文字列のエンコード、デコード

文字列strエンコードencodeとデコードdecode

codecsというモジュールでいろいろ対応できるらしいっす。

In [8]: import codecs

文字列を期待するものたち、、、

In [10]: codecs.encode('hage', 'utf8')
Out[10]: b'hage'

In [11]: codecs.encode('hage', 'rot13')
Out[11]: 'untr'

バイト列を期待するものたち、、、

In [12]: codecs.encode(b'hage', 'base64')
Out[12]: b'aGFnZQ==\n'

In [13]: codecs.encode(b'hage', 'zip')
Out[13]: b'x\x9c\xcbHLO\x05\x00\x03\xfa\x01\x96'

In [15]: codecs.encode(b'hage', 'hex')
Out[15]: b'68616765'

In [16]: codecs.encode(b'hage', 'bz2')
Out[16]: b'BZh91AY&SY[G\xf8a\x00\x00\x01\x81\x00"\xc0 \x00!\x9ah3M\x17<]\xc9\x14\xe1BAm\x1f\xe1\x84'

In [17]: codecs.encode(b'hage', 'uu')
Out[17]: b'begin 666 <data>\n$:&%G90  \n \nend\n'

参考にしたところ。

qiita.com

マニュアル。

7.2. codecs — codec レジストリと基底クラス — Python 3.6.1 ドキュメント

キーワード。 暗号、復号

<Python, yaml> Yamlしてみた。

設定ファイル config fileの1つの形式である、yamlをやってみた。

In [1]: s = '''
   ...: name: Hage
   ...: sex: male
   ...: class: useless
   ...: hair: nothing
   ...: arms:
   ...: - gun
   ...: - pachinko
   ...: '''

In [3]: with open('aaa.yaml', 'w') as f:
   ...:     f.write(s)
   ...:     

In [4]: more aaa.yaml

name: Hage
sex: male
class: useless
hair: nothing
arms:
- gun
- pachinko

In [5]: import yaml

In [6]: with open('aaa.txt', 'r') as f:
   ...:     data = yaml.load(f)
   ...:     

In [7]: data
Out[7]: 
{'arms': ['gun', 'pachinko'],
 'class': 'useless',
 'hair': 'nothing',
 'name': 'Hage',
 'sex': 'male'}

にゃるほど。

参考にさせてもらったところ。

www.lifewithpython.com

PyYAMLDocumentation – PyYAML

Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

<selenium, Python> Proxyの設定... Firefoxの場合と、Pyvirtualdisplay

seleniumProxyを指定する方法…Firefoxの場合。
あと、Pyvirtualdisplayで、Firefoxのヘッドレスheadlessをやってみた。

ヘッドレス、、とは、GUI無し。  つまり、うまくいけばtelnetrshで端末から入って、コマンドラインで動かせる。

rom selenium import webdriver
import time
import os
from pyvirtualdisplay import Display

url = 'http://www.yahoo.co.jp'
proxy = webdriver.Proxy()
proxy.proxy_type['string'] = 'AUTODETECT'

with Display(visible=0, size=(800, 600)):
    d = webdriver.Firefox(proxy=proxy)
    d.get(url)
    time.sleep(10)

    print(d.title)
    d.get_screenshot_as_file('{}.png'.format(os.path.basename(__file__)))

    d.quit()

うまくいった。
すばらしい! やったー。

いつもいつもお世話になるスタックオーバフロー。

stackoverflow.com

マニュアル。

https://seleniumhq.github.io/selenium/docs/api/py/webdriver/selenium.webdriver.common.proxy.html

PyVirtualDisplay — PyVirtualDisplay 0.2.1 documentation

<Json, jQuery> JSONP

サイトを越えて、すなわち、クロスドメインcloss domainで、
JSONデータを$.getJSON()したいときは、JSONPらしい。

iwb.jp

ふーん。

結局、$.getJSON()先生でなくて、$.ajax()さんでやったんだけど、動いた。

$(function(){
    $.ajax("http://hanage.hana.co.jp/json/return",
        {
            type: "get",
            data: { q: "f" },
            dataType: "jsonp"
        }
    )
    .done(function(data){
        alert("Aha!");
    })
    .fail(function(){
        alert("Boo...");
    });
});

参考。
エラー発見までの過程。。。
対象URLにアクセス。
Google ChromeF12をポチ。
デバックモードで下記を見る。
一番下のエラーメッセージ XMLHttpRequest...ほげほげで、ああー、JSONゲットできなかったんだと知る。

f:id:nekoyukimmm:20170606152241p:plain

<Json, REST API> Json Test

REST APIの実験をかねて、Jsonのデータを返してくれるようなとこないかな? と探したらあった。

http://www.jsontest.com/

こりゃいいや。
早速試す。

In [1]: import requests

In [2]: requests.get('http://echo.jsontest.com/key/value/one/two')
Out[2]: <Response [200]>

In [3]: r = requests.get('http://echo.jsontest.com/key/value/one/two')

In [4]: r.content
Out[4]: b'{\n   "one": "two",\n   "key": "value"\n}\n'

In [5]: import json

In [8]: r.content.decode('utf-8')
Out[8]: '{\n   "one": "two",\n   "key": "value"\n}\n'

In [10]: json.loads(r.content.decode('utf-8'))
Out[10]: {'key': 'value', 'one': 'two'}

いける。 いけるじょー。

<Python> 文字コード

文字コード Character Codesで少し遊んだ。

UTF-8のコード表。

UTF-8コード表(1)

このコード表を元にデコードdecodeしてみる。

In [36]: b'\xe3\x81\x82'.decode()
Out[36]: 'あ'

In [37]: b'\xc3\xa0'.decode()
Out[37]: 'à'

なるへそ。
じゃ、ってことで、エンコードしてみる。

In [38]: 'あ'.encode()
Out[38]: b'\xe3\x81\x82'

ふむふむ。

で、わかりずらかったのがリテラルちゅうやつ。
要はどう表記するか? ということらしい。

アスキー文字ascii君達は、\xで始まるコード記号でスタートしなくても認識してくれるようだ。

In [40]: b'7'.decode()
Out[40]: '7'

In [41]: b'\x37'.decode()
Out[41]: '7'

参考。

qiita.com

uxmilk.jp

マニュアル。

https://docs.python.jp/3/howto/unicode.html#converting-to-bytes