2025-05-07 22:19:59
需要给处于不同时区的用户,显示不同的当前时间。
如果直接使用 datetime.now() 返回的只是服务器的时间,无法满足不同时区用户的需求。
参考:
https://docs.python.org/3/library/zoneinfo.html
从官方文档可看到,python 3.9 开始内置了这个库。用法:
Python 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
>>>
>>> timezone = ZoneInfo("Asia/Shanghai")
>>> now = datetime.now(timezone)
>>> print(now)
2025-05-07 22:04:43.467295+08:00
>>>
>>> timezone = ZoneInfo("America/New_York")
>>> now2 = datetime.now(timezone)
>>> print(now2)
2025-05-07 10:05:42.687649-04:00
>>>
>>> print(datetime.now())
2025-05-07 22:06:53.280776
>>>
定义目标时区(如 'Asia/Shanghai', 'America/New_York', 'Europe/London'),传入 ZoneInfo 即可。
而且这种用法,不会影响 datetime.now() 的值,非常方便。
2025-05-05 21:39:20
通过 Magento Admin 后台手动批量导入 CSV 太慢(在产品比较多的情况下)。需要等待很长时间。
如果能够通过程序,自动化导入批量的 CSV 文件,那就能大大提升效率,减少繁琐的手动操作及等待时间。
而 Magento 又不支持导入的 RESTful API,也不支持命令行,所以只能使用其他的方案。
网上找到一个方案,看起来是比较靠谱的:
https://magento.stackexchange.com/questions/359280/import-product-data-programmatically-using-csv
里面推荐使用定制化模块。
什么是 Magento 定制化模块呢?
Magento 2 的定制化模块, 旨在为在线商店添加特定功能或特性。它允许开发人员扩展、定制或修改 Magento 的默认行为,而无需更改核心代码。定制化模块可以引入新的产品类型、支付网关、运输方式或其他功能,以满足独特的业务需求。
Magento 定制化模块的命名规则是:VendorName_ModuleName。
例如:Sunzhongwei_ProductImport。
对应的,需要在 app/code 目录下创建一个名为 Sunzhongwei/ProductImport 的目录。默认安装下,app 目录下是没有 code 目录的,需要手动创建
# ls app/
autoload.php bootstrap.php design etc
# mkdir -p code/Sunzhongwei/ProductImport
在 app/code/Sunzhongwei/ProductImport 目录下新建一个名为 etc 的目录。
新建文件:
app/code/Sunzhongwei/ProductImport/etc/crontab.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
<group id="default">
<job name="import_products" instance="Sunzhongwei\ProductImport\Cron\ImportProducts" method="execute">
<schedule>*/5 * * * *</schedule>
</job>
</group>
</config>
其作用是,每 5 分钟执行一次导入任务。
2025-05-05 12:09:46
五一小长假节前给一个客户开发了一套高新技术企业测评小程序。主要功能是方便想申报高新企业的客户了解申报过程中的一些细则,以及通过内置的自评工具,及调查问卷功能,方便辅导机构有针对性地进行指导。以下是一些主要功能界面的截图:
可以查看并检索关于高新技术企业在申报过程中的疑问。里面的资料也都是从政府官方资料中摘取的,非常具有权威性。
包括在线微信聊天咨询,及电话等联系方式,以及微信地图导航功能。
研发费用占比=企业近三个会计年度的研发费用总额/企业近三个会计年度的销售收入总额×100%。对于不同销售收入等级的企业,其研发费用占比要求也不同,这里会自动进行计算并判断是否符合要求。同时,计算结果也会保持到服务器后台,方便辅导机构有针对性的进行指导。
这是一个类似调查问卷的功能,在完成十道测评题之后,会给出一个检测结果。由于第一个版本我着急出效果,所以直接沿用了之前开发的情商计算器的界面风格。
同时,这套系统也包含了对应的后台管理系统,可以方便的进行:
这个客户提了很多功能需求,但是我担心功能过多,周期太长,很容易陷入不断返工的大坑。所以,我决定一周一个版本的策略。目前看到的是第一个版本的效果。
2025-05-01 20:41:38
之前使用 Bash Shell 脚本来实现的 Rasa 长对话流程的测试(多轮对话,因为很多 bug 只有在多轮对话的特定流程之后才会复现)。 但是,Shell 变量太难搞了,特别是单引号及双引号混用的情况。
例如,下面这段脚本:
#!/bin/bash
set -e # or use "set -o errexit" to quit on error.
set -x # or use "set -o xtrace" to print the statement before you execute it.
# 定义一个变量,值为 test_user_ 加上时间戳
user="test_user_$(date +%s)"
# 打印变量的值
echo "user: $user"
curl --request POST \
--url http://localhost:5005/webhooks/some_channel/webhook \
--header 'Content-Type: application/json' \
--data '{
"sender": "$user",
"text": "hi",
"metadata": {"some_var":"some_value"}
}'
sleep 1
curl --request POST \
--url http://localhost:5005/webhooks/some_channel/webhook \
--header 'Content-Type: application/json' \
--data '{
"sender": "$user",
"text": "\/some_intent{\"some_entity\": \"some_value\"}",
"metadata": {"some_var":"some_value"}
}'
sleep 1
这里有几个问题:
而使用 Python 就能很轻松地解决上面的所有问题。特别是既然已经使用了 rasa,那么开发环境里就内置了 Python,连 requests 依赖都内置了。 就能直接使用了,环境搭建都省去了。
而且使用 VSCode 中的 Github Copilot AI 直接就能将 Bash Shell 转换为 Python,修修补补就能使用了。
import time
import requests
import json
# 全局变量
URL = "http://localhost:5005/webhooks/some_channel/webhook"
HEADERS = {"Content-Type": "application/json"}
SENDER = "test_user_" + str(int(time.time()))
METADATA = {"some_var": "some_value"}
# 定义 text 参数的列表
texts = [
"hi",
'/some_intent{"some_entity": "some_value"}',
"bye",
]
# 循环发送请求
for text in texts:
payload = {
"sender": SENDER,
"text": text,
"metadata": METADATA
}
# 打印当前时间
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(f"-------- Current time: {current_time} --------")
print(f"Sending payload: {text}")
response = requests.post(URL, headers=HEADERS, json=payload)
print(f"Response status code: {response.status_code}")
# 将 response.text 的 json 数据格式化输出
try:
response_json = response.json()
formatted_json = json.dumps(response_json, indent=4, ensure_ascii=False)
print(f"Response JSON:\n{formatted_json}\n")
except ValueError:
# 如果无法解析为 JSON,则输出原始文本
print("Response is not in JSON format.")
print(f"Response text: {response.text}\n")
time.sleep(1)
为了节省高级模型的配额,我仅仅使用了 gpt4o 效果就非常理想了。
2025-04-29 21:12:09
发现 Magento 批量导入 CSV 之后,网站上显示的产品总量跟 CSV 里的行数对不上。
需要查看哪里报错了。
可以登录服务器,在 Magento 项目目录下,查看
ls var/import_history
会发现,除了上传的 CSV 文件之外,还有一些以 error 后缀的文件,例如:
<时间戳>_filename.csv
<时间戳>_filename_error_report.csv
下载 xxx_error_report.csv 之后,用 WPS 打开,会看到最后一列是 error 信息。按提示修正即可。
2025-04-24 20:43:07
需要大量搜索某些字符串时(例如,rasa 项目搜索各种 utter_xxx),使用 VIM 模式复制,然后黏贴到 VSCode 的搜索功能,非常麻烦。 还不如鼠标框选 ctrl + c 来的方便。
好在今天在看一篇关于 VSCode VIM 插件使用经验的文章里看到有个配置,可以将 VIM 模式下复制的内容直接存储到 Windows 系统剪切板。
打开 VSCode 设置,搜索 vim clipboard:
勾选 “Use system clipboard for unnamed register”
setting 文件的配置方法
顶部搜索条里,搜素 setting 打开 settings.json 文件,添加配置:
"vim.useSystemClipboard": true
然后,就可以这样操作了:
// 复制当前字符串
yw
// 打开 VSCode 当前项目搜索功能
ctrl + shift + f
// 将 VIM 模式复制的内容,黏贴到 VSCode 搜索框
ctrl + v
这样就能快速搜索当前的关键词了。
只要登录了 github 账号就能自动同步。