Mudkip Mud Sport

Mudkip's Mud Sport Journal

Inspired by マリウス and Tao of Mac, I’d like to share some tech staff I did and learned recently.

Home System

My Homelab is composed of a Synology NAS, a Intel NUC and a Raspberry Pi 4. The NUC runs a free version of VMware ESXi. Before this quarter, it hosts an Arch Linux box for remote development, a Windows 10 VM runs Plex Media Server and Calibre-web, a Debian server works as a network gateway, as well as 3 K3OS nodes for most self-hosted workloads.

My Raspberry Pi mostly worked as a duplication of the NUC for some workload, such as network gateway and code-server and my Synology stores everything.

While K3S is my favorite Kubernetes distribution, K3OS hasn’t received any update since SUSE’s acquisition of Rancher, it is now an abandoned project and I’ve been thinking about replacing it.

Talos is a distribution got a lot love in the home Kubernetes community. I tried creating a cluster with one control plane and one worker node and put some workload on it but it didn’t work for me. The internal DNS server (coredns) stopped responding after I randomly tweaked a few settings, started a few pods or just restarted the host several times. I failed to bring Synology CSI up following Talos’s guide, though I did set up democratic-csi successfully.

I guess the DNS issue is related to the network configuration of my home environment but couldn’t figure out what when wrong exactly. So eventually I took the clumsy way and manually set up 4 Ubuntu Server VMs and installed k3s manually. It didn’t take long and after a dozen minutes my home Kubernetes cluster is up again.

The Raspberry Pi 4 is more valuable than ever due to its skyrocketing price. Since it boots with a 500GB USB SSD, it’s actually very fast to run lots of workload. It’s now working as a network gateway for my home devices, a remote development server and a Home Assistant box.

With GPU price back to normal, I built a desktop workstation with Intel Dragon Canyon i9 NUC, WD SN750 NVMe SSD, 64GB RAM and a lucky to find 2-slot size RTX 3080 GPU. It’s dual-booting with Windows 11 and EndeavourOS i3. I’m very satisfied with its performance which can cargo install anything instantly and run any games in 4K 60fps.

52Poké

I’ve done some underlying refactoring with klinklang (a.k.a. 52Poké Wiki Utilities). It’s a small project to do automation on 52Poké Wiki. For example, it can trigger update to MediaWiki:Common.css when 52W:层叠样式表 is updated. It can also be a glossary translator and sync with various lists on the wiki.

The tech stack now includes modern JavaScript/TypeScript frameworks such as fastify, Prisma, Vite and pnpm. Particularly I like the dependency injection implementation of awilix. The refactoring is a step to something I planned many years ago: a workflow engine for MediaWiki, which let wiki editors write automation tasks with Amazon States Language.

On the infrastructure side, the LKE cluster had went through two Kubernetes upgrade smoothly. I’m planning some major updates along with MediaWiki 1.39 release, and 52Poké Wiki will have higher availability and cost much less.

52Poké Homepage and Forums is stagnated for a long time but I do wish to bring them back to life. There’s not much to say yet.

Other Side Projects

Throughout the past few years I’ve been tweaking my digital life to give myself full control over my data and host the services I rely on at home. On the other side, I‘ve been suffering from burnout and I feared losing passion for programming.

In September I figured out what I can do in a relatively short time to give myself a feeling of satisfaction, a mobile app for a self-hosted memo hub allowing me to capture ideas on the go. I spent a few nights and weekends building it with SwiftUI. It was a good experience and it’s ready after a dozen days. I put it on TestFlight and the initial feedback was positive.

However Apple took me down with a dubious message: We need additional time to evaluate your submission and Apple Developer Program account. Your submission status will appear as “Rejected” in App Store Connect while we investigate.

It gave me an opportunity to learn and try modern Android development and I took another dozens of hours to build the Android counterpart with Jetpack Compose and Material You. After 44 days Apple finally approved this app and In the end I’m grateful I had this experience.

So here’s Moe Memos. It’s open source and I had fun creating it. I wish to build features like home screen widgets and offline support in next few months.

2017 年有非常棒的回忆真是太好了
2017 年和非常棒的作品相遇真是太好了
2017 年得到了很多梦寐以求的东西真是太好了

…虽然很想这样总结2017年,虽然也是事实。但无法欺骗自己的是,2017年并不是美好的,「绝望」是这一年无法忽视的存在,迷茫是这个世界在这一年的集体心理,人类进入了一个新的丛林时代。总体而言,这个世界距离「美好」「理想」更远了一大步。

「仲良くなれたのかな…絶望と」

所以我想用2017秋季番「少女终末旅行」第6话中ユーリ的这句话来总结2017年,「可以和绝望好好相处了」。

这一年断断续续陷入绝望。比如善子生日那天发生的另一件事,比如谁和谁以及谁的时间线长久地没有更新的事,比如在不同的地方发生的不同的说不出来的事,又比如喜欢的作品的监督突然被撤换的事,大洋彼岸的国家拯救 Net Neutrality 彻底失败的事。自身而言,iPhone X 开放预订时的失败也让我彻底感受到自己什么都做不到的无奈和无助。

…江之岛盾子的力量,似乎真的开始了。

或许正如这样的原因,看过的2017年动画新番中「兽娘动物园」「末日时在做什么?有没有空?可以来拯救吗?」「少女终末旅行」「宝石之国」这几部作品描绘了人类历史已经结束的世界。然而在作品描绘的压抑之中,却能很强烈感受到作品本身的美好,残存的人类也好,人性化的动物和矿物也好,在不会结束的绝望之中,她们和绝望好好相处,她们有自己的旅行、探索、挣扎、友爱…甚至还有残存的希望。

Games

  • 塞尔达传说:旷野之息 10/10
  • 超级马力欧:奥德赛 10/10
  • Splatoon 2 10/10
  • 马力欧卡丁车8DX 10/10
  • 宝可拳DX 10/10
  • Harmonia 9/10
  • 大逆转裁判:成步堂龙之介的冒险 8.5/10
  • 命运石之门0 8/10
  • 精灵宝可梦 究极之日 7.8/10
  • 魔法气泡俄罗斯方块 7.5/10
  • Nekopara Vol.3 7/10
  • 新枪弹辩驳V3 大家的自相残杀新学期 5.5/10

依然是入手很多游戏但玩得很少的一年,以上是通关或者玩了20小时以上作品的个人打分。Nintendo Switch毫无疑问是2017年最棒的产品,单纯地抱着对未知的期待爬山,笨拙地尝试去解开神庙谜题,漫无目的地在草原上骑马狂奔,在东海岸等着看日出,在山间静静地听雨声,每一个瞬间都沉浸其中,旷野之息充满了无法表达的惊喜。而最纯粹的快乐的来自奥德赛,除了每个地方都有探索不完的收获,作为动作游戏苦手在奥德赛中却完全没有其他任何ACT和ARPG作品中的不安感,即使是自己做不到的事也可以轻松地利用附身。

去年太阳/月亮毫无疑问是心中满分的作品,然而可能和很多人的看法不一致的是,今年究极日月在我心中可能只有7.8分,虽然也有因为黑2白2带来的过高期待有点落空,更大的原因是日月一周目非常看重的椰蛋树岛等剧情被完全删除。第六世代作品中开始解释和应用的多世界理论,在究极日月中过多地滥用以至变得混乱了(虽然也有很多细节的暗示非常用心)。

新枪弹辩驳V3,其实是本来和极限脱出一样非常喜欢的系列,也有很多喜欢的人在游戏、动画以至舞台剧中出演。本作作为系列的最终作本来同样有一贯非常出彩的推理、故事和人设,然而最终章却毁掉了整个系列的一切。不知道是小高先生对自己的作品和粉丝有如此大的恶意,还是想要戏仿Ever17的meta元素却弄的如此拙劣。这样的最终章就是「绝望」本身。

Gadgets

  • Nintendo Switch
  • iPad Pro 10.5 256GB Space Gray
  • Doxie Go
  • New Nintendo 2DS XL (Poké Ball Edition, US)
  • Apple Watch Series 1 (Refurbished)
  • iPhone X 256GB Space Gray
  • Mophie Wireless Charging Base
  • Project FI
  • Sony WI-1000X

Journey & Event

  • 2月 · 香港
  • Aqours First LoveLive! Step ZERO to ONE Day 1 (Live Viewing in 香港)
  • Aqours First LoveLive! Step ZERO to ONE Day 2 (Live Viewing in 香港)
  • 4月末5月初 · 沼津/东京/仙台
  • 7月 · 上海
  • Bilibili World 2017
  • Bilibili Macro Link Star Phase x Anisong World Matsuri 2017
  • 9月末10月初 · 东京/埼玉/横浜
  • Aqours 2nd LoveLive! HAPPY PARTY TRAIN TOUR in Saitama Day 1
  • Aqours 2nd LoveLive! HAPPY PARTY TRAIN TOUR in Saitama Day 2 (Live Viewing in TOHO新宿)
  • 11月 · 大阪
  • チマメ隊ワンマンライブ chimame march in OSAKA
  • Pile Asia Live Tour Vol.2 in Beijing

Anime

剧场版

  • 剧场版舰队Collection
  • 声之形
  • 刀剑神域:序列之争
  • 精灵宝可梦:就决定是你了
  • 吹响吧!上低音号:想要传达的旋律
  • 波尔凯尼恩与机巧的玛机雅娜
  • 请问您今天要来点兔子吗?? Dear My Sister

长篇

  • 精灵宝可梦太阳&月亮

冬季

  • 兽娘动物园
  • Urara迷路帖
  • 清恋
  • 风夏
  • Rewrite 第二季
  • 珈百璃的堕落
  • 小林家的龙女仆
  • BanG Dream!
  • 政宗君的复仇
  • CHAOS:CHILD

春季

  • Re:CREATORS
  • 末日时在做什么?有没有空?可以来拯救吗?
  • 不要输!!恶之军团!
  • 埃罗芒阿老师
  • 月色真美
  • 樱花任务

夏季

  • NEW GAME!!
  • 徒然喜欢你
  • GAMERS电玩咖!
  • 狂赌之渊
  • Princess Principal
  • 捏造陷阱 -NTR-

秋季

  • Love Live! Sunshine!! 第二季
  • 少女终末旅行
  • 宝石之国
  • Wake Up Girls! 新章
  • Blend S
  • 干物妹!小埋R
  • 如果有妹妹就好了
  • 动画同好会

Apps of 2017

  • DEVONthink (iOS / macOS)
  • Things 3 (iOS / macOS)
  • Ulysses 12 (iOS / macOS)
  • Visual Studio Code (macOS)
  • Couchy (iOS)
  • Yoink (iOS)
  • Pythonista 3 (iOS)
  • JSBox (iOS)
  • Telegram (iOS / macOS)
  • Transmit 5 (macOS)
  • MindNode 5 (iOS / macOS)
  • Bartender 3 (macOS)
  • MarsEdit 4 (macOS)
  • ANiUTa (iOS)

2017年写了很多 Objective-C 很多 JavaScript 很多 Java (Android),写了一些 PHP 一些 Python 一些 Swift 一些 Vue SFC 一些 Dockerfile,充实地过完一年但其实只是更熟练了而已。虽然一年前也是这么说的,但希望2018年有真正的进步,然后能有可以改变自己的力量与希望。

2017年完成了很多想做的事,也有很多想做的事没有做,还好不是 mv "2017 resolution.md" "2018 resolution.md" 而是 tail -n XX "2017 resolution.md" > "2018 resolution.md"。年末最近几天把 52Poké 环境和 docker image 升级了一遍,写了若干 koa middleware 和 MediaWiki 插件,新年首先要把 Wiki 的图片库迁往 S3,解决迫近的存储空间告竭。

2017 年有非常棒的回忆真是太好了,去了 LoveLive! Sunshine!! 的家乡沼津和很多作品的圣地旅行,玩了几十公里 Pokémon GO,看了很多场 Live,回忆起来仍然会感到生活在这个时代真是太好了。新年伊始,至少就有上海和千叶的 Aqours Live & Fan Meeting 可以期待。

2017 年和非常棒的作品相遇真是太好了,旷野之息和奥德赛是过去无法想象的游戏,在不同的地方的影院看宝可梦电影版也是很多年前就有的梦想。接下来该前往「异度神剑2」的乐园了。

2017 年得到了很多梦寐以求的东西真是太好了,感谢 Nintendo Switch 和 iPhone X,都是想象不到的惊喜;有了 Project FI 也多少增添了一点安全感,虽然流量费的原因目前还只是 Last Resort

新年快乐,希望2018年是个好年。

自 2011 年拥有一台 WD My Book Live,网络附加存储,简称 NAS,就是我的数字生活中非常重要的一部分。目前,一台拥有 12TB 容量的 Synology DS916+ 是我的存储、媒体与智能控制的中心。

硬件配置

我的 NAS 是一台 Synology DS916+,9 代表 4 盘位 + 可以接入一台 5 盘位的扩展机,16 代表 2016 年款,+ 代表「适用于小型商务环境」的型号。同系列当前最新的型号是 DiskStation DS918+

目前机内装有 4 块 WD 为 NAS 专用的 4TB 红盘。由于较高故障率的经验,个人并不推荐选择(不过售后服务还不错,目前更换后的硬盘也保持稳定),这可能由于 WD 红盘本身的故障率(参考 Backblaze 2016 Q3 数据,根据 Backblaze 2017 Q2 数据已有改善)、代理商简陋的包装或电商不安全的运输或三者皆有。

4 块硬盘使用 Synology Hybrid RAID 组成 12TB 存储空间和 1 块硬盘容错。混合 RAID 的原因是由于存储空间从原先 6TB 升级而来,底层实际为多个 RAID 5 拼接而成。

NAS 的访问速度除 NAS 本身性能外,还受限于本地网络的速度,为保证理想的访问速度,强烈建议使用 5GHz 802.11ac 标准的路由器,我目前使用的是 ASUS RT-AC68U;远程访问的速度则主要取决于当地 ISP 的上行速度以及是否有公网 IP 地址。

NAS 使用

文件存储

首先 NAS 显而易见的需求是文件管理,Synology DSM 提供了 SMB / AFP / WebDAV 等协议的文件访问方式。由于 Apple 已经弃用 AFP,我也关闭了 AFP 文件共享。

在 macOS 与 Windows 平台,SMB 是主要的文件访问方式,NAS 可以被自动发现并直接用 Finder 访问。Web 端的 File Station 与 Transmit 等 WebDAV 客户端也可以访问 NAS,使用 WebDAV 客户端有一个好处是当需要在不同的顶级共享文件夹(非加密)之间移动文件时可以快速完成。

iOS 上有很多可以通过 SMB 或 WebDAV 协议访问 NAS 的 App,我目前使用的主要有 Transmit for iOSFileBrowser 和 Readdle 的 Documents。其中 Documents 有较好的文档浏览功能(结合 PDF Expert);Transmit 适合于移动文件、上传下载和与其他服务器传输。

iOS 11 提供了 File Provider extension,可以直接在原生文件应用管理云端文件,并可直接在第三方 App 打开和保存;Drag & Drop 功能也可以使文件方便地在不同 App 间通信。近日 FileBrowser 的更新为 Files 和 Drag & Drop 提供了完整的支持,所以 FileBrowser 目前是我主要使用的 NAS 文件管理 App。FileBrowser 也有 Apple TV 版本,可以浏览图片、播放音频和视频(仅限 tvOS 直接支持的格式)。

值得一提的是移动平台的 DS file(以及 Web 端 File Station)有一些独有的功能,比如在服务器端文件解压,使用其他工具都需要将压缩包下载到客户端解压后再上传,DS file 可以直接在 NAS 上完成;以及在加密文件夹直接移动文件等需要耗时的操作,使用 Synology 官方的工具会比较方便。

另外,包括 Omni 系列产品、DEVONthink、iWork 套件、 Notability 等 App 都提供了 WebDAV 的同步、访问或备份功能,可以直接将这些应用的数据存储到 NAS 上。(这里有一个不解是,Apple 在 iWork 应用中提供了在 Document Browser 浏览 WebDAV 服务器的功能,为什么不直接把它放到 Files App 中呢)

视频存储

家用 NAS 很大的一个用途是视频管理。Synology 提供了 Video Station 管理视频,不过 Plex 在全平台(iOS / Android / Windows UWP / Apple TV / Web / macOS / Windows)提供了更好的体验。

电影和电视节目类可以自动匹配的视频文件,我会采取和 iTunes 一致的文件夹/文件命名规则保存(例如/video/电视节目/プリンセス・プリンシパル/Season 1/08 case20 Ripper Dipper.mp4)。

我有很多动画与音乐 Blu-ray 和 DVD 光盘。入手光盘后,我首先用 Aurora Mac Blu-ray Copy 将光盘存档为 ISO 文件存储到 NAS 中(DVD 则用 MDRP),然后利用外出的时间用 Handbrake 转码为 HEVC(需要使用 nightly 版本以更好兼容 High Sierra 与 iOS/tvOS 11),在 iOS 11 发布前视频是转码为 H.264。目前 Video Station 和 Plex 均未支持在 iOS/tvOS 11 直接播放 HEVC,Plex 已确认正在进行相关开发,目前可以用 nPlayer(iOS)或 Infuse(iOS/tvOS)播放 HEVC 视频文件。

视频转码是一个比较纠结的问题,我的 MacBook Pro 2016 的 Skylake CPU 与 Radeon Pro 460 均支持硬件 H.264/HEVC 编码。然而 Handbrake 在 macOS 上并不支持硬件编码(有一个 Handbrake 的 fork 支持 macOS 上 H.264 的硬件转码,但不支持内嵌字幕和 HEVC);而在 Windows 上,Handbrake 虽然支持 Intel Quick Sync,但 Boot Camp 屏蔽了集成显卡,而 Handbrake 目前并不支持 AMD VCE 硬件编码,我尚未找到同时支持 Blu-ray 和 AMD VCE 的转码工具。希望这方面有研究的同学能有更好的方案分享。

另外,我曾将在 iTunes 购买的影片和电视节目用虚拟机中的 iTunes 10.7 与 Requirem 将 Fairplay 去除再保存到 NAS 中(因此曾在中国区买过的 iTunes 影片得以保留);目前 Apple 已禁止低版本 iTunes 下载 1080p 影片。

对于不属于电影和电视节目系列等可以自动匹配的视频文件,我没有放到 Video Station 和 Plex 自动索引的文件夹中,而是用单独的文件夹手工管理,在 iOS 设备用 nPlayer 播放,Apple TV 用 VLC 或 FileBrowser 播放。

值得一提的是 DS916+ 使用的 CPU 为 Intel Pentium N3710,支持 Intel Quick Sync 硬件编解码 H.264 与 HEVC(8bit)。除了 Synology 官方的 Video Station 支持硬件转码外,Plex Media Server(1.9.1 以上版本)也向 Plex Pass 用户提供了硬件转码支持,可以在服务器配置中开启。然而实际使用来看,硬件转码还存在一些问题,譬如 Video Station 不支持 Hi10P 和 10-bit HEVC 视频的硬件转码,Plex 开启硬件转码后,播放和拖动进度需要等待的时间特别长等。

音乐存储

作为 Anisong 爱好者会有大量音乐收藏。得益于 Steve Jobs 的贡献,在多数情况下购买音乐都不具有 DRM。对于购买的 CD,我会用 iTunes 抓取为 Apple Lossless 格式存储到 NAS 中,在 iTunes 购买的 AAC 音乐,则直接复制到 NAS 中。

Synology 提供了 Audio Station 管理音乐。由于 App 体验和缺少 Apple TV App 的原因,目前我主要用 Plex 管理和播放音乐。不过 Audio Station 有一个很好的特性是可以在客户端离线时,通过 AirPlay 或 USB 在家中播放。

偶尔我会使用 USB 声卡将音箱和 NAS 连接,除了 Audio Station 支持直接通过外置音箱播放外,我还在 Docker 中安装了 shairport-sync,可以将 NAS 作为 AirPlay 播放设备,这样可以直接将 iOS 设备播放的音频输出到 NAS 连接的音箱。

图片存储

Synology 提供了 Photo Station 管理图片,并支持自动创建缩略图、相册和自动从移动设备备份照片。不过功能的完善程度以及与操作系统的集成无法与 iCloud Photo Library 相比,所以我主要的照片存储工具仍然是 iCloud Photo Library,NAS 仅作为另一个备份。

然而由于 NAS 相对大的存储空间,对于来源不是 iOS 设备的图片,比如收藏的壁纸、CG 图、CD 与 Blu-ray booklet 扫描等较大体积的图片资源,我会只存在 NAS 中,在 iOS/tvOS 设备上通过 DS photo 浏览。另外,即将推出的 Synology Moments 还会提供人脸、位置识别等功能。

iOS 11 / A10+ 默认使用新的 HEIC 格式存储图片,遗憾的是 Photo Station 并不支持管理 HEIC 图片,DS photo 近日的更新中针对 iOS 11 的图片备份也会自动将 HEIC 转码为 JPG,这样不仅浪费存储空间,也会损失图片质量。如果只用 NAS 存储图片而不使用 Photo Station 的话,也可以 DS file 的图片备份功能,DS file 可以选择是否将 HEIC 转码为 JPG。

对于收藏的漫画,我会按章节或书册压缩为 zip 文件,然后用 ComicGlass 通过 WebDAV 串流阅读。

下载

Synology 的 Download Station 内置 HTTP/BitTorrent 等下载可以基本满足下载资源需求;除此之外,我通过 Docker 安装了 aira2,用于直接通过浏览器插件下载需要 Cookies 验证的内容。

另外,使用 youtube-dl-server,结合 Workflow,可以方便将视频网站的视频直接下载到 NAS 中。

智能控制

Synology 提供了可以用于视频监控的 Surveillance Station。我使用了 Foscam HD816P 作为 Surveillance Station 的摄像头。除了在指定时间进行动作检测、录像和推送通知外,新版的 Surveillance Station 还提供了便于家用的 Home Mode,可以直接根据 DS cam 应用的 Geo-fencing 功能自动切换监控设置,比如只有在离开家时才打开动作侦测和推送。

很多家用设备可以利用 Homebridge 来支持 HomeKit,NAS 可以代替 Raspberry Pi 在 Docker 中安装 Homebridge。目前我在卧室安装了 Yeelight 彩光灯泡,通过 Homebridge 可以实现在所有 iOS 设备控制。同时,由于 Apple TV 可以作为 HomeKit 中心,在 iOS 的家庭应用中也可创建计划自动控制智能设备。

开发

DS916+ 的性能能够满足很多小型开发的需求,Synology 提供的 Docker 也非常适合开发、部署和测试。

我在 NAS 上安装了 gogs 作为 self-hosted Git 服务,相比 GitLab 占用资源要小很多,并且能够满足绝大多数需求。个人的代码和一些服务的配置文件都放在这个 Git 服务中。另外,Docker 中还分别安装了 redis、PostgreSQL 等容器作为其他应用的依赖。

在 iPad 上写代码是很多 iPad 用户的梦想,有一台可以长期访问的主机为这样的梦想提供了可能性。Working CopyTextastic 已经可以在 iOS 上管理 Git 仓库和编写代码;我在 Docker 中配置了一个用于 nodejs 开发的容器,容器中安装了 ssh、zsh、git、vim 等工具,使用 Prompt 连接后即可进行相应的调试。

互联网

作为一台本地 Linux 主机,NAS 可以间接满足 Apple TV 和游戏机等不具备 Network Extension 的设备连接互联网的需求。我用的是 MEOW,运行在一个单独的 Docker 容器中。虽然 Apple TV 没有直接设置 Proxy Server 的 UI,不过可以通过 USB-C 接口连接 Mac 并使用 Apple Configurator 进行配置(Apple TV 4K 可以通过本地网络配置)。

在 Nintendo Wi-Fi Connection 关闭之前,有时我会用 Nintendo DS 连接网络,不过 DS 只支持 WEP 连接,无法直接连接家中的 WPA2 网络。NAS 只要插入一个 USB 无线网卡,并在 DSM 中进行一次简单的配置,即可临时创建一个不安全的 Wi-Fi 网络,当不需要时拔掉网卡即可恢复网络安全性。

备份

Synology 提供了 Hyper Backup、Glacier Backup、Cloud Sync 等备份或同步方案。根据 3-2-1 备份原则,NAS 中的重要数据我会在本地和远端各有一份备份。

本地的备份使用了 3 块被升级替换的 2TB 硬盘,备份时将硬盘通过 USB-C 硬盘盒连接到 Mac,然后分别使用 ChronoSync 进行增量同步(同类工具还有 GoodSync 或 Carbon Copy Cloner);NAS 中加密文件夹的内容会备份到加密 HFS+ 分区,其他内容则会备份到 exFAT 分区。

Synology NAS 也可以直接连接 USB 3.0 外置驱动器,并提供了收费的 exFAT 分区支持。考虑到操作方便、便于直接浏览、以及 802.11ac 网络速度和直接连接硬盘的速度相差不大的原因还是使用了 Mac 进行备份。

远程备份使用了两种方案。对于对安全性要求高且占用空间并不大的数据(例如图片、音乐、Git 仓库),每周会通过 Hyper Backup 增量备份到 Amazon S3;对于整理好的视频文件、购买的 DRM free 游戏等,则会用 Cloud Sync 单向同步到比较廉价的 Backblaze B2 存储(目前 Hyper Backup 尚不支持 Backblaze B2,使用单向同步可以避免远程的误操作误删文件)。其他诸如 Blu-ray ISO 由于已经是其他存储媒介的备份,且占用空间极大没有做重复的备份。由于其过于复杂的计费规则和取回方式,个人不推荐使用 Glacier Backup。

至于 Mac 的 Time Machine,我是使用了一块升级替换的硬盘通过 USB-C 硬盘盒连接到 Mac 备份,而没有用 NAS 作为 Time Machine 的存储。原因主要是对目前通信方案的担忧(AFP 协议已被 Apple 弃用,目前版本的 Samba 尚未完全支持 Apple 的 Time Machine over SMB 标准),曾经使用 NAS 作为 Time Machine 存储时也发生过几次 Time Machine 需要重建的经历。另外将 Time Machine 存储到 RAID 中也有空间浪费和频繁的磁盘读写,Accidental Tech Podcast 曾提到他们的 Time Machine 存储在 NAS 单独的未做冗余的卷中,也是一个不错的方案。

另外,52Poké 的数据,除每日备份到 Amazon S3 外,也会每周使用 rsync 脚本备份快照到这台 NAS 中。

安全

对 NAS 来说,安全的重要性不言而喻。Synology 也提供了安全审计功能可以进行基本的检查。除此之外,还有一些需要注意的点:

  • 保持最新的 DSM 和套件版本
  • 使用唯一的强密码
  • 尽量将文件存储在加密的文件夹
  • 所有第三方应用(不在官方应用套件市场的应用)使用 Docker 安装,并最小化开放的权限和文件夹
  • 关闭 SSH 的密码校验,每个连接设备/应用使用单独的 Private Key
  • 在配置外部访问时,务必不要将任何未经加密的端口暴露在公网
  • 开启两步验证

其中非常重要的是避免将未经 TLS 或 SSH 加密的端口暴露于公网,尤其是经常使用的 WebDAV 等服务,第三方 App 如 Plex 也尽量开启「只允许加密连接」等选项。未经加密的连接意味着 ISP 或开放 Wi-Fi 等可以轻易拿到 NAS 账号与密码,在安全环境日益恶化的情况下是非常危险的。

电源

使用 UPS 备用电源对 NAS 来说是必要的,我使用的是 APC BX650CI。为 NAS 选择备用电源建议选择支持 USB 接口连接的产品,这样当断电时,NAS 能收到消息,并通过 Push 推送通知使用者和在电量较低时自动关机。

不足

目前这台 NAS 比较大的遗憾是,由于不便重建已用 9TB 的 Volume,未能享用 Synology DSM 支持的 btrfs 文件系统的优势,也因此无法使用 Virtual Machine Manager 创建虚拟机。希望有一天,btrfs 能像 Apple 的 APFS 一样提供从 ext4 安全转换的方案。

这里也简单提一下对 Synology 的吐槽。iOS 9 发布已超过两年,而目前很多 Synology 第一方 iOS 应用都尚未支持 Split View、Picture in Picture 和 iPad Pro 屏幕,至于 iOS 11 的 Files 和 Drag & Drop 支持可能更是遥遥无期。而这些 iOS 特性,对于生产力工具的 NAS 应用而言至关重要。

总结

「云」的存在是今天数字生活的重要部分,由于设备和时间的碎片化,我们对本地存储需求有种日渐式微的错觉。然而「云」本身是不稳定的存在,无论是商业公司间版权纠纷的「大人的事情」,还是随时发生的不可抗力都会让原本可用的比特瞬间消失,甚至赖以生存的真正互联网是否能一直连通都是个巨大的问号。于是在触手可及的物理空间拥有数 TB 的存储,相对永久地保存一些东西,是一个能够带来哪怕很微弱的安全感的重要存在。

2016年对我来说,是有点忙乱和复杂的一年,有很多激动人心的事发生,最大的梦想成为真实,有非常多的相遇和相连;然而这个世界的某些地方也显露出它不美好的一面。


工作上终于稍微有点像个「全栈工程师」的样子了,虽然称不上好事或坏事,但接触到更广泛的东西,在不同开发语言和平台间切换对我来说并不是一件讨厌的事。

从 wax/JSPatch 到 React Native/Weex,再到年末诞生的 DynamicCocoa 与 OCS,iOS App 变得越来越动态化。从个人而言,这一点大大减轻了工作的压力,点击 Release this version 按钮稍微不讨厌了一点。然而当下发的代码不再需要符合 Apple 的审核标准,以及快速迭代的上线代替精心打磨的发布,作为 iOS 使用者的自己却难免有点心情复杂。

App Transport Security 的一纸通知,地方 ISP 的 HTTP 劫持和 Let’s Encrypt 等服务的出现让整个业界真正重视安全这件事。不过大概由于 iOS 9 WKWebView 无法单独豁免等原因,Apple 在年末把 deadline 无限期推迟了。

开始习惯用 TypeScript,2016年仅有一点 GitHub 活动却有一大部分是给用到的 npm 库写 DefinitelyTyped,不过却被批评了不该写 hack 假装是 ES2015 Module (笑)。说起来大概也因此,最近常用的编辑器逐渐从 Sublime Text 变为 Visual Studio Code 了。

关于从 Web 向 Native App 引流这件事,从 2015 年开始就心情有点复杂。从商业的角度是一件自然的事但用 URL Scheme 从 Web 跳入 Native App 并不是一种好的体验。然而 Universal Link 与 NSUserActivity 的出现已让它变得并不糟糕,如今无论是使用 Medium、Instagram、淘宝还是 Bilibili,都会很自然地点击一个 URL 然后进入 Native App 对应的位置。这才发现我所在乎的 Open Web 是它的开放性本身,是 URI,而不是具体的 HTML 吧。

2016年有点遗憾的是没有写很多 Swift,不过一年间认真去看了 swift-evolution 里很多 proposal,感受到语言的进化真是太伟大了。不过也因此,即使是在日常 Objective-C 和 JavaScript 的工作中,也尽可能用 Protocol-oriented 和 Functional 的思想。

2017年的话,大概会尝试做一点更有挑战的事情吧,然后同样重要的是回归初心。从一开始选择一份用户产品相关的工作,就是希望自己做的事情能够让一些人的生活稍微变好那么一点——就像自己从那些喜欢的工具中得到的一样。所以也继续尽可能接近这个目标吧。


52Poké Wiki 全年 PV 增长了 84%,2月末中文化公告、7月 Pokémon GO 上线、椰蛋树(阿罗拉的样子)公开和11月太阳/月亮发售是对访问量影响最大的几个时间点,最大 PV 发生在11月27日,最大 UV 发生在8月8日。

随着流量增长伴随着的就是频繁收到的流量告警邮件,因此做了一点微小的工作,为支持 WebP 的浏览器提供 WebP 版本的图片,使图片流量下降 2/3 左右(遗憾的是,iOS 10 Beta 曾出现的 WebP 支持在正式版去掉了)。到8月开始使用 CloudFlare CDN 承担一部分流量,终于使支出相对 2015 年没有增加。

除此之外,11月终于把 52Poké 搬到了 Linode Tokyo 2 数据中心,硬件升级到 8GB RAM 和 14nm Xeon CPU。52Poké 上的多数应用也都放入了 docker 并相互最大限度隔离。虽然经常遇到种种意外,不过依然坚持使用 Arch Linux 并经常滚动更新这个任性的选择 : )

有点惭愧(不过也没有太惭愧)的是,2016年并没有太多精力花在 52Poké 的具体工作上,计划的讨论区更换 NodeBB 和插件重制只有 50% 不到的进度,百科方面无论是机器人还是移动版都堆积着不少事情。

2017年会努力把想做的事情补起来,另外一个重要的努力目标是百科机器人也好,MediaWiki 插件也好,NodeBB 配置和 OAuth 接口也好,甚至是 nginx 配置与 Dockerfile 之类的东西,尽可能用更多人可以参与的方式在 GitHub 开源。希望在 52Poké 能有更多像希特隆或马玛内一样的训练家出现吧。


2016年最重要的事,果然是「精灵宝可梦 太阳/月亮」中文化,时至今日,依然觉得没有太大的实感。

GMT+8时间2016年2月26日晚23时02分,在 Apple TV 看到 Pokémon YouTube Channel 上出现「相連」「相连」的一瞬间和之后的几个小时,隐约记得是在尖叫,然后呆滞,然后大哭了一场。从10多年前开始就等待的一天,从11年前开始做的事就是为了这一天,以及两年前,抱着「说不定成功了呢」的想法做了一点小小的努力。

除了亲切的母语文本和可以不用再为专有词汇的译名纠结,对太阳/月亮最大的感受是很多微妙的细心的进步。比如按Y选择精灵球,比如选择招式时提示效果,比如抓到宝可梦后可以选择留在队伍,以及捕捉和进化新宝可梦后直接出现的图鉴,比如洛托姆图鉴告知旅行的目标,比如打开电脑直接进入移动宝可梦。

个人的体验来说,阿罗拉的旅行用一个词来说大概就是「相连」吧,和各位队长、岛屿之王与岛屿女王们邂逅,得到他们与霸主宝可梦的指引和认可;对很多路边训练家印象深刻,比如在好奥乐墓园,一位用沉睡在这里的宝可梦的声音问候的宝可梦培育家,比如一位自称从泳裤男进化而来的登山男;认识来自不同世界的宝可梦与人类;以及最重要的,和亲爱的莉莉艾一起旅行一起成长一起为了彼此的目标努力。

说起来,可能由于捕捉究极异兽太过轻松并没有像X·Y或者黑白2一样所生活的地方遭遇危机的感觉,但这样也更有「生活在这里」的实感吧。最近打开太阳版,刚岛屿扫描结束后忽然听到洛托姆图鉴说「想念莉莉艾了洛托,加油莉莉艾洛托」,有点伤感但也有点惊喜呢。因为忽然意识到它并不是 AI 而是一只真实存在的宝可梦,和我有一样心情的宝可梦。

太阳版捕捉了所有的UB,月亮版刚刚结束波尼岛的考验,这段还在继续的旅行总结起来就是「能够遇见你,真的太好了」。


2016年作为 LoveLiver 是充实又艰辛的一年。从2015年底震惊的消息开始心情一直很复杂和不安,但不安感在1月末的Fan Meeting就被冲散了,想要见到μ’s这样的愿望终于实现了,以及第一次成为了梦中白色到橙色海洋的一部分。时至今日那一天的记忆仍然是非常完整的。然后Final LoveLive 的日子逐渐接近了。

不过由于有了看转播的机会的惊喜都来不及伤感,4月1日在有点拥挤的浅水湾q.house度过了这一年最难忘的6个小时。那一场集大成者的Live每一帧都无比美好,但要简短地总结的话,果然是「今が最高」吧。

虽然是已经有心理准备和完全可以理解的事,但毕竟是告一段落难免会有失去了什么的心情。然而没有想到的是接下来有段更艰难的日子,像太阳一样给这个世界带来光明的人,却被这个世界阴暗角落的恶意所袭击,大概从那时开始,渐渐觉得今年这个世界的不美好显露出来了。

然而果然是像太阳一样的人啊,比起担心更多的是大家的Event repo与Live MC与新的推特账号带来的安心和坚定。7月在BMLSP见到她以及喜欢的很多人,8月穗乃果生日时加入了EmiRing,10月在FC里读到「到现在,有失败和挫折以及不甘心的时候,但东蛋之后的半年间,我还是要说今が最高」终于彻底安心并且相信这个世界还是美好的一面有更强大的力量。

FL结束后,μ’s成员个人活动逐渐多了起来,下半年有幸参加了3位的Event,也一直关注着她们的CD与BD。偶尔出现的合影和杂志也总在提醒着我们μ’s没有并且永远不会消失。

另外就是和Aqours相遇。虽然Aqours开始活动是2015年的事,不过16年才开始认真地关注生放送与广播,动画也在7月开播;其实完全放下心中某些芥蒂是因为4月二单纪念生放送她们提到了μ’s Final LoveLive 的事,虽然是很微妙的原因但就是从那时开始觉得需要认真地关注Aqours她们了。

之后渐渐了解到她们每个人都是很独特和可爱的人,知道了杏树和自己一样最喜欢精灵宝可梦红宝石·蓝宝石并且最初的宝可梦选择了水属性;看到爱香和夜羽越来越心意相通;以及动画中她们輝きたい的故事、曜ちゃん的心意和三年级的过去。1st Live的BD抽选都没有中希望还能有机会哪怕转播也好,毕竟10月没有去广州是2016年最后悔的一件事。

但是讨厌的是那些有实质威胁的水黑存在。至今最不能理解的是明明本来曾是一起互相鼓励支持的人,明明同样追随着一群美好的人,为什么其中有些人会对一群充满梦想追随者前辈的孩子有如此大的恶意。


2016年这个世界的科技与艺术创作方面都有很好的事情发生,然而另一面的是某些阻碍进步、阻碍这个世界相连的力量也变得强大。从某部 iPhone 被要求解锁开始,基本的信息自由和权利就一再遭到践踏,即使是在本来应该尊重这些的地方;大西洋两岸与东南亚的人们接连作出了相当糟糕的选择。对我来说,「这个世界是一直在变好的」这样朴素的认知被打破了,但是仍然相信的是,用讨厌的教科书上的话来说,虽然道路是曲折的,但前途是光明的吧。


2016年看过的动画

冬季

  • 无彩限的灵怪世界
  • 少女们向荒野进发
  • 死亡黑标
  • 为美好的世界献上祝福
  • 只有我不在的街道
  • 粗点心战争
  • 赤发白雪姬 第二季
  • 苍之彼方的四重奏
  • 幸运逻辑
  • 春&夏推理事件簿~春太与千夏的青春~
  • 红壳的潘多拉

春季

  • 逆转裁判
  • Re:从零开始异世界生活
  • 甲铁城的卡巴内利
  • 线上游戏的老婆不可能是女生?
  • 爆音少女!!
  • 三者三叶
  • Anne Happy♪
  • 迷家
  • 高校舰队
  • 学战都市Asterisk 第二季

夏季

  • LoveLive! Sunshine!!
  • 星之梦
  • NEW GAME!
  • 这个美术部大有问题
  • Rewrite
  • 弹丸论破3:绝望篇
  • 弹丸论破3:未来篇
  • 食戟之灵 贰之血

秋季

  • 精灵宝可梦太阳&月亮
  • 吹响吧!上低音号 2
  • 终末的伊泽塔
  • 斯特拉的魔法
  • 超自然9人组
  • 少女编号
  • 灼热的乒乓球娘

补番/完结

  • 精灵宝可梦XY&Z
  • Angel Beats!
  • Little Busters!
  • WHITE ALBUM2

电影版

  • 精灵宝可梦XY&Z 波尔凯尼恩与机关人偶玛机雅娜
  • 你的名字。
  • 名侦探柯南:纯黑的恶梦
  • 玻璃之花与崩坏的世界
  • 心灵想要大声呼喊

2016年玩过的游戏

  • 精灵宝可梦 太阳
  • 精灵宝可梦 月亮
  • 宝可梦超不可思议的迷宫
  • 宝拳
  • 超级马力欧酷跑
  • 极限脱出:时之困境
  • 节奏天国:The Best+
  • 逆转裁判6
  • 大逆转裁判:成步堂龙之介的冒险
  • 英雄传说:空之轨迹FC Evo
  • 初音未来 Project DIVA X
  • 初音未来VR Future Live
  • Nekopara Vol.2
  • Persona 4 Dancing all night
  • 方根书简

2016 Events

  • 01.30 - μ’s Fan Meeting in Shanghai
  • 02.26 - 精灵宝可梦太阳/月亮公开
  • 04.01 - μ’s Final LoveLive! Day2 转播
  • 07.24 - Bilibili Macro Link Star Phase
  • 10.29 - 饭田里穗 Birthday Tour 2016
  • 11.13 - Pile Asia Tour 北京站
  • 11.18 - 精灵宝可梦太阳/月亮发售
  • 12.10 - HATSUNE MIKU EXPO 2016 in Beijing

2016 广播/生放送

  • μ’s果鸟海姬一夜限定生放送(完结)
  • Aqours nico生课外活动(不定期)
  • Aqours 浦之星女学院RADIO!!!
  • 伊波杏树的奇思妙想真的真的没问题?(完结)
  • 水濑祈MELODY FLAG
  • 请问您今天要来点兔子吗 智麻惠队的泡芙广播

2016年新设备

  • PlayStation VR
  • Synology DS916+
  • MacBook Pro 15” 2016
  • AirPods

有幸首批买到 PlayStation VR 头盔,体验果然是「打开了新世界的大门」吧,玩的最多的 VR 游戏是「初音未来VR Future Live」,和在真实世界参加初音 Live 有相似的感觉但有些完全不一样的体验(比如若无其事地跑到舞台上和飞到半空中),第一次听到Miku说「这是只有两个人的encore哦」被感动到了。

由于 DS415+ 一个硬盘接口坏掉了,被客服建议折价退款所以正好升级到 916+,因为无法硬件转码 10bit 的视频格式,相比起来多了的这个功能并不是很实用,如果能支持软件解码硬件编码就好了。

2016年的 MacBook Pro 升级存有很多争议,不过我对 Touch Bar 和只保留 USB Type-C 接口的 courage 非常满意,最喜欢的一点是 Safari 播放 HTML5 视频时 Touch Bar 可以完美操控,新电脑各方面比从前的 2013 MacBook Pro 13” 快 1-3 倍,即使 Handbrake 满载时噪音和发热也控制的不错。虽然直到 macOS 10.12.2 还有很多不大不小的 bug,虽然电池容量确实不尽人意,但它确实是目前最佳的选择。很多人对 Mac 的未来有不小的担心,希望这些负面的报道与分析能推动 Apple 为 Mac 投入更多精力。

AirPods 是2016年最惊喜的设备,使用一周多的感想就是「耳机本来就应该是这个样子啊」,佩戴合适,音质足够好,种种小细节和切换设备的体验太棒了。

2016 Best New Apps

  • Surge (Mac)
  • Bear (Mac / iOS)
  • Spark (Mac / iOS)
  • Annotable (iOS)
  • Day One 2 (Mac / iOS)
  • Copied (Mac / iOS)
  • Pocket Casts 6 (iOS)

虽然开始总结的时候觉得2016年是有点复杂的一年,但总结下来才发现这一年是收获满满的一年。诸岛巡礼,和莉莉艾的相遇,有关μ’s的回忆以及与Aqours的相遇是2016年非常重要的东西。虽然这样说很奇怪,总觉得心理年龄方面自己停止成长了(笑),曾经对 Peter Pan complex 的执念如今却觉得是再正常不过的事情。总是会莫名消极的自己想到这一点、以及看到 Bear 中记录的期待和预定,就会立刻积极一些 :)

2017年的希望的话,希望自己英语日语和算法方面能有比较大的进步,工作方面有稍微不同的尝试;能有什么 side project 就好了;一定要去旅行一次;要把阿罗拉图鉴集齐;想要见到 Aqours;想要多写一点什么,学会一点点画画;要把2016年拖延的事情和游戏完成……还有就是,继续不要长大吧。

总之要更加油一点嗯。がんばリーリエ!がんばルビー!がんばリボン!

Blogging is always something I cherish, something I always want to keep doing, however also something I never could keep doing on a regular basis. I registered the domain mudkip.me many years ago. As time goes by, I toggled between various blogging platforms and the most recent one is Tumblr.

I chose Tumblr because it’s convenient, fun and modern in 2011. Tumblr respects the ownership and personality of its users. It does social just right. However Tumblr is no longer great for me as a blog platform today. I have to use ‘display:none’ CSS to hide the banner to promote Tumblr app. I can’t get rid of a lot of tracking scripts. And I want more freedom with the domain I own.

This blog is now powered by Hexo, a powerful static blog framework. It’s hosted on GitHub and updated with Git. I set up a webhook to automatically deploy to GitHub Pages when I push my hexo repository. I’m also building an iOS blog workflow with Ulysses, Working Copy and Workflow. And as always, I love writing and I wish I could write more.

My previous posts is still available at Tumblr. They might be migrated here someday. :)

0%