0%

2023-01-30 更新: NexT主题已经支持相关文章功能 (使用 hexo-related-posts ),更新到最新版本即可,可参考 这里


Hexo的NexT主题展示相关文章和热门文章使用 hexo-related-popular-posts 插件,但hexo-related-popular-posts 默认展示位置是在页面底部,而页面底部本身内容较多,多数人注意不到相关文章。因此,考虑将相关文章展示在侧边栏。

大概五、六年前看过一个很逗的开封话图解趣谈,形象生动。文章结合了北宋时期包公日常对话的题材,很是风趣幽默。 今日与友人谈起想找下原贴发现找不到了,搜到的几个贴子中链接大多已失效。有趣的内容不可负也,这里转载备份一份以飨众人~

今天先聊聊static方法的那些事儿,然后再引出static使用的“极致” util/helper类,说说它们的问题。

static方法什么时候用?

简单说在面向对象的场景下,绝大多数情况都不应使用static方法。这里有一些关于static使用场景的讨论: When should I use static methods?

事情源起于心血来潮把Hexo从v3.9.0升级到了v4.0.0,Hexo本身的升级倒是不难,它由npm管理,改下package.json,运行npm update即可。但之后发现在archives的分页显示有问题……

计算机圈中有些常见被中国人读错的单词,现列举部分如下:

AJAX

/'eɪdʒæks/,不读阿假克斯。

ASCII

/'æski/,不读[ask]。

cache

/kæʃ/,不读[catch]。

有这样的一个interface:

1
2
3
4
public interface Filter
{
    IList<string> Filter(IList<string> responses)
}

在实现它时,如果过滤后没有结果,返回null还是new List()?

一段流水线处理代码

先看下面一段流水线处理的内部方法,即GenerateCandidates(), FilterA()和FilterB()都没有用户输入等边界:

Unity是一个.NET Framework用于依赖注入的容器。依赖注入一般分为三个阶段:Register, Resolve和Dispose。Unity支持三种方式的Register:

使用Unity的InjectionFactory进行依赖注入遇到如下提示:

‘InjectionFactory’ is obsolete: ‘InjectionFactory has been deprecated and will be removed in next release. Please use IUnityContainer.RegisterFactory(…) method instead.

提示InjectionFactory将被淘汰的注入代码:

在代码库里看到不少Task.ContinueWith()的代码,查了下语法,没太理解下面两种写法的区别(借用MSDN的代码):

1
2
3
4
5
6
7
8
public static async Task ContinueWithExample()
{
    // Execute the antecedent.
    Task<DayOfWeek> taskA = DayOfWeekAsync();

    // Execute the continuation when the antecedent finishes.
    await taskA.ContinueWith(antecedent => Console.WriteLine("Today is {0}.", antecedent.Result));
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
public static async Task AwaitExample()
{
    DayOfWeek dayOfWeek = await DayOfWeekAsync();
    Console.WriteLine("Today is {0}.", dayOfWeek);
}

public static async Task<DayOfWeek> DayOfWeekAsync()
{
    Console.WriteLine("Enter DayOfWeekAsync()");
    await Task.Delay(500);
    return DateTime.Today.DayOfWeek;
}

await与ContinueWith的区别

标题有些标题党,但实际上await是continuewith的替代者,是一种更先进和简洁的语法。

AIMD (additive-increase/multiplicative-decrease)是用于TCP拥塞控制的算法。AIMD思想虽然简单,但我认为它非常符合“simple but elegant”的哲学。尤其是在多连接拥塞控制中的公平性分析,还挺巧妙。这里主要探讨AIMD在非TCP场景下的应用,不对其原理进行深度剖析。

Crawler运行一段时间后可能会莫名其妙地停止工作,查看日志发现如下错误:

1
session not created: This version of ChromeDriver only supports Chrome version 76

原因是用selenium创建ChromeDriver时,ChromeDriver与ChromeBrowser的版本不匹配(这玩意儿兼容性看起来不是很好),而此问题总是发生的原因在于ChromeBrowser会自动升级,因此需要手动将ChromeDriver也升级到对应版本。

卤煮火烧是一道地道的北京小吃,如果你爱吃内脏,那它必定是你不能错过的美味; 反之则是吾之蜜糖,彼之砒霜,唯恐避之不及。其实许多北京小吃还是挺好吃的,只是术业有专攻,吃每样小吃得找对店铺,自然得花些功夫。加之街头许多店挂羊头卖狗肉,打着名吃的旗号却做不出那个味儿,大部分人尤其是游客只想尝个鲜,随口一吃就下了结论“这东西真难吃”,殊不知只是没找对地方。而许多景点又有太多所谓小吃一条街,表面看来方便了食客将美食一“街”打尽,实际却砸了招牌,几无回头客。

一行中并排显示两图片,搜索了下,有说两张并排这么写的:

1
2
3
4
<figure class="half">
  <img src="http://xxx.jpg">
  <img src="http://yyy.jpg">
</figure>

试了下,在Hexo中并不好使,估计这个需要额外安装包支持。

想了下解决方案应该很简单,直接使用自带的表格功能实现即可,无需增加额外依赖:

工厂模式是一种常见设计模式,大多数资料会将其分为三种:简单工厂模式(Simple Factory),工厂模式(Factory Method)和抽象工厂模式(Abstract Factory)。按照《HeadFirst Design Pattern》的说法,Simple Factory其实不能称之为一种设计模式,因为它主要思想是把对象创建的功能隔离开来,也是工厂模式思想的基础。本文主要讨论工厂模式和抽象工厂模式的对比及不同应用场景,假设读者对两种模式已有基本了解。

9月中旬休假,选了一下休假目的地,主要以自然景观为主,开始想去稻城亚丁,但看了下景点平均海拔在4700米,想到之前在香格里拉3500米有点轻微高反的情形并考虑到旅途的休闲和舒适性,最终选择了青甘大环线。

记忆中只有儿时看过电视上放映《红楼梦》,尤其在暑期,四大名著循环放映,如果是西游记则百看不遍,如果看到红楼梦就换台,小时眼中的红楼梦只是一个娘了吧叽的纨绔子弟与一群小姐在大观园中每日嬉戏的故事。后来高中时得空看了原著,原著中诗词甚多,又是半文言,加上人物关系繁杂,看到一半终于还是弃了,从此再不愿碰。

卧室荧光吸顶灯是易耗品,自己动手更换启辉器和灯管是常规操作。百度和知乎了半天,发现带有“更换方法详解”之类的文章全是类似软文的屁话,文章写得臭长,关键信息一点没有。换个灯管是个非常简单的事情,不过还是图解下更换流程,供爱动手的小白参考。

stunnel简介

stunnel 是一个开源跨平台进行通信加密的软件。它可以对原生不支持加密通信的服务(如FTP, Telnet等)在上层提供加密功能,而无须修改这些服务的代码。

Selenium简介

Selenium 是一个浏览器自动测试框架,可以通过模拟各种浏览器行为完成各种测试任务。但它能做的远不止这些,一个更实用的功能是作网页内容爬取。

在贝叶斯推断和参数估计等相关文献中常见$P(X|Y)$与$P(X;Y)$两种不同的表示方法,常常令初学者感到困惑:参数$Y$和随机变量$X$到底是什么关系?二者有什么区别?