仓库中有openresty (nginx), php (7.0-7.1), mysql (5.7-8.0), nmap等,详见这里;
适用于Ubuntu 16.04 32位或64位;一键配置脚本
wget https://dl.yooooo.us/build/setup.sh -O -|sudo bash
IP Geolocation and ASN: 显示GeoIP和ASN的Chrome插件
写了一个显示GeoIP和ASN的Chrome插件,通过请求ip.yooooo.us得到GeoIP(Maxmind数据库)和ASN信息(自己爬的),怕隐私泄露的可以自己搭一个。
效果如图:
下载地址:
https://dl.yooooo.us/share/IP_Geo_Asn.zip
下载后解压,在Chrome->插件 中选择“加载已解压的扩展程序”
一个使用Cloudflare API v4的动态DNS脚本
分享一个使用Cloudflare API v4的动态dns脚本(Gist地址或本地下载)。
因为11月Cloudflare就要下线v1版本的API了,而Openwrt里的ddns-scripts并没有支持新版,所以自己写了一个。
仅依赖curl(可以改成wget)。支持v4和v6。会请求ip.yooooo.us得到公网IP地址,怕隐私泄露的可以自己搭一个。
This is a DDNS script using Cloudflare APIv4 written in bash (Gist or Download directly).
I wrote this because Cloudflare is going to remove support for the old API on Nov. this year. And the ddns-scripts package in Openwrt is not yet supporting the new API .
This script only depends on curl (can be modified to use wget). It will use ip.yooooo.us to query IPv4 and IPv6. You can use this link to set up your own query server.
deluge各种问题导致状态机抽风
遇到一个问题,设置了deluge分享率和做种时间到一定时间之后自动删除种子。之前一直很好使的,最近发现到了指定的分享率或者做种时间之后,种子状态变成了一直Paused或者一直Seeding。发现有这么几种问题导致deluge抽风:
状态存档的权限不对
是deluged没有对状态存档~/.config/deluge/session.state和~/.config/deluge/state/*的写权限导致的。
因为自身需求使用
# start-stop-daemon -S -c user:www-data -k 000 -x /usr/bin/deluged — -d
启动deluged,deluged具有user的euid和www-data的egid,而~是user:user的。所以就挂了233
直接添加种子下载地址导致一直Paused
deluge可以直接添加种子的http下载地址,取得种子之后自动开始下载,但是这样有一定几率产生万年Paused。
解决办法是自己下载种子之后返回磁力链添加到deluge。
1 2 3 4 5 6 7 8 9 10 11 |
import re import bencode import requests from hashlib import sha1 hd = {} proxyset = {} if re.findall("^http", magnet): r = requests.get(magnet, headers = hd, proxies = proxyset) t = bencode.bdecode(r.content) magnet = "magnet:?xt=urn:btih:%s" % sha1(bencode.bencode(t['info'])).hexdigest() |
Jason Mraz & Colbie Caillat – Lucky
Python float和decimal
在Windows上打包Python脚本时遇到一个需求,将浮点数转成字符数组,比如输入1.001,得到[‘1′,’0′,’0′,’1’]。
一开始想当然地用了:
version = 2.001
v = list(str(int(version * 1000)))
发现好像哪里不对,得到的v是[‘1’, ‘0’, ‘0’, ‘0’]。想了一想应该是浮点数的精度问题,因为一看version * 1000 = 1000.9999999999999。
所以有这么几种解决方法:
v = list(str(int(round(version * 1000))))
或者:
v = list(str(version).replace(“,”, “”) + “000”)[:4]
或者用decimal模块,decimal是固定小数点位数的,用的是十进制乘除法,所以(在设定的位数内)不会产生误差:
from decimal import getcontext, Decimal
getcontext().prec = 4
v = list(str(Decimal(version) * 1000))
需要注意的是decimal会自动转换科学计数法,可以用”%d” % Decimal(d)来得到原始值。