tkinter控件定位

pack参数说明
  编写一个程序的界面,就是要把各个组件,以适当大小,定位到界面的某个位置。
  tkinter以提供3种界面组件布局管理的方法,分别是:pack,grid,place 这篇文章先来讲解pack 方法。
  pack() 方法的参数有:side,  fill,  padx/pady,  ipadx/ipady, anchor,  expand
参数说明:
side: 决定组件停靠的方向。
 选项:left, right, top, bottom
 la1.pack( side=’top’)  # 向上停靠  默认
 la1.pack( side=’bottom)  # 向下停靠
 la1.pack( side=’left’)  # 向左停靠
 la1.pack( side=’right’)  # 向右停靠
fill:  决定组件是否填充,以及填充的方向
 选项:x,  y,  both,  none
 fill=”none”  # 不填充  默认
 fill=”x”  # 横向填充
 fill=”y”  # 纵向填充
 fill=”both”  # 横向纵向都填充
padx/pady:  组件外,组件跟邻近组件或窗体边界的距离(外边距)
 默认值:0
ipadx/ipady: 组件内,组件文本跟组件边界之间的距离(内边距)
 默认值:0
anchor: 决定组件停靠的位置
 选项:n,nw,ne,s,nw,ne,center  默认值:center (居中显示)
expand: 决定组件的“势力范围”是否扩大到“扩展范围”
  选项:True, False
默认值:False  (标签只在自己的势力范围内活动)

wikijs存储

Local File System选项

目标配置

目标配置中的地址是docker容器中的地址,不是宿主机。
我设置为/data
另外设置了卷映射,这样就能直接从VPS的文件里看了。

同步方向设置

比较好理解,分为双向,推送到目标和从目标中拉取。
之前还想着能不能用api快速发布文章,现在看来同步方向设置是一个很好的方法。

经过验证用这种同步的方法批量新建页面有个问题,就是每次同步会把所有页面重新渲染,比较费时间,以后页面多了用这种方法不优雅。

操作

一共有三个操作:

Dump all content to disk

会把网站所有的静态内容,页面和上传的内容等保存到设置的目标路径。页面将会用md的形式保存(我创建的页面用的是markdown语法)。保留文件夹层次关系。

Create Backup

把目标文件夹内容打包成gz文件方便下载,并在目标文件夹下创建_manual子文件夹,压缩后的文件放在里面。

Import Everything

从当前目标路径中把数据导入到网站和数据库。

滤波器特性评估

一些对现代控制系统的理解 第1部分-时域、频域、s域、z域

https://zhuanlan.zhihu.com/p/100239414

https://www.cnblogs.com/amanlikethis/p/3508387.html

https://www.eet-china.com/mp/a42503.html

使用 MATLAB 求由差分方程表示的滤波器的响应的两种方法

https://blog.csdn.net/Reborn_Lee/article/details/83385143

设计滤波器必须掌握的关键知识

https://zhuanlan.zhihu.com/p/444904982

用python分析我的滤波器的频率响应

在Python中,可以使用Scipy库中的signal模块来分析滤波器的频率响应。具体步骤如下:

  1. 导入需要的库和模块:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal
  1. 定义滤波器的参数和传输函数:
# 定义滤波器的参数
fc = 1000  # 截止频率,单位为Hz
fs = 8000  # 采样频率,单位为Hz
order = 4  # 滤波器阶数
# 计算滤波器的传输函数
b, a = signal.butter(order, 2 * fc / fs, 'lowpass')

上述代码中使用了Butterworth低通滤波器,截止频率为1000Hz,采样频率为8000Hz,阶数为4。

  1. 计算并绘制滤波器的频率响应:
# 计算频率响应
w, h = signal.freqz(b, a, worN=8000)
# 绘制频率响应曲线
fig, ax = plt.subplots()
ax.plot(w / np.pi * fs / 2, 20 * np.log10(abs(h)), 'b')
ax.set(title='Frequency response', ylabel='Amplitude [dB]', xlabel='Frequency [Hz]', xlim=[0, fs / 2])
ax.grid()
plt.show()

上述代码中,使用signal.freqz函数计算滤波器的频率响应,worN参数指定了计算频率响应的点数。最后使用matplotlib库绘制频率响应曲线,横轴为频率,纵轴为幅度(单位为dB)。

运行上述代码后,即可得到滤波器的频率响应曲线。可以根据需要,修改滤波器的参数和传输函数,重新计算频率响应并绘制曲线。

分析我自定义的滤波器,不是标准的滤波器,有通用的评估方法吗

对于自定义的滤波器,评估方法可以根据滤波器的类型和设计要求进行选择和调整。以下是一些通用的评估方法,可以供参考:

  1. 频率响应分析:通过计算滤波器的频率响应,分析滤波器在不同频率下的增益和衰减特性,以及通带和阻带的宽度、波纹等特性。可以使用Python中的Scipy库或Matlab等工具进行计算和分析。

  2. 时域响应分析:通过计算滤波器的单位脉冲响应或单位阶跃响应,分析滤波器在时域下的特性,如响应时间、幅度变化等。可以使用Python中的Scipy库或Matlab等工具进行计算和分析。

  3. 稳定性分析:判断滤波器是否稳定,即在输入信号有限的情况下,输出是否有限,可以使用BIBO(Bounded Input, Bounded Output)稳定性分析方法进行判断。

  4. 相位特性分析:通过计算滤波器的相位响应,分析滤波器在不同频率下引入的相位延迟,以及群延迟等特性。可以使用Python中的Scipy库或Matlab等工具进行计算和分析。

  5. 抗混叠性分析:对于数字滤波器,需要分析其抗混叠性能,即在离散化过程中是否会引入混叠。可以使用数字信号处理中的采样定理等理论进行分析。

  6. 实现分析:对于硬件实现的滤波器,需要分析其实现难度、成本、功耗等方面的特性,对于数字实现的滤波器,需要分析其计算复杂度、运行速度等方面的特性。

综上所述,评估自定义的滤波器需要综合考虑滤波器的类型、应用场景和设计要求,选择合适的评估方法进行分析和评估。

比如我写了一个惯性滤波器,确定alpha=5,我怎么评估它的频率响应

惯性滤波器是一种常用的滤波器类型,具有良好的抗噪声和抗干扰能力。如果你已经确定惯性滤波器的参数(如alpha=5),可以使用以下方法评估其频率响应:

  1. 计算差分方程:惯性滤波器可以表示为一个一阶差分方程,根据差分方程可以计算其传输函数。

  2. 计算传输函数:通过对差分方程进行Z变换,可以得到惯性滤波器的传输函数,表示为H(z)。

  3. 绘制频率响应曲线:利用H(z)计算惯性滤波器的频率响应,可以使用Python中的Scipy库或Matlab等工具进行计算和绘制频率响应曲线。

以下是一个Python示例代码,其中alpha=5:

import numpy as np
import matplotlib.pyplot as plt
alpha = 5  # 系数 alpha
# 计算惯性滤波器的传输函数
b = np.array([alpha/(1+alpha), -alpha/(1+alpha)])
a = np.array([1, -(1-alpha)/(1+alpha)])
# 计算频率响应曲线
w, h = signal.freqz(b, a, worN=8000)
# 绘制频率响应曲线
fig, ax = plt.subplots()
ax.plot(w / np.pi, 20 * np.log10(abs(h)), 'b')
ax.set(title='Frequency response', ylabel='Amplitude [dB]', xlabel='Normalized frequency', ylim=[-60, 10])
ax.grid()
plt.show()

上述代码中,首先计算惯性滤波器的传输函数,然后利用signal.freqz函数计算频率响应曲线,最后用matplotlib库绘制频率响应曲线。

在频率响应曲线中,横轴为归一化频率,即频率除以采样频率的一半,纵轴为幅度(单位为dB)。可以根据频率响应曲线,分析滤波器的通带、阻带、截止频率等特性。

注册GoogleVoice记录,两次都失败了

9/12/1993

两次注册都失败了,建议技术不是太强的人不要尝试了。

230912

213 加利福尼亚州 有可用号码
262 华盛顿
305弗罗里达州
315纽约

12545725435
难怪失败,注册chatgpt才知道给的是虚拟号码,不是物理号码,我买的是物理号码。

收到了激活码37.5卢布

注册成功

Phone number added
**‪(254) 572-5435‬** has been successfully linked to your account and will ring when someone calls your Google Voice number.

但是实际上还是没有拿到号码

自己搭建v2ray,用芝加哥服务器,匿名度100%

下次用这个选项试试

230306

注册地址
https://voice.google.com/u/0/signup

需要选择地区,很多地区没有可用的gv号码了
404可用亚特兰大
512奥斯丁 有比较好的0098

依然使用https://sms-activate.org/getNumber获取虚拟号码激活

选择了一个虚拟号码,比实体号码价格便宜
13465985968

激动,注册成功。

虽然提示成功,但是gv界面并没有,应该是实际没有成功。
有可能是虚拟号不行。

并且用过一次就不能再用了。
这个虚拟号码也不能用于注册openai

下次再注册设置一个干净的环境,用手机,换美国时区,找干净ip。
用实体手机号并同时注册openai
最好使用美国vps注册

Google搜索 在线美国短信

https://github.com/sxcool1024/googlevoice

+1 2069222002也能成功发送
http://www.xnsms.com/test/getPhoneData?phone=12069222002

免费接码但是属于Fi虚拟号不能用于GV
https://www.goinsms.xyz/

用下面这个也不报错,就是收不到验证码
https://www.receivesmsonline.net/receive-sms-online-vip-13212163849.html

使用下面号码也可正常发送,就是收不到
+12057494658
https://smscodeonline.com/virtual-phone/p-12057494658


https://getfreesmsnumber.com/?page=2
网站用16062223115号码可以进入输入验证码界面但是没有收到验证码不知道什么原因

在线接码平台
https://www.extrabux.com/chs/guide/6172450

https://www.receivesms.co/us-phone-numbers/us/

https://www.w3h5.com/post/619.html

有一个号码接收gv验证码太多了就不能用了
12542492894

centos8安装python3.10

说明:我买的是腾讯云的轻量服务器,选的centos8,但没有预装的python,所以才下载python3,如果有python2的,注意原始/usr/bin/下的调用

1、安装python3.10所需的依赖

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make

python判断新定义的文件名是否合法

’/‘有中英文的区别吗

是的,中英文的 ‘/‘ 是不同的字符,它们的 Unicode 编码也不同。

英文的 ‘/‘ 字符的 Unicode 编码是 0x002F,用于表示路径分隔符或 URL 中的路径分隔符。

而中文的 ‘/‘ 字符是全角字符,通常在输入法中通过 Shift + 7 或 Shift + 斜杠等方式输入,它的 Unicode 编码是 0xFF0F。

由于中英文的 ‘/‘ 字符是不同的字符,因此在处理文件名时,需要分别处理这两种情况。如果你使用的是 Python 的字符串处理函数,例如 replace() 函数,需要注意它只能替换字符串中的某个子串,如果要替换中文的 ‘/‘,需要使用对应的 Unicode 编码进行替换。

例如,如果你要将中文的 ‘/‘ 替换为英文的 ‘-‘,可以使用以下代码:

filename = filename.replace('\uFF0F', '/')
filename = filename.replace('/', '-')

第一行代码将字符串中的中文 ‘/‘ 替换为英文 ‘/‘,第二行代码将英文的 ‘/‘ 替换为 ‘-‘。注意,中文的 ‘/‘ 在字符串中需要使用 Unicode 编码来表示,Unicode 编码可以使用 \uXXXX 的形式来表示,其中 XXXX 是该字符的 Unicode 编码值的十六进制表示。

python判断新定义的文件名是否合法

要判断新定义的文件名是否合法,你需要知道哪些字符是不允许出现在文件名中的。在Windows操作系统中,以下字符是不允许出现在文件名中的:

“`
\ / : * ? “ < ><!–autointro–>

Windows文件管理器替代品total commander

multi commander 和xyplorer。而且前者开源免费,你也可以试试。

Directory Opus 相当好用。反正界面操作比 Xyplorer 好用。

这类工具,windows中 Total Comamnder 显然是王者,老大的地位无人能及。如果非要免费的, 那么 Double Commander 是首选,在功能上是最接近 Total Commander 的了,而且跨平台, mac/Linux都支持(因此也成了我的默认文件管理工具了,TC只是在windows中备用而已)。

作为一个反复学习TC而不入门的用户来说,表示没资格评价这个软件。最早的时候在DOS下用过NC,WIN下也用过QDIR,Freecommander等,后来转向了Multicommander(免费)

https://zhuanlan.zhihu.com/p/363160603

Total Commander 这款软件使用体验如何,有哪些优点和不足?

https://www.zhihu.com/question/21616258

https://www.jb51.net/softjc/769961.html

bat脚本写法

**隐藏运行软件,cmd隐藏运行,bat隐藏运行,命令窗口隐藏运行

让bat隐藏运行需要用vbs文件才能实现,
方法一:新建一个文本文档,写入
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "d:yy.bat",0
另存为vbs文件即可,其中d:yy.bat是你需要运行的bat文件的路径。

方法二:用文本文档打开bat文件,在开头处写入
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
这个方法运行bat,还是闪了一下。

1.在windows命令行后台运行某个命令:

在执行的命令前加上start /b,比如start /b run.bat。就相当于Linux下的run.sh &

2.开机启动bat
  新建test.bat, 文件内容如下:

  set ws=WScript.CreateObject("WScript.Shell") 
  ws.Run "D: est.bat /start",0

  保存,然后放到Windows启动目录下,就可以了。**

cython编译Python为c语言

第一种办法:

  • 执行命令:cython test.py
  • 结果:会在同一目录下面生成test.c文件
  • 执行命令: gcc -c -fPIC -I /usr/include/python2.7 test.c
  • 结果: 在同一目录下面生成test.o文件
  • 执行命令: gcc -shared test.o -c test.so
  • 结果: 在同一目录下面生成test.so文件

最后,生成的test.so文件就是需要的文件

第二种办法:

[setup.py]
from distutils.core import setup
from Cython.Build import cythonize
setup(
name = "test",
ext_modules = cythonize("test.py")
)
  • 执行命令: python setup.py build_ext –inplace

第二种办法是对单独文件进行编译,下面介绍一种批量的办法:

#-*- coding:utf-8 -*-_
import os
import re
from distutils.core import Extension, setup
from Cython.Build import cythonize
from Cython.Compiler import Options
# __file__ 含有魔术变量的应当排除,Cython虽有个编译参数,但只能设置静态。
exclude_so = ['__init__.py', 'run.py']
sources = 'backend'
extensions = []
remove_files = []
for source,dirnames,files in os.walk(sources):
for dirpath, foldernames, filenames in os.walk(source):
if 'test' in dirpath:
break;
for filename in filter(lambda x: re.match(r'.*[.]py$', x), filenames):
file_path = os.path.join(dirpath, filename)
if filename not in exclude_so:
extensions.append(
Extension(file_path[:-3].replace('/', '.'), [file_path], extra_compile_args = ["-Os", "-g0"],
extra_link_args = ["-Wl,--strip-all"]))
remove_files.append(file_path[:-3]+'.py')
remove_files.append(file_path[:-3]+'.pyc')
Options.docstrings = False
compiler_directives = {'optimize.unpack_method_calls': False, 'always_allow_keywords': True}
setup(
# cythonize的exclude全路径匹配,不灵活,不如在上一步排除。
ext_modules = cythonize(extensions, exclude = None, nthreads = 20, quiet = True, build_dir = './build',
language_level = 2, compiler_directives = compiler_directives))
# 删除py和pyc文件
for remove_file in remove_files:
if os.path.exists(remove_file):
os.remove(remove_file)
  • 执行命令: python setup.py build_ext –inplace
  • 结果:最后生成.so文件,删除中间结果。

重点提一下,在编译flask代码时,遇到问题,报错:参数不够(大体意思是这样,错误未截图),在compiler_directives中添加: {always_allow_keywords:True}

正如我先前所说,你需要像这样运行Cython编译器。


cython <cython_file><!--autointro-->