很早就在 Twitter 上知道了 Felo 这样一款同声传译的工具,这个工具让我在刚来日本,拨打日语客服的时候起到了非常重要的作用,我用一个手机拨打客服电话,然后用另外一个手机实施翻译客服说的内容,最近也为我解决了乐天银行无法登录的问题。
这两天又发现一款语音转文字的应用 Voicenotes 就又想起了 Felo 这一款翻译工具,语音转文字这一个领域在最近非常火热,可能是因为 OpenAI [[Whisper]] 的原因,让语音识别在准确率,以及上下文识别中的可用率提升了非常多,
一句话说明 Felo 的功能的话,就是可以选择两种语言,然后实时在两种语言之间做语音识别转文字,然后进行翻译。
Felo 团队还开发了一个网页版本
如果说缺点的话就是 Felo 的定价,普通人使用起来确认比一般的订阅制应用要高,在日区一年的订阅费用是 37000 日元,美元也接近 240 美元了。但是翻译的需求普通人也不是每天都存在,所以可能 Felo 还是定位成 ToB ,在跨国会议,多地区人交流沟通的高频度场合比较适合。
如果你看到这里对 Felo 感兴趣,可以点击我的邀请 注册账号之后,你我都可以体验 60 分钟的 Felo 转译。
Bull Call Spread,可以翻译成牛市看涨价差策略,这是一个期权交易策略。
这个交易策略由两个看涨期权(call option)组成,购买一个远期看涨期权,同时卖出一个相同到期日但是执行价更高的看涨期权。
使用这个策略的交易员期望投资标的以一个缓慢的趋势看涨。
为了构建一个牛市看涨价差策略需要执行以下的一些操作
需要注意的是,Bull Call Spread 策略的最大收益受限于两个看涨期权中间的价差减去期权价格,而最大的风险就是损失构建策略的期权购入价格。
假如有一个股票叫做 ABC,当前的价格是 50 USD,交易者认为该股票会在下个月上涨,所以想要建立一个 Bull Call Spread。
首先购买一个在下个月到期的 50 USD 行权价的看涨期权,这个看涨期权叫做 at-the-money option,因为行权价就是当前的交易价格,期权的价格是每股 3 USD。
同时卖出了相同行权日,行权价 55 USD 的看涨期权,这个期权叫做 out-of-the-money 期权(价外期权),因为价格高于当前交易价格。
完成交易后,就构成了 Bull Call Spread。
因为同时买入和卖出了看涨期权,一定程度上波动性被抵消了。
当波动性上升时,两种期权的价格都会上涨,这意味着多头看涨期权的价值会增加,同时空头看涨期权的价值也会增加。但是由于这个策略是做多一个期权,并做空另外一个看涨期权,波动率在一定程度上被相互抵销了。
用期权的语言来说,这通常被称为「near-zero vega」,Vega 衡量期权价格对波动性变化的敏感度,接近于零的 Vega 意味着,假设其他因素保持不变,波动性发生变化时,Bull Call Spread 的价格变化很小。
但是需要指出的是,牛市看涨价差并不完全不受到波动性变化的影响,确切的影响可能还取决于其他因素,包括期权处于价内或价外的程度,以及距离到期的时间。
时间对 Bull Call Spread 的影响,也称为时间衰减或 theta,这个有点复杂,该策略包含两种看涨期权,这两种期权对时间的流逝都有不同的反应。
期权总价值的时间价值部分随着行权日期临近而减少,这个称为时间侵蚀(time erosion)或时间衰减(time decay)。
对于多头看涨期权来说,时间衰减是有害的,随着时间推移,在其他条件相同的情况下,所购买的期权的价值会下降。这是因为该期权实现盈利的时间较少,价值较低。
另外一方面,对于空头看涨期权,时间衰减对卖出方有利,随着时间推移,出售的期权价值会下降,交易者对该期权负有义务,如果空头看涨期权到期时一文不值,交易者将保留出售该期权所获的全部权利金。
时间衰减对牛市看涨价差策略的总体影响取决于股票价格与价差执行价格的关系。如果股票价格接近或低于多头看涨期权(即执行价格较低的看涨期权)的执行价格,那么牛市看涨价差策略的价格会随着时间的推移而下降,发生亏损。多头看涨期权最接近交易价格,并且比空头看涨期权价值下降更快。
如果股票价格接近或高于空头看涨期权(即执行价格较高的看涨期权)的执行价格,那么牛市看涨价差策略的价格会随着时间的推移而增加,发生盈利。空头看涨期权现在比多头看涨期权更接近交易价格,价值下降得更快。
最后,如果股价处于执行价格的中间,那么时间侵蚀对牛市看涨价差的价格几乎没有影响,因为多头和空头看涨期权以大致相同的速率衰减。
标的资产的价格变化对牛市看涨价差有重大的影响,当标的资产的价格上涨时,会获利。
如果资产价格大幅上涨并超过空头看涨期权的行权价,那么策略达到最大利润。多头看涨期权的价值增加,空头看涨期权则被标的资产价格的上涨所抵消。
另外一方面,如果标低价格温和上涨,并且在到期时处于多头看涨期权行权价和空头看涨期权行权价价格之间,该策略仍然会获利,但是不是最大收益。多头看涨期权的价值增加了,但是空头看涨期权的价值也开始增加,降低整体利润。
最后,如果标的资产价格下跌,或者没有涨幅,该策略产生净损失。如果到期时价格低于多头看涨期权的执行价,那么两个期权将在到期时毫无价值,并且建立策略时的权利金。
该策略还有一些隐含的需要考虑的内容
Bull Call Spread 策略可以限制风险,最大的可能损失就是构建策略的成本,但是这个策略也限制了潜在的利润。
Bull Call Spread 策略可以选择未来一段时间(几天,几周或几个月)小幅升值的资产来实现。
如果你也对交易,期权感兴趣,可以加入群组一起讨论呀。
如果你在日本
自从使用 [[Obsidian]] 以来就一直想要有一个开源版本的 [[Obsidian Publish]] 代替,过去这几年也尝试了不少方案,比如 Jekyll 静态网站生成,比如使用 [[Logseq]] 生成网站, 然后还想过从 Obsidian 同步到 Notion 里面,然后再使用 [[NotionNext]] 来生成网站。
下面是所有我尝试过的方案
但是以上的方案我尝试之后都不是一个我认可的完善的方案,或多或少有一些问题,也不能和我自己的工作流程结合起来。
但是很多年前看到过一个静态网站分享的方案 Quartz,没想到发展了几年之后发布的 v4 版本,可以完美的融合到我的工作流中,并且可以非常方便地分享我的本地 Obsidian Vault。
Quartz 是一个静态网站生成工具,可以用来发布 Markdown 的笔记,和 Obsidian 搭配使用绝佳。
Quartz 发布 4.x 版本之后可用度大大提高,并且可以直接作为 Obsidian Publish 的开源代替存在。
Quartz 需要 Node v18.14 以及 npm v9.3.1
Cons:
界面
通过克隆代码本地安装
git clone https://github.com/jackyzha0/quartz.git
cd quartz
npm i
npx quartz create
在执行了上面的命令之后,会在命令中选择是否要创建一个全新的仓库,还是直接使用 ln -s
来软链接一个既存的文件夹。
然后再运行
npx quartz build --serve
就可以直接启用一个本地的在线预览。
最后效果可以参考这里。
在网上逛论坛的时候,偶然看到有人提到了一个爱沙尼亚电子公民的电子居民卡,看起来挺有意思的,之前就看到过 [[帕劳数字居民身份证]],去检索了一下发现帕劳已经涨价到了 248 欧元,爱沙尼亚电子公民感觉上类似,所以就简单的记录一下。
爱沙尼亚的数字居民(E Resident)计划是由爱沙尼亚在 2014 年推出的一项电子公民计划。爱沙尼亚成为了第一个推出电子公民计划 E Residency 的国家。
爱沙尼亚目前是欧盟和北约的成员国,国旗是蓝黑白三色,国家域名是 .ee 电话号码的国际区号是 +372。
爱沙尼亚位于欧洲东北部,由大陆部分和波罗的海的 2222 个岛屿组成。它西临波罗的海,北濒芬兰湾,东靠楚德湖,南面和东面分别与拉脱维亚和俄罗斯接壤,总面积为 42,388 平方公里。该国属于温带大陆性湿润气候,主要民族是爱沙尼亚人,他们属于波罗的芬兰人。爱沙尼亚是北欧理事会、欧洲联盟、欧元区、申根区、北大西洋公约组织以及经济合作与发展组织的成员国之一,也是世界高收入经济体之一。
自上世纪 90 年代开始,爱沙尼亚就致力于成为互联网强国。所有的小学生都需要接受编程教育,并且将接入互联网视为基本人权之一。早在 2002 年,爱沙尼亚就已经完成了对境内大部分地区的 WiFi 覆盖。如今,几乎所有政府服务,包括投票选举、工商注册、报税等等,都可以在线办理,覆盖率高达 99%。爱沙尼亚发达的互联网也造就了很多互联网公司,比如 Skype,Hotmail 以及 [[Wise]]。
爱沙尼亚电子公民不是签证,也不是居留权,所以如果要去爱沙尼亚旅游,还是需要申请申根区的签证。电子公民也不会影响原来国籍。
那么电子公民有什么好处?
要成为爱沙尼亚电子公民非常简单,只需要准备好如下材料
登录爱沙尼亚电子公民计划官网,点击网页右上角的 「Apply Now」,根据提示填写个人信息,然后选择 Pick-up Location (领取卡片的地方)然后爱沙尼亚的边境管理部分会审核材料,通过之后就可以去大使馆领取电子公民卡。
北京领取卡片的地方在大使馆,北京市朝阳区亮马桥北小街 1 号(天泽路东门入口),只需要带上护照即可。如果是在东京,那么到东京的大使馆领取即可。其他地方可以根据官网 的内容进行选择。
最后会问为什么要申请爱沙尼亚的电子公民,根据自己的实际需求填写就行,这里推荐可以自己先写中文,然后借助 ChatGPT,Gemini(Bard) 等工具翻译成英文。
申请的几个步骤
准备材料的时候所有文件都使用英文名命名,在上传的文件名中不要包含中文,日文或其他语言文字。
另外照片需要大于 1MB,可以使用 macOS 的 preview 然后放大照片的解析度。
另外申请的时候需要
等待线上申请提交之后,会进入审核阶段。
所以总体下来,如果从网站申请,到审批签发,大约需要 1 个月到 2 个月左右时间。
手续注册需要 120 欧元费用,后续 renew 也需要 100~120 欧元费用。
拿到 E-Residency Kit 之后不能马上使用,需要等待大约 24 小时等大使馆将信息传回爱沙尼亚,然后收到邮件通知之后,就表示被激活可以使用了。
e-Residency Kit 包含了
如果想要使用这个电子居民身份开公司,有一家服务提供商 Xolo 提供,也可以直接参考 官方如何 run a company 获取其他信息。
e-Residency 官网提供了一个市场 上面列出了所有支持 e-Residency 的公司,比如提供公司注册的 Xolo,1Office,e-Residency Hub, 有提供银行开户的 LHV,Wise,Payoneer,Stripe 等等。
爱沙尼亚也有一些银行支持电子居留卡登录和管理
DNS 泄露(DNS Leak)是指当使用虚拟专用网络(VPN)或其他匿名工具时,域名系统(DNS)查询数据绕过加密隧道,直接通过用户的本地 ISP(互联网服务提供商)进行解析。这意味着用户的浏览活动可能被 ISP 监视或记录,进而暴露了用户的实际 IP 地址和在线活动。
在深入探讨 DNS 泄露之前,有必要了解 DNS 的基本工作原理。DNS 是互联网的电话簿,当用户输入一个域名(如www.example.com)时,DNS将其转换为对应的IP地址(如192.0.2.1),以便计算机能够理解和访问该网站。
通常情况下,用户的设备会向 ISP 的 DNS 服务器发送请求进行解析。然而,当用户使用 VPN 时,所有的流量应通过加密的 VPN 隧道传输,并由 VPN 提供商的 DNS 服务器处理 DNS 请求。
DNS 泄露的原因 DNS 泄露可能由于以下几个原因发生:
操作系统配置问题:一些操作系统可能会忽略 VPN 设置,继续使用本地 DNS 服务器。 VPN 设置不当:不正确的 VPN 配置可能导致 DNS 请求未能通过 VPN 隧道传输。 VPN 软件缺陷:某些 VPN 软件存在缺陷,无法正确处理 DNS 请求。 IPv6 配置问题:如果 VPN 只处理 IPv4 流量,而未配置 IPv6,IPv6 流量可能会直接泄露。
检测 DNS 泄漏有很多方法,最简单的方法就是找一个在线的检测工具。
在线检测 DNS 泄漏的工具,通过用户访问网页的时候,在网站上生成多个域名解析请求,通过用户的设备发起,网站通过脚本捕获并记录这些域名请求结果,这些网站根据 DNS 响应,判断是哪个 DNS 服务器处理的,然后通过对比 DNS 服务器 IP 地址与公共 DNS 服务器 ISP DNS 服务器进行匹对。
如果检测的 DNS 服务器属于用户的 ISP 或者其他不安全的 DNS 服务器,而非用户期待的 DNS 服务器,则说明了 DNS 泄漏。
即使用户使用 VPN 或者其他匿名网络访问工具来隐藏其真实的 IP 地址,但是如果 DNS 请求没有通过 VPN 隧道,而是通过用户自己的 ISP 解析,那么 ISP 和其他潜在的监听者仍然可以看到用户的真实 IP 地址,这意味着用户的地理位置和身份可能被暴露。
DNS 请求包含了用户访问的域名,如果这些请求通过 ISP 解析,ISP 可以记录和分析用户的浏览历史,这使得用户的在线活动变得不再私密,并且可能被用户于广告投放,数据挖掘,甚至在某些国家可能被政府监控。
DNS 泄漏还可能使得用户更容易成为攻击的目标,比如,攻击者可以利用 DNS 请求来识别用户网络行为,实施 DNS 劫持或中间人攻击,将用户引导至伪造的网站或恶意服务器,从而窃取敏感信息或传播恶意软件。
某些政府或地区,政府或 ISP 会对用户访问的内容进行过滤和审查。通过 DNS 泄漏,政府或 ISP 可以轻松跟踪和组织用户访问被审查或禁止的网站,从而限制用户的互联网自由。
汇丰银行卓越及以上等级的用户可以免手续费汇款到汇丰银行香港。
中国银行的购结汇中,如果是境外中行,可以免除手续费以及电讯费的。
中行国内的普通借记卡即可。
中行对全球设有境外支行的当地中行都可以进行汇款,并且享受手续费减免,对日本汇款是 300 万日元内 1500 手续费,到香港是免除手续费的。
需要注意的是尽量到业务量比较大的支行办理开卡,业务量小的支行可能会为了揽储或完成 KPI 等,在汇出时各种阻拦
兴业银行寰宇人生借记卡可以以比较优惠的现汇利率购汇,然后也可以零手续费
优点是不占用每年 5 万的外汇限额,但是不方便,并且出境也有现金的限制。
比如在 AdSense,YouTube,X 等平台赚取美元,如果可以开设香港的账户,可以直接打款到香港的账户,然后不过国境。
如果有朋友需要港币换人民币,或者日元换人民币,那么可以通过朋友的账户直接进行(小额的)转账,国内通过银行到银行人民币转账,境外通过香港银行到香港银行的转账。
在小红书看到附近小区有人出电视,看起来成色还不错,之前在我的购物清单中也有计划,想要通过日本的电视节目来无意识锻炼一下听力,另外就是租的 UR 团地自带电视信号,连接上线就自动有电视了。于是我就去线下看了一下电视的外观,顺便测量了一下电视柜的尺寸。没想到长度和宽度正好放在卧室,于是就和对方定下了。
电视是海信的 50E6G,回来查了一下发现海信在日本的占有率还挺高,因为购买的目的就是用来旁听一些电视节目,然后看一下 Apple TV 里面的 B 站,以及本地的电影,所以对画质也没有过多的要求,但是好在这一款也还是 4K,并且也支持多个 HDMI 输入,BS/CS 端口,作为一个大屏幕代替个人感觉还是不错的。
Hisense 海信 50E6G 是一款 4K 液晶テレビ。
有如下的端口
端口
安装使用起来比较简单,拿出来之后安装上下方两个支撑脚就可以了,因为它有 3 个 HDMI,所以我直接连上了 Apple TV(HDMI1),Switch(HDMI2),PS5(HDMI3)正好将所有的 HDMI 利用了起来。
这一款电视在连接 Apple TV 之后可以在 Apple TV 设置中设置 HDR 或 SDR,但是我发现如果设置成 HDR 整体的画面会偏灰色,不清楚是什么原因,我在网上查了很多资料也没有发现问题。
所以日常我还是调整成了 SDR,让电视机自动识别到 HDR 的时候再切换成 HDR,但是画面会突然变黑一两秒。
海信 50E6G 搭载了 Alexa,可以使用 Amazon Echo デバイス或者手机上的 Alexa アプリ 进行控制。
在设定画面,「ネットワーク サービズ 设定」 > 「スマートスピーカー 连携设定」> 「スマートスピーカー连携」,在电视画面上会显示 8 个数字「スマートスピーカー用连携コード」。
在手机应用 Alexa 中,找到外部连接,ハイセンス,或者「ハイセンス(拡張版),然后输入连携代码即可。
这一款电视是不带蓝牙的,所以不能接蓝牙耳机,但作为一个电视,这个缺点也是没有问题的。
并且因为我日常接入 Apple TV,所以使用 Apple TV 的蓝牙连接耳机也是可以的。
因为海信海外版本自带的操作系统是 [[VIDAA]],这个系统比较垃圾,虽然自带了 Netflix,YouTube,Amazon Prime,Hulu,以及很多日本本地的应用 AbemaTV,U-NEXT,DMM 等等,但是不能安装其他的应用,APK 也安装不了,并且也没有提供投屏功能。
但是同样的需要外接电视盒子,Apple TV 和我的斐讯 T1 可以解决投屏的问题,但好在我不依赖投屏,基本上都可以通过本地 Linux 挂载的 SMB 解决。
和上面的问题一样,因为采用了自家的 [[VIDAA]] 操作系统,所以扩展性不够,虽然本地使用 YouTube,Netflix 也算流畅,但是如果能换成 Google TV,或者其他 Android 兼容系统,可玩性会提升不少,比如可以安装直播应用,可以安装投屏应用,可以安装 Tailscale,播放器,[[Kodi]] 等等。
Homerow 是一个 macOS 上的快捷键助手,可以使用类似 [[vimium]] 的操作方式来控制 macOS。
速度快,原生应用,并且还是非常良心的一次性买断制。
这两天一台 VPS 上的 MySQL 总是自己宕机,查看了一下日志发现是因为 OOM ,内存不足被系统 Kill 了。
❯ sudo /etc/init.d/mysqld status
× mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/init.d/mysqld; generated)
Active: failed (Result: oom-kill) since Mon 2024-05-27 22:23:15 CST; 12h ago
Docs: man:systemd-sysv-generator(8)
Process: 2419860 ExecStop=/etc/init.d/mysqld stop (code=exited, status=0/SUCCESS)
CPU: 1h 11min 53.021s
Notice: journal has been rotated since unit was started, output may be incomplete.
网上稍微查了一下,可以使用修改 syetemd service 的方式来阻止 Linux 因为内存不足而杀死 MySQL。
编辑
sudo systemctl edit mysqld.service
然后在配置文件中添加
[Service]
OOMScoreAdjust=-1000
保存配置文件之后,重启 MySQL
sudo systemctl restart mysqld.service
可以检查配置是否生效,记得替换 MySQL 的 PID。
cat /proc/$(pidof mysqld)/oom_score_adj
MySQL 宕机并出现 “Out of memory” 问题,通常是由于短时间内应用程序大量请求导致系统内存不足,从而触发了 Linux 内核中的 Out of Memory (OOM) killer 机制。OOM killer 会终止某个进程以释放内存给系统使用。
通过检查相关日志文件(/var/log/),可以看到类似的 Out of memory: Kill process 信息:
May 25 19:06:53 wh kernel: [5351539.967422] php-fpm invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
May 25 19:06:53 wh kernel: [5351539.967429] CPU: 1 PID: 2384831 Comm: php-fpm Not tainted 5.15.0-84-generic #93-Ubuntu
Linux 内核根据应用程序的需求分配内存,通常应用程序分配了内存但未全部实际使用。为提高性能,这部分未用的内存可以被其它进程利用。这种内存归属于每个进程,内核直接回收利用较为复杂,因此采用了内存过度分配(over-commit memory)的策略,以间接提高内存使用效率。一般情况下,这种策略是有效的,但当大多数应用程序同时消耗内存时,问题就出现了。此时,所有应用程序的内存需求加起来超出了物理内存(包括 swap)的容量,内核必须通过 OOM killer 终止一些进程来释放内存,保障系统正常运行。可以通过银行的例子来理解:当部分人取钱时银行能够应对,但如果全国人民同时取钱且都想取完自己的钱,银行实际上无法满足。
内核检测到内存不足并选择终止进程的过程,可以参考内核源代码 linux/mm/oom_kill.c。当系统内存不足时,会触发 out_of_memory()
,然后调用 select_bad_process()
选择一个 “bad” 进程进行终止。选择 “bad” 进程的过程由 oom_badness()
决定,其算法主要根据进程占用的内存量来判断:
/**
* oom_badness - heuristic function to determine which candidate task to kill
* @p: task struct of which task we should calculate
* @totalpages: total present RAM allowed for page allocation
*
* The heuristic for determining which task to kill is made to be as simple and
* predictable as possible. The goal is to return the highest value for the
* task consuming the most memory to avoid subsequent oom failures.
*/
unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg, const nodemask_t *nodemask, unsigned long totalpages)
{
long points;
long adj;
if (oom_unkillable_task(p, memcg, nodemask))
return 0;
p = find_lock_task_mm(p);
if (!p)
return 0;
adj = (long)p->signal->oom_score_adj;
if (adj == OOM_SCORE_ADJ_MIN) {
task_unlock(p);
return 0;
}
points = get_mm_rss(p->mm) + p->mm->nr_ptes + get_mm_counter(p->mm, MM_SWAPENTS);
task_unlock(p);
if (has_capability_noaudit(p, CAP_SYS_ADMIN))
adj -= 30;
adj *= totalpages / 1000;
points += adj;
return points > 0 ? points : 1;
}
理解了这个算法,我们就理解了为什么 MySQL 总是被首当其冲地终止,因为它的内存占用最大。解决这个问题的最简单方法是增加内存,或优化 MySQL 使其占用更少的内存。此外,还可以优化系统以减少内存占用,使应用程序(如 MySQL)能够使用更多内存。一个临时解决方案是调整内核参数,使 MySQL 进程不易被 OOM killer 选中。
可以通过调整内核参数来改变 OOM killer 的行为,避免频繁终止进程。例如,可以在触发 OOM 后立即触发 kernel panic,并在 10 秒后自动重启系统:
# sysctl -w vm.panic_on_oom=1
vm.panic_on_oom = 1
# sysctl -w kernel.panic=10
kernel.panic = 10
# echo "vm.panic_on_oom=1" >> /etc/sysctl.conf
# echo "kernel.panic=10" >> /etc/sysctl.conf
从上面的 oom_kill.c 代码可以看到,oom_badness()
会为每个进程打分,根据分数决定终止哪个进程。可以通过调整进程的 oom_score_adj
参数来控制哪些进程不易被选中终止。例如,如果不希望 MySQL 进程被轻易终止,可以找到 MySQL 的进程号,并将其 oom_score_adj
设置为 -15:
# ps aux | grep mysqld
mysql 2196 1.6 2.1 623800 44876 ? Ssl 09:42 0:00 /usr/sbin/mysqld
# cat /proc/2196/oom_score_adj
0
# echo -15 > /proc/2196/oom_score_adj
当然,如果需要的话,还可以完全禁用 OOM killer(不推荐在生产环境中使用):
# sysctl -w vm.overcommit_memory=2
# echo "vm.overcommit_memory=2" >> /etc/sysctl.conf
Octarine 是一个注重隐私的本地 Markdown 编辑器。
自从我发现并使用Obsidian 以来,我个人已经使用单一 Obsidian Vault 好多年了,我所有的摘录,笔记,Memo,PDF 文档全部都交给了 Obsidian 进行管理。到目前为止,Obsidian 的使用体验也没有任何可以让我放弃的理由。
如果和 Obsidian 比较的话,那么 Octarine 唯一值得一提的就是安装程序的大小,仅有 6 MB 大小,其他的体验,比如所见即所得的编辑器,因为我大部分情况下使用 Markdown,全部的时间都使用 Vim 模式,所以对我来说甚至是一个缺点。而我去 Reddit 官方询问了是否有 Vim 模式的支持,也没有得到正面的反馈。
因为没有 Vim 模式,就这一点,我就需要暂缓考虑 Octarine 了,不过也正是这一点,可以推荐给其他不使用 Vim 模式的朋友。
另外 Octarine 目前还没有插件系统,所以只推荐将其作为一个本地离线的 Markdown 编辑器,或者本地离线的个人知识管理来使用。