2020年2月

前言

ShadowsocksR,小名酸酸乳,在扶墙届具有着不小的名声,如今机场的大半江山都被这款知名代理工具所占据,我平时的工作学习环境是个人笔记的Linux系统(Ubuntu 18.04),每日都有着上Google的需求,所以扶墙出去也是每日的必需操作,然而这款代理工具发展到至今,一键配置的脚本有很多,Windows下客户端有很多,唯独就是没有Linux环境下的客户端,之前倒是是有一款(electron-ssr),但不久前作者彻底删除了项目,估摸着是被叫去喝茶了,只剩下v0.2.6版本孤零零的存活于世,我曾经尝试过这款软件,使用体验还不错,界面化操作,适用于小白玩家,界面点点点,但作为一名硬核的Linux玩家,命令能实现的骚操作为什么不能用命令行实现呢?GUI在Linux下简直是浪费,为了满足我平时的需求,能够在命令行下直接一键开启代理,更换节点,ssr-command-client应运而生。

介绍

ssr-command-client是我开发的一款基于Python3的酸酸乳命令行客户端,功能简洁,主要是针对于Linux用户在命令行下能够愉快的使用代理上网冲浪,定位清晰,不臃肿,轻量级,没有GUI的限制,可以使用在国内的云服务器(阿里云、腾讯云)中,国内云服务器普遍存在一个问题,git速度很慢很慢,以至于我们在安装一些开源组件从github上拉取源码的过程变得十分缓慢,通常以10KB为秒的计数单位,而ssr-command-client完美解决了这个问题,世界可达,项目地址:https://github.com/TyrantLucifer/ssr-command-client(跪求star)

特性

ssr-command-client主要有以下功能:

  • 支持订阅链接解析
  • 支持指定本地socks5代理端口
  • 支持测试节点ping值

安装方式

git clone https://github.com/TyrantLucifer/ssr-commend-client.git
cd ssr-commend-client
pip3 install -r requirement.txt

使用方法

python3 main.py [OPTIONS]

OPTIONS

-l --list "show ssr list" 展示ssr节点列表
-s --start "start ssr proxy" 启动ssr代理服务
-S --stop "stop ssr proxy" 停止ssr代理服务
-p --port port "assign local port" 指定本地代理端口
-c --config ssr_node_id "generate config json file" 生成指定节点json文件
-u --update "update ssr list" 更新ssr节点列表

效果展示

  • 输出ssr链接节点列表 python3 main.py -l

  • 更新ssr订阅链接 python3 main.py -u

  • 生成ssr节点配置文件 python3 main.py -c ssr_node_id

  • 指定本地代理端口并生成配置文件 python3 main.py -c ssr_node_id -p local_port

  • 启动ssr代理 python3 main.py -s

  • 停止ssr代理 python3 main.py -S

未来计划

  • [ ] 支持多订阅链接解析
  • [ ] 支持自动选择速度最优节点
  • [ ] 支持自动生成PAC代理文件
  • [ ] 支持一键关闭、开启系统PAC网络代理(针对于Ubuntu 18.04)
  • [ ] 支持指定ssr链接启动服务
  • [ ] 支持命令行解析ssr链接信息

总结

没有轮子造轮子,这是我一概的作风,也是我学习编程的主要驱动力,兴趣占据了大半,我想做出一些让大多数人都觉得好用的东西,方便自我也方便他人,到今天为止这是我写的第44篇博客,但是发在公众号的只有几篇,未来我会坚持更新,记录自己的代码人生,code is my life!

Tips

如果有好的建议,欢迎发邮件给我,关注下方我的个人微信公众号在后台留言,或者在项目主页提交issue,如果觉得好用的话,各位读者姥爷在github项目首页帮我点个star,右下角帮我点击在看,感激不尽!

我的微信公众号

前言

前几日,于一月底在家闲的实在无聊,便找了点事情做,写了个小脚本每小时收集实时疫情信息,并保存到数据库中,到我写这篇文章为止,我已经收集到了241396条数据,精确到了地级市的确诊人数、治愈人数、死亡人数,大多数小伙伴们都于下周一返回工作岗位进行复工,下面我将用数据告诉你,为什么国家在下周一敢让你复工。

导入数据

将mysql数据库中的数据导出csv,保存到桌面,记住路径,用sas导入到临时work库中:

filename csvfile '/folders/myfolders/data_files/all_data.csv';

proc import datafile=csvfile
    dbms=csv
    out=work.import;
    getnames=yes;
    guessingrows=32767;
run;

导入的数据集信息如下:

  • confirmedCount:确诊人数
  • curedCount:治愈人数
  • deadCount:死亡人数
  • name:省份、地级市名称
  • parent_id:上级地区名称
  • update_time:更新时间

数据清洗

  • 由于数据源suspectedCount(疑似人数)不正确,需要在数据集里丢掉它
  • update_time的格式是datetime,需要把相关日期提取出来,把时间去掉
  • 需要从时间把时提取出来,方便后面作筛选
data sasr_all_data;
    set work.import;
    datetime = datepart(update_time);
    hour = hour(update_time);
    format datetime yymmddn8.;
    drop suspectedCount update_time;
run;

数据筛选、计算

以湖北省为例

数据筛选

由于湖北省是疫情重灾区,数据量较大,更容易看出疫情蔓延的趋势,所以我们首先将湖北省截止到我写文章的时间点数据(20点)拿出来:

data hubei_data;
    set work.sasr_all_data;
    where datetime between input('2020-01-29',yymmdd10.) 
    and input('2020-02-20',yymmdd10.)
    and hour = 20
    and name = '湖北省';
    drop parent_id;
run;

数据计算

计算每日确诊人数、死亡人数、治愈人数的增长率

data hubei_data_handle;
    set work.hubei_data;
    
    /*新建三个变量来保存数据上次迭代的数据*/
    retain confirmed_temp cured_temp dead_temp;
    
    /*计算增长率*/
    confirmed_growth_rate = abs(confirmed_temp - confirmedCount) / confirmed_temp;
    cured_growth_rate = abs(cured_temp - confirmedCount) / cured_temp;
    dead_growth_rate = abs(dead_temp - confirmedCount) / dead_temp;
    
    /*为临时变量赋值*/
    confirmed_temp = confirmedCount;
    cured_temp = curedCount;
    dead_temp = deadCount;
    
    /*为缺失值赋值为0*/
    if confirmed_growth_rate = . then confirmed_growth_rate = 0;
    if cured_growth_rate = . then cured_growth_rate = 0;
    if dead_growth_rate = . then dead_growth_rate = 0;
run;

在进行完数据计算之后,接下来就是图形展示:

图形可视化分析

我们先看一下湖北省每日的死亡人数和确诊人数:

title "湖北省疫情感染情况图";
proc sgplot data=hubei_data_handle;
  xaxis type=discrete;
  series x=datetime y=confirmedCount / datalabel;
  series x=datetime y=deadCount / 
      datalabel y2axis;
run;
title;

从折线图看,每日增长在逐渐变缓,在02月12日湖北省感染人数明显增长,原因是在12日这天新的领导班子,将之前掩盖的问题彻底揭露了出来,经过新的领导班子的铁腕政策,拐点快要到来,下面看一下死亡人数、确诊人数的增长率:

title "湖北省疫情增长率情况图";
proc sgplot data=hubei_data_handle;
  xaxis type=discrete;
  series x=datetime y=confirmed_growth_rate / datalabel;
  series x=datetime y=dead_growth_rate / 
      datalabel y2axis;
run;
title;

红色线条是死亡增长率,从02月05日开始,死亡率明显下降,同时在12日有了突增,原因还是因为新的领导班子大刀阔斧,将之间旧的问题暴露出来,从12日开始,增长率开始有了明显的下降,蓝色线条是确诊人数增长率,我们也看到了明显的下降,疫情有了明显的控制。

以全国为例

数据筛选

首先需要拿出全国省市在01月29日至02月20日特定时间点(20点)的数据:

data all_data;
    set work.sasr_all_data;
    where datetime between input('2020-01-29',yymmdd10.) 
    and input('2020-02-20',yymmdd10.)
    and hour = 20
    and parent_id = 'NULL';
    drop parent_id;
run;

数据计算

将数据按照日期汇总,计算出全国总的确诊人数、死亡人数、治愈人数:

proc sql;
    create table all_data_sum as
    select t.datetime,
        sum(t.confirmedCount) as confirmedCount,
        sum(t.deadCount) as deadCount,
        sum(t.curedCount) as curedCount
        from all_data t group by t.datetime;
quit;

计算增长率,计算逻辑与之前相似:

data all_data_handle;
    set all_data_sum;
    retain confirmed_temp cured_temp dead_temp;
    confirmed_growth_rate = abs(confirmed_temp - confirmedCount) / confirmed_temp;
    cured_growth_rate = abs(cured_temp - confirmedCount) / cured_temp;
    dead_growth_rate = abs(dead_temp - confirmedCount) / dead_temp;
    confirmed_temp = confirmedCount;
    cured_temp = curedCount;
    dead_temp = deadCount;
    if confirmed_growth_rate = . then confirmed_growth_rate = 0;
    if cured_growth_rate = . then cured_growth_rate = 0;
    if dead_growth_rate = . then dead_growth_rate = 0;
run;

图形可视化分析

首先看一下全国的每日死亡人数和确诊人数:

title "全国疫情详情统计图";
proc sgplot data=all_data_handle;
  xaxis type=discrete;
  series x=datetime y=confirmedCount / datalabel;
  series x=datetime y=deadCount / 
      datalabel y2axis;
run;
title;

虽然曲线在逐渐增长,但是斜率在逐渐变低,那就意味着增长率也在慢慢降低。

接下来看一下增长率:

红色线条是死亡增长率,蓝色线条是感染人数增长率,我们可以明显看到,每日感染人数的增长率都在逐步降低,死亡率也在慢慢降低,疫情得到了明显的控制,增长率已经控制到了2%以下。

总结

通过全国和湖北重灾区数据的可视化分析,我们能够得到的一个结论是,我们的各项数据的增长率在慢慢降低,相信不久的将来,可能是10天以内,增长率会控制在1%以下,这就为全国复工打下了坚实的基础,所以国家才会大力鼓励各地全员开工,恢复经济发展,好了今天的文章就到这里,下面是我的个人微信公众号,如果这篇文章帮到了您,请右下角点一个在看支持我一下,我们下期再见!我是TyrantLucifer,一个专注于Linux、Python、数据挖掘、数据分析的初入门小菜鸡~~

前言

俗话说,好记性不如烂笔头,要想成为一名好的程序员,时刻记录自己遇到的问题和解决方案才能让自己不断成长,所以为了成为一名优秀的程序员,我习惯用Markdown这种语法来记录自己的所见所得。下面就简单介绍一下Markdown

Markdown

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,它的格式简单易学,可以轻易排版出一篇好的笔记。

问题的抛出

在笔记中我经常加入一些配图,用来理解一些概念很有帮助,此时问题便出现了:

  1. 图片存放在哪里?
  2. 图片的时效性问题怎么保证?
  3. 图片的加载速度如何保证?

因为在Markdown笔记中引用图片是用url来进行引用的,每次所引用的图片大多数来自于互联网,源图地址大多数都有防盗链,无法永久的引用到笔记当中,时间不长,就会出现以下情景:

为了避免这种尴尬的情况,又想获得很快的加载速度,之前有一个很好地解决方案,那就是新浪图床,之前新浪大大免费给予图片的外链和永久无限空间的图床,真是优惠了一波又一波的人,可是总有那么些垃圾人去滥用,导致在去年3月份,新浪大大彻底关闭了公众免费图床,导致许多博客博主图片变成404,也包括我,我的博客当时全部把图重新换了一遍,费了老大劲,将图片转移到了自己的云服务器上,但是这样解决问题不代表长久解决问题:

  1. 云服务器空间有限,譬如阿里云、腾讯云学生机,40G内存,但是只能续费3年
  2. 国外云服务器譬如搬瓦工,20G内存,小的可怜,而且高峰时间点必炸,无法保证速度(手动狗头,懂的自然懂)

如果拥有自己的图床(无限空间、访问速度快、安全)该多好?

之前这样的想法简直就是在想pitch,哪有地方让你这么白嫖?

但是现在呢,我发现了一个一站式个人图床解决方案,那就是Github(无限空间)+jsDelivr(免费CDN加持)+PicGo(调用Github API),这样完美解决了当前的燃眉之急。

Github

Github作为每个程序员基本功,在这里我就不多作赘述,自从Github被微软收购之后,公众很是担心微软会把Github原有的精神给污染掉,但这样的担心却是多余的,微软接手Github之后宣布个人仓库永久无限免费空间,白嫖党们瞬间沸腾了~~(手动狗头)

jsDelivr

jsDelivr是一家打通国内与国外的cdn供应商,它向公众开放了免费的Github CDN加持,只需要将自己文件的外链前缀改成他们的服务器即可。

PicGo

之前想着自己用代码实现Github API的上传功能,但我还是想多了,逛了一圈Github果然有先辈将功能完整实现并开发出了一整套产品,那就是PicGo,一键式图床管理,项目地址:https://github.com/Molunerfinn/PicGo,这款软件可以实现下列图床的管理,并且支持网络代理、支持开启本地api server等等一系列强大的功能,有兴趣的小伙伴可以自行去项目页面进行研究,这里不多作赘述。

搭建流程

创建Github仓库

前往Github主页,登陆账户,点击新建仓库按钮:

在新建仓库页面,选择公有库public,如果选成私有库你的图片是显示不出来的,输入完库的名称和描述之后点击创建,这里请记录一下你的owner和你的Respository name,后面要用到:

新建Github token

点击Github页面右上角你的头像,选择settings

进入settings页面,选择Developer settings

进入Developer settings,选择Personal access token

然后输入Note,Note是用来标记这个token是干嘛用的,可以自己定义,再勾选token所具有的权限,就勾选图上的就可以

之后你就会获得一串token,记住:token只显示一次,显示了请务必保存下来

配置PicGo

https://github.com/Molunerfinn/PicGo/releases页面下载最新版本的PicGo,安装到自己电脑上,然后打开:

选择Github图床,按照图里面的配置:

仓库名就是你上面在创建Github仓库时候的用户名/仓库名

分支名填master

Token填你刚才生成的token

存储路径如果没有其他需求的话可以按照我图的填

自定义域名需要填https://cdn.jsdelivr.net/gh/用户名/仓库名

享用

本篇文章所有图片均是由GitHub+jsDelivr+PicGo一站式完成上传加载,祝各位读者老爷能够成功搭建起自己的个人图床!欢迎关注我的个人微信公众号,二维码见下方,我们下期再见!