whisper语音转文字网页

在Chatgpt帮助下,搭建的whisper语音转录文字网页,只能实现小于25Mb单个文件的音频文件转文字,需要填入自己的OpenAI密钥。因为国内无法直接访问OpenAI的API,用之前cloudflare搭建的work进行了转发。

音频转录 / Audio Transcription (mstarpioneer.xyz)

代码比较简单,直接在原网页上查看html和对应的js文件链接即可。

最近还利用WordPress搭建了办公用导航网站nav.sida.fun;

利用Discuz3.5(宝塔一键安装)搭建了bbs站bbs.sida.fun

以及利用kodbox(可道云,宝塔一键安装)的网盘系统enfi.sida.fun/enfi.ecomine.tech

学会了给网站安装双域名。

北京冬季清晨

最近天气很好,天很蓝,没有雾霾。

早十分钟出门,可以去附近商场麦当劳吃早餐。办了一张月卡可以打折。

这几次都能碰到骑手聚在麦当劳,不知是闲聊还是互相交流工作。挺好奇他们在说些什么。

问ai:时间加权回报率和货币加权回报率的区别

时间加权回报率(Time-Weighted Rate of Return, TWRR)和货币加权回报率(Money-Weighted Rate of Return, MWRR,也称为内部收益率或IRR)是衡量投资表现的两种不同方法,它们各自对投资者的资金流动进行不同的处理。时间加权回报率(TWRR):- 时间加权回报率是一种衡量投资组合绩效的方法,它消除了投资者资金流入流出对回报率的影响。- TWRR将整个投资期间分成多个子期间,每个子期间的起点是资金的流入或流出发生后。- 每个子期间的回报率被计算出来,然后连乘以得到整个投资期间的综合回报率。- TWRR是一种更适合评估基金经理绩效的方法,因为它不考虑投资者的资金流动对绩效的影响。货币加权回报率(MWRR):- 货币加权回报率考虑了所有的现金流(投资和提取)及其时间点对整体回报的影响。- MWRR实际上是解决内部收益率(IRR)的问题,即在哪个折现率下,现金流入的现值等于现金流出的现值。- 这个方法对于个别投资者来说更有意义,因为它反映了实际的金钱增长,考虑了个人的资金投入和撤资行为对投资回报的影响。- MWRR可以被认为是投资者个人投资表现的真实指标,因为它反映了他们的资金投入时间和金额。两者的主要区别在于对投资者资金流动的处理方式。如果投资者在投资期间没有频繁的资金流动,那么TWRR和MWRR可能会给出相似的结果。但是,如果投资者在投资期间有大量资金的流入或流出,两者可能会有显著不同的结果。简单来说,如果你想评估一个基金经理的表现,不受投资者资金流动的影响,那么应该使用时间加权回报率。如果你想要评估你个人的投资表现,包括你何时投入或撤出资金的影响,那么应该使用货币加权回报率。

网站迁移成功

新购v.ps的荷兰大盘鸡,4核8g内存,比原来2核1g内存的入门级性能服务器好很多。

新服务器安装宝塔面板后,在旧vps使用一键迁移功能,选择要迁移的网站目录和数据库就可以了。然后改下dns解析的ip地址,就可以正常访问了。比其他方法方便很多。

在宝塔面板下,为docker部署的网页程序配置ssl

1 开启宝塔自带的面板ssl,获得宝塔的自签证书

2 在宝塔面板-网站选项中,填写ip+端口,新建网站。

3 在配置文件中,增加以下代码

  location / {
  proxy_pass http://127.0.0.1:端口号/;
  rewrite ^/(.*)$ /$1 break;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Upgrade-Insecure-Requests 1;
  proxy_set_header X-Forwarded-Proto https;
}

4 在配置中,注释掉前两个含有location的代码,防止冲突。

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{}
location ~ .*.(js|css)?$
{}

并注释掉以下代码
#禁止在证书验证目录放入敏感文件
if ( $uri ~ "^/.well-known/.*.(php|jsp|py|js|css|lua|ts|go|zip|tar.gz|rar|7z|sql|bak)$" ) {return 403;}

5 在配置文件下方的SSL中,选择证书夹,找到以ip命名的网站进行部署。部署后在当前证书选项卡中开启强制https

6 重启Nigx,然后访问ip地址(不加端口号)

VPS搭建VPN

刚刚接触ChatGPT的热情过后,开始考虑长期成本的问题

几个月前,为了能够注册账号,听了抖音上”赵哥说3D”的推荐,买了V.PS的VPS,从此入坑,目前的博客也是搭建在这台VPS上。开始用SSR搭建了VPN,第二天ip就被墙了,虽然一个星期后解锁了,但对此一直心有余悸。后来用便宜的Racknerd,利用X-UI搭建服务,几个月一直在稳定运行,因此又折腾试验了下其他VPS的效果。
先说V.PS,它的优点是访问速度快,我利用它搭建ChatGPT-On-NextWeb访问速度优于Azure北美服务器、Vercel的免费CDN代理,利用X-UI搭建的VPN用V2ray测速约25M/s。
缺点是价格高,34.95欧/半年的价格,只能买到1核1G内存20G硬盘,运行服务多了就容易崩,刚刚在写这篇博文时,为了测速,导致内存不够数据库报错文章无法保存。

此后是10美元一年的Racknerd,虽然便宜,但无法访问Openai、奈飞,因为超卖,晚高峰时会降速到0.1-0.2M/s,只能浏览网页。白天的时候,测速可以达到17M/s,此时可以看4K的YouTube。

NorthFlank(谷歌服务器)免费,只支持轻量级服务,我选的欧洲节点速度1~2M,可以搭建2个节点,但无法解锁奈飞和Openai

今天试了下阿里云、腾讯云在新加坡,还有Azure的West Europe地区VPS。

阿里云新加坡地区轻量云服务器2核2G40G硬盘30M带宽,3年864元,可以按月付费。可解锁奈飞,但无法访问Openai

腾讯云新加坡服务器,在与阿里云同等配置情况下,包年要1600,香港地区的服务器要稍微便宜些。如果只购买1核1G的新加坡服务器,按量付费每小时0.13元外加0.8元/G流量费用。但同样无法访问Openai

Azure注册后,有一年的免费使用期,可以选择美国中部和西欧的服务器,1核1G内存60G硬盘。延迟稍高,但速度快,且可解锁Openai、奈飞。感觉是新手建站和搭建VPN目前最好的选择了。

后面让谷歌Bard评价了下,因为政治原因,Openai封锁中国地区用户和相关公司,阿里云和腾讯云都在此列,而Racknerd可能由于门槛太低,且审核机制不够严格,也无法访问。Azure虽然是免费账户,但用户认证较为严格(需要绑定信用卡)。

问了下Bard便宜的服务器,回复说akkocloud,看了下介绍还可以,可以备用。

总结下来,用来访问Openai,不建议选择大陆运营商来搭建VPN;前期成本最低,最适合上手的是Azure可以同时实现搭建代理和建站的需求,唯一门槛是注册需要美元信用卡(不必是美国地址),另外azure openai的ChatGPT4.0的api接口已经开放,可以利用前一个月的200美元额度尽快体验。

ps:VPS对于大多数人仍然只是个纯粹的投入,所以降低长期成本只能将博客等放到国内,但又无法绕过审查等问题。最后贴一个VPS选购参考地址最近一年-IP地址归属地查询-全球小鸡监控平台 (ping0.cc)

【转】用Cloudflare Workers提供一个翻译API后端

本文有小的修改和细节说明,主要说明和代码的原文地址:

用Cloudflare Workers提供一个翻译API后端 – Minaduki’s Blog

地铁上班路上,刷到文章:使用Cloudflare Workers AI搭建一个翻译服务,搜索实践了下。

准备工作:

  • Cloudflare账号注册
  • 简约翻译(浏览器插件)
  • 注册域名(中国网络环境必选项)

主要步骤

前面两个链接的主要步骤已经写得很详细了,这里只简单补充。
  • Cloudflare主页-侧边栏AI(beta)-侧边栏Workers AI-Workers AI模板-翻译应用-部署-编辑代码-替换为以下代码(首行代码改为引用’./vendor/@cloudflare/ai.js’),右上角保存并部署
import { Ai } from './vendor/@cloudflare/ai.js';// 此处有小的变化
export default {
  async fetch(request, env) {

    /**
     * readRequestBody reads in the incoming request body
     * Use await readRequestBody(..) in an async function to get the string
     * @param {Request} request the incoming request to read from
     */
    async function readRequestBody(request) {
      const contentType = request.headers.get("content-type");
      const Authorization = request.headers.get("Authorization");
      const expected_token = env.BEARER_TOKEN;
      if (Authorization === `Bearer ${expected_token}`) {
        if (contentType.includes("application/json")) {
          return await request.json();
        } else {
          throw new Error("Request's content-type is not supported. Please use application/json.");
        }
      } else {
        throw new Error("Authentication failed. Please check your access token.");
      }
    }

    if (request.method === "POST") {
      try {
        const reqBody = await readRequestBody(request);

        const ai = new Ai(env.AI);
        const inputs = {
          text: reqBody['text'],
          source_lang: '',
          target_lang: 'chinese'
        };
        const response = await ai.run('@cf/meta/m2m100-1.2b', inputs);

        const translated_text = response['translated_text'];
        const ret = {
          text: translated_text,
          from: "", // 识别的源语言,Cloudflare目前似乎并不支持
          to: "zh-CN"
        };
        return Response.json(ret);

      } catch (e) {
        return new Response(e.message);
      }
    } else if (request.method === "GET") {
      return new Response("Please use POST.");
    }

  }
};
  • 复制下面的链接创建key,aip创建模板选择Workers AI (Beta):https://dash.cloudflare.com/profile/api-tokens
  • 点击左侧边栏选项》Workers 和 Pages,找到刚刚建立的项目点击,设置》变量》编辑变量。变量名称BEARER_TOKEN,值为上一步获取到的key
  • 浏览器打开简约翻译的配置页面,接口设置》Custom,URL处填入项目预览地址(格式为https:\\worker-xxx-xxxx-xxx.账号名.workers.dev\translate),还有key,点击测试。
  • 如在国内网络环境使用,回到Cloudflare刚刚的Workers 和 Page,点击项目名称》触发器》填入自定义域名(如DNS未在Cloudflare配置需要在域名服务商进行配置)

最终效果取决于访问的网页结构,翻译速度很快,但可能漏掉部分文字