-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
42 lines (39 loc) · 20.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!DOCTYPE html><html lang="zh"><head><meta name="generator" content="Hexo 3.8.0"><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="FE,iOSer"><title>费默 - 分享 | Just run.</title><link rel="stylesheet" type="text/css" href="/css/style.css?v=1.0.0"><link rel="stylesheet" type="text/css" href="//lib.baomitu.com/normalize/latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//lib.baomitu.com/pure/latest/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//lib.baomitu.com/pure/latest/grids-responsive-min.min.css"><link rel="stylesheet" href="//lib.baomitu.com/font-awesome/4.7.0/css/font-awesome.min.css"><script type="text/javascript" src="//lib.baomitu.com/jquery/latest/jquery.min.js"></script><link rel="icon" mask sizes="any" href="/favicon.ico"><link rel="Shortcut Icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon-precomposed" href="/apple-touch-icon.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//lib.baomitu.com/clipboard.js/latest/clipboard.min.js"></script><script type="text/javascript" src="//lib.baomitu.com/toastr.js/latest/toastr.min.js"></script><link rel="stylesheet" href="//lib.baomitu.com/toastr.js/latest/toastr.min.css"></head><body><div class="body_container"><div id="header"><div class="site-name"><h1 class="hidden">费默 - 分享</h1><a id="logo" href="/.">费默 - 分享</a><p class="description">Just run.</p></div><div id="nav-menu"><a class="current" href="/."><i class="fa fa-home"> 首页</i></a><a href="/archives/"><i class="fa fa-archive"> 归档</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title"><a href="/2024/01/11/GPT/使用TabbyML-tabby在本地部署一个类github-copilot/">使用TabbyML/tabby在本地部署一个类github copilot</a></h1><div class="post-meta">2024-01-11</div><div class="post-content"><p>刚好自己的 github copilot 过期了,就逛了下 github,发现了一个有趣的仓库 <a href="https://github.com/TabbyML/tabby" target="_blank" rel="noopener">tabby</a>,它的描述瞬间吸引了我哈哈:</p>
<blockquote>
<p>Tabby is a self-hosted AI coding assistant, offering an open-source and on-premises alternative to GitHub Copilot. It boasts several key features:</p>
</blockquote>
<blockquote>
<p>Self-contained, with no need for a DBMS or cloud service.<br>OpenAPI interface, easy to integrate with existing infrastructure (e.g Cloud IDE).<br>Supports consumer-grade GPUs. </p>
</blockquote>
<p>逛了下官网,发现可以在 Apple M1/M2 芯片的电脑上本地安装和使用,所以试了下,这里记录下。</p></div><p class="readmore"><a href="/2024/01/11/GPT/使用TabbyML-tabby在本地部署一个类github-copilot/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/12/28/rust/rust学习有感-2/">rust学习有感-2</a></h1><div class="post-meta">2023-12-28</div><div class="post-content">上一篇已经学习到了第五章 rust 结构体,看了下教程共有 20 章,继续学吧。。
枚举和模式匹配
枚举定义
12345678910111213141516171819202122232425262728293031323334enum ipAddrKind { v4, v6,}#[derive(Debug)]enum Message...</div><p class="readmore"><a href="/2023/12/28/rust/rust学习有感-2/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/12/20/rust/rust学习有感-1/">rust学习有感-1</a></h1><div class="post-meta">2023-12-20</div><div class="post-content"><p>前端都已经这么卷了,现在要往“锈化“卷了。当然这是玩笑话,毕竟目前锈化的只有一些前端基础工具而已。<br>但是结合工作实际,学习Rust也是有必要的,比如现在正在完善的云函数运行时服务,采用 nodejs + isolated-vm 的实现形式,<br>受限于 node 本身的性能限制,还有 isolated-vm 与底层 v8 通信的性能损失等。<br>一些开源库已经迁移到基于 rust 封装的v8了,所以顺便学习下 rust。</p>
<p>现在除了学校里学过的静态编译型语言(C\C++\Java),基于这些知识,学习 rust 应该很简单吧。(哈哈,等着后面打脸)。</p>
<p>主要记录一些学习过程中记忆深刻的点。</p>
<p>PS: </p>
<ul>
<li>学习网站<a href="https://kaisery.github.io/trpl-zh-cn" target="_blank" rel="noopener">Rust 程序设计语言 简体中文版</a></li>
<li>很有意思的rust学习网站<a href="https://github.com/rust-lang/rustlings/tree/rustlings-1?tab=readme-ov-file" target="_blank" rel="noopener">rustlings</a></li>
</ul></div><p class="readmore"><a href="/2023/12/20/rust/rust学习有感-1/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/11/21/flutter/mytoolbox-有趣的想法之实现一个粘贴板历史管理工具/">mytoolbox - 有趣的想法之实现一个粘贴板历史管理工具</a></h1><div class="post-meta">2023-11-21</div><div class="post-content"><p>windows 上好像已经有了自带的粘贴板历史工具,但是 mac 上没有自带的。之前一直在使用一个叫 pastebot 的工具,后面不支持 mac 新系统了(我的是 13.2.1),然后又找到一个叫 Paste 的工具,但是是收费的。<br>我觉得这种软件实现起来应该很简单吧,所以不如动手自己做一个。</p>
<h2 id="技术选型"><a href="#技术选型" class="headerlink" title="技术选型"></a>技术选型</h2><p>考虑到主要是桌面端使用,首先想到的就是 Electron 了,之前也做过相关开发,对 web 前端开发者算是很友好了。但是总觉得 Electron 实现的效果不够优雅(总觉得太像网页了哈哈)。<br>想了一下,最终选择了 Flutter,可以同时支持桌面端和移动端(因为我后面还想做一些小工具,比如私人GPT小助手,想支持跨端)。<br>哈哈,我的想法可太多了。</p></div><p class="readmore"><a href="/2023/11/21/flutter/mytoolbox-有趣的想法之实现一个粘贴板历史管理工具/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/10/27/uncategorized/v8中isolate和context的关系/">v8中isolate和context的关系</a></h1><div class="post-meta">2023-10-27</div><div class="post-content"><h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><p>一个 isolate 是否可以创建多个 context ?<br>如果可以,那这多个context是否会互相影响?是否会存在全局变量污染? </p>
<h3 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h3><p>其实问题的真正背景是在做云函数运行时的性能优化时提出来的。所以主要是 nodejs 环境,使用的库是 (isolated-vm)[<a href="https://github.com/laverdet/isolated-vm],底层使用的就是" target="_blank" rel="noopener">https://github.com/laverdet/isolated-vm],底层使用的就是</a> v8 运行时,所以初步调研了一下。</p>
<h4 id="isolate"><a href="#isolate" class="headerlink" title="isolate"></a>isolate</h4><p>isolate 是 v8 实例的概念。一般情况下,isolated 和 线程(threads)是 1:1 的关系,一个 isolate 与主线程(main thread)相关联,一个 isolate 也可以与工作线程相关联(worker thread)。</p>
<h4 id="context"><a href="#context" class="headerlink" title="context"></a>context</h4><p>context(上下文)是 V8 中全局变量作用域的概念。粗略地说,一个 window 对象对应一个 context。例如,iframe 具有与其 parent 的 window 不同的 window 对象。因此 iframe 的 context 与 parent iframe 的 context 不同。由于这些 context 创建自己的全局变量 scope ,因此 iframe 的全局变量和原型链与 parent iframe 的全局变量和原型链是隔离的。</p></div><p class="readmore"><a href="/2023/10/27/uncategorized/v8中isolate和context的关系/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/10/26/uncategorized/jest中使用msw(Mock-Service-Worker)/">jest中使用msw(Mock Service Worker)</a></h1><div class="post-meta">2023-10-26</div><div class="post-content"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>在写单元测试的时候,经常会遇到需要mock请求响应内容,如果用传统的mock方式,比如mock fetch等,会比较繁琐。有没有类似于可以提供一个后端server的能力,使得请求时可以无感知而且也不需要手动patch一些依赖等。</p>
<p>msw(Mock Service Worker)就提供了这个能力,<a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers" target="_blank" rel="noopener">Service Worker</a>扮演的角色其实就很类似于一个Backend Server。所以,在浏览器端,可以很自然的利用浏览器标准的Service Worker API来拦截网络请求,有现成的为啥不用呢?</p>
<p>即使在nodejs端,虽然没有Service Worker的概念,但是msw也是基本抹平了使用上的差异,刚好手头有个node项目需要在单测中mock网络请求,下面简单记录下msw的使用方式。</p></div><p class="readmore"><a href="/2023/10/26/uncategorized/jest中使用msw(Mock-Service-Worker)/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/10/23/javascript/jest单元测试中如何mock模块/">jest单元测试中如何mock模块</a></h1><div class="post-meta">2023-10-23</div><div class="post-content"><h3 id="问题背景"><a href="#问题背景" class="headerlink" title="问题背景"></a>问题背景</h3><blockquote>
<p>在给一个nodejs express项目写jest单元测试的过程中,发现有些依赖在单元测试代码中会报错,原因是某些配置没有加载,当然在正常的运行中肯定是ok的,只有在单元测试中会出现。然而这些配置的加载逻辑是在所依赖的框架内部写的,而且有些配置是线上获取的配置,只有在内网环境才能获取到。所以问题就来了,怎么在jest中mock这个依赖(的配置加载逻辑)?</p>
</blockquote></div><p class="readmore"><a href="/2023/10/23/javascript/jest单元测试中如何mock模块/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/07/21/javascript/nodejs中的-AsyncLocalStorage/">nodejs中 的 AsyncLocalStorage</a></h1><div class="post-meta">2023-07-21</div><div class="post-content"><h2 id="开门见山:什么是-AsyncLocalStorage"><a href="#开门见山:什么是-AsyncLocalStorage" class="headerlink" title="开门见山:什么是 AsyncLocalStorage"></a>开门见山:什么是 AsyncLocalStorage</h2><p>根据 Node.js <a href="https://nodejs.org/docs/latest-v14.x/api/async_hooks.html#async_hooks_class_asynclocalstorage" target="_blank" rel="noopener">官方文档</a>:”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.”,</p>
<p>为了进一步简化解释,AsyncLocalStorage 允许你在执行异步函数时存储状态,然后使其可用于该函数中的所有代码路径。</p></div><p class="readmore"><a href="/2023/07/21/javascript/nodejs中的-AsyncLocalStorage/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/03/14/Shell脚本/如何通过-SSH-在服务器上远程执行命令/">如何通过 SSH 在服务器上远程执行命令</a></h1><div class="post-meta">2023-03-14</div><div class="post-content"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>最近买了一个腾讯云服务器,主要用来托管个人项目,经常执行的操作是ssh登陆到服务器,然后执行某些命令。这里有两个步骤: </p>
<ol>
<li>打开ssh登陆软件,然后登陆到服务器</li>
<li>执行相关命令</li>
<li>关闭连接</li>
</ol>
<p>那有没有办法一气呵成呢?一个命令完成这两个操作,查了下资料,当然可以:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -t username@host <span class="string">'commands'</span></span><br></pre></td></tr></table></figure>
<p>比如我想看下 root 目录有哪些文件:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh -i ~/.ssh/tencent_ecs [email protected] <span class="string">"ls -a; echo \"done\""</span></span><br></pre></td></tr></table></figure>
<p><img src="https://lilong7676-picture.oss-cn-hangzhou.aliyuncs.com/img/20230314105027.png?x-oss-process=image/resize,w_800" alt></p></div><p class="readmore"><a href="/2023/03/14/Shell脚本/如何通过-SSH-在服务器上远程执行命令/">阅读全文</a></p></div><div class="post"><h1 class="post-title"><a href="/2023/03/03/uncategorized/使用peerjs实现一个基于webrtc的简单远程网络摄像头/">使用peerjs实现一个基于webrtc的简单远程网络摄像头</a></h1><div class="post-meta">2023-03-03</div><div class="post-content">
仓库地址:https://github.com/lilong7676/cue-live技术栈:nextjs + webrtc
</div><p class="readmore"><a href="/2023/03/03/uncategorized/使用peerjs实现一个基于webrtc的简单远程网络摄像头/">阅读全文</a></p></div><nav class="page-navigator"><span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><a class="extend next" rel="next" href="/page/2/">下一页</a></nav></div></div><div class="pure-u-1-4 hidden_mid_and_down"><div id="sidebar"><div class="widget"><form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="text" name="q" maxlength="20" placeholder="Search"><input type="hidden" name="sitesearch" value="https://lilong7676.github.io"></form></div><div class="widget"><div class="author-info"><a class="info-avatar" href="/about/" title="关于"><img class="nofancybox" src="/images/myavatar.png"></a><p>大前端 React\Nodejs\flutter\iOS\Java\🎮\🎬\🎢</p><a class="info-icon" href="mailto:[email protected]" title="Email" target="_blank" style="margin-inline:5px"> <i class="fa fa-envelope-square" style="margin-inline:5px"></i></a><a class="info-icon" href="https://github.com/lilong7676" title="Github" target="_blank" style="margin-inline:5px"> <i class="fa fa-github-square" style="margin-inline:5px"></i></a><a class="info-icon" href="/atom.xml" title="RSS" target="_blank" style="margin-inline:5px"> <i class="fa fa-rss-square" style="margin-inline:5px"></i></a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/GPT/">GPT</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Knative/">Knative</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/Shell脚本/">Shell脚本</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/WebAssembly/">WebAssembly</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/flutter/">flutter</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/iOS/">iOS</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/javascript/">javascript</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/minikube/">minikube</a><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/minikube/k8s/">k8s</a></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/rust/">rust</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/web/">web</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/Babel/" style="font-size: 15px;">Babel</a> <a href="/tags/iOS/" style="font-size: 15px;">iOS</a> <a href="/tags/AsyncLocalStorage/" style="font-size: 15px;">AsyncLocalStorage</a> <a href="/tags/unit-test/" style="font-size: 15px;">unit test</a> <a href="/tags/WebAssembly/" style="font-size: 15px;">WebAssembly</a> <a href="/tags/React/" style="font-size: 15px;">React</a> <a href="/tags/Docker/" style="font-size: 15px;">Docker</a> <a href="/tags/CI-CD/" style="font-size: 15px;">CI/CD</a> <a href="/tags/Indexeddb/" style="font-size: 15px;">Indexeddb</a> <a href="/tags/nodejs/" style="font-size: 15px;">nodejs</a> <a href="/tags/ChromeDevTools/" style="font-size: 15px;">ChromeDevTools</a> <a href="/tags/shell/" style="font-size: 15px;">shell</a></div></div><div class="widget"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/2024/01/11/GPT/使用TabbyML-tabby在本地部署一个类github-copilot/">使用TabbyML/tabby在本地部署一个类github copilot</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/12/28/rust/rust学习有感-2/">rust学习有感-2</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/12/20/rust/rust学习有感-1/">rust学习有感-1</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/11/21/flutter/mytoolbox-有趣的想法之实现一个粘贴板历史管理工具/">mytoolbox - 有趣的想法之实现一个粘贴板历史管理工具</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/10/27/uncategorized/v8中isolate和context的关系/">v8中isolate和context的关系</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/10/26/uncategorized/jest中使用msw(Mock-Service-Worker)/">jest中使用msw(Mock Service Worker)</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/10/23/javascript/jest单元测试中如何mock模块/">jest单元测试中如何mock模块</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/07/21/javascript/nodejs中的-AsyncLocalStorage/">nodejs中 的 AsyncLocalStorage</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/03/14/Shell脚本/如何通过-SSH-在服务器上远程执行命令/">如何通过 SSH 在服务器上远程执行命令</a></li><li class="post-list-item"><a class="post-list-link" href="/2023/03/03/uncategorized/使用peerjs实现一个基于webrtc的简单远程网络摄像头/">使用peerjs实现一个基于webrtc的简单远程网络摄像头</a></li></ul></div><div class="widget"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://lilong7676.github.io/" title="My Blog" target="_blank">My Blog</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer">Copyright © 2024 <a href="/." rel="nofollow">费默 - 分享.</a> Powered by<a rel="nofollow" target="_blank" href="https://hexo.io"> Hexo.</a><a rel="nofollow" target="_blank" href="https://github.com/tufu9441/maupassant-hexo"> Theme</a> by<a rel="nofollow" target="_blank" href="https://github.com/pagecho"> Cho.</a></div></div></div><a class="show" id="rocket" href="#top"></a><script type="text/javascript" src="/js/totop.js?v=1.0.0" async></script><script type="text/javascript" src="//lib.baomitu.com/fancybox/latest/jquery.fancybox.min.js"></script><script type="text/javascript" src="/js/fancybox.js?v=1.0.0"></script><link rel="stylesheet" type="text/css" href="//lib.baomitu.com/fancybox/latest/jquery.fancybox.min.css"><script type="text/javascript" src="/js/copycode.js?v=1.0.0" successtext="复制成功!"></script><link rel="stylesheet" type="text/css" href="/css/copycode.css?v=1.0.0"><script type="text/javascript" src="/js/codeblock-resizer.js?v=1.0.0"></script><script type="text/javascript" src="/js/smartresize.js?v=1.0.0"></script></div></body></html>