过年回家的时候给老妈的手机安装上了 [[AnyDesk]],为的就是防止她不知道在手机上如何操作的时候,我可以给她远程操作,或者指导她自己操作完成。现在快过去一年了,正好也来总结一下,顺便再推荐几个可以尝试的方案。
AnyDesk 是我继 [[TeamViewer]] 商业化太严重之后一直用到现在的远程桌面控制的方案,最初的时候我只是想在 Linux 上完成运行,就发现了 AnyDesk,但是使用之后发现全平台的使用体验都非常不错。
我自己体验过从 macOS 连接 Linux(Ubuntu),Windows,画质和操作都未出现过明显的问题。
如果是稍微懂得一些计算机的用户,不妨可以尝试一下会议软件,比如
这些会议软件一般设置比较麻烦,也只能共享桌面,少部分能进行远程控制的,也经常出现卡顿的情况。
Vimium 是一款 Chrome 下模拟 Vim 操作的插件。很早之前我写过一篇文章讲的是 Chrome 下如何利用快捷键来提高效率 在那篇文章中已经提到过 Vimium,Vimium 几乎是 Chrome 下必备的插件之一了。
之前也有写过文章提到过 Vim Everythere,现在我在 Obsidian,VS Code,IntelliJ IDEA,Chrome 中几乎都可以使用同一套语义的快捷键。
基础移动
下/上/左/右移动 j/k/h/l
移动到下一个 word 第一个字母 w
移动到下一个 word 最后一个字母 e
移动到上一个 word 第一个字母 b
移动到行首第一个字符 0
移动到行首第一个非空白字符 ^
移动到行尾最后一个字符 $
页面内移动
向下/上移动半页 d/u
回到顶/尾部 gg/G
浏览历史
后退 H
前进 L
切换标签页
切换左/右标签 J/K
切换左/右标签 gT/gt
切换到第一个 Tab g0
切换到最后一个 Tab g$
上一个标签页 ^
新建一个 Tab t
查看标签页列表 T
关闭/恢复标签 x/X
固定标签栏 <a-p>即 alt+p
新标签中打开多个链接 <a-f> 即:alt+f
开/关静音 <a-m>即:alt+m
URL 跳转
跳转到当前 URL 上一级/最高级 gu/gU
编辑当前地址栏 g+e/E 并在当前/新窗口中打开
跳转到当前文本框,将光标放在页面中的第一个输入框 gi
(2gi就是第二个输入框)
标记
ma 当页标记,只能在当前tab页面跳转,m + 一个小写字母
mA 全局标记,可以再切换到其他tab的跳转过来,m + 一个大写字母
`a 跳转到当页标记
`A 跳转到全局标记
`` 跳回之前的位置
其他常用操作
窗口打开模式 本窗口/新窗口 f/F
查找书签 b/B(当前/新窗口打开)
查找历史记录+书签 o
刷新 r
搜索剪贴板关键字 在当前/新窗口 p/P
将标签页移动到新窗口 W
查找 /
然后使用 n/N 向下/上查找结果 n/N (回车后直接打开链接,不用再使用f/F定位)
复制当前链接 yy
新模式 i
查看源码 gs
其他
查看所有快捷键 ?
复制当前标签页 yt
从页面中选择一个链接复制到粘贴板 yf
移动当前标签到左/右侧边 <</>>
滚动到页面最左/右边(在有滚动条下才有效果) zH/zL
插入模式 i(可以屏蔽掉vimium快捷键,使其不和网页默认快捷键冲突)
创建新标记(可创建多个 m 使用方法
设置当前/全局滚动条位置 m+小/大写字母
跳转到设置的滚动位置 ~+字母
可以通过在普通模式下输入 v
来进入复制模式。
切换到复制模式 v
在复制模式下,就可以不用通过鼠标,而通过快捷键来选择页面中的内容。通过上面提到的鼠标移动方法,来选择需要复制的内容,然后 Cmd+C。
可以在自定义按键中设定键盘快捷键映射。
map key command
将命令映射到 Vimium 中,覆盖 Chrome 默认值unmap key
取消一个命令,并重新载入 Chrome 默认unmapAll
取消所有命令绑定,尝试删除 Vimium 的所有命令举例
map <c-d> scrollPageDown 设置 Ctrl+d 按键来向下滚动页面
map r reload 设置 r 为 reload 快捷键
unmap <c-d> 取消 c-d 的设置
Vimium 引入了一个 Vomnibar 的概念,通过 o
来引入。
可以在 Vimium 的设置中,自定义搜索引擎的格式。
a: http://www.amazon.co.jp/s/?field-keywords=%s Amazon
d: https://duckduckgo.com/?q=%s DuckDuckGo
g: https://www.google.com/search?q=%s Google
y: https://www.youtube.com/results?search_query=%s YouTube
gm: https://www.google.com/maps?q=%s Google Maps
b: https://www.bing.com/search?q=%s Bing
bd: http://www.baidu.com/s?wd=%s Baidu
bl: http://www.bilibili.tv/search?keyword=%s Bilibili
w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia
zh:https://www.zhihu.com/search?type=content&q=%s Zhihu
icb: http://www.iciba.com/%s
yd: http://dict.youdao.com/search?q=%us
gs: http://scholar.google.com.hk/scholar?q=%us&hl=zh-CN
gt: https://github.com/search?q=%s
tw: https://twitter.com/search?q=%s
更多的搜索引擎定义可以参考这里
当完成上述设置之后,就可以在页面中按下 o
按键,进入搜索模式,输入缩写和搜索内容进行快速搜索。
比如,先按下 o 然后在弹出的输入框中输入 y vimium
,就表示用 YouTube 搜索关键字 vimium。
今天遇到一个证书发行商提供的客户端 Windows only,无奈只能在想办法在 macOS 下安装一个 Windows,因为之前就使用过 VMware Fusion,个人使用是免费的,所以立即就上官网下载。
另外 Windows 镜像在 MSDN ITELLYOU 上下载,
安装虚拟机的过程非常简单,将 ISO 拖入到安装界面,然后打开虚拟机就开始了自动安装,但是没想到的是在安装的过程中,遇到了如下的界面,始终无法跳过。
所以在这里记录一下如何在安装的过程中跳过联网。当到联网的画面之后,按下 Shift+F10 或者是 Fn+Shift+F10 快捷键调出命令提示符窗口。
在 cmd 界面中,通过 cd 命令切换到,C:\Windows\System32\oobe\
目录,然后执行 BypassNRO.cmd
,按 Enter 键。系统会自动重新启动,并提供在不联网的情况下完成首次开机设置的选项
在使用上一步完成系统初始化之后,进入 Windows,依然无法联网。可以通过如下的步骤来使得虚拟机中的 Windows 能联网。
powershell
Set-ExecutionPolicy RemoteSigned
cd D:\
./setup.ps1
等待安装完成之后,就可以看到网络已经连接了。
Music Tag Web 是一个基于网页的歌曲元数据编辑工具,支持编辑标题,专辑,艺术家,歌词,封面等信息。之前在 Windows 上用过一个叫做 [[mp3tag]] 的应用,后来在 macOS 上用的是 MusicBrainz Picard,后来发现一款非常不错的音乐播放器 [[Swinsian]],用了很久。我本地的所有音乐文件都会放在一个文件夹中然后使用 Syncthing 来同步。
正因为我的音乐库被同步到了 VPS 中,虽然本地也有一份备份,但是如果恰好电脑不在身边,那就不太好立即操作。
再回到今天的主题 Music Tag Web,它的特点是:
如果有人想要研究一下什么歌曲的元数据,那就避不开 [[MP3 ID3]] 这样一个名次,对于 MP3 ID3 的格式,可以参考这篇文章。
Music Tab Web 的安装非常简单,直接通过 Docker 启动即可。
直接使用命令启动(不推荐):
docker run -d -p 8001:8001 -v PATH_TO_MUSIC:/app/media -v PATH_TO_CONFIG:/app/data --restart=always xhongc/music_tag_web:latest
推荐使用 docker compose 启动,具体的配置可以参考我的仓库
version: '3'
services:
music-tag:
image: xhongc/music_tag_web:latest
container_name: music-tag-web
restart: always
ports:
- "8001:8001"
volumes:
- ${PATH_TO_MUSIC}:/app/media:rw
- ${CONFIG}:/app/data
command: /start
等待启动,使用 docker-compose logs -f
查看日志,没有出现问题即可,之后访问 IP + 端口 http://ip:8001 访问主页面,在路径后面加一个 admin 就可以看到管理界面,默认账号密码 admin/admin。
Music Web Tag 的界面非常直观,支持手动修改,或者根据匹配的信息自动修改,也支持整理文件夹以及简体转繁体,繁体转简体等操作。
和软件的本地版差距不大,除了界面上有所变化功能上并没有变化太大,能够根据平台来索引歌曲文件,可以进行手动的歌曲信息修改,包括了歌手、专辑、风格以及歌词等等信息都可以修改。支持的文件夹整理是一大亮点,可以针对专辑或者歌手,将其歌曲放在一个文件夹中。
自动修改完成之后就可以看到文件的信息被修改,同时也能在操作记录中看到是否有失败项。而针对自动修改错误的,也可以直接在界面进行手动修改。
在很多地方看到过这一本书的书评,Twitter 上关注的人当中也不乏推荐者。
在阅读这本书之前,很早就听过《疯投圈》的播客提到过这个名词,这个世界上有两类公司,一种是小而美的公司,一种是大而全的公司。小而美的公司追求简洁、高效和精益,专注于核心业务,避免过多的复杂性和浪费。而大而全的公司则追求规模、多样性和全面性,拥有庞大的组织架构和复杂的业务流程。我想,很多的大公司都是经历过小而美的阶段,比如说只有一个搜索栏的 Google;比如说只提供照片分享的社交网站 Instagram;比如说专注于影视作品打分的豆瓣。很多小而美的公司会找到自己的盈利模式,比如 Google 的竞价广告,进而变成一家庞大的公司;又或者像 Instagram 这样被大公司收购,进而成为一家主流的图片社交网站;很少一部分会像豆瓣一样,既没有发展成为一家庞大的公司,也没有被另外一家大企业收购进而得到进一步的发展。更有很多的公司,可能因为没有跟上时代的发展,而被淹没在历史里面。
但这一本《小而美》吸引我的点在于,作者提倡去长期经营一家小而美的公司,「刻意」的维持公司的规模不要过大,并且要长期在发展中保持专注高效,为现有客户提供长期的价值。
通过目录,可以看出来这是一本非常实用主义的书,作者的很多建议非常贴近现实,甚至很多都可以直接套用。从创建社区,提出问题,构建想法,提出解决方案,到假设验证,冷启动,营销,运营,作者通过自己创建 Gumroad 的经历给读者编写了一本创业说明书。在很流行 [[独立开发者]] 的当下,这本书受到热捧也是可以理解的。
《小而美》的作者叫做 萨希尔·拉文吉亚(Sahil Lavingia),我是第一次听说这位作者,但是直到我看书,才知道原来他是 Gumroad 的创始人,这本书也是记录他尝试将这个创作者平台做大,却不成之后的思考。他同时也是一个作家,投资人。
《小而美:持续盈利的经营法则》原始的书名是 《The Minimalist Entrepreneur: How Great Founders Do More with Less》,直译过来其实有一些些差别,极简创业者、伟大的创业者如何使用最小的成本来实现更多,但中文书的翻译正恰好说明了本书的全部重点,作者不是教人创建一家大型企业,而是让读者明白如何创建一个可持续盈利的项目。作者自称自己是极简主义创业,那什么是极简主义创业者呢,在解释这个词之前,可以先了解一下前几年非常流行的一个词,叫做「独角兽」,被称为独角兽的企业,是指那些估值超过 10 亿美元的企业,Uber,Dropbox,Evernote 等等,这一些项目有非常成功的,上市的,也有像 Evernote 一样「失败」 的。而回到本文的主题 —- 极简主义,就是那些成为不了独角兽的公司,但是却有其存在的价值,可以通过少量的人力和资源即可维护的项目,能给客户不断提供服务和价值。极简主义创业者不是为了攫取利润,而是为客户和社区创造价值。这也是这一本书的核心。作者倡导创业者通过减少复杂性和浪费,利用自动化,不断优化流程的方式来打造一个企业。
先是创作者,再是创业者
不断重复这个过程,直到找到一个可行的产品,然后扩大经营
这本书非常具有实践意义,并且也给了我很多启发。作者描述的每一个过程都是可以被实施的,如果非要说的话,这一本书可以说是极简主义创业说明书,作者连需要做什么,做几步,怎么做都写得非常清楚,从建立社区,发现问题,解决问题,营销,等等方面都进行了探讨。但个人对这一本书的观感不佳的一个原因是作者每一步实施都浅浅的略过,点到为止,如果说创业者可以按这个说明书操作倒也不错,但这本书更多的是给读者一个思路,一个思考的方向,原来还可以这样做。
Omnivore 是一个开源的,稍后阅读应用,查看起官方的页面,支持非常多的客户端,包括了 iOS, macOS, Chrome,等等 Android 还在测试中。
在之前的自行架设的服务 中有推荐过 [[Wallabag]],但是 Wallabag 界面稍微有一些古早,但是使用起来完全没有任何问题,我自己也搭建用了很久。而非开源的,比如 [[Pocket]],[[Instapaper]],也都是过去非常不错的稍后阅读服务。
Omnivore 吸引我的一点是可以和外部的其他应用同步,比如可以和 Obisidian 同步,还可以接收 Newsletter。 另外还有一个吸引我的点就是,很多宣称可以代替 [[Readwise]] 阅读器,这也是一款我关注了很久,但是还没有深入使用的在线阅读器。 所以这篇文章就来介绍一下它。
功能:
username-123abc@inbox.omnivore.app
的邮箱地址,在订阅的时候使用该地址,所有发送到该邮箱的订阅内容都会自动存在 OmnivoreOmnivore 可以通过很多方式来添加阅读源
Omnivore 提供了如下几个方式了帮助整理
label:Newsletter
label:Cooking,Fitness
label:Newsletter label:Surfing
label:Coding -label:News
in:inbox
in:archive
in:all
is:read
is:unread
type:articel
type:file
type:pdf
type:highlights
has:highlights
sort:saved
依据保存日期排序sort:updated
根据更新时间排序sort:score
根据相关度-asc
或者 -des
来调整升降序sort:saved-asc
sort:updated-des
将数据发送到其他应用,比如 Logseq,Obsidian,或者通过 API,或者 Webhooks 的方式和其他系统进行集成。
目前 Omnivore 支持四种类型的事件
如果有外部的系统集成,可以根据这四个事件类型去触发。
笔记本电脑用了 3 年多,各种媒体材料,尤其是音乐我喜欢放在本地,以及各种应用程序基本上已经把磁盘自带的空间占满了,这两天刚好看到日亚有促销活动,可能是看我之前搜索过 SanDisk E61,E81 ,所以推荐里面直接推送了一个三星的 T7,看了一下价格只要 10600 JPY,用 Keepa 对比了一下历史价格,以及京东上的价格,感觉还挺合适的,就下了单。
我原本预想就很小,但是到手发现是真的小,和信用卡比了一下,正好是一张信用卡大小,感觉是产品设计的时候特意的,因为和信用卡放在一起也几乎看不出来。
外观
几乎只有 1/3 的硬币直径。
可以看到 T7 的厚度几乎和 iPhone 13 一致。
和 iPhone 相比,大小也非常小。
手持大小。
直接看网上的 电子说明书
T7 默认情况下已经格式化成 exFAT 格式,兼容 Windows,macOS,Android 系统。用户也可以根据自己的常用系统自行格式化。
文件格式 | Windows 系统 | macOS |
---|---|---|
exFAT | 读取和写入 | 读取和写入 |
NTFS | 读取和写入 | 仅读取 |
HFS/HFS+/APFS | 无法读取 | 读取和写入 |
Samsung T7 可以用自带的软件实现磁盘加密。
使用 Disk Speed Test 在 macOS 下测试速度,虽然没有达到理论速度 1050 MB/s ,但日常使用也够了。
买这一块 1T 的固态也只是用来做一下应急处理,主要是家里的 NAS 没有带在身边,而使用普通的硬盘处理 Lightroom 中的照片也略慢,所以临时用这一块固态硬盘来应急一下。如果是存储重要的资料,我个人还是会用类似 Duplicacy 等增量备份工具多地备份一下的。更具体的可以参考之前的备份方案。
[[对象存储]] 的英文是 Object-based Storage System,是一种将数据以对象的形式存储在分布式系统中的服务,而不是传统的文件系统或者块存储。
对象存储服务提供商通常提供以下功能和服务:
一些知名的对象存储服务提供商包括亚马逊 S3(Amazon S3)、微软 Azure Blob Storage、谷歌云存储(Google Cloud Storage)等。这些服务可以根据用户的需求来选择,并根据使用量进行付费。
那么除了上面提到的这些云服务商,还有哪些服务商提供免费的对象存储服务呢。
Oracle Cloud Object Storage 包含了 20 GB 的免费存储空间。
[[Backblaze]] 是一个云存储解决方案提供商,其提供了类似 [[AWS S3]] 的在线块存储服务。 Backblaze B2 价格要便宜一些。并且前 10GB 存储是完全免费的。和 AWS S3 一样,需要为带宽付费,但是通过 Bandwidth Alliance,在 Backblaze 和 Cloudflare 之间的带宽是完全免费的,这也就意味这如果通过 Cloudflare ,那么使用 Backblaze 也就不再需要考虑流量的问题。
Storj 提供的分布式存储可以创建三个项目,每个项目都有 50GB 存储,以及 50GB 流量可以免费使用。 也就是达到了免费的 150G 存储。1
1:https://docs.storj.io/dcs/pricing
免费的对象存储,特点:
Storj 目前只有 AP/US/EU 三个地区有服务器,访问速度可能会受到一定影响。并且目前 Storj 在初创时期,其商业模式是否能为继续也是需要继续考量的。
Contabo 发布的 Object Storage 对象存储,起步价 250GB,2.99$ (2.49 欧元)一个月。不限流,提供 DDOS 防护,兼容 S3 。
目前有欧洲,美国和亚洲三个地理位置。
在刚推出该项目的时候还提供了 20% 的额外优惠,只需要 1.99 欧元(2.49 美元)。1
注册 Scaleway 帐号之后可以获得 75 GB 的免费存储空间。
前段时间看到一篇文章说因为 Nginx 的一个「特性」,在直接访问 IP ,并且没有配置默认证书的情况下 Nginx 就会返回一个 SSL 证书从而倒置域名的泄露,进而泄露了网站的源 IP,使得一些扫描网站,比如 [[censys]] 可以直接查询到域名背后的网站 IP,从而导致网站即使用了 CDN 也会遭受到攻击。在这个契机下,我又开始了衍生,因为在 censys,[[fofa]],[[Shodan]] 等等网站上你只需要输入一个域名就可以获得所有这个站点相关的信息,那么有没有办法可以在只知道一个网站域名的情况下知道所有的二级域名呢。
于是抱着这个新想法,进行了一番调查,果然还是有办法可以知道的。我最最朴素的想法就是写一个遍历,直接通过随机的字符串,[a-z0-9\-]
等等字符的组合,然后进行这些域名检查,ping,dig 的结果,如果有返回,可以认为这个子域名被启用了。但是很显然这个想法的效率太低了,并且遍历这么多无效的域名前缀很显然没有办法最快的找到所有的。
然后我就找到了 [[MassDNS]],一款使用 C 语言编写的高性能子域名扫描工具。它通过使用自定义的 DNS 解析器和并发查询来加快子域名的发现速度。MassDNS 支持使用字典文件进行子域名爆破,并提供了丰富的配置选项来优化扫描过程。 MassDNS 还支持自定义的 DNS 服务器,并可以通过设置最大查询时间和最大重试次数等参数来控制扫描过程中的超时和重试行为。此外,它还提供了多种输出格式,包括文本、JSON 和 CSV,以便用户根据需要对扫描结果进行分析和处理。 使用 MassDNS 进行子域名扫描非常简单,只需指定目标域名和字典文件即可开始扫描。它还提供了多线程支持,可以根据系统资源情况调整并发线程数量,以实现更快的扫描速度。
然后我又循着脉络找到了 OneForAll 这样一个开源的工具,它是一个功能强大的子域名收集工具,集成了非常多的工具,从它的官方介绍上也可以看出来它收集子域名的思路和方法。
censys_api
,certspotter
,crtsh
等等axfr
cdx
cert
csp
robots
sitemap
dnssec
archivecrawl
,commoncrawl
首先获取 OneForAll 的代码
git clone git@github.com:shmilylty/OneForAll.git
通过 pyenv 或者其他熟悉的工具,安装 Python 依赖,然后执行
python3 oneforall.py --target douban.com run
很快就能获得一个 CSV 的结果。
Dokku 是一个开源的 PaaS,用户可以非常轻松地构建自己的 PaaS 云平台。
在深入了解 Dokku 之前,先来了解一下什么是 [[PaaS]],PaaS 的全称是 Platform as a Service,平台即服务。典型的产品有 [[Heroku]],[[Vercel]] 等等。
PaaS 作为一个平台提供给了开发者构建,部署,管理应用的能力,开发者不再需要关系复杂的基础设施,比如操作系统,网络,硬件等等。PaaS 提供商通常提供开发工具,运行时环境,应用管理后台等等。除了上面提到的 [[Heroku]] 之外,AWS Elastic Beanstalk,Google Apple Engine,Microsoft Azure App Service。
与之对应的概念还有
传统的 IT 基础设施需要运维人员从下到上管理
而上面提到的概念则是将不同的部分组合,一步一步简化了开发程序的过程。开发者关系的细节越来越少,与此同时可以在此基础上构建出丰富多彩的应用程序(SaaS)。
Dokku 是一个使用 Go 语言编写的,开源的,最小化的 PaaS 平台。
环境要求:
Dokku 官网文档上有很多的安装方式。推荐的安装方式是直接用一台全新的 VPS,直接安装。我尝试使用 Docker Compose 来安装,发现端口映射以及 SSH Key 配置要麻烦很多。
Dokku 自身不支持数据库,但是可以通过插件的形式来支持。从传统的 MariaDB,[[PostgreSQL]],到 [[CouchDB]],[[Elasticsearch]] 等等,都可以从这个链接 查看。
因为 Dokku 是一个 Heroku 的最小化实现,所以 Heroku 在 GitHub 仓库中的所有例子都可以在 Dokku 这里使用。
如果安装好 Dokku,之后部署应用的步骤基本上也就是分成两部分,在本地完成代码,然后添加 Dokku 为远程,直接将代码推送到远程。
mkdir my-app
cd my-app
npx create-react-app .
git remote add dokku dokku@example.com:my-app
git push dokku master
更具体的部署操作可以查看这里。
Dokku 默认会使用 Heroku Buildpack 方式部署应用。Buildpack 由一系列脚本组成,会自动完成检测、构建、编译、发布等工作。
目前已支持 Ruby, Node.js, Java, Python, PHP, Go 等众多类型的应用。
创建应用
dokku apps:create $APP_NAME
借助 Dokku 可以让你不在受限于 Firebase,Amazon Elastic Beanstalk,或者 Heroku 的平台,并且 Dokku 和这些服务相比丝毫不差。但于此同时,你需要自己维护 Dokku,并自己管理 Dokku 扩容以及 Dokku 运行的环境。