black android smartphone displaying man in white shirt

macOS 如何从 Nintendo Switch 中复制截图

最近沉迷 Switch ,无法自拔。在游玩过程中,截图了不少游戏中的画面,想要将其分享给大家,自然需要能够将截图图片复制出来。而 Switch 使用的是 Micro SD 卡,想要复制图片需要单独准备一个读卡器,显然不如直接将 Switch 作为读卡器,借助 Switch 上的 Type C 接口,来完成图片的复制。

原理

在 Switch 当中,实现了一个名为媒体传输协议(MTP)的通信协议,只需要你在 macOS 当中安装支持该协议的软件,并将电脑与 Switch 相连,就可以实现将 Switch 作为读卡器读取其中的截图文件。

步骤

1. 安装 Android File Transfer

一个比较常用 & 简单的支持 MTP 协议的软件是来自 Google 官方为 Android 提供的 Android File Transfer

下载该软件并进行安装,安装完成后,打开软件,等待 Switch 链接。

2. 在 Switch 上进入复制模式

配置完 Android File Transfer,接下来拿出一根 Type C 数据线,将其插入 Switch 底部的充电口。

并开机,在 Switch 当中找到 「设置」—「数据管理」—「管理截图与视频」

在截图与视频管理中,找到「通过 USB 连接复制到电脑中」,点击这个选项。

随即 Switch 会进入到配对模式,看到如下界面,则说明已经配对成功。

对应的, Android File Transfer 也读取到了 SD 卡当中的截图文件。

其中:「其他」文件夹是你在系统界面截图得到的图片;而以游戏名命名的文件夹,则是各自游戏当中的截图。

接下来你就可以在其中找到你想要的截图,通过拖拽,将其拖到你本地的文件夹中进行查看了。

当你拷贝完成后,点击 Switch 上的「解除连接」,就可以安全退出 Android File Transfer,拔下数据线,继续开心的玩游戏了。

总结

我一开始以为 Switch 底层是 Android 改造的,后经推特上推友提醒,Switch 底层是任天堂自己开发的操作系统,只是兼容了 MTP 协议,所以特地在文章前加入了 MTP 协议的说明。

希望这个文章,可以帮到还在用 Switch 玩游戏的你。

computer screen displaying website home page

在 Next.js 中直接引入 SVG

随着 SVG 的兴起,过去使用雪碧图、IconFont 作为界面中图标用法已经过时。大家会更倾向于加载更加简单、空间占用更小、编写更容易的 SVG 作为图标的解决方案。

而 Next.js 同样对于 SVG 提供了支持。

最简单的加载方式 —— URL 加载

如果不希望对应用程序做任何的改进,一个最简单的方式是直接使用路径进行加载。只需要使用一个 img 标签,并设定 src 为 svg 文件的路径就可以了。

<img src="/logo.svg" alt="Logo SVG" />

不过,使用 URL 来加载的问题是,当你的文件夹路径和结构比较复杂的时候,你需要使用一个较长的路径来加载 SVG,比较麻烦。

当然, 你也可以简单的优化这个方案 —— 比如自行封装一个 svg component,支持传入文件名 & alt 文字和其他参数。这样在调用的时候只需要输入文件名即可。

最舒服的加载方式 —— 编程加载

在 Next.js 当中,如果你希望更加舒服的引入 SVG,那比较好的方案是使用 import 标签来进行引入。不过,由于 SVG 本身并不是一个标准的 React 组件,你需要在 Next.js 上安装插件来支持对 SVG 的解析。

加入对 SVG 的解析需要安装 @svgr/webpack 插件。执行如下命令安装插件。

# yarn
yarn add @svgr/webpack
# npm
npm install --save @svgr/webpack

安装完成后,修改 next.config.js添加相关的解析规则。

module.exports = {
  webpack(config) {
    config.module.rules.push({
      test: /\.svg$/,
      use: ["@svgr/webpack"]
    }); // 针对 SVG 的处理规则

    return config;
  }
};

修改后保存,便可以直接使用 import 语法来处理

import Logo from "../assets/logo.svg";


// usage
<Logo />

这样,你就可以直接将 SVG 作为一个 Component 引入,并使用你熟悉的 React Componet Props 来修改这个 Component 的各项属性。

总结

在这篇文章中,分享了两种在 Next.js 的方法,你可以根据自己的实际情况来决定选择具体使用什么样的方式来引入 SVG。

black smartphone

使用 Proxy.py 自建 HTTP Proxy

如果你需要对一个集群进行开发,且开发过程中需要访问内网,一个比较常见的方式是建立虚拟专有网。但倘如你不愿建立虚拟专有网,那么一个比较简单的方式是建立一层 HTTP Proxy 来访问内网当中的数据,你只需要在某一个节点上设定 HTTP Proxy,并在你自己的电脑上配置 HTTP Proxy ,就可以完成使用对应的节点来访问具体的网页,解决 HTTP 访问的问题。

原理

HTTP Proxy Servr 的原理并不复杂,就是一个标准的正向代理。你只要能搭建这样的一个服务即可。

实际操作逻辑

以下文章以 Debian GNU/Linux 10 为例

1. 在你的节点上安装 Python3 & pip 3

Python3 是运行 Proxy.py 的运行环境,而 pip3 则是安装 Proxy.py 的工具。执行如下命令来安装。

apt install python3 python3-pip

2. 安装 Proxy.py

这里我们不使用 Virtual Env 来安装,主要是方便后续加入 Systemd 来进行控制。如果你习惯使用 Supervisord 来控制的话,就可以使用 Virtual Env 来安装 Proxy.py。执行如下命令

pip3 install proxy.py

3. 启动 Proxy 进行测试

在你的节点上执行如下命令来启动一个测试服务器。

proxy --hostname 0.0.0.0 

如果你需要监听某一个特定的 IP, 则将 0.0.0.0 修改为你具体的 IP。

配置后,你可以看到如下的输出,则说明已经成功启动了 Proxy 服务器。

启动完成后,你就可以在本地测试访问如下命令来进行测试。

curl -x [服务器IP]:8899  http://httpbin.org/get

当你看到如下输出时,确认返回值当中的 origin 是否是你的节点 IP,如果是你的节点 IP 则说明你的 HTTP Proxy 已经配置成功了。后续你就可以通过这个 HTTP Proxy 来进行访问了。

测试完成后,你可以执行 Ctrl + C 来关闭当前的 Proxy Server。

4. 配置 Basic Auth Authentication

上面配置好了 HTTP Proxy Server,但一个问题是这个 Server 没有安全验证,随时会被别人所利用。所以我们需要配置一些基本的安全配置,来解决这个问题。

在你的 Proxy.py 当中加入 –basic-auth 选项,则可以实现加入基本的鉴权。其中,用户密码用英文冒号隔开。比如我需要创建一个用户名是 admin ,密码也是 admin 的proxy ,就可以执行如下命令。

proxy --hostname 0.0.0.0 --basic-auth admin:admin

5. 配置开机自启动

现在 Auth 也有了,但是我们不能总是开着 Terminal 来运行我们的服务,所以一个好的办法是为其加入 Systemd ,这样我们就可以使用系统自带的能力来完成 Proxy 的自启动了。

执行 systemctl edit --force --full proxy.service 来创建一个新的 Systemd 服务,并在其中加入如下代码并保存。

[Unit]
Description=Proxy Service
Wants=network.target
After=network.target

[Service]
ExecStartPre=/bin/sleep 10
ExecStart=proxy --hostname 0.0.0.0 --basic-auth admin:admin
Restart=always

[Install]
WantedBy=multi-user.target

保存完成后,执行 systemctl enable proxy.service 配置该服务器的开机自启动 & systemctl start proxy.service ,即可实现 Proxy 服务的开机自启动,并在当前启动该服务。

总结

有了 HTTP Proxy ,你能以一个更加简单的方式来访问内网当中的服务器。你只需要控制 Proxy 节点的可访问权限,就能很好的处理内网数据的安全问题。

summary

2022 年 5 月月度总结

Objective 1:持续获取现金流,并构建未来收益的现金牛

KR1:投资收益达到 20000 元

本月得益于 A 股回暖,所购买的基金开始出现浮盈;当前浮盈 5851.67;

分析原因,主要是在之前 A 股跌破 3000 点的时候进行了买入,处在一个低点买入,赚钱的概率就会得到提升。

KR2 :单篇稿费突破 6000 元

本月无新进展。

KR3 :达成年度预算,支出不超预算

目前的预算执行的比较差,准备接下来采用现金消费的方式,避免信用卡的消费

KR4 :构建软件类现金牛业务,预期产生收益 10000 元人民币

本月开始继续构建 PodHosting,目前进展缓慢。But,至少是开始了。。。

Objective 2:提升生活基础设施,构建未来生活好基础

幸福生活很重要,生活也不能忘记。毕竟,赚钱是为了生活。

KR1:前往 6 个城市旅行

五月份没有外出旅行,不过进山露营了,也算为一次旅行。

今年太难了,一直规划旅行,不过各地的疫情搞的哪里都没去成。。。

KR2:进行 20 次文娱活动

本月没有进行什么文娱活动

KR3:借助智能化设备,缩减在家务相关事务上耗费的时间

本月新购入了「电动拖把」,让拖地这件事变得更省心、省力。自己体验以后发现电动拖把的体验还是一般。长期来看,还是要迭代到扫地机器人才能更加省力省心。

Objective 3 :开拓视野,打造多元行业人才

KR1:写 15 篇书评

继续鸽书评。不过本月读了几本书。应该写几篇书评的。就安排在六月吧。

KR2:输出关于加密货币的 Newsletter 12 封

0 进展。

KR3 :完成计划中的三本图书的写作

0 进展。

silver mercedes benz emblem on blue surface

从企业视角,为什么要选择 WordPress?

WordPress 在国内日渐式微,从过去的全民博客用 WordPress, 到后来的很少人会使用 WordPress 做博客,再到现在只有一小撮人还在使用 WordPress,伴随着 PHP 的衰落和 Golang 等新语言的兴起,WordPress 不再是国人的选择。过去曾经有一段时间,大家很喜欢用 WordPress 做电子商城,不过随着时间的流逝和国内外电商贸易环境差异的变化,使用 WordPress 开发电子商城也不再是一个选择。如今的企业,不再愿意选择 WordPress 来完成自己的业务。

不过,从我自己的视角来看,我们看待任何一个工具的时候,不能看他是否还流行,而是要看他是否还能解决我们所面临的问题。

WordPress 的优势是什么?

WordPress 最大的优势主要是三点:

  1. 插件市场足够丰富带来的更少的开发工作量:但凡提到 WordPress ,你就不能不提 WordPress 的插件市场。WordPress 海量的插件市场可以帮助你更好的完成你的工作。对于一些传统模式下需要自己开发的功能,你可以选择直接安装 WordPress 来完成工作。
  2. 服务端渲染带来的 SEO 友好:现代 SPA 也有服务端渲染的能力,不过对于开发者来说,则需要单独假设一套服务端渲染的服务来完成这部分工作。或者提前预生成所有的页面。对于页面较小的站点,预生成比较靠谱。但对于数据量极大的站点,预生成也是一个较为痛苦的过程。WordPress 因为更加的传统,所以一直采用的是服务端渲染的模式。服务端渲染在针对 SEO 进行优化时,可以获得更好的优化能力(毕竟有些时候 Spider 不一定会等你的页面在前端渲染完成)。
  3. 极强的编辑性带来的人力释放:WordPress 不仅仅是我们看到的给用户的这一套 UI,还包含了一个强大的用户后台。强大体现在 Editor (Gutenberg)、全站编辑(WordPress 5.9 开始提供的新能力)。这些能力可以让 WordPress 从一个只能用固定模板的网站,变成了提供了一定的自由度,可以通过拖拽来生成一个页面的能力。对于一些比较极致追求拖拽的人,还会使用 Elementor (不过不太好做性能优化,如非必要,不上 Elementor)。这个能力带来的时候可以释放开发团队的人力,在构建好最基础的 Block 之后,交由运营人员来完成后续的管理和维护。

WordPress 的劣势是什么?

但同样的,没有什么东西是只有好处没有坏处的, WordPress 的坏处同样明显。

  1. 使用 PHP 编写,国内维护人员难招:WordPress 所依赖的 PHP 生态式微,则相应的,从事 WordPress 开发的人也渐渐变得更少。对于企业来说,难以找到合适的人是一个很大的问题。
  2. 目标太大,容易被安全攻击:WordPress 作为全球使用量排行第一的 CMS(内容管理系统),盯着它的黑客也多。虽然对于 WordPress 本体的安全攻击很快就会被修复。但针对普通插件的攻击则不那么容易防范。如果选择不当,很有可能把自己变成黑客的肉鸡。

总结

技术领域没有银弹。WordPress 同样也不是那个银弹。在合适的场景下, WordPress 便能放大自己的价值。而如果不合适,同样也无法放大 WordPress 的存在价值。

万事开头难

我在一个多月之前,发布了关于「独立开发者孵化器」的消息,而从一个月前,一直到现在,我们终于将项目的一些基本流程梳理通,把各种细节问题都搞清楚,也开始有新的项目进入到孵化器的正式孵化流程。

不过,啃完了开头的硬骨头,也只不过是开始。接下来则是更加硬的骨头 —— 项目的正式孵化。

我常说,独立开发者不过是创业公司的 MVP 。如果你的独立开发者做的还不错,那么你就可以开始慢慢的加一些人,把自己从一个独立开发者转变为一个公司的老板。而上面的这些事情,都是需要花费时间精力来打磨的。

而我们能做的,就是将这些所有的事情梳理出来,帮助开发者们做好这些事情,然后,帮助他们的成功。

接下来,继续啃更难啃的骨头。

如果你对独立开发者孵化器感兴趣,欢迎访问 :https://www.nglab.io/incubator 了解详情

pile of assorted-title books

书摘也是一种「随手发」

在前面的文章当中,我提到过,我创建了一个用于随手发的 Channel,在这个 Channel 当中发布一些我自己看到的一些 Newsletter、博客、文章当中我认为有价值的,值得回味的话随手发进去,主要是服务于我自己有事没事没灵感的时候,可以翻一翻,重新回味,便可以形成一篇博客文章(水文利器)。

刚好最近在用 Kindle 看书,今天装了 Klib ,突然意识到,在读书时的「画线/高亮」,何尝不是一种随手发的实践?

后续把 Kindle 中的数本书的书摘也发在 TG Channel 当中

black speaker on white table

使用 Iriun Webcam + Pixel6 作为 macOS 的摄像头

为什么要这么做?

昨天在推上看到一个视频,注意到他是使用 Sony ZV1 作为直播摄像头的。而作为一个视频制作者,我的不少视频都是以真人 + 教程的形式提供给我的观众的,我突然想起来,或许我可以使用手机来作为摄像头来完成视频的录制。

和 MBP 自带的摄像头相比,可以让我在视频中更加清晰、更加明亮,让我的视频的观众们可以更好的看到我(没错,就是这么自恋)。于是,我决定用我的备用机 — Pixel 6 来完成这个操作。

为什么是 Iriun Webcam

Iriun Webcam 的一个好处是免费版可以使用 4K,且免费版的水印也十分的不明显,对于白嫖用户十分友好。如果你需要完全去除水印或更加强大的控制能力,则可以付费获得。不过对于绝大多数场景,免费版足矣。

所需软件

  • macOS 驱动下载:https://iriun.com/
  • Android Play Store 应用:https://play.google.com/store/apps/details?id=com.jacksoftw.webcam
  • iOS App Store 应用:https://itunes.apple.com/us/app/iriun-webcam-for-pc-and-mac/id1439303579?mt=8

所需硬件

  • 与手机适配的 USB 数据线:如果本地网络速度足够快,也可以不使用数据线。不过我推荐你使用 USB 数据线,主要是理论上会更加的稳定。

操作流程

安装软件

PC 端

想要实现软件连接,需要先下载安装相应的软件。Iriun Webcam 支持 WIndows 、 macOS 和 Ubuntu ,你只需要访问其官网,并下载对应的软件,并在本地进行安装即可

手机端

手机端则可以在你的手机上搜索 Irirun webcam,并进行安装。

配置设备连接

安装完成后,在 macOS 上打开 Iriun Webcam 会看到如下的界面,此时说明你的 PC 已经准备好了。

未连接状态的效果

在手机上打开同样的软件,稍等片刻,二者就会自动连接到一起

已连接状态的效果

换用 USB 连接

使用 Wi-Fi 连接的最大的问题是不稳定,以及延迟高。因此,你可以选择改用 USB 数据线进行连接,从而获得一个更低的延迟和更稳定的视频效果。

你需要先将自己的手机开启开发者选项,并开启「USB 调试」,随后将手机与电脑连接(如果有授权窗口,则授权 PC 进行调试)。

授权完成后,稍等片刻软件就会自动刷新,手机后的「Wi-Fi」变为「USB」,则说明你已经成功切换为使用 USB 连接。

配置软件摄像头

当你配置完成 Iriun 的 Webcam 之后,就可以在你日常使用的软件当中切换具体使用的摄像头为 Iriun Webcam 来获得从手机取得的视频画面。

腾讯会议的摄像头选择框

如果你使用 OBS 的话,还可以将音频输入修改为 Iriun Webcam audio (腾讯会议并不支持),来获取手机当中传递过来的音频信号。

总结

使用手机摄像头来替代 Mac Book Pro 上自带的摄像头可以帮助我们获得一个更好的画质和视频观看体验。相比于购买一个全新的摄像头,不妨用上你的旧手机来完成你的直播诉求。而你所需要的,不过是一款免费软件 + 一根 USB 数据线。

person writing on brown wooden table near white ceramic mug

我想成为什么样的写作者?

我写博客有很多年了,博客也是零零散散什么都写:技术、生活、书评,无所不写,无所不聊。本质上是我不认可「人设」这个设定。

人设当然有其价值,可以让你在很短时间内,让别人认识你、知晓你、记得你。但对于作为一个个人性质的项目:我的个人博客、我的个人微信公众号,我不希望背后有一个所谓的“人设”,我怕那样我会太累,我怕那样的我难以持续。

在一个可能长达几十年的项目当中,尝试带上面具只会让我失去自己,而脱下面具,做一个真实的自己,可以让我更加的轻松和自在。所以,我在写博客、写公众号上更在乎的是否真实、是否从心。

当然,这也不意味着我不需要锻炼自己的写作和表达,我依然需要为了让我的读者获得更好的内容而锻炼。

从我自己近几年的阅读来看,我比较喜欢的作者有两个:

  1. 张辉:「辉哥奇谭」公众号的作者,辉哥的公众号的风格是聊个人、聊自己,写作的内容也比较广泛,但会朝着一个特定的大方向去写。
  2. 碧树西风:「记忆承载」和「记忆承载3」公众号的作者,碧树西风的风格是泥石流,会介绍一些他从投资人的视角来看待问题。对于目前还在韭菜阶段的我来说,有效的补充了一些信息。

对于我来说,或许未来可以成为这样的作者,我就心满意足了。

group of fresh graduates students throwing their academic hat in the air

大学要储备的只有学习能力

最近,即将从大学毕业的堂弟找到了我,希望我能给他一些建议。在经过了一轮又一轮的讨论后,他决定跟随我进入软件行业,成为一个软件工程师。

而作为一个软件工程师,我深知学习能力是这个行业最重要的能力(是的,没有之一)。因此,也需要考察一下堂弟的学习能力。经过一番考察,在我看来基本上是需要回炉重造的状态。不过,既然如此,那就坦然面对现实,一点点带吧。

不过这个事情也让我开始思考大学当中最重要的是什么?

随着大学本科的扩招、社会对于不同职业的渲染,大学生们对于大学毕业后是否从事自己所在的行业大部分是不太确定的,再加上当初选择专业的适合,可能没有经过详细的调研,只是随便选择了一个,或者是调剂到了当前的专业。毕业即转行似乎成为了一个常见的选项。

如果你的大学专业是自己深思熟虑选择的,且毕业也要选择这个行业去从业,那么你在大学花尽可能多的时间和精力来学习本专业的知识是必要且值得的。

但,如果你对前途不甚明确,不知道自己以后从事什么行业,那么储备一些通用的能力是最重要的。这里包括:学习能力写作能力演讲能力阅读能力等一众通识能力。

而在这众多能力当中,我认为最重要的是学习能力。因为学习能力是你掌握其他所有能力的「元能力」,当你掌握了学习的能力以后,你就可以借助于学习能力,掌握一个又一个的新能力,成就最强大的自己。

如果你未来从事的行业是一个充满未知和不确定性的行业,那么学习对于你来说更是重中之重了,因为你需要时刻掌握着将自己这艘大船调头的能力。而如果你所在的行业没有那么大的变化,掌握学习能力则可以帮助你更好的构建跨行业、专业的交叉能力,在行业中发挥更大的价值。

总结

对于自己未来不明确的大学生来说,构建自己的学习能力,并在学习能力基础之上,构建自己的阅读、写作、演讲能力,是最划算和有价值的;而对于未来明确的大学生,所需要的就是在你自己认可的方向上,蒙眼狂奔。