Verne in GitHub
2024-03-29T01:56:08+00:00
https://blog.einverne.info
Ein Verne
git@einverne.info
Go 语言编写的网络穿透工具 chisel
2024-03-21T00:00:00+00:00
https://blog.einverne.info/post/2024/03/chisel-tcp-udp-over-http
<p><a href="https://github.com/jpillora/chisel">chisel</a> 是一个在 HTTP 协议上的 TCP/UDP 隧道,使用 Go 语言编写,10.9 K 星星。</p>
<p>工具采用 HTTP 进行数据传输,将 TCP 和 UDP 封装在 HTTP 隧道中。可以用来做 [[内网穿透工具]]。</p>
<p>chisel 只有一个二进制可执行文件,客户端和服务端都包含在内。</p>
<p>在之前的文章中,介绍过不少内网穿透的工具,比如 [[frp]],[[nps]],还有一些已经非常成熟的商业化工具 [[Tailscale]] ,[[ZeroTier]] 等等,感兴趣可以查看历史的文章。</p>
<h2 id="作用">作用</h2>
<p>chisel 这一类的工具可以有很多种用途,比如常见的端口转发,内网穿透等。</p>
<ul>
<li>也可以用来绕过防火墙,比如通常防火墙会禁用掉一些非常用的 TCP 协议,通过 chisel over HTTP 的特性就可以绕过此防火墙</li>
</ul>
<h2 id="安装">安装</h2>
<p>直接通过 GitHub release 获取二进制</p>
<p>或者通过 Docker</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run --rm -it jpillora/chisel --help
</code></pre></div></div>
<p>或者 Go</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>go install github.com/jpillora/chisel@latest
</code></pre></div></div>
<p>macOS 下也可以</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew install chisel
</code></pre></div></div>
<h2 id="端口转发">端口转发</h2>
<p>比如一台内网的服务器 10.0.0.1 上有一个本地端口 8000 的服务,目前没有暴露给外部访问。如果要在另外一台机器上能访问该服务。可以执行如下的操作。</p>
<p>在这一台服务器上执行 chisel 服务端,暴露 12000 端口</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel server -p 12000
</code></pre></div></div>
<p>在另外一台服务器 10.0.0.2 上,保证可以访问 10.0.0.1,然后执行</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel client 10.0.0.1:12000 28000:127.0.0.1:8000
</code></pre></div></div>
<p>这样就将 10.0.0.1 的本地 8000 端口,转发到了 10.0.0.2 机器的 28000 端口,此事在 10.0.0.2 机器上到 28000 的访问,就会通过 chisel 转发到 10.0.0.1 机器的 8000 端口。</p>
<p>比如可以用 Python 直接起一个测试的服务 <code class="language-plaintext highlighter-rouge">python3 -m http.server --bind 127.0.0.1 8000</code></p>
<h2 id="反向连接">反向连接</h2>
<p>刚刚上面的操作是通过在 10.0.0.2 机器作为 chisel 的 client。</p>
<p>同样也可以将 10.0.0.2 作为 chisel 的 server,比如在 10.0.0.2 服务器上</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel server -p 12000 --reverse
</code></pre></div></div>
<p>开启 reverse 之后,表示服务器端使用反向模式,流量转发到哪一个端口由 client 端指定。</p>
<p>然后在 10.0.0.1 服务器上执行</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel client 10.0.0.2:12000 R:28000:127.0.0.1:8000
</code></pre></div></div>
<p>此时 10.0.0.2 机器上也可以通过 28000 端口来访问 10.0.0.1 的 8000 端口。</p>
<h2 id="socks-代理">socks 代理</h2>
<p>除了直接转发 HTTP ,chisel 也可以设置 socks 代理。</p>
<p>比如在服务器中执行</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel server -p 12000
</code></pre></div></div>
<p>客户端可以</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./chisel client server_ip:12000 socks
</code></pre></div></div>
<p>这个时候就默认开启了一个 1080 端口的 socks 代理,当然这个端口可以自己设置,结合 Socks 代理工具,或者 <a href="https://einverne.github.io/post/2017/02/terminal-sock5-proxy.html">Proxychains</a> 等工具就可以直接利用这个 socks。</p>
<p>经过上面的说明,既然 chisel 可以作为 Socks5 代理,那么其实用来作为穿透 GFW 的工具也是可以的</p>
<p>在公网的服务器上</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>chisel server -p 3000 --socks5
</code></pre></div></div>
<p>然后在本地执行</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>chisel client server_ip:3000 socks
</code></pre></div></div>
使用 Bunny CDN 加速你的网站
2024-03-20T00:00:00+00:00
https://blog.einverne.info/post/2024/03/bunny-cdn-speed-up-your-site
<p>前两天看到 Twitter 上有人发帖说求推荐 CDN,突然发现很多人其实不知道 Bunny CDN,虽然这一家 CDN 成立时间比较早了,但是很多人还是只知道大名鼎鼎的 Cloudflare。这里就简单的介绍一下这个 CDN 吧。</p>
<p><a href="https://gtk.pw/bunny">Bunny</a> 是一家成立于 2014 年的 CDN 加速服务商,提供快速、强大且价格实惠的 CDN 加速服务,总计 80Tbps+网络,连接 3000 多家 ISP 和 14 家一级传输提供商,采用顶级 AMD CPU 和 NVMe+ SSD 服务器,平均 24 毫秒延迟,并提供最先进的 DDoS 缓解安全措施,帮你的网站抵御任何攻击。</p>
<p>Bunny 的域名 DNS 解析服务除了基本功能还具有负载均衡、地理/延迟智能解析,还可使用编写脚本的 DNS 记录简化部署、做出智能路由决策。另外,bunny.net 还提供对象存储、网站压缩优化、在线视频存储播放等服务。</p>
<p>Bunny CDN 提供节点非常地多,其中亚太节点在二十多个,包括日本东京、韩国首尔、中国香港等,这些节点都是连接速度快节点。</p>
<p>简单注册个 Bunny.net 账号就可以获得 14 天 1TB 流量免费试用,并且还可以使用优惠码免费充值 5 美元额度!按照最低 0.01 美元/GB 的定价这 10 美元免费额度可以用 1TB CDN 流量,当然也可以用于使用 Bunny 的域名 DNS 解析、对象存储、网站压缩优化、在线视频存储播放等服务。</p>
<p><img src="https://pic.einverne.info/images/5ITHy_4r4s.png" alt="5ITHy_4r4s" /></p>
<h2 id="功能">功能</h2>
<ul>
<li>支持一键设置 SSL</li>
<li>提供 Smart Cache 功能,当站点离线也可以访问到 Bunny 节点上缓存的内容</li>
<li>兼容 S3</li>
<li>自定义访问规则,可以配置一键屏蔽某个地区</li>
<li>Bunny 还提供了 WordPress 插件,</li>
</ul>
<p>如果你也想尝试一下 Bunny 可以点击<a href="https://gtk.pw/bunny">这里</a> 访问。</p>
<p>注册账号之后,记得在站内兑换优惠码,价值 5 刀,<code class="language-plaintext highlighter-rouge">BUNNYFIVER</code>,如果兑换码出现问题,欢迎加入<a href="https://t.me/+RUBhyY60iVcl6hdX">讨论群</a>一起讨论。</p>
<p><img src="https://pic.einverne.info/images/q1bD4QTeqL.png" alt="q1bD4QTeqL" /></p>
<h2 id="设置">设置</h2>
<p>和大多数 CDN 的设置一样,当注册完成账号之后,可以点击页面中的 「Add Pull Zone」 创建 CDN。</p>
<p><img src="https://pic.einverne.info/images/8yal25aEA8.png" alt="8yal25aEA8" /></p>
<p>填入自定义的 Pull Zone Name,然后在 Origin URL 中填入需要加速的网站地址。接下来根据自己的需求选择 CDN 地区,页面上也会表明不同地区的价格。</p>
<p>然后绑定自定义域名,因为 Bunny 默认的域名是 xxx.b-cdn.net ,你可以根据自己的需求比如将静态资源全部设置为 asset.your-domain.com 这样,那么直接在 Add Custom Hostname 中添加自己的域名即可。</p>
<p><img src="https://pic.einverne.info/images/s4Mce4eP-f.png" alt="s4Mce4eP-f" /></p>
<p>添加完成之后需要配置 DNS 的 CNAME 记录,比如将 asset.your-domain.com 指向 Bunny 给出的 Hostname。等待 DNS 解析完成即可使用自己的域名来访问 CDN。</p>
<p>Bunny 也提供免费的 SSL 证书,到页面上一键申请即可。其他 CDN 的设置根据自己的需求进行设置即可。</p>
<h2 id="related">related</h2>
<ul>
<li>[[Cloudflare]]</li>
<li>[[Fastly]]</li>
</ul>
绕过付费墙
2024-03-16T00:00:00+00:00
https://blog.einverne.info/post/2024/03/bypass-paywalls
<p>今天早上看到一篇 WSJ 的分享,但是点进去发现竟然只能看个开头,所以兴起整理一下这篇文章。</p>
<h2 id="bypass-paywalls">bypass-paywalls</h2>
<p>之前我就知道一个叫做 <a href="https://github.com/iamadamdev/bypass-paywalls-chrome">bypass-paywalls</a> 的插件,但是因为因为<a href="https://blog.einverne.info/post/2023/11/i-bought-mac-mini-and-setup.html">更换电脑</a> 所以 Chrome 上没有配置,所以立即设置起来。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone git@github.com:iamadamdev/bypass-paywalls-chrome.git
cd bypass-paywalls-chrome
cd build && sh build.sh
</code></pre></div></div>
<p>然后将此文件夹拖拽到 <code class="language-plaintext highlighter-rouge">chrome://extensions</code>。</p>
<p>但当我安装完成之后发现,WSJ 可能检测到了该插件,查看 Chrome 的请求,直接返回 401,感觉应该就是检测并且屏蔽了该插件。</p>
<h2 id="bypass-paywalls-chrome-clean">Bypass Paywalls Chrome Clean</h2>
<p>于是我就又找了一个插件 <a href="https://gitlab.com/magnolia1234/bypass-paywalls-chrome-clean">Bypass Paywalls Chrome Clean</a>,这个插件在原来的插件基础上,增加了一个非常独特的功能,那就是当发现内容已经被 archive.is 等内容缓存的时候,就直接将网页内容替换为缓存的内容,间接实现了绕过付费墙的目的。</p>
<p>Bypass Paywalls Chrome Clean 的安装也非常简单,直接 clone 项目,然后拖拽到 Chrome 即可。</p>
<p><img src="https://pic.einverne.info/images/WW38QjvCqg.png" alt="WW38QjvCqg" /></p>
<h2 id="related">related</h2>
<p>最后再补充一个网站,把链接直接输入进去,可以查看原文</p>
<ul>
<li><a href="https://12ft.io">https://12ft.io</a></li>
</ul>
基于表格的无代码数据库 Teable 介绍
2024-03-14T00:00:00+00:00
https://blog.einverne.info/post/2024/03/teable-introduction
<p><a href="https://github.com/teableio/teable">Teable</a> 是一个非常快,实时,专业,开发者友好的 No Code 数据库。Teable 构建在 PostgreSQL 之上,使用一个简介的,表格类似界面,可以基于此构建复杂的企业级别的数据库应用。</p>
<h2 id="功能">功能</h2>
<p>Spreadsheet-like 界面</p>
<ul>
<li>单元格编辑,每一个单元格都可以编辑</li>
<li>公式支持,支持直接在单元格进行公式计算</li>
<li>数据排序和过滤,基于列或者多列的排序过滤</li>
<li>Aggregation Function,聚合方法,根据列,计算,统计 sum, average,count,max,min 等</li>
<li>数据格式化,格式化数字,日期等</li>
<li>分组,行组织成组</li>
<li>固定列,固定表格左侧的列,滚动时可见</li>
<li>导入导出 csv xlsx 格式</li>
<li>行样式和条件格式</li>
<li>图表和可视化工具,从表格数据创建图标,比如条形图,饼图,折线图等(即将推出)</li>
<li>数据验证,限制或验证单元格中的数据(即将推出)</li>
<li>撤销和重做(即将推出)</li>
<li>评论和注释(即将推出)</li>
<li>替换查找(即将推出)</li>
</ul>
<p>多视图</p>
<p>以特定的方式显示数据</p>
<ul>
<li>Grid View,网格视图,默认,电子表格形式展示</li>
<li>Form View,表单格式,用于输入数据</li>
<li>Kanban View,看板显示(即将推出)</li>
<li>Calendar View,日历视图 (即将推出)</li>
<li>Gallery View,图库视图(即将推出)</li>
<li>Gantt View,甘特图,项目进度(即将推出)</li>
<li>Timeline View,时间线视图(即将推出)</li>
</ul>
<p>速度快</p>
<ul>
<li>支持数百万数据</li>
<li>自动索引</li>
<li>批量操作</li>
</ul>
<p>SQL 支持</p>
<ul>
<li>可以与 BI 工具,比如 [[Metabase]],[[PowerBi]] 等工具集成</li>
<li>和 [[Appsmith]] 这样的 No code 工具集成</li>
<li>支持原生 SQL 直接检索数据</li>
</ul>
<p>Privacy First</p>
<ul>
<li>支持自己托管数据</li>
</ul>
<p>实时协作</p>
<ul>
<li>为团队涉及,支持数据实时更新</li>
<li>支持团队协作,成员邀请和管理</li>
<li>完全的权限机制,支持表和列级别</li>
</ul>
<p>扩展性</p>
<ul>
<li>基于 React 的无后端编程能力</li>
<li>极低成本定制自己的应用程序</li>
<li>扩展脚本</li>
</ul>
<p>Automation 自动化</p>
<ul>
<li>使用 AI 或者可视化编程设计工作流</li>
</ul>
<p>Copilot (即将推出)</p>
<ul>
<li>通过聊天创建项目表格</li>
<li>澄城条形图分析</li>
<li>查看日程安排</li>
<li>等等</li>
</ul>
<p>关键词说明:</p>
<ul>
<li>Space,Teable 中所有的内容都通过 Space 来管理,每一个 Space 都是独立的空间,可以邀请协作者单独管理 base</li>
<li>base,是 Database 的缩略语,是存储数据的地方,workflow 也依赖于此</li>
<li>table,用来管理不同的数据集</li>
<li>view,用户可以创建 Grid,Form views,Gallery,Kanban,Calendar views 等等</li>
</ul>
<h2 id="总结">总结</h2>
<p>在 GitHub Trending 上看到这个项目就点开来看了一下,直接拉下来代码,看到当前项目的完成度还不错,直接在服务器上就跑起来了,但看到官方的说明,项目还在构建当中,还有很多功能在慢慢推进,我自己的话还没有来得及每个功能都尝试一遍,但以当前的完成度,还是果断关注一下,这个项目的想象空间还是挺大的,毕竟有了灵活的数据库可视化,很多服务都可以被代替掉。</p>
<h2 id="related">related</h2>
<ul>
<li>[[PostgreSQL]]</li>
<li>[[Airtable]]</li>
</ul>
聊一聊 Devin 第一个完全自主的 AI 工程师
2024-03-13T00:00:00+00:00
https://blog.einverne.info/post/2024/03/devin-first-ai-software-engineer
<p>Devin 是 Cognition 发布的一款完全自助的 AI 软件工程师。<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup></p>
<blockquote>
<p>Fully Autonomous AI Software Engineer Devin
完全自主人工智能软件工程师 Devin</p>
</blockquote>
<p>Devin 主打的就是通过 prompt 自主的学习,编写,调试,甚至可以进行部署。在 Cognition 发布的视频来看,Devin 至少能够</p>
<ul>
<li>进行网页浏览,比如查看并理解 GitHub Issue</li>
<li>自主学习 API 文档</li>
<li>进行编码,根据 Upwork 上的实际问题来编码</li>
<li>调试</li>
<li>修复错误</li>
</ul>
<p>和传统的 AI 对话框不一样,Devin 自带了命令行,编辑器,甚至还自带了一个浏览器。</p>
<h2 id="dhh">DHH</h2>
<p>伴随着 Devin 的发布 DHH 也发布了一篇博文《<a href="https://world.hey.com/dhh/developers-are-on-edge-4dfcf9c1">Developers are on edge</a>》,讲述了 AI 可能对程序员造成的影响,他说到现在软件开发行业遭受着双重打击,一方面科技行业一直在裁员,而另一方面还要面临 AI 带来的巨大威胁。</p>
<blockquote>
<p>That’s the trouble with The Future. It’s awfully difficult to predict when it’ll actually arrive. All we’re doing is making bets and taking guesses.</p>
</blockquote>
<p>文中 DHH 做了一个非常形象的比喻,过去农业需要全球 97% 的人参与其中,而今天只需要 2% 的人口。尽管农业生产总价值上升了很多,但是从事农间生产的人却少了很多很多。归咎其原因就是因为科技发展所带来的自动化进程,使得从事农业生产的人只需要动一动手指就可以管理大面积的农田。</p>
<p>那未来程序员的职业何尝不可能发展成这样呢?或许 AI 的发展会使得软件开发行业面临前所未有的变化,当软件行业不再需要那么多程序员进行手动编程的事后,这一个行业可能就已经达到了顶峰,但 DHH 也说了这并不意味着这个行业的小时,而更可能会让 AI 在社会生活中被更广泛的使用和融合,软件行业可能不需要那么多的手工编码程序员,但是他所产生的价值却还是会给社会带来巨大的福利。长期来看,没有任何职业可以成功抵御因为技术进步所带来的自动化而遭淘汰的命运,积极地拥抱变化,看向未来才是当下我们所能做的最后一件事情。</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://www.cognition-labs.com/blog">https://www.cognition-labs.com/blog</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
长桥证券开户及入金介绍
2024-03-12T00:00:00+00:00
https://blog.einverne.info/post/2024/03/longbridge
<p><a href="https://gtk.pw/zT9HR">长桥证券</a> 是一家创立于新加坡和香港的证券经纪服务商,创立团队来自阿里巴巴,字节跳动等互联网企业,于 2019 年 3 月正式成立,总部位于新加坡。 集团旗下长桥证券(香港)有限公司(中央编号:BPX066)持有香港证监会第 1、4、9 类牌照。</p>
<h2 id="优点">优点</h2>
<ul>
<li>长桥证券主打的一个营销点在于「终身免佣」,当入金达到一定门槛(当前只需要 10000 HKD)即可申请免佣</li>
<li>基金 0 元申购</li>
<li>期权交易费用低</li>
<li>通过 AI 自动总结行业信息,长桥证券是我用过的第一家能这么快将 AI 纳入到证券 APP 的公司</li>
</ul>
<h2 id="开户奖励">开户奖励</h2>
<p>因为开户奖励在不同的时间都不一样,截止 2024 年 3 月</p>
<ul>
<li>入金 1 万港币,可以获得终身免佣。</li>
<li>入金 2500 美元(2 万港币),可以获得 400 HKD 股票现金卡( 4 张 100 元抵扣卡,可直接抵扣使用),5 美元期权现金卡,达标后 5 个工作日发放</li>
<li>入金 10000 美元,可以获得总计 900 港币(股票现金卡)的奖励。</li>
<li>对于老用户,转仓超过 10000 USD ,港股可以获得 500 港币股票现金卡,如果转仓美股可以获得 1200 港币股票现金卡。</li>
</ul>
<p>点击<a href="https://gtk.pw/zT9HR">这里</a> 在线开户,如果你觉得本文对你有用,也可以填入我的邀请码 V24JAH。</p>
<h2 id="收费">收费</h2>
<p><a href="https://longbridge.hk/zh-CN/rate">港股收费</a></p>
<ul>
<li>佣金,交易金额的 0.03% 最低 3 港元,长桥收取</li>
<li>平台费
<ul>
<li>固定平台费,15 HKD/单,长桥收取</li>
<li>阶梯平台费
<ul>
<li>1~5,30 HKD/单</li>
<li>6~15,15 HKD/单</li>
<li>16~50,10 HKD/单</li>
<li>51~3000,5 HKD/单</li>
<li>3000~, 3 HKD/单</li>
</ul>
</li>
</ul>
</li>
<li>交收费,0.002% * 交易金额,最低 2 港元,最高 100 港元,香港结算所</li>
<li>印花税,0.13% * 成交金额,不足 1 港元作 1 港元计,香港政府</li>
<li>交易费,0.00565% * 成交金额,最低 0.01 港元,香港交易所</li>
<li>交易征费,0.0027% * 成交金额,最低 0.01 港元,香港证监会</li>
<li>财务汇报局交易征费,0.00015% * 交易金额,最低 0.01 港元,香港财务汇报局</li>
</ul>
<p><img src="https://photo.einverne.info/images/2023/04/05/swLH.png" alt="swLH" /></p>
<h2 id="出金收费">出金收费</h2>
<p>根据不同的提款方式和到帐时间收费不同。</p>
<ul>
<li>香港银行 - 银证转账
<ul>
<li>民生香港卡,银证授权成功</li>
<li>HKD,USD</li>
<li>免费</li>
<li>交易日 09:00~15:00 发起出金,最快 2 小时内到帐</li>
<li>其他时间段,下一个交易日 10 点前</li>
</ul>
</li>
<li>香港银行 FPS
<ul>
<li>HKD</li>
<li>免费</li>
<li>交易日 09:00~15:00 发起出金,最快 2 小时内到帐</li>
<li>其他时间段,下一个交易日 10 点前</li>
</ul>
</li>
<li>香港银行 网银转账
<ul>
<li>HKD,USD</li>
<li>预计到帐时间,交易日 11 点前提交出金申请,预计当天出金,交易日 11 点之后的申请,预计下一个交易日出金</li>
<li>手续费,港币免费;美元,长桥不收费,银行可能收费</li>
</ul>
</li>
<li>非香港银行 电汇
<ul>
<li>工银亚洲</li>
<li>HKD,USD</li>
<li>提款申请之后 1 ~ 2 个工作日汇出</li>
<li>涉及到资金跨境中转,具体到帐时间不确定,预计 3~7 个工作日</li>
<li>手续费,长桥不收取,汇出银行,中转银行,收款银行均会另外收取。汇出银行固定收取 140 港币,中转银行收费 25 美元</li>
</ul>
</li>
</ul>
<p>总体评价,作为一个初创公司,在应用的使用体验,以及出入金的友好度上,个人感觉都比[[老虎证券]]方便很多,而费用方面则要比[[富途证券]] 优惠一些,但还是没有 [[华泰证券]] 便宜。</p>
<h2 id="开户">开户</h2>
<p>点击<a href="https://gtk.pw/zT9HR">这里</a> 在线开户,如果你觉得本文对你有用,也可以填入我的邀请码 V24JAH。</p>
<p>开户的过程也比较简单,上传自己的身份信息,根据自己的真实情况填写即可。</p>
<h2 id="入金">入金</h2>
<p>如果有港卡的情况下,非常简单,通过银证转账,[[eDDA 快捷入金]],[[FPS 转数快]],网银转账等方式入金。</p>
<p>长桥证券支持的入金银行非常多,相信从列表里可以直接找到你的银行。</p>
<p><img src="https://photo.einverne.info/images/2024/03/13/SImW.jpg" alt="SImW" /></p>
<h3 id="银证转账">银证转账</h3>
<p>银证转账是指资金在银行账户与证券账户之间的划转服务,可以直接把银行资金转入证券账户,也可以直接把证券账户资金提取到银行账户。无需通过网银汇款,也无需在券商网站发送通知,具有方便、快捷、安全的特点。</p>
<h3 id="edda">eDDA</h3>
<p>eDDA 快捷入金是香港金管局推出的 FPS 转数快系统增值服务,支持客服授权港股证券从指定银行账户将资金存入证券账户。</p>
<p>eDDA 快捷入金是一种高效入金方式,基于 2018 年香港金管局推出的实时转账平台 FPS(Faster Payment System)转数快系统所研发。简单来说就是,客户完成银行账户授权后,后续可直接通过券商端发起入金。</p>
<p>eDDA 快捷入金目前仅支持港元。</p>
<h3 id="fps">FPS</h3>
<p>FPS 中文名「快速支付系统」(FPS 转数快),是香港金融管理局于 2018 年 9 月 30 日推出的全面连接银行的快速支付系统,由香港银行同业结算有限公司负责运作,费用全免,可以做到 365 天 x7x24 小时即时跨行转账。</p>
<h2 id="related">related</h2>
<ul>
<li>[[老虎证券]]</li>
<li>[[富途证券]]</li>
<li>[[华泰证券]]</li>
<li>[[uSMART 盈立证券]]</li>
</ul>
记录一次令人无语的文件上传限制调试
2024-03-10T00:00:00+00:00
https://blog.einverne.info/post/2024/03/hestiacp-wordpress-file-limit-cloudflare-100mb
<p>本文记录一次令我非常无语的文件上传大小限制的问题。之前也提到过我开了一档《暮色时光》的<a href="https://twilight-time.einverne.info">播客</a>,那为了方便,我就直接使用 WordPress 的 Media 来管理我自己的音频文件了,但是最近一期聊《台湾》相关的内容,时长超过了 1 个小时,所以导出的文件有点大(102MB),稍微超过了我预期的 100MB ,这导致我需要调整 WordPress 文件上传的限制。那我一想这个也简单,之前也调整过,无非就是调整一下 Nginx 和 PHP 的配置,重启一下服务就行,谁知道我在这么个简单的事情上竟然又浪费了几个小时。</p>
<p>按照我之前的经验,无非就是调整一下 PHP 的配置文件。</p>
<h2 id="php-配置">PHP 配置</h2>
<p>因为我直接使用的 <a href="https://blog.einverne.info/post/2022/07/web-server-control-panel-hestia-usage.html">HestiaCP</a> ,登录后台之后,点击右上角的齿轮,进入系统设置,然后在其中找到,我使用的 PHP 版本,点击编辑配置,立即就可以看到 PHP 相关的配置,HestiaCP 也非常人性化的将常用的配置列了出来。</p>
<p><img src="https://photo.einverne.info/images/2024/03/11/4H2G.png" alt="4H2G" /></p>
<p>那这个地方只需要修改</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>post_max_size
upload_max_filesize
memory_limit
max_execution_time
max_input_time
</code></pre></div></div>
<p>这几个值。然后点击保存之后, PHP 会自动重启。</p>
<p>这个时候我去后台看,WordPress 已经将文件上传的限制放宽到了 256 MB 大小,我尝试上传,发现上传接口 Pending。</p>
<p><img src="https://pic.einverne.info/images/YdcANSWTDK.png" alt="YdcANSWTDK" /></p>
<h2 id="nginx">Nginx</h2>
<p>于是我想是不是 Nginx 配置里面 <code class="language-plaintext highlighter-rouge">client_max_body_size</code> 配置有限制,于是直接看 HestiaCP 后台的 Nginx 配置,但发现这不是问题啊,现在的大小就已经足够。</p>
<p><img src="https://photo.einverne.info/images/2024/03/11/4mMM.png" alt="4mMM" /></p>
<p>于是我想难道是配置没有生效,在 HestiaCP 后台,通过 SSH 登录服务器,直接重启了 PHP,Nginx。</p>
<p>然后在 PHP 目录里面创建了文件 test.php ,直接放入</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code><?php phpinfo(); ?>
</code></pre></div></div>
<p>访问,发现 PHP 已经生效了上传限制。</p>
<p>重新尝试,接口还是 pending。</p>
<h2 id="wordpress">WordPress</h2>
<p>于是我想难道是 WordPress 自身做了什么限制?但之前也没有遇到过类似的事情?但网上查的时候有人说还需要加上一些配置,那么我也不管了,先加上再说。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_UPLOAD_SIZE', '256M');
</code></pre></div></div>
<p>重新尝试上传,接口还是 pending。</p>
<p>这个时候我就不知道问题出现在那里了,然后我就尝试换用 <code class="language-plaintext highlighter-rouge">async-upload.php</code> 为关键字,终于在一个 StackOverflow 的帖子里面看到了一个让我震惊的<a href="https://stackoverflow.com/a/60128885/1820217">回答</a>,说 Cloudflare 的基础套餐有 100 MB 的限制!</p>
<p><img src="https://photo.einverne.info/images/2024/03/11/4eVR.png" alt="4eVR" /></p>
<p>我突然意识到,确实我的站点前面确实增加了一个 Cloudflare CDN,而我的文件刚刚好超过 100MB。于是立即去 Cloudflare 后台关闭了云朵,然后我发现问题解决了!</p>
<p>后来仔细的研究了一下 Cloudflare,发现 Free 和 Pro 的套餐,上传文件大小限制都是 100MB。<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> 而 Business 是 200MB 限制,Enterprise 是 500MB 限制。</p>
<p>如果文件大小超过 100MB,会直接返回 413 错误,文件上传也不会到自己的服务器,我就说为什么我上面几次修改,在 PHP 和 Nginx Error 日志里面什么错误信息都没有看到!</p>
<p>至此文件上传的问题就得到了解决。</p>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://community.cloudflare.com/t/maximum-upload-size-is-limit/418490/2">https://community.cloudflare.com/t/maximum-upload-size-is-limit/418490/2</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
常见的邮件发送错误
2024-03-09T00:00:00+00:00
https://blog.einverne.info/post/2024/03/common-email-error
<p>本文总结常见的邮件发送的错误。</p>
<h2 id="450">450</h2>
<blockquote>
<p>450 4.1.8 Sender address rejected: Domain not found</p>
</blockquote>
<p>这个错误提示表明发件人地址被拒绝,因为域名未找到。这通常是由于发件人地址的域名无法在 DNS(域名系统)中找到所致。解决这个问题可能需要以下步骤:</p>
<ul>
<li>检查发件人地址:确保你使用的发件人地址是正确的,并且包含有效的域名。如果你使用的是自定义域名,请确保该域名已正确配置,并且在 DNS 中有相应的记录。</li>
<li>验证域名配置:确保你的域名已经在 DNS 中正确配置。你可以通过使用 DNS 查询工具来验证域名的 MX 记录、SPF 记录和其他必需的记录是否已设置正确。</li>
<li>确认域名注册:如果你使用的是自定义域名,确保该域名已经注册,并且没有过期或被暂停。有时域名注册过期或被暂停会导致域名无法解析。</li>
<li>检查 DNS 服务器设置:如果你使用的是自托管的邮件服务器,确保你的 DNS 设置正确,包括正确配置了邮件服务器的 A 记录、MX 记录等。</li>
<li>联系你的域名注册商或托管提供商:如果以上步骤都无法解决问题,你可以联系你的域名注册商或者托管提供商,向他们寻求帮助解决域名解析问题。</li>
</ul>
<p>表示邮件被拒绝了,因为发件人的邮箱无法正确解析,因为特定的 DNS 记录(A,MX,PTR 记录) 缺失了。</p>
<ul>
<li><a href="https://intodns.com/">Intodns.com</a></li>
<li><a href="https://mxtoolbox.com/">Mxtoolbox.com</a></li>
<li><a href="https://whatsmydns.com/">Whatsmydns.net</a></li>
</ul>
<p><img src="https://photo.einverne.info/images/2023/08/03/DmML.png" alt="DmML" /></p>
<h2 id="50">50</h2>
<blockquote>
<p>50 5.1.1: Recipient address rejected: User unknown in local recipient table</p>
</blockquote>
<p>这个错误表示你尝试发送邮件给一个在本地收件人表中未知的用户。</p>
<h2 id="553">553</h2>
<blockquote>
<p>553 5.7.3 CONTENT REJCT:blockid=xx:URL</p>
</blockquote>
<p>这个错误意味着你尝试发送的邮件包含被拒绝的内容,通常是因为邮件包含了被认为是垃圾邮件或恶意链接的内容。通常是如下的原因:</p>
<ul>
<li>恶意链接或内容:邮件中包含的链接可能被认为是恶意链接,或者邮件内容被认为是垃圾邮件。</li>
<li>邮件服务器策略:邮件服务器可能已经配置了策略,拒绝包含特定类型内容的邮件。</li>
</ul>
<p>遇到此错误一般可以检查一下发送的邮件是否合法,是否包含恶意链接或内容。</p>
<h2 id="550">550</h2>
<p>Recipient address rejected: User unknown in virtual mailbox table</p>
<blockquote>
<p>Net::SMTPFatalError: 550 5.1.1 <a href="mailto:your@email.address">your@email.address</a>: Recipient address rejected: User unknown in virtual mailbox table</p>
</blockquote>
<p>错误表明你尝试发送邮件给一个在邮件服务器的虚拟邮箱表中不存在的用户。</p>
<p>可能是如下的原因:</p>
<ul>
<li>输入的收件人邮箱有错误</li>
<li>收件人的信箱已经被删除或禁用</li>
<li>邮件配置有错误</li>
</ul>
EV Hosting 独立开发者套餐
2024-03-08T00:00:00+00:00
https://blog.einverne.info/post/2024/03/indie-tools
<p>自从去年 <a href="https://client.einverne.info">EV Hosting</a> 上线以来已经过快一周年了,过去的一年中陆陆续续推出了如下的服务。</p>
<ul>
<li><a href="https://blog.einverne.info/post/2023/04/introducing-ev-hosting.html">共享空间</a> 可以用来托管网站,图片,音频等等内容</li>
<li><a href="https://blog.einverne.info/post/2023/05/ev-hosting-domain-registrar.html">域名注册服务</a> 可以低价注册 life, app, me 等等几十种域名后缀</li>
<li><a href="https://blog.einverne.info/post/2023/05/ev-hosting-shared-mail-hosting.html">域名邮箱服务</a> 给域名提供无限域名邮箱的服务</li>
</ul>
<p>这一些服务也是我开发独立产品的过程中不可缺少的一部分,比如说我可以在一分钟内直接创建一个<a href="https://twilight-time.einverne.info/">博客</a>来发布我的播客,我可以用我自己的域名注册服务来注册我自己的 life 域名,比如我的日本生活 <a href="https://ijp.life">https://ijp.life</a> ,而我自己的域名邮箱服务已经稳定使用超过 3 年,过去我所有的域名邮箱全部都自己维护。</p>
<p>之前在 Twitter 上曾经看到过一篇 0 成本 Build 属于你自己的项目,其中列举了不少我也正在使用的服务,比如说 GitHub,Cloudflare 等等,但是问题的关键就在于当你自己的服务与这样的平台非常紧密地连接在一起的时候,未来带来的潜在风险也会伴随着平台的起伏而波动。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>代码: @github $0
CDN: @Cloudflare $0
后端: @flydotio $0
域名: @freenomofficial $0
邮件: @Mail_Gun $0
数据库: @PlanetScale $0
日志: @AxiomFM $0 [[AXIOM]]
存储: @Cloudflare R2 $0
CDN: @BunnyCDN $0 [[Bunny CDN]]
统计: @googleanalytics $0 [[Google Analytics]]
</code></pre></div></div>
<p>比如过了半年当再来看这一份清单的时候,就会发现 freenom 提供的免费域名被收回了,之前也曾经推荐的 <a href="https://blog.einverne.info/post/2022/08/planetscale-mysql-service.html">PlanetScale</a> 将在 2024 年 4 月 8 号取消 Hobby 套餐,而 MailGun 也大幅度收窄了免费的额度。如果想要使用 PlanetScale,最低档的就是 39 USD 一个月,那如果你的应用构建于此,那必然要面临一个艰难的选择。我之前有一些自己和朋友的 21 天计划服务就放在了 PlanetScale 上,没有多少流量,所以我也不会为此付费订阅。但好在我的数据不是很多,使用 DataGrip 迁移一下就行了。并且在迁移的过程中我还发现了 PlanetScale 存在的问题,就是它并不支持 mysqldump,必需使用它专属的 cli 才能导出数据。而如果一旦服务数据量比较多,想必迁移起来就麻烦很多了。同样的,上述的所有服务虽然看起来入门是 0 USD,但其实很多服务的收费第一档就非常昂贵。</p>
<p>所以为什么我自己创建了 EV Hosting 的服务,也是因为来自我自己的需求,我有一些小网站需要一些邮件发送服务,比如给注册用户发送邮箱验证,比如我有一些静态或动态的网站需要托管,当然 GitHub Pages,Cloudflare Pages,Vercel,<a href="https://blog.einverne.info/post/2018/03/netlify-to-host-static-website.html">Netlify</a> 等等都是非常不错的服务,托管自己的博客内容也完全没有问题,但同时也需要考虑比如 Vercel 的域名被屏蔽,GitHub Pages,Netlify 的访问速度等等问题。</p>
<p>首先我为了解决自己的托管和发邮件的问题,最早就是自建了 SMTP 和 Nginx 但我发现这个服务也能开放出来给有需求的用户用,然后就是域名的问题,不过域名的问题,我自己都是去 Google Domains(已被收购)和 Spaceship 上购买的,我建议大家先用 <a href="https://tld-list.com/">https://tld-list.com/</a> 进行比价,然后根据自己的情况来选择,现在 Cloudflare 也开放了域名注册,但我还没用起来,如果有使用感受也可以一起来分享。而我提供的域名注册服务通常来说是因为拿到了批量销售的折扣,我自己也会根据具体的促销价格来选择,我自己选择注册 .life 域名其事就是我自己拿到的售卖价格只要十几块人民币一年,已经非常便宜了,所以就直接买了一个。</p>
<h2 id="庆祝一周年">庆祝一周年</h2>
<p>为了庆祝一周年生日,现在针对独立开发者推出如下的套餐。</p>
<p><a href="https://client.einverne.info/order.php?step=1&productGroup=14&product=47">99 套餐</a> 内容包括</p>
<ul>
<li>2GB 独立域名邮箱 1 年</li>
<li>2GB 新加坡共享主机空间 1 年</li>
<li><a href="https://client.einverne.info/order.php?step=1&productGroup=13">域名注册九折优惠</a> 一年</li>
</ul>
<p><a href="https://client.einverne.info/order.php?step=1&productGroup=14&product=48">199 套餐</a>内容包括</p>
<ul>
<li>5GB 独立域名邮箱 1 年</li>
<li>5GB 新加坡共享主机空间 1 年</li>
<li><a href="https://client.einverne.info/order.php?step=1&productGroup=13">域名注册九折优惠</a> 一年</li>
</ul>
<h2 id="寻找同路人">寻找同路人</h2>
<p>我因为自己的需求所以维护了这样一套服务,如果你也是一位独立开发者,你也需要为你的早期项目接入邮件注册,也需要网站托管内容</p>
<p>如果你满足了如下的条件,欢迎<a href="https://blog.einverne.info/about.html">找我</a>,提供免费一年的 99 套餐。</p>
<ul>
<li>你愿意将你的项目主页地址公布到本文下方(GitHub Pull Request)</li>
<li>你愿意将 EV Hosting 以及官网链接放置到您的项目主页</li>
<li>你愿意根据使用至少贡献 2 篇关于 EV Hosting 使用相关的文章(至少 1000 字并配上至少 2 张图)并发布到<a href="https://docs.einverne.info/">EV Hosting 帮助文档</a> 或者一篇您自己的使用体验包括一个链接到官网主页</li>
</ul>
<p>Pull Request 格式</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>- [项目名字](项目地址)
</code></pre></div></div>
<p>使用的项目:</p>
将 Blogger 备份并转成 Markdown 导入 Obsidian
2024-03-05T00:00:00+00:00
https://blog.einverne.info/post/2024/03/blogger-backup-markdown
<p>这两天看到有人分享自己的密码管理方案是通过固定 Pattern 然后根据不同的网站设定一个随机可记忆字串来防止密码泄漏之后影响其他网站,于此同时也一定程度上可以摆脱密码管理器的约束。这也是我这 10 多年来的密码管理方案,虽然我还是会强烈推荐 Bitwarden,当一些重要的网站我还是会选择自己记住密码,并且加上二步验证保护安全,而其他网站则是通过密码管理器来管理。</p>
<p>但是我明明记得我写过一篇关于密码管理的文章,但就是怎么都没有找到,后来一想这已经是十年前写在 Blogger 上面的文章,于是突然想把沉积多年的 Blogger 内容备份出来,并转成 Markdown ,导入到 Obsidian,因为我一直认为只有被反复唤起(搜索)的内容才有价值。</p>
<p>既然有了这个目标,那么说干就干,首先是导出 Blogger 的内容,这一点在设置中,直接可以选择 Backup,下载获取到一个特殊格式的 XML 文件。</p>
<p>然后我用 Google 简单的搜索了一下 Blogger to Markdown,发现原来已经有人使用 NodeJS 实现过了。但代码直接运行有一些异常,打开代码看看,做了一下<a href="https://github.com/einverne/blog2md">修复</a>。</p>
<p>然后再运行命令,不到一分钟的时间就把 2010 年到 2019 年的内容转成了 Markdown。</p>
<p><img src="https://pic.einverne.info/images/Fxo2sAk_OP.png" alt="Fxo2sAk_OP" /></p>
<h2 id="blogger">Blogger</h2>
<p>在这个时间点又不免再感慨一下,Blogger 当年作为一个非常流行的博客平台,如今却半死不活,很多年没有更新,Google 内部可能也放弃维护了,并且非常无语的是,我登录了后台才发现,以前明明发布的内容,却告诉我有一些文章被 Blogger 自动取消发布了,说违反了社区规则,但我仔细地看了一下这几篇文章,是 2014 年发表的一篇《继续折腾 WNDR3800 之 shadowsocks》,这篇文章已经存在互联网上 6 年,但却告诉我在 2020 年违反了社区规则?实在没有搞懂 Google。</p>
<p><img src="https://pic.einverne.info/images/I_V2Ou3VaB.png" alt="I_V2Ou3VaB" /></p>
<p>我仔细的检查了一下文章内容,无非就是几行代码,以及一些 iptables 的配置,完全看不出任何违反社区规则的内容。
<img src="https://pic.einverne.info/images/tgMxnz8HSo.png" alt="tgMxnz8HSo" /></p>
<h2 id="一些感慨">一些感慨</h2>
<p>在把文件导出来之后,也看了几篇当时写的文章,感慨物是人非,那个时候我还是非常喜欢 Google,也会在第一时间去尝试 Google 的所有的服务,当时也写了很多 Google+ 的使用感受,当时也确实在 Google+ 认识了一些朋友,但后来的事情其实大家也都知道,自从 Google+,Google Reader 关闭以来,我就已经开始自主的脱离 Google 的生态,将所有我自己产生的数据慢慢地从 Google 从移走,Google Photo 等等。</p>
<p>而到了 2024 年,Google 突然遇到 OpenAI 的「劲敌」,至于 AI 是否会颠覆传统的搜索引擎,在这个时间还不好说,但可以肯定地说肯定会代替一部分的搜索流量,至于是否会影响到 Google 的广告业务,那也只能让我们拭目以待了。</p>
借助 BLEUnlock 实现 macOS 自动锁定
2024-03-02T00:00:00+00:00
https://blog.einverne.info/post/2024/03/mac-lock-screen-bleunlock
<p><a href="https://github.com/ts1/BLEUnlock">BLEUnlock</a> 是一款 macOS 上的自动化锁屏工具,可以通过 iPhone 或者 Apple Watch 和 macOS 的距离来锁定和解锁 macOS。</p>
<p>借助这款开源的工具,就可以非常方便地解决离开 macOS 忘记锁屏的问题。</p>
<h2 id="ble-devices">BLE devices</h2>
<p>BLE devices 指的是低功耗蓝牙设备。</p>
<p>BLEUnlock 的原理就是通过周期性发送信号的 BLE 设备,当蓝牙设备,比如 iPhone 设备,接近 macOS 系统时就会解锁,当发现 iPhone 远离的时候就会自动锁定。</p>
<h2 id="安装">安装</h2>
<p>直接通过 Homebrew 安装</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew install bleunlock
</code></pre></div></div>
<p>安装完成之后,可以在状态栏进行设定</p>
<ul>
<li>是否靠近时唤醒</li>
<li>唤醒时是否直接解锁</li>
<li>锁定时是否暂停播放</li>
<li>等等</li>
</ul>
<h2 id="缺点">缺点</h2>
<p>BLEUnlock 毕竟是通过蓝牙来进行通信的,所以可能会存在一定的不精确,尤其是在电脑附近行走时可能会对 macOS 产生干扰。</p>
我制作了一档播客《暮色时光》
2024-03-01T00:00:00+00:00
https://blog.einverne.info/post/2024/03/i-made-a-podcast
<p>我终于制作了一档播客《<a href="https://twilight-time.einverne.info/">暮色时光</a>》!</p>
<p>为什么说我终于制作了一档播客呢,这是因为早在 <a href="https://blog.einverne.info/post/2017/10/podcast-channels.html">10 多年前</a>我就已经是播客的听众,并且这么多年以来一直都有一个做一档播客的梦想,研究过如何<a href="https://blog.einverne.info/post/2016/10/podcast-hosting.html">托管 Podcast</a>,也自己尝试部署过一个 Podcast Feed,但过去的时间里一直没有找到一个合适的主题,周围也没有一个对播客感兴趣的朋友,故而一拖再拖。但和我写文章不一样,写文章是我单方面的输出,我也很少有机会得到反馈,博客的评论系统虽然也有一些朋友会给我留言但还是少数。但是播客不一样,它是一个两方面的交流,他是两种思想和声音的碰撞,截止到现在播客已经做了三期,播客的存在让我知道有了一个新的探索方向,也让我能够和很久没有聊天的朋友可以坐下来一起聊聊。</p>
<h2 id="播客的定位">播客的定位</h2>
<p>暮色时光播客在最初的时候,我就给自己起了一个标题,就是朋友之间的闲聊,我会定下来每一期的主题和想要聊的大致方向,让整个播客有一个框架,有一个中心的话题,但交流的过程中也会调整话题的方向。</p>
<p>制作播客的初衷:</p>
<ul>
<li>帮助自己提升表达能力,寻找未来的方向</li>
<li>促进和朋友的关系</li>
<li>寻找更多和我们关注话题相似的朋友</li>
<li>分享我们的想法和见解,与更多人进行交流和互动</li>
</ul>
<h2 id="播客内容">播客内容</h2>
<p>在《暮色时光》播客中,我们会聊一些我们感兴趣的话题,比如科技、文化、旅行、生活经验等等。每一期都会有一个主题,围绕这个主题展开讨论,同时也会有一些杂谈和随想。我希望通过这个播客,能够让大家更了解我们,也能够启发大家的思考,并且希望能够和更多人建立联系。</p>
<h2 id="结语">结语</h2>
<p>这档播客虽然只是刚刚开始,但也是多年之后终于迈出的一步,也希望我可以通过这个节目认识到更多志同道合的朋友,如果你对这个播客感兴趣,欢迎关注我们的 <a href="https://twilight-time.einverne.info/">网站</a> ,也非常欢迎给我们留言反馈和建议。谢谢!</p>
<p>如果有任何小伙伴对播客感兴趣或者愿意一起聊聊天也欢迎来<a href="https://gtk.pw/wechat">找我</a>。</p>
几个用户登录验证方案
2024-02-29T00:00:00+00:00
https://blog.einverne.info/post/2024/02/user-login-auth-solutions
<p>用户系统,登录验证几乎是每一个 SaaS 系统必备的入口功能,前两天在 Twitter 上看到有人自己设计的用户登录验证系统,因为瞬时使用的人太多,直接把登录入口打挂掉了,所以我就整理一下这篇文章,来看看如何快速的设计并使用用户登录验证系统。</p>
<p>我所了解的几个方案:</p>
<ul>
<li>使用成熟的 [[BaaS]] (Backend-as-a-Service)方案,比如商业的 [[Firebase]],或者开源的 [[Supabase]],以及我之前介绍并在使用的 [[Appwrite]] 等等</li>
<li>[[Clerk]] 最全面的用户管理平台</li>
<li>React Next.js 下的方案 [[NextAuth.js]]</li>
</ul>
<h2 id="baas">BaaS</h2>
<p>关于 BaaS 之前在我的笔记中其实也整理过一些,比如 PHP 编写的 <a href="https://blog.einverne.info/post/2022/10/appwrite-usage.html">Appwrite</a>, Go 语言编写的 <a href="https://blog.einverne.info/post/2023/01/pocketbase-baas-with-litestream-build-webapp.html">PocketBase</a> ,这一些都是可以自行托管,并且完全开源的项目,如果你寻求一些更商业化的项目,也可以考虑 Google 的 [[Firebase]] 或者社区商业化维护的 [[Supabase]]。</p>
<p>并且如果以 BaaS 或者 Firebase alternative 为关键字去搜索,也能找到非常多的实现方案,几乎每个语言都实现了一遍用户登录验证的方案。</p>
<h2 id="clerk">Clerk</h2>
<p><a href="https://clerk.com/">Clerk</a> 给自己打的广告就是「最全面的用户管理方案」,作为一个创业公司,Clerk 给出的免费额度还是非常充足的。</p>
<p>免费一档的套餐,可以每个月有 10000 个活跃用户,这里的活跃用户指的是登录 24 小时之后再次登录的用户,如果用户没有再访问就不会记录为活跃用户。</p>
<p><img src="https://pic.einverne.info/images/2yfDn9jp_v.png" alt="2yfDn9jp_v" /></p>
<h2 id="nextauthjs">NextAuth.js</h2>
<p><a href="https://next-auth.js.org/">NextAuth.js</a> 是一个专门为 Next.js 而设计开发的用户登录验证系统,提供了前后端的实现,并且可以托管在 Serverless ,后端也可以搭配多个数据库使用,比如 MySQL,PostgreSQL,MSSQL,Mongo 等等,直接利用我之前介绍过的 <a href="https://blog.einverne.info/post/2022/08/planetscale-mysql-service.html">PlanetScale</a> 也是可以的。</p>
<p>NextAuth 是一套完全开源的解决方案,借助一些 Serverless 的平台和 Cloud Database 也可以做到非常低的成本实现用户登录方案。</p>
总结一下 Fediverse 下的有趣的平台
2024-02-22T00:00:00+00:00
https://blog.einverne.info/post/2024/02/fediverse
<p>联邦宇宙(Fediverse)是一个由一系列自由软件组成的、相互连接的服务器网络,用于社交媒体、博客、文件托管和其他现代网络活动。这个名字是由“联邦”(Federation)和“宇宙”(Universe)两个词组成的谐音。</p>
<p>在联邦宇宙中,每个服务器都是独立运行的,并且可以根据用户的需要进行定制。这与传统的社交媒体平台不同,后者通常由大型公司运营并拥有。</p>
<p>联邦宇宙的主要优势包括:</p>
<ul>
<li><strong>去中心化:</strong>联邦宇宙没有中央认证机构,这意味着更具弹性和抗审查性。</li>
<li><strong>互操作性:</strong>联邦宇宙中的不同服务器可以使用开放标准进行通信,这意味着用户可以在不同的平台之间无缝地进行交流。</li>
<li><strong>隐私:</strong>联邦宇宙中的用户通常拥有更多对自己数据的控制权,因为他们可以选择将自己的数据存储在他们信任的服务器上。</li>
</ul>
<p>本博客之前也陆陆续续分享过一些基于 Fediverse 的服务和平台,比如 <a href="https://blog.einverne.info/post/2022/04/install-mastodon-by-docker.html">Mastodon</a>,<a href="https://blog.einverne.info/post/2020/02/music-manager-nas-funkwhale.html">Funkwhale</a> 但当时就是以一个单纯的 #self-hosted 服务分享,并没有过多的介绍 Fediverse,所以这里就再总结一下这个联邦宇宙下还有哪一些有趣的服务。</p>
<p>如果有兴趣也欢迎使用我维护的 <a href="https://m.einverne.info">Mastodon 节点</a>。</p>
<h2 id="开放平台">开放平台</h2>
<p>联邦宇宙中的流行平台包括</p>
<p>文字</p>
<ul>
<li>[[Mastodon]] 长毛象,一个类似 Twitter 的微型社交平台</li>
<li>[[Misskey]] 一个微博平台,重在定制</li>
<li>[[Pleroma]] 资源占用比较低的社交平台</li>
<li>[[Firefish]] 从 Misskey fork 而来</li>
<li>[[Plume]] 可互动的博客写作平台</li>
<li>[[WriteFreely]] 一个使用 Go 语言编写的写作平台</li>
<li>[[BookWyrm]] 一个书籍阅读讨论分享平台</li>
</ul>
<p>图文</p>
<ul>
<li>[[Pixelfed]] 一个图文分享平台</li>
</ul>
<p>音乐</p>
<ul>
<li>[[Funkwhale]] 一个音乐交流平台</li>
</ul>
<p>视频</p>
<ul>
<li>[[PeerTube]] 一个视频分享平台</li>
</ul>
<p>直播</p>
<ul>
<li>[[owncast]] 一个直播平台</li>
</ul>
<p>社区</p>
<ul>
<li>[[Lemmy]] 一个以链接为中心的社区</li>
</ul>
我在权益投资市场中犯过的几个错误
2024-02-20T00:00:00+00:00
https://blog.einverne.info/post/2024/02/a-few-mistakes-i-made-in-the-equity-market
<p>一直以来就有一个「话题」萦绕在我的脑海里面,那就是总结回顾一下我过去不长的了解,观察,试水权益市场(证券,期权,基金等)的经历已经在这个市场中犯过的几个致命的错误。</p>
<p>我的投资经历时间不是很长,至今可能也只有 5 年多一点,但是这五年里面,</p>
<p>过去的 5 年时间里面我很少去谈论股票投资,虽然也单独地开了<a href="https://invest.einverne.info/">EV 投资笔记</a> 的博客,但是其实真正去了解一个公司,并下重注的场景并不是很多,我把我自己当作一个初学者,门外汉,毕竟我并不是金融,经济专业,大部分的知识,也都是我从这从那,从朋友的聊天,从书里面,一点点学习的。曾经有一年,我以证券,期权为关键字,几乎看了当时还在的 Kindle 市场里面所有相关的电子书,我花去了半年的时间学习理论, 之后才真正地去市场上买卖期权,当然那个时间点上虽然是疫情,但美股却上涨得异常凶猛,所以也让我曾经一度误以为将期权的知识比较牢靠的掌握了,毕竟最初购买的两笔 Call 就让我翻了 4 倍和 3 倍,并且也让我的证券账户两年的时间从 3000 美元变成了最高 15000 美元,但正向波动率大,反向的波动也大,当美股中的中概股被重新估值,我也见证了我的账户高达 90% 的亏损,虽然中间我有好几次机会可以使用 [[Buy Put]] 来锁定下行,但是我却做了 [[Sell Covered Call]] 的操作,虽然赚取了一点蝇头小利,但也让正股的亏损不断扩大。所以也正好借此机会来回顾我过去犯过的错误,也写一些总结留给我自己做教训。</p>
<h2 id="不要再重仓一两只波动性非常高的股票">不要再重仓一两只波动性非常高的股票</h2>
<p>无下限的波动,让我注意到了「分散」的重要性,也明白了为什么巴菲特推荐一般人就直接买大盘指数 ETF,把所有的资金只投入一两只波动非常高的股票时,虽然可能会获得「高收益」,但与此同时带来的「高风险」也需要能够承受。中概股在过去 2 年的时间内的跌幅大家也能看到,忽视市场对资产的定价是我犯过的另外一个错误,但如何「估值」「定价」本来也是非常复杂的一个思考路径。但是我想说的是,如果我进行分散投资,比如去购买中概股整体的 ETF,配合 S&P 500(标普 500),QQQ(纳斯达克 100 指数),那么也不可能发生跌幅打到 90% 的情况。更甚至如果搭配一些其他国家的 ETF,比如日经 225 等等,可能收益率会更加好看一些。说到这个地方,我也才意识到,为什么在日本售卖最多的 <a href="https://japan.einverne.info/p/157.html">NISA</a> 产品就是全世界以及 S&P500 等产品,直接购买大盘指数风险以及波动性会被平均很多,当然与此同时也收益率也会被平均。当去购买大盘指数的时候也只有发生系统性的市场奔溃也才会出现 90% 的亏损情况吧,但想要能够超出市场平均水平的收益,那么显然还需要通过一些搭配组合。</p>
<h2 id="价值投资和投机">价值投资和投机</h2>
<p>当我现在来回忆我过去购买个股的经历,就又让我想起了那本著名的 [[随机漫步的傻瓜]],我所有的操作都想是在这个市场中随机漫步,踩中了,有非常好的收益,再走着走着就掉到了坑里面。</p>
<p>那很多人说的价值投资和投机的区别到底在于什么地方,我个人的理解来说,当我没有一个坚定的信念,更随着自己的意识购买的时候就和投机没有什么区别了。而价值投资则是去判断价格与价值的偏离,而对于我来说去判断一个公司的内在价值的时候就又遇到了难题。所以曾经有一段时间我就去看我在使用什么,我周围的朋友在使用什么公司的产品,然后我用最普通的估值手段,就是对比估值,找一家相近的公司,去看他们的市值差别,然后去买那个便宜的公司。虽然我借着这个最简单的模型,让我压中了索尼(SNE),Cloudflare(NET),但也正是因为不太能坚守自己的判断,没有获得那个最大的收益,而早早地就卖掉了。</p>
<p>于是之后我就一再的问自己,如果要去买一家公司,我愿意拿住 10 年不卖吗?前两天在 Twitter 上看到一个日本网友分享自己从十年前自己了解机器学习开始就关注 Nvidia 的股票,并且深刻地认识到了 Nvidia 在 AI 领域的无限潜力,于是从二〇一几年开始就开始买入 Nvidia,直到最近 Nvidia 市值超过 Amazon 的时候,已经拥有了超过 80 倍的收益,150 万日元的收益,变成了 1 亿多资产。可是我问自己,我很早就能看到 Nvidia,但那个时候只是把他作为一个游戏显卡公司(以我的认知),而在 2019 年,2020 年我有多个机会想要了解一下 Nvidia 这家公司,但依然还是没有坚定的信念,于是日子就一天天过去了。</p>
<p>我时长在和朋友聊天的过程中感慨,错过了 2023 年的日经指数,虽然我已经准备好了证券户口,也入金了,但却没有购买,看着任天堂从 6900 涨到了 8200 JPY,我也错过了 BTC 从 20000 USD 涨到 50000 USD,更甚至错过了很多「机会」,但我也告诫我自己,不去后悔追悔已经发生的事实,赚不到认知之外的钱,这句老话又在我的脑海里响起。</p>
<h2 id="小道消息">小道消息</h2>
<p>在刚刚进入证券市场的时候,我常常会问金融行业的朋友,最近买些什么,在最初的时候,也常常会跟着别人(这种途径)去跟投,但是时间久了之后,我就发现,虽然朋友会有一些推荐是不错的,比如上面也提到过的 Nvidia,也有在 18,19 年就说过的 BTC,但是也有推荐过腾讯音乐一类跌得非常多的标的。</p>
<p>所以当我意识到我不应该根据别人的选择或者情绪来寻找自己的标的之后,我就再不会再根据他们的建议来买卖,反而是我也会一起讨论,然后从中发现新的机会,当然这都是建立在自己分析,研究之后的。</p>
<h2 id="积累本金">积累本金</h2>
<p>过去 5 年,我可以告诉我自己,如果全亏完了,那也就当是一笔学费了,但是我没有预料到的是这断断的五年间我所经历的,美股疫情间的大牛市,以及之后的百年一遇的连续三次熔断,很多人说只有经历过一轮牛熊之后才能成长,对于我来说可能也是这样的,我认识到我自己的不足,也认识到了波动可能带来的不安。所以当下我能做的就是尽量的累积本金,尽量地通过学习知识来补足自己不明确的地方。和朋友聊天的时候在内心也计算过,如果要达到一个高收益,那么有一个很简单的计算公式,那就是本金乘以波动率。市场和标的选择会影响波动率,但是对结果影响更大的是其实是本金。</p>
<p>有些时候想想还挺「不公平」的,就像德州扑克一样,在场上拥有筹码多的人更有话语权,在证券市场上其实也是一样的,我在操作期权买卖的事后,尤其是在 Sell Covered Call 的时候常常再想,如果我拥有更多的正股,那么其实操作的空间更大。更不用说在虚拟货币的世界里面,可以通过质押,等等方式让钱通过抵押的方式产生钱。而一个巨大的本金本身就是一个能下金蛋的鹅。</p>
<h2 id="成为真正的长期主义">成为真正的长期主义</h2>
<p>真正的 [[长期主义]] 是到底是什么,就如我的经验,虽然我可以在两年的时间内将每年的年化收益率达到 100%,但是时间拉长,收益率反而是负数的。那么长期主义就是将目光放远,用上面我得出的所有经验,制定长期的投资策略。避免短期的情绪影响;将目光放到 10 年以后;不再频繁交易;选择「好公司」,长期持有。</p>
<p>而当前的目标自己,我自己根据自己的情况做一下记录。国内市场,虽然现在不稳定的因素还挺多,但是还是坚持定投中证红利,以及沪深 300;港股里面还有一些钱,做一些科技股的定投吧;而日经 10 年期的目标就是将 <a href="https://japan.einverne.info/p/157.html">NISA</a> 额度充分利用,每年 120 万日元,买点日经 225,再买点 SP 500;美股则是一个重点关注的目标,虽然现在指数个人感觉也已经很高了,但还是希望能用一些手段进行对冲,做好风险管理。</p>
新加坡盈立证券开户及通过 OCBC 入金
2024-02-16T00:00:00+00:00
https://blog.einverne.info/post/2024/02/usmart-securities-firm
<p>盈立证券是一家持牌的香港互联网券商,为全球投资者提供美股、港股、A 股、美股期权等金融产品交易服务。</p>
<p>盈立证券成立于 2014 年,总部位于香港,在新加坡、美国、台湾等地设有分支机构。公司拥有一支经验丰富的金融科技团队,致力于为投资者提供安全、便捷、智能的投资服务。</p>
<h2 id="优点">优点</h2>
<p>安全性上:</p>
<ul>
<li>交易便捷:支持多种交易方式,包括移动端、PC 端、API 等。</li>
<li>功能强大:提供实时行情、智能条件单、美股碎股交易、美股期权交易等功能。</li>
<li>安全可靠:持有香港证监会认可并授予的 1、4、9 号牌照,严格遵守香港金融法规。</li>
</ul>
<p>在价格上:</p>
<ul>
<li>佣金低廉:美股交易佣金低至 0.003 美元一股,港股交易佣金低至 0.024% * 成交金额,美股期权交易佣金低至 0.30 美元每张合约。</li>
</ul>
<p>在功能上:</p>
<ul>
<li>提供多种期权交易策略,比如 [[Sell Covered Call]] (备兑期权),垂直差价策略</li>
<li>支持 SPX,VIX 等指数期权交易</li>
<li>0 佣金外汇交易,提供超过 80 种外汇货币对、低至 0.5 点的点差、毫秒级执行速度,只需要 20 USD 就可以进行交易</li>
<li>网格交易</li>
<li>提供今日热点,智能定投,智能下单,精选策略等等信息</li>
<li>闲置资金可以享受高达 4.8% 年化的收益,保本收益</li>
<li>支持全球银行转账,香港 FPS,[[Wise]] 等方式入金
<ul>
<li>新加坡币,[[eGIRO 入金]],[[PayNow 入金]],[[Fast 入金]],[[Wise]] 入金,[[BigPay]] 入金,银行转账入金</li>
<li>电汇入金(美元和港币),Wise 入金,BigPay 入金,银行账户转账入金</li>
</ul>
</li>
</ul>
<h2 id="费用">费用</h2>
<ul>
<li>美股期权 0 佣金和平台费</li>
</ul>
<h2 id="sg-vs-hk-区别">SG vs HK 区别</h2>
<p>到应用市场搜索 uSMART 或者 盈立证券会发现在 App Store 中有两个,一个图标中带有 SG,一个图标中带有 HK,这两个应用分别是新加坡盈立和香港盈立。可以根据自己的情况选择开设哪里的账号,如果你有 OCBC 那么可以选择 SG,如果有港卡那么可以选择 HK。</p>
<h2 id="提前准备材料">提前准备材料</h2>
<p>如果你是新加坡国民,那么直接是新加坡的身份开户即可。</p>
<p>如果是中国大陆的居民,可以直接使用身份证作为验证材料。</p>
<ul>
<li>身份证(需要拍照)</li>
<li>地址证明(可以是银行对账单,水电单等等)</li>
</ul>
<h2 id="开户">开户</h2>
<p>下载 uSMART 盈立证券 App,输入邀请码 7urg,或者点击<a href="https://gtk.pw/usmart">链接</a> 开户。</p>
<p>如果选择应用开户,那么在 uSMART SG app 里,选择「开户」,然后在弹出的窗口中选择「开户」,之后按照上面的要求填写自己的资料即可。</p>
<p><img src="https://pic.einverne.info/images/FT48dafBfO.png" alt="FT48dafBfO" /></p>
<h2 id="ocbc-入金">OCBC 入金</h2>
<p>如果还不知道 OCBC 是什么,可以参考我<a href="https://blog.einverne.info/post/2023/11/ocbc.html">之前的文章</a>,介绍了 OCBC 华侨银行,以及完全在线开户的流程。如果遇到问题也可以通过页面最后的 Telegram 加入群组一起讨论。</p>
<p>入金的过程比较简单,和大部分的香港证券账户一样,[[香港券商]]有 [[银证转账]], [[FPS 转数快]],[[eDDA 快捷入金]],电汇 等等方式,新加坡有自己独有的 [[eGIRO]] 系统,FAST 支付系统等等。</p>
<p>在详细说明 OCBC 入金之前,先来了解一下新加坡券商的入金方式。</p>
<h3 id="egiro">eGIRO</h3>
<p>eGIRO 是新加坡本地的电子支付,清算系统,全称是 Electronic GIRO。这里 GIRO,全称是 General Interbank Recurring Order,用来处理定期付款,比如缴费,电话费,停车费等等费用。GIRO 早在 1984 年就出现了,2001 年在新加坡金融管理局(MAS) 的推动下,出现了新加坡的 [[ACH]],叫做 [[eGIRO]],支持通过在线的方式完成。</p>
<h3 id="paynow">PayNow</h3>
<p>[[PayNow]] 是新加坡的实时支付网络,由新加坡银行协会 (ABS) 管理,新加坡金融管理局 (MAS) 监督。消费者和企业可以使用手机号码、新加坡国民身份证号或外国人身份证号、公司注册号 (UEN) 或虚拟支付地址(VPA 用于 NFI 账户,即电子钱包)来注册服务。然后,用户可以通过 FAST 网络从一个银行/电子钱包账户转账至新加坡的另一个银行/电子钱包账户(仅限新元),FAST 网络是一个受监管的标准支付渠道,能够确保支付提供商顺利互通。</p>
<h3 id="fast">FAST</h3>
<p>[[FAST]] 于 2014 年 3 月 17 日推出,是新加坡的电子资金转账服务,让参与银行的客户几乎可以即时将新元资金从一家银行转到另一家新加坡银行。FAST 这种转移是安全的,而且一周 7 天、每天 24 小时都可以使用。用户可以在每笔交易中进行最高 20 万新元的银行间资金转账。</p>
<p>FAST 的优点就是即使到帐,非常类似于香港的 FPS。</p>
<h3 id="wise">Wise</h3>
<p><a href="https://blog.einverne.info/post/2023/02/wise-register-and-usage.html">Wise</a> 是一家成立于英国专注于汇款的互联网公司。如果使用 Wise 入金盈立可能需要一定的手续费。</p>
<h3 id="bigpay">BigPay</h3>
<p>BigPay 是马来西亚航空公司 AirAsia 于 2018 年推出的电子钱包,不设任何会员费或帐户维护费,还附带一张免年费的预付卡,只要透过信用卡、银行卡或现金充值后就能使用。因为本人没有该支付,具体的操作步骤可以参考官网。</p>
<h3 id="ocbc-入金-1">OCBC 入金</h3>
<p>最后总结,OCBC 支持 eGIRO,虽然慢一些,但也能用,如果有 PayNow 或者 FAST 等方式,也可以尝试一下。</p>
<h2 id="related">related</h2>
<p>如果有人感兴趣也可以留言,我可以介绍一下香港券商,比如老虎证券,富途证券,华泰证券以及 Longbridge [[长桥证券]]的使用。</p>
使用 PlanetScale 以及 Docker 搭建网站分析 Umami
2024-02-15T00:00:00+00:00
https://blog.einverne.info/post/2024/02/umami-planetscale-web-analytics
<p><a href="https://umami.is/">Umami</a> 是一个可以自托管的数据统计服务,可以用来代替 [[Google Analytics]]。 “Umami”,源于 “Umai”,在日语里是“美味、鲜味”的意思。</p>
<p><img src="https://photo.einverne.info/images/2023/05/17/92m2.png" alt="92m2" /></p>
<h2 id="安装">安装</h2>
<p>默认情况下官方推荐的是使用 [[PostgreSQL]] 来作为数据库,可以参照如下的安装。</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt -y update
apt -y install curl git nginx python-certbot-nginx
curl -sSL https://get.docker.com/ | sh
systemctl enable docker nginx
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
git clone https://github.com/mikecao/umami.git
cd umami/
# edit docker-compose.yml
</code></pre></div></div>
<p>修改:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>version: '3'
services:
umami:
image: ghcr.io/mikecao/umami:postgresql-latest
ports:
- "127.0.0.1:3000:3000" # 仅监听在本地
environment:
DATABASE_URL: postgresql://username:password@db-umami:5432/umami # 配置数据库用户和密码
DATABASE_TYPE: postgresql
HASH_SALT: replace-me-with-a-random-string
depends_on:
- db-umami
db-umami:
image: postgres:12-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: username # 数据库用户
POSTGRES_PASSWORD: password # 数据库密码
volumes:
- ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
- umami-db-data:/var/lib/postgresql/data
volumes:
umami-db-data:
</code></pre></div></div>
<p>然后执行:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker-compose up -d
</code></pre></div></div>
<p>配置 Nginx 反向代理:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>server {
listen 80;
server_name umami.yourdomain.com; # 换成你的域名
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
</code></pre></div></div>
<h2 id="使用-planetscale">使用 PlanetScale</h2>
<p>但是我为了避免再维护一套数据库,所以使用了之前介绍过的云端 MySQL 兼容数据库 <a href="https://blog.einverne.info/post/2022/08/planetscale-mysql-service.html">PlanetScale</a> 。</p>
<p>安装过程参考<a href="https://github.com/einverne/dockerfile/tree/master/umami">这里</a></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/einverne/dockerfile.git
cd umami
cp env .env
# modify .env
docker-compose up -d
</code></pre></div></div>
<p>然后根据自己的需求,使用 Nginx ,或者直接 [[Nginx Proxy Manager]],配上域名就完成了。</p>
<h2 id="related">related</h2>
<ul>
<li>[[Plausible Analytics]]</li>
</ul>
我购买了一张免月租的英国手机卡 GiffGaff
2024-02-13T00:00:00+00:00
https://blog.einverne.info/post/2024/02/i-bought-giffgaff
<p><a href="https://gtk.pw/giffgaff">giffgaff</a> 是一家来自英国的低成本移动运营商,隶属于英国三大运营商之一的 O2 旗下。成立于 2009 年的 giffgaff,以无实体店面、无客服热线、灵活套餐等特色服务,为用户提供高性价比的移动体验。giffgaff 特别适合短期去英国的游客以及英国留学生,giffgaff 也支持全球漫游。</p>
<h2 id="为什么要申请-giffgaff">为什么要申请 Giffgaff</h2>
<ul>
<li>免费申请,免邮费,零月租使用,免费接受短信,维护成本比较低</li>
<li>支持全球激活和漫游</li>
<li>180 天消费一次即可一直使用</li>
<li>可以接受境外的短信,可以用来注册账号,也支持境外的银行短信</li>
<li>支持 eSIM 卡</li>
</ul>
<h2 id="缺点">缺点</h2>
<ul>
<li>通话和流量比较贵,通话 1 英镑每分钟,流量 0.2 英镑每兆,短信 0.3 英镑</li>
<li>挂断电话也是需要收费的</li>
<li>每 180 天需要发送一次短信进行保号</li>
</ul>
<h2 id="申请方式">申请方式</h2>
<ul>
<li>直接<a href="https://www.giffgaff.com/">官网申请</a>,日本的地址一周左右收到</li>
<li>其他转运方式</li>
</ul>
<h2 id="激活">激活</h2>
<p>访问 https://giffgaff.com/activate 然后按照上面的提示,输入激活码。然后输入邮箱注册账号,进行到下面一步的时候,选择 Pay as you go。</p>
<p><img src="https://pic.einverne.info/images/F9UahHr9m3.png" alt="F9UahHr9m3" /></p>
<p>激活时需要 Visa 或 Mastercard 来进行最低 10 英镑的充值。首次充值不支持 PayPal,后续可以使用。</p>
<p>充值成功之后会获得一个随机的号码,是一个 10 位的号码,一般首位为 0 。</p>
<p>英国的国际区号是 +44,所以如果要给此手机号发送短信,需要在前面添加。</p>
<h2 id="如何保持手机号">如何保持手机号</h2>
<p>180 天之内消费一次就可以一直使用该号码,最直接的就是每 180 天给 Google Voice 发送一次短信。</p>
<h2 id="总结">总结</h2>
<p>如果觉得 GiffGaff 不错的话,可以点击我的邀请<a href="https://gtk.pw/giffgaff">链接</a> ,使用我的邀请链接首次充值可以多 5 英镑。</p>
每天学习一个命令:高级日志查看工具 lnav
2024-02-10T00:00:00+00:00
https://blog.einverne.info/post/2024/02/the-logfile-navigator-lnav
<p><a href="https://lnav.org/">The Logfile Navigator</a> 是一个高级的日志查看工具,后面简写为 lnav。</p>
<p>早上在看 [[Logdy]] 的时候(一款可以将终端的输出 (stdout)发送给浏览器 UI 界面,在可视化界面中检索浏览的开源工具),在作者发帖的讨论中,看到有人推荐 lnav 这一款工具,在本地开发的时候,用 lnav 来查看日志。<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup></p>
<p>在不知道 lnav 之前,我一直都是使用 tail -f, less, zless, more 来查看日志的,但是 less 这一些工具都是不带高亮的,所以每一次都需要通过搜索来找到自己的想要的内容,但看到 lnav 的介绍立即就看到了 lnav 的高亮显示,立马就尝试了一下。</p>
<h2 id="特性">特性</h2>
<ul>
<li>根据日志内容自动高亮 ERROR 等等关键字</li>
<li>自动滚动刷新</li>
<li>根据正则表达式过滤内容,比如查询 IP 地址等等情况</li>
<li>使用 SQL 查询</li>
</ul>
<h2 id="安装">安装</h2>
<p>Ubuntu 下</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install lnav
</code></pre></div></div>
<h2 id="使用">使用</h2>
<p>完整的命令行参数</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>❯ lnav -h
usage: lnav [options] [logfile1 logfile2 ...]
A curses-based log file viewer that indexes log messages by type
and time to make it easier to navigate through files quickly.
Key bindings:
? View/leave the online help text.
q Quit the program.
Options:
-h Print this message, then exit.
-H Display the internal help text.
-I path An additional configuration directory.
-H Display the internal help text.
-I path An additional configuration directory.
-i Install the given format files and exit. Pass 'extra'
to install the default set of third-party formats.
-u Update formats installed from git repositories.
-C Check configuration and then exit.
-d file Write debug messages to the given file.
-V Print version information.
-a Load all of the most recent log file types.
-r Recursively load files from the given directory hierarchies.
-R Load older rotated log files as well.
-t Prepend timestamps to the lines of data being read in
on the standard input.
-w file Write the contents of the standard input to this file.
-c cmd Execute a command after the files have been loaded.
-f path Execute the commands in the given file.
-n Run without the curses UI. (headless mode)
-q Do not print the log messages after executing all
of the commands or when lnav is reading from stdin.
Optional arguments:
logfile1 The log files or directories to view. If a
directory is given, all of the files in the
directory will be loaded.
Examples:
To load and follow the syslog file:
$ lnav
To load all of the files in /var/log:
$ lnav /var/log
To watch the output of make with timestamps prepended:
$ make 2>&1 | lnav -t
Version: lnav 0.8.5
</code></pre></div></div>
<p>直接查看日志文件</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>lnav /path/to/file.log
</code></pre></div></div>
<p>进入 lnav 之后还有一些快捷键,可以使用 <code class="language-plaintext highlighter-rouge">?</code> 呼出帮助。</p>
<p>和 Linux 下大部分交互的工具一样,lnav 也遵循了一直的交互逻辑</p>
<ul>
<li>g, 到文件第一行</li>
<li>G, 到文件最后一行</li>
<li>space, 下一页</li>
<li>b/bs, 上一页</li>
<li>j, 下一行</li>
<li>k, 上一行</li>
<li>h, 向左移</li>
<li>l, 向右移动</li>
<li>e/E, 上一个,下一个 error</li>
<li>w/W, 上一个,下一个 warning</li>
<li>f/F, 下一个,上一个文件</li>
<li><code class="language-plaintext highlighter-rouge">/</code>,检索</li>
<li>n/N, 上一个下一个检索结果</li>
</ul>
<p>可以看到上面的这些快捷,基本上和 Vim/less 的一致。</p>
<p>还有一些调整显示的选项</p>
<ul>
<li>i,开启显示日志直方图</li>
<li>t,开启或关闭 text file view</li>
</ul>
<p>检索语句</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">:<command></code> 执行内部命令,具体的命令可以查看帮助文档,或者阅读 <code class="language-plaintext highlighter-rouge">?</code> 中的文档
<ul>
<li><code class="language-plaintext highlighter-rouge">:goto 2 hour ago</code></li>
<li><code class="language-plaintext highlighter-rouge">:goto 12:00</code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">;<sql></code>,执行 SQL 检索</li>
</ul>
<div class="footnotes" role="doc-endnotes">
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://news.ycombinator.com/item?id=39277079">https://news.ycombinator.com/item?id=39277079</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">↩</a></p>
</li>
</ol>
</div>
关于 Duolingo 学语言的一点思考
2024-02-10T00:00:00+00:00
https://blog.einverne.info/post/2024/02/duolingo-thinking
<p>关注我博客的人应该也知道,我最近在<a href="https://japanese-learning-notes.einverne.info/">学日语</a>, 今天早上打卡 [[Duolingo]] 发现还差一天完整一年,但其实去年因为搬家中途中断了几天,否则应该时间更长。</p>
<p>但其实我很早就使用 Duolingo,先后在上面学习过英语,韩语和日语。所以今天早上就来简单的讲一讲我的体验。</p>
<p><img src="https://pic.einverne.info/images/KBsm6uSyRw.jpg" alt="KBsm6uSyRw" /></p>
<p>一句话总结的话就是,单纯使用 Duolingo 我个人的感觉是没有太大的用处的,最多能够对常用的句式,单词有一个基础的概念。但这并不表示 Duolingo 没有实际用处,相反我认为 Duolingo 可以很好的配合枯燥的语法课,以及可以克服初期学语言没有办法融入那个语言环境的问题。通过 Duolingo 对基础单词句式的反复记忆,让自己能达到对日常所见所听,日常会话能脱口而出的状态,不再需要在脑海里面做语言的转换。</p>
<h2 id="学语言的两大困难">学语言的两大困难</h2>
<h3 id="缺乏兴趣">缺乏兴趣</h3>
<p>如果对一个语言没有任何兴趣,是很难学进去的,相反如果对一门语言有兴趣,那么其实很快就可以入门,反而是如果要达到流利水平需要花费更多的时间。在我们的日常生活中不乏那种因为追星可以从零将韩语学到母语者水平的人,也不乏那种因为喜欢动漫以及日本文化自学日语到 N1 的人。找到关心的那个点,比如我最早其实就是为了听韩语歌,我就想知道怎么搜索我所听到的那个歌,所以想要去了解韩语的发音,韩语怎么输入。</p>
<p>那么 Duolingo 是怎么解决这个兴趣问题的呢?就是将语言学习的知识变成通关游戏,用户面临的选择只有一个就是去通关,不再会那种想要学习一门语言,困难扑面而来的感觉,没有复杂庞大的语法知识,只有一只可爱的猫头鹰每天督促学习。</p>
<h3 id="无使用场景">无使用场景</h3>
<p>语言学习的另外一大问题就是,缺乏使用的场景,如果你身处在一个陌生国度,陌生的语言环境,那种本能的生存问题会逼迫你快速的进入那个语言环境,从我自身的经验而言,从最初来日本一句日语不会,到能够识别一些单词,很多都是在日常生活中积累的,比如我学习「东南西北」四个方向,就是从地铁的站名中学到的,我刚来日本的时候,每天都会经过一个站叫做「北千住」 きたせんじゅ,我就学会了「北」叫做 きた,后来又路过了南千住,就又记住了みなみ,再后来因为住的地方搬到了一个包含了「西」的车站附近,正好对称,西边的叫做 にし,东边的叫做 ひがし。再后来,比如我对数字 7 和 8 总是分不清楚,直到我去了一次体检,我拿到的号正好是 174,なな 的发音就再也忘不掉了。</p>
<p>但说实话,Duolingo 在这一点上,并不能解决「说」的问题,但是能解决「听」的问题,并且是构建了一个语言的场景,从最初的见面打招呼,到去餐厅吃饭,到了解这个语言的文化,到政治等等,在打关卡的过程中,循序渐进式的学习。</p>
<p>当然 Duolingo 只能说是一个语言辅助工具,我下面说一说我的建议。</p>
<h2 id="我的建议">我的建议</h2>
<p>所以综合我的经验来说,我的建议是,如果想学一门语言,首先使用 Duolingo 来先来体验一下这个语言,不需要花费很多的时间,就能够让你对这个语言有一个基础的了解。</p>
<p>然后每天坚持背单词,不需要刷很多,使用间隔空闲的时间记忆一下即可,为的是每一天能够唤醒记忆,将短时记忆变成长时记忆,即使每天只学习 10 个新单词,那么一年也能有 3650 个单词的量,那这已经是 N3 所要掌握的词汇量了。</p>
<p>当然背单词并不一定需要 Duolingo,我在我的<a href="https://japanese-learning-notes.einverne.info/">笔记</a> 中也曾经推荐过很多词典,比如桌面端的 GoldenDict,比如移动端的欧陆词典,MOJi 辞书等等,关键的是需要看到,查阅,再次看到,再了解,看到,知道。</p>
<p>Duolingo 可以很好的作为一个辅助工具,但和上面所说一样,我个人感觉只用 Duolingo 是不够的,尤其是在系统学习语言语法上来说。</p>
<p>所以我的建议是同时去其他地方补充语法知识,比如从视频教程中,和老师的一对一授课中。可以先将网络上那些已经整理好的知识点,在背诵 Duolingo 的时候,反复的问自己,这里是什么语法,然后我的经验就是,当发现 Duolingo 遇到瓶颈的时候,一般就是那个语法点没有掌握,这个时候赶紧补充点语法知识,如果语法知识超前了,那么我会发现我就能跳级了,在这样一个平衡过程中就能一点点的了解越来越多了。</p>
<p>最后分享一个因为语言发音而导致的搞笑<a href="https://www.bilibili.com/video/BV1av4y1V7Bf">视频</a>。</p>