vol.moe 的批量选取油猴脚本

最近学习了点javascript。这东西挺好玩的。

正好日常网站vol.moe的一些功能很不顺手。就改写下。

  • 没全选推送。(当你要试着推送一整套海贼王的时候,你真的挺恨网站作者的)
  • 每次都是同一标签打开漫画详情。(一不小心关了,之前的翻页就算废了)

于是,做了个油猴脚本。

安装地址见此:Greasyfork

源代码:Github

Bug反馈:Github Issue

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// ==UserScript==
// @name vol.moe 增强工具
// @namespace monkeypatch.moe.vol
// @version 0.1
// @description * 新窗口打开漫画页详情。 * 漫画页中,添加全选按钮,批量选择推送的漫画。
// @author Shazoo
// @match http*://vol.moe/comic/*.htm
// @match http*://vol.moe/
// @match http*://vol.moe/list/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
var cur_url = window.location.href;
if (/^https?:\/\/vol\.moe\/comic\/\d+\.htm/.test(cur_url)){
// 给漫画详情页添加全选功能
var loc_btn = document.getElementById('push_button');
var ctrl_btn = document.createElement('template');
ctrl_btn.innerHTML='<a href="javascript:void(0);" id="ctrl_btn" style="margin-right: 10px;" class="weui_btn weui_btn_mini weui_btn_default">全选</a>';
ctrl_btn = ctrl_btn.content.firstChild;
loc_btn.parentNode.insertBefore(ctrl_btn, loc_btn);
var is_selected = false;
ctrl_btn.addEventListener('click',function(){
is_selected = ~is_selected;
var cb = document.getElementsByName('checkbox_push');
for (var idx=0; idx < cb.length; idx++) {
cb[idx].checked = is_selected;
}
sum_push_item();
}, false);
}else {
// 在列表页面添加新窗口打开功能
var alist = document.getElementsByTagName('a');
for (var idx = 0; idx < alist.length; idx++) {
if (/comic\/\d+\.htm/.test(alist[idx].href)){
alist[idx].target = '_blank';
}
}
}
})();

Airpods 单耳失灵的解决办法

Airpods 用起来很舒服。不过,昨日碰到个比较郁闷的事情。

运动后,估计有点点进汗,加上左耳不小心摔过几次,突然发现左耳没有声音了。

大概症状:

  • 只有一个耳朵有声音
  • 在 设置 -> 电池 里面,只能看到右耳有连接。
  • 打开盒子,iphone弹出的界面里面,也只能看到右耳。

最后搞定了,方案如下:

继续阅读···

搭建自己的Google--nginx反向代理Google(ubuntu 16.04)

最近由于不能描述的原因,很多服务器挂了……

实际上,作为技术人员,翻墙之所以为刚需,就是为了Google。

bing是残废;baidu是垃圾;唯有Google才能准确提供相关技术文档。

那么,在目前的网络环境下,如何能低风险的访问Google(节省下有关部门的茶钱)?

继续阅读···

displayswitch.exe -- 快速关闭、打开第二显示器

最近更换了dell显示器后,发现Intel的HD4000显卡在多显示器的情况下,偶尔会跳动。

很烦,不过也没必要换显卡,毕竟第二显示器只是在调试的时候才会用到,平时都是关闭。

不过,作为懒蛋,俺并不喜欢到系统自带的显示配置里面去关闭显示器。

于是,可以使用这个工具:displayswitch.exe

继续阅读···

shuf--随机获取文件中的N行

shuf , GNU命令集中的一员。一般用来对输入数据进行随机排序。(和sort –random-sort很像)。

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ls -1
data
doc
images
lib
LICENSE
markpress
markpress.py
README.md
wordpress.ini
$ls -1 | shuf
markpress.py
images
doc
markpress
data
wordpress.ini
LICENSE
lib
README.md
$cat SO_BIG_FILE.txt | shuf -n 5
从某个超大文件中随机选取5行
$shuf -r -n 100 -e Head Tail
随机丢100次硬币。`-r` 是指可以重复选取。

PS:偶尔看看info coreutils 挺长见识的。

Let's encrypt CertBot的一个bug--附修改

在虚拟主机的模式下,certbot在生成www子域名的时候,会出现问题。

原来的向导类的方法选择后,会造成www子域名使用根域名的证书,从而出错。

如果出现问题,可以这么操作:

将原本的向导自选的脚本:

1
sudo certbot --nginx

改为强制指定域名:

1
sudo certbot --nginx -d www.xxxxxxx.com

certbot提示是否重新验证,同意即可。

Wordpress中,自动修改发布时间的js书签

最近在搞一个采集站。用wordpress实现展示。

一番爬虫采集后,用python post到wordpress的草稿箱中。

问题来了,每次审核发布的时候,发布时间竟然是以进草稿箱为准。

这不能忍啊。每次审核发布后,时间都得手动调整,太累。

方法很多种,这里用最简单的。

在箭头的地方输入以下js代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
javascript:void((function(){
aa = document.getElementById('aa');
mm = document.getElementById('mm');
jj = document.getElementById('jj');
hh = document.getElementById('hh');
mn = document.getElementById('mn');
var curDate = new Date();
aa.value = curDate.getFullYear();
mm.selectedIndex = curDate.getMonth();
jj.value = curDate.getDate();
hh.value = curDate.getHours();
mn.value = curDate.getMinutes();
})());

这样,发布前点击下这个书签,时间就改成当前时间了。

PS:为啥一个嵌入式工程师懂这个????

Python自动爬取Bing每日美图(crontab)

入门向的帖子。给某人的教程。

首先是python爬虫脚本。注意,里面有输入日志,用来保留图片的url。

没加什么异常容错,就是单纯的原理脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import re, requests, urlparse, os, datetime
bing_url = 'http://cn.bing.com'
c = requests.get(bing_url).content
# 正则的标签模式,可以用dict来轻松访问,省得元组编号了。
r = 'g_img={url: "(?P<url>.+?)"'
img_path = re.search(r, c).groupdict()['url']
img_url = urlparse.urljoin(bing_url , img_path)
today_str = datetime.datetime.now().strftime("%Y-%m-%d")
# print作为日志输出。在shell中重定向到日志文件中即可
print '{}:{}'.format(today_str, img_url)
file_name = '{}_{}'.format(today_str, os.path.basename(urlparse.urlsplit(img_url).path))
# stream流模式,方便保存图片。
resp = requests.get(img_url, stream=True)
if resp.status_code == 200:
with open(file_name, 'wb') as f:
for chunk in resp.iter_content(1024):
f.write(chunk)

然后,用crontab -e 来添加一个日常任务。每天凌晨1:30分跑起来:

1
30 1 * * * cd /srv/bing_daily_image; /usr/bin/python /srv/bing_daily_image/bing_daily_image.py >> /srv/bing_daily_image/record.log 2>&1

Bingo~

Python 随机打乱list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import random
keywords = ['ajenti', 'django-suit', 'django-xadmin', 'flask-admin', 'flower', 'grappelli', 'wooey', 'algorithms',
'pypattyrn', 'python-patterns', 'sortedcontainers', 'django-simple-captcha',
'django-simple-spam-blocker', 'django-compressor', 'django-pipeline', 'django-storages', 'fanstatic',
'fileconveyor', 'flask-assets', 'jinja-assets-compressor', 'webassets', 'audiolazy', 'audioread',
'beets', 'dejavu', 'django-elastic-transcoder', 'eyed3', 'id3reader', 'm3u8', 'mingus', 'mutagen',
'pyaudioanalysis', 'pydub', 'pyechonest', 'talkbox', 'timeside', 'tinytag', 'authomatic',
'django-allauth', 'django-oauth-toolkit', 'flask-oauthlib', 'oauthlib', 'python-oauth2',
'python-social-auth', 'rauth', 'sanction', 'jose', 'pyjwt', 'python-jws', 'python-jwt', 'bitbake',
'buildout', 'platformio', 'pybuilder', 'scons', 'django-cms', 'djedi-cms', 'feincms', 'kotti',
'mezzanine', 'opps', 'plone', 'quokka', 'wagtail', 'widgy', 'beaker', 'diskcache',
'django-cache-machine', 'django-cacheops', 'django-viewlet', 'dogpile.cache', 'hermescache',
'johnny-cache', 'pylibmc', 'errbot', 'coala', 'code2flow', 'pycallgraph', 'flake8', 'pylama', 'pylint',
'mypy', 'asciimatics', 'cement', 'click', 'cliff', 'clint', 'colorama', 'docopt', 'gooey',
'python-fire', 'python-prompt-toolkit', 'aws-cli', 'bashplotlib', 'caniusepython3', 'cookiecutter',
'doitlive', 'howdoi', 'httpie', 'mycli', 'pathpicker', 'percol', 'pgcli', 'saws', 'thefuck', 'try',
'python-future', 'python-modernize', 'six', 'opencv', 'pyocr', 'pytesseract', 'simplecv', 'eventlet',
'gevent', 'multiprocessing', 'threading', 'tomorrow', 'uvloop', 'config', 'configobj', 'configparser',
'profig', 'python-decouple', 'cryptography', 'hashids', 'paramiko', 'passlib', 'pynacl', 'blaze',
'open mining', 'orange', 'pandas', 'cerberus', 'colander', 'jsonschema', 'schema', 'schematics',
'valideer', 'voluptuous', 'altair', 'bokeh', 'ggplot', 'matplotlib', 'pygal', 'pygraphviz', 'pyqtgraph',
'seaborn', 'vispy', 'pickledb', 'pipelinedb', 'tinydb', 'zodb', 'mysql-python', 'mysqlclient', 'oursql',
'pymysql', 'psycopg2', 'queries', 'txpostgres', 'apsw', 'dataset', 'pymssql', 'cassandra-python-driver',
'happybase', 'plyvel', 'py2neo', 'pycassa', 'pymongo', 'redis-py', 'telephus', 'txredis', 'arrow',
'chronyk', 'dateutil', 'delorean', 'moment', 'pendulum', 'pytime', 'pytz', 'when.py', 'ipdb', 'pdb++',
'pudb', 'remote-pdb', 'wdb', 'line_profiler', 'memory_profiler', 'profiling', 'vprof',
'django-debug-toolbar', 'django-devserver', 'flask-debugtoolbar', 'hunter', 'lptrace', 'manhole',
'pyelftools', 'pyringe', 'caffe', 'keras', 'mxnet', 'neupy', 'pytorch', 'tensorflow', 'theano',
'ansible', 'cloud-init', 'cuisine', 'docker compose', 'fabric', 'fabtools', 'honcho', 'openstack',
'pexpect', 'psutil', 'saltstack', 'supervisor', 'dh-virtualenv', 'nuitka', 'py2app', 'py2exe',
'pyinstaller', 'pynsist', 'sphinx', 'awesome-sphinxdoc', 'mkdocs', 'pdoc', 'pycco', 's3cmd', 's4cmd',
'you-get', 'youtube-dl', 'alipay', 'cartridge', 'django-oscar', 'django-shop', 'merchant', 'money',
'python-currencies', 'forex-python', 'shoop', 'elpy', 'anaconda', 'sublimejedi', 'jedi-vim',
'python-mode', 'youcompleteme', 'ptvs', 'python', 'magic python', 'liclipse', 'pycharm', 'spyder',
'envelopes', 'flanker', 'imbox', 'inbox.py', 'lamson', 'marrow mailer', 'modoboa', 'nylas sync engine',
'yagmail', 'pipenv', 'p', 'pyenv', 'venv', 'virtualenv', 'virtualenvwrapper', 'imghdr', 'mimetypes',
'path.py', 'pathlib', 'python-magic', 'unipath', 'watchdog', 'cffi', 'ctypes', 'pycuda', 'swig',
'deform', 'django-bootstrap3', 'django-crispy-forms', 'django-remote-forms', 'wtforms', 'cytoolz',
'fn.py', 'funcy', 'toolz', 'curses', 'enaml', 'flexx', 'kivy', 'pyglet', 'pygobject', 'pyqt', 'pyside',
'pywebview', 'tkinter', 'toga', 'urwid', 'wxpython', 'cocos2d', 'panda3d', 'pygame', 'pyogre',
'pyopengl', 'pysdl2', 'renpy', 'django-countries', 'geodjango', 'geoip', 'geojson', 'geopy', 'pygeoip',
'beautifulsoup', 'bleach', 'cssutils', 'html5lib', 'lxml', 'markupsafe', 'pyquery', 'untangle',
'weasyprint', 'xmldataset', 'xmltodict', 'grequests', 'httplib2', 'requests', 'treq', 'urllib3', 'ino',
'keyboard', 'mouse', 'pingo', 'pyro', 'pyuserinput', 'scapy', 'wifi', 'hmap', 'imgseek', 'nude.py',
'pagan', 'pillow', 'pybarcode', 'pygram', 'python-qrcode', 'quads', 'scikit-image', 'thumbor', 'wand',
'clpython', 'cpython', 'cython', 'grumpy', 'ironpython', 'jython', 'micropython', 'numba', 'peachpy',
'pyjion', 'pypy', 'pysec', 'pyston', 'stackless python', 'bpython', 'jupyter notebook (ipython)',
'ptpython', 'babel', 'pyicu', 'apscheduler', 'django-schedule', 'doit', 'gunnery', 'joblib', 'plan',
'schedule', 'spiff', 'taskflow', 'eliot', 'logbook', 'logging', 'sentry', 'metrics', 'nupic',
'scikit-learn', 'spark ml', 'vowpal_porpoise', 'xgboost', 'pyspark', 'luigi', 'mrjob', 'streamparse',
'dask', 'python(x,y)', 'pythonlibs', 'pythonnet', 'pywin32', 'winpython', 'attrs', 'blinker',
'itsdangerous', 'pluginbase', 'pychievements', 'tryton', 'gensim', 'jieba', 'langid.py', 'nltk',
'pattern', 'polyglot', 'snownlp', 'spacy', 'textblob', 'mininet', 'pox', 'pyretic', 'sdx platform',
'asyncio', 'diesel', 'pulsar', 'pyzmq', 'twisted', 'txzmq', 'napalm', 'django-activity-stream',
'stream-framework', 'django models', 'sqlalchemy', 'awesome-sqlalchemy', 'orator', 'peewee', 'ponyorm',
'pydal', 'python-sql', 'django-mongodb-engine', 'flywheel', 'hot-redis', 'mongoengine', 'pynamodb',
'redisco', 'butterdb', 'dataset', 'pip', 'python package index', 'conda', 'curdling', 'pip-tools',
'wheel', 'warehouse', 'warehouse', 'bandersnatch', 'devpi', 'localshop', 'carteblanche',
'django-guardian', 'django-rules', 'delegator.py', 'sarge', 'sh', 'celery', 'huey', 'mrq', 'rq',
'simpleq', 'annoy', 'fastfm', 'implicit', 'libffm', 'lightfm', 'surprise', 'tensorrec',
'django-rest-framework', 'django-tastypie', 'eve', 'flask-api-utils', 'flask-api', 'flask-restful',
'flask-restless', 'cornice', 'falcon', 'hug', 'restless', 'ripozo', 'sandman', 'apistar',
'simplejsonrpcserver', 'simplexmlrpcserver', 'zerorpc', 'astropy', 'bcbio-nextgen', 'bccb', 'biopython',
'cclib', 'networkx', 'nipy', 'numpy', 'open babel', 'obspy', 'pydy', 'pymc', 'rdkit', 'scipy',
'statsmodels', 'sympy', 'zipline', 'simpy', 'django-haystack', 'elasticsearch-dsl-py',
'elasticsearch-py', 'esengine', 'pysolr', 'solrpy', 'whoosh', 'marshmallow', 'apex', 'python-lambda',
'zappa', 'tablib', 'marmir', 'openpyxl', 'pyexcel', 'python-docx', 'relatorio', 'unoconv', 'xlsxwriter',
'xlwings', 'xlwt', 'pdfminer', 'pypdf2', 'reportlab', 'mistune', 'python-markdown', 'pyyaml', 'csvkit',
'unp', 'cactus', 'hyde', 'lektor', 'nikola', 'pelican', 'tinkerer', 'django-taggit', 'genshi', 'jinja2',
'mako', 'hypothesis', 'mamba', 'nose', 'nose2', 'pytest', 'robot framework', 'unittest', 'green', 'tox',
'locust', 'pyautogui', 'selenium', 'sixpack', 'splinter', 'doublex', 'freezegun', 'httmock',
'httpretty', 'mock', 'responses', 'vcr.py', 'factory_boy', 'mixer', 'model_mommy', 'coverage',
'mimesis', 'fake2db', 'faker', 'radar', 'fuckit.py', 'chardet', 'difflib', 'ftfy', 'fuzzywuzzy',
'levenshtein', 'pangu.py', 'pyfiglet', 'pypinyin', 'shortuuid', 'unidecode', 'uniout', 'xpinyin',
'awesome-slugify', 'python-slugify', 'unicode-slugify', 'phonenumbers', 'ply', 'pygments', 'pyparsing',
'python-nameparser', 'python-user-agents', 'sqlparse', 'apache-libcloud', 'boto3', 'django-wordpress',
'facebook-sdk', 'facepy', 'gmail', 'google-api-python-client', 'gspread', 'twython', 'furl', 'purl',
'pyshorteners', 'short_url', 'webargs', 'moviepy', 'scikit-video', 'bjoern', 'fapws3', 'gunicorn',
'meinheld', 'netius', 'paste', 'rocket', 'uwsgi', 'waitress', 'werkzeug', 'haul', 'html2text', 'lassie',
'micawber', 'newspaper', 'opengraph', 'python-goose', 'python-readability', 'sanitize', 'sumy',
'textract', 'cola', 'demiurge', 'feedparser', 'grab', 'mechanicalsoup', 'portia', 'pyspider',
'robobrowser', 'scrapy', 'bottle', 'cherrypy', 'django', 'awesome-django', 'flask', 'awesome-flask',
'pyramid', 'awesome-pyramid', 'sanic', 'tornado', 'turbogears', 'web2py', 'github web2py',
'autobahnpython', 'crossbar', 'django-channels', 'django-socketio', 'websocket-for-python', 'circleci',
'travis ci', 'vexor ci', 'wercker', 'codacy', 'codecov', 'landscape', 'quantifiedcode', 'sqlite3',
'bsddb3', 'pil', 'urlparse']
random.shuffle(keywords)

主要就是使用shuffle函数了。

ps:写这么low的blog,仅是测试下新的host主机提供商:Coding.net

https://coding.net

pps: 代码里面的keywords,是统计的比较流行python库。可以作为常用爬虫的索引词来使用。

7Zip for Windows图标美化版下载(简体中文)

7Zip自带的图标丑的天崩地裂。这几天正好研究7Zip,顺手替换掉一套图标,美化美化。

7Zip的7zs.sfx自解压安装工具包说实话不是很好用。好在其本身源码里面带了NSIS的打包脚本。略作修改,生成Win64和Win32两套安装文件。

版本选择的是最近的稳定版,16.04—–2016年10月官方发布的

下载路径:

继续阅读···