博客迁移

20年年初的时候阿里云云翼计划额外赠送了一次学生机购买机会,正好疫情期间在家上网课很无聊,索性就花了亿点时间折腾了一下博客。🤔既然是采用云服务器来部署博客,静态博客这种肯定是不合适的。而市面上可选自部署博客服务的方式太多了,诸如WordPress这类成熟的方案简直是傻瓜操作,一键部署搞定。挑了半天,综合考虑了可玩性和易用性,最后选择了 typecho来搭建博客服务,博客主题选用了代码和文档质量高到不可思议的handsome主题。但折腾总归是折腾,折腾到最后都是索然无味🙃。 坚持写了一年多的博客,对于服务器续费的事情早就习以为常。没想到前几天邮箱突然遭到阿里云轰炸,阿里云预付的0.01个达不溜竟然无法续费服务器了,起初以为是bug,最后才发现是学生机优惠续费有次数限制🤡,续费一次的成本直接翻了几十倍,成本过高,于是便想着这几天忙完毕业的事情就把博客迁移到成本更低的静态博客上。 这次博客迁移实际上只用了一下午,但是技术选型和博客风格倒是考虑了几个星期。之前采用的旧博客虽然什么都好,但是有几点还是让我很膈应的。 首先,typecho本质上是个多用户类型的博客服务,每次用markdown写完的文章还需要手动登录账号去后台提交,太过麻烦,因此新博客的第一个要求就是博客提交体验要好。 其次,杜绝一切花里胡哨。这不是说之前的博客太花里胡哨,而是我对博客的需求变了,之前只是为了无聊的时候找找乐子,现在是为了找个地方存放读书笔记和技术文章。博客在文字排版和渲染性能不妥协的前提下,越简洁越好,换句话说就是够用就行。 最后,新博客的容灾性能要高且方便未来的迁移。 其实提这些需求完全等于在报Github Pages+Hugo/Hexo/Vuepress等方案的身份证。Github Pages的静态托管服务区完全满足上述所有需求,接下来要纠结的只剩静态博客生成引擎和主题的选择了。 起初我想用采用Vuepress的方案,在折腾过后还是决定不合适,Vuepress本身还是偏向于项目文档的托管,对于博客这种需求其本身就没有提供合适的解决方案。Hexo的话则是完全为博客需求量身定做,NexT主题也是非常有名,但是综合考虑到配置的复杂程度、模板引擎的性能、提交体验等多个方面,最后还是选择了Hugo。 Hugo完全不需要自己去定义导航栏的一些信息,在markdown文件头部加入文章题目、标签、分类等信息后模板引擎会自动生成对应的导航信息,十分方便。提交体验也是非常好,每次写文章只需要使用Hugo来生成新文章,写完后生成模板提交到Github上即可。(这里其实有更好的方案,使用Github Action脚本可以实现自动模板内容的自动生成,省事了不少)。主题的话则是采用了简洁且够用的PaperMod主题,性能强悍,markdown渲染引擎支持各类主流/非主流语法,出乎意料的强悍。 不出意外的话,这次迁移之后应该可以稳定相当长的一段时间了,其实一开始就该采用这种方案的,不折腾又稳定,希望能坚持写下去吧。

May 23, 2021 · Huo Haodong

恢复 Windows 的默认字体等文件的方法

今天折腾Linux的时候不小心删掉了Win10的一些字体,结果切换到Win10后发现字体换成了点阵形式的宋体,看起来有一种迷之清晰感,导致一些应用软件缺少了微软雅黑等字体。 解决方法 Windows自带了一个扫描并修复系统文件的工具sfc(system file check),使用该工具即可修复,步骤如下: 打开cmd; 输入指令sfc/scannow; 等待修复完成后重启即可。 此方法适用于各种Windows系统文件丢失的情况。

September 2, 2020 · Huo Haodong

打印菱形

问题:输入一个奇数n,打印高度为n的菱形字符。 一日闲来无事,脑中灵光一现,突然想试试打印字符玩玩。传统的打印菱形字符的方法无外乎1.依次打印菱形的4个角。2.先打印菱形的上半部分,然后再打印下半部分。3.暴力徒手打印。网上的资料也大多依此思路实现。但是实现的代码往往雷同且有多个for循环,看起来十分别扭。 这里提供一个相对优雅的方法: * *** ***** *** * 观察上面的图像,可以看到每一行的空格数(只打印左边的空格,右边的无需打印)的规律符合函数:y = abs(x + 2),其中x从0~n-1,n为菱形的高度,x为行号,y为第x行对应的左边的空格数。 更一般的,将公式推广到一般的n也是成立的,这些通过在草纸上画出函数图像即可得出。这里不再赘述。 现在有了空格数,求所需打印的字符也便容易了,想象成一个正方形的盒子,每一行除了空格就是字符,现在知道了每一行左边的空格数y,那么这一行总共有2 * y个空格,且这一行总共有n个字符,那么所需打印的字符数便为n - 2 * y。有了公式,打印菱形的代码便很容易就可以写出: //打印菱形 public static void printRhombus(int height, char charShape) { for (int row = 0; row < height; row++) { int blankCount = Math.abs(-1 * row + (height - 1) / 2); int charCount = height - 2 * blankCount; for (int col = 0; col < blankCount; col++) { System....

April 12, 2020 · Huo Haodong