<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Never迷の小窝</title>
  <subtitle>迷の生物的迷の小窝</subtitle>
  <link href="https://blog.never.pet/feed.xml" rel="self"/>
  <link href="https://blog.never.pet/"/>
  <updated>2022-07-04T00:00:00Z</updated>
  <id>https://blog.never.pet/</id>
  <author>
    <name>NeverBehave</name>
    <email>i@never.pet</email>
  </author>
  
  
  <entry>
    <title>Headless Mac Mini 折腾记</title>
    <link href="https://blog.never.pet/posts/headless-mac-mini/"/>
    <updated>2022-07-04T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/headless-mac-mini/</id>
    <content type="html">&lt;h2&gt;事故前提&lt;/h2&gt;
&lt;p&gt;Nix天生和JS一棒子包管理八字不合，在经过一系列斗争之后，我屈服了。搞个macos好了，毕竟现在大家适配不都是mac，实在是不想和工具打架了。&lt;/p&gt;
&lt;p&gt;看了一眼，M2 Macbook马上就要出了，Air改了设计，我最喜欢的锥形设计没了，而且只有两个同侧的type c？还1100刀8GB？再见再见。那就看看M1 Macbook吧，这不是马上要发布新款了，估计要降价把，899刀，8G，怎么想要个16G这么难，而且还是感觉有点贵。反正都是用，看看有没有人出二手吧。&lt;/p&gt;
&lt;p&gt;看了一圈便宜了差不多100左右把，感觉还是一般般，主要是自己刚买了个笔记本，前前后后也花了1500，为啥我还要买个笔记本？出门带着也很重，那不如考虑一下mac mini好了，直接从笔记本远程上去。8G要649，不错，看一眼16G，哇塞要加200，隔着抢钱呢！不就是逼人买底配呗，那既然都是底配了，直接看二手，花的越少越好。500块钱，不错，还不用给税。那就这样愉快的定啦！&lt;/p&gt;
&lt;h2&gt;尝试动手&lt;/h2&gt;
&lt;p&gt;收到机器，配置好，看了一眼状态，启动88次，SSD写入300G读取500G，状态很好！主要是现在Mac SSD都是銲死的了，SSD没了机器也废了……&lt;/p&gt;
&lt;p&gt;首先进去先到&lt;code&gt;设置-&amp;gt;共享&lt;/code&gt;打开&lt;code&gt;屏幕共享(vnc)&lt;/code&gt;和&lt;code&gt;远程登录(ssh)&lt;/code&gt;。ssh我强烈建议开启，后续会提到为什么……&lt;/p&gt;
&lt;h3&gt;Resolution 分辨率&lt;/h3&gt;
&lt;p&gt;由于默认没有显示器的情况下，链接VNC将会默认创建一个&lt;code&gt;1920x1080&lt;/code&gt;的&lt;code&gt;Unknown Display&lt;/code&gt;。这个东西的分辨率是无法调整，但是如果显示器的情况下VNC将会直接挂载现有的。我推荐这个时候可以用&lt;a href=&quot;https://github.com/waydabber/BetterDisplay&quot;&gt;BetterDisplay&lt;/a&gt;来创建一个合适分辨率的&lt;code&gt;Dummy&lt;/code&gt;，挂载上去，然后再链接。&lt;/p&gt;
&lt;p&gt;注意记得开启&lt;code&gt;low resolution&lt;/code&gt;否则苹果的retina设定，大小还是会不匹配。每次更改分辨率以后，这个软件会默认把这个勾去掉，所以记得重新打回去&lt;/p&gt;
&lt;p&gt;如果需要重新启动VNC Server：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://bytesandbolts.com/remotely-restart-mac-os-x-in-built-vnc-server/&quot;&gt;http://bytesandbolts.com/remotely-restart-mac-os-x-in-built-vnc-server/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart &lt;span class=&quot;token parameter variable&quot;&gt;-restart&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-agent&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ScreenSaver 屏幕保护&lt;/h3&gt;
&lt;p&gt;这个是真的头大，屏幕保护默认是&lt;strong&gt;不能从VNC解除的&lt;/strong&gt;。我尝试了很多组合键，最后还是ssh进去杀掉有用：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;killall&lt;/span&gt; ScreenSaverEngine&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然而就算你在设置里面把屏幕保护和节能一系列选项全关上，这个玩意还是会随机在你用的时候启动 --- 这其实是有个设置选项被从UI隐藏了，好家伙啊好家伙：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/macmini/comments/posw4u/m1_mac_mini_screen_saver_still_randomly_invokes/&quot;&gt;https://www.reddit.com/r/macmini/comments/posw4u/m1_mac_mini_screen_saver_still_randomly_invokes/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; defaults &lt;span class=&quot;token function&quot;&gt;write&lt;/span&gt; /Library/Preferences/com.apple.screensaver loginWindowIdleTime &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;重启&lt;/h3&gt;
&lt;p&gt;这是另外一波头疼的问题，如果你开启了&lt;code&gt;filevault&lt;/code&gt;，那么重启以后必须要用键盘解开硬盘才能启动VNC这些服务。所以……这怎么搞啊艹，那就关了咯。&lt;/p&gt;
&lt;p&gt;如果真的开了但是又要重启的话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://apple.stackexchange.com/questions/225818/how-to-perform-filevault-authenticated-restart-when-updating-osx-from-appstore&quot;&gt;https://apple.stackexchange.com/questions/225818/how-to-perform-filevault-authenticated-restart-when-updating-osx-from-appstore&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;sudo fdesetup authrestart
&lt;/code&gt;&lt;/pre&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>给 LSI 9266-8i 刷 IT Mode</title>
    <link href="https://blog.never.pet/posts/lsi-9266-8i-to-it-mode/"/>
    <updated>2022-06-22T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/lsi-9266-8i-to-it-mode/</id>
    <content type="html">&lt;h2&gt;前提的前提&lt;/h2&gt;
&lt;p&gt;这个故事的经历以失败暂告一段落，但是着里面的过程我觉得还是值得记录一下。估计以后也用得上 --- ZFS还是一定要IT Mode，没办法。如果你想尝试一下的话不妨接着往下看，我稍微把工具都整理了一下&lt;/p&gt;
&lt;h2&gt;事故前提&lt;/h2&gt;
&lt;p&gt;18年的时候有我和另外一个朋友合组了一台HP 380P G8，这是一台相当老的服务器。21年左右的时候尝试升级了一下，结果后续内存和硬盘各种爆炸，所以想着晚些时候直接换个新的上去好了。结果新的服务器到了以后，文件系统我们换成了ZFS，不再是和以前一样的硬件RAID。ZFS需要直通模式，他既是文件系统，本身也包含了卷管理的功能。大部分RAID卡虽然提供了类似的模式，比如说给你每个盘开RAID 0，或者是提供了一个HBA Mode，但这些模式通常都是由软件模拟的，除了性能可能存在问题，有些甚至无法读取&lt;code&gt;smartctl&lt;/code&gt;。所以一般来说会找那种可以刷成直通模式，让卡本身不做任何处理的固件。但是……&lt;/p&gt;
&lt;p&gt;这次我给搞忘了！反应过来的时候旧机器都已经寄到家门口了……新机器内置的RAID卡&lt;code&gt;P440ar&lt;/code&gt;虽然是有HBA模式，看着性能也没啥问题，但是这机器发出去就很难再调整硬件配置，为了保险起见，还是单独弄一张带&lt;code&gt;IT Mode&lt;/code&gt;固件的卡好了。&lt;/p&gt;
&lt;h2&gt;理论可行&lt;/h2&gt;
&lt;p&gt;翻箱倒柜找到了一张旧机器里面的&lt;code&gt;9266-8i&lt;/code&gt;，搜索了一下，似乎并没有特别多的资料。但是似乎有人留下了一篇&lt;code&gt;cross-flashing&lt;/code&gt;的经历：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://mywiredhouse.net/blog/flashing-lsi-2208-firmware-use-hba/&quot;&gt;https://mywiredhouse.net/blog/flashing-lsi-2208-firmware-use-hba/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;大概意思就是Supermicro主板内置刚好也有一块LSI的RAID卡，控制器是&lt;code&gt;SMB2208&lt;/code&gt;。这个版本刚好是没有&lt;code&gt;IT Mode&lt;/code&gt;的。但是&lt;code&gt;SMB2308&lt;/code&gt;有。然而，2208和2308虽然型号不一样，背后的架构其实是差不多的，甚至芯片都是用的一样的……那么，有没有可能可以直接想办法把2308给的固件刷到2208里面呢？&lt;/p&gt;
&lt;p&gt;答案是可以，作者发现这是真的能用。那么采用2208控制器卡有很多变种，比如我手里这块&lt;code&gt;9266-8i&lt;/code&gt;其实也是同样的芯片组:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考 &lt;a href=&quot;https://docs.broadcom.com/doc/12353227&quot;&gt;https://docs.broadcom.com/doc/12353227&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以如果这个用2208的卡可以，那么其他用同样的控制器的卡，理论上有概率也是可以的。&lt;/p&gt;
&lt;p&gt;所以我们开始试试看把！&lt;/p&gt;
&lt;h2&gt;准备环境&lt;/h2&gt;
&lt;p&gt;配置2208首先要使用DOS环境把卡清空，才可以再刷入2308固件。所以&lt;a href=&quot;https://www.freedos.org/download/&quot;&gt;FreeDOS&lt;/a&gt;走起。&lt;/p&gt;
&lt;p&gt;如果你有多个U盘的话，可以选择直接下载LITEUSB的镜像写入。这里的问题是因为你还需要把各种工具和固件放进去 --- 虽然你U盘可以很大，但是镜像的文件系统本身为了压缩大小，是限定了分区大小的。也就是如果你没有第二个U盘，你可能还得想想办法扩容分区。我实在是懒得折腾了，Archlinux有个提前分了2G大小压缩后的镜像，但是写入是结结实实要2G。FreeDOS提供的FullUSB镜像在本次过程中分区大小是足够的。&lt;/p&gt;
&lt;p&gt;主要要准备的东西有：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;9207_8i_Package_P20_IR_IT_FW_BIOS_for_MSDOS_Windows.zip  (has the 9207-8.bin firmware and mptsas2.rom bios in it)&lt;/li&gt;
&lt;li&gt;lsi2208fixer.zip (has &lt;code&gt;megarec&lt;/code&gt;, &lt;code&gt;megacli&lt;/code&gt;, &lt;code&gt;sas2flash&lt;/code&gt;, and this has the 2208 recovery firmware)&lt;/li&gt;
&lt;li&gt;sas2008.zip  (提取 &lt;code&gt;sbrempty.bin&lt;/code&gt; file in it)&lt;/li&gt;
&lt;li&gt;Installer_P20_for_UEFI.zip (this has the version of sas2flash.efi in it for UEFI shell)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;注意的点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在我测试的过程中，P14和P20的刷写软件都认为9266是兼容的固件。如果你的卡刷不了，可能你要准备P14的固件。我都放在了文章最后的链接里面&lt;/li&gt;
&lt;li&gt;lsi2208fixer那个镜像里面包含了所有的工具，但是问题就是分区太小了一点。我选择直接复制里面的文件到FullUSB镜像&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;镜像直接dd即可：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;dd&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;FD13FULL.img &lt;span class=&quot;token assign-left variable&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;/dev/sda &lt;span class=&quot;token assign-left variable&quot;&gt;bs&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;1M&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;开个文件夹，正常挂载文件系统即可，不需要额外参数。文件我是开了个文件夹直接放在根目录。&lt;/p&gt;
&lt;h3&gt;FreeDOS指令快速入门&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;dir&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;# Same as cat&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;more&lt;/span&gt; 
&lt;span class=&quot;token comment&quot;&gt;# &gt; &amp;lt; 这些管道符都是可以正常使用的&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 调用程序直接输入名字即可&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 可以用tab补全&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 有些时候程序名字太长会被缩写，要留意下输出&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;dos/16M error: [40] not enough available extended memory (XMIN)&lt;/h3&gt;
&lt;p&gt;这个问题在我的机器上遇到了，找了一圈看到了这个：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.unraid.net/topic/12114-lsi-controller-fw-updates-irit-modes/page/63/&quot;&gt;https://forums.unraid.net/topic/12114-lsi-controller-fw-updates-irit-modes/page/63/&lt;/a&gt;
Pulling a stick did nothing, that still left me with 4GB in the PC. I couldn&#39;t get around this no matter what I tried. I ultimately had to replaced DOS4GW.EXE with &lt;a href=&quot;http://dos32a.narechk.net/index_en.html&quot;&gt;DOS/32A a more recent DOS Extender&lt;/a&gt; which didn&#39;t have a problem with what I guess is TOO MUCH ram. I just dumped everything from the extract binw directory into the root of my USB drive and renamed DOS32A.EXE to DOS4GW.EXE and the DOS parts worked.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;拔内存我留4G也没有用，和这个人症状一样。之前在服务器256G都能跑起来，让我很困惑（我换PC的原因是因为服务器重启很慢而且很吵）。但是他里面说道这个Extender确实解决了问题：先&lt;a href=&quot;https://dos32a.narechk.net/content/download.html&quot;&gt;下载这个extender&lt;/a&gt;，然后把里面文件解包全部放到和工具一个目录下，再把&lt;code&gt;DOS32A.EXE&lt;/code&gt;改名成&lt;code&gt;DOS4GW.EXE&lt;/code&gt;，问题解决。字符串搜索了一下，&lt;code&gt;megarec&lt;/code&gt;里面确实提到了这个EXE，有点意思。&lt;/p&gt;
&lt;h2&gt;第一步，清Flash&lt;/h2&gt;
&lt;h3&gt;先看看设备在不在&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;megarec &lt;span class=&quot;token parameter variable&quot;&gt;-adplist&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;备份一下原本的固件&lt;/h3&gt;
&lt;p&gt;备份结果会在当前目录产生&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;megarec &lt;span class=&quot;token parameter variable&quot;&gt;-readsbr&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; smc2208.sbr
megarec &lt;span class=&quot;token parameter variable&quot;&gt;-readspd&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; smc2208.spd
megacli &lt;span class=&quot;token parameter variable&quot;&gt;-adpallinfo&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-a0&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; allinfo.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;allinfo.txt&lt;/code&gt;包含了SAS Address，记得存留&lt;/p&gt;
&lt;h3&gt;刷Flash&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;megarec &lt;span class=&quot;token parameter variable&quot;&gt;-writesbr&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; sbrempty.bin
megarec &lt;span class=&quot;token parameter variable&quot;&gt;-cleanflash&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果没有报错，重启后进入下一步&lt;/p&gt;
&lt;h2&gt;Cross Flashing&lt;/h2&gt;
&lt;p&gt;在这里我遇到了个奇怪的问题，之前我是用服务器直接刷的，DOS里面&lt;code&gt;SAS2Flash&lt;/code&gt;是可以看得到卡，但是换到PC就找不到了，所以我用了&lt;code&gt;sas2flash.efi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果你遇到类似的问题，需要进入&lt;code&gt;EFI Shell&lt;/code&gt;来处理这个问题，目前的主板一般都会内置一个Shell，所以不需要额外下载EFI执行文件。下面是一些常用的指令：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;map &lt;span class=&quot;token comment&quot;&gt;# 查看所有的映射&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# efi需要FAT&lt;/span&gt;
fs0: &lt;span class=&quot;token comment&quot;&gt;# 切换到对应的文件系统&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 直接看fs开头的找你的U盘&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 程序执行直接文件名即可&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;列出设备&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sas2flash &lt;span class=&quot;token parameter variable&quot;&gt;-list&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;刷写固件&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sas2flash &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;9207&lt;/span&gt;-8.bin &lt;span class=&quot;token parameter variable&quot;&gt;-b&lt;/span&gt; mptsas2.rom&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你不需要选项，可以忽略&lt;code&gt;-b&lt;/code&gt;的rom部分，这样开机就不会进bios，速度快一点。&lt;/p&gt;
&lt;h4&gt;其他选项&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;sas2flash&lt;/code&gt;其实有很多清理模式：&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sas2flsh &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-e&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会清理rom和固件，但是会保留基本信息，例如SASa。&lt;code&gt;7&lt;/code&gt;就是清除所有信息&lt;/p&gt;
&lt;h3&gt;写回SASa&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;sas2flash &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sasadd&lt;/span&gt; 50030480195exxxx&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;后续&lt;/h2&gt;
&lt;p&gt;刷完以后，卡上的蜂鸣器就开始疯狂叫，吵的不行。我不得已先贴了个胶带上去降低音量。原文中评论有人说道一样的卡型号也遇到了类似的问题，虽然卡可以用但是警报是关不掉的。所以他最后选择直接把哪个蜂鸣器取下来。&lt;/p&gt;
&lt;p&gt;我这里一开始刷完也是可以正常启动的，如果刷了rom甚至是可以看到卡型号和控制器型号正常显示了。但是一旦真正接入了硬盘以后，rom就会在开机的时候卡住。整机报&lt;code&gt;PCI Bus Error&lt;/code&gt;。不刷rom可以正常进系统，但是会提示&lt;code&gt;mptsas error&lt;/code&gt;。反正横竖认不出来。在当时赶时间，所以直接下单了一块刷好的&lt;code&gt;HP H220&lt;/code&gt;先装上发了，但是卡在这个地方丝毫没有头绪。看来这还真的是YMMW？&lt;/p&gt;
&lt;p&gt;那先试试看能不能恢复固件把，事实证明确实是可以恢复回去的。&lt;/p&gt;
&lt;h2&gt;恢复固件&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;megarec &lt;span class=&quot;token parameter variable&quot;&gt;-cleanflash&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reboot&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
megarec &lt;span class=&quot;token parameter variable&quot;&gt;-writesbr&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; smc2208.sbr &lt;span class=&quot;token comment&quot;&gt;# 之前备份的&lt;/span&gt;
megarec &lt;span class=&quot;token parameter variable&quot;&gt;-m0flash&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; 2208_16.rom  &lt;span class=&quot;token comment&quot;&gt;# 在恢复工具里面有 (this is the rom from the LSI recovery ROM thread linked above)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;写回SASa&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;megaoem &lt;span class=&quot;token parameter variable&quot;&gt;-AdpSetSASA&lt;/span&gt; 50030480195exxxx &lt;span class=&quot;token parameter variable&quot;&gt;-a0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;最后的最后&lt;/h2&gt;
&lt;p&gt;大家记得一定手里要有多几块U盘，来回刷系统测试真的是搞心态。还有就是少碰HBA：）真的兔子洞&lt;/p&gt;
&lt;h3&gt;所有用到的固件/工具文件&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/HomeofNever/Blog/tree/master/pages/_assets/file/lsi-9266-8i-to-it-mode&quot;&gt;https://github.com/HomeofNever/Blog/tree/master/pages/_assets/file/lsi-9266-8i-to-it-mode&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;其他相关资料&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.serverbuilds.net/t/flashing-sas2208-to-it-mode-when-sas2flsh-does-not-detect-it/2357&quot;&gt;https://forums.serverbuilds.net/t/flashing-sas2208-to-it-mode-when-sas2flsh-does-not-detect-it/2357&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;用到的资源下载链接&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.laptopvideo2go.com/topic/29059-sas2008-lsi92409211-firmware-files/&quot;&gt;https://forums.laptopvideo2go.com/topic/29059-sas2008-lsi92409211-firmware-files/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>P440ar Array Controller 直通评测</title>
    <link href="https://blog.never.pet/posts/p440ar-ctrl-benchmark/"/>
    <updated>2022-03-26T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/p440ar-ctrl-benchmark/</id>
    <content type="html">&lt;p&gt;最近到了一批&lt;code&gt;HPE DL560 G9&lt;/code&gt;的机器，默认带的是&lt;a href=&quot;https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04496202&quot;&gt;P440ar&lt;/a&gt;的卡。但是目前我们都是用的ZFS，所以一般来说我们都会把卡刷成&lt;code&gt;IT Mode&lt;/code&gt;直通给系统。&lt;/p&gt;
&lt;p&gt;戴尔的卡已经有&lt;a href=&quot;https://fohdeesha.com/docs/index.html&quot;&gt;很成熟的教程&lt;/a&gt;了，但是HP似乎都没有，目前可以选择的方案看了一圈只有&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HBA Mode，他们的卡自带了这个模式&lt;/li&gt;
&lt;li&gt;RAID 0 for each physical drive，我没想到的是他们界面直接就有这个选项，看来很多这样的需求&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是继续找了一下并没有看到有关于更多ZFS的评测，所以这里就记录一下目前收集到的信息&lt;/p&gt;
&lt;h2&gt;规格&lt;/h2&gt;
&lt;h3&gt;硬盘&lt;/h3&gt;
&lt;p&gt;硬盘是&lt;code&gt;2.5 inch Seagate 1TB 7200 RPM&lt;/code&gt;，具体信息：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Status: OK
Serial Number: 9XG6E9NN
Model: ST910006CLAR1000
Media Type: HDD
Capacity: 1000 GB
Firmware Version: AS0D
Encryption Status	Not Encrypted
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;控制器&lt;/h3&gt;
&lt;p&gt;控制器读缓存开启，写缓存关闭&lt;/p&gt;
&lt;h2&gt;测试&lt;/h2&gt;
&lt;h3&gt;脚本&lt;/h3&gt;
&lt;p&gt;使用的是&lt;a href=&quot;https://github.com/axboe/fio&quot;&gt;fio&lt;/a&gt;，配合脚本&lt;/p&gt;
&lt;iframe class=&quot;gist-iframe&quot; src=&quot;https://gist.github.com/sennajox/3667757.pibb&quot;&gt;&lt;/iframe&gt;
&lt;h3&gt;RAID 0 结果&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.never.pet/assets/file/p440ar-ctrl-benchmark/fio-raid0.tar.gz&quot;&gt;fio-raid0.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;HBA 结果&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.never.pet/assets/file/p440ar-ctrl-benchmark/fio-hba.tar.gz&quot;&gt;fio-hba.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;结论&lt;/h2&gt;
&lt;p&gt;目前测试出来单盘的情况下，HBA和Raid0的结果在512K的读写下很相近，但是HBA模式表现似乎要更好一点。&lt;/p&gt;
&lt;p&gt;所有结果都打包在上面，有需要的可以自行下载研究。如果有更多测试/模式想要测试，可以在评论区留言&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>老IPMI折腾记</title>
    <link href="https://blog.never.pet/posts/cisco-ucs-experience/"/>
    <updated>2022-03-10T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/cisco-ucs-experience/</id>
    <content type="html">&lt;p&gt;最近入手了一个很老的Cisco UCS C240 M3S机器，遇到了不少麻烦，记录的同时吐槽一下&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/cisco-ucs-experience/home.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h2&gt;CMIC&lt;/h2&gt;
&lt;p&gt;3.0这个版本的CMIC还是在用Flash！但是还好因为Flash游戏的流行，有开源项目专门做浏览器帮助用户使用Flash。亲测 &lt;a href=&quot;https://github.com/radubirsan/FlashBrowser&quot;&gt;https://github.com/radubirsan/FlashBrowser&lt;/a&gt; 可用&lt;/p&gt;
&lt;h3&gt;KVM&lt;/h3&gt;
&lt;p&gt;KVM的话，一般是Java，这个可以尝试用 &lt;a href=&quot;https://github.com/AdoptOpenJDK/IcedTea-Web&quot;&gt;IcedTea-Web&lt;/a&gt; 解决。&lt;/p&gt;
&lt;h4&gt;CMIC KVM&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://community.cisco.com/t5/cisco-bug-discussions/cscvs11682-c220-c240-m3-server-need-html5-support-for-cimc-webui/td-p/4144939&quot;&gt;https://community.cisco.com/t5/cisco-bug-discussions/cscvs11682-c220-c240-m3-server-need-html5-support-for-cimc-webui/td-p/4144939&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;There is a workaround I was made aware of recently which uses the API on the UCS server to make a call directly to obtain the Java KVM console. I have tested this and although you don&#39;t get the GUI, you get the full console functionality (turn on/off, mount virtual images to upgrade, etc):
&lt;code&gt;https://&amp;lt;CIMC_IP&amp;gt;/kvm.jnlp?cimcAddr=&amp;lt;CIMC_IP&amp;gt;&amp;amp;tkn1=&amp;lt;CIMC_username&amp;gt;&amp;amp;tkn2=&amp;lt;CIMC_Password&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可以通过直接访问API拿到JNLP，拿到以后信息不变可以反复使用，也可以直接编辑这个文件，里面的内容也挺直接的。里面是包含了账号密码的，要小心保管&lt;/p&gt;
&lt;h4&gt;SuperMicro KVM&lt;/h4&gt;
&lt;p&gt;SuperMicro的机器似乎会每次动态生成JNLP的验证，但是还好他们的网页不需要Flash。&lt;/p&gt;
&lt;h2&gt;更新固件&lt;/h2&gt;
&lt;p&gt;这个简直就是头大的不行。他们的firmware似乎是只提供HUU(Cisco UCS Host Upgrade Utility)，然后这个镜像如果直接做成U盘，每次都会卡死在906复制文件错误。试过了Rufus和DD直接写都不行，但是用&lt;code&gt;virtual media&lt;/code&gt;挂载是可以的！太糙了，这是什么神奇操作……&lt;/p&gt;
&lt;p&gt;HUU不方便那就提取出来走Webui试试看好了，但是！他们的HUU提取是要用专门的程序&lt;code&gt;getfw&lt;/code&gt;。他们的固件默认是加密打包好了的所以直接拆还挺麻烦的，但是这个程序真的emmm要求特别多：首先要&lt;code&gt;squashfs&lt;/code&gt;，然后&lt;code&gt;openssl&lt;/code&gt;版本要&lt;code&gt;1.0.1&lt;/code&gt;e，然后还是直接从&lt;code&gt;PATH&lt;/code&gt;读取的。要不是&lt;a href=&quot;https://blog.jamiescott.me/extract-cisco-ucs-firmware-from/&quot;&gt;这篇博客&lt;/a&gt;我真的要放弃了&lt;/p&gt;
&lt;h3&gt;错误提示&lt;/h3&gt;
&lt;h3&gt;Decryption failed&lt;/h3&gt;
&lt;p&gt;openssl版本不对&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Set up openssl&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; https://ftp.openssl.org/source/old/1.0.1/openssl-1.0.1e.tar.gz
&lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-zxvf&lt;/span&gt; openssl-1.0.1e.tar.gz
&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; openssl-1.0.1e
./config
&lt;span class=&quot;token function&quot;&gt;make&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;su&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/path/to/openssl-1.0.1e/apps:&lt;span class=&quot;token environment constant&quot;&gt;$PATH&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Extraction Failed&lt;/h3&gt;
&lt;p&gt;如果你直接用本地正在mount的iso，拷贝单独的一份出来&lt;/p&gt;
&lt;h3&gt;更新CMIC&lt;/h3&gt;
&lt;p&gt;然后就是HUU更新有的时候还是不行，CMIC我当时直接更新还是失败&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;网页提示 &lt;code&gt;Error while updating: invalid file name CIMC&lt;/code&gt;
然后remote http download百分之5直接reset
HUU 提示自己内存不够是否确认重启CMIC&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后我发现HUU没有成功重启CMIC！我自己重启了一遍就好了，真的佛了&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;多试试重启！！！&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>用 Github Action 拯救 Twitter 与 Telegram 的转发</title>
    <link href="https://blog.never.pet/posts/tweet-to-telegram/"/>
    <updated>2021-01-08T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/tweet-to-telegram/</id>
    <content type="html">&lt;h2&gt;2023更新&lt;/h2&gt;
&lt;p&gt;仓库被Github Ban啦！应该是Github Action滥用的问题。但是我也已经从推特转走了，平时都在Mastodon。再见，小蓝鸟！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;--原文分割线--&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你想直接看成品: &lt;a href=&quot;https://github.com/NeverBehave/Tweet2Telegram&quot;&gt;https://github.com/NeverBehave/Tweet2Telegram&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;推特上有太多好 &lt;s&gt;(毛毛)(色)(不你什么都不知道)&lt;/s&gt; 图/视频了, 然而每次想找点回来的时候却...翻起来好麻烦啊&lt;/p&gt;
&lt;p&gt;然而每次保存下来好麻烦, 要是点赞了以后可以自动保存下来就好了&lt;/p&gt;
&lt;p&gt;于是我又动起了IFTTT的念头...因为IFTTT也有推特点赞转发啊! 我之前还做过一期&lt;a href=&quot;https://blog.never.pet/posts/customize-telegram-twitter-ifttt-connection/&quot;&gt;如何用IFTTT配合推特转发到个人频道&lt;/a&gt;；甚至还买了Pro&lt;/p&gt;
&lt;p&gt;但是如果是这样的话, 文章标题怎么感觉有点不对呢...?&lt;/p&gt;
&lt;h3&gt;IFTTT的困境&lt;/h3&gt;
&lt;p&gt;IFTTT这个东西嘛, 简单点的就算了, 这回我们的需求是:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;获取点赞的推文&lt;/li&gt;
&lt;li&gt;解析其中所有的视频/图片/链接&lt;/li&gt;
&lt;li&gt;转发到Telegram频道&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;然而呢, IFTTT&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;其中的图片/视频链接不是直链&lt;/li&gt;
&lt;li&gt;Webhook有频率限制&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;甚至, IFTTT似乎实现错了这个功能&lt;/strong&gt;(后文详述)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;直链这个解析实在是难以描述, 如果不通过推特官方的API: 他默认做了很多对爬虫不友好的操作&lt;/p&gt;
&lt;p&gt;一番测试下来发现效果真的很差, 很容易错过点赞&lt;/p&gt;
&lt;p&gt;于是...那就看看推特的API然后自己做一套吧&lt;/p&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;h3&gt;申请API&lt;/h3&gt;
&lt;p&gt;首先, 我们需要申请一下开发者API, &lt;a href=&quot;https://developer.twitter.com/en/apply-for-access&quot;&gt;申请链接&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在申请的时候他会让选择你的用途并描述你要做什么, 至少&lt;code&gt;200 characters&lt;/code&gt;, 不是&lt;code&gt;words&lt;/code&gt;. 也就是说差不多2-3句话差不多了&lt;/p&gt;
&lt;p&gt;这个做完以后就等着邮箱发信给你, 确认一下. 我刚填完就收到了邮件, 基本上体验还好&lt;/p&gt;
&lt;h3&gt;创建APP&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/tweet-to-telegram/app_portal.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;一开始他默认会给你创建一个项目, 然后你在里面可以创建你的第一个APP. 但是注意一下, 除了&lt;code&gt;API_KEY&lt;/code&gt;和&lt;code&gt;API_SECRET&lt;/code&gt;, 他还有一个&lt;code&gt;ACCESS_TOKEN&lt;/code&gt;. 这个对应的是用户的数据访问, 也就是说你这个APP代表的是哪个用户做事情. 我们目前是要获取自己帐号的点赞列表, 所以直接看下面&lt;code&gt;Authentication Tokens&lt;/code&gt; 获取自己的就好&lt;/p&gt;
&lt;h3&gt;Github Action&lt;/h3&gt;
&lt;p&gt;然后就是我们的重头戏上场: &lt;a href=&quot;https://github.com/NeverBehave/Tweet2Telegram&quot;&gt;https://github.com/NeverBehave/Tweet2Telegram&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;默认15分钟获取一次, 目前来看效果不错&lt;/p&gt;
&lt;p&gt;甚至说实话, 我觉得转发也可以改成这个, 不知道好到哪里去了:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不需要麻烦的获取链接跳转再替换&lt;/li&gt;
&lt;li&gt;视频/图片原生就在Telegram, 无需Web Preiew&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;写完以后感受: 推特的API其实还蛮舒服的, 当然如果只是个人使用的话. 一开始被&lt;code&gt;IFTTT&lt;/code&gt;坑的不要不要的, 现在看来其实还好&lt;/p&gt;
&lt;p&gt;这里, 我想提一下这个很有意思的API问题 (Aka IFTTT干的好事)&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;since_id&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;这是我也踩了一脚坑, 意识到以后重新观察了一下&lt;code&gt;IFTTT&lt;/code&gt;的行为, 估计是一样的&lt;/p&gt;
&lt;p&gt;获取点赞列表的时候, 其中一个参数是叫做&lt;code&gt;since_id&lt;/code&gt;(&lt;a href=&quot;https://developer.twitter.com/en/docs/twitter-api/v1/tweets/post-and-engage/api-reference/get-favorites-list&quot;&gt;官方文档&lt;/a&gt;), 这个东西的意思是说返回所有&lt;strong&gt;从这个&lt;code&gt;ID&lt;/code&gt;开始的所有推文&lt;/strong&gt;. 放在这个上下文是不是很容易理解为&lt;strong&gt;如果你点赞了的一条推文, 我记住它, 那么下次我获取新的点赞的时候, 给这个推文的&lt;code&gt;ID&lt;/code&gt;, 就可以获取从这个点赞以后的推文了&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不是的!!!!!! 这个的意思纯粹是说&lt;strong&gt;按照时间顺序, 比你给的这个&lt;code&gt;ID&lt;/code&gt;新的所有你喜欢的推文&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以当你点赞了一条今天发送的推文, 然后去点赞了一条昨天发送的推文, 那么你就获取不到这个&lt;strong&gt;新&lt;/strong&gt;的点赞了&lt;/p&gt;
&lt;p&gt;我发现IFTTT就有类似的行为, 他总是检测不到一些点赞, 估计他的&lt;strong&gt;新点赞的推文&lt;/strong&gt;也就是靠这个ID判断的, 实际上是错的!&lt;/p&gt;
&lt;p&gt;但是实际上API文档里面写的很清楚了是时间顺序, 所以还是自己傻逼了, 抚额&lt;/p&gt;
&lt;h2&gt;后言&lt;/h2&gt;
&lt;p&gt;大部分的参数在项目里面提供了, 我就不在这里重新描述了, &lt;s&gt;其实这就是水文&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;然后就是这个IFTTT的bug, 不知道去哪里报一下&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>The end of 2020 年终总结</title>
    <link href="https://blog.never.pet/posts/2020-summary/"/>
    <updated>2021-01-04T10:00:00Z</updated>
    <id>https://blog.never.pet/posts/2020-summary/</id>
    <content type="html">&lt;div class=&quot;aspect-video my-4&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/RQsM2uvXow8&quot; title=&quot;YouTube video&quot; frameborder=&quot;0&quot; loading=&quot;lazy&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; class=&quot;w-full h-full&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;^背景音乐&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;其实一开始不是很想写, 感觉自己这年过下来, 也没啥好写的. 但是呢刚好现在年初我又在申请研究生, 状态说实话有点丧, 回顾一下看看会不会好一点.  &lt;s&gt;那确实是很迟到&lt;/s&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下面按照事件开始时间来回顾一下自己折腾了什么吧&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;h3&gt;1月&lt;/h3&gt;
&lt;h4&gt;毛装做出来了&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1218216503138451457&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;从国内运过来运费花了差不多1000RMB, 算是我在爱好上开销比较大的一次了&lt;/p&gt;
&lt;p&gt;如果你不熟悉相关内容, 可以右转了解一下: &lt;a href=&quot;https://en.wikipedia.org/wiki/Furry_fandom&quot;&gt;https://en.wikipedia.org/wiki/Furry_fandom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但是后续在7月左右我把它卖掉了. 除了说有些不满意以外, 更多是因为疫情期间当时还在搬家, 而且当时觉得自己头脑不是很冷静, 希望可以退出圈子一段时间让清醒一下, 就直接清理的时候将其转手了&lt;/p&gt;
&lt;p&gt;如果要问在更深层的原因, 可能是我个人偏见吧, 我觉得目前这个圈子氛围太过烧钱. 不提推特上有很多套毛装的高级玩家, 至少在中文圈内, 大家目前的心理预期和举动让我也不是很舒服. 其次是 2020 委托圈也有不少狗血的事情但是这时我也没有太多关注了. 目前主要是看看相关作品点点赞先(好了, 这个时候就不要去看我的推特点赞了), 然后还有就是接触国外相关社区. 后续的注册ASN号的时候也是遇到了一只很友善的毛毛帮忙的.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在一个饭圈, 最紧要的是开心&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;3月&lt;/h3&gt;
&lt;p&gt;这个时候疫情已经开始一段时间了, 学校宣布在春假以后关闭校园, 同期开始准备搬家&lt;/p&gt;
&lt;h4&gt;Research&lt;/h4&gt;
&lt;p&gt;相关的研究这个时候刚好在招募人, 其中我拿到的这个是尝试收集国内当时主动公布的物流信息和/或民间发布(例如微博)的信息来追踪物资动向, 绘制时间线.&lt;/p&gt;
&lt;p&gt;说实话, 这个最后效果一般, 一部分是官方新闻太少, 民间资料确实有很多很好的(当时有github仓库定时汇总审核相关信息), 但是具体的动向和后续缺失很厉害&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;有点经历也算好的吧.jpg&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;实习&lt;/h4&gt;
&lt;p&gt;拿到了 &lt;a href=&quot;https://www.ansys.com/&quot;&gt;Ansys.Inc&lt;/a&gt; 的实习, 主要在做一些可视化编辑器相关的工作. 公司平时主要是做的仿真, 可能物理/工程系的同学会经常用到相关产品.&lt;/p&gt;
&lt;p&gt;5月开始, 一小时21刀,  一周正常40hrs, 一个月折合RMB 2w左右吧, 疫情期间所以是远程, 不然说可以周末有烤肉, 还有其他活动之类的, 工作量也确实不是很大, 整体比较惬意, 还(自)学了不少东西&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这次很考验了一把我的前端能力, 说实话现在看来, 我还是搞砸了, 让我开始更多的思考框架/设计相关的一些问题.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;但是老大(PM)和我的Mentor人都很好, 现在还在Telegram保持联系 (&lt;s&gt;我还给我的Mentor推荐了&lt;a href=&quot;https://store.steampowered.com/app/427520&quot;&gt;Factorio&lt;/a&gt;, 还好没耽误工作&lt;/s&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我不会说这期间我还刷了很多Netflix :)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;搬家&lt;/h4&gt;
&lt;p&gt;当时学校周围的房子直接被预订一空, 我因为马上是大三要住出去了, 联系了之前联系好的房东问可不可以提前开始租期, 获得同意&lt;/p&gt;
&lt;p&gt;这个房子是之前学校宿舍被水淹了以后学校紧急组下改造的房子, 因为后面学校修好了自家的房子就直接吧精装修完, 带校园网(每个网口都是G口对等)的房子解约了, 整体设施什么的都非常好, &lt;s&gt;除了价格&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;在实习期间好的网络确实救我一命: 公司没发笔记本, 是分配了一个Horizon的虚拟机, 代码不能离开公司电脑&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;搬家是真的累,  尤其是没有车&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;5-8月&lt;/h3&gt;
&lt;p&gt;学期结束了, 开始实习&lt;/p&gt;
&lt;h4&gt;杂项&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;番/剧/电影 (大部分都是Netflix)
&lt;ul&gt;
&lt;li&gt;这些应该还只是一部分...有些电影真的不记得了&lt;/li&gt;
&lt;li&gt;日剧
&lt;ul&gt;
&lt;li&gt;我的青春恋爱物语果然有问题&lt;/li&gt;
&lt;li&gt;某科学的超电磁炮&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;心理测量者&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反叛的鲁鲁修&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;s&gt;All Hail Lelouch&lt;/s&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;诈骗之王&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;紫罗兰永恒花园&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;钢之炼金术师&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进击的巨人&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;狂赌之渊&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;深夜食堂&lt;/li&gt;
&lt;li&gt;工作细胞&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BEASTARS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;动物新世代 BNA&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;百变小樱
&lt;ul&gt;
&lt;li&gt;我才知道结局是什么&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;想哭的我带上了猫的面具&lt;/li&gt;
&lt;li&gt;擅长捉弄人的高木同学&lt;/li&gt;
&lt;li&gt;AV 帝王&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;美/英剧
&lt;ul&gt;
&lt;li&gt;后翼弃兵&lt;/li&gt;
&lt;li&gt;黑镜(第五季, 互动影片)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;爱死机器人&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;刑案侦讯室&lt;/li&gt;
&lt;li&gt;逍遥法外 (How to get away with murder)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;攻壳特工队 (SAC_2045)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;性爱自修室&lt;/li&gt;
&lt;li&gt;碳变&lt;/li&gt;
&lt;li&gt;人造母者&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;全知之城&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;理论上完美的另一半 (OSMOSIS)&lt;/li&gt;
&lt;li&gt;美国工厂&lt;/li&gt;
&lt;li&gt;雨伞学院&lt;/li&gt;
&lt;li&gt;纸牌屋&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;国产
&lt;ul&gt;
&lt;li&gt;刺客伍六七&lt;/li&gt;
&lt;li&gt;谁是受害者&lt;/li&gt;
&lt;li&gt;流浪地球&lt;/li&gt;
&lt;li&gt;罗小黑战记&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;韩剧
&lt;ul&gt;
&lt;li&gt;人性课外课&lt;/li&gt;
&lt;li&gt;富豪辩护人&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;游戏
&lt;ul&gt;
&lt;li&gt;枪火重生 (国产)&lt;/li&gt;
&lt;li&gt;守望先锋
&lt;ul&gt;
&lt;li&gt;平时和朋友玩确实只有这个了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The Game of Life&lt;/li&gt;
&lt;li&gt;荒野乱斗(前半年在打, 打到1w1左右就不怎么打了)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/posts/my-lovely-hard-drives/&quot;&gt;硬盘车&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;还翻车了, 看更新&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;开了一堆信用卡
&lt;ul&gt;
&lt;li&gt;Amex, Apple Card, Chase, Bofa Cash Reward...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主力机转向Linux&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Manjaro&lt;/li&gt;
&lt;li&gt;Thinkpad M75q 小主机&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;买了一堆新的电子产品
&lt;ul&gt;
&lt;li&gt;IPad Pro + Magic Keyboard + Apple Pencil
&lt;ul&gt;
&lt;li&gt;差不多花了1000刀, 快赶上一台MacBook了, 但是用着确实舒服&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AirPod Pro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;锁了 Instagram, 关闭大部分 Google 账户数据收集&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;转向了 FastMail&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1303101728921968641&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;在某个时间点开始, 我开始有意远离谷歌类的产品了, 第一件事就是把自己的邮箱彻底从谷歌搬走.&lt;/p&gt;
&lt;p&gt;我妈觉得免费大于卖信息, 觉得自己的信息无所谓. 我觉得这个是可以理解的, 我也没有为她转移. &lt;strong&gt;但对于我来说, 不仅仅是广告, 我的重要通讯基本都是邮件. 而所有的邮件通讯对我来说都很重要, 其中的信息密度很大&lt;/strong&gt;, 我不希望谷歌可以&amp;quot;免费&amp;quot;拿走来借此建立我的模型.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fastmail.com/&quot;&gt;Fastmail&lt;/a&gt; 是别人推荐的, 目前来说用着也是真的非常舒服的邮箱. 支持无限自定义域名, 按帐号收费, 5块钱一个月年付40, 30G储存带一些网盘和日历功能.&lt;/p&gt;
&lt;p&gt;如果有类似需求的可以考虑一下, 首月免费不需要绑定付款信息, 走我的&lt;a href=&quot;https://ref.fm/u24741032&quot;&gt;AFF&lt;/a&gt;可以首年9折 , 推荐人拿你打折部分金额, 不可提现&lt;/p&gt;
&lt;h4&gt;移除了 Chrome&lt;/h4&gt;
&lt;p&gt;同样类似与上面的原因, 花了快一年的时间彻底换成了 Firefox, 对于部分调试需求和购物返利则使用 Chromium&lt;/p&gt;
&lt;h4&gt;邮箱被人爆破了&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1286042436494655488&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;自己开了一个免费的邮箱托管服务, 结果自己设置了个弱密码, 没什么好说的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;防火墙和黑名单给开上了, 学到了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;CNBlackListR 关闭&lt;/h4&gt;
&lt;p&gt;历史遗留问题, 得承认最后的做法两头不讨好, 但是总是要结束这一切&lt;/p&gt;
&lt;h3&gt;8月过后...&lt;/h3&gt;
&lt;p&gt;重新开始上课了! 大部分事情都安顿好了, 最后也都是A?&lt;/p&gt;
&lt;h4&gt;入了 3D 打印的坑&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1297718215003471874&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;搬家, 100刀从别人手里拿下了一台 Ender 3, 一通改装效果不错. 刷了 Klipper, 升级了 BLTouch&lt;/p&gt;
&lt;p&gt;在我同学走之前我都给他们打了一些&lt;a href=&quot;https://www.thingiverse.com/thing:4249113/&quot;&gt;面罩支架&lt;/a&gt; 算是派上了点用场&lt;/p&gt;
&lt;p&gt;&lt;s&gt;电费也很不错&lt;/s&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;虽然现在坏了一直修不好...&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;希捷的盘挂了&lt;/h4&gt;
&lt;p&gt;这才不到一年...&lt;/p&gt;
&lt;p&gt;而且挂的时候我的阵列没有坏, 反而是文件系统坏了, 修不好直接直接拷数据出来重建, 丢了不少东西&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以后云备份必不能省! 海门再买傻逼&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;给家里和同学家都换上了UBNT的AP&lt;/h4&gt;
&lt;p&gt;之前用的路由器&lt;code&gt;AC86U&lt;/code&gt;总是莫名断流让我相当不爽, 进了&lt;a href=&quot;https://www.reddit.com/r/homelabsales/&quot;&gt;r/homelabsales&lt;/a&gt; 收了一堆 UBNT 连带着免费给隔壁同学家也换上了 (花了400刀左右)&lt;/p&gt;
&lt;p&gt;但是ISP(Spectrum)并不做美, 晚上会断流和上传小水管都不开心. 怀念校园网对等上传&lt;/p&gt;
&lt;p&gt;不过好的是铁头给我的这个三手&lt;code&gt;86U&lt;/code&gt;我出出去的时候居然还多了200RMB, &lt;s&gt;真的保值&lt;/s&gt;&lt;/p&gt;
&lt;h4&gt;拿到了ASN!&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1335886440874586113&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://bgp.he.net/AS212243&quot;&gt;https://bgp.he.net/AS212243&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;顺便还花了不少搞了一些服务器&lt;s&gt;ewaste&lt;/s&gt;送到机房托管, 然后开始了BGP之旅&lt;/p&gt;
&lt;p&gt;目前还在慢慢的构建, 买了一堆年付垃圾但是支持BGP的小鸡玩玩&lt;/p&gt;
&lt;p&gt;顺便的话, 踩了一堆&lt;code&gt;IPv6&lt;/code&gt;的坑, 点名&lt;code&gt;Alpine&lt;/code&gt;傻逼&lt;/p&gt;
&lt;h4&gt;从 Ansible 换到了 NixOS&lt;/h4&gt;
&lt;p&gt;这个确实是个好东西, 声明式的构建环境, 舒服的一批 &lt;a href=&quot;https://nixos.org/&quot;&gt;https://nixos.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;而且刚好这学期我在上编程语言(Programming Languages), 写了&lt;code&gt;Prolog&lt;/code&gt;, &lt;code&gt;Scheme&lt;/code&gt;和&lt;code&gt;Haskell&lt;/code&gt;. &lt;code&gt;Nix&lt;/code&gt;这个真的是再熟悉不过了, 第一次有了学了的东西马上就能用上, 而且用的很舒服的感觉&lt;/p&gt;
&lt;p&gt;唯一的问题可能是这东西目前构建吃内存问题有点严重, 然后就是上传, 因为他是先在本地构建所有部分然后推送给各个服务器&lt;/p&gt;
&lt;h4&gt;买了新车&lt;/h4&gt;
&lt;p&gt;Honda CR-V 2021, 到落地差不多32k刀&lt;/p&gt;
&lt;p&gt;&lt;s&gt;但是还没考完驾照&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;1.5排量+boost ~ 2.0, 够用吧, 然后 Carplay 是有线的确实让我一阵头大&lt;/p&gt;
&lt;p&gt;顺带也让我认识到汽车配件的价格: 真正贵的不是配件本身, 而是安装的人工&lt;/p&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;作为学生的话, GPA 3.91/4.0, 有几封教授的推荐信, 有一段实习, 有一些研究经历, 有杂七杂八的事情可以做, 看了不少好作品, 还挣了点钱. 满足满足&lt;/p&gt;
&lt;p&gt;但是作为马上要毕业的人来说, 我感觉我现在还是没有什么方向. 在文章开头, 我也提到目前在申请研究生, 每个大学都在问一个问题: 你为什么要读研究生&lt;/p&gt;
&lt;p&gt;说实话, 这个让我有点懵, 我到现在的成绩, 去找实习, 去做各种各样的事情, 如果不说很功利的点, 似乎也就没什么了: 我找实习是为了充实自己的简历, 为以后找工作铺路. 读研究生可能就是如果在当前这个环境下找不到好的工作, 就做为一条退路吧. 如果你说做点开源的东西, 项目, 也不是为了工作经验和虚荣心?&lt;/p&gt;
&lt;p&gt;更多的时候学校也会问研究方向. 说实话这些东西让我回想起在实习的时候, 遇到一些组织规划代码, 设计数据结构框架的时候的问题. 上班的时候确实没什么空去仔细想这些问题, 闲下来以后在群里讨论一下, 诶, 确实似乎有更好的方法, 或者有更好的思路. &lt;strong&gt;这些需要花时间研究的问题通常不是在学校学习的时候立马能够想到的, 而是在实际解决问题的时候冒出来的&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;而大学在这个时候就开始问你有没有. 我得说我暂时还没有一个让我觉得有足够动力去花上很长时间思考的一个东西. 这也许是一部分人为什么选择在工作一段时间以后再回来进修的原因? 开阔完眼界, 换换脑子, 做点研究.&lt;/p&gt;
&lt;p&gt;另外一个点就是到底现在知识有没有高低之分. 很多时候会提到一个概念, 叫做核心竞争力. 你做的工作会不会很容易被人取代? 这在程序员里面也是一个很大的压力来源. 我也经常被家里和外面这样的压力弄得不知所措: 这看起来做理论研究的人总是更胜一筹.&lt;/p&gt;
&lt;p&gt;但是真的知识有高低之分吗? 经验难道就很容易被取代吗? 说实话, 我不知道. 一个团队的一个人如果真的很容易就被替代, 那么这可能不是一个团队. 一个人没有那么简单就被换掉. 很多因素在里面也许需要考虑一下. 最后人在其中是动态的, 你也在学习, 长见识, 作出改变. 替代本身这个概念, 更多时候可能只是没有想清楚未来该怎么走, 而这个就正是我还没有准备好的东西.&lt;/p&gt;
&lt;p&gt;从比较传统的, 吃过文化亏的家庭出来, 确实, 读书和文凭这些事情还是比较敏感的. 哪个父母不希望看到孩子在未来有一个稳定的靠山, 强有力的竞争力在社会上翱翔? 就算是到了另外一个国家, 这些事情有所变化, 但是终究到底方向也是没错的. 而已经习惯被安排好的我被领到这个21岁这个岔路口, 一时间也不习惯做决定这个久违的权利. 他们的第一次也是我的第一次.&lt;/p&gt;
&lt;p&gt;我倒不是说不想上, 家里给钱上学? 上学诶, 这可算是很轻松的活了好吧, 要是以前的我估计说不出这话, 但是看过这么多事情过来, 上学在其中可能算真的简单的了. 但是在研究生里要做什么确实得要好好想想了, 不能再过得浑浑噩噩的了&lt;/p&gt;
&lt;div class=&quot;aspect-video my-4&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/MBRqu0YOH14&quot; title=&quot;YouTube video&quot; frameborder=&quot;0&quot; loading=&quot;lazy&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; class=&quot;w-full h-full&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;在最后放上这个小视频结尾: 成就和错误终将回归烟云, 散落四周.&lt;br /&gt;
有起有落才是人生; 少年啊, 真正的愁苦是说不出来的.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>年度总结红包WriteUp -- Berd.moe</title>
    <link href="https://blog.never.pet/posts/2020-red-pack-writeup/"/>
    <updated>2021-01-01T20:00:01Z</updated>
    <id>https://blog.never.pet/posts/2020-red-pack-writeup/</id>
    <content type="html">&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;script async=&quot;&quot; src=&quot;https://telegram.org/js/telegram-widget.js?22&quot; data-telegram-post=&quot;liyuans/36350&quot; data-width=&quot;100%&quot;&gt;&lt;/script&gt;
&lt;p&gt;在Leonn的博客频道看到这个, &lt;a href=&quot;https://blog.berd.moe/archives/2020-review/&quot;&gt;https://blog.berd.moe/archives/2020-review/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;感觉博主是个&lt;s&gt;肝帝&lt;/s&gt;很强的人, 那就做一下题目试试看吧&lt;/p&gt;
&lt;h2&gt;流程&lt;/h2&gt;
&lt;p&gt;每个题目网页上都会有个hint&lt;/p&gt;
&lt;h3&gt;Problem 0&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/2020-red-pack-writeup/p0.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;Style 上面被加了 &lt;code&gt;pointer-events: none;&lt;/code&gt;. 去掉或者直接复制链接就好了&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://berd.moe/2020/489cba29-0727-4b03-80bb-7c6682be0dac&quot;&gt;https://berd.moe/2020/489cba29-0727-4b03-80bb-7c6682be0dac&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Problem 1&lt;/h3&gt;
&lt;p&gt;一只方熊猫&lt;/p&gt;
&lt;p&gt;思路: &lt;a href=&quot;https://ctf-wiki.github.io/ctf-wiki/misc/picture/png-zh/&quot;&gt;https://ctf-wiki.github.io/ctf-wiki/misc/picture/png-zh/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在Linux上CRC校验失败是直接看不到的, 我一开始用 &lt;code&gt;binwalk&lt;/code&gt; 找了好久, 然后注释里面的方熊猫搜索了好久&lt;br /&gt;
直到最后看到上面这个地方才意识到&lt;code&gt;panda.png&lt;/code&gt;的比例不是方的&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 864 x 432, 8-bit/color RGBA, non-interlaced
41            0x29            Zlib compressed data, default compression

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用 &lt;code&gt;hexedit&lt;/code&gt; 将 &lt;code&gt;[20:24]&lt;/code&gt; 处改为 &lt;code&gt;00 00 03 60&lt;/code&gt; 即可 (因为已经告诉你是正方形的了啊)&lt;/p&gt;
&lt;p&gt;修改后的文件头:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
0000010 0000 6003 0000 6003 0608 0000 4a00 0b92
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;图片中flag打入即可&lt;/p&gt;
&lt;h3&gt;Problem 2&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;http://arealexistingdomain/flag.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;链接很明显不是一个正常的域名, 但是说实话我也不知道什么地方可以解析这个域名, 于是我直接&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; http://berd.moe/flag.html &lt;span class=&quot;token parameter variable&quot;&gt;-H&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;Host: arealexistingdomain&#39;&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;作者也说了, 应该解析到另外一个服务器上的, 确实这样在这里我可能就放弃了(hhh)&lt;/p&gt;
&lt;p&gt;那我就直接复制作者原话作为解析好了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是一个 Handshake 域名: &lt;a href=&quot;https://www.namebase.io/domains/arealexistingdomain&quot;&gt;https://www.namebase.io/domains/arealexistingdomain&lt;/a&gt;&lt;br /&gt;
但是 &lt;a href=&quot;http://hns.to/&quot;&gt;HNS.TO&lt;/a&gt; 不知道为什么无法正常解析, 必须使用 HSD 或者 HNSD 才能解析&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Problem 3&lt;/h3&gt;
&lt;p&gt;粗心的小明&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;看到题目想着可能是&lt;code&gt;aes-256-cfb&lt;/code&gt;某个漏洞, 因为&lt;code&gt;key&lt;/code&gt;是确定的, 而且我们应该知道第一个block的数据&lt;code&gt;red_envelop_2021&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;但是搜索了一下发现&lt;code&gt;iv&lt;/code&gt;不正确只会影响解密后的第一个 block, 后续的都是正常的&lt;/li&gt;
&lt;li&gt;并且一个block因为是&lt;code&gt;json&lt;/code&gt;后的结果, 只是&lt;code&gt;key&lt;/code&gt;解密不正常&lt;/li&gt;
&lt;li&gt;但无所谓啊, 我们只要&lt;code&gt;value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;直接从网上随便复制了一段解密的代码, 放到 &lt;a href=&quot;http://runkit.com/&quot;&gt;runkit.com&lt;/a&gt; 跑了一下&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; fs &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;fs&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; uuid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;uuid&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; crypto &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;crypto&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; red_envelope_2021 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; uuid&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;v4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token constant&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    red_envelope_2021
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; algorithm &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;aes-256-cfb&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; secretKey &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; crypto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;scryptSync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;xiaomingSecureKey2021&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;xiaomingSuperSalt&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; iv &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; crypto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;randomBytes&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;encrypt&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; cipher &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; crypto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createCipheriv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;algorithm&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; secretKey&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; iv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; encrypted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;cipher&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cipher&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;final&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;iv&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; iv&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;hex&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; encrypted&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;hex&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;decrypt&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// iv doesn&#39;t matter, use whatever value it generated&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; decipher &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; crypto&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createDecipheriv&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;algorithm&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; secretKey&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; iv&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; decrpyted &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;concat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;decipher&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;hash&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;hex&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; decipher&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;final&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; decrpyted&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;toString&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; h &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;d365895fbcdbd3a29b1bf00307429fd07d53ba3c0553b8789867d4aee3b8c3bbb0e5a8fd582a9696aabbdc1e373f97efac2529d588320800449553f6&quot;&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;decrypt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;h&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输出:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;quot;���J�Ŋ&#92;u0010�HI�K?&amp;amp;�021&#92;&amp;quot;:&#92;&amp;quot;36b9c3df-ac74-46a1-8ca1-66b24274a7dd&#92;&amp;quot;}&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Problem 4&lt;/h3&gt;
&lt;p&gt;🆒&lt;/p&gt;
&lt;pre&gt;
🆕6️⃣🍿🍔🌭🥪🌮🍆🥑💬🍔💬🌭💬🥪💬🌮💬🍆💬🥑🛑🆕🔟🤔🖇🙃🍖🍟🥔🌽🥩🥕🌶️🌯🥥❓🆓⚖️🆓✖️🆓➗🙃🔢1️⃣8️⃣4️⃣7️⃣🔢🛑4️⃣🛑🔢2️⃣4️⃣8️⃣🔢🛑🆓🍿🌶️🥥🌽🥕🌽🥔🍿🌽🍖🌽🥩🌯🍟🛑🆓💬🔤🚫📥️🔛🔤🛑🛑💬🔤💻🔑🔑🔑🔑🔑🔑🔤🤔🎛️🔤9️⃣❤️9️⃣4️⃣🔤🔤1️⃣9️⃣7️⃣4️⃣🔤🔤4️⃣💜💛7️⃣🔤🔤➖🔤🔤🧡7️⃣9️⃣9️⃣🔤🔤8️⃣❤️4️⃣💛🔤🔤💚6️⃣0️⃣💛🔤🔤2️⃣5️⃣💙1️⃣🔤🔤2️⃣3️⃣7️⃣2️⃣🔤
&lt;/pre&gt;
&lt;p&gt;首先我得说, 这个题目对Linux有点不友好, &lt;a href=&quot;https://gitlab.com/fogity/squared-cool&quot;&gt;🆒&lt;/a&gt; 是一个只能用emoji写的语言, Linux的emoji支持...&lt;/p&gt;
&lt;p&gt;&lt;s&gt;反正我最后找了macbook做, 但是就算是mac也有时候显示不对&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;提示里面写了&lt;code&gt;esolang&lt;/code&gt;, 但是我一开始搜索到了 &lt;a href=&quot;https://esolangs.org/wiki/Emoji&quot;&gt;https://esolangs.org/wiki/Emoji&lt;/a&gt; , 但实际上应该是 &lt;a href=&quot;https://esolangs.org/wiki/%F0%9F%86%92&quot;&gt;https://esolangs.org/wiki/🆒&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;后面我觉得不对, 研究了一会用文件中看起来像是&lt;code&gt;keyword&lt;/code&gt;的部分重新搜索了才找到这个&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;但是问题是直接执行文件会解释器提示文件中有非emoji, 研究了一会实在解决不了, 直接用 &lt;a href=&quot;https://racket-lang.org/&quot;&gt;Scheme&lt;/a&gt; 重新写了一个&lt;/p&gt;
&lt;pre class=&quot;language-rkt&quot;&gt;&lt;code class=&quot;language-rkt&quot;&gt;&lt;span class=&quot;token lang keyword&quot;&gt;#lang r5rs&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;firstfunc&lt;/span&gt; a b c d e f&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;begin&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; d&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; f&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
   &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;secondfunc&lt;/span&gt; userinput a b c d e f g h i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; 
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; userinput &lt;span class=&quot;token number&quot;&gt;1847&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;248&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;begin&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;firstfunc&lt;/span&gt; g i d f d c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;firstfunc&lt;/span&gt; d a d e h b&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;display&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;oops&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;define&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt; input&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;secondfunc&lt;/span&gt; input &lt;span class=&quot;token string&quot;&gt;&quot;9a94&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1974&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;4fc7&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;-&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;b799&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;8a4c&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;d60c&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;25e1️&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2372&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;start&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;114514&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; # 啊哈, 这是看穿了吗&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Scheme版本的意思应该一目了然了, 满足条件以后拼接字符串&lt;/p&gt;
&lt;p&gt;这题除了emoji替换有点头疼以外, 其他的意思理解都很简单&lt;/p&gt;
&lt;h2&gt;小结&lt;/h2&gt;
&lt;p&gt;确实还挺有意思的, 作者花了时间&lt;s&gt;和钱&lt;/s&gt;在里面, 值得花点时间写个 &lt;code&gt;writeup&lt;/code&gt;下来&lt;/p&gt;
&lt;p&gt;&lt;s&gt;其实是再难点估计我就放弃了&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;既然你都花时间看到这里了, Alipay{我就不搞什么花样了}, 支付宝口令红包 10个&lt;/p&gt;
&lt;p&gt;最后祝大家新年快乐!&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>用 webhook 拯救 ifttt 上 Twitter 与 Telegram 的同步</title>
    <link href="https://blog.never.pet/posts/customize-telegram-twitter-ifttt-connection/"/>
    <updated>2020-05-25T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/customize-telegram-twitter-ifttt-connection/</id>
    <content type="html">&lt;p&gt;这大概是我最近最后一篇更新了, 马上要上班了, Orz&lt;/p&gt;
&lt;h2&gt;事故前提&lt;/h2&gt;
&lt;p&gt;我平时主要的两个发布 &lt;s&gt;(朋友圈)&lt;/s&gt; 渠道, 一个是 &lt;a href=&quot;https://twitter.com/_NeverBehave_&quot;&gt;Twitter&lt;/a&gt;, 另外一个则是 &lt;a href=&quot;https://t.me/ButNothingHappened&quot;&gt;Telegram Channel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;很多时候这两个渠道发布的是相似的东西, 至少我希望是如此. 那这个时候肯定是能懒则懒, 在任一渠道发布的东西自动在其他渠道更新. 从 Twitter 到 Telegram, 或者是反过来. 两者我都尝试过了, 最后确定主要思路是从 Twitter 往其他渠道同步&lt;/p&gt;
&lt;h3&gt;为什么是 Twitter&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/twitter.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;大方向是, 在当时, Twitter 是更加主流的工具. 但同时我也有如下考量:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网页内容展示较为友好&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Telegram 也有网页预览, 而且也很简洁, 但是相比与推特来说, 不会有一步跳转应用, 对于没有安装应用的人来说体验会稍微友好一点&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/telegram.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;自带评论&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Telegram 在早期评论只能通过特定机器人发送带键盘的消息; 现在虽然说有官方版本, 但是是通过网页发送, 整体流程很繁琐, 而推特对此优化较好, 没有 Telegram Channel 那种僵硬的体验&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实 Telegram Channel 根本当初就不是这样设计的吧&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;同时我也希望可以整合评论, 其他渠道发布时导流即可&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API &amp;amp; 长度限制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从我的角度出发, 我已经相当了解 Telegram 的 API 使用, 但是推特的在我看来过于繁琐.&lt;/p&gt;
&lt;p&gt;同时消息在推特的限制更多 (4图 + 长度限制), 如果导入需要更多的边缘情况处理.&lt;/p&gt;
&lt;h3&gt;目前的痛点 (ifttt)&lt;/h3&gt;
&lt;p&gt;在一开始, 我是直接使用的 ifttt 上的同步&lt;/p&gt;
&lt;p&gt;大概设定如图&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/ifttt.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;整体体验还行, 除了以下几点:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Text&lt;/code&gt; 换行会变成空格, 估计是因为使用了&lt;code&gt;parse_mode: html&lt;/code&gt;导致的, 这个无法更改&lt;/li&gt;
&lt;li&gt;链接会被转换成 &lt;code&gt;t.co&lt;/code&gt;, 在其他平台看起来效果不是很好
&lt;ul&gt;
&lt;li&gt;对于图片, 会出现多条&lt;code&gt;t.co&lt;/code&gt;链接在正文部分, 但是实际上 &lt;code&gt;page preview&lt;/code&gt; 会直接从这条推文提取图片, 没有必要再次放入图片&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;就是没什么自由度呗, 除了字符串模板&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以效果是这样的&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/telegram_old_result.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;于是每次我还要手动发布推文后等同步手动修正空格问题, 删除或者替换多余跳转链接, 有点恼火&lt;/p&gt;
&lt;p&gt;直到 &lt;a href=&quot;https://blog.anank.ke/&quot;&gt;@anankke&lt;/a&gt; 提醒了我&lt;code&gt;webhook&lt;/code&gt;的存在&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/chat.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h2&gt;正文&lt;/h2&gt;
&lt;p&gt;先确定一下架构:&lt;/p&gt;
&lt;p&gt;因为我不想花钱钱, 我也不会发那么多推文, 于是我选用了 &lt;code&gt;runkit&lt;/code&gt; 作为 webhook 的接收器, 对于我发推文的数量,  &lt;code&gt;runkit&lt;/code&gt; 的限制绰绰有余&lt;/p&gt;
&lt;p&gt;那么大概样子就是:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ifttt -&amp;gt; runkit -&amp;gt; telegram api 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Q&amp;amp;A&lt;/h3&gt;
&lt;h4&gt;为什么是webhook传出而不是传入&lt;/h4&gt;
&lt;p&gt;ifttt 的 webhook 传入 只能有一个&lt;code&gt;eventname&lt;/code&gt;, 但是传出却可以带所有可以用到的参数&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;确实有点鸡肋&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;为什么不用推特的API&lt;/h4&gt;
&lt;p&gt;不是没想过, 但是看完以后发现要额外管理一个key, 而且还想办法记录并筛选新的推文 (API是一次返回所有时间线的信息)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ifttt 真香&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;准备工作&lt;/h3&gt;
&lt;p&gt;首先需要如下操作&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对应发布的频道有一个管理员权限的机器人
&lt;ul&gt;
&lt;li&gt;建议只给予发送消息的权限&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;绑定 ifttt 到你的推特&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Runkit Script&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://runkit.com/neverbehave/5ecac198b99072001340f3fe&quot;&gt;https://runkit.com/neverbehave/5ecac198b99072001340f3fe&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;其中需要的环境变量有&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;TELEGRAM_BOT_TOKEN&lt;/code&gt; 你的机器人&lt;code&gt;BOT_TOKEN&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;SECRET_PATH&lt;/code&gt; webhook 路径&lt;/p&gt;
&lt;p&gt;因为&lt;code&gt;runkit&lt;/code&gt;上所有的&lt;code&gt;notebook&lt;/code&gt;都是公开的, 只有可以搜索到和不可以搜索到, 不建议将&lt;code&gt;API KEY&lt;/code&gt;直接写进代码. 同时知道&lt;code&gt;webhook&lt;/code&gt;路径的人相当与变相获得了在频道发送消息的权限, 建议也使用&lt;code&gt;env&lt;/code&gt;保护&lt;/p&gt;
&lt;p&gt;你可以在&lt;a href=&quot;https://runkit.com/settings/environment&quot;&gt;这里&lt;/a&gt;设置环境变量&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意, 环境变量是全局的, 在你帐号下所有&lt;code&gt;Notebook&lt;/code&gt;都将生效, 建议使用复杂一点的名字防止冲突&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;
&lt;p&gt;同时也还需要修改第17行的&lt;code&gt;ChannelID&lt;/code&gt;为你需要发送的位置&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(可选) 修改59行的模板信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后点击页面顶部&lt;code&gt;endpoint&lt;/code&gt;即可获得永久&lt;code&gt;端点地址&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;这个脚本做了什么事情&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;提取所有&lt;code&gt;t.co&lt;/code&gt;链接, 并替换成真实链接, 或者删除该链接如果其指向的是图片域名&lt;/li&gt;
&lt;li&gt;按照模板向Telegram发送信息&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ifttt 设置&lt;/h3&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/ifttt_new.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;大致设置如图, 注意以下几点&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;content-type&lt;/code&gt;不要选错, 否则&lt;code&gt;escape&lt;/code&gt;不会生效&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;其中网页上的建议&lt;code&gt;escape&lt;/code&gt;估计是有误, 使用&lt;code&gt;&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&amp;gt;&amp;quot;&lt;/code&gt; 包裹证明是有效的&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://birdie0.github.io/discord-webhooks-guide/services/ifttt.html&quot;&gt;参考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;code&gt;webhook&lt;/code&gt;路径是你&lt;code&gt;端点地址+设置的SECRET_PATH&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;为什么不分享你做的 &lt;code&gt;applet&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;我也是才发现, ifttt 很久以前就停止的个人用户发布&lt;code&gt;applet&lt;/code&gt;, 同时就算是 199刀的开发者套装, 居然也没有这个功能.&lt;/p&gt;
&lt;p&gt;总之现在操作很迷&lt;/p&gt;
&lt;h4&gt;怎么调试&lt;/h4&gt;
&lt;p&gt;这也是我很头疼的地方, 我只能用最老套的方法发新推触发看结果.&lt;/p&gt;
&lt;p&gt;如果你刚好在这篇文章之前看到我发了又删的推几, 那应该就是我在调试&lt;code&gt;escape&lt;/code&gt;的时候&lt;/p&gt;
&lt;h2&gt;效果&lt;/h2&gt;
&lt;p&gt;大概是这样&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/customize-telegram-twitter-ifttt-connection/telegram_final.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;链接的自动转换没有体现出来, 但是至少空行的问题解决了, 自由度也高了很多&lt;/p&gt;
&lt;p&gt;对于其他的内容, ifttt 的 webhook 也可以用相同的办法做到类似的东西, 就看大家发挥了&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>Bye, deadbydaylight.wiki</title>
    <link href="https://blog.never.pet/posts/bye-dbd/"/>
    <updated>2020-05-23T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/bye-dbd/</id>
    <content type="html">&lt;p&gt;在清理Google Analysis的时候, 发现了这个帐号的记录&lt;/p&gt;
&lt;object data=&quot;https://blog.never.pet/assets/file/bye-dbd/DBD_Overview_20170516-20200522.pdf&quot; type=&quot;application/pdf&quot; width=&quot;100%&quot; height=&quot;700px&quot;&gt;
    &lt;embed src=&quot;https://blog.never.pet/assets/file/bye-dbd/DBD_Overview_20170516-20200522.pdf&quot; /&gt;
        &lt;p&gt;您的浏览器暂时不支持直接浏览pdf, 请 &lt;a href=&quot;https://blog.never.pet/assets/file/bye-dbd/DBD_Overview_20170516-20200522.pdf&quot;&gt;下载&lt;/a&gt;.&lt;/p&gt;
    
&lt;/object&gt;
&lt;p&gt;这个是当时&lt;code&gt;deadbydaylight.wiki&lt;/code&gt;黎明杀机百科的分析数据, 高峰的时候日PV有几万的样子, 同时在线访客&lt;code&gt;&amp;gt;1k&lt;/code&gt;, 主要来源是台湾, 确实有一批人当时很在意百科的发展&lt;/p&gt;
&lt;p&gt;这个算是我第一次大规模的做百科, 一开始在 &lt;a href=&quot;https://translate.wiki/&quot;&gt;https://translate.wiki&lt;/a&gt; 做过一小段时间&lt;/p&gt;
&lt;p&gt;高中的时候不算是爱学习的, 因为学习好的人太多了emmm. 然后突然黎明杀机这个游戏火了起来, 玩法也很新奇: 不公平1v4这个模式也有很多主播在进行&lt;/p&gt;
&lt;p&gt;我当时只有一台&lt;code&gt;macbook air 2015&lt;/code&gt;也硬是打了几十个小时&lt;/p&gt;
&lt;p&gt;在后来, 偶然和&amp;quot;中国区代表&amp;quot;一起, 还有&lt;code&gt;Kazama Sion&lt;/code&gt;一起做起了百科, 经历了这个游戏在国内被封杀的阶段, 也见证了网易的&amp;quot;第五人格&amp;quot;的事故&lt;/p&gt;
&lt;p&gt;只可惜当时我还是高中生, 确实没有那么多精力和时间打理, 也没有那么多规划&lt;/p&gt;
&lt;p&gt;资料当时都是从 gamepedia 上面英文版要到授权的, 也很感谢当时所有参与过这个百科的志愿者&lt;/p&gt;
&lt;p&gt;到现在这件事情也算告一段落了, 可能会继续梳理一下思绪补充一些内容&lt;/p&gt;
&lt;p&gt;有兴趣的可以去这里看看: &lt;a href=&quot;https://deadbydaylight-zh.gamepedia.com/&quot;&gt;https://deadbydaylight-zh.gamepedia.com/&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;目前也有活跃的维护者了, &lt;a href=&quot;https://deadbydaylight-zh.gamepedia.com/UserProfile:LeCgHn_Jason&quot;&gt;https://deadbydaylight-zh.gamepedia.com/UserProfile:LeCgHn_Jason&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;总之, 祝好&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>从AWS lambda迁移到Fission</title>
    <link href="https://blog.never.pet/posts/switch-from-lambda-to-fission/"/>
    <updated>2020-05-21T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/switch-from-lambda-to-fission/</id>
    <content type="html">&lt;h2&gt;事故前提&lt;/h2&gt;
&lt;p&gt;我开始用&lt;code&gt;aws lambda&lt;/code&gt;的时间大约是它还只有&lt;code&gt;node v8&lt;/code&gt;运行时的时候, 主要其免费的额度确实相当的诱人, 加上学生赠与的免费&lt;code&gt;credit&lt;/code&gt;, 香的一批&lt;/p&gt;
&lt;p&gt;直到我发现&lt;code&gt;API Gateway&lt;/code&gt;不在免费额度抵扣范围内(?疑惑), 虽然现在是的了&lt;/p&gt;
&lt;p&gt;其中我还用过一次他的&lt;code&gt;LightSail&lt;/code&gt;, 也是被&lt;a href=&quot;https://blog.indexyz.me/&quot;&gt;@indexyz&lt;/a&gt; 拉上贼船的. 当时是他从淘宝买了一些每个帐号只能用两张的券, 结果额度扣完了没发现, 直到结算到我信用卡的时候才发现了&lt;/p&gt;
&lt;p&gt;总共扣了我大几十刀的样子, 很难受, 而且也让我对绑定额度太高的信用卡上去有了阴影(要不是及时停下来了). 没有额度的情况下, &lt;code&gt;lambda&lt;/code&gt;虽然每个月都有免费额度, 流量和&lt;code&gt;API Gateway&lt;/code&gt;依然计算费用. 目前每个月我都会看到几块钱的扣费&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/switch-from-lambda-to-fission/cost.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;唉, 好不爽哦&lt;/p&gt;
&lt;p&gt;刚好这个时候, &lt;a href=&quot;https://zhaofeng.li/&quot;&gt;@zhaofeng&lt;/a&gt; 和我说:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我的小东西现在都放在 fission 了&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://fission.io/&quot;&gt;fission&lt;/a&gt;? 这是啥&lt;/p&gt;
&lt;h3&gt;题外: 为什么不用 Netlify/Vercel&lt;/h3&gt;
&lt;p&gt;大部分放在&lt;code&gt;lambda&lt;/code&gt;上面的东西是一些实验品, 机器人一类&lt;/p&gt;
&lt;p&gt;在&lt;code&gt;Vercel&lt;/code&gt;出来之前, netlify, firebase的function我感觉都不尽人意, 处理起来很不舒服&lt;/p&gt;
&lt;p&gt;但是在经过&lt;a href=&quot;https://github.com/DIYgod/RSSHub/issues/4334&quot;&gt;这个issue&lt;/a&gt;后, 我觉得&lt;code&gt;Vercel&lt;/code&gt;的处理确实很舒服, 算是目前打包上线体验比较好的平台了. 主要问题应该就是免费额度有点小&lt;/p&gt;
&lt;h2&gt;About Fission&lt;/h2&gt;
&lt;p&gt;这里引用 &lt;a href=&quot;https://zhaofeng.li/&quot;&gt;@zhaofeng&lt;/a&gt; 的三句话&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;self-hosted aws lambda，不需要 build 任何 image&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;cold-starts under 100ms&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;然后比 aws lambda 简单很多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;它的做法是用提前准备好的 runtime container （和 lambda 差不多），然后挂载你的代码&lt;/p&gt;
&lt;p&gt;于此同时, 相似功能的还有&lt;a href=&quot;https://www.openfaas.com/&quot;&gt;openfaas&lt;/a&gt;，不过不推荐，因为还是需要针对每个&lt;code&gt;function&lt;/code&gt;构建单独的镜像&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在继续之前请注意, fission 是基于k8s的, 如果你没有集群, 往下可以跳过了(别打我quq)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;~~当然, 你要是不差钱的话, &lt;a href=&quot;https://cloud.google.com/anthos/gke~~&quot;&gt;https://cloud.google.com/anthos/gke~~&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你没有懂这个梗的话:&lt;a href=&quot;https://web.archive.org/web/20190717144230/https://cloud.google.com/anthos/pricing&quot;&gt;https://web.archive.org/web/20190717144230/https://cloud.google.com/anthos/pricing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;安装&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.fission.io/docs/installation/&quot;&gt;https://docs.fission.io/docs/installation/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;@zhaofeng&lt;br /&gt;
它的 yaml 也是 helm template 生成的，有点毒&lt;br /&gt;
好多 pod 都没有 namespace&lt;br /&gt;
即使你 helm 设了 --namespace，它出来的 manifest 还是有毒的&lt;br /&gt;
它原来的初衷是让你 kubectl apply -n yourns 让 kubecrl 填充剩下的 ns，不过现在 kubectl 不让你这么做了&lt;br /&gt;
其中指定的 namespace 和你 -n 里的 ns 不同会报错&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;就这样&lt;s&gt;和NPC对话后&lt;/s&gt;我获得了一份典藏的&lt;code&gt;Makefile&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;language-makefile&quot;&gt;&lt;code class=&quot;language-makefile&quot;&gt;&lt;span class=&quot;token target symbol&quot;&gt;rendered.yml&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; values.helm.yml
    helm template fission &#92;
        --namespace fission &#92;
        -f values.helm.yml &#92;
&lt;span class=&quot;token target symbol&quot;&gt;        https&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;//github.com/fission/fission/releases/download/1.8.0/fission-all-1.8.0.tgz &#92;
    &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; yq -Y &lt;span class=&quot;token string&quot;&gt;&#39;if has(&quot;metadata&quot;) and (.metadata | has(&quot;namespace&quot;)) then . else .metadata.namespace=&quot;fission&quot; | . end&#39;&lt;/span&gt; &gt; rendered.yml

&lt;span class=&quot;token builtin-target builtin&quot;&gt;.PHONY&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; clean
&lt;span class=&quot;token target symbol&quot;&gt;clean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    rm -f rendered.yml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;anyway, 生成出来的&lt;code&gt;rendered.yml&lt;/code&gt;可以食用了w&lt;/p&gt;
&lt;h4&gt;Ingress 设置&lt;/h4&gt;
&lt;p&gt;虽然&lt;code&gt;fission&lt;/code&gt;支持给每个&lt;code&gt;function&lt;/code&gt;生成自定的&lt;code&gt;ingress&lt;/code&gt;, 这样带来的问题是, 我没有设定&lt;code&gt;dns&lt;/code&gt;啥的配合&lt;/p&gt;
&lt;p&gt;所以目前我全部的函数都挂在到一个&lt;code&gt;ingress&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;本地 CLI&lt;/h4&gt;
&lt;p&gt;fission将会直接读取&lt;code&gt;KUBECONFIG&lt;/code&gt;并连接到集群, 建议使用&lt;code&gt;CLI&lt;/code&gt;连接&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.fission.io/docs/installation/#install-fission-cli&quot;&gt;https://docs.fission.io/docs/installation/#install-fission-cli&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;迁移一个目前已经有的项目&lt;/h3&gt;
&lt;p&gt;行吧, 先上手迁移一个项目试试: &lt;a href=&quot;https://github.com/abusetelegram/xixi-haha&quot;&gt;https://github.com/abusetelegram/xixi-haha&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;分成两个部分, 一个是&lt;code&gt;api&lt;/code&gt;, 返回&lt;code&gt;yiyan&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;还有一个是&lt;code&gt;Telegram Bot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;指南: &lt;a href=&quot;https://docs.fission.io/docs/languages/nodejs/&quot;&gt;https://docs.fission.io/docs/languages/nodejs/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;简要提及一下过程:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.fission.io/docs/languages/nodejs/#add-the-nodejs-runtime-environment-to-your-cluster&quot;&gt;创建环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;创建&lt;code&gt;PKG&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fission package create --src release.zip --env nodejs --name xixi-haha-bot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;将项目打包进&lt;code&gt;zip&lt;/code&gt;, 指定使用环境和名字, 环境对应的&lt;code&gt;builder&lt;/code&gt;将会运行并执行打包&lt;/li&gt;
&lt;li&gt;你可以自定义这个过程, 打包属于你自己的&lt;code&gt;builder&lt;/code&gt;&lt;a href=&quot;https://docs.fission.io/docs/languages/nodejs/#modifying-the-nodejs-runtime-image&quot;&gt;参见&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;创建&lt;code&gt;fn&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fission function create --name xixi-haha-bot --pkg xixi-haha-bot --env nodejs --entrypoint fission&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;指定名字, 打包好的包, 环境以及入口&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(可选)测试
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fission fn test --name xixi-haha-bot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;直接测试触发&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;部署&lt;code&gt;httptrigger&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fission httptrigger create --method POST --url &amp;quot;url/you/want&amp;quot; --function xixi-haha-bot --name &amp;quot;xixi-haha-bot-post-route&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;指定路径, 创建好的&lt;code&gt;fn&lt;/code&gt;, 名字即可&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;(可选)查看日志
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fission fn log --name xixi-haha-bot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;几行下来, 一个完整的函数就上线了, 默认超时, cpu, 内存以及更多&lt;code&gt;cli&lt;/code&gt;操作就不再叙述了&lt;/p&gt;
&lt;p&gt;最重要的是, 可以配合&lt;code&gt;release&lt;/code&gt;, 直接传入&lt;code&gt;url&lt;/code&gt;下载打包好的应用更新包, 食用起来还是很舒服的&lt;/p&gt;
&lt;h4&gt;入口&lt;/h4&gt;
&lt;p&gt;稍微和lambda有点不一样, 没有&lt;code&gt;callback&lt;/code&gt;,标准的传入&lt;code&gt;res, req&lt;/code&gt;, 要求一个方法而不是对象&lt;/p&gt;
&lt;p&gt;具体区别可以对比&lt;a href=&quot;https://github.com/abusetelegram/xixi-haha/blob/master/lambda/fission.js&quot;&gt;fission.js&lt;/a&gt;和&lt;a href=&quot;https://github.com/abusetelegram/xixi-haha/blob/master/lambda/lambda.js&quot;&gt;lambda.js&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;坑&lt;/h4&gt;
&lt;p&gt;顺便讲几个小坑:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web界面还不是很完善&lt;/li&gt;
&lt;li&gt;暂时没有找到&lt;code&gt;process.env&lt;/code&gt;的注入方式
&lt;ul&gt;
&lt;li&gt;目前我的解决方案是用&lt;code&gt;dotenv&lt;/code&gt;, 但是问题是代码挂载的位置&lt;a href=&quot;https://github.com/fission/fission/blob/aa8c27fd5d9a1b92062d87e73a0e96f1c9b7ba7a/environments/nodejs/builder/build.sh#L3&quot;&gt;并不是根目录&lt;/a&gt;, 所以需要强行指定一下. &lt;a href=&quot;https://github.com/abusetelegram/xixi-haha/blob/d7b288aa285a940eece862ce97abb006b3be9ff1/lambda/index.js#L3&quot;&gt;解决方案&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好了, 赶紧把卡解绑了, mmp&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>Google Voice 自动应答和保号</title>
    <link href="https://blog.never.pet/posts/keep-your-google-voice-with-sao/"/>
    <updated>2020-05-21T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/keep-your-google-voice-with-sao/</id>
    <content type="html">&lt;h2&gt;事故前提&lt;/h2&gt;
&lt;p&gt;偶然打开某个骚群, 发现有人抱怨自己的 &lt;code&gt;Google Voice&lt;/code&gt; 被回收了, 并讨论如何保号&lt;/p&gt;
&lt;p&gt;据说要主动发送, 并且还要收消息, 这样的服务第一时间想到的是&lt;code&gt;1.1.1.1&lt;/code&gt;的 DNS 查询, 但是据说因为被滥用已经关闭了 &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/fun-stuff/&quot;&gt;https://developers.cloudflare.com/1.1.1.1/fun-stuff/&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/keep-your-google-voice-with-sao/cloudflare_abuse.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;不过反正 Google Voice 互相发送不要钱, 为什么不随便找个人发呢?&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/keep-your-google-voice-with-sao/chat_1.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;但是到时候一个一个回复太累了, 好烦哦, 有没有什么可以自动回复的东西啊, 对哦, 回复一言好了, 但是自动化呢?&lt;/p&gt;
&lt;p&gt;这时候我想起了 Tasker&lt;/p&gt;
&lt;h2&gt;动手时间&lt;/h2&gt;
&lt;p&gt;Tasker 是我当时为了挂国内短信卡而购入的一款自动化软件, 详细历史可以看这一篇&lt;a href=&quot;https://blog.never.pet/posts/tasker-messenger/&quot;&gt;华为短信机&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;先确定一下思路: 我目前的 Google Voice 是由 Hangout 接管的, 如果我可以通过读取通知获得内容, 判断是否触发自动回复内容, 然后通过其通知栏快速回复按钮回复是不是就好了?&lt;/p&gt;
&lt;p&gt;答案是不行.&lt;/p&gt;
&lt;p&gt;因为 Tasker 虽然能够直接读取通知, 但是却没有相应的动作去触发回复按钮, 或者说这个通知触发本身也很奇怪: 很多时候根本匹配不到&lt;/p&gt;
&lt;p&gt;难道是因为软件年久失修, 作者不打算继续了?&lt;/p&gt;
&lt;p&gt;继续寻找, 发现作者确实做了一个拓展, 用来实现自动回复 Google Voice 的功能, 叫做 &lt;a href=&quot;https://joaoapps.com/touchlesschat/&quot;&gt;Touchless Chat&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但是这个在 15 年的时候就停止了, 但是作者在帖子某个帖子下面回复说, 为了方便维护, 转向一个系列叫做&lt;a href=&quot;https://joaoapps.com/autoapps/&quot;&gt;AutoApps&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/keep-your-google-voice-with-sao/autoapps.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;简单点来说, 大约就是把各个子功能单独强化并作为&lt;code&gt;Tasker&lt;/code&gt;兼容的组件单独出售, 一开始让我确实感觉有点被欺骗, 但是单个组件支持看广告免费试用, 买断或者是集体订阅&lt;/p&gt;
&lt;p&gt;行吧, 我 Play 刚好剩下一点余额, 就给你试试看&lt;/p&gt;
&lt;h3&gt;Auto Notification&lt;/h3&gt;
&lt;p&gt;这一次主要用到的子功能是这个, 他可以和&lt;code&gt;Tasker&lt;/code&gt;配合用于监听触发, 生成自定义的通知横幅, 以及自动完整横幅内容填充(本本章用到的功能)&lt;/p&gt;
&lt;p&gt;完整配置文件可以查阅&lt;a href=&quot;https://github.com/NeverBehave/tasker-config#readme&quot;&gt;https://github.com/NeverBehave/tasker-config#readme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一言语料: &lt;a href=&quot;https://gist.github.com/NeverBehave/606d7e14436187b4d45e8657fafd40ab&quot;&gt;gist&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;效果&lt;/h2&gt;
&lt;p&gt;在免费试用期测试完整以后便买断了这个组件&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/keep-your-google-voice-with-sao/play_store_1.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;注意一下各个组件价格还不一样的, 有些功能少的价格便宜, 多的也就贵一点, 看论坛整体生态还是不错的, 还支持不少第三方插件&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/keep-your-google-voice-with-sao/result.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h3&gt;已知问题&lt;/h3&gt;
&lt;p&gt;因为是监听通知, 如果同时有多个人发短信过来, 有概率会无法执行&lt;/p&gt;
&lt;p&gt;如果你也想试一下的话, 请点击下方&lt;strong&gt;计算&lt;/strong&gt;按钮&lt;strong&gt;两次&lt;/strong&gt;获取真实号码试试看吧:&lt;/p&gt;
&lt;p&gt;自动回复指令: &lt;code&gt;/sao&lt;/code&gt;, 不要多也不要少哦&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(&lt;span id=&quot;gv-front&quot;&gt;258&lt;/span&gt;) &lt;span id=&quot;gv-middle&quot;&gt;1776&lt;/span&gt;-&lt;span id=&quot;gv-end&quot;&gt;10000&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;button id=&quot;gv-recal&quot; style=&quot;padding: 4px 12px; cursor: pointer;&quot;&gt;计算&lt;/button&gt;&lt;/p&gt;
&lt;script&gt;
(function() {
  var front = 258, middle = 1776, end = 10000;
  document.getElementById(&#39;gv-recal&#39;).addEventListener(&#39;click&#39;, function() {
    front -= 17;
    middle /= 2;
    end -= 160;
    document.getElementById(&#39;gv-front&#39;).textContent = front;
    document.getElementById(&#39;gv-middle&#39;).textContent = middle;
    document.getElementById(&#39;gv-end&#39;).textContent = end;
  });
})();
&lt;/script&gt;
&lt;p&gt;就酱~&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>发车啦! 硬盘便宜买</title>
    <link href="https://blog.never.pet/posts/my-lovely-hard-drives/"/>
    <updated>2020-05-18T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/my-lovely-hard-drives/</id>
    <content type="html">&lt;h2&gt;更新&lt;/h2&gt;
&lt;p&gt;希捷的盘挂了(坏道), 这才不到一年... 最坑的地方莫过于拆盘不保, 然后盒子里面的硬盘一查直接是过期的&lt;/p&gt;
&lt;p&gt;在一般的客户查询只是提示没有数据, 实际上后台里面写着这个盘直接就是过保, 客服要我提供购买时间收据&lt;/p&gt;
&lt;p&gt;连带着这次顺便把NAS的数据搞丢了一部分, Raid5 阵列没坏但是文件系统损坏... 好吧, 这次我直接SHR+Btrfs了&lt;/p&gt;
&lt;p&gt;总是, 海门真的再见了:)&lt;/p&gt;
&lt;h2&gt;背景介绍&lt;/h2&gt;
&lt;p&gt;在大约两年前暑假回国上夏校的时候, 有个矿难带来了一个很火的系列----蜗牛星际&lt;/p&gt;
&lt;p&gt;当时的我刚好在北京也淘了一个, 顺便从 &lt;a href=&quot;https://blog.indexyz.me/&quot;&gt;@indexyz&lt;/a&gt; 淘来了一套硬盘 (3+3 seagate), 还有杂七杂八一堆总计花了我 1k rmb 左右买下, 又花了 100rmb 运回广州打包带走的玩意&lt;/p&gt;
&lt;p&gt;这个东西后来被我刷上了黑群晖上了 RAID1 做备份服务器和文件分享服务器, 具体关于这个东西的后续(咕了)&lt;/p&gt;
&lt;p&gt;再然后, 我趁着 Dell 打折的时候, 300 刀左右入了一台&lt;code&gt;T40&lt;/code&gt;. 具体这个东西的后续(咕了). 因为这东西标配的是一块&lt;code&gt;1tb&lt;/code&gt;的西数蓝盘, 除此之外还有额外的两个硬盘位, 星际蜗牛四盘+T40 三盘一共七块盘&lt;/p&gt;
&lt;h3&gt;题外: 为什么不上亚马逊海外购的车&lt;/h3&gt;
&lt;p&gt;当时还有一个事情就是亚麻当时 bug 价的硬盘, 80 刀 10tb, 确实让人心动.&lt;/p&gt;
&lt;p&gt;但是当时我实在第一是准备出发, 没有空等待这个到货时间不确定的东西, 第二就是买这么多坐飞机不方便, 所以只能再看机会了&lt;/p&gt;
&lt;h2&gt;现状&lt;/h2&gt;
&lt;h3&gt;第一波&lt;/h3&gt;
&lt;p&gt;一开始是从&lt;code&gt;newegg&lt;/code&gt;起步的两块盘&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/newegg_1.png&quot; alt=&quot;&quot; /&gt;&lt;figcaption&gt;10tb 174USD, 8tb 145USD&lt;/figcaption&gt;&lt;/figure&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1254180643682095105&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;虽然很多人说希捷的盘不是很好, 到时候反正也要组个 raid, 我自己之前的希捷盘也用了 8000 个小时, 感觉问题不大&lt;/p&gt;
&lt;p&gt;列一下型号:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Seagate Expansion
&lt;ul&gt;
&lt;li&gt;172.79/10T =&amp;gt; 17.28/T&lt;/li&gt;
&lt;li&gt;BarraCuda Pro&lt;/li&gt;
&lt;li&gt;ST10000DM0004&lt;/li&gt;
&lt;li&gt;PN: 1ZC101-301&lt;/li&gt;
&lt;li&gt;FW: DN01&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Western Digital MyBook
&lt;ul&gt;
&lt;li&gt;145.79/8T =&amp;gt; 18.22/T&lt;/li&gt;
&lt;li&gt;WD80EZAZ&lt;/li&gt;
&lt;li&gt;R/N: US7SAL080&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;开箱照片&lt;/h4&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/mybook_8tb_openbox.jpg&quot; alt=&quot;&quot; /&gt;&lt;figcaption&gt;WD 8tb&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h4&gt;对比图&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/compare_1.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/compare_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h5&gt;差异&lt;/h5&gt;
&lt;p&gt;两家都给了数据线和电源线, 但是希捷的还给了很多适配头, 用于不同国家的标准, 这个不错(虽然我都是要拆硬盘的了)&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/compare_3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h4&gt;测速&lt;/h4&gt;
&lt;p&gt;希捷的盘不掉速, WD 会有波动虽然说 &lt;a href=&quot;https://post.smzdm.com/p/aoo6m4l6/&quot;&gt;https://post.smzdm.com/p/aoo6m4l6/&lt;/a&gt; 这篇评测说不是 SMR, 但是掉速这个很奇怪&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1254287135106117632&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1254699445100384256&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;测速原图, USB:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/mybook_8tb_hdtune.jpg&quot;&gt;Mybook 8T HDtune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/expansion_10tb_hdtune.jpg&quot;&gt;Expansion 10T HDtune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/mybook_8tb_crystal.jpg&quot;&gt;Mybook 8T Crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/expansion_10tb_crystal.jpg&quot;&gt;Expansion 10T Crystal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;拆&lt;/h4&gt;
&lt;p&gt;不得不说, 希捷这个是真的难拆. 西数的只要卡一下卡口就可以无伤开盘, 但是希捷这个基本上肯定是要断扣子的&lt;/p&gt;
&lt;p&gt;但是盘的话, 希捷的还是料足的&lt;/p&gt;
&lt;p&gt;如果是具体怎么拆, 我是看这这些视频的:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;西数: &lt;a href=&quot;https://youtu.be/K5X7uXSx-no&quot;&gt;https://youtu.be/K5X7uXSx-no&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;希捷: &lt;a href=&quot;https://youtu.be/1RQv9raiPQg&quot;&gt;https://youtu.be/1RQv9raiPQg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/wd_crackbox_1.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/expansion_crackbox_1.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/expansion_crackbox_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;使用总结&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;希捷的发热很大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一开始我把它放到了&lt;code&gt;T40&lt;/code&gt;做 PT, 这个温度确实有点高&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;西数的声音确实不小&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我的蜗牛是放在房间里面的, 平时不读取还好, 但是刚好最近是 SMART 检查, 那声音真的是一言难尽&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;西数白盘放在主机里面确实可能用不了&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个和主板有关, 至少我的&lt;code&gt;T40&lt;/code&gt;是不行的&lt;/p&gt;
&lt;p&gt;操作可以看看这个视频: &lt;a href=&quot;https://youtu.be/9W3-uOl4ruc&quot;&gt;https://youtu.be/9W3-uOl4ruc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;用透明胶粘第三针, 注意不要挡住其他的即可&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;第二波&lt;/h3&gt;
&lt;p&gt;提前说一下, 这一波亏了, 买的是 10tb 的 WD easystore&lt;/p&gt;
&lt;p&gt;我平时购买会在什么值得买看看历史报价, 预期心理价位目前是:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;140 刀 8t 税后&lt;/li&gt;
&lt;li&gt;170 刀 10t 税后&lt;/li&gt;
&lt;li&gt;200 刀 12t 税后&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这一次在 BestBuy 最骚的就是, 179 刀卖了以后, 过两天 169 刀开卖&lt;/strong&gt; (详见第三波)&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_bestbuy.png&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;加上税以后一口老血喷出来......
不说了, 先列一下型号:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WD Easystore
&lt;ul&gt;
&lt;li&gt;194.79/10T =&amp;gt; 19.48/T&lt;/li&gt;
&lt;li&gt;WD100EMAZ&lt;/li&gt;
&lt;li&gt;US8SAL100&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这一次我没测速, 失误, 直接插进蜗牛和希捷的组了&lt;code&gt;RAID1&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;开箱&lt;/h4&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot;&gt;&lt;a href=&quot;https://twitter.com/i/status/1258465154670436353&quot;&gt;Tweet&lt;/a&gt;&lt;/blockquote&gt;
![](/assets/media/my-lovely-hard-drives/easystore_10tb_openbox.jpg)
&lt;h4&gt;拆&lt;/h4&gt;
&lt;p&gt;还是一样的好拆&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_crackbox.jpg&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_crackbox_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;第三波&lt;/h3&gt;
&lt;p&gt;还在路上, 托人从免税州带过来的, 先晒一下订单:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/newegg_2.png&quot; alt=&quot;&quot; /&gt;
&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_bestbuy_1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;列一下数据, 介于部分型号已经被开过了, 我这里主要放一下 Elements 的开箱好了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WD Easystore
&lt;ul&gt;
&lt;li&gt;169.99/10T =&amp;gt; 17.00/T&lt;/li&gt;
&lt;li&gt;WD100EMAZ&lt;/li&gt;
&lt;li&gt;US7SAL100&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WD Element
&lt;ul&gt;
&lt;li&gt;199.27/12T =&amp;gt; 16.61/T&lt;/li&gt;
&lt;li&gt;WD120EMFZ&lt;/li&gt;
&lt;li&gt;US7SAP140&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WD Mybook
&lt;ul&gt;
&lt;li&gt;178.98/10T =&amp;gt; 17.90/T&lt;/li&gt;
&lt;li&gt;WD100EZAZ&lt;/li&gt;
&lt;li&gt;US7SAL100&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/third.jpg&quot; alt=&quot;&quot; /&gt;&lt;figcaption&gt;全家福&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h4&gt;开箱&lt;/h4&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_open_box.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;Elements 的结构和 Easystore 很像, 但是感觉就是有点不成熟&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_front.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;前面这里和 easystore 一样有个小灯&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_back.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;背后这里有个电源键, 感觉用处不大 (长按关闭, 但是如果是在系统内弹出设备后还是需要重新插拔 usb)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://post.smzdm.com/p/adwr0pqk/&quot;&gt;https://post.smzdm.com/p/adwr0pqk/&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;拆&lt;/h4&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_drive_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;这个结构和 easystore 有点不一样, 他的四个脚是用特殊设计的胶垫做的, 吃硬盘边角形状&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_drive_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h3&gt;测速&lt;/h3&gt;
&lt;p&gt;顺便补一下测速, USB&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_hdtune.jpg&quot;&gt;Easystore 10T HDtune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_12tb_hdtune.jpg&quot;&gt;Elements 12T HDtune &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/easystore_10tb_crystal.jpg&quot;&gt;Easystore 10T Crystal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.never.pet/assets/media/my-lovely-hard-drives/elements_12tb_crystal.jpg&quot;&gt;Elements 12T Crystal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;总结&lt;/h2&gt;
&lt;p&gt;总储存: 60 T 总花费: 1061.61 USD&lt;/p&gt;
&lt;p&gt;算上杂七杂八的信用卡返现和返利网站返现, 算整体百分之五&lt;/p&gt;
&lt;p&gt;实际花费: 1008.53 USD&lt;/p&gt;
&lt;p&gt;平均 16.81 USD/T&lt;/p&gt;
&lt;h3&gt;多出来的盘?&lt;/h3&gt;
&lt;p&gt;希捷的盒子基本上是废了, 虽然说做工最好, 丢了之前从垃圾堆里捡到的, 160G, 跑了 3w8 小时还没啥问题的西数企业盘进去&lt;/p&gt;
&lt;p&gt;其他西数盒子就把之前的希捷的 1tb, 3tb 盘丢进去了&lt;/p&gt;
&lt;p&gt;&lt;s&gt;感觉这辈子都不差盘用了&lt;/s&gt;&lt;/p&gt;
&lt;h3&gt;拆卸难度&lt;/h3&gt;
&lt;p&gt;拆: Expansion &amp;gt;&amp;gt;&amp;gt; MyBook &amp;gt; Elements ~= Easystore&lt;br /&gt;
装: Elements &amp;gt;&amp;gt; Mybook ~= Easystore &amp;gt; Expansion&lt;/p&gt;
&lt;p&gt;Expansion 是真的很难拆, 而 Elements 特制的胶垫导致装回去的时候确实有点不知所措, 也导致我换下来的硬盘很难放进去&lt;/p&gt;
&lt;h3&gt;板子兼容性&lt;/h3&gt;
&lt;p&gt;目前只有 Mybook 的板子装入其他硬盘后不能读盘&lt;br /&gt;
Easystore 和 Elements 似乎都没有这个问题, 直接放进去就可以正常使用&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>还是再迁移了博客</title>
    <link href="https://blog.never.pet/posts/moving-my-blog-2/"/>
    <updated>2020-05-17T00:00:00Z</updated>
    <id>https://blog.never.pet/posts/moving-my-blog-2/</id>
    <content type="html">&lt;p&gt;过了这么久, 还是迁移了博客...&lt;/p&gt;
&lt;p&gt;目前使用的是&lt;a href=&quot;https://saber.land/&quot;&gt;https://saber.land&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;如果你在访问并非本文章的链接时跳转到这个页面&lt;/h2&gt;
&lt;p&gt;我在这次迁移的过程中, 删掉了我觉得之前写的没什么意义的文章&lt;/p&gt;
&lt;p&gt;如果你想看这些文章的存档, 可以到仓库的 &lt;a href=&quot;https://github.com/HomeofNever/Blog/tree/archive-2017&quot;&gt;archive 分支&lt;/a&gt; 查找&lt;/p&gt;
&lt;h2&gt;为什么我又迁移了?&lt;/h2&gt;
&lt;p&gt;这篇文章其实总结的很好了&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.h404bi.com/blog/2019/04/recent-changes-of-my-site&quot;&gt;https://www.h404bi.com/blog/2019/04/recent-changes-of-my-site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我现在这个博客很多也是借鉴这边的修订逐步迭代的, 但是一定要我来说的话, 主要是这一点&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;用&lt;code&gt;Vue&lt;/code&gt;来自定义博客和文章&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;相比与&lt;code&gt;hexo&lt;/code&gt;, 我觉得组件式, 尤其是我熟悉的框架, 可以给我带来更好的体验&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Vuepress&lt;/code&gt;在本文撰写之时并没有活跃维护, 这也给了我很好的理由使用&lt;code&gt;Saber&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;具体架构可以看 &lt;a href=&quot;https://github.com/HomeofNever/Blog/#readme&quot;&gt;https://github.com/HomeofNever/Blog/#readme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这个过程拖了太久了, 但是总算现在算是基本落地成功. 去给作者打赏以当庆祝&lt;/p&gt;
&lt;hr /&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/moving-my-blog-2/sponsor.png&quot; alt=&quot;&quot; /&gt;&lt;figcaption&gt;Github Sponsor&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;整体体验还行, 顺便试试看新开的&lt;code&gt;Amex&lt;/code&gt;卡&lt;/p&gt;
&lt;p&gt;不想管主题先了, 先把最近想写的都写了 Orz&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>Nano Pi NEO2 体验小记</title>
    <link href="https://blog.never.pet/posts/nano-pi-neo2-first-experience/"/>
    <updated>2019-05-31T11:42:00Z</updated>
    <id>https://blog.never.pet/posts/nano-pi-neo2-first-experience/</id>
    <content type="html">&lt;h2&gt;更新&lt;/h2&gt;
&lt;p&gt;H5似乎已经停止生产了, Nano PI Neo2 也似乎没有了&lt;/p&gt;
&lt;p&gt;然后现在我在尝试 &lt;a href=&quot;https://goteleport.com/&quot;&gt;https://goteleport.com/&lt;/a&gt;, 如果成了会新开一篇&lt;/p&gt;
&lt;p&gt;Zerotier 黑箱子实在不好debug...&lt;/p&gt;
&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;之前给几家店铺做了监控方案的设计，用的是POE供电摄像头配NVR。采用的是大华的方案，但是是自己直接去公司拿货自配帮忙布线，顺便把路由部分也包了。&lt;/p&gt;
&lt;p&gt;大华的方案好处是有乐橙云，绑定机器后相当傻瓜，可以直接用APP观看实时或者历史录像。但是机器设置还是要到现场（应该是为了安全）。&lt;/p&gt;
&lt;p&gt;然而部分店铺没有配置显示器，而且大华逐渐淘汰了他们的Web界面，转用客户端连接。每次需要调整配置需要到现场链接网络调试，非常的不方便&lt;/p&gt;
&lt;h2&gt;初步想法&lt;/h2&gt;
&lt;p&gt;当时就想的是做内网穿透，因为都是小店用的都是一般的宽带，公网是没有了。这样子每次只要有问题直接穿透回去看看就好了，还可以顺便监控一下网络质量（☑️&lt;/p&gt;
&lt;h3&gt;选型&lt;/h3&gt;
&lt;p&gt;内网穿透嘛……国内比较有名的也就是花生壳了，但是花生棒99元还要购买后续服务，宽带也小得可怜，果断pass&lt;/p&gt;
&lt;p&gt;其他的一些冷门点的公司又信不过，而且部分店铺是用的相当原始的路由器（主要是TPLINK家用，部分是企业级），虽然说普联自带了一个IPSec，但是部分店铺又没有，租用国内服务器价格也不算便宜（自建&lt;code&gt;SLA===0&lt;/code&gt;），于是又pass&lt;/p&gt;
&lt;p&gt;同时也发现极路由之类的智能路由似乎带有这种功能，比如Zerotier，但是这种东西定制性...还不如自己加块树莓派上去&lt;/p&gt;
&lt;p&gt;等等，树莓派？&lt;/p&gt;
&lt;h4&gt;价格&lt;/h4&gt;
&lt;p&gt;还是有点贵啊，淘宝转了一圈3B普遍200+，而且还没有外壳。不过为了测试我自己做内网穿透的机器，我还是先从 &lt;a href=&quot;https://ikk.me/&quot;&gt;@kookxiang&lt;/a&gt; 手里淘了一个二手树莓派，150带金属外壳&lt;/p&gt;
&lt;p&gt;介于之前接触了一下 ripe probe，那个小巧的外形让我觉得...价格应该不算很高吧（毕竟都是免费发），功耗也很低。查了一下名字neo2，淘宝一看基本价格100左右，全志H5性能也不算差，而且&lt;strong&gt;网口是千兆的&lt;/strong&gt;，那就试试看吧&lt;/p&gt;
&lt;p&gt;（其实就是树莓派玩腻了hhh）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.friendlyarm.com/index.php?route=product/product&amp;amp;product_id=180&amp;amp;search=neo2&amp;amp;description=true&amp;amp;category_id=0&quot;&gt;参数/购买参考地址&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;小插曲&lt;/h5&gt;
&lt;p&gt;淘宝店铺最低的是99，当我看上了准备买的时候，发现商家是广州的，一问是不是在岗顶的新赛格，还真的是，于是直接上门买了，省下10块钱邮费，嘻嘻&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://telegram.org/js/telegram-widget.js?22&quot; data-telegram-post=&quot;ButNothingHappened/2956&quot; data-width=&quot;100%&quot;&gt;&lt;/script&gt;
&lt;h2&gt;跑！&lt;/h2&gt;
&lt;p&gt;团队名字叫做友善之臂，感觉这个国内这个翻译有点小硬（ARM =&amp;gt; 手臂）&lt;/p&gt;
&lt;p&gt;扫了一遍&lt;code&gt;wiki&lt;/code&gt;默认给了 &lt;code&gt;Ubuntu 16.04&lt;/code&gt; 的包，那就先试试吧&lt;/p&gt;
&lt;h3&gt;下包&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;烧卡&lt;/h3&gt;
&lt;p&gt;16G应该算是底线了，去网上随便淘了几张金士顿的16G，烧上系统差不多8G&lt;/p&gt;
&lt;p&gt;一开始想试试看&lt;code&gt;ArchLinux&lt;/code&gt;的&lt;code&gt;Alarm&lt;/code&gt;，但是懒得折腾就还是上了官方包&lt;/p&gt;
&lt;p&gt;NanoPI的卡槽是有弹簧的，这个比树莓派体验好上不少&lt;/p&gt;
&lt;p&gt;我在windows做的就是用的&lt;code&gt;Win32DiskImager&lt;/code&gt;，一开始觉得还是一个盗版玩意结果不是（&lt;/p&gt;
&lt;h3&gt;开机&lt;/h3&gt;
&lt;script async=&quot;&quot; src=&quot;https://telegram.org/js/telegram-widget.js?22&quot; data-telegram-post=&quot;ButNothingHappened/2958&quot; data-width=&quot;100%&quot;&gt;&lt;/script&gt;
&lt;p&gt;（见上图）开机直接飙到46度，是有点小难受，早知道就配上散热片了，开久了亚克力板还是有点烫的。因为是监控机要求长时间开着，这个算是有点失策。&lt;/p&gt;
&lt;p&gt;用户默认pi@pi，ssh啥的也开好了，测了一下系统默认有个用户&lt;code&gt;fa&lt;/code&gt;，不知道干啥的于是删掉了。似乎是以前用的名字（friendarm）。镜像没太多检测可能还是有点坑，还要找时间看看咋回事（咕咕咕&lt;/p&gt;
&lt;h4&gt;装 Zerotier&lt;/h4&gt;
&lt;p&gt;官方安装脚本地址：&lt;a href=&quot;https://install.zerotier.com/&quot;&gt;https://install.zerotier.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;没有毛病，按照指令装就好了，略略略&lt;/p&gt;
&lt;p&gt;每次需要维护直接ssh转发端口，就可以直接进到内网咯，完美&lt;/p&gt;
&lt;h2&gt;后记&lt;/h2&gt;
&lt;p&gt;接下来顺便还玩了不少有趣的东西（或者小发现）&lt;/p&gt;
&lt;h3&gt;Zerotier&lt;/h3&gt;
&lt;p&gt;一开始想着&lt;code&gt;zeortier&lt;/code&gt;国内穿透可能一般般，现在国内大内网肯定要转发，节点的话……看了一下应该都是&lt;code&gt;AWS&lt;/code&gt;的，但是出乎意料的连通性很好，而且很稳。&lt;s&gt;看来这车没翻&lt;/s&gt;&lt;/p&gt;
&lt;h3&gt;SS&lt;/h3&gt;
&lt;p&gt;后面还是在每台机器上跑了SS，懒得ssh转发端口了（嘻嘻），而且这样子相当于多了个三个国内出口（电信，移动，联通，电视网全都有了），突然有趣&lt;/p&gt;
&lt;h3&gt;Torch&lt;/h3&gt;
&lt;p&gt;想着平时用的也不多，机器空转着也没啥用，就顺便做了&lt;a href=&quot;https://github.com/Torchping&quot;&gt;Torch&lt;/a&gt;的监测点。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;简单说一下，这是一个TCPING检测的工具，并对外提供了API，如果节点在国内可以用于检测节点是否被墙。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;目前赞助的节点都在机房，我是没这个钱，但是目前既然有这么好的家宽节点，为什么不用呢（&lt;/p&gt;
&lt;p&gt;把之前魔方云给的节点接入这个组网里面，然后配置一下&lt;code&gt;Caddy&lt;/code&gt;反向代理……完美&lt;/p&gt;
&lt;p&gt;（然而最近魔方云炸裂了，噗）&lt;/p&gt;
&lt;h3&gt;其他&lt;/h3&gt;
&lt;p&gt;但是目前开机时间差不多有快一个月，安置机器的时候放的稍微透风一点，似乎没有太多问题。&lt;/p&gt;
&lt;p&gt;后续还有更多玩法的话，就在更新好了一直没用上针脚的功能呢……&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;neo black 2&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2_Black/zh&quot;&gt;http://wiki.friendlyarm.com/wiki/index.php/NanoPi_NEO2_Black/zh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我后面又买了三个&lt;code&gt;neo black 2&lt;/code&gt;, 和&lt;code&gt;neo2&lt;/code&gt; 差不多, 但是最低内存变为了&lt;code&gt;1G&lt;/code&gt;, 而且价格甚至更低了一点&lt;/p&gt;
&lt;p&gt;用起来了以后更新一下体验&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>空格与 空 格</title>
    <link href="https://blog.never.pet/posts/space-and-s-p-a-c-e/"/>
    <updated>2019-03-27T14:08:00Z</updated>
    <id>https://blog.never.pet/posts/space-and-s-p-a-c-e/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;相关项目：&lt;a href=&quot;https://github.com/abusetelegram/kongebot&quot;&gt;kongebot&lt;/a&gt;
机器人 &lt;a href=&quot;https://t.me/kongebot&quot;&gt;@kongebot&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;你 打 字 带 空 格&lt;/code&gt;这个恶臭梗应该很多人知道吧（&lt;s&gt;不知道的别知道了，我不是厨子，谢谢茄子&lt;/s&gt;)&lt;/p&gt;
&lt;p&gt;然而手动加空格真的麻烦好吧，尤其是在这个方便的聊天工具里面：为什么不做个东西来自动&lt;code&gt;inline&lt;/code&gt;转换呢？&lt;/p&gt;
&lt;p&gt;这个看似简单的东西里面的坑却还不少，就借此机会学习一下&lt;/p&gt;
&lt;h2&gt;字符：我不是那么好惹的&lt;/h2&gt;
&lt;p&gt;把上面的问题分解一下就是：对于每一个独立的字符个体，我们希望在中间加一个空格字符串，例如&lt;code&gt;str str&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;怎么定义独立的字符？&lt;/h3&gt;
&lt;p&gt;这是我第一个遇到的问题，对于我常用语言来说，汉字和字母都很好说“独立“。然而，emoji却不是这样想的👿&lt;/p&gt;
&lt;p&gt;&lt;em&gt;注：本文不会过多描述编码，直接切入话题。如果不了解相关内容建议阅读一下参考&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html&quot;&gt;https://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://cenalulu.github.io/linux/character-encoding/&quot;&gt;https://cenalulu.github.io/linux/character-encoding/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简单来说，&lt;code&gt;UTF-8&lt;/code&gt;是一个变长编码&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在UTF-8编码中原本只需要一个字节的ASCII字符，仍然只占一个字节。而像中文及日语这样的复杂字符就需要2个到3个字节来存储。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;为什么呢？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实原因也比较容易理解：统一字库表的目的是为了能够涵盖世界上所有的字符，但实际使用过程中会发现真正用的上的字符相对整个字库表来说比例非常低。例如中文地区的程序几乎不会需要日语字符，而一些英语国家甚至简单的ASCII字库表就能满足基本需求。而如果把每个字符都用字库表中的序号来存储的话，每个字符就需要3个字节（这里以Unicode字库为例），这样对于原本用仅占一个字符的ASCII编码的英语地区国家显然是一个额外成本（存储体积是原来的三倍）。算的直接一些，同样一块硬盘，用ASCII可以存1500篇文章，而用3字节Unicode序号存储只能存500篇。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后呢？&lt;/p&gt;
&lt;p&gt;那肯定，遍历字符串的时候是希望按照“字符“为单位而不是一个字节为单位。然而，第一版的时候我是这样写的&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;
str&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39; &#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;script async=&quot;&quot; src=&quot;https://telegram.org/js/telegram-widget.js?22&quot; data-telegram-post=&quot;ButNothingHappened/3010&quot; data-width=&quot;100%&quot;&gt;&lt;/script&gt;
&lt;p&gt;这个问题是啥呢？我们来看看&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#Syntax&quot;&gt;MDN - Split&lt;/a&gt;的文档:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If &lt;code&gt;separator&lt;/code&gt; is an empty string, &lt;code&gt;str&lt;/code&gt; is converted to an array having one element for each character of &lt;code&gt;str&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;以前上面还没有那个警告，告诉你这样子会导致拆分，现在有了&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;这也可以解释当你看到某小说站里面满屏幕的&lt;code&gt;#数字&lt;/code&gt;：数据库存/去数据的时候估计编码出了点问题&lt;/p&gt;
&lt;p&gt;这是一般是当无法解析某个编码时候，会用到的显示：&lt;a href=&quot;https://unicode-table.com/en/FFFD/&quot;&gt;Replacement Character&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;解决方案：String Iterator&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;相关实现：&lt;a href=&quot;https://github.com/abusetelegram/kongebot/commit/5c0ae75b46d3220cf3a04592241f384c3330da46&quot;&gt;https://github.com/abusetelegram/kongebot/commit/5c0ae75b46d3220cf3a04592241f384c3330da46&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上面这个其实是调用了&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/@@iterator&quot;&gt;String Iterator&lt;/a&gt;，这个的实现就是按照字符分的啦。然后放心的用空格加起来就好了&lt;/p&gt;
&lt;h3&gt;延伸&lt;/h3&gt;
&lt;h4&gt;并不是所有的字符都可以加空格&lt;/h4&gt;
&lt;p&gt;比如阿拉伯/泰文，他们会有一种整合的机制（也是某些颜文字里面的用法）：多个字符拼在一起会缩短成一个更短的字符，在中间加空格/删掉一个字符只会拆分两个字符，并导致长度变长。&lt;/p&gt;
&lt;p&gt;这种就真的是很恶心了，处理不好还会有BUG，比如苹果的白苹果也是这个：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tech.sina.com.cn/mobile/n/n/2016-03-02/doc-ifxpvysv5088693.shtml&quot;&gt;http://tech.sina.com.cn/mobile/n/n/2016-03-02/doc-ifxpvysv5088693.shtml&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;阿拉伯文Bug的问题由来已久，早在iOS 6时代就出现过阿拉伯语（Arabic）字符串会使应用崩溃的问题，这类问题在iOS 7中得到了修复。不过，在去年的iOS 8中再曝出有关于阿拉伯文的神奇漏洞：iPhone在收到一串包含英文、阿拉伯文以、中文以及部分乱码的字符后，就会出现短信功能崩溃，无法打开的情况。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;为什么呢？其实是因为折行的问题：比如，通知栏里面一般会把太长的内容用省略号表示，这个时候就要计算了：中文，英文在同一个屏幕下能装的字符肯定不一样长。计算后你就要拆了：比如说取前30个字符，但是你刚好那个地方是一个合并。导致拆完以后字符串所占的像素反而还超限制不少，直接爆炸&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>RIPE Probe Hosting</title>
    <link href="https://blog.never.pet/posts/ripe-probe-hosting/"/>
    <updated>2019-03-27T11:47:00Z</updated>
    <id>https://blog.never.pet/posts/ripe-probe-hosting/</id>
    <content type="html">&lt;p&gt;先上图（低清警告）&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/ripe-probe-hosting/device.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;h2&gt;这是什么&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://atlas.ripe.net/&quot;&gt;官方项目介绍&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单提及一些概念（为了方便理解就稍微白话一点）：&lt;/p&gt;
&lt;p&gt;首先，我们目前使用的互联网可以理解为是由几十个超大的“局域网”组成的：就和家庭路由器一样，只不过人多了点&lt;/p&gt;
&lt;p&gt;各地区运营商（ISP）不一样，设备均由不同公司管理，就像是圈地一样，网络变得很碎片化，而且并不是那么“互联”。为了让大家能够不那么分散，&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E8%BE%B9%E7%95%8C%E7%BD%91%E5%85%B3%E5%8D%8F%E8%AE%AE&quot;&gt;BGP&lt;/a&gt; 便用来关联各个大型的局域网，变成更大一点的网络。每个网络为了标识同时还使用 &lt;a href=&quot;https://zh.wikipedia.org/wiki/%E8%87%AA%E6%B2%BB%E7%B3%BB%E7%BB%9F&quot;&gt;ASN&lt;/a&gt; 来标识&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;你可以通过访问&lt;a href=&quot;https://ipip.net/&quot;&gt;这个网站&lt;/a&gt;查看自己目前网络所属的ASN和对应的组织&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;为什么要互联？&lt;/h3&gt;
&lt;p&gt;简而言之，ISP 做的是事情就像是把一个小村庄互相通了路，但是村庄之间的路打通起来就要靠ISP之间的协商。如果路不通，而你想访问的服务刚好这区域没有，你就用不了。&lt;/p&gt;
&lt;p&gt;当然，你说可以绕路吗？可以，只要你之间有路由通告走的出来路就没问题，当然相比于直连速度就可能会慢一些&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;A-&amp;gt;B-&amp;gt;C
A和C之间没有通路，但是A区用户可以走B区到C
这个一般要看规则，就算B和AC有关联，B也可以阻止A的流量发往C
主要是各个ISP之间的协议
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;国内某些小型的运营商做法还要稍微“隐蔽一点”：由于自己的资源部署不多，国内电信对于企业价格是个人/小企的几十倍（防止二次分销），就自己进行组网并从全国各地省级购买的共享宽带出口，变相实现互联。这种做法速度只会更慢（为了降低价格而将流量导向各个出口）&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://zh.wikipedia.org/wiki/Traceroute&quot;&gt;Traceroute&lt;/a&gt;可以显示出你的流量走过了哪些路&lt;/p&gt;
&lt;h3&gt;说了这么多，和这破东西有什么关系？&lt;/h3&gt;
&lt;p&gt;各个ASN的接了什么线流量怎么走的很多时候并不是那么的清楚，为了监控各个ASN到各地的流量走向，稳定性，etc. 一般情况最简单的办法就是在这个ASN里面部署一个Probe（探针），用它来测试到各地的连通性（墙？），延迟，以及路径&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://atlas.ripe.net/about/&quot;&gt;视频说明&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;s&gt;你似乎还可以通过部署Probe获得RIPE积分，暂时不知道是干啥的&lt;/s&gt;&lt;/p&gt;
&lt;h2&gt;如何申请&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://atlas.ripe.net/probes/50812/&quot;&gt;本探针&lt;/a&gt;的数据收集地址&lt;a href=&quot;https://atlas.ripe.net/landing/get-involved/&quot;&gt;官方申请指南&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;首先，你需要一个RIPE账号（略过过程，注册就好）&lt;/p&gt;
&lt;h3&gt;你的ASN&lt;/h3&gt;
&lt;p&gt;一般来说，一个ASN有一个探针就差不多了。所以你可以用上方说明查看ASN的网址看一下自己网络所处的ASN是多少，然后在这个&lt;a href=&quot;https://atlas.ripe.net/probes/&quot;&gt;查找页面&lt;/a&gt;看一下自己所在的ASN有没有Probe了&lt;/p&gt;
&lt;p&gt;&lt;s&gt;如果已经有了的话应该是不会通过了&lt;/s&gt;但是你可以试试看&lt;/p&gt;
&lt;p&gt;P.S. 申请时间较长所以请稍安勿躁&lt;/p&gt;
&lt;hr /&gt;
&lt;h4&gt;Probe vs Anchor&lt;/h4&gt;
&lt;p&gt;你可能还会看到一个叫做&lt;code&gt;Anchor&lt;/code&gt;的东西，简单来说这是Probe 传回数据的地方。对于部分连通性不佳的网络，可能 Probe 怎么都链接不上一个有效的服务器传回自己的遥感数据，那这样其实和没有不是一样吗emmm&lt;/p&gt;
&lt;p&gt;相比于Probe，Anchor要自己掏钱买专门配置好的刀片服务器，毕竟是要接收大量的遥感数据。成本相对高很多，就不再这篇文章的讨论范围内&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Probe 如果申请通过了会发邮件告诉你，以前是一台TP-Link的路由器配一个小U盘装着需要运行的程序，现在的架构是NanoPi&lt;/p&gt;
&lt;p&gt;插上路由器，注册设备需要设备背后的ID和Mac地址，然后就等待启动就好了~&lt;/p&gt;
&lt;h3&gt;等等，我所在的ASN有设备了，有什么办法保证我可以通过申请吗？&lt;/h3&gt;
&lt;p&gt;当然！你自己注册一个ASN就好了（被打死&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>云游戏：生不逢时</title>
    <link href="https://blog.never.pet/posts/my-thought-about-cloud-game-before/"/>
    <updated>2019-03-20T11:42:00Z</updated>
    <id>https://blog.never.pet/posts/my-thought-about-cloud-game-before/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;谨此文怀念我接触的第一个国内在线串流游戏平台：云游戏&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;是在 2013 年的时候吧，我当时的电脑是一台清华同方的 K42H，算是当时性价比很高的（游戏）本了。&lt;/p&gt;
&lt;p&gt;那个时候我是初中，除了教室的一台只有 512MB 的台式机，也没什么可以玩的了。当时英雄联盟刚上？蛮火，我还被一女同学拉着打（还被吊打）emmm……&lt;/p&gt;
&lt;p&gt;然而我那台机器在那个时候也已经算是很老的了，网卡也不是很行，同一网络下ping 100-200 徘徊，人家就稳定 30， 应该是CPU不行了&lt;/p&gt;
&lt;p&gt;也就是这个时候接触了一个很好玩的东西：云游戏&lt;/p&gt;
&lt;h2&gt;是什么？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;很多相关的新闻已经找不到了，只能从一些玩家的截图看到一些影子
&lt;a href=&quot;http://tieba.baidu.com/p/2222195350&quot;&gt;http://tieba.baidu.com/p/2222195350&lt;/a&gt;
官网应该是：&lt;a href=&quot;http://yxyun.com/&quot;&gt;http://yxyun.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当时他们是和 360 合作，做了可以在网页上玩英雄联盟的版本：只需要装一个 5MB 的插件（应该是Unity）即可运行&lt;/p&gt;
&lt;p&gt;虽然说学校的机器很差，但是学校网络却不差：速度和延迟都很理想，十分理想的云游戏环境。当时云游戏每周还有限免游戏，可以在线保存存档。&lt;/p&gt;
&lt;p&gt;我在这里认识了一款育碧算是精品的游戏，但是后面被盗版打败的IP：&lt;a href=&quot;http://bulletstorm.com/&quot;&gt;子弹风暴&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;重置版 Steam 链接：&lt;a href=&quot;https://store.steampowered.com/app/501590&quot;&gt;https://store.steampowered.com/app/501590&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当时最高的串流分辨率是&lt;code&gt;1024x768&lt;/code&gt;，但是在远程机器开高画质没问题，整体延迟也可以接受。虽然说很多技能确实很难使出来就是了&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;虽然当时云游戏也是盗版，但是这次重制的新版我是果断的入了一份：不是这次缘分也见不到这款还算是良心的游戏&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;英雄联盟当时还遇到了更新问题：打开客户端需要更新，但是更新完需要重启客户端，会导致游戏实例重启&lt;/p&gt;
&lt;p&gt;这个问题出现花了一个星期的样子他们才修复，至少那个时候我们已经不怎么玩了&lt;/p&gt;
&lt;h2&gt;收费，模式&lt;/h2&gt;
&lt;p&gt;他们当时的年卡是 365 元一年，也就是 1 天一块钱的样子。这个收费其实不算高，但是对于宽带的要求确实是有点高：当时家用最高百兆勉强够用，还没有现在的千兆。我家里还是 8M 的电视网的样子，也就学校的千兆教育网可以维持低延迟和高画质了&lt;/p&gt;
&lt;p&gt;但是现在这些都不算问题了：网速的提升，流量套餐不断降价，终于让云游戏有了良好的土壤....等一下，美国呢？&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;很早以前，美国就有类似的云服务提供商，比如最早的一批&lt;code&gt;Online&lt;/code&gt;，美国的千兆网普及的比较早，但是这类服务依然不是很流行，因为大部分游戏商不是很认同这种&lt;code&gt;SaaS&lt;/code&gt;的服务（卖出去的副本并没有增多），使得可玩的游戏很少。
----电脑爱好者（我没记错的话，应该是这个杂志名）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;目前的话，有不少，比如最近最火的&lt;a href=&quot;https://store.google.com/magazine/stadia&quot;&gt;Stadia&lt;/a&gt;，来自谷歌还有&lt;code&gt;Geforce Now&lt;/code&gt;等同类竞品，和&lt;code&gt;Playstation Now&lt;/code&gt;来自主机的解决方案&lt;/p&gt;
&lt;p&gt;&lt;s&gt;似乎现在什么不弄个云都不舒服&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;谷歌还在自己的产品内加入一些看起来帮助游戏开发者开发的功能：滤镜&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;s&gt;这个和当时在夏校做的一个项目很像：给一个图片，将一段视频渲染成对应风格&lt;/s&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;暂时看不出来谷歌的方向：游戏这个大饼似乎谷歌做的事情很少。感觉这个算是一个小步。不知道谷歌这个举动算不算是标志着这个市场逐渐开始成熟....&lt;/p&gt;
&lt;p&gt;&lt;s&gt;或者是一个又要被砍掉的项目&lt;/s&gt;，谁知道呢？&lt;/p&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;鼠标的专利是 1967 年提交的，然而鼠标的发明者 Douglas Engelbart 却几乎没从中获利：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;直到1983年，乔布斯发布苹果的新机型Lisa时，鼠标才获得大规模的商业成功。由于鼠标专利只有17年的有效期。结果，无论是“鼠标之父”恩格尔巴特，还是拥有专利的斯坦福研究中心，多年来都没有从中得利。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;1987年，SRI把鼠标专利卖给苹果公司，赚得4万美元。SRI随即付给恩格尔巴特1万美元的酬劳。这大概是“鼠标之父”从这项发明里获得的唯一一笔收入。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;云游戏也许也是一个宝藏，但是至少这一次，云游戏没坚持到真正的曙光。按照最后的公告的说法，机房的费用让他们难以维持运营，也没有真正的被看上和资金注入。&lt;/p&gt;
&lt;p&gt;生不逢时，是我对这个当时技术不错的团队的评价：有的时候确实不是人的问题，不是够不够努力的问题&lt;/p&gt;
&lt;p&gt;就是运气不好，生不逢时&lt;/p&gt;
&lt;p&gt;谨上&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>Telegram Web 搭建</title>
    <link href="https://blog.never.pet/posts/telegram-web-hosting/"/>
    <updated>2019-03-08T02:10:00Z</updated>
    <id>https://blog.never.pet/posts/telegram-web-hosting/</id>
    <content type="html">&lt;h1&gt;剧情前提&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://telegram.org/&quot;&gt;Telegram&lt;/a&gt; 是个好东西，他有个&lt;a href=&quot;https://web.telegram.org/&quot;&gt;Web客户端&lt;/a&gt;，也是个好东西&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;官方网页源代码：&lt;a href=&quot;https://github.com/zhukov/webogram&quot;&gt;https://github.com/zhukov/webogram&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然而，想要做这个东西的镜像，却没有那么简单&lt;/p&gt;
&lt;h1&gt;Howto&lt;/h1&gt;
&lt;p&gt;首先，我要说一句：你的APPID和Hash已经是不可避免的暴露了。毕竟是要在客户端里面给到的&lt;/p&gt;
&lt;p&gt;比如说，&lt;a href=&quot;https://web.telegram.org/js/app.js&quot;&gt;官方客户端的ID&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;id:2496
hash:8da85b0d5bfe62527e5b244c209159c3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;本文用到的仓库地址：&lt;a href=&quot;https://gitlab.com/DogeTeam/webogram-new&quot;&gt;https://gitlab.com/DogeTeam/webogram-new&lt;/a&gt;
你可以通过查阅日志了解每一步的更改&lt;/p&gt;
&lt;h2&gt;API&lt;/h2&gt;
&lt;p&gt;Telegram的登陆设计很奇怪（狗屎）：他有5个数据中心，分别对应的Web接口是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pluto&lt;/li&gt;
&lt;li&gt;venus&lt;/li&gt;
&lt;li&gt;vesta&lt;/li&gt;
&lt;li&gt;aurora&lt;/li&gt;
&lt;li&gt;flora&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;格式：
&lt;code&gt;https://&#39; + subdomain + &#39;.web.telegram.org/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;在你填写手机号以后，应用需要&lt;strong&gt;一个一个请求这五个中心&lt;/strong&gt;才能知道哪个中心是你的账号所在的位置。&lt;/p&gt;
&lt;p&gt;所以，也就是说，你需要10个子域名（每个名字还有一个&lt;code&gt;subdomain-1&lt;/code&gt;的（备用？）域名）&lt;/p&gt;
&lt;p&gt;我比较懒，懒得搞wildcard（因为用来做代理的机器是临时小鸡，不想放DNS Key上去），就直接用了Caddy&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：最近官方似乎反代理，所以&lt;code&gt;Host&lt;/code&gt;头在转发的时候记得给官方的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://gitlab.com/DogeTeam/webogram-new/snippets/1833207&quot;&gt;Caddyfile&lt;/a&gt; 例子&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;语言&lt;/h2&gt;
&lt;p&gt;目前客户端还没有合并中文进去，这有点不能忍啊……&lt;/p&gt;
&lt;p&gt;由于客户端是用Angular2开发的，语言文件需要在几个地方注册。具体步骤可以看&lt;a href=&quot;https://github.com/zhukov/webogram/tree/master/app/js/locales&quot;&gt;这里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;文章开头提供的仓库内置了中文汉化并设置为了默认，当然还是会检测浏览器的语言&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：你最后还需要更改&lt;code&gt;package.json&lt;/code&gt;让你的语言生效，这一步似乎没有在官方的说明里出现&lt;/p&gt;
&lt;p&gt;（当时我调了老半天就是没有用，全局搜索语言&lt;code&gt;en-us&lt;/code&gt;偶然发现&lt;code&gt;package.json&lt;/code&gt;里面还要设置emmmm）&lt;/p&gt;
&lt;h2&gt;CI&lt;/h2&gt;
&lt;p&gt;每次都要重新打包，懒，自从有了CI以后日子变得好多了（gitlab真香，还可以直接上传到pages）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：gitlab pages 如果通过CI上传，最后生成的build文件夹必须命名是&lt;code&gt;public&lt;/code&gt;，否则失败。（这莫名其妙的错误折腾了好久，因为是&lt;code&gt;External Service&lt;/code&gt;还没有错误提示……）&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>华为短信机.jpg</title>
    <link href="https://blog.never.pet/posts/tasker-messenger/"/>
    <updated>2019-02-08T12:28:00Z</updated>
    <id>https://blog.never.pet/posts/tasker-messenger/</id>
    <content type="html">&lt;h2&gt;剧情前提&lt;/h2&gt;
&lt;p&gt;到国外以后，国内带来的两张手机卡突然有一张没地方放了。刚好老母过来的时候让她赶紧把手里的华为P9给换了水果，顺便还注册了美区ID。既然有台这个机器……这就折腾一下吧&lt;/p&gt;
&lt;h2&gt;1st&lt;/h2&gt;
&lt;p&gt;首先想到的注意是做闹钟（然而华为EMUI这个*！@#¥一定要用他的语音助手，谷歌的在黑屏以后无法唤醒，还不能解锁屏幕……于是后面用了Google mini，Spotify的羊毛），顺便可以做成一个监控，然后其实才是短信。但是无论怎么样，要找个地方可以架起来放着：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/gp/product/B06Y12XQ1X/&quot;&gt;https://www.amazon.com/gp/product/B06Y12XQ1X/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;很好，顺便买了一个带USB口的插板，电源准备就绪&lt;/p&gt;
&lt;h3&gt;解锁&lt;/h3&gt;
&lt;p&gt;TL;DR，&lt;strong&gt;结论看末尾加粗&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先，这台机器（&lt;code&gt;EVA-TL00&lt;/code&gt;）是移动机，我联通的卡进去直接GG。然而我发现实际上他是连得上TMO的3G网（联通卡），看来就是硬编码了一下系统（实际上也是）。如果要全网的话就要解锁拿权限&lt;/p&gt;
&lt;p&gt;这个机器在老母用的时候就一直没有升级，拿过来以后本来打算解锁BL，结果刚好过了#¥%…的时间。然后还手贱升级了，含泪找了老半天的包降级回去，拿到了ROOT，照着&lt;a href=&quot;https://www.52pojie.cn/thread-816065-1-1.html&quot;&gt;吾爱破解的教程&lt;/a&gt;，结果已经失效了，拿到了是&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/tasker-messenger/unlock_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUDDDDDDDDDDDDDDDD&lt;br /&gt;
WVDEVID&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个状态应该是已经加密后的，（我…#¥）&lt;/p&gt;
&lt;p&gt;然后直接找淘宝，他们用&lt;code&gt;USB Redirector&lt;/code&gt;这种东西直接远程到手机（我本来还为此准备了虚拟机，不喜欢别人直接远程，然后在国外……迅雷用不了还是找 &lt;a href=&quot;https://daily.elepover.com/&quot;&gt;@Elepover&lt;/a&gt; 帮忙下的win7镜像），结果……我在国外网太慢，第一家直接给我退款了（😊）&lt;/p&gt;
&lt;p&gt;第二家弄了一会弄好了，但是第一家走之前留下了一些没有删掉的文件，其中一个是一个很罕见的驱动：&lt;code&gt;ASC-Driver_Handset WinDriver 2.01.00.00.exe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;按照这个名字找到一堆“这类商家“分享的网盘链接：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/tasker-messenger/pan_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;还有一个专门卖解锁码软件的QQ，稍微逆向了一下发现这些（或者说这种软件）似乎最后都是要把结果发回服务器计算结果的，emmmmmm很明显算法被搞了&lt;s&gt;内部搞事情&lt;/s&gt;（所以都这样了华为你还关解锁通道NM$L）&lt;/p&gt;
&lt;p&gt;反正，&lt;strong&gt;淘宝花了20块钱买到了解锁码&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;刷！&lt;/h4&gt;
&lt;p&gt;接下来就是刷机了，虽然说已经有准备了，但是我还是没有想到能有这么恶心&lt;/p&gt;
&lt;p&gt;因为华为本身自己的东西太多，在&lt;a href=&quot;https://source.android.com/devices/architecture&quot;&gt;Treble&lt;/a&gt;项目之前，每个自定义的ROM都有一个底包要求，&lt;strong&gt;也就是说我要重新把我辛辛苦苦降级的系统再升级回去&lt;/strong&gt;（我……）&lt;/p&gt;
&lt;p&gt;我升到&lt;code&gt;EMUI5&lt;/code&gt;以后直接&lt;code&gt;XDA&lt;/code&gt;找了一个Android 7的包刷了，明显的，这破东西文件系统还有各种坑，就不吐槽了&lt;/p&gt;
&lt;p&gt;最主要是，我一开始一直进不去&lt;code&gt;TWRP&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;一般来说，系统会有&lt;code&gt;Recovery&lt;/code&gt; 和 &lt;code&gt;Bootloader/fastboot&lt;/code&gt;，然而华为还有一个&lt;code&gt;Emergency Recovery&lt;/code&gt;：这个东西会在启动的时候在OEM解锁警告界面按下键进入。**也就是你要在解锁警告界面过后按才可以进去&lt;code&gt;Recovery&lt;/code&gt;**然而这个时间不是很好把握，正常进系统会把TWRP抹掉替换为原来的&lt;code&gt;Recovery&lt;/code&gt;我真是%…&amp;amp;*，反正试了几次以后总算进去了。&lt;s&gt;抄水果的网络系统还原也不用这样吧草&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;反正刷机后电池续航之类的我不指望了，一直插着电。相机也能用，&lt;code&gt;Vendor&lt;/code&gt;其实还是华为的，&lt;s&gt;真的是自我安慰呢&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这辈子再碰华为我吃屎（&lt;s&gt;不会真香的&lt;/s&gt;）&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;2nd&lt;/h2&gt;
&lt;p&gt;之前 Google Pay 新用户激活送了 20 刀一直没有用，直接先拿来买了一个&lt;a href=&quot;https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&quot;&gt;Tasker&lt;/a&gt;，类似于水果的捷径，但是更强大&lt;/p&gt;
&lt;p&gt;项目配置：&lt;a href=&quot;https://github.com/NeverBehave/Tasker-Messenger&quot;&gt;https://github.com/NeverBehave/Tasker-Messenger&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体怎么用我就不说了，但是有一点东西可以注意一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;建议使用&lt;code&gt;Javascript let&lt;/code&gt;在提交数据前&lt;code&gt;encode&lt;/code&gt;一下数据（&lt;code&gt;JSON&lt;/code&gt;, &lt;code&gt;URLENCODE&lt;/code&gt;），这样子方便很多
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;global()&lt;/code&gt;获得变量&lt;/li&gt;
&lt;li&gt;声明的变量在后续操作里面使用&lt;code&gt;%{VAR}&lt;/code&gt;可以获取到&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;至于说摄像头的话：&lt;a href=&quot;https://alfred.camera/&quot;&gt;https://alfred.camera&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;小插曲&lt;/h3&gt;
&lt;p&gt;一开始没刷系统的时候我是想用&lt;code&gt;Google Assistant&lt;/code&gt;替换掉华为的语音助手，但是华为有两个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只有他的语音助手可以唤醒屏幕，其他的都不行&lt;/li&gt;
&lt;li&gt;设置了锁屏密码以后不能还原到没有密码的状态（……）， 然后谷歌还不能解锁手机&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是乎，有种操作就是用&lt;code&gt;tasker&lt;/code&gt;监控&lt;code&gt;HiVoice&lt;/code&gt;（华为语音助手）的窗口，弹出的时候唤醒谷歌助手：&lt;a href=&quot;https://www.xda-developers.com/enable-ok-google-always-on-hotword-detection-on-huawei-honor-phones-no-root/&quot;&gt;https://www.xda-developers.com/enable-ok-google-always-on-hotword-detection-on-huawei-honor-phones-no-root/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但是我后面不小心设置了锁屏密码，于是谷歌又炸了&lt;/p&gt;
&lt;h2&gt;这就没了？&lt;/h2&gt;
&lt;p&gt;其实是有的：&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://telegram.org/js/telegram-widget.js?22&quot; data-telegram-post=&quot;ButNothingHappened/2823&quot; data-width=&quot;100%&quot;&gt;&lt;/script&gt;
&lt;p&gt;研究了一下&lt;code&gt;SIM&lt;/code&gt;模块，发现……真的贵：至少国外的价格不便宜，&lt;s&gt;想要找人从国内带开发板&lt;/s&gt;，于是就先这样了&lt;/p&gt;
</content>
  </entry>
  
  
  
  <entry>
    <title>一张图总结2018</title>
    <link href="https://blog.never.pet/posts/2018-2019/"/>
    <updated>2018-12-31T17:47:00Z</updated>
    <id>https://blog.never.pet/posts/2018-2019/</id>
    <content type="html">&lt;p&gt;时区： UTC-4&lt;/p&gt;
&lt;p&gt;图片：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://blog.never.pet/assets/media/2018-2019/gugugu.jpg&quot; alt=&quot;&quot; title=&quot;其实是红包啦&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;最后：拿了我的包就是我鸽家人了，咕咕咕&lt;/p&gt;
&lt;p&gt;新年也要咕咕乐！（快乐脸）&lt;/p&gt;
</content>
  </entry>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
</feed>
