Ruiyeclub

  • HOME
  • ARCHIVES
  • ABOUT
  • LINKS
🐤SpringBoot学习入门Demo,持续更新中...: https://github.com/ruiyeclub/SpringBoot-Hello

Linux安装nginx和配置https

Posted on 2024-06-27

1.安装nginx

如果你还没有安装Nginx,可以使用你的Linux发行版的包管理器来安装。以下是一些常见发行版的安装命令:

  • 对于Debian/Ubuntu系统:
1
2
sudo apt update  
sudo apt install nginx
  • 对于CentOS/RHEL系统(使用yum):
1
sudo yum install nginx

2.启动nginx

  • 安装完成后,启动Nginx服务:

    1
    sudo systemctl start nginx
  • 并且设置它开机自启:

    1
    sudo systemctl enable nginx

3. 检查Nginx状态

你可以检查Nginx的状态来确保它正在运行:

1
sudo systemctl status nginx

4. 配置Nginx

Nginx的主要配置文件通常位于/etc/nginx/目录下,特别是nginx.conf文件。但大多数配置更改通常会在sites-available/或conf.d/目录中的单独文件中进行,然后通过在nginx.conf中包含这些文件来应用。

  • 打开Nginx的主配置文件(如果你需要直接编辑它):
1
sudo nano /etc/nginx/nginx.conf
  • 重新加载Nginx配置以使更改生效:
1
sudo systemctl reload nginx

或者你可以完全重启Nginx服务:

1
sudo systemctl restart nginx

二、Let’s Encrypt在Linux上免费配置HTTPS

Let’s Encrypt简介Let’s Encrypt是一个由Mozilla、Cisco、Akamai、IdenTrust和EFF等组织发起的项目,旨在通过自动化方式为网站提供免费的SSL/TLS证书。它的目标是促进互联网的加密化,保障用户的在线安全。Let’s Encrypt提供的证书有效期为90天,但可以通过自动化过程免费续期。

1.安装Certbot

1
2
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

2.配置HTTPS

1
sudo certbot --nginx

image-20240627212626690

在浏览器地址栏中输入你的域名并加上https://前缀(例如:https://www.example.com),如果浏览器显示了一个绿色的锁形图标,并且URL地址以https://开头,那么恭喜你,你的网站已经成功配置了HTTPS!

三、配置nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 ssl;
server_name 域名.com;

ssl_certificate /etc/letsencrypt/live/地址/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/地址/privkey.pem;

location / {
proxy_pass http://ip:port;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

四、配置多个域名

可以现在nginx.conf中配置域名,然后在输入sudo certbot --nginx

image-20240730185947293

参考文章:Let’s Encrypt在Linux上免费配置HTTPS


Mac使用Web的自动化测试工具selenium

Posted on 2024-05-27

使用 selenium 模拟浏览器渲染数据,需要依赖各浏览器的驱动才能完成,因此需要单独安装chrome driver。

一、下载对应chrome浏览器驱动

  1. 下载地址:chrome driver

image-20240527155408011

  1. 安装 chrome driver

  2. 解压完 zip 压缩包之后,拷贝二进制文件到 /usr/local/bin 目录下即可

    1
    2
    3
    4
    5
    6
    # 拷贝
    cp chromedriver-mac-arm64/chromedriver /usr/local/bin

    # 授权
    cd /usr/local/bin
    xattr -d com.apple.quarantine chromedriver

二、python调用selenium

  1. 安装selenium
1
pip install selenium
  1. 唤起谷歌浏览器
1
2
3
4
5
6
7
from selenium import webdriver
# 启动谷歌浏览器
driver=webdriver.Chrome()
# 访问一个网页
driver.get("http://www.zhihu.com")
# 退出浏览器
driver.quit()
  1. 调用页面接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver

# 创建一个ChromeOptions对象,用于设置Chrome浏览器的启动选项。
options = webdriver.ChromeOptions()
# 使Chrome以无头模式运行(即不显示浏览器窗口)。这通常用于在服务器环境中进行自动化操作。
options.add_argument('--headless')
# 禁用GPU硬件加速。这是为了在某些无头模式的情况下避免一些bug。
options.add_argument('--disable-gpu')
# 禁用沙盒模式。沙盒模式通常用于安全性,但在某些环境中可能会导致问题,因此这里将其禁用。
options.add_argument('--no-sandbox')
# 设置浏览器的user-agent字符串。这使得请求看起来像是来自一个正常的桌面浏览器,而不是一个自动化工具,从而减少被反爬虫机制识别的风险。
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')

driver = webdriver.Chrome(options=options)
# 让浏览器访问指定的URL,即https://investing.com。
driver.get('https://investing.com')
# 使用浏览器执行JavaScript代码,通过fetch API发送一个HTTP请求到指定的API endpoint,并返回其响应。该响应将被解析为JSON格式并存储在response变量中。
response = driver.execute_script("return fetch('https://api.investing.com/api/financialdata/7310/historical/chart/?interval=P1D&pointscount=160').then(res => res.json())")
print(response)

driver.quit()

创建Telegram机器人🤖API发送请求

Posted on 2024-04-17

申请TG机器人

image-20240417152031003

  1. 打开 Telegram 应用程序然后搜索@BotFather
  2. 单击开始
  3. 单击菜单 -> /newbot 或输入/newbot并点击发送
  4. 按照说明进行操作,直到我们收到这样的消息
1
2
3
4
5
6
7
8
Done! Congratulations on your new bot. You will find it at t.me/new_bot.
You can now add a description.....

Use this token to access the HTTP API:
63xxxxxx71:AAFoxxxxn0hwA-2TVSxxxNf4c
Keep your token secure and store it safely, it can be used by anyone to control your bot.

For a description of the Bot API, see this page: https://core.telegram.org/bots/api
  1. 这是我们的机器人令牌63xxxxxx71:AAFoxxxxn0hwA-2TVSxxxNf4c(确保我们不会将其分享给任何人)。

获取私人聊天的聊天ID

  1. 搜索并打开我们新的 Telegram 机器人

  2. 单击“开始”或发送消息

  3. 在浏览器中打开此网址

1
https://api.telegram.org/bot{our_bot_token}/getUpdates
  • 请注意,我们需要在令牌前加上 bot
  • 例如:https://api.telegram.org/bot63xxxxxx71:AAFoxxxxn0hwA-2TVSxxxNf4c/getUpdates

或者通过@raw_info_bot:

image-20240417151949471

  1. 我们会看到这样的 json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"ok": true,
"result": [
{
"update_id": 83xxxxx35,
"message": {
"message_id": 2643,
"from": {...},
"chat": {
"id": 21xxxxx38,
"first_name": "...",
"last_name": "...",
"username": "@username",
"type": "private"
},
"date": 1703062972,
"text": "/start"
}
}
]
}
  1. 检查result.0.message.chat.id,这是我们的聊天 ID:21xxxxx38

  2. 让我们尝试post发送一条消息https://api.telegram.org/bot63xxxxxx71:AAFoxxxxn0hwA-2TVSxxxNf4c/sendMessage?chat_id=21xxxxx38&text=test123

  3. 当我们正确设置机器人令牌和聊天 ID 时,消息test123应该会到达我们的 Telegram 机器人聊天中。

获取频道的聊天 ID

获取群聊 ID 的最简单方法是通过 Telegram 桌面应用程序。

  1. 在桌面应用程序中打开 Telegram

  2. 将我们的 Telegram 机器人添加到聊天组中

  3. 发送消息至聊天组

  4. 右键单击该消息,然后单击

1
Copy Message Link
  • 我们将得到一个像这样的链接:https://t.me/c/194xxxx987/11/13
  • 图案:https://t.me/c/{group_chat_id}/{group_topic_id}/{message_id}
  • 这是我们的聊天 ID:194xxxx987
  1. 要在 API 中使用群聊 ID,我们需要在其前面加上 number 前缀-100,如下所示:-100194xxxx987

  2. 现在让我们尝试发送消息https://api.telegram.org/bot63xxxxxx71:AAFoxxxxn0hwA-2TVSxxxNf4c/sendMessage?chat_id=-100194xxxx987&text=test123

或者使用python:

1
2
3
4
5
6
import requests

response = requests.post(
url='https://api.telegram.org/bot{0}/{1}'.format(token, method),
data={'chat_id': 12345, 'text': 'hello friend'}
).json()
  1. 当我们正确设置机器人令牌和聊天 ID 时,消息test123应该会到达我们的群聊中。

获取群聊中某个主题的聊天 ID

为了向 Telegram 群组上的特定主题发送消息,我们需要获取主题 ID。

  1. 与上面的步骤类似,我们点击 后Copy Message Link,会得到一个类似: 的链接https://t.me/c/194xxxx987/11/13,所以群组 Topic ID 为11。

  2. 现在我们可以像这样使用它(参见message_thread_id):https://api.telegram.org/bot783114779:AAEuRWDTFD2UQ7agBtFSuhJf2-NmvHN3OPc/sendMessage?chat_id=-100194xxxx987&message_thread_id=11&text=test123

  3. 当我们正确设置机器人令牌和聊天 ID 时,消息test123应该到达我们的群聊主题内。

参考链接:https://stackoverflow.com/questions/31197659/how-to-send-request-to-telegram-bot-api![](https://ruiyeclub.oss-cn-shenzhen.aliyuncs.com/picgo/image-20240417151949471.png)

更新内容

将消息推送至群组

  1. 将机器人拉入群组,发送/{message}@bot消息
  2. 可以通过https://api.telegram.org/bot{token}/getUpdates获取群组id

image-20240829100959057

这里群组id为-4583**9819


将Python脚本打包成可执行的exe文件

Posted on 2024-03-14

将Python程序打包为可执行的.exe文件有多种方法。以下是其中两种常用的方式。

使用PyInstaller库进行打包

  1. 首先确保已经安装了PyInstaller库(如果没有,则通过命令pip install pyinstaller来安装);

  2. 在命令提示符或终端中导航到要打包的Python脚本所在目录;

  3. 运行命令 pyinstaller --onefile your_script.py,这会生成一个名为”dist”的文件夹,并在该文件夹内创建一个与脚本同名的.exe文件。

注意:此方法只适用于单个Python脚本的打包。

  1. 在使用 PyInstaller 打包项目时,有时会遇到缺少 Python 库的问题,导致打包失败。
    1
    pyinstaller --hidden-import=some_module --onefile your_script.py

使用cx_Freeze库进行打包

  1. 首先确保已经安装了cx_Freeze库(如果没有,则通过命令pip install cx-freeze来安装);

  2. 创建一个名为setup.py的新文件,并添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     from distutils.core import setup
    import sys

    if len(sys.argv) == 1 or 'bdist_wininst' not in sys.argv[1]:
    # 设置需要打包的模块及入口点
    modules = ['myapp']

    options = {
    "build_exe": {
    "includes": ["atexit"],
    "excludes": [],
    "packages": [],
    "path": "",
    },
    }

    setup(name="YourProgram", version="0.1", description="Description of Your Program", author="Author Name", url="http://www.example.com/", console=["myapp.py"])
    else:
    pass
  3. 在命令提示符或终端中导航到包含上述setup.py文件的目录;

  4. 运行命令 python setup.py bdist_wininst,这会生成一个名为”dist”的文件夹,并在该文件夹内创建一个与脚本同名的.exe文件。

注意:此方法更适合对多个Python模块进行打包。


如何将SpringBoot打包成.exe项目启动?(转)

Posted on 2024-03-05

前言

近期做了一个前后端合并的spring boot项目,但是要求打包城exe文件,提供给不懂电脑的小白安装使用,就去研究了半天,踩了很多坑,写这篇文章,是想看到这篇文章的人,按照我的步骤走,能少踩坑。

准备

准备工作:

  1. 一个jar包,没有bug能正常启动的jar包
  2. exe4j,一个将jar转换成exe的工具,链接:https://pan.baidu.com/s/1J30uUMJcYnqWCJSr6gkM5w 提取码:6esr
    注册码:L-g782dn2d-1f1yqxx1rv1sqd
  3. inno setup,一个将依赖和exe一起打成一个安装程序的工具,链接:https://pan.baidu.com/s/1DgFo1ceM\_8Bqx\_b-veibbQ提取码:g9jd

开始

以我为例子,我将jar包放在了桌面

img

jar包放在桌面打开安装好的exe4j

img

打开exe4j直接下一步进入界面,选择JAVA转EXE

img

JAVA转EXE然后点下一步,输入名称和输出路径

img

输入名称和输出路径继续点击下一步,选择启动模式

img

选择启动模式下方有个选项,需要设置打包后的程序兼容32和64位系统

img

兼容32和64位系统进来后勾选上

img

勾选然后一直下一步,一直出现如下界面,开始选择jar包以及配置在VM参数配置的地方加上:-Dfile.encoding=utf-8

img

img

img

img

点击下一步,配置JRE

img

配置JRE下拉框点击后进入如下界面

img

img

下拉框点击

img

照着这个样子写的目的是,最终会把本地jre目录和exe一起打包,让exe文件自己去根据路径去查找一起打包的jre,可不用再安装jdk

img

接着下一步,选择Client VM

img

选择Client VM然后一直下一步,最终出现如下界面图片

这个时候你会发现桌面多了一个demo.exe文件,这个时候先别着急点开,接下来就是将jre和exe文件再打个包合并,达到在没有jdk电脑环境下也能运行打开inno setup,左上角File - New

img

打开inno setup直接点下一步,填写配置,应用名称,版本等,随意

img

版本然后点击下一步,这个地方默认就行,直接下一步

img

直接下一步接着选择生成好的exe文件

img

接着选择生成好的exe文件然后下一步,进入这个界面保持默认,直接下一步

img

保持默认依旧下一步,不用管

img

下一步继续下一步,这里是选择语言

img

选择语言然后就是选择输出路径和填写安装程序的名字了

img

选择输出路径然后下一步,直接点Next,然后结束配置到最后一步了,脚本文件,到这里会弹出问你是否马上编译,选择否,先把脚本写好再自己编译

img

编译然后到了最后一步了,把本地的JRE写进脚本

img

img

img

img

``

img

1
Source: "自己本地JRE路径\*"; DestDir: "{app}\{#MyJreName}"; Flags: ignoreversion recursesubdirs createallsubdirs

然后直接编译就好了,会提示保存当前脚本,随便起个名字,下个还可以继续用

img

img

然后等待绿色滚动条结束

img

等待绿色滚动条结束当绿色滚动条结束后,桌面会多了一个setup.exe文件

img

Java打包ext也同时会跳出一个安装的,因为程序帮你自动启动生成的安装程序了,安装就可以了,安装的时候记得勾选创建快捷方式

img

 

创建快捷方式这个就是最后的程序了,双击运行就可以看到结果了,把setup.exe文件给别人安装,就都可以看到自己的程序了。


Mac m1程序员开发软件的安装和配置2024

Posted on 2024-02-07

Mac m系列芯片使用的是arm架构,很多软件都有推出设配版本,这里记录一下安装过程。

一、Jdk的安装和配置

zulu推出了设配arm架构的jdk版本,下载地址zulu jdk,下载后直接安装就可以。

image-20240206133833207

二、Idea的安装和破解

下载jetbara和破解包,破解包可以通过网站下载,激活码也在这个网站上面,下载jar后解压,待会需要用到srcpts脚本还有激活码。

image-20240206134345771

打开终端进入scripts文件夹,执行install.sh脚本。

image-20240206135441039

部分系统版本可能会和我一样出现了Operation not permitted。

原因:mac电脑启用了SIP(System Integrity Protection),增加了rootless机制,导致即使在root权限下依然无法修改文件,关闭该保护机制才能进行修改。
参考文档:macOS 开启或关闭 SIP(m1需要一直按着开机键进入保护模式)

image-20240206143034823

image-20240206143847348

此时已经成功关闭,重新执行install.js脚本,显示done表示成功执行。

在idea输入激活码即可,如果出现Key is invalid建议重新一下电脑或者重新安装软件。

⚠️重启电脑后,可能会出现idea需要重新激活的情况

请执行sudo sh uninstall.sh再执行sudo sh install.sh

三、配置Maven

个人习惯使用idea自带的maven,版本3.9.5,只需要修改成阿里云镜像就可以正常使用了。

image-20240206181908542

进入.m2文件夹中,如果找不到按住command+shift+.显示隐藏文件夹,找到.m2文件夹,进入终端,在终端中输入命令touch settings.xml新建xml文件,复制粘贴以下内容。

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
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地下载的jar包地址 配置我们的数据盘即可-->
<localRepository>/Users/raychen/.m2/repository</localRepository>
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>

<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<!-- 阿里云的maven路径, -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>

四、Homebrew的安装和配置

Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。

1.Homebrew使用

1
2
3
4
5
6
7
8
9
brew -v 查看当前版本
brew list —列出已安装的软件
brew update —更新Homebrew
brew install 软件名 —安装软件
brew search 软件名 —搜索软件
brew uninstall 软件名 —卸载软件
brew update —更新所有软件
brew upgrade 软件名 —更新具体软件
brew outdated —查看哪些已安装的程序需要更新

2.安装Homebrew的国内镜像

1
/bin/bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

image-20240206212509503

3.安装git:

1
brew install git

4.验证git是否安装成功:

1
git --version

5.设置git账户名称和邮箱

1
2
git config --global user.name "用户名"
git config --global user.email "邮箱"

6.查看git账户名称和邮箱

1
2
git config user.name
git config user.email

7.ssh密钥的生成和配置

ssh指secure shell(一种安全的网络协议),git使用这种协议进行远程加密登录。

1
ssh-keygen -t rsa -C "邮箱"

image-20240206214423691

然后在跳转到指定文件夹中,输入cat id_rsa.pub 复制密钥。

image-20240206214940022

五、Mysql的安装和配置

1.去官网下载Mysql安装包

image-20240206221554629

安装成功后发现还是没法直接使用mysql:

image-20240206222851331

这里需要配置一下环境变量

2.关于mac系统环境变量配置:

  • open/vim /etc/profile(不建议修改这个文件)全局(公有)配置,不管是哪个用户,登陆时都会读取该文件。
  • /etc/bashrc (一般在这个文件中添加系统级环境变量)全局(公有)配置,bash shell执行时,不管是哪种方式,都会读取此文件。
  • ~/.bash_profile (一般在这个文件中添加用户级环境变量)(注:Linux里面时.bashrc而mac是.bash_proofile)若bash shell是以login方式执行时,才会读取此文件。该文件仅仅执行一次,默认情况下,他设置一些环境变量。

3.配置mysql的环境变量

1
vim ~/.bash_profile

image-20240206224929440

在文件后添加:

1
2
export PATH=$PATH:/usr/locol/mysql/bin
export PATH=$PATH:/usr/local/mysql/support-files

如果你和我一样该文件显示readonly,退出时:wq!保存,记得要加感叹号。

刷新配置文件:

1
source ~/.bash_profile

如果执行完上述操作,还是报错:zsh:command not found: mysql

4.设置指令别名

1
vim ~/.bashrc

写入:

1
alias mysql=/usr/local/mysql/bin/mysql

刷新配置:

1
source ~/.bashrc

image-20240206231528311

六、Navicat的安装和使用

https://macwk.cn/中搜索Navicat破解版,然后下载打开,如果和我一样是新系统,可能会遇到提示文件已损坏,需要输入命令:

1
sudo xattr -r -d com.apple.quarantine /Applications/Navicat\ Premium.app

然后连接我们的mysql就OK了。

七、Node.js的安装配置和使用

准备通过homebrew安装node,终端输入命令:

1
brew install node #默认安装最新版

查看安装是否成功:

1
2
3
npm -v #查看npm版本
node -v #查看node版本
brew list #查看安装的软件

安装国内淘宝镜像源(注意⚠️:2024年1 月 22 日,淘宝原镜像域名(registry.npm.taobao.org)的 HTTPS 证书正式到期,改用新的域名地址执行命令):

1
2
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm -v #查看cnpm版本

image-20240207120554050

八、Docker的安装配置和使用

1.去官网下载docker客户端

2.下载安装后,可通过命令查看是否安装成功:

1
docker -v

image-20240207135505696

3.为了方便后续拉取镜像, 我们需要配置一下docker镜像源(阿里云镜像加速器)

4.https://fzxzd0ha.mirror.aliyuncs.com加到"registry-mirrors"的数组里,点击 Apply & Restart按钮,等待Docker重启并应用配置的镜像加速器。

img

具体的使用可查看:Docker快速上手之部署SpringBoot项目

九、Redis的安装和配置

1.通过homebrew安装:

1
brew install redis

2.启动和关闭redis:

1.官方启动方式(不推荐,重启后需要再次打开服务):

1
2
redis-server 			 #启动Redis服务
redis-cli shutdown #停止redis服务

2.使用brew命令

1
2
3
brew services start redis 	#启动redis服务
brew services stop redis #关闭redis服务
brew services restart redis #重启redis服务

image-20240207143540188

3.启动后输入redis-cli打开客户端。

4.安装redis可视化软件,有很多可视化软件可以选择,这里我使用的是[Tiny RDM。

如果在 macOS 上安装后无法打开,请执行以下命令然后重新打开:

1
sudo xattr -d com.apple.quarantine /Applications/Tiny\ RDM.app 

image-20240207151046489

十、Typora的安装和破解

1.去官网选择mac版本下载安装 typora下载。

2.通过修改typora文件进行破解,我的文件路径在/Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js找到文件:

image-20240207151712209

3.输入 hasActivated=”true”==e.hasActivated 进行搜索,然后将它改为 hasActivated=”true”==”true”。

image-20240207152013022

4.重新打开软件,激活成功:

image-20240207151955004

具体的使用可查看:开发必备软件-Typora配合PicGo阿里云图床配置(转)

参考视频:Mac M1 程序员开发环境的安装与配置


关于EIP1559下的GAS费设置问题

Posted on 2024-01-31

EIP-1559是一项以太坊改进提案,旨在优化以太坊区块链的费用市场系统。 EIP-1559 引入了一个新的收费系统,其中包含三个关键要素:**基本费用(base fee)、优先小费(priority fee)和费用上限(max fee)**。

一、EIP-1559特点

  • 基础费用:eip1559引入了一种新的收费机制,即每个区块都有一个由协议根据区块需求动态调整的基础费用(base fee),表示在该区块中进行交易时需要支付的最低手续费。基础费用的目标是让每个区块的使用率维持在50%,从而避免过度拥堵或浪费。基础费用以ETH代币支付,并且被销毁(burn),从而减少ETH的流通供应。
  • 优先费用:除了基础费用外,用户还可以为自己的交易设置一个优先费用(priority fee),表示他们愿意额外支付给矿工/验证者的激励,以便让自己的交易更快被确认。优先费用也以ETH代币支付,并且被矿工/验证者保留。
  • 费用上限:用户还可以为自己的交易设置一个费用上限(max fee),表示他们愿意为一笔交易支付的最高手续费。费用上限包括基础费用和优先费用,当交易被确认时,用户会收到一笔退款,由实际支付金额和费用上限之间的差额组成。这个机制确保了用户永远不会超出他们所设定的预算。
  • 双重交易类型:eip1559兼容两种交易类型,即新型交易类型和传统交易类型。新型交易类型遵循eip1559的规则,即指定基础费用、优先费用和费用上限。传统交易类型遵循原有的规则,即指定一个固定的出价(gasprice)。为了让两种交易类型能够共存,传统交易类型会被转换成新型交易类型,即将出价作为费用上限,并将出价减去基础费用作为优先费用。

二、正确设置GAS

GAS fee = Base fee(完成操作需要付的基本费用) + Priority fee(小费:小费越高,越容易抢到)

总费用 = (区块基础费 + 实际优先费) * Gas使用数量

也就是总费用 = (base fee + priority fee) * gas limit(用户允许这笔交易最大可消耗的 Gas 数量)

image-20240131135302973

待设置:

Max Priority Fee:你最多愿意付给矿工的优先费(小费),单位为GWEI
Max Fee:基本费用 + 优先费

实际:Priority Fee = Min(Max Priority Fee, Max Fee - Base Fee)

三、设置技巧

如果我们要给100GWEI的小费,我们需要设置:

1.Max Priority Fee(GWEI) = 100

2.Max Fee(GWEI) = (Base Fee * 2) + Max Priority Fee(100)

注意:base fee代表基础费用会有波动,且多余base fee会返还所以*2

GAS参考网站:https://www.blocknative.com/gas-estimator

image-20240131130128416

假如我们想要99%的打包成功率,可以设置Max Priority Fee为0.1,设置max fee为26。

参考文章:MetaMask钱包已支持EIP-1559,一次了解调整优先费、进阶设置
参考文章:Web3.0学习树|3.区块链通识 Ⅲ

内容来源:油管


Linux环境下部署Python脚本

Posted on 2024-01-10

系统用的是Centos,自带了python环境,考虑到后期维护使用virtualenv虚拟环境来为应用创建”隔离”的python运行环境。

virtualenv虚拟环境是一个创建隔绝的Python环境的工具。

image-20240110124003769

  • 隔离性:virtualenv可以创建一个隔离的环境,这个环境与其他Python环境(如系统环境或全局环境)完全隔离。这意味着,在这个环境中安装的包不会影响其他环境,反之亦然。这有助于解决不同项目之间的依赖冲突问题。
  • 易于管理:每个虚拟环境都有自己的pip版本,这意味着你可以为每个项目安装特定版本的pip。此外,每个环境都有自己的Python解释器,这使得版本控制变得简单。
  • 安全性:由于每个环境都是隔离的,因此在一个环境中安装的包不会影响其他环境。这意味着在一个环境中安装的恶意包不会影响其他环境。
  • 灵活性:你可以为不同的项目创建不同的虚拟环境,每个环境都有自己的Python解释器和pip版本。这使得你可以根据项目的需求来配置环境。
  • 易于使用:virtualenv易于安装和使用。你只需要在命令行中输入一些命令就可以创建新的环境,安装包等。这对于初学者来说非常友好。

一、部署项目

1.导出项目所需要的依赖包

1
pip freeze > requements.txt

2.创建python虚拟环境(env_name当前环境的名称)

1
python -m venv env_name

创建后会生成一个文件夹,里面包含了项目运行所需要的环境

image-20240110125725202

3.启动虚拟环境

1
source env_name/bin/activate

3.启动python脚本

1
2
pip install -r requements.txt # 先导入依赖包
python xx.py # 运行程序文件

4.关闭虚拟环境命令

1
deactivate

二、后台运行python脚本

1.nohup命令可以使你在注销账户或关闭终端时,程序仍然保持运行。该命令的基本语法为:

1
2
nohup python your_program.py &
或者:nohup python your_program.py >app.log 2>&1 &

&1是一个指向标准输出的指针,2是标准错误输出的文件描述符,该命令会将标准输出和标准错误写入到app.log

2.其中,your_program.py为需要后台运行的Python程序文件名,&符号表示在后台运行程序。运行上述命令后,你可以看到如下输出:

1
nohup: ignoring input and appending output to 'nohup.out'

3.这意味着你的Python程序已经在后台运行,并将输出信息保存在nohup.out文件中。你可以使用tail命令跟踪该文件以查看程序输出信息。如果你想停止程序的运行,可以使用kill命令。示例代码如下:

1
2
tail -f nohup.out
kill PID

4.其中,PID为你程序的进程ID,在运行nohup命令后你可以使用:

1
ps -ef | grep python # 命令查找进程ID。

三、升级python版本

1.官网下载安装包

2.解压:tar -xf Python-3.10.4.tgz

3.进入解压后的目录:./configure && make && make install

4.先找到python文件,准备创建软链接

image-20240119145905288

5.创建软连接(/usr/local/bin/python3.10是存放python文件目录)

1
2
ln -sf /usr/local/bin/python3.10 /usr/bin/python
ln -sf /usr/local/bin/python3.10-config /usr/bin/python-config

四、踩坑记录

1.使用nohup命令后,日志文件内没有日志输出,我遇到的问题是存在输出缓存,通过修改启动命令解决:

1
nohup python -u your_program.py >app.log 2>&1 &

参考文章:Python nohup 启动python脚本,后台没有日志


开发必备软件-Typora配合PicGo阿里云图床配置(转)

Posted on 2024-01-04

写博客的时候,刚开始直接在各大平台上直接写,后来还是觉得不太方便,需要在各大平台之间来回切换。于是就改用Typora,但是有个问题就是图片的处理,只能放在本地。想要发布到各大平台,就需要图床。本文结合阿里云OSS、PicGo图床配置、Typora配置,能够做到一次文章编写,各大平台统一输出。

阿里云配置

创建对象存储Bucket

登录阿里云后,选择对象存储

image-20221222125850693

新人开通试用3个月免费

image-20221222130109938

开通后,进入管理控制台

点击Bucket列表,创建Bucket

image-20221222130233633

访问控制开启公共读

image-20221222130527365

访问控制RAM配置

点击右上角AccessKey管理

image-20221222134259058

创建AccessKey,注意这里的AccessKey ID 和 AccessKey Secret保存下来,后面要用到

image-20221222134507363

PicGo下载安装

下载地址

https://picgo.github.io/PicGo-Doc/zh/guide/#%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85

可以选择山东大学的镜像站

https://mirrors.sdu.edu.cn/github-release/Molunerfinn_PicGo

image-20221222133605621

PicGo配置

  • KeyId 、KeySecret 就是上面阿里云的AccessKey ID 和 AccessKey Secret
  • Bucket 就是阿里云的bucket名称

image-20221222134810396

  • 存储区域,对应阿里云Endpoint的前面,我这里是oss-cn-hangzhou
  • 存储路径,自己随便定义一个,比如 img/
  • 自定义域名,对应阿里云 Bucket域名

image-20221222135020880

Typora下载及配置

Typora目前收费,想要免费可使用,可参考笔者的这个下载地址

链接:https://pan.baidu.com/s/1bCxmIPk23R0B9SVCqY37wg?pwd=F93i 提取码:F93i

设置

找到设置,点击图像设置

上传图片的服务,选择PicGo.app

image-20221222135334696

注意:PicGo.app需要填写输入正确的安装路径,填写后可通过旁边的验证功能查看是否填写成功

实际效果

  • 截图软件,粘贴效果,typora直接转换成了阿里云OSS的地址image-20221222140236233
  • 外站粘贴过来的也是同样效果

Node.js模块化选择Commonjs和ES6

Posted on 2023-12-28

Node.js 使用的模块系统是基于 CommonJS 的,但随着时间的推移,ES6 模块也得到了越来越多的支持。以下是关于 CommonJS 和 ES6 模块的简要概述:

1.CommonJS:

  • 最初为 Node.js 设计,所以又称 Node.js 模块系统。
  • 使用 require() 函数来导入模块,使用 module.exports 或 exports 对象来导出模块。

2.ES6 模块:

  • 是 ECMAScript 6 (ES2015) 中引入的新模块系统。
  • 使用 import 语句来导入模块,使用 export 语句来导出模块。
  • 有静态和动态两种导入方式,提供更强的类型检查和代码编译时优化。

请注意,随着Node.js的发展,许多库已经迁移到ES模块,因此确保你使用的库与你当前的Node.js版本兼容是很重要的。

一、搭建ES6模块系统

1.把需要更换的require全部换成import

2.在src下创建一个.babelrc文件

1
2
3
{
"presets":["es2015"]
}

3.在package.json中的一段加上--exec babel-node

1
2
3
4
5
6
7
8
9
10
{
"name": "api",
"version": "1.0.0",
"description": "",
"type": "module", // 添加type类型
"main": "index.js",
"scripts": {
"dev": "nodemon ./src/main.js --exec babel-node",
"test": "echo \"Error: no test specified\" && exit 1 --exec babel-node"
},

4.安装插件 npm install babel-preset-es2015

二、关于两者的引用区别

1.Commonjs:

1
2
3
// moduleA.js  
const message = 'Hello from CommonJS';
module.exports = message;
1
2
3
// main.js  
const moduleA = require('./moduleA');
console.log(moduleA); // 输出 'Hello from CommonJS'

需要注意的是,CommonJS 的 require 函数返回的是一个对象,该对象的属性对应于模块导出的内容。在上面的例子中,moduleA 是一个包含 message 属性的对象。因此,我们可以使用 moduleA.message 来访问导出的内容。

2.ES6:

1
2
// moduleA.js  
export const message = 'Hello from ES6';
1
2
3
// main.js  
import { message } from './moduleA';
console.log(message); // 输出 'Hello from ES6'

需要注意的是,ES6 的 import 语句返回的是导出的内容本身,而不是一个对象。因此,我们可以直接使用导入的内容,而不需要通过属性来访问。


123…5

  •   GitHub
  •   Ray4j.top
  •   Springboot-Hello
  •    Search
© 2022 — 2025 Cr.    |   
UV PV
TOP