为Hexo博客Yilia主题添加本地站内搜索功能

博客的站内搜索功能一直是一个缺憾,最初使用了Swiftype,虽然效果不是很理想,不过也正常使用了一段时间,然而之后发现使用Swiftype会导致博客标签加载不完全,进而影响正常显示。奈何我基本不懂前端,瞎折腾了很久也没能解决这个问题,最后只得禁用了Swiftype,留下的搜索框成了一个摆设。前段时候发现Hexo博客可以使用本地站内搜索,于是又折腾了一天,然而最终还是没有做出可用的搜索界面来:(本来已经不抱什么希望了,今天偶然看见让 Hexo 博客支持本地站内搜索这篇文章,作者使用的主题也是基于Yilia的,顿时觉得有戏,于是又是一天折腾,终于做出了个像样的站内搜索功能来了~~写篇文章记录下折腾过程。

关于科学与工程

偶尔也写点非技术的文章吧~

我们很多工科学生将来都会成为工程师,而像我本科所学的化学专业则是以培养科学家为己任,那科学与工程是何关系呢?一言以蔽之,工程是科学有选择性的应用,Engineering is the purposeful use of science. 最早听到这句话是大一的时候在看MIT的公开课电路和电子学时,第一集中,Agarwal教授高屋建瓴的分析了这门课程在整个知识体系中的地位。从麦克斯韦方程组出发,引入一些约束条件后,得到了集总元件抽象(LMP),也就是电路理论的基础。在这里,麦克斯韦方程组就是科学,它描述的是自然的运行规律;而电路理论则是工程,它是人类根据需要对麦克斯韦方程组进行了有选择性的应用后得到的理论。所以说,科学是工程的基础,工程是科学的结晶。

在Android Studio中使用Lambda表达式

Lambda表达式是Java 8中的一个重要新特性,使用Lambda表达式可以简化很多代码,比如常见的为一个按键添加点击事件Listener的代码:

1
2
3
4
5
6
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do what you want...
}
});

其中有用的代码很有可能只有一行,其他部分其实都没有实际意义,只是语法需要,创建了一个匿名类而已。但是,如果使用Lambda表达式之后,上述代码就可以简化为:

1
2
3
btn.setOnClickListener(v -> {
// do what you want...
});

Java集合框架

Java中提供了丰富的容器类用于存储数据,这些容器类可分为两大类:Collection和Map,Collection用于保存单个元素,而Map则以键值对的形式进行存储,就像一个小型数据库一样。Collection中又可分为List、Set、Queue三类,其中List是列表,Set是集合,Queue是队列。整个Java集合框架的结构图如下:

最大公约数算法

两个(或更多个)整数的最大公约数(Greatest Common Divisor, GCD)是指能同时整除它们的最大正整数,求解最大公约数最常用的算法是辗转相除法(又称欧几里得算法)及Stein算法,至于直接穷举的暴力算法,因为过于低效,实际中是不会使用的。下面来总结下这两种方法。

最大子序列问题

最大子序列问题是一个经典的算法问题,在”Data Structures and Algorithm Analysis in C”一书第2章中介绍了此问题,并给出了复杂度从O(n^3)至O(n)的4种解法,这里对此问题稍作扩展总结一下。

C标准库学习笔记(1)——time、ctype、stdarg、assert

这一系列文章是对P.J. Plauger所著的《C标准库》(The Standard C Library)一书的学习笔记,此书是关于C标准库的经典著作,讲述了每一个库函数的使用方法和实现细节。C语言标准库是最顶尖程序员的智慧结晶,要深入理解其实现细节自然也是很困难的……这里记录一下阅读这本书的收获,跳过了其中不常用或太复杂的部分(stddef.hfloat.hlimits.herrno.hsetjmp.hsignal.hlocale.hmath.h)。

使用Python实现网站变化监测系统

很多时候我们都有监测某个网站变化的需求,比如是否发布新通知了,是否有新更新了等。之前使用过Chrome的几个插件来实现这个功能,不过用起来都觉得不是很方便,于是就想自己用Python写一个,之后将程序部署在服务器上即可实现24小时自动监测了。

用了几天时间写了个还算可以用的程序出来,可以实现以下功能:

  • 定时去检查网站的某页面(或某几个页面),获取此时发布的信息,并与数据库中的数据对比,如果检测到新发布的信息,则将其加入数据库中,并通过微信公众号进行自动发布;
  • 可以实现关键词过滤功能,检查发布信息标题及内容页是否有指定关键词,如果没有的话忽略此信息;
  • 实现了一个相对比较通用的程序架构,可以很方便的向其中添加新网站。

正则表达式总结

正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是一个字符串,此字符串用于描述、匹配一系列符合某个句法规则的字符串。

正则表达式引擎是一种可以处理正则表达式的软件。通常,引擎是更大的应用程序的一部分。在软件世界,不同的正则表达式引擎并不完全互相兼容
正则表达式引擎缺省是大小写敏感的。

此处总结下常用的正则表达式规则。

|