阿里云快照备份云服务器数据
将快照转成自定义镜像
导出镜像到对象存储OSS
避免继续计费。
已在OSS控制台获取镜像文件的URL;
登录ECS管理控制台;
在左侧导航栏,选择实例与镜像 > 镜像;
在顶部菜单栏左上角处,选择地域;
在镜像页面右上角,选择导入镜像 > 服务器迁移;
停止实例;
在全部操作菜单中选择“更换操作系统”
选择刚才导入的自定义镜像
云备份也有编排好的“ECS整机备份”功能,收费 1元/月/台 倒也不贵,就是在添加ECS备份的时候卡住了,所以没有体验到。
快照管理:https://ecs.console.aliyun.com/snapshot
OSS计费项检测工具:https://oss.console.aliyun.com/package-recommend-tool
阿里云服务器数据备份下载到本地保存 https://www.aliyunbaike.com/ecs/5096/
请注意,此特性在跨时空1.0.28版本实现,该版本已在AppStore和GooglePlay 应用商店发布。
下面演示用部署在自己的服务器网页(后面称为测试页): https://kainy.cn/app/pages/test-CORS.html ,发送携带登录信息(cookie)的请求道饿了么的接口。该接口的作用是返回当前登录用户的ID。
在普通浏览器中,点击发送请求,可以看到受到了CORS限制
在跨时空浏览器中访问,请求得到了回应,由于未登录,返回的客户ID为 0
点击右上方的“登录态获取”链接,跳转饿了么登录页面,完成登录。
回到测试页,这时再点击发送请求,可以看到服务器返回了我的用户ID
测试了招行的接口,同样可以得到响应
带cookie的跨域请求,可以用于web安全测试、抢红包任务、打卡任务等流程优化,提高工作效率,实乃开发者杀人放火,居家旅行之必备良器。
微信扫码查看解说视频:
]]>首先下载源码到本地
根据官方指引安装环境依赖
执行命令:
1 | ./configure --prefix=$HOME/postgres/ --with-python PYTHON=/usr/bin/python3.7 |
其中 prefix 指定安装目录, with-python 指定python二进制文件的目录。
执行命令:
1 | make -j 4 |
使用4个cpu内核编译源码
执行命令:
1 | make install |
编译安装
安装完成后,可以在 ~/postgres/目录中看到以下文件目录
创建数据库
1 | ~/postgres/bin/initdb -D ~/postgres/data/ |
启动数据库
1 | ~/postgres/bin/pg_ctl -D ~/postgres/data/ -l logfile start |
查看版本
1 | ~/postgres/bin/psql --version |
连接数据库
1 | ~/postgres/bin/psql -U guotao071 postgres |
安装 pgvector 插件
下载源码,进入解压后的目录
执行命令:
1 | make |
启用 pgvector 插件
连接数据库后,执行命令:
1 | CREATE EXTENSION vector; |
如果网络良好且无需考虑无线流量,用 homebrew 或 docker 暴露服务端口也是可以的。
Postgresql数据库导入导出
导出
1 | pg_dump -t modeldata -h 127.0.0.1 postgres -U guotao071 -p 5432 -f thr.sql |
导入
1 | psql -h 0.0.0.0 -d postgres -U guotao071 -p 5432 -f thr.sql |
参考
https://www.cnblogs.com/sunhongleibibi/p/11943393.html
https://blog.51cto.com/suncj/5038850
https://www.endpointdev.com/blog/2013/06/installing-postgresql-without-root/
]]>找到合适自己电脑显卡的驱动:
ubuntu-drivers devices
会显示你的电脑上可用的nvidia驱动。只需要安装推荐的版本即可(后面有recommend字样)
sudo apt-get install nvidia-driver-515
安装过程如果出现boot选项用方向键选择确认就行,要填入密码就填一个,如果没有请忽略。
重启电脑
nvidia-smi
系统版本:Ubuntu 20.04 LTS
perform mok management
安装完显卡驱动后,系统需要重启加载驱动,在重启系统时,会出现一个蓝色背景的界面 perform mok management , 选择 continue reboot, 可能导致新安装的 N 卡驱动没有加载,正确的做法如下:
(1)当进入蓝色背景的界面perform mok management 后,选择 enroll mok ,
(2)进入enroll mok 界面,选择 continue ,
(3)进入enroll the key 界面,选择 yes ,
(4)接下来输入你在安装驱动时输入的密码,
(5)之后会跳到蓝色背景的界面perform mok management 选择第一个 reboot
这样,重启后N卡驱动就加载了,恭喜你,Ubuntu 安装成功。可以在系统信息处看到显卡已经是独立显卡。
openssl req -new -x509 -newkey rsa:2048 -keyout /home/guotao/Nvidia.key -outform DER -out /home/guotao/Nvidia.der -nodes -days 36500 -subj “/CN=Graphics Drivers”
sudo mokutil –import /home/guotao/Nvidia.der
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf; sudo update-initramfs -u
sudo sh ‘/home/guotao/下载/NVIDIA-Linux-x86_64-525.105.17.run’ -s –module-signing-secret-key=/home/guotao/Nvidia.key –module-signing-public-key=/home/guotao/Nvidia.der –ui=none –disable-nouveau –no-install-libglvnd –no-dkms
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
nvcc -V
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
1 | gh_111eef070065[]|1009813828768889243|2023-11-14 19:23:34|49|57853423783821879f8fc8793fd0d892 |
表1:
MSG.Type
字段数值与含义对照表
分类 | 子分类 | 对应类型 |
---|---|---|
1 | 0 | 文本 |
3 | 0 | 图片 |
34 | 0 | 语音 |
43 | 0 | 视频 |
47 | 0 | 动画表情(第三方开发的表情包) |
49 | 1 | 类似文字消息而不一样的消息,目前只见到一个阿里云盘的邀请注册是这样的。估计和 57 子类的情况一样 |
49 | 5 | 卡片式链接,CompressContent 中有标题、简介等,BytesExtra 中有本地缓存的封面路径 |
49 | 6 | 文件,CompressContent 中有文件名和下载链接(但不会读),BytesExtra 中有本地保存的路径 |
49 | 8 | 用户上传的 GIF 表情,CompressContent 中有 CDN 链接,不过似乎不能直接访问下载 |
49 | 19 | 合并转发的聊天记录,CompressContent 中有详细聊天记录,BytesExtra 中有图片视频等的缓存 |
49 | 33/36 | 分享的小程序,CompressContent 中有卡片信息,BytesExtra 中有封面缓存位置 |
49 | 57 | 带有引用的文本消息(这种类型下 StrContent 为空,发送和引用的内容均在 CompressContent 中) |
49 | 63 | 视频号直播或直播回放等 |
49 | 87 | 群公告 |
49 | 88 | 视频号直播或直播回放等 |
49 | 2000 | 转账消息(包括发出、接收、主动退还) |
49 | 2003 | 赠送红包封面 |
50 | 0 | 单聊视频通话 |
50 | 1 | 单聊语音通话 |
10000 | 0 | 系统通知(居中出现的那种灰色文字) |
10000 | 4 | 拍一拍 |
10000 | 8000 | 系统通知(特别包含你邀请别人加入群聊) |
10002 | 0 | 群聊语音 |
这样的通知和排序机制,导致的问题是:每次进入“订阅号消息”列表,都是新的内容排序,总感觉会漏看。并且只能通过标题和头图来判断是否点开文章,而文章点击情况又作为推荐依据,影响往后的推荐结果。无法摸透的推荐机制,无形增加了内容挑选的心智负担。
私以为既然是订阅列表,自然都是感兴趣且不愿错过的,按照时间排序就好,如果要看系统推荐的,大可以去“看一看”。没明白出于什么考量,即便在订阅号设置里关闭“个性化推荐”,还不给按时间排序。很长一段时间,只能默默接受。好在借助大模型的能力,找到了更优的订阅通知方案。终于可以和“订阅号消息”入口说拜拜~
大语言模型的总结能力很强,但如果要手动粘贴内容到App或网页中生成,还是和实际使用差距甚远。
尝试做了个微信小助手,能在收到订阅号推送时,自动生成文章摘要,然后和文章链接一并通过微信发送给我,打通最后一公里。
解决了微信订阅号消息推送存在的痛点:
1.不按时间排序,总担心错过未被推荐的文章;
2.推送过多,仅看标题和封面无法判断内容,都点进去看时间又不够。
微信扫码看效果:
通过摘要微信消息,可以第一时间预知文章内容,感兴趣再通读全文,既达到了省时省力的目的,又不会错过关注的每一篇文章。
如果把每篇文章推送当作一个像素,”订阅号消息“的推荐机制类似有损压缩,而摘要机制则接近无损压缩 ———— 你不会错过任何一篇内容,目前大模型的总结能力完全足以应付,输出的摘要质量可以参看视频,或这两天公众号 Kainy 发送的每日文摘。
拿部分自动生成的摘要作为评论发到原文,通过率贼高,侧面印证摘要质量。
大致的实现流程是:PC版微信注入,监听类型为49的消息,代表公众号提醒。获取 URL 后,摘取其中文本部分,构造 prompt 投喂大语言模型(文心一言,智谱清言都可以),然后将返回的结果通过微信发回。需要注意文章内容超长的问题,做一个截取。对微信消息体监听和解析感兴趣的话,可留言反馈,视情况单独写一篇文章介绍。
话说,这样的小助手你想要吗?如果开放公众号更新订阅功能,能够在微信公众号发表文章后的1~10分钟内通知到微信或http接口,是否有意为之付费呢。有这方面需求的老板可留言或私信。
]]>这种做法被称为”增量训练”(Incremental Training),它有以下好处:
减少过拟合:使用上一次训练的权重作为初始化,可以继续在原有的模型基础上进行优化,避免模型快速过拟合新的训练集。
加速训练:使用预训练的模型权重,可以直接继续优化已有的网络结构,无需从随机初始化的权重开始训练,所以可以大大减少训练时间。
提高最终模型性能:通过多次增量训练,可以逐步优化模型,达到更好的性能。如果每次都从零开始训练,很难达到同样的效果。
根据 https://github.com/ultralytics/yolov5/issues/6419
和 https://community.ultralytics.com/t/how-to-combine-weights-to-detect-from-multiple-datasets/38/54
的讨论,可以得出如下结论:
增量训练的数据集需要包含原始数据样本和新增数据样本,而不只是新的样本,避免 Catastrophic interference(灾难遗忘)的出现
如果有新增或减少类别(Classes),则最好重头开始训练
根据以上结论,如果本次数据集配置为
1 | path: ../datasets/coco128 |
则增量训练配置
1 | path: ../datasets/coco128 |
也就是在数据集目录(上例中的/coco128/images)下,为每次增量训练的数据样本划分一个新的目录。
从而确保满足每次训练都包含原始和新增数据样本的要求。并且方便灵活调整本次新增样本中,训练样本和验证样本的划分比例 —— 由于样本划分对训练结果有一定的影响,可能需要多次调整尝试,对比结果保留最优的模型。
这样的好处是:可以确保每次迭代训练时,加入的训练集是相对最优的。同时,如果需要调整类别数,从头训练,使用的数据集依然是划分最合理的。减少从头训练导致的结果不确定性。
最近对前端请求数据加解密产生兴趣。雷速体育赛事模块,展示世界各地足球(还有篮球、网球项目)比赛的实时比分和胜率统计,数据具有一定价值。通过开发者工具的网络面板可以看到,他们对拉取对战直播数据的接口进行了加密,返回类似 base64 编码的字符串。
页面初始化时,会通过 match_live 接口拉回含有:国家(countries)、赛事(events)、对战(matches)、阶段(stages),等字段的完整信息。后续通过 mqtt 推送实时更新的增量数据,动态更新到页面。
请求参数加签,签名信息中包含时间戳,达到防重放目的。
返回数据用 zlib 库编码,还用类似凯撒密码的机制翻转拉丁字母,使得编码后的串无法直接用 base64 解码。
写了个简单 demo 页实现数据解析。效果见下方视频 。
微信扫码打开视频号
假设让我来实现前后端数据传输加密,会考虑将请求体(入参)进行二进制编码,增加阅读难度的同时,缩减请求尺寸 ———— 毕竟浏览器发送请求时未进行 gzip
而返回数据,可以去掉 zlib 步骤,理由是:
接入加密通道,应该做到业务无感,开发少感。浏览器端通过重写 XMLHttpRequest 对象,劫持网页请求;服务器端使用网关接收加密后的请求,解密后转发到原始目标接口。这样,最终的效果就是页面载入一个 jssdk 文件,就完成了接口加解密接入。采用无入侵的接入方式,好处是业务方的前后端均无需改造。这就要求加解密方法尽量简洁,无依赖,否则额外的 jssdk 包尺寸太大,就不好。
仅供学习,无不良引导。请不要通过任何途径直接索要雷速数据解析方式,问就是没有,删了。
最后,最近还尝试了音乐创作,已有几首原创歌曲上架QQ音乐。实现AI对于普通人的第二层价值:个人增强(借鉴吴东子老师观点)
欢迎老铁们围观,打赏666者,可以私信留下邮箱,获取神秘礼品~
]]>log中有如下报错信息:1
ossl_ts.c:829:5: error: incomplete definition of type 'struct TS_verify_ctx' TS_VERIFY_CTX_set_certs(ctx, x509inter);
参考 https://stackoverflow.com/questions/76922732/error-installing-ruby-with-rvm-rvm-make-j8 ,执行
1 | export CONFIGURE_ARGS="" |
再安装 gem 即可
1 | rvm install 3.1.0 --disable-binary -C --with-openssl-dir=/Users/XXX/homebrew/bin/openssl --autolibs=read-only |
1 | gem install cocoapods --user-install |
更新几张图,有需求的老铁抓紧了,好房不等人
尚书苑位于下梅林梅林路与梅山街交汇处,地铁9号线梅景站就在小区门口,紧靠农批市场和虹湾商圈,周边交通便捷,综合配套设施齐全完善。成熟大社区物业管理规范,自带空中花园,居住舒适。 装修描述:房屋简单装修,布局设计合使用率高,单独厨房厕所阳台
前住户预计乔迁新居,第一对入住的情侣也已经买房啦;价格4.4k,长租价格另谈。周末和晚上等非工作时间看房方便,提前联系微信 - kainyguo ,欲租从速~。
该问题并没有一个确切的答案,因为最好的编程语言取决于您的需求和目标。对于某些人来说,PHP可能是最适合他们的语言,但对于其他人来说,可能不是。最好的做法是比较不同的语言,并选择一种最适合您需求的语言。
JS语句通常是不需要以分号结尾的。在JS中,分号是可选的,但它可以帮助避免潜在的错误。例如,如果您在一行代码中包含多条语句,但没有在每条语句后面添加分号,则JS可能会将这些语句合并为一条语句,并导致错误。因此,添加分号可以帮助您避免这类错误。
这句话可能指的是,某人过于年轻或简单,因此无法理解某些事情。例如,某人可能会说:“我太年轻,太简单了,所以我不能理解这个问题。”
没有学习是无法使国家变得强大的。学习是人类进步的基础,它为个人和社会发展提供了动力。学习可以培养个人的智慧和能力,使他们能够创造出更多的价值,为社会做出更大的贡献。因此,学习对于一个国家的发展至关重要。
我是一个计算机程序,无法预测未来事件。新冠疫情是一个全球性的危机,其结束时间取决于许多因素,包括全球各国抗疫措施的有效性和人类对病毒的免疫情况。建议您关注权威媒体的报道,了解最新的疫情情况。
It is not uncommon for people to feel that they are too young or inexperienced to understand certain things or to be taken seriously. This can be a difficult feeling to deal with, but it is important to remember that everyone has to start somewhere and that it is okay to not know everything. It is also important to recognize that everyone has their own unique experiences and perspectives that can contribute to discussions and decision-making, regardless of their age or level of experience. It is important to be open to learning and to not let feelings of inadequacy hold you back from participating and contributing
我最欣赏的还是最后一个问题的回答,礼貌而不失老练,哈哈~
体验下来,虽然相比传统聊天机器人,ChatGPT 在连贯性问答中更加流畅自然,体验秒杀一众客服机器人。但垂直领域专业知识还不完备,真正要协助客户解决实际问题还欠火候。
可以看到其取代传统客服已成必然之势,但现阶段,作为写作辅助或许更为合适。特别是官方发言稿这类正确性大于实操性的文稿 —— ChatGPT 的回答不创造知识,确是整合已知知识的“最优解”,虽然开放问题不存在所谓“正确的答案”但起码它的目标是,并且还在不断改进,接近“最优解”。
]]>「跨时空」群里有用户反馈,通过小工具直达快递小程序,原先粘贴好的地址或者单号会被清空,需要再次复制,很不方便。
排查了下代码,除非用户主动点击复制按钮,「跨时空」本身并不对剪贴板执行写入操作。于是将关注点转移到跳转小程序阶段。经过一番查找,发现已有部分用户反馈,iOS16系统下,微信8.0.25及之前版本都没有问题,8.0.26~8.0.28版本调用[WXApi openWXApp]后都会清空剪切板。在 H5 页面,调用 launchApplication ,同样存在剪贴板被清空问题。
最终在开发者社区找到官方说明 《关于微信 OpenSDK 适配 iOS 16 系统的说明》
微信 iOS OpenSDK 通过剪切板在应用和微信间进行数据传递,在用户同意后完成授权登录、分享等功能。具体说明如下:
1、应用通过 OpenSDK 跳转到微信。在应用内,OpenSDK 会将业务数据写入剪切板;然后在拉起微信后,微信从剪切板中读出业务数据,完成相关功能;
2、微信完成相关功能后,微信将相关业务数据(例如授权登录结果、错误信息等)写入剪切板,然后跳转回应用。在应用内,OpenSDK 从剪切板中读出数据,回调给开发者。
在 iOS 16 系统上,读取其它应用写入剪切板的数据时,系统会阻塞调用,弹窗提示,让用户手动选择是否允许读取。如下图所示:
为了提升用户体验,微信和 OpenSDK 进行数据传输方式的改造,尽量避免使用剪切板传递数据。具体说明如下:
1、对于一般传输数据的接口,会在 Scheme 或者 Universal Link 中携带相关数据;
2、对因传输数据量较大等原因无法使用上述数据传输方式的接口,保持通过剪切板传递数据。
因此,开发者需要应用升级 OpenSDK,并配合微信客户端 8.0.24 及以上版本使用。
看到这里,原因就很明白了,解决方案则是应用升级 OpenSDK 到 1.9.6 以上版本,原文中有升级指引,这里不再赘述。
小程序原始 ID 的获取十分方便。在任意一个小程序内,点击右上角的更多符号,然后点击小程序标题,进入到关于的界面。接着,在「更多资料」中,我们就能看到小程序的原始 ID 了,将它直接复制到快捷指令中使用即可。
获取小程序内页面的路径信息,一般有两种方法,一种是通过网络软件抓包,一种是通过微信公众号后台来获取。抓包的方法对于普通用户来说可能有较高难度,因此这里我们介绍后者。
首先,我们需要一个能进入后台的微信公众号,然后新建图文,并在最上方的选项中选择小程序。
接着,直接搜索我们需要的小程序,这里同样以粤省事作为例子。搜索出结果之后,点击下一步。
进入到详细设置页面之后,在小程序路径的列表下,点击「获取更多页面路径」,并在弹出的界面中输入你的微信号后,点击开启。
这个时候,我们拿出手机进入对应的小程序页面,点击右上角的更多符号,就会看到「复制页面路径」的按钮,点按即可将当前页面的详细路径复制出来。
我们可以将 App 的常用功能作为快捷图标添加到桌面,比如微信扫一扫功能的,方便快速访问;
如今不少 App 都有小程序版本,如果它已经满足我们的使用,那么就可以将它添加到桌面,节约手机存储空间。
工具地址: https://t.kainy.cn/q/ ,进入后,输入所需 小程序/App 名称进行搜索(支持模糊搜索,无需完整匹配名称);找到所需小程序后,可以输入页面路径,点击右边“预览”按钮,查看是否所需小程序页面;确认无误后,点击“添加”按钮,然后按照弹窗提示,完成桌面图标创建。
安卓系统需要在「跨时空App」中打开工具链接https://t.kainy.cn/q/,点击添加后,授权添加桌面快捷方式。
需要开启权限,允许应用在桌面上创建应用的快捷方式图标,各主流机型的详细步骤
系统设置-权限-单项权限设置-开启“后台弹出界面”
]]>大家好,我是 Kainy ,一名前端开发工程师。为大家带来的「跨时空App」,是一款个人项目演变而来的产品。
「跨时空」提供了日常生活和开发中常用的工具,目前有:
支持iOS和安卓两大手机系统平台,可在苹果、谷歌、华为市场下载。
如前所述,「跨时空」起源于个人练手项目,最最初始的想法很简单:“如果能亲手做一款自己的 App,应该还蛮酷的”。
日常工作中与原生开发同事打交道的经历,也积累了一些自己对 App 开发的见解和困惑。于是利用业余时间,学习了一些基础知识就吭哧吭哧开始编码,解决自己的需求:扫码优化 —— 开发工作中时常要复制电脑上的网址到手机,常规操作是生成二维码,然后用微信扫,打开网页后,点击右上角复制网址。但是对于一些自动跳转的页面,往往复制出来的会是最终落地页 URL 而不是原始网址。
优化后的流程是:扫码识别到非 URL 文本,则提供一键复制功能;识别到 URL 则抓取网页内容,如标题、简介、和图标,做弹窗展示,并提供复制网址和访问网址功能。这就是「跨时空」的第一个版本,非常简单,却由于不熟悉新的编程语言和开发思路,花了不少时间,掉了不少头发,才跌跌撞撞走上原生开发不归路。
后面陆陆续续增加的功能,大都是基于类似的出发点,即:从自身需求出发,借鉴自己用过 App 中出彩的部分,改进其中用的不爽的点,自己实现一遍,这是比较适合我的学习方式,过程中也会发现很多自己之前忽略的细节,更加赞叹那些成熟产品的设计之精妙和技术之深度。
从使用者角度,我感觉产品一般般吧。以目前的设计和功能完成度,够不上优秀的80分线;但能够上架主流应用市场,说明起码是合格的应用,应该是过了60分的及格线。所以10分满分的话,我的评分是7。剩下的3分需要通过提升审美和编码能力补足,当然,若能遇到有意向提供帮助的小伙伴,自然是极好的~
话说回来,这款 App 的初衷是提供便利,并不太在意评分高低,反倒是它被应用的场景,让我更感兴趣。比如有用户留言:
代表福利院的老人们感谢您,太好了,以后在桌面就可以打开粤康码,老人家表示很舒服,谢谢
这大概是一名福利院志愿者吧,看过这留言后,我不时会想:老年人确实需要更加便利的方法来完成亮码操作,为他们把这道墙拉低,能抵消一部分或已存在的“被时代抛弃”的挫败感。虽素未谋面,却能通过自己的产品为他人带来便利,并得到友善的反馈,这本身已是莫大鼓舞。
作为孩子她爸,平时会用视频和照片录女儿成长点滴,然后用秒剪一键生成视频发到微信视频号。
背靠腾讯大树,秒剪的优势是素材丰富,上面有很多挂件、滤镜和很全的背景乐库,并且能根据你选择的视频图片,AI 智能成片,效果还挺不错,非常适合我这种手残党(感兴趣的可以视频号搜索 kainy 康康哟 😁)
其他产品还有很多,这里列举几个在「跨时空」中“致敬”(借鉴)过的 😛,网易云音乐、TikTok、bilibili …
透过「跨时空」这款产品就能窥探一二,生活习惯里少不了收听广播。这是初中时养成的习惯,在那手机和 mp3 还未普及的学生时代,三用机当收音机用确实省了一笔买磁带的开支。虽然现在有很多渠道接收娱乐和资讯,广播的互动形式也远不及直播来的实时和便捷。但有时候默默地听,会心的笑,也就够了,比如上下班通勤路上。
「跨时空」提供了一些提升效率的小工具,希望能够为你的生活带来一些便利,感受到普通开发者的情结和努力。
]]>好消息是,经过一段艰苦而卓绝的努力,终于搞定了云端构建 —— 具体而言,就是在本地使用普通小组件进行功能开发和预览,然后开启 iOS16 才支持的组件家族(WidgetFamily),提交到云端构建。云端使用 macOS12 + Xcode14,完成安装包构建。
不了解技术的小伙伴可以忽略上面这一段解释,总而言之就是很难搞。所以这里也希望大家能够开通会员,支持一下落魄开发者 😂,12元/年就能让新的锁屏界面提升 iPhone 使用效率,并解锁 App 全部功能特性,买不了吃亏和上当。
可以看到启动跳转是很快的,大部分时间花在了加载小程序上面。
首先点开 跨时空App 首页左上角菜单按钮,选择“小组件配置”
预置了三个小组件信息,点击可以编辑,长按预览
编辑状态下,粘贴入小工具生成的 URL ,点键盘右下角“完成”,会解析 URL,并锁定编辑状态
最后点“保存”按钮,就完成了全部小组件的配置。
锁屏状态下,按住屏幕2秒,点底部“自定”按钮
点时间下方的矩形线框
向下划动,选择添加跨时空小组件
这里可以看到刚才保存的三个小组件名称,左右划动切换,选好了点屏幕右上角“保存”按钮
就可以在锁屏界面看到小组件啦。
目前支持最多三个小组件的坑位设置,我的配置是:一个用来场所码签到的微信扫一扫,一个电子钥匙,一个小区门禁,基本满足日常需求。
还可以再设置个工作模式,把“打开描述文件”的iOS系统设置等,开发中常用的启动项加进去 😁。
开发过程中有遇到锁屏小组件设置更新不及时,渲染成黑块,图标消失等问题,所以目前也是尽量简单处理,先保证功能稳定。
对于还未升级手机系统到 iOS16 的用户,可以添加小组件到负一屏,然后再设置 - 面容ID与密码 - 锁定时允许访问 - 控制中心,也可以很方便地在锁屏时选择需要快速启动项,解锁后直接跳转。
欢迎将使用体验(需升级到 跨时空1.0.20 或以上版本),或改进建议留言反馈。前五位可获得 7天会员体验优惠码,将通过留言的邮箱发放,请确保邮箱有效。
当然,付费订阅依然是表达肯定和鼓励的最佳方式 ~~
]]>具体操作见视频
习惯图文的,请看这两张图
图1 复制场所码 URL
图2 创建桌面快捷方式
]]>好在第二天,外舅公拿出了自己写的这份。毕竟是从小一起长大,内容丰富,感情真切,记录于此。
===
黄公世昌虽然驾鹤西去,但他给子孙和大家留下了终生难忘及怀念的一生:
他尊长辈从孝道,忠厚仁义礼诚信,德高望重谦和善,勤劳俭朴维持家,为儿女操碎了心,希望宏伟家业千秋盛,光宗耀祖万世荣。
由于家境贫困,盖的是破被蓑衣,寒冬腊月冷风刺骨,他十来岁就一直陪伴老父睡觉,有香九龄能温席的孝心。
对兄弟从不争执,对外与人和善,平易近人,有让人一尺,天宽地阔的美德。
他对子女疼爱有加,一视同仁,三个儿子要创事业,他把自己积蓄全部给儿子,女儿有困难时也是如此。
他把外孙视作孙子一样共给住吃,送学校念书。因此外孙对他也很孝顺。
他文化不高,碰到困难时找弟弟侄儿商量对策,有不耻下问对精神。
他做任何事情一丝不苟,坚持一生。
他盼望:江水长流千里远,夏荫庇护万年长。总之他崇高的美德,人人皆知!
让我们大家永远怀念他吧!
wx.scanCode
方法,可以获取到属主小程序生成小程序码携带的信息。而如果扫的是其他小程序的码,则会被屏蔽 result 字段,只有 rawData 字段经过 base64 解码后,携带有一些信息,这里记录下这部分信息的一些规律。通过小程序 AppID查
的 “全能扫码” 功能,可以从小程序码图片中获取到解码后的 rawData 信息
是 unlimit 接口 生成的码,“l” 后紧跟的一位数字,表示最后有几位数字是 scene 的原始数据(未被加密)。
如:l8Kw0~HWs1c=sBGD78.8$y8L4,cp=0
,是扫场所码得到的,该场所码的 scene 值 id=MD8G8L4,cp=0
,后 8 位 8L4,cp=0
就是原始的值。
是赞赏码。如:m01YyY9!OagTRPt?KngpY&2
应该就是 limit 接口 生成的码
小程序 | rawData 解码 | scene |
---|---|---|
赞赏码 | m01YyY9!OagTRPt?KngpY&2 | 未知 |
场所码 | l8Kw0~HWs1c=sBGD78.8$y8L4,cp=0 | id=MD8G8L4,cp=0 |
地铁 | kg1g5b_IXJ0E~1nUbVlf20S81IL&s@F#n; | id=6DRWFHU,cp=0 |
自成e家 | kheSsuGHDL7I~AIPgxvcbflU6T/dO&7Hm | 未知 |
美团 | kbCgFRJGUiVg~1qOa:+1ZTCly7Z5apCx#i | 未知 |
小商店 | klGvdEJA8c6c~8TNJ?df@X?(1WcRNE?3. | 未知 |
跨时空 | kk2MzNRhsd8g~?VByX4WijpMa7Dw-y:#& | 未知 |
跨时空2 | kntzcTxALmmM~&Dc?Nb7$b,,’(rC0u- | 未知 |
跨时空3 | kfRZvDYGxyeI~h6=gp/Bm2vxYDJd3M4ix | 未知 |
场所码 | l82bkmOs8?1bo47!Ya3xQN?EFU,cp=0 | YCN9EFU,cp=0 |
场所码 | l8zPkX=!o0-7!o1xeod9T/8L4,cp=0 | YC8G8L4,cp=0 |
场所码 | l82A@Tw(RK4lb7ci(fd9M&3EFU,cp=0 | 2ZN9EFU,cp=0 |
场所码 | l81aKD,wfz!M@e*HS7z=Zw-EFU,cp=0 | MCN9EFU,cp=0 |
生成小程序码时,传入 scene 参数的限制是 “最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)”
。而 rawData 解码后的长度,有出现长度为 30 的,低于 32 ,理论上是承载不下完整的 scene,猜测是需要配合接口查询来完成数据还原,类似短网址还原。
如果希望生成的小程序码,在别的小程序也可以通过 scanCode 方法读取到信息,可以生成 scene 长度短于 8 位的码,然后截取后八位。如上表最后的四个场所码,如果去掉尾部的 ,cp=0
就可以通过任意小程序拿到场所码 ID 了。
当前微信还未开放第三方 App 扫小程序码的能力,这大概是目前 粤省事App 还不支持扫自家生成的场所码的原因吧 😂
即便后续在各方对推动下,微信开放该能力,估计对第三方 App 也会有诸多条件限制。
]]>故事以一张空白网页开场,程序员葛戈使用注释,介绍了前端工程师的工作内容。为了便于理解,程序员葛戈开始飙代码,实现了个简易代码编辑器和预览面板,然后是画 ❤️ 的过程。当然,最后少不了一阵表白。
七夕前一天晚上,截了个图发到知名墙外社区 V2ex 的程序员专区。有点担心这小把戏是不是有点 Too Naive ,毕竟是极客社区啊!!评论区出现的不友好回复似乎印证了想法。不过今天看了看数据,发现好像不完全是那么回事,且看分析:
首先看整体访问情况: 访问集中在七夕当天,上周访问总量 973
明细1: 通过单聊分享来源的访问人数 81,这个数字差不多反映的是被表白者访问量
明细2: 通过单聊分享来源的访问次数 156,可以看出,有不少重放的,大概是觉得有意思重新看一遍吧
明细3: 性别分布女 148,假定使用这个页面表白的都是男向女,那么 148(访问总数) - 81(通过单聊分享进入) = 67 ,大概是通过 V2ex 帖子进来的女访客。大致得出:V2 社区的程序员专区,对七夕话题感兴趣的女用户大概占比 67 / 973 约 7%
明细4: 这个是自己搭的统计平台收集的数据,URL 中的 scene 参数,是小程序的场景值。
先看第三行,scene=1011,代表的是 “扫描二维码” 进入该页面的访问数,“唯一浏览量” 288。和小程序数据统计 “we分析” ,通过 “线下扫码” 的访问人数 285 基本一致。
再看第六行,scene=1007,代表通过 “单人聊天会话中的小程序消息卡片” 进入页面,访问人数 78 和 “we分析” 的 81 也差不多。重点看 “平均停留时长” 00:02:05 ,结合表白动效播放时长 1分15秒,可以看出:被表白的妹子,除了看完完整过程,还停留了一些时间,大概是上划学习代码?😂 因为如果页面刷新重播,时长会重计,并且访问次数加一,归到明细2那里。
有些事情看似没有意义,去做了才能发现收获,不必带着目的去做每一件事。
透过数据分析可以看出,V2ex的用户分层其实跨度也挺大,老鸟有之,新手也不少。所以很多事情还是不能单凭自己的经历,想当然的以为别人对同一件事会抱有同样看法。
收获二:H5 页面套一层小程序的壳,就可以获取到比 web 更多维度的统计信息。
通过这件事,还认识到:对于不友善评论,也不能太过“佛系”,如果一直不回以颜色,有些人就误以为自己也可以往上堆一坨奥利给。意识到这一点后,多年前观摩骂战学会的三拳两腿算是派上了用场,而且成效明显 😁
口水白白流淌 板砖为谁乱放? via:网络慈父和菜头
]]>类似 PC 版 Chrome 的 F12 开发者工具,跨时空可以在网页加载时,注入 vConsole ,从而实现类似 Chrome dev Tools 一样的调试工具。
在调试工具中,你能看到 Network 网络请求,能看到 Cookie,能执行自己写 JS 代码,能看到本地存储,能查看页面的图片,能抓取页面 DOM 元素等等。定位生产问题时特别实用。
高能提示:其实这一招,可以在手机上用来调试别人的网页的啊!
1、开启开关后,打开任意网页
2、页面在右下角看到 vconsole 图标
3、点开,可以查看 Cookie 、网络请求抓包和页面元素
因为 github 使用了一些更严格的安全措施(CSP),很多通过脚本注入 js 的方法是不起作用的:
Refused to execute JavaScript URL because it violates the following Content Security Policy directive: "script-src assets-cdn.github.com". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
但是跨时空使由于在 webview 层注入 vConsole ,不受此限制。
如果需求呼声足够强烈,后续会考虑加入 Eruda 甚至自定义 js 库的注入配置。
你认为加入这些开发者专属的功能有必要吗?欢迎评论区留言或进群讨论~
]]>对于前端开发者,通过参数 --disable-web-security
启动桌面版 Chrome “跨域浏览器”模式,可以说是再熟悉不过的日常操作。
那么有没有可能在手机浏览器中也实现同样的效果?更好的是,能够同时支持安卓和苹果手机系统。好消息是,经过一个周末的努力,跨时空App 已支持这一特性。新版本近期提交审核,目前可安装苹果内测版(TestFlight)和安卓开发版本进行体验。
安全测试,生产问题排查,开发调试,后台管理系统,web小工具。
同源策略和SSL证书验证,无疑是实现浏览器安全的重要基石。犹如牛顿三定律之于现代物理学。提供此功能仅用于学习和方案可行性探索,使用即表示已知晓潜在风险,勿用于生产用途!
我们会跳转到 jsbox.kainy.cn 域下的代码调试页面,在这里可以方便的编辑想要执行的 js 语句,并查看运行结果。
通过截图左上方的代码可以看出,在这个页面发起两个请求,分别请求 URL https://gitee.com/robots.txt
和 https://httpbin.org/anything
,并将数据输出到左下方的控制台。
在截图右边,是我们熟悉的“开发者工具”。通过网络面板看到,https://gitee.com/robots.txt
请求被同源策略拦截了,而 https://httpbin.org/anything
请求由于设置了 CORS 允许,正常返回结果。这里说明一下, httpbin 是一个 HTTP Request & Response Service ,你可以向它发送请求,然后它会按照指定的规则返回响应,/anything
的意思是,返回 httpbin 服务器所接收到本次请求的所有信息。
再看截图左下角,只输出了 httpbin 返回的信息,而 gitee 的请求由于被拦截了,没有被输出。后续在 跨时空App 中访问,有输出 gitee 的信息,说明绕过同源策略成功。
为方便访问,将测试页 URL 生成如上二维码,使用 跨时空App 扫码访问。
在截图下半部分可以看到,两个接口请求都有返回信息。gitee 的请求返回内容和直接访问 https://gitee.com/robots.txt
读取的一致,你也可以修改成其他链接试试。修改后点击右上角“运行”按钮即可。
打开 https://badssl.com 链接,访问截图部分的链接即可验证。测试页列出了各种证书错误的场景,普通浏览器无法打开,而关闭证书校验的 跨时空App 则畅通无阻。
对于证书错误的网页,我们可以通过点击“仍然访问”,继续访问。但如果 cdn 域名证书或者接口域名证书错误,则需要一一访问域名,并点击“仍然访问”,这种情形下忽略证书报错就特别有用。
对于 webview 中跨域请求被拦截的问题,为了尽可能少影响到正常的请求,只有在检测到 webview 中跨域失败的情况时,才将请求参数传递给 App ,调用原生方法,发起 http 请求。原生方法不存在跨域限制,从而达到绕过限制的目的。在 跨时空App 中,识别原生请求也很容易,当页面中间出现若隐若现的菊花在转圈,说明是原生请求正在工作。
忽略证书错误则比较简单,直接改 webview 的初始化配置即可。
除了以上两个对于开发调试比较有用的特性外,跨时空还有不少基于自己的理解和使用习惯而做的改进。总的来说,跨时空浏览器就是基于最基础的 webview 做加法,将最常用的功能集成进来,改进原则是“足够用,尽量少”,从而确保没有非必要的功能和性能拖累。
举几个例子:
取消地址栏 —— 就我自己使用手机浏览器的情况来看,直接在地址栏编辑 URL 的时候少之又少。如果在电脑旁,直接通过桌面浏览器构建好,并访问确认,然后生成二维码,手机扫码会更高效;如果不在电脑边,一般也是复制出网址,到备忘录或其他 App 进行多行编辑,再粘贴回浏览器访问 —— 在单行地址栏里编辑总觉得束手束脚。基于这个使用习惯,跨时空将扫码按钮放在全局的右上角位置,以及长按桌面图标的菜单里,方便触达。同时,在 App 切换到前台时,解析剪贴板内容,如果是网址,则弹窗确认是否访问,同时提取网页信息展示。
网页信息预览弹窗 —— 通过扫码,或者剪贴板解析到网址,并不会直接通过 webview 打开网址,而是弹窗展示从 URL 落地页中解析出来的信息,如 URL 、网页标题、简介、缩略图。这样的好处是:在实际访问前,大致了解所访问网页的情况,毕竟肉眼几乎无法从二维码中识别到任何信息。另外,对于重定向的网址,也可以复制到原始链接,而不是跳转后的页面链接。
下载功能 —— webview 不自带下载功能,需要自己实现。跨时空的处理是:判断到下载操作后,提示确认是否唤起系统默认浏览器完成下载,因为下载功能的实现涉及网络和文件操作等流程,尤其是大文件下载,各种麻烦。这种低频,但又必须的功能,就交给系统自带浏览器来处理。
多标签页模式 —— 测试过程中发现安卓手机,webview 中通过 js 方法 window.open
打开新窗口时,在 onCreateWindow
中获取到的 URL 是 null 。解决方法是,启动一个无头 webview ,使用 onLoadStart
监听 URL 变化,非 “about:blank” 则为真实的 URL,这时候再启动主浏览进程。
此外 H5 中 App Scheme 链接的跳转,定位权限的获取,都需要自己实现,这里不多展开。
有更好建议,或者使用中遇到问题,都欢迎留言或加群讨论 😄
网上找到的一个方法,有兴趣可以试试。用到了 adb ,目测只支持安卓手机。
创建一个文件,编辑:
chromium-browser --disable-web-security --user-data-dir="/data/user/0/com.android.chrome/app_chrome/Default"
通过adb命令,将上述4步骤创建的文件推送到手机 /data/local/tmp目录下。
adb push 路径/chrome-command-line /data/local/tmp
浏览器访问 chrome://flags
,开启 enable-command-line-on-non-rooted-devices
设置。手动从设置里面强行停止应用后重新启动。
随后访问 chrome://version
,查看命令行,看是否出现命令:--disable-web-security
若出现则代表ok了。
带着这个问题,上网搜了一下,大致提供的解决方案有两种。
可以通过公众号的关联小程序功能,有个步骤就是通过AppID搜索小程序。在关联小程序时,输入AppID,搜索就可以看到小程序的具体名称了。如图:
微信小程序提供的这个接口,在2020年4月24日后,就完全放开支持打开任意的小程序了,而且不限制小程序的数量。
下面是具体的功能演示:
通过这个功能,你就可以看到小程序APPID对应的小程序名称是什么了,而且还可以直接打开小程序进行体验。
优缺点:
对于方法一来讲,首先你得有个公众号,但是不一定是谁都有的。
对于方法二来讲,首先你得会写代码,但不是谁都会写代码是吧。
所以,对于只是想要通过微信小程序APPID来查询对应小程序的运营、产品人员来讲,如果有个小程序提供这块的功能,那是再好不过的了。
正好,目前刚好有个小程序提供了这块的功能。这个小程序并不是我做的,觉得这个功能实现起来蛮简单的,用起来也简单,所以推荐给大家。
上面的这个小程序使用起来很简单,你只需要复制你需要查找的微信小程序APPID,它就会自动读取你的剪贴板并填入到输入框中,然后你点击查看按钮就可以了。
]]>