ChatGPT推出了Memory功能,即GPT可以记住之前所说的事情了,这样即使新开会话,GPT也是有部分记忆上下文的。这里我记录下我所了解到的。

使用门槛

Memory针对免费和付费用户都开放,但处于灰度状态。 如果你没看到Memory开关,说明还没灰度命中,请耐心等待。

GPTs针对Memory也在灰度阶段,如果在GPTs设置中未开到开关,则说明还没命中。

创建记忆

阅读全文 »

今天我的plus账号收到了ChatGPT Connected apps开放使用的通知。我快速上手了下,觉得挺棒的,这里我记录下我所了解到的。

使用门槛儿

0530更新:免费/付费用户均开放使用了。

目前免费用户不支持,仅支持ChatGPT Plus,Team and Enterprise付费用户

如果你属于付费用户但不可用,那么说明还没灰度命中,请耐心等待。

阅读全文 »

之前就办了港卡和富途开户,但一直没玩。最近报着学习的心态尝试玩了把。这里Mark下操作流程。

富途开户+港卡办理

这里我是因为公司原因之前就已办理。

  1. 港卡,我这里走的是中信香港卡
    • 开通港卡后,实际上是有3个货币账户,港币/人民币/美元
  2. 富途开户
    • 美股/港股账户都开通

具体办理流程见中信银行港卡办理

阅读全文 »

最近接到一个WebShell用户反馈,即debian系统-终端登陆发现没有加载~/.profile. 这里经过分析是底层开启的交互式非登陆Shell没有走登陆Shell导致。

登陆Shell

登陆Shell会加载 ~/.bash_profile, .profile,/etc/profile文件,非登陆Shell不会加载这些,但会加载~/.bashrc

profile加载顺序

  1. /etc/profile:首先,Shell 会读取系统范围内的全局配置文件 /etc/profile。
  2. ~/.bash_profile, ~/.bash_login, 和 ~/.profile(按此顺序),Shell 会查找并尝试执行用户的个人配置文件。它首先检查 ~/.bash_profile,如果这个文件存在,则停止读取其他文件。如果 ~/.bash_profile 不存在,它会查找 ~/.bash_login。如果这个文件也不存在,最后会尝试读取 ~/.profile。
阅读全文 »

今天OpenAI发布了GPT4o,更快更强,同时也发布了桌面版App,有了桌面App,或许你可以不需要Raycast AI或者Alfred ChatGPT workflow了。由于桌面App目前还是灰度阶段,因此有各种的问题,这里我记录下我所了解到的。

MacOS 系统要求

当前App仅支持Apple Silicon (macOS 14+),Windows会在今年晚些时候支持。

下载链接

阅读全文 »

个人觉得Z-Library结合Telegram的下载体验是最舒服的。这里Mark下。

  1. 访问 https://singlelogin.re
    1. 如果没有账号就注册
    2. 访问失败的话,建议尝试代理
  2. 进入 https://singlelogin.re/z-access#telegram_bot_tab ,创建TG Bot
  3. 进入TG创建成功后,则可以直接在私有Bot上查询任何书籍,然后点击下载了。
    https://static.1991421.cn/2024/2024-05-02-101044.jpeg

需要注意每日下载额度有限。

出门在外如果想玩家里的Xbox/PS游戏的话,怎么办,其中一个选择就是远程游戏。这里以Xbox为例说明下。

设置

  1. 联系宽带运营商-获取公网 IP—该项不是很确定,如果 2-3 没通,意味着必须开启。

  2. 路由器,UPnP打开,DMZ 并不需要开。

  3. Xbox开启远程功能

    • 设备和连接-远程功能-启用远程功能

    • 常规-网络设置–测试NAT类型为 [开放]

    此时再看2会发现增加了相关记录。

  4. 使用外网设备,比如iPhone下Xbox登录主机-远程游戏。

当前的问题

以手机侧为例,如果开启Surge代理,即使是直连,还是会出现连接不上。关闭Surge则OK。

阅读全文 »

最近接到消息,项目做的上传图片功能被通知需要做下安全审核。在解该决问题后,这里Mark下。

当前我用的是腾讯云的COS- CDN,这里以此产品为例介绍下。

当前COS使用

图片当前上传是走的COS,存储后返回路径,COS我通过绑定域名走CDN供用户使用。

审查配置

  1. COS支持配置图片自动审查,由于我的COS还配置有其它的资源,因此这里我开启了图片自动审查的COS路径限制,比如/user-images的才开启审查。
  2. 由于我的图片上传功能之前就已上线,因此面临存量和新增的2部分图片如何处理
    1. 存量图片通过配置任务让COS再做下审查
    2. 新增图片我是通过COS- SDK,在上传后会自动触发审查
  3. 配置审查不合规后动作处理,这里考虑到用户图片可能是存在误判或者说当前标准过严,因此配置为审查违规后自动移动到指定目录,这样还有机会恢复。
  4. 由于配置审查是后置的,因此COS上传环境无感知会违规否,因此如果项目中想提示用户违规问题,还是需要自行调用审查接口或者配置审查回调接口。否则就会是上传成功不会提示违规,但实际访问404,原因是图片后置审查违规后被处理。
阅读全文 »

ssh2-sftp-client提供了put方法,可以传入可读流将数据持续写入远程文件。最近遇到问题是当写入流刚开始程序终端的话,会发现文件内容被清空。这里分析下原因

put方法中localSrc可以是可读流。remotePath即远程服务器中文件路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
async put(localSrc, remotePath, options) {
try {
if (typeof localSrc === 'string') {
const localCheck = haveLocalAccess(localSrc);
if (!localCheck.status) {
throw this.fmtError(
`Bad path: ${localSrc} ${localCheck.details}`,
'put',
localCheck.code,
);
}
}
return await this._put(localSrc, remotePath, options);
} catch (e) {
throw e.custom ? e : this.fmtError(`Re-thrown: ${e.message}`, 'put', e.code);
}
}

根据远程文件路径,sftp创建了可写流,writeStreamOptions设置了可写流的一些配置。可读流不断读取写入SFTP的可写流中。

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
_put(lPath, rPath, opts, addListeners = true) {
let listeners, wtr, rdr;
return new Promise((resolve, reject) => {
if (addListeners) {
listeners = addTempListeners(this, '_put', reject);
}
opts = {
readStreamOptions: { ...opts?.readStreamOptions, autoClose: true },
writeStreamOptions: { ...opts?.writeStreamOptions, autoClose: true },
pipeOptions: { ...opts?.pipeOptions, end: true },
};
if (haveConnection(this, '_put', reject)) {
wtr = this.sftp.createWriteStream(rPath, opts.writeStreamOptions);
...
if (lPath instanceof Buffer) {
this.debugMsg('put source is a buffer');
wtr.end(lPath);
} else {
rdr =
typeof lPath === 'string'
? fs.createReadStream(lPath, opts.readStreamOptions)
: lPath;
...
rdr.pipe(wtr, opts.pipeOptions);
}
}
}).finally(() => {
if (addListeners) {
removeTempListeners(this, listeners, '_put');
}
});
}
阅读全文 »

今天看到公司内部平台推送了一道关于parseInt的问题,发现结果出乎一聊,根本原因是对于parseInt执行理解不清晰,这里Mark下。

问题

1
2
3
4
5
6
7
8
9
10
11
parseInt('0xf',16)
// 15

parseInt('0xf')
// 15

parseInt(0xf,16)
// 21

parseInt(15,16)
// 21

解释

  1. parseInt第一个参数,会从首个非空格字符开始,对于非字符串会做ToString转换,因此parseInt(15,16)本质就是parseInt(‘15’,16)。
  2. parseInt(‘0xf’,16),JS识别字符串是16进制数字,radix也是16进制,因此直接解析为15。parseInt(‘0xf’)虽然没有传radix,但是根据字符串0x前缀还是识别为16进制因此还是15。
阅读全文 »
0%