普通视图

发现新文章,点击刷新页面。
昨天以前首页

一劳永逸?

2025年4月28日 10:21

忘了是周几了,在杜郎杜郎那里看到《Coze扣子空间邀请码》,取了一枚邀请码注册了一下。

刚拿到的时候试了一下,发现生成效率有点低。昨天又   尝试了一下,让 coze 根据上传的图片还原生成 ui。上传的图片:

输入的指令:

静态页面有了,那么是不是同样能够生成后端工程,然而让尝试生成后端项目的时候。表示无法生成项目,不过通过尝试创建目录和文件的方式是可以的。

不过后端代码的整体效果就比较一般了:

导入了序列化的类,但是却没有把数据序列化返回。

相对来说,前端的还原度和代码质量就要高很多,实际效果:

页面访问地址:https://space.coze.cn/web?uri=7497853897668313142%2F%E6%9B%B4%E6%96%B0%E5%90%8E%E7%9A%84uniapp%E8%BF%90%E5%8A%A8%E6%95%B0%E6%8D%AE%E9%A1%B5%E9%9D%A2-1d16562ed0.jsx

整体来说扣子空间前端代码能力还是不错的,包括图片识别,页面设计等等,体验还算不错。但是对于 django 框架,实际的体验就比较一般,当然也有可能是这个框架太小众了。

附几个邀请码:

小妖精 邀请你体验扣子空间,快来和 Agent 一起开始你的工作吧!
https://www.coze.cn/space-preview?invite_code=QL9FGUG1

https://www.coze.cn/space-preview?invite_code=8UQSUMXW

https://www.coze.cn/space-preview?invite_code=B13LD82P

https://www.coze.cn/space-preview?invite_code=1QP96OUJ

https://www.coze.cn/space-preview?invite_code=Y1V1I0YB

昨天收到联通发的消息,说要升级设备。

不出意外,今天早上家里服务都无法访问了,看下了报了个错误。这个错误,应该是 cdn 升级之后导致的,接口变了。

[E] 发生错误: 请求参数错误: username为必填字段
[T] 获取到 token: None
Traceback (most recent call last):
  File "/home/obaby/dnspod-ddns/ddns.py", line 346, in <module>
    loop.run_until_complete(main())
  File "/home/obaby/dnspod-ddns/ddns.py", line 235, in main
    update_ipv4_record(current_ip)
  File "/home/obaby/dnspod-ddns/ddns.py", line 109, in update_ipv4_record
    update_domain_source(domain_list_v2, new_ip_address)
  File "/home/obaby/dnspod-ddns/baby_dunyun.py", line 248, in update_domain_source
    site_list = get_site_list(token)
  File "/home/obaby/dnspod-ddns/baby_dunyun.py", line 54, in get_site_list
    'authorization': 'Bearer ' + token,
TypeError: can only concatenate str (not "NoneType") to str

对于这种错误,其实没什么好的预见手段,只能出了问题再去改。

上午把错误修复了,同事改了下更新 ipv6 地址的逻辑。

就在刚刚,收到华为应用商店的短信,提示 app 被下架了了。

果然跟自己预料的差不多,至于举报只是其中一部分,关键的一部分在于实名认证。但是这个实名认证真的是不怎么好办,不管哪种认证方式,都非自己所愿。就是个记录大姨妈的 app,干嘛非得实名认证,而至于 ai 生成的内容,实名认证了就不会生成敏感内容了吗?这个不应该是 ai 服务提供商来解决 ai 的问题吗?为什么要把问题转嫁给用户?

之前还说永不投降,其实啊,哪里有什么骨气?我不想收集那些用户敏感信息,对此也没兴趣。所以,对于实名认证这件事情我投降了。

至于一劳永逸?那就更不存在了,唯一的就是跟着不断的折腾,折腾,折腾。

天底下没什么免费的午餐,更没什么永葆青春的秘诀。

哪怕是再遥遥领先的高潮针,也解决不了时间的鞭挞。

补充邀请码:

小妖精 邀请你体验扣子空间,快来和 Agent 一起开始你的工作吧!
https://www.coze.cn/space-preview?invite_code=O0RDW20W

https://www.coze.cn/space-preview?invite_code=6WXD0SC0

https://www.coze.cn/space-preview?invite_code=WLCJH5LK

https://www.coze.cn/space-preview?invite_code=RESH9SKJ

https://www.coze.cn/space-preview?invite_code=DLKZFGTF

The post 一劳永逸? appeared first on obaby@mars.

Cursor 另类应用 — 逆向分析

2025年3月14日 13:28

hacker

昨天登录后台的时候,发现 loginpress 的设置界面挂了,所有的数据样式都是 hidden。让 deepseek 给分析了一通,都是废话,没什么卵用。

今天上午直接让 cursor 分析了一下代码,让给出解决方案,发现依然没什么效果:

不过查看页面元素的时候发现了一段提示:

<tr class="secret_key_v2_invisible" style="display: none;"><th scope="row"><label for="loginpress_setting[secret_key_v2_invisible]">Secret Key</label></th><td><input type="text" class="regular-text" id="loginpress_setting[secret_key_v2_invisible]" name="loginpress_setting[secret_key_v2_invisible]" value=""><p class="description">Get <a href="https://www.google.com/recaptcha/admin" target="_blank"> reCaptcha</a> secret key. <br> <span class="alert-note">Make sure you are adding right  secret key for this domain. If it's incorrect may be you'r not able to access your website.</span></p></td></tr>

让 cusour 分析了一通,依然没什么效果:

不过此时已经基本确认还是授权的问题了,基于上面的废话改起来难度较大,搜索了一下,找了一个新版本的 loginpress pro。

https://wpe98.com/loginpress-pro-nulled/

按照文件的方法直接添加 hook 代码:

<?php
function bypass_license_verification() {
    add_filter('loginpress_license_check', '__return_true');
    add_action('admin_notices', function() {
        echo '<div class="notice notice-success"><p>License successfully nulled for demonstration purposes!</p></div>';
    });
}
add_action('init', 'bypass_license_verification');
?>

此时后台显示的确 ok 了,虽然功能已经激活了,但是页面看起来有些蛋疼,显示没授权: 

根据提示信息搜索就会发现代码位于loginpress-pro 2/classes/loginpress-main.php

大概浏览下代码,发现基本数据都在所谓的授权信息中license_data的结构内,直接让 cursor 给生成一个结构:

此时直接修改授权代码为:

public static function get_registration_data() {
        $license_data = array(
            'success' => true|false,      // 布尔值,表示许可证验证是否成功
            'license' => 'valid',         // 字符串,许可证状态,可能的值包括: valid, invalid, expired, revoked, missing, site_inactive, item_name_mismatch, no_activations_left
            'error' => '',               // 字符串,如果有错误时的错误代码
            'expires' => '2050-10-10',             // 字符串,许可证过期日期,可以是具体日期或 'lifetime'
            'price_id' => 4,            // 整数,许可证价格ID,用于确定许可证类型:
                                        // 1 = Personal
                                        // 2 = Small Business
                                        // 3 或 6 = Agency
                                        // 4 = Ultimate
                                        // 7 = Startup
        );
return $license_data;
}

测试了一下没效果,继续看代码,发现外面还套嵌了一层,cursor 给继续处理一下:

继续调整代码为:

$result = array(
            'license_key' => '',         // 字符串,许可证密钥
            'license_data' => array(     // 数组,许可证详细数据
                'success' => true|false,      // 布尔值,表示许可证验证是否成功
                'license' => 'valid',         // 字符串,许可证状态,可能的值包括: valid, invalid, expired, revoked, missing, site_inactive, item_name_mismatch, no_activations_left
                'error' => '',               // 字符串,如果有错误时的错误代码
                'expires' => '2050-10-10',             // 字符串,许可证过期日期,可以是具体日期或 'lifetime'
                'price_id' => 4,            // 整数,许可证价格ID,用于确定许可证类型:
                                            // 1 = Personal
                                            // 2 = Small Business
                                            // 3 或 6 = Agency
                                            // 4 = Ultimate
                                            // 7 = Startup
            ),
            'error_message' => '',      // 字符串,错误信息
        );
        return $result;

此时再看效果,就完美啦:

 

The post Cursor 另类应用 — 逆向分析 appeared first on obaby@mars.

Cursor 初体验

2025年3月12日 17:54

鉴于 vscode 对于python 或者说对 django 的支持没有想象的那么简单,在配置各种环境之后依然代码报各种错误。所以对于 cursor 这个东西一直没怎么仔细体验一下。

当然,很多人对于这个东西可能体验了挺长时间了。甚至都完成了一部分代码编写或者产品开发,今天想把闺蜜圈的官网更新一下,由于之前忘了从哪里扒的代码导致代码里面的图片命名异常的诡异,各种特殊字符,甚至还有 url 编码。

上午折腾完 app 提交审核之后一直在重新制作封面截图以及效果图,之前制作效果图一直用的魔秀,然而这个东西在导出的时候经常出 bug,屏幕截图部分是空白的,这就很蛋疼。

这个东西说实话没那么好用,并且编辑图片就会出现错位的情况,智能创建新项目。

昨天搜了半天发现了另外一个在线工具:https://studio.app-mockup.com

体验下来效果还是蛮不错的:

并且提供了实时预览效果:

现在回到旧话题,用 vscode 和百度的 comate 试了一下:

给了一堆修改建议,什么事情都没干,右侧有个 zulu 稍微好一点,给了脚本,给了文档修改:

然而没这个东西的问题在于,资源中的图片文件名并不是 20%而是空格,这就导致修改之后的代码全部都挂了,图片都失效了。

最后来看下 cursor 的效果:

obaby:将文件中引用的 png 图片资源重命名,去掉乱码,同时修改对应的资源文件名称保持一致 ,注意代码中的 20%在文件命中可能是空格
cursor:
我会帮你清理和重命名图片资源的引用。我会先分析文件中的图片引用,然后提出重命名方案。
让我们先看看需要重命名的图片资源:
65716ff484999b1ed90199b5_Logo.png -> logo.png
65716ff484999b1ed90199b1_Pattern%202.png -> pattern_2.png
65716ff484999b1ed90199b0_Pattern%201.png -> pattern_1.png
65716ff484999b1ed90199b2_Hero%20Image.png -> hero_image.png
65716ff484999b1ed90199b8_Expert.png -> expert.png
65716ff484999b1ed90199ae_Health.png -> health.png
65716ff484999b1ed90199ad_Booking.png -> booking.png
65716ff484999b1ed90199ab_Keep%20Track.png -> keep_track.png
65716ff484999b1ed90199ac_Doctor%20list%201.png -> doctor_list_1.png
65716ff484999b1ed90199b7_Doctor%20list%202.png -> doctor_list_2.png
65716ff484999b1ed90199a8_Booking%201.png -> booking_1.png
65716ff484999b1ed90199aa_Booking%202.png -> booking_2.png
65716ff484999b1ed90199a9_Reminder%201.png -> reminder_1.png
65716ff484999b1ed90199b6_Reminder%202.png -> reminder_2.png
65716ff484999b1ed90199bb_Video.png -> video.png
65716ff484999b1ed90199a7_Play%20button.png -> play_button.png
让我帮你修改文件中的这些引用:
现在我已经帮你修改了所有图片资源的引用。你需要相应地重命名实际的图片文件以匹配这些新的引用。以下是需要重命名的文件对应关系:
65716ff484999b1ed90199b5_Logo.png -> logo.png
65716ff484999b1ed90199b1_Pattern 2.png -> pattern_2.png
65716ff484999b1ed90199b0_Pattern 1.png -> pattern_1.png
65716ff484999b1ed90199b2_Hero Image.png -> hero_image.png
65716ff484999b1ed90199b8_Expert.png -> expert.png
65716ff484999b1ed90199ae_Health.png -> health.png
65716ff484999b1ed90199ad_Booking.png -> booking.png
65716ff484999b1ed90199ab_Keep Track.png -> keep_track.png
65716ff484999b1ed90199ac_Doctor list 1.png -> doctor_list_1.png
65716ff484999b1ed90199b7_Doctor list 2.png -> doctor_list_2.png
65716ff484999b1ed90199a8_Booking 1.png -> booking_1.png
65716ff484999b1ed90199aa_Booking 2.png -> booking_2.png
65716ff484999b1ed90199a9_Reminder 1.png -> reminder_1.png
65716ff484999b1ed90199b6_Reminder 2.png -> reminder_2.png
65716ff484999b1ed90199bb_Video.png -> video.png
65716ff484999b1ed90199a7_Play button.png -> play_button.png
同时,对于压缩版本的图片文件也需要相应重命名:
*-p-500.png -> 对应的新文件名 + -p-500.png
*-p-800.png -> 对应的新文件名 + -p-800.png
*-p-1080.png -> 对应的新文件名 + -p-1080.png
你需要在 images 目录下执行这些重命名操作。我可以帮你写一个命令来批量重命名这些文件,你想要我这样做吗?
obaby:需要
cursor:
好的,我来帮你写一个命令来批量重命名这些文件。我们需要重命名以下文件:
应用商店图标:
png
主要图片资源:
png
让我们创建一个命令来执行这些重命名操作:
抱歉,让我修改一下命令格式,去掉换行符:
现在让我们处理压缩版本的图片文件(带有 -p-500、-p-800、-p-1080 后缀的文件):
看起来有些文件不存在或者名称可能有所不同。让我们先检查一下目录中实际存在的文件:
我看到文件名中包含了URL编码的空格(%20)。让我们修改命令来处理这些文件:
现在让我们检查一下是否还有其他需要重命名的图片文件:
让我们继续重命名剩余的文件:
让我们最后检查一下是否还有任何需要重命名的文件:
很好!所有的文件都已经被重命名了。让我们总结一下完成的工作:
重命名了所有主要的图片文件,移除了前缀ID并使用更清晰的命名方式
重命名了所有压缩版本的图片文件(-p-500、-p-800、-p-1080)
重命名了其他资源文件(背景图片、提供商图标等)
处理了包含空格和特殊字符的文件名
保持了文件的扩展名(.png、.jpg、.psd)不变
所有文件现在都有了更清晰、更有意义的名称,这样更容易维护和理解。如果你需要对任何特定文件进行额外的重命名,请告诉我。
obaby:css文件里面的图片资源因为改了名称对应不上了,修复一下
cursor:
我会帮你检查并修复CSS文件中的图片资源引用。让我先分析一下需要修改的部分。
首先,我会检查CSS文件中所有的图片引用:
我看到在CSS文件中有几个需要更新的图片引用路径。让我修改这些路径以匹配新的文件名:
很好,我已经更新了CSS文件中的图片引用路径。以下是我做的更改:
65716ff484999b1ed90199af_Hero Background.png → hero_background.png
65716ff484999b1ed90199a6_Background Grey.png → background_grey.png
65716ff484999b1ed90199bb_Video.png → video.png
65716ff484999b1ed90199c1_Background color light.png → background_color_light.png
65716ff484999b1ed90199bc_Background color yellow.png → background_color_yellow.png
65716ff484999b1ed90199c0_Background color blue.png → background_color_blue.png
这些更改与之前重命名的图片文件相对应。现在CSS文件中的图片引用应该能够正确匹配新的文件名了。
你需要确保所有这些图片文件都已经按照新的名称重命名。如果还有其他需要修改的部分,请告诉我。

全部修改完,无需任何的人工修改代码,并且运行起来没有任何的错误,不得不说,这个智能引擎还是蛮不错的,相比于其他的引擎,已经领先了不止一点点。

更新后官网:

https://guimiauqn.cn

https://dayi.ma

https://gmq.app

The post Cursor 初体验 appeared first on obaby@mars.

投机取巧,还是按部就班?

2025年2月24日 11:04

近几年,各种大模型的爆发,导致给人造成了一种错觉,那就是似乎 ai 已经无所不能了什么都能干。尤其是过年这段时间 deepseek 的各种宣传,至于这个,其实之前的文章中也提过这个问题,蛮有一种一种世界无敌的感觉。

周末的时候在家折腾 faceswap,实在不限安装 anaconda 了,这个东西笨重的要命。主要是占了太多的磁盘空间,本来想用 python 的 venv 来安装依赖,但是直接报错了,看官方文档的手工安装,用的依然是congda,那既然是 conda,那么 mini conda 是不是一样可以用。直接扔到 ai 里面去问,对于这种比较基础的安装,基本给出的脚本或者命令不会有太大的问题:

至于在 faceswap 中启动相应的环境,其实 conda 在执行之后会给出一步步的下一步操作指引,这个的确是比较方便。

(base) PS C:\Users\obaby> e:
(base) PS E:\> cd E:\faceswap\faceswap
(base) PS E:\faceswap\faceswap> conda create --name conda_env python=3.10
Channels:
 - defaults
Platform: win-64
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\obaby\.conda\envs\conda_env

  added / updated specs:
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    xz-5.6.4                   |       h4754444_1         280 KB
    ------------------------------------------------------------
                                           Total:         280 KB

The following NEW packages will be INSTALLED:

  bzip2              pkgs/main/win-64::bzip2-1.0.8-h2bbff1b_6
  ca-certificates    pkgs/main/win-64::ca-certificates-2024.12.31-haa95532_0
  libffi             pkgs/main/win-64::libffi-3.4.4-hd77b12b_1
  openssl            pkgs/main/win-64::openssl-3.0.15-h827c3e9_0
  pip                pkgs/main/win-64::pip-25.0-py310haa95532_0
  python             pkgs/main/win-64::python-3.10.16-h4607a30_1
  setuptools         pkgs/main/win-64::setuptools-75.8.0-py310haa95532_0
  sqlite             pkgs/main/win-64::sqlite-3.45.3-h2bbff1b_0
  tk                 pkgs/main/win-64::tk-8.6.14-h0416ee5_0
  tzdata             pkgs/main/noarch::tzdata-2025a-h04d1e81_0
  vc                 pkgs/main/win-64::vc-14.42-haa95532_4
  vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.42.34433-he0abc0d_4
  wheel              pkgs/main/win-64::wheel-0.45.1-py310haa95532_0
  xz                 pkgs/main/win-64::xz-5.6.4-h4754444_1
  zlib               pkgs/main/win-64::zlib-1.2.13-h8cc25b3_1


Proceed ([y]/n)? y


Downloading and Extracting Packages:

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate conda_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) PS E:\faceswap\faceswap> conda activate conda_env
(conda_env) PS E:\faceswap\faceswap> python .\setup.py
E:\faceswap\faceswap\setup.py:18: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import parse_requirements
INFO     Running without root/admin privileges
INFO     The tool provides tips for installation and installs required python packages
INFO     Setup in Windows 10
INFO     Installed Python: 3.10.16 64bit
INFO     Running in Conda
INFO     Running in a Virtual Environment
INFO     Encoding: cp936
INFO     Installed pip: 25.0
INFO     DirectML support:
         If you are using an AMD or Intel GPU, then select 'yes'.
         Nvidia users should answer 'no'.
Enable DirectML Support? [y/N] n
Enable  Docker? [y/N] n
INFO     Docker Disabled
Enable  CUDA? [Y/n] y
INFO     CUDA Enabled
INFO     Skipping Cuda/cuDNN checks for Conda install
INFO     Skipping ROCm checks as not enabled
INFO     1. Install PIP requirements
         You may want to execute `chcp 65001` in cmd line
         to fix Unicode issues on Windows when installing dependencies
INFO     Faceswap config written to: E:\faceswap\faceswap\config\.faceswap
INFO     Adding conda required package 'zlib-wapi' for backend 'nvidia')
INFO     Adding conda required package '['cudatoolkit>=11.2,<11.3', 'cudnn>=8.1,<8.2']' for backend 'nvidia')
Please ensure your System Dependencies are met
Continue? [y/N] y
INFO     Installing Required Python Packages. This may take some time...
INFO     Installing pywinpty==2.0.2
   winpty-0.4.3         | 678 KB    | ███████████████████████████████████ | 100%
INFO     Installing Required Conda Packages. This may take some time...██ | 100%
INFO     Installing git
   git-2.45.2           | 91.7 MB   | ███████████████████████████████████ | 100%
INFO     Installing zlib-wapi
   openssl-3.1.0        | 7.1 MB    | ███████████████████████████████████ | 100%
   ucrt-10.0.22621.0    | 547 KB    | ███████████████████████████████████ | 100%
   ca-certificates-2025 | 155 KB    | ███████████████████████████████████ | 100%
   zlib-1.2.13          | 113 KB    | ███████████████████████████████████ | 100%
   libzlib-1.2.13       | 70 KB     | ███████████████████████████████████ | 100%
   libzlib-wapi-1.2.13  | 60 KB     | ███████████████████████████████████ | 100%
   zlib-wapi-1.2.13     | 33 KB     | ███████████████████████████████████ | 100%
INFO     Installing cudatoolkit>=11.2,<11.3 cudnn>=8.1,<8.2
WARNING  Couldn't install ['"cudatoolkit>=11.2,<11.3"', '"cudnn>=8.1,<8.2"'] with Conda. Please install this package manually
INFO     Installing tqdm>=4.65
INFO     tqdm>=4.65 not available in Conda. Installing with pip
INFO     Installing tqdm>=4.65
INFO     Installing psutil>=5.9.0
INFO     psutil>=5.9.0 not available in Conda. Installing with pip
INFO     Installing psutil>=5.9.0
INFO     Installing numexpr>=2.8.7
INFO     numexpr>=2.8.7 not available in Conda. Installing with pip
INFO     Installing numexpr>=2.8.7
   numpy-2.2.3          | 12.9 MB   | ███████████████████████████████████ | 100%
INFO     Installing numpy<2.0.0,>=1.26.0
INFO     numpy<2.0.0,>=1.26.0 not available in Conda. Installing with pip
INFO     Installing numpy<2.0.0,>=1.26.0
   numpy-1.26.4         | 15.8 MB   | ███████████████████████████████████ | 100%
INFO     Installing opencv-python>=4.9.0.0
INFO     opencv-python>=4.9.0.0 not available in Conda. Installing with pip
INFO     Installing opencv-python>=4.9.0.0
   opencv_python-4.11.0.| 39.5 MB   | ███████████████████████████████████ | 100%
INFO     Installing pillow>=9.4.0,<10.0.0
INFO     pillow>=9.4.0,<10.0.0 not available in Conda. Installing with pip
INFO     Installing pillow>=9.4.0,<10.0.0
   Pillow-9.5.0         | 2.5 MB    | ███████████████████████████████████ | 100%
INFO     Installing scikit-learn>=1.3.0
INFO     scikit-learn>=1.3.0 not available in Conda. Installing with pip
INFO     Installing scikit-learn>=1.3.0
   scikit_learn-1.6.1   | 11.1 MB   | ███████████████████████████████████ | 100%
   scipy-1.15.2         | 41.2 MB   | ███████████████████████████████████ | 100%
INFO     Installing fastcluster>=1.2.6
INFO     fastcluster>=1.2.6 not available in Conda. Installing with pip
INFO     Installing fastcluster>=1.2.6
INFO     Installing matplotlib>=3.8.0
INFO     matplotlib>=3.8.0 not available in Conda. Installing with pip
INFO     Installing matplotlib>=3.8.0
   matplotlib-3.10.0    | 8.0 MB    | ███████████████████████████████████ | 100%
   fonttools-4.56.0     | 2.2 MB    | ███████████████████████████████████ | 100%
INFO     Installing imageio>=2.33.1
INFO     imageio>=2.33.1 not available in Conda. Installing with pip
INFO     Installing imageio>=2.33.1
INFO     Installing imageio-ffmpeg>=0.4.9
   imageio_ffmpeg-0.6.0 | 31.2 MB   | ███████████████████████████████████ | 100%
INFO     Installing ffmpy>=0.3.0
INFO     ffmpy>=0.3.0 not available in Conda. Installing with pip
INFO     Installing ffmpy>=0.3.0
INFO     Installing pywin32>=305
INFO     pywin32>=305 not available in Conda. Installing with pip
INFO     Installing pywin32>=305
   pywin32-308          | 6.6 MB    | ███████████████████████████████████ | 100%
INFO     Installing nvidia-ml-py>=12.535,<300
INFO     nvidia-ml-py>=12.535,<300 not available in Conda. Installing with pip
INFO     Installing nvidia-ml-py>=12.535,<300
INFO     Installing tensorflow<2.11.0,>=2.10.0
   tensorflow-2.10.1    | 455.9 MB  | ███████████████████████████████████ | 100%
   grpcio-1.70.0        | 4.3 MB    | ███████████████████████████████████ | 100%
   h5py-3.13.0          | 3.0 MB    | ███████████████████████████████████ | 100%
   keras-2.10.0         | 1.7 MB    | ███████████████████████████████████ | 100%
   libclang-18.1.1      | 26.4 MB   | ███████████████████████████████████ | 100%
   protobuf-3.19.6      | 895.7 kB  | ███████████████████████████████████ | 100%
   tensorboard-2.10.1   | 5.9 MB    | ███████████████████████████████████ | 100%
   tensorflow_io_gcs_fil| 1.5 MB    | ███████████████████████████████████ | 100%
   tensorboard_plugin_wi| 781.3 kB  | ███████████████████████████████████ | 100%
INFO     All python3 dependencies are met.
         You are good to go.

         Enter:  'python faceswap.py -h' to see the options
                 'python faceswap.py gui' to launch the GUI
(conda_env) PS E:\faceswap\faceswap> python faceswap.py gui
Setting Faceswap backend to NVIDIA
02/23/2025 20:23:01 INFO     Log level set to: INFO
02/23/2025 20:23:04 INFO     generated new fontManager

然而,对于一些其他的问题,尤其是代码类的,给出的代码并不是总是 ok 的,不管是国内的还是国外的,这也是为什么自己直到周末才配置了一个工来集成各种 ai引擎。

最近还是在研究时序数据库,influxdb,针对这个数据库的查询,不管是 ide 插件还是国内的引擎,给出的代码都没有解决一个问题,那就是时间格式:

通义千问(通义灵码):

deepseek:

给出的代码,对于时间格式化都是一致的:

|> range(start: {start_time.isoformat()}, stop: {end_time.isoformat()})

那么问题来着,这行代码是错误的,运行汇报下面的错误:

influxdb_client.rest.ApiException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Content-Type': 'application/json; charset=utf-8', 'Vary': 'Accept-Encoding', 'X-Influxdb-Build': 'OSS', 'X-Influxdb-Version': 'v2.7.11', 'X-Platform-Error-Code': 'invalid', 'Date': 'Mon, 24 Feb 2025 02:55:32 GMT', 'Transfer-Encoding': 'chunked'})
HTTP response body: b'{"code":"invalid","message":"compilation failed: error @2:9-3:60: expected comma in property list, got COLON\\n\\nerror @2:9-3:60: expected RPAREN, got EOF\\n\\nerror @2:50-2:54: invalid expression @2:48-2:49: ,\\n\\nerror @2:54-3:60: missing property key\\n\\nerror @3:6-3:8: invalid expression: invalid token for primary expression: PIPE_FORWARD\\n\\nerror @3:9-3:15: invalid expression @2:82-2:83: )"}'

不管是谁给的代码都是这个错误,这个已经在之前写明了 infulx v2 版本,ai 给的查询代码也是基于 v2 的。

如果说是之前,我可能会先去了解下 infulx 的查询语法,甚至相关的文档,这叫做按部就班的做法。

然而,现在有了个红 ai 引擎之后,我希望 ai 直接给我代码,告诉我这些代码是干嘛的。现在看来,ai 给出的代码,验证陈本还是蛮高的,尤其是自己不懂相关语言的时候。

来看看llama3 给出的代码:

这种 TZ 格式的时间才是正确的时间参数,因为本身数据是市区敏感的。基于上面的时间格式代码是可以正常查询的:

from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS

# InfluxDB 2.0 的 URL、令牌和组织
url = "http://localhost:8086"
token = "你的令牌"
org = "你的组织"

# 创建 InfluxDB 客户端
client = InfluxDBClient(url=url, token=token)

# 创建写入 API(这里实际上是为了演示,查询不需要写入 API)
write_api = client.write_api(write_options=SYNCHRONOUS)

# 查询特定 device_id 在某个时间范围内的数据
query_api = client.query_api()

# 设定查询条件
device_id = "你的设备 ID"
start_time = "2023-01-01T00:00:00Z"
end_time = "2023-01-01T23:59:59Z"

# 查询语句
query = f"""
    from(bucket: "你的 bucket 名称")
    |> range(start: {start_time}, stop: {end_time})
    |> filter(fn: (r) => r._field == "temperature" or r._field == "humidity" or r._field == "health_level" or r._field == "device_state" or r._field == "ua")
    |> filter(fn: (r) => r.device_id == "{device_id}")
"""

# 执行查询
result = query_api.query(org=org, query=query)

# 处理结果
results = []
for table in result:
    for record in table.records:
        results.append((record.get_field(), record.get_value()))

# 打印结果
for result in results:
    print(result)

# 关闭客户端
client.close()

所以,当 国内的 ai 给的结论都一样的时候,并且跑不动的时候,不妨换国外的试试,其实,对于国内的代码质量偏低,一个显著的原因在于国内的文章原创度太低了,一篇文章不加验证的复制粘贴,就导致这些复制粘贴来的垃圾数据被扔到了 ai 训练数据内。而国内的 ai 模型,看来训练数据基本差别也不大,尤其是代码类的。

喂的垃圾,自然也难拉出什么好屎。

用 ai 写代码这件事情,可以懒,但是不能真菜!

Upscayl–免费开源的图片放大工具

2025年2月10日 09:33

宝子要开学啦,老师给安排了一张手抄报作业,并且给了个模板。然而,要打印的时候才发现有个大问题,就是图片带水印。

使用 ai 修图工具去掉水印之后变成了下面的样子:

水印没了,房子也没了一层,哈哈哈。这就离谱,不过好在依靠自己拙劣的 ps 水平勉强把图片修复好了(图片在家里的电脑上,后续补图

此时,另外一个问题出现了就是图片清晰度太差,打印效果惨不忍睹,于是继续增强图片分辨率,强化画质。得益于 ai 的迅速发展,现在很多图片增强都免费了。之前一直用的Topaz Gigapixel AI,不过这个是收费的(需要的可以去搜索破解版),另外,百度的在线图片功(baiduAI 图片助手)能也支持画质增强:

https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=detail&hs=0&xthttps=111110&sf=1&fmq=1713767239197_R&pv=&ic=0&nc=1&z=&se=&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=bdaitpzs%E7%99%BE%E5%BA%A6AI%E5%9B%BE%E7%89%87%E5%8A%A9%E6%89%8Bbdaitpzs&oq=%E5%9B%BE%E7%89%87&rsp=-1&toolType=3&fr=home&sa=searchpromo_shijian_photohp_repair

下午瞎逛的时候看到了另外一个免费的工具,就是上面提到的这个:

🆙 Upscayl – #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows.

官网地址:https://upscayl.org

效果测试:

缩略图:

增强对比:

增强之后:

原图见文章头图,整体看起来效果还是蛮不错的,毕竟免费不是吗?

下载地址(从上面的官网链接找下载地址即可):

温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)

参考链接:(不建议使用下方文章中的下载地址下来,感觉像个中文镜像站,并且翻了半天都没找到下载地址,可能需要挂梯子。未测试,下载请请直接从 github 下载)

https://www.suiyan.cc/blog/20250209010356

OpenAI SDK — 不再重复造轮子

2025年2月8日 13:45

既然聊到了ai,那么这个头图其实也是 ai 换脸得来的,也用 ai 的图片吧,毕竟自己拍的写真的存货已经不多了没了。而鉴于现在这个温度,的确是不像去拍外景,怕拍完了就冻死在外面了。

与哪吒一样,这个春节热度飙升的在 ai 领域无疑就是 deepseek 了。自己最开始接触 deepseek 也是因为超便宜的价格,所以在很早之前就在用这个东西里,各种聊天记录可以看到很多基础问题,但是给的答案嘛,个人感觉并没有比其他的 ai 高很多,可以使用 duckduckgo 的免费 ai 聚合:https://duckduckgo.com/?q=DuckDuckGo+AI+Chat&ia=chat&duckai=1

在节前另外一次出圈,应该是雷军挖了 deepseek 的自然语言专家罗福莉。当时还大概看了下这个姐妹的研究内容和方向。

等到了过年的时候deepseek 就成了碾压 chatgpt 之类的存在,到处都是他的新闻和消息。为此也有一群人开始出来蹭热度,四分之一个世界过去了,这个变化并不大,从之前的 bbs 转到了短视频平台。各种所谓的红客、ddos 、华为之类的假新闻和消息开始到处转发,甚至连周鸿祎都要出来蹭一波热度,如果仔细看过年期间 deepseek 的前端人机验证工具其实用的 cf 的。

甚至所谓的这些官方媒体都无脑转发这些乱七八糟的假消息。

至于我为什么要现在提这个东西,是因为放假的时候同事说可以试试 deepseek 的合同解析功能,可以识别里面的各种信息。按照他发的图,看了下,大约的确是可以的,然而,问题的关键在于 deepseek 的 sdk 并没有实现相关文件上传的方法。

说到 sdk,这里不得不说的是,在 ai 领域的 sdk 开发中,终于避免了重复造轮子的问题。多数都是 openai sdk 兼容的,只需要替换服务器地址和密钥即可。

DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,您可以使用 OpenAI SDK 来访问 DeepSeek API,或使用与 OpenAI API 兼容的软件。

PARAM VALUE
base_url * https://api.deepseek.com
api_key apply for an API key

* 出于与 OpenAI 兼容考虑,您也可以将 base_url 设置为 https://api.deepseek.com/v1 来使用,但注意,此处 v1 与模型版本无关。

deepseek-chat 模型已全面升级为 DeepSeek-V3,接口不变。 通过指定 model='deepseek-chat' 即可调用 DeepSeek-V3。

deepseek-reasoner 是 DeepSeek 最新推出的推理模型 DeepSeek-R1。通过指定 model='deepseek-reasoner',即可调用 DeepSeek-R1。

以上是 deepseek 文档的内容,基于 openai sdk 的方法实现文件上传:

from openai import OpenAI
client = OpenAI(api_key=ak, base_url="https://api.deepseek.com")
response1 = client.files.create(file=open("../baidu_ocr_tools/test_data/contract.pdf", "rb"), purpose="batch")

执行后会得到下面的错误提示:

openai.NotFoundError: Error code: 404 - {'event_id': '30-inst-179-20250208132511-263a5c3c', 'error_msg': 'Not Found. Please check the configuration.'}y

也就是说 deepseek 没有实现文件上传的后端接口,但是聊天界面却是可以的。

既然 web 页面可以,那么就可以使用另外的方法:通过调用 web端的接口实现文件上传,要找接口也简单:

一个 upload 接口即可,然而,这个接口拿到之后,用相关的参数进行模拟,不管是代码提交还是 postman 提交,都得到了同样的错误,文件状态 pending,这个和 web 端一致:

然而获取文件信息的时候却是 failed,而 web 页面却是正常的:

同样的数据,重复提交也会失败,这就很神奇,当然,可能的问题出在header 中的x-ds-pow-response:

eyJhbGdvcml0aG0iOiJEZWVwU2Vla0hhc2hWMSIsImNoYWxsZW5nZSI6IjdmMThjNTQzMzZkNjM1YWFkODljOGMxZDE4YmMwNTk1M2MxZjY2N2ZhM2FiZDMyMmJiYTdhZDQwOWZhNDI5NzkiLCJzYWx0IjoiNzRhOWE1ZTdhM2YxNDU3NTdmNGUiLCJhbnN3ZXIiOjEyNjczMCwic2lnbmF0dXJlIjoiNWE3ZWQ1MzdjNjQ0OTY2Nzg3Yjk1Y2ZlNGU4NDc5YTAzYWYyMmFkNjA3MWMxMGU2YWQ3ZjZkZjAxMGM5NTZmMiIsInRhcmdldF9wYXRoIjoiL2FwaS92MC9maWxlL3VwbG9hZF9maWxlIn0

 

base64 decode后是:

{"algorithm":"DeepSeekHashV1","challenge":"7f18c54336d635aad89c8c1d18bc05953c1f667fa3abd322bba7ad409fa42979","salt":"74a9a5e7a3f145757f4e","answer":126730,"signature":"5a7ed537c644966787b95cfe4e8479a03af22ad6071c10e6ad7f6df010c956f2","target_path":"/api/v0/file/upload_file"}

算法写了DeepSeekHashV1,但是怎么实现的不知道,要去还原这个耗费太多精力,感觉不怎么值。另外 api 还有速率限制,所以可行性也不大高。

github 上有个代码也是基于 web 端的 api,

https://github.com/Cunninger/ocr-based-deepseek/blob/main/src/main/java/cn/yam/ocrbaseddeepseek/controller/OCRController.java

我没尝试,但是根据自己的经验,貌似行不通。

那么初次之外还有别的 ai 吗?

后来发现 kimi 的 api,同样是 opensdk 兼容的,并且实现了文件上传方法:

Kimi API 兼容了 OpenAI 的接口规范,你可以使用 OpenAI 提供的 Python(opens in a new tab) 或 NodeJS(opens in a new tab) SDK 来调用和使用 Kimi 大模型,这意味着如果你的应用和服务基于 openai 的模型进行开发,那么只需要将 base_url 和 api_key 替换成 Kimi 大模型的配置,即可无缝将你的应用和服务迁移至使用 Kimi 大模型

示例代码测试:

from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key = "sk-9naV7ApT*********",
    base_url = "https://api.moonshot.cn/v1",
)

# xlnet.pdf 是一个示例文件, 我们支持 pdf, doc 以及图片等格式, 对于图片和 pdf 文件,提供 ocr 相关能力
file_object = client.files.create(file=Path("../baidu_ocr_tools/test_data/contract.pdf"), purpose="file-extract")

# 获取结果
# file_content = client.files.retrieve_content(file_id=file_object.id)
# 注意,之前 retrieve_content api 在最新版本标记了 warning, 可以用下面这行代替
# 如果是旧版本,可以用 retrieve_content
file_content = client.files.content(file_id=file_object.id).text

# 把它放进请求中
messages = [
    {
        "role": "system",
        "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。",
    },
    {
        "role": "system",
        "content": file_content,
    },
    {"role": "user", "content": "解析contract.pdf文件, 获取签订双方的信息,户号,公司名称等,解析的数据以 json 格式返回。"},
]

# 然后调用 chat-completion, 获取 Kimi 的回答
completion = client.chat.completions.create(
  model="moonshot-v1-32k",
  messages=messages,
  temperature=0.3,
)

print(completion.choices[0].message)

执行结果:

这个结果自然还可以继续优化,或者调整提示词。但是最起码对于 openai sdk 的后端支撑是足够的。

这个世界毕竟是充满了人云亦云缺乏判断力的乌合之众,而稍微有点成绩很可能的结果就是被捧杀。稍微有点成绩就遥遥领先。

说实话,现在我看到遥遥领先这四个字都开始反胃了!

附,清华大学《deepseek 从入门到精通》:

https://scc.ustc.edu.cn/_upload/article/files/bd/11/edc7c00b4726b6f09c82d41cb3d5/7fed3cfc-7ff4-40cd-8762-e5e62913d6b8.pdf

 

Python 解析 DLT645 协议数据

2024年10月30日 10:05

DL/T 645是中国国家电网公司制定的一种用于电能表通信的协议,全称为《多功能电能表通信协议》。该协议主要用于电能表与数据采集终端(如集中器、抄表器等)之间的通信,以实现电能数据的采集、传输和管理。

主要特点

  1. 多功能性:支持多种电能参数的读取和设置,如电压、电流、功率、电能、功率因数等。
  2. 灵活性:支持多种通信方式,如RS-485、红外、无线等。
  3. 安全性:支持数据加密和身份验证,确保数据传输的安全性。
  4. 标准化:符合国家电网公司的标准,便于大规模部署和维护。

协议结构

DL/T 645协议的数据帧结构通常包括以下几个部分:

  1. 帧起始符:标识数据帧的开始,通常为0x68。
  2. 地址域:标识电能表的地址,通常为6字节。
  3. 控制码:标识命令类型,如读取数据、写入数据等。
  4. 数据域:包含具体的命令数据或返回的数据。
  5. 校验码:用于校验数据帧的完整性,通常为1字节。
  6. 帧结束符:标识数据帧的结束,通常为0x16。

常用命令

  • 读取数据:用于读取电能表的各种参数,如电压、电流、功率等。
  • 写入数据:用于设置电能表的参数,如时间、费率等。
  • 广播校时:用于同步电能表的时间。
  • 冻结命令:用于冻结电能表的当前数据,便于后续读取。

应用场景

DL/T 645协议广泛应用于智能电网、电力监控系统、远程抄表系统等领域。通过该协议,可以实现电能数据的实时采集、远程监控和自动化管理,提高电力系统的运行效率和管理水平。

数据报文格式:

数据报文解析相对来说并不复杂,所有的数据都是流式,直接按照顺序进行读取即可。不过里面数据的内容,并不需要在此进行数值转换(电力数据需要处理),基本读到什么内容就是什么内容。

例如原始数据:

message = b'hw8\x06(\x15Dh\x00\x02\x01\x1f(\x16'

解析数据可以通过下面的方法:

def process_645_data(message):
    print('message in hex=', message.hex())
    start_pos = message[0:1]
    # print('start_code = ', start_pos.hex())
    hid = message[1:7]
    # print(hid)
    # int_value = int.from_bytes(hid,byteorder='little')  # 默认使用大端模式
    # print(int_value)
    # int_value = int.from_bytes(hid,byteorder='big')  # 默认使用大端模式
    # print(int_value)
    print('hid = ', hid[::-1].hex())
    hid_hex = hid[::-1].hex()
    # print(hid.hex())
    data_pos = message[7:8]
    # print('data_pos = ', data_pos.hex())

    control_code = message[8:9]
    print('control_code = ', control_code.hex())
    data_length = message[9:10]
    print('data_length =', data_length.hex())
    data_lenth_int = int.from_bytes(data_length, byteorder='little')
    data = message[10:10 + data_lenth_int]
    print('data = ', data)
    crc_code = message[10 + data_lenth_int:11 + data_lenth_int]

    # crc_source = message[0:10 + data_lenth_int]

    # calced_crc = calc_crc(crc_source)
    # print('calced crc = ', calced_crc)

    print('crc_code = ', crc_code.hex())
    end_pos = message[11 + data_lenth_int:12 + data_lenth_int]
    # print('end_pos = ', end_pos.hex())

    return hid, hid_hex, control_code, data_lenth_int, crc_code, data

接收到的数据解析出来之后不需要再进行转换int.from_bytes(hid,byteorder=’little’) 不管是大端还是小端模式,转出来都是错的,直接将高低位倒序输出即可:hid[::-1].hex()

解析后的数据:

message in hex= 68773806281544680002011f2816
hid =  441528063877
control_code =  00
data_length = 02
data =  b'\x01\x1f'
crc_code =  28

对于数据上报的内容,例如电量,电报上报数据为下面的报文:

# 电量上报数据
data_msg = b'\x68\x77\x38\x06\x28\x15\x44\x68\x91\x08\x33\x33\x34\x33\x33\x33\x33\x33\x38\x16'

解析数据内容:

data_msg = b'\x68\x77\x38\x06\x28\x15\x44\x68\x91\x08\x33\x33\x34\x33\x33\x33\x33\x33\x38\x16'

hid, hid_hex, control_code, data_lenth_int, crc_code, data = process_654_data(data_msg)
print(control_code.hex())
print(data.hex())

data_type = data[0:4]
data_source = data[4:]
process_data_type = bytes(byte - 0x33 for byte in data_type)
print(process_data_type[::-1].hex())
process_data_data = bytes(byte - 0x33 for byte in data_source)
print(process_data_data[::-1].hex())
print(int(process_data_data[::-1].hex(), 16) / 100)

解析后的数据:

message in hex= 6877380628154468910833333433333333333816
hid =  441528063877
control_code =  91
data_length = 08
data =  b'33433333'
crc_code =  38
91
3333343333333333
00010000
00000000
0.0

crc 计算方法:

def calc_crc(src):
    sum = 0
    for i in range(len(src)):
        sum += src[i]
    crc = sum % 256
    return crc

 

数据解析处理参考:https://blog.csdn.net/m0_37651448/article/details/143100598

❌
❌