Verne in GitHub
《负动产时代》读书笔记
《负动产时代》读书笔记
async function replace_response_text(response, upstream_domain, host_name) {
let text = await response.text()
var i, j;
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}
if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}
let re = new RegExp(i, 'g')
text = text.replace(re, j);
}
return text;
}
async function device_status(user_agent_info) {
var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
var flag = true;
for (var v = 0; v < agents.length; v++) {
if (user_agent_info.indexOf(agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
let text = await response.text()
var i, j;
for (i in replace_dict) {
j = replace_dict[i]
if (i == '$upstream') {
i = upstream_domain
} else if (i == '$custom_domain') {
i = host_name
}
if (j == '$upstream') {
j = upstream_domain
} else if (j == '$custom_domain') {
j = host_name
}
let re = new RegExp(i, 'g')
text = text.replace(re, j);
}
return text;
}
async function device_status(user_agent_info) {
var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
var flag = true;
for (var v = 0; v < agents.length; v++) {
if (user_agent_info.indexOf(agents[v]) > 0) {
flag = false;
break;
}
}
return flag;
}
// Website you intended to retrieve for users.
const upstream = 'api.openai.com'
// Custom pathname for the upstream website.
const upstream_path = '/'
// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = upstream
// Countries and regions where you wish to suspend your service.
const blocked_region = []
// IP addresses which you wish to block from using your service.
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
// Whether to use HTTPS protocol for upstream address.
const https = true
// Whether to disable cache.
const disable_cache = false
// Replace texts.
const replace_dict = {
'$upstream': '$custom_domain',
}
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
})
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');
let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;
if (https == true) {
url.protocol = 'https:';
} else {
url.protocol = 'http:';
}
if (await device_status(user_agent)) {
var upstream_domain = upstream;
} else {
var upstream_domain = upstream_mobile;
}
url.host = upstream_domain;
if (url.pathname == '/') {
url.pathname = upstream_path;
} else {
url.pathname = upstream_path + url.pathname;
}
if (blocked_region.includes(region)) {
response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
status: 403
});
} else if (blocked_ip_address.includes(ip_address)) {
response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
status: 403
});
} else {
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + url_hostname);
let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers,
body: request.body
})
connection_upgrade = new_request_headers.get("Upgrade");
if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") {
return original_response;
}
let original_response_clone = original_response.clone();
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;
if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}
new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');
if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}
const content_type = new_response_headers.get('content-type');
if (content_type != null && content_type.includes('text/html') && content_type.includes('UTF-8')) {
original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname);
} else {
original_text = original_response_clone.body
}
response = new Response(original_text, {
status,
headers: new_response_headers
})
}
return response;
}
const upstream = 'api.openai.com'
// Custom pathname for the upstream website.
const upstream_path = '/'
// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = upstream
// Countries and regions where you wish to suspend your service.
const blocked_region = []
// IP addresses which you wish to block from using your service.
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
// Whether to use HTTPS protocol for upstream address.
const https = true
// Whether to disable cache.
const disable_cache = false
// Replace texts.
const replace_dict = {
'$upstream': '$custom_domain',
}
addEventListener('fetch', event => {
event.respondWith(fetchAndApply(event.request));
})
async function fetchAndApply(request) {
const region = request.headers.get('cf-ipcountry').toUpperCase();
const ip_address = request.headers.get('cf-connecting-ip');
const user_agent = request.headers.get('user-agent');
let response = null;
let url = new URL(request.url);
let url_hostname = url.hostname;
if (https == true) {
url.protocol = 'https:';
} else {
url.protocol = 'http:';
}
if (await device_status(user_agent)) {
var upstream_domain = upstream;
} else {
var upstream_domain = upstream_mobile;
}
url.host = upstream_domain;
if (url.pathname == '/') {
url.pathname = upstream_path;
} else {
url.pathname = upstream_path + url.pathname;
}
if (blocked_region.includes(region)) {
response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
status: 403
});
} else if (blocked_ip_address.includes(ip_address)) {
response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
status: 403
});
} else {
let method = request.method;
let request_headers = request.headers;
let new_request_headers = new Headers(request_headers);
new_request_headers.set('Host', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + url_hostname);
let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers,
body: request.body
})
connection_upgrade = new_request_headers.get("Upgrade");
if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") {
return original_response;
}
let original_response_clone = original_response.clone();
let original_text = null;
let response_headers = original_response.headers;
let new_response_headers = new Headers(response_headers);
let status = original_response.status;
if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}
new_response_headers.set('access-control-allow-origin', '*');
new_response_headers.set('access-control-allow-credentials', true);
new_response_headers.delete('content-security-policy');
new_response_headers.delete('content-security-policy-report-only');
new_response_headers.delete('clear-site-data');
if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}
const content_type = new_response_headers.get('content-type');
if (content_type != null && content_type.includes('text/html') && content_type.includes('UTF-8')) {
original_text = await replace_response_text(original_response_clone, upstream_domain, url_hostname);
} else {
original_text = original_response_clone.body
}
response = new Response(original_text, {
status,
headers: new_response_headers
})
}
return response;
}
▎feed2toot
好用的 Mastodon #RSS 订阅机器人,推荐使用 linuxserver/feed2toot 的 #Docker 镜像进行部署
项目地址|项目文档
频道 @dejavuBlog
群组 @dejavuGroup
Verne in GitHub
Go 语言编写的 BaaS:PocketBase 简单介绍
Go 语言编写的 BaaS:PocketBase 简单介绍
近来阅读工具的变化:
1. RSS 阅读:Reader by Readwise 取代了 Inoreader + Reeder 的组合 — Reader 的 RSS 阅读设计很有意思,把所有新文章归类到新文章下,不再对文章来源做明显区分。阅读时的高亮会自动同步到 Readwise 里,方便之后回顾。
2. 稍后阅读:Reader by Readwise 取代了 Goodlinks — 原来看到长文章,会随手存到 Goodlinks 里,打上标签,然后有时间再阅读。现在都是直接存到 Reader 的 inbox 里。
3. 新文章发现:Refind + Twitter 取代了 Matter — Refind 是近来发现的一款新工具,非常好用;重新捡起 Twitter app 之后,发现首页的 For You 推荐做得非常不错。
1. RSS 阅读:Reader by Readwise 取代了 Inoreader + Reeder 的组合 — Reader 的 RSS 阅读设计很有意思,把所有新文章归类到新文章下,不再对文章来源做明显区分。阅读时的高亮会自动同步到 Readwise 里,方便之后回顾。
2. 稍后阅读:Reader by Readwise 取代了 Goodlinks — 原来看到长文章,会随手存到 Goodlinks 里,打上标签,然后有时间再阅读。现在都是直接存到 Reader 的 inbox 里。
3. 新文章发现:Refind + Twitter 取代了 Matter — Refind 是近来发现的一款新工具,非常好用;重新捡起 Twitter app 之后,发现首页的 For You 推荐做得非常不错。
一键在本地跑类似 ChatGPT 的方案来了!
LLaMA 是 Meta 开源的大语言模型。过去的这个周末里,现有人用 c语言做了重新封装,这样在单机上就能跑起来。昨天又有人做了 js 封装,通过 npm 就能一键下载安装!
真的是 NLP 的未来已来!
https://t.me/dps_build/56
LLaMA 是 Meta 开源的大语言模型。过去的这个周末里,现有人用 c语言做了重新封装,这样在单机上就能跑起来。昨天又有人做了 js 封装,通过 npm 就能一键下载安装!
真的是 NLP 的未来已来!
https://t.me/dps_build/56
[2023-03-12] V2ex 最热 37条
Android
iPhone 用户想试试 Android 机求推荐
Apple
出境后感觉就没机会线下使用银联 apple pay 了
Google
Google one 的最便宜套餐也支持 Google one VPN 了
NAS
2023 年的今天,网盘还是 NAS?
家用服务器从 KVM 转到了 ESXi
分享创造
分享一个 Flutter 做的 APP
通知滤盒 FilterBox 新功能:纯 Android 端的机器学习过滤(送码)
分享发现
阿里很多的 app 更新和他的大厂定位完全不符----比如阿里云
没人发现每日签到没了吗?
从"扫码登录"来看互联网大厂的商业思维, 前腾讯阿里员工如是分析
宽带症候群
PT 之路:存储和做种机的分离
Windows 远控软件求推荐
怎么判断机场节点是不是真专线?
内地移动号漫游 hk,谷歌可用?
程序员
4t 冷备份数据,用什么介质好一点?
自建文件服务器有哪些选择?
apple 芯片的 windows11 虚拟机里可以安装 adobe 吗
有没有使用 JetBrains Gateway 开发的聊聊最佳使用实践
Chrome 插件需求调查
微服务的意义是什么?例如获取商品信息或者处理支付的服务挂了整个商城不照样用不了
分享: Zed 编辑器邀请链接
PVE 有性能损耗, 想装 exsi 测试, 不知道最新的安装包哪里可以下载?
非常严肃认真地问一个医学问题,大家会 YJ 吗
站长
打算托管一台 1U 服务器到香港机房
职场话题
成都找工作也太卷了吧
酷工作
佐玩 Zolplay 招前端工程师,全远程+异步办公
问与答
因为结婚的问题差点和父亲动手了
求推荐一款三四千左右的电动自行车
自学转码的程序员,现在想深入了解下网络相关知识,求指条明路
物理学本科生要不要转修计算机?请大佬们给点意见
V 友们,自己装了个机,但是双内存条只有插 34 通道,才能点亮,故障比较难排查
Q: 关于数据库管理的软件有什么好的推荐
4K 显示器能做到四点合一?
求推荐一个给父母用的电脑配置单
今天学了个新词: 诘问, 有多少人知道它的意思?
emby 公益服| Mulgore-莫高雷 开服啦!
随想
现在这个时代真方便
Android
iPhone 用户想试试 Android 机求推荐
Apple
出境后感觉就没机会线下使用银联 apple pay 了
Google one 的最便宜套餐也支持 Google one VPN 了
NAS
2023 年的今天,网盘还是 NAS?
家用服务器从 KVM 转到了 ESXi
分享创造
分享一个 Flutter 做的 APP
通知滤盒 FilterBox 新功能:纯 Android 端的机器学习过滤(送码)
分享发现
阿里很多的 app 更新和他的大厂定位完全不符----比如阿里云
没人发现每日签到没了吗?
从"扫码登录"来看互联网大厂的商业思维, 前腾讯阿里员工如是分析
宽带症候群
PT 之路:存储和做种机的分离
Windows 远控软件求推荐
怎么判断机场节点是不是真专线?
内地移动号漫游 hk,谷歌可用?
程序员
4t 冷备份数据,用什么介质好一点?
自建文件服务器有哪些选择?
apple 芯片的 windows11 虚拟机里可以安装 adobe 吗
有没有使用 JetBrains Gateway 开发的聊聊最佳使用实践
Chrome 插件需求调查
微服务的意义是什么?例如获取商品信息或者处理支付的服务挂了整个商城不照样用不了
分享: Zed 编辑器邀请链接
PVE 有性能损耗, 想装 exsi 测试, 不知道最新的安装包哪里可以下载?
非常严肃认真地问一个医学问题,大家会 YJ 吗
站长
打算托管一台 1U 服务器到香港机房
职场话题
成都找工作也太卷了吧
酷工作
佐玩 Zolplay 招前端工程师,全远程+异步办公
问与答
因为结婚的问题差点和父亲动手了
求推荐一款三四千左右的电动自行车
自学转码的程序员,现在想深入了解下网络相关知识,求指条明路
物理学本科生要不要转修计算机?请大佬们给点意见
V 友们,自己装了个机,但是双内存条只有插 34 通道,才能点亮,故障比较难排查
Q: 关于数据库管理的软件有什么好的推荐
4K 显示器能做到四点合一?
求推荐一个给父母用的电脑配置单
今天学了个新词: 诘问, 有多少人知道它的意思?
emby 公益服| Mulgore-莫高雷 开服啦!
随想
现在这个时代真方便
docker run -e BOT_TOKEN="6105200000:AAHDR2NHAi66cgExoyQ-tAz_xxxxxxccxc" -e CHAT_ID="206288688" -e MEMO_API="https://memo.xxxxx.cc/api/memo?openId=2aaxxxd-9f4e-441a-xxxx-xxxxxx1234" -d --name tgmemobot fwing/tgmemobot
[2023-03-11] V2ex 最热 36条
Android
有一说一,小米 12s 的手感真是棒啊,摸过之后真的犹豫要不要买米 13 了
iPhone
纯吐槽: iPhone OTA 升级系统把我电话通话记录清空了
你们有没有感觉 iPhone 双卡开着网络信号比较单卡差很多
Java
springboot 中 mapper 查询操作返回指定的字段时,总是报错
macOS
edge 浏览器在 Mac 上堪称流氓软件
NAS
新装修,弱电柜和机柜如何设计?
买了块希捷银河 x16 16T 的硬盘,装到 nas 上好吵啊......
OpenAI
为啥我总有一种被 AI 忽悠的感觉?
搭建 ChatGPT 私有代理最简单的办法!
Python
请教两个小问题
分享创造
我开发的微信小程序「恋上古诗词」上线了,还请帮忙多提些意见
分享发现
做了一款文字节点的密室逃脱小游戏
微软 New Bing 秒过,无需等待⌛️
我的 C 盘被 QQ 拼音输入法占了 27 个 G!
Gmail 邮箱申请 NewBing 秒批,只有 outlook 邮箱受伤的世界达成
宽带症候群
电信换光猫,原设备参数给光猫卖家有风险吗?
深圳
深圳宽带有什么推荐,科学为主
生活
我该如何选择下半生
我的 17 岁
2023 年往后 5 年会沿着 2015 的节奏发展吗
由“文身女孩”讨论帖想到的 Bayes 经验
程序员
今天一早的搜索,终于对同步、异步、阻塞、非阻塞、中断、轮询、多线程,协程这几个概念有了理解
oled 相比 lcd 优点到底在哪里?看久一点眼睛就痛,还会烧屏,为什么这么多厂商爱用?
发现可以在 metamask 上直接用信用卡买 crypto 了
求助一个高并发的数据校验与保存问题
一般实际开发中,后端 API 服务器 & 文件服务器是分开的吗?
近在咫尺,却无法分享文件,这个苦恼怎么解决?
职场话题
熬不住了,想辞职了
Android 开发为什么需要苹果电脑?
问与答
堂食吃出异物,大家会怎么处理?
怎么简单地以 https 形式共享一个文本配置.
JS / TS 是不是全栈语言?
请问各位大佬,这 2 款显示器该怎么选?
改进人工降雨问题的提问方式
如果 ZF 能操控城市的天气,那么周末下雨对他们有什么好处?
有没有党员同志啊?感觉现在党费好高啊?感觉是一种经济负担。
Android
有一说一,小米 12s 的手感真是棒啊,摸过之后真的犹豫要不要买米 13 了
iPhone
纯吐槽: iPhone OTA 升级系统把我电话通话记录清空了
你们有没有感觉 iPhone 双卡开着网络信号比较单卡差很多
Java
springboot 中 mapper 查询操作返回指定的字段时,总是报错
macOS
edge 浏览器在 Mac 上堪称流氓软件
NAS
新装修,弱电柜和机柜如何设计?
买了块希捷银河 x16 16T 的硬盘,装到 nas 上好吵啊......
OpenAI
为啥我总有一种被 AI 忽悠的感觉?
搭建 ChatGPT 私有代理最简单的办法!
Python
请教两个小问题
分享创造
我开发的微信小程序「恋上古诗词」上线了,还请帮忙多提些意见
分享发现
做了一款文字节点的密室逃脱小游戏
微软 New Bing 秒过,无需等待⌛️
我的 C 盘被 QQ 拼音输入法占了 27 个 G!
Gmail 邮箱申请 NewBing 秒批,只有 outlook 邮箱受伤的世界达成
宽带症候群
电信换光猫,原设备参数给光猫卖家有风险吗?
深圳
深圳宽带有什么推荐,科学为主
生活
我该如何选择下半生
我的 17 岁
2023 年往后 5 年会沿着 2015 的节奏发展吗
由“文身女孩”讨论帖想到的 Bayes 经验
程序员
今天一早的搜索,终于对同步、异步、阻塞、非阻塞、中断、轮询、多线程,协程这几个概念有了理解
oled 相比 lcd 优点到底在哪里?看久一点眼睛就痛,还会烧屏,为什么这么多厂商爱用?
发现可以在 metamask 上直接用信用卡买 crypto 了
求助一个高并发的数据校验与保存问题
一般实际开发中,后端 API 服务器 & 文件服务器是分开的吗?
近在咫尺,却无法分享文件,这个苦恼怎么解决?
职场话题
熬不住了,想辞职了
Android 开发为什么需要苹果电脑?
问与答
堂食吃出异物,大家会怎么处理?
怎么简单地以 https 形式共享一个文本配置.
JS / TS 是不是全栈语言?
请问各位大佬,这 2 款显示器该怎么选?
改进人工降雨问题的提问方式
如果 ZF 能操控城市的天气,那么周末下雨对他们有什么好处?
有没有党员同志啊?感觉现在党费好高啊?感觉是一种经济负担。