使用TabbyML/tabby在本地部署一个类github copilot

刚好自己的 github copilot 过期了,就逛了下 github,发现了一个有趣的仓库 tabby,它的描述瞬间吸引了我哈哈:

Tabby is a self-hosted AI coding assistant, offering an open-source and on-premises alternative to GitHub Copilot. It boasts several key features:

Self-contained, with no need for a DBMS or cloud service.
OpenAPI interface, easy to integrate with existing infrastructure (e.g Cloud IDE).
Supports consumer-grade GPUs.

逛了下官网,发现可以在 Apple M1/M2 芯片的电脑上本地安装和使用,所以试了下,这里记录下。

阅读全文

rust学习有感-2

上一篇已经学习到了第五章 rust 结构体,看了下教程共有 20 章,继续学吧。。 枚举和模式匹配 枚举定义 12345678910111213141516171819202122232425262728293031323334enum ipAddrKind { v4, v6,}#[derive(Debug)]enum Message...

阅读全文

rust学习有感-1

前端都已经这么卷了,现在要往“锈化“卷了。当然这是玩笑话,毕竟目前锈化的只有一些前端基础工具而已。
但是结合工作实际,学习Rust也是有必要的,比如现在正在完善的云函数运行时服务,采用 nodejs + isolated-vm 的实现形式,
受限于 node 本身的性能限制,还有 isolated-vm 与底层 v8 通信的性能损失等。
一些开源库已经迁移到基于 rust 封装的v8了,所以顺便学习下 rust。

现在除了学校里学过的静态编译型语言(C\C++\Java),基于这些知识,学习 rust 应该很简单吧。(哈哈,等着后面打脸)。

主要记录一些学习过程中记忆深刻的点。

PS:

阅读全文

mytoolbox - 有趣的想法之实现一个粘贴板历史管理工具

windows 上好像已经有了自带的粘贴板历史工具,但是 mac 上没有自带的。之前一直在使用一个叫 pastebot 的工具,后面不支持 mac 新系统了(我的是 13.2.1),然后又找到一个叫 Paste 的工具,但是是收费的。
我觉得这种软件实现起来应该很简单吧,所以不如动手自己做一个。

技术选型

考虑到主要是桌面端使用,首先想到的就是 Electron 了,之前也做过相关开发,对 web 前端开发者算是很友好了。但是总觉得 Electron 实现的效果不够优雅(总觉得太像网页了哈哈)。
想了一下,最终选择了 Flutter,可以同时支持桌面端和移动端(因为我后面还想做一些小工具,比如私人GPT小助手,想支持跨端)。
哈哈,我的想法可太多了。

阅读全文

v8中isolate和context的关系

问题

一个 isolate 是否可以创建多个 context ?
如果可以,那这多个context是否会互相影响?是否会存在全局变量污染?

背景

其实问题的真正背景是在做云函数运行时的性能优化时提出来的。所以主要是 nodejs 环境,使用的库是 (isolated-vm)[https://github.com/laverdet/isolated-vm],底层使用的就是 v8 运行时,所以初步调研了一下。

isolate

isolate 是 v8 实例的概念。一般情况下,isolated 和 线程(threads)是 1:1 的关系,一个 isolate 与主线程(main thread)相关联,一个 isolate 也可以与工作线程相关联(worker thread)。

context

context(上下文)是 V8 中全局变量作用域的概念。粗略地说,一个 window 对象对应一个 context。例如,iframe 具有与其 parent 的 window 不同的 window 对象。因此 iframe 的 context 与 parent iframe 的 context 不同。由于这些 context 创建自己的全局变量 scope ,因此 iframe 的全局变量和原型链与 parent iframe 的全局变量和原型链是隔离的。

阅读全文

jest中使用msw(Mock Service Worker)

背景

在写单元测试的时候,经常会遇到需要mock请求响应内容,如果用传统的mock方式,比如mock fetch等,会比较繁琐。有没有类似于可以提供一个后端server的能力,使得请求时可以无感知而且也不需要手动patch一些依赖等。

msw(Mock Service Worker)就提供了这个能力,Service Worker扮演的角色其实就很类似于一个Backend Server。所以,在浏览器端,可以很自然的利用浏览器标准的Service Worker API来拦截网络请求,有现成的为啥不用呢?

即使在nodejs端,虽然没有Service Worker的概念,但是msw也是基本抹平了使用上的差异,刚好手头有个node项目需要在单测中mock网络请求,下面简单记录下msw的使用方式。

阅读全文

jest单元测试中如何mock模块

问题背景

在给一个nodejs express项目写jest单元测试的过程中,发现有些依赖在单元测试代码中会报错,原因是某些配置没有加载,当然在正常的运行中肯定是ok的,只有在单元测试中会出现。然而这些配置的加载逻辑是在所依赖的框架内部写的,而且有些配置是线上获取的配置,只有在内网环境才能获取到。所以问题就来了,怎么在jest中mock这个依赖(的配置加载逻辑)?

阅读全文

nodejs中 的 AsyncLocalStorage

开门见山:什么是 AsyncLocalStorage

根据 Node.js 官方文档:”This class is used to create asynchronous state within callbacks and promise chains. It allows storing data throughout the lifetime of a web request or any other asynchronous duration. It is similar to thread-local storage in other languages.”,

为了进一步简化解释,AsyncLocalStorage 允许你在执行异步函数时存储状态,然后使其可用于该函数中的所有代码路径。

阅读全文

如何通过 SSH 在服务器上远程执行命令

背景

最近买了一个腾讯云服务器,主要用来托管个人项目,经常执行的操作是ssh登陆到服务器,然后执行某些命令。这里有两个步骤:

  1. 打开ssh登陆软件,然后登陆到服务器
  2. 执行相关命令
  3. 关闭连接

那有没有办法一气呵成呢?一个命令完成这两个操作,查了下资料,当然可以:

1
ssh -t username@host 'commands'

比如我想看下 root 目录有哪些文件:

1
ssh -i ~/.ssh/tencent_ecs root@example.com "ls -a; echo \"done\""

阅读全文

使用peerjs实现一个基于webrtc的简单远程网络摄像头

仓库地址:https://github.com/lilong7676/cue-live技术栈:nextjs + webrtc

阅读全文