2021-03-15
Nignx 日志分析工具 GoAccess 在 CentOS 的安装和使用
$ wget https://tar.goaccess.io/goaccess-1.4.6.tar.gz
$ tar -xzvf goaccess-1.4.6.tar.gz
$ cd goaccess-1.4.6/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ ./configure
$ make
$ make install
安装完成后,运行
$ goaccess
会提示配置文件目录,在最后添加:
time-format %T
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
转到日志所在目录,运行
goaccess -f 日志名.log -a > report.html
下载该 HTML 打开即可看到报表。
2021-02-17
使用 Excel 在地图上标注城市
一、在表格中以“地区”为列标题,依次写出城市名称。
选中这些单元格(不要选中整个A列),点击插入 - 三维地图 - 打开三维地图(O) 。
第一步
二、找到右边“数据 ”折叠卡,将“位置”字段中的地理类型设置为“城市 ”(不要设置为县/市),在上方选择合适的展示类型(点状图、热力图等)。
第二步
三、调整主题 、图层选项 等美化外观。
第三步
2021-01-11
微信小程序健康打卡自动填报程序
应在不瞒报的前提下使用自动化健康打卡程序。
您应当知晓使用自动化程序可能造成学校处分等后果。
流程概览
抓包流程
抓包 使用软件 Fiddler 4 进行抓包。
前期具体步骤:
Android 用户可参考:使用fiddler实现手机抓包 - 简书
iOS 用户可参考:fiddler抓苹果手机上app包的方法... - CSDN
值得注意的是,许多浏览器已不支持 TLS1.0/1.1,因此需要手动在 Tools
- Options
- HTTPS
中修改 Protocols
为
<client>;ssl3;tls1.2
HTTPS-ver.png
配置好后,试着进行打卡,发现向服务器传送了数据。
POST https: //▇▇▇.▇▇▇.edu.cn/v1/temperatures/ HTTP/1.1
Host: ▇▇▇.▇▇▇.edu.cn
Content-Type: application/json; charset=utf-8
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Accept: application/json
User-Agent: ▇▇▇
Authorization: JWT ▇▇▇▇
Referer: https: //servicewechat.com/▇▇▇/▇▇/▇▇▇.html
Content-Length: 234
{
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": false,
"watched_location": "",
"stayed": false,
"stayed_contacted": false,
"family_conditions": "",
"is_contacted": false,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
我们可以看到,关键的信息是 Header 中的 Authorization
和 JSON。
JSON 当中是填报的表单,其中 value
是体温值(摄氏度)。
试着退出打卡系统重新登录,发现向服务器传送数据如下。
POST https://▇▇▇.▇▇▇.edu.cn/▇▇▇/▇▇▇/login/ HTTP/1.1
Host: ▇▇▇.▇▇▇.edu.cn
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Accept: application/json
User-Agent: ▇▇▇
Referer: https://servicewechat.com/▇▇▇/▇▇/▇▇▇.html
Content-Length: 59
Accept-Language: zh-cn
{"username":"▇▇▇▇▇▇","password":"▇▇▇▇▇▇","type":""}
其中 username
和 password
均为明文,不需要做改动。
响应后返回的 JSON 为
{
"token": "▇▇▇",
"token_expiration_datetime": "2021-07-09 21:12:38"
}
这里的 token 加上前缀 JWT
即为上文中 header 内的 Authorization
的值。
至此,抓包部分结束。
程序设计 由于之前没有学过 Python ,但是觉得 Python 应该可以简单实现并在服务器上部署,决定用 Python 试一试。
在网上查阅资料后,相关设计步骤如下。
需要引用 requests
和 json
包,用于发送 POST 请求和解析 JSON 数据。
程序如下。
import requests
import json
url = 'https://▇▇▇.▇▇▇.edu.cn/v1/temperatures/'
datas = {
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": 0,
"watched_location": "",
"stayed": 0,
"stayed_contacted": 0,
"family_conditions": "",
"is_contacted": 0,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
headers={"Authorization": "JWT ▇▇▇"}
morning =requests.post(url,data=datas,headers=headers)
print(morning)
print(morning.text)
也可以设计成填入账号密码就可以自动获取 token 打卡的形式。
import requests
import json
url_morning = 'https://▇▇▇.▇▇▇.edu.cn/v1/temperatures/'
url_login = 'https://▇▇▇.▇▇▇.edu.cn/▇▇▇/▇▇▇/login/'
#下文中的学号和密码自行修改
datas_login = {"username":"▇▇▇▇▇▇","password":"▇▇▇▇▇▇","type":""}
datas_morning = {
"value": "36",
"condition": "A",
"home_condition": "A",
"watched": 0,
"watched_location": "",
"stayed": 0,
"stayed_contacted": 0,
"family_conditions": "",
"is_contacted": 0,
"contacted_health": "",
"personid": "",
"notes": "",
"location": {}
}
login = requests.post(url_login,data=datas_login)
print("登录状态",login)
dic = json.loads(login.text)
token = "JWT "+dic['token']
headers={"Authorization": token}
morning = requests.post(url_morning,data=datas_morning,headers=headers)
print("---------------------")
print("晨报状态",morning)
print("晨报返回值",morning.text)
自动运行 对于服务器,可以配置好 Python 后设置定时任务。注意安装对应的包。
个人电脑来讲,每天手动运行或者用其他方法令其自动运行即可。
2021-01-06
利用 bat 批处理脚本循环自动终止程序
代码参考:windows .bat批处理实现进程监控确保程序运行 - 百度经验
程序预期 可以自动检测某程序是否运行并予以打击制裁。
代码 @echo off
rem 下面的AppName是进程名字,AppPath是路径,修改等号后面的内容就行
set AppName=swap.exe
set AppPath=D:\code\cpp
title 进程监控
cls
echo.
echo 进程监控开始……
echo.
:startjc
rem 从进程列表中查找指定进程
rem 下面语句也可写成 qprocess %AppName% >nul (经验发布后补充)
qprocess|findstr /i %AppName% >nul
rem 变量errorlevel的值等于0表示查找到进程,否则没有查找到进程
if %errorlevel%==0 (
echo ^>%date:~0,10% %time:~0,8% 发现进程,正在制裁
taskkill /f /im %AppName%
exit
)else (
echo ^>%date:~0,10% %time:~0,8% 没有发现程序进程
)
rem 用ping命令来实现延时运行,下方(1,1,4)中的4可以修改为想要的秒数
for /l %%i in (1,1,4) do ping -n 1 -w 1000 168.20.0.1>nul
goto startjc
echo on
2020-12-13
替换 PHP creat_function() 函数
自 PHP 7.2.0 开始,函数 creat_function()
由于安全原因被弃用。而在一些老版本的插件中仍在使用此函数,我们只需对其进行稍微改动即可正常使用。
例如
creat_function(__A__ , __B__);
只需将其更改为
function(__A__){
__B__;
}
即可。
2020-11-10
常用编程语句备忘
万能头文件
#include<bits/stdc++.h>
保留小数点
#include <iomanip>
cout << setiosflags(ios::fixed) << setprecision(2);//保留两位小数
2020-10-21
NADH 和 NADPH 的探讨
NADH NADH 在细胞的有氧呼吸中起作用。 在中学阶段,我们把细胞的有氧呼吸笼统概括为三个阶段:
第一阶段,1 分子葡萄糖分解为 2 分子丙酮酸,此时还剩余 4 个氢原子。这些氢原子和 NAD+ 结合形成了 NADH 。
C6 H12 O6 →2C3 H4 O3 (丙酮酸)+4[H]+少量能量 第二阶段,2 分子的丙酮酸和 6 分子的水结合,形成 6 分子的二氧化碳和 20 个氢原子。同样地,这些氢原子和 NAD+ 结合形成了 NADH 。
2C3 H4 O3 +6H2 O→6CO2 +20[H]+少量能量 第三阶段,前两阶段结合成的 24 个 NADH 全部又脱氢重新变成 NAD+ ,这些氢原子和氧气结合释放出大量能量。
24[H]+6O2 →12H2 O+大量能量 NADH叫做还原性辅酶 I ,也叫线粒体素。NAD+ 叫做辅酶 I 。在这个过程的开始与结束,NAD+ 没有发生变化,类似于催化剂一样。而由于 NADH 获得了氢原子,具有了还原性。
NADPH NADPH 在光合作用中起作用。
NADP+ 是 NAD+ 接受了磷酸基团的产物。
在光合作用中:
光反应阶段,叶绿体中的色素捕捉光能,使得水分解成氧气和氢原子,这些氢原子和 NADP+ 结合形成了 NADPH(即课本中所说 [H] ,但与上文提到的 [H] 不同,上文中的是 NADH )。
暗反应阶段,NADPH 提供氢原子和三碳化合物(C3 )结合,形成了 CH2 O(糖类),同时 NADPH 又变回了 NADP+ 。
光合作用过程图解
NADPH 叫还原型辅酶Ⅱ,NADP+ 叫做辅酶Ⅱ。
2020-10-02
PC 使用 iTunes 将照片向 iPhone 的不同相册导入
本文介绍的是使用 PC 端 iTunes 将照片导入 iPhone 设备不同相册的方法。
在开始前,将欲导入的照片按照相册分为不同的文件夹,文件夹名称即为相册的名称。接着,将所有的文件夹放在一个文件夹中,即下文所提到的“上级文件夹”。
将 iPhone 用数据线缆连接到 PC ,在 iTunes 主界面菜单栏下方找到 iPhone 图标并点击。
第一步
在左侧“设置”栏目中点击“照片”,勾选“同步照片”前的复选框,并在“复制照片来源”选择所有文件夹的上级文件夹。在下面的区域选择“所选文件夹”,并在“文件夹”菜单勾选你需要导入的文件夹(相册)。点击“应用”。
第二步
紧接着,观察上方状态栏。进行到2/6时,点击左侧跳过按钮以跳过备份环节。
第三步
第四步
耐心等待同步完成,你就可以在 iPhone 中找到归属于“来自我的 Mac ”的这些相册。
第五步
完成
2020-09-30
CentOS 命令备忘录
最近在捣鼓服务器,记录一些常用命令。https://www.cnblogs.com/heqiuyong/p/10460150.html
服务器端口 1、开放端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent # 开放5672端口
firewall-cmd --zone=public --remove-port=5672/tcp --permanent #关闭5672端口
firewall-cmd --reload # 配置立即生效
2、查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports
3.、关闭防火墙
如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service
4、查看防火墙状态
firewall-cmd --state
5、查看监听的端口
netstat -lnpt
PS:centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
6、检查端口被哪个进程占用
netstat -lnpt |grep 5672
7、查看进程的详细信息
ps 6832
8、中止进程
kill -9 6832
2020-06-26
JavaScript 实现图片懒加载 (Lazyload)
本文代码来自 知乎 / Daotin : 3分钟搞定图片懒加载 之前找到许多懒加载的源码都需要手动定义图片大小,这对于一部分页面来讲很困难。以下的代码则可以绕过这一步骤,从而更加容易添加到网站上。
首先需要将图片调整为 data-src
属性进行加载,并根据自己需要添加 class
<img data-src="./images/1.jpg">
在网页末尾,引用 jQuery 和相关代码
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(function () {
// 第一次需要先加载一次
lazyLoad();
$(window).scroll(lazyLoad);
function isInSight(el) {
const bound = el.getBoundingClientRect();
const clientHeight = $(window).height(); // 可视区高度
return bound.top <= clientHeight + 100; // 这里有个+100是为了提前加载。(推荐数值大于一个屏幕高度 px ,只 +100px 在实践中略显滞后。——摘者按)
}
function lazyLoad() {
$.each($('img'), (index,item)=>{ //选择器这里可以加入自己设置的 class(摘者按)
if(isInSight(item)) {
$(item).attr('src', $(item).attr('data-src'));
}
});
}
});
</script>
2020-05-01
利用 JavaScript 根据分辨率大小玩“双标”
本文中代码援引 CSDN 用户@天际的海浪 原文地址 https://bbs.csdn.net/topics/392184885 代码 <script type="text/javascript">
if (screen.width<640)
document.write('<script type="text/javascript" src="1.js"><\/script>');
else
document.write('<script type="text/javascript" src="2.js"><\/script>');
</script>
原理 依据 JavaScript 的 Screen
对象之 Width
属性读取屏幕宽度。
相关阅读
Screen 对象 | 菜鸟教程 - https://www.runoob.com/jsref/obj-screen.html Screen width 属性 | 菜鸟教程 - https://www.runoob.com/jsref/prop-screen-width.html
2020-04-03
MediaWiki 相关自定义设置
供自己查阅使用,不定期更新。
自定义 MediaWiki CSS 样式 MediaWiki定制化改动 - 亚楠老猎人
在搜索栏输入 MediaWiki:Timeless.css
后回车,即可进行快捷编辑。
顶部/底部/侧边栏 内容投放 Displaying Google Adsense in MediaWiki - Guy Rutenberg
顶部
$wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) {
$siteNotice .= <<< EOT
<p>HTML 内容插入至此</p>
EOT;
return true;
};
底部
$wgHooks['SkinAfterContent'][] = function(&$data, $skin) {
global $myAdCode;
$data .= '<div style="text-align:center;">';
$data .= <<< EOT
<p>HTML 内容插入至此</p>
EOT;
$data .= '</div>';
return true;
};
侧边栏
$wgHooks['SkinBuildSidebar'][] = function($skin, &$bar) {
$out = <<< EOT
<p>HTML 内容插入至此</p>
EOT;
$out .= "<script>$('#p-Ads').addClass('persistent');</script>";
$bar['Ads'] = $out;
return true;
};