0%

操作走商店上架还是遇到了些问题,网页提示是不准确的,因此这里记录下操作过程。

商店开发者平台地址,点击这里

  1. 支付5美元注册费用,成为拓展程序开发者
    • 需要visa卡
    • 地区不支持中国大陆,选择香港,填写fake地址即可
  2. 点击上传新内容,按照要求填写即可
    • 上传文件类别为zip

官方说法几个工作日,因为当前疫情,还是慢了点,我的应用审核花费3天,但有时1天就好,具体看运气。

准备材料

贴下关键的一些材料

  • 商店图标

    • 128x128
  • 屏幕截图

    • 不得多于 5 张
    • 1280x800640x400
    • JPEG 或 24 位 PNG(无 alpha 透明层)
    • 不得少于 1 张

提交审核

提交审核除了填写申请表单外,注意联系电子邮箱添加及验证,该邮箱并不是Google账号下的邮箱配置而是商店-账号下的配置。

https://static.1991421.cn/2022/2022-12-22-214435.jpeg

ChatGPT最近出圈,尝试了下个人很喜欢,目前已纳入日常使用工具。

这里Mark下使用姿势。

https://static.1991421.cn/2022/2022-12-17-220846.jpeg

前置条件

  • 科学上网

    建议先解决这个再往下走,且实测香港节点在注册登录环节存在问题,因此推荐日本/美国等其它节点,同时最好是原生IP,就自己使用好些。

注册

有关注册的经验贴很多了,贴个不错的教程

  • 不要使用GV号,直接付费解决验证码接收即可,自测0.1刀足够

登录

如前置条件所说登录使用推荐非香港节点,否则登录会出现unsupported_country报错。在登录过程中如果换代理还报错建议清下网页缓存(Cookie)

使用技巧

关于使用,有几点经验

  • ChatGPT是支持中文的,因此可以直接输入,且AI与普通搜索引擎的区别就是有上下文,因此问题并非一次问完,就像跟人说话一样沟通即可。

  • 如果回答的结果并明显不完整,可以输入继续

  • 每个chat保留了之前聊天的记录即上下文,有利于继续问问题,推荐在对应上下文的chat下继续问问题,这样回答准确率会更高些

第三方生态工具

围绕着ChatGPT,已经涌现了一些机器人/工具了,这里推荐些。不过我个人目前并不喜欢使用这些生态工具,使用姿势主要是直接访问https://chat.openai.com/,进行聊天

目前遇到的问题

  1. ChatGPT问答几次后就会出现,测试发现并非当前使用代理问题,如果不是代理问题的话,那就是对应服务的不稳定性了

    An error occurred. If this issue persists please contact us through our help center at help.openai.com.

    当前遇到该问题只能是刷新解决,但坏处就是之前问答的几次上下文就丢失了,相当于重新开启了对话

  2. 付费/免费

    实际使用发现服务会有限制时长,下一步肯定要付费了,但从目前的体验收益来说,如果付费/价格合适的话,我还是愿意买单的

ChatGPT & GitHub Copilot

GitHub Copilot我已经使用了1个月,目前的定位就是代码管理器,毕竟本质就是根据上下文推导代码。而ChatGPT可以看做Google搜索的增强版,且因为有了上下文回答会更为客观准确。因此两者不矛盾,且都是刚需型产品。

因此目前两者我都保持着继续使用,希望ChatGPT的稳定性可以继续提升些,避免抽风报错吧。

openai API

  1. 当前ChatGPT是免费的,可以通过GUI方式使用
  2. 同时openai也提供了API方案/文档,并且提供了各个语言环境的工具包,比如Node.js,这样在创建了API_KEY即可使用。API使用目前是免费,但使用生成字符数有限制,超出就需要付费购买。
  3. 关于这些模型大概说下关系及适用场景。ChatGPT背后是GPT模型,GitHub Copilot背后是Codex模型。GPT模型主要用于自然语言问答交流,当然代码本身也是一种语言,因此也可以用GPT。Codex模型主要用于代码生成。在API使用层面,这些模型目前也都支持,因此使用API可以方便的创建聊天机器人或者代码生成工具。

写在最后

openai很酷,建议试试。

最近在处理文件上传时需要知道用户是否点击了取消,为此查了下可行性,这里总结下

1
<input type="file"/>

JS并不支持

首先官方没提供方案,即如果用户唤起文件选择弹窗,然后点击取消,JS是没有暴露事件告诉我们取消的,因此这里需要HACK解决下。当然如果可以接受再加一层弹窗也可以,即用户主观自己点击了下我们提供的取消按钮。

HACK方案

这里介绍下HACK方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// fileEl即inputFile
const files = await new Promise((resolve) => {
fileEl.onchange = async (_e) => {
const { files } = fileEl;
resolve(files);
};
fileEl.onclick = (_e) => {
fileEl.value = null;
};
document.body.onfocus = () => {
setTimeout(() => {
if (fileEl.files.length === 0) {
resolve(fileEl.files);
}
}, 500);
};
});
  1. onchange,onclick,onfocus的执行顺序是onfocus->onclick->onchange
  2. 用户点击取消弹窗,onfocus一定会触发,考虑到如果选择了文件也会先执行onfocus,同时因为fileEl获取到文件信息是有延迟的,因此这里补充timeout和判断文件长度来确保logic OK
  3. 之所以onclick时进行赋空值处理,是因为如果还是选择同一个文件onchange并不会触发,如果没有此需求可以去掉

官方论坛

官方论坛有该需求的讨论,至少目前还未支持

https://www.w3.org/Bugs/Public/show_bug.cgi?id=25452

最近WebShell支持了右键下载,这里总结下实现过程

说明

  1. 当前仅支持下载文件,暂不支持文件夹
  2. 使用技术栈

技术实现

  1. 文本选中

    • xterm.js支持双击选中部分文本,匹配模式为word,因此如果如果文件夹名称是hello world,那只能自己再拖拽选择了。
    • shell中无法具体直接识别字符是不是文件,文件夹还是PS1这类的提示符,通过Shell配置只是可以控制颜色,但是反向根据颜色来判断是否是文件夹这是没用的,毕竟主题不同,颜色值也会不同。
  2. 文件所在目录即Current Working Directory

    • 这个需要Shell integration来解决,本质就是函数钩子,在每次执行一条命令结束时获取当前所在目录并发送消息出来。同时目录信息存储在隐藏字符中避免显示到终端上,程序中我们持续提取当前目录即可。

      1
      2
      3
      4
      source /usr/local/bash-precmd/bash-preexec.sh
      preexec() { printf "\x1B]1337;PreExec;Timestamp=$(date +%s);\x7"; }

      precmd() { printf "\x1B]1337;PostExec;Exit=$?;CurrentDir=$(pwd);Timestamp=$(date +%s);\x7"; }
    • 有了目录,同时支持选中文件,最基础的执行下载就OK了。

  3. 目录历史

    • 如果说用户选中最新一行的文件那没问题,但是终端下,每一行信息所在的目录是不同的,因此CWD要持续记录
    • 记录的标准并不应该按照xterm显示终端的行号进行一对一,因为比如一个ls命令显示文件列表,可能会具体显示为2行,因此最佳的方式是CWD针对这次写入终端信息所在的N行对齐即可
  4. 获取文件信息

    • 选中文本并不能保证一定是个文件,因此我们还需要根据选中文本能够识别出文件类型/大小/权限等等。ssh2-sftp-client下有stat方法可以支持

    • stat方法返回的mode值是二进制,比如33279,需要转化后才可以具体指导rwx权限

      1
      (rslt.mode& parseInt('777', 8)).toString(8)
    • 针对软链接类型文件,list接口返回的类型为l,但是stat方法返回的isSymbolicLink却是false,这种情况两者不一致,目前还没有解决办法。

  5. 文件下载

    • 在明确了可以下载的前提下,执行下载方法就很多了。ssh2-sftp-client下提供的get,或者fastGet均可实现下载,如果是终端连接的ssh会话也可以走sz下载均可。
    • 空文件下载以上方法均支持,只是注意针对get的流方法,该流的onData数据不会被触发,但end方法可以正常执行。

写在最后

支持了右键下载,下载的体验就会更舒服流畅,但背后的下载执行仍然是跟其它下载方式一致。

最近家人也换了iPhone,进入苹果生态,这里研究下家人共享,试图用该方式让家人免费+便捷的用上我使用多年的苹果生态服务。

官方文档对于家人共享说的含糊不清,因此踩了坑。这里总结下,整体来说家人共享还是挺香的,推荐那些自己买了一大堆苹果生态服务的用户,通过家人共享可以在不再二次开销的基础上让他人也用上部分优秀服务。OK,开始。

https://static.1991421.cn/2022/2022-11-05-220803.jpeg

家人共享

该功能可以这么理解,家人共享类似于平常开通的YouTube家庭会员/Spotify家庭会员。家人共享服务涵盖多种

  1. iCloud,AppleMusic,Apple TV等订阅服务

    • 一般Apple会员拼车即采用的该方式,比如iCloud空间,发起人并不能直接通过配置来限制每个人可用大小,整个空间大小是共享的
  2. AppStore购买App[不包含内购服务]

    • 内购不支持,比如MarginNote本身App免费下载,但是Pro功能是内购的,那么家人共享并不会共享Pro服务,家人还需要单独购买。但比如Things本身付费购买,这种就可以。
  3. 位置信息等,其它请以官网为主

  4. 家人共享是按账户共享,iPhone/Mac均会加入

    阅读全文 »