谢谢你留下时光匆匆
slf4j 本地日志输出

在进行Java开发时,我们常需要打印日志来帮助我们检查运行结果,定位问题。slf4j是常用的日志框架,但其只是日志框架的一部分(即所谓的设计模式中的门面),真正日志记录的实现还需要相应的后端支持(如在生产环境配置的log4j2),这意味着,在本地机器中如果没有相关配置,代码中slf4j记录的日志可能无法直接查看。我们可以通过简单的配置使我们在本地启动服务时候也能顺利打印出日志。


如何避免 Java NPE(NullPointerException) 空指针问题

NPE(NullPointerException) 是在Java开发中常遇到的问题,特别对于刚入门的Java开发者来说,很容易忽略空指针的问题,进而影响整理代码质量。自己查阅了网络上相关资料,在这里对NPE空指针问题的解决方法做一个总结。

NPE的应对,整体上分为两大情况——1,接受外部数据,处理这些外部数据时,出现NPE;2,自己定义方法/接口时,空指针作为返回结果。


Hugo设置在新页面打开链接

默认情况下,打开Hugo博客中的链接,会在当前浏览器页面上直接进行跳转的,而不会在新浏览器标签页中打开。这导致了较差的用户体验,并且还可能让读者跳出了网站,终止后续阅读,不利于网站更多内容的呈现。

我们可以进行如下简单的配置,实现在新标签页打开链接的优化:在theme目录下找到当前主题对应的文件夹目录,在其下layouts\_default\_markup路径(如果没有自行建立)添加文件render-link.html,将下面一段代码复制到文件里后,即可配置完成


CSS 与 SCSS 常用信息小结

最近一直在更新优化一些前端的小项目,这其中包括CSS样式表的代码重构。我选择将CSS代码转向SCSS,使得CSS代码更为简洁,结构更加清晰,方便后期的维护与开发。这里对CSS与SCSS基础的用法做一个简单的记录。


docker常用命令整理

最近在部署一些应用时候用到了docker,上一次用docker也是几年前了,很多命令印象已经不深刻了,这里稍微复习整理了一下常用的命令,方便以后部署应用使用。

container 相关

运行一个container

启动一个container是docker应用部署的关键一步,有许多配置选项需要注意。

1
docker run [flags] XXX/IAMGE_TO_RUN

利用Github Action定时运行Python脚本

自己业余时间经常会开发一些脚本,定时运行它们,来辅助自己完成各种各样的任务,比如:定时推送天气情况到自己的todo list;定时运行一些爬虫,摘录新闻、消息(例如优化热榜类RSS feed源);定期整理自己的财务数据,输出报表等等等等。

以前我用过云服务设置cron job定时来跑这些脚本,但是云服务的使用是需要付费的。后来Github Action发布,public repo可以无限制使用,private repo也提供一定的免费时长额度。Action job可以通过cron形式触发,我们可以借此实现定时运行Python脚本。整个实现过程只需要两步,本文简单记录一下过程。


优化热榜类RSS feed源

自己个人很喜欢用传统的RSS feed源来获取信息,因为其简洁纯净的风格,可以避免App推荐算法带来的信息茧房,以及广告与用户评论带来的嘈杂;RSS的集成性,使只用一个完全定制的app接受各种信息变为可能,提供很不错的浏览体验。但有一类比较重要的信息与RSS适配不算完美,就是各大平台的热榜(例如,微博热搜、知乎热榜等),这些热榜类信息代表时下社会热点。

现有的热榜类RSS feed源,以RssHub为例,不能带来很好的浏览体验,其原因有三:首先,热榜channel是以每一条热榜条目为item,每条item在channel出现的顺序并非按照热度顺序呈现,很难定位到头部重点热点内容;二是以热榜条目为item,整个channel内会出现一段时间内所有的热榜条目,数量庞大;三是传统意义上,RSS item应该以一篇文章为单位,热榜中每条条目单独作为一条item,信息量极小,与RSS阅读器的操作逻辑不符合。

于是,我自己搭建了一个为热榜类信息优化的RSS源,本文记录一下相关细节。


为Hugo主题添加动态跟随目录Scrollspy效果

自己搭建设计博客主题时候,采用了主栏与侧边栏的双栏设计,在博客文章页面,侧边栏可以用来呈现文章的目录(一级标题,二级标题等),方便读者了解文章整体结构脉络,也方便读者进行跳转操作。基础的目录html部分可以通过Hugo原生的{{ .TableOfContents }}函数实现。除了基本的目录,自己还想为目录部分添加上动态跟随的工作,即,目录会高亮出目前读者所浏览部分的标题。博客原先采用的bootsrap框架自带的Scrollspy模块可以实现这个功能,但是如果页面元素发生高度变化(例如,评论功能的异步载入),该Scrollspy功能会出现位置定位不准的问题。经过一番尝试后,自己最后使用了gumshoe作为替代实现动态跟随目录的效果,本文记录整个相关实现的细节。


Markdown转换Latex简易实现方案

学术文章通常使用Latex进行最后的渲染,但是直接利用Latex语言进行写作并不方便,各种命令细节(例如,命令的花括号的输入)常会打断书写的思路;此外,较为笨重的渲染引擎也很难做到“所见即所得”的写作模式,给文本(尤其是数学公式)修改带来了一定不便;相对的,Markdown作为一种“轻量级”的修饰语言,简单的修饰符,加上完备的工具生态,码字的体验更为流畅。自己读书期间进行学术写作时候,采用了先Markdown写作,再进行Latex转换的步骤。这其中的Markdown到Latex的转换可以利用 Pandoc 进行。但转换后的Latex会有很多附带的不必要的代码,尝试几种方案后,我发现利用正则表达式处理这些不必要的代码是最为直接有效的方法。本文将相关脚本代码以及简单使用说明贴出。


利用Kindle阅读网络文章

在前不久闲鱼公布的 2021 年度十大“无用”产品中,电子书名列第3上榜。Kindle 作为墨水屏幕电子书的代表产品,在许多人生活中使用率并不高,常处于“吃灰”的状态。因为其较小的屏幕,以及流式操作逻辑(无法方便进行前后翻页的对比阅读),并不适用于专业书籍文章的阅读。唯一较好的使用场景是娱乐阅读,例如网络小说,文学作品的阅读。所以,Kindle 常常被戏称为”盖泡面神器“。

现在网络时代信息爆炸,在刷手机时候,其实我们常常会接触到各类文章,微信公众号文章,新闻app时事文章,知乎各类新知文章。但细想起来,对于这些手机上刷到的文章,我个人经常只是扫了一眼过去。手机上阅读很难有沉浸感,很难在手机上专注仔细品读文章。后来想到能否将手机上刷到的文章发送到 Kindle 进行阅读,经过我一番调研和实践,找到一个利用 Inspaper 的解决方案,本文记录一下最后的实现方案。