设计模式简介

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

Read More

Search with ripgrep

ripgrep is a line-oriented search tool that recursively searches your current directory for a regex pattern while respecting your gitignore rules. ripgrep has first class support on Windows, macOS and Linux, with binary downloads available for every release. ripgrep is similar to other popular search tools like The Silver Searcher, ack and grep.

Is it really faster than everything else?

Generally, yes. A large number of benchmarks with detailed analysis for each is available on my blog.

Summarizing, ripgrep is fast because:

  • It is built on top of Rust's regex engine uses finite automata, SIMD and aggressive literal optimizations to make searching very fast.
  • Rust's regex library maintains performance with full Unicode support by building UTF-8 decoding directly into its deterministic finite automaton engine.
  • It supports searching with either memory maps or by searching incrementally with an intermediate buffer. The former is better for single files and the latter is better for large directories. ripgrep chooses the best searching strategy for you automatically.
  • Applies your ignore patterns in .gitignore files using a RegexSet. That means a single file path can be matched against multiple glob patterns simultaneously.
  • It uses a lock-free parallel recursive directory iterator, courtesy of crossbeam and ignore.

Read More

Add Emacs elpa configuration

ELPA mirror

Emacs China镜像

ELPA 镜像地址
GNU ELPA http://elpa.emacs-china.org/gnu/
MELPA http://elpa.emacs-china.org/melpa/
MELPA Stable http://elpa.emacs-china.org/melpa-stable/
Marmalade http://elpa.emacs-china.org/marmalade/
Org http://elpa.emacs-china.org/org/
Sunrise Commander ELPA http://elpa.emacs-china.org/sunrise-commander/
user42 ELPA http://elpa.emacs-china.org/user42/

如果需要 HTTPS,请将镜像地址中的 http 改成 https

清华镜像

ELPA 镜像地址
GNU ELPA http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/
MELPA http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/
MELPA Stable http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa-stable/
Marmalade http://mirrors.tuna.tsinghua.edu.cn/elpa/marmalade/
Org http://mirrors.tuna.tsinghua.edu.cn/elpa/org/

可以从 d12frosted/elpa-mirror 下载包镜像到本地使用。

Read More

Travis CI 构建时自动更新 NexT 主题源码

在 {% post_link autodeploy-hexo-blog-with-travisci 使用 Travis CI 自动部署 Hexo 博客 %} 后,每次新增文章或者修改文章就会触发自动构建。

加入使用的主题代码更新,还需要手动合并后提交,如我的博客使用的是 NexT 主题,每天都有代码更新,所以还是想办法在构建的时候自动更新主题代码。

初步想法是在下载的博客代码后,生成博客之前,再下载一次博客的最新代码即可,Travis CI 构建过程有很多阶段,选择其中一个阶段即可。

  1. OPTIONAL Install apt addons
  2. OPTIONAL Install cache components
  3. before_install
  4. install
  5. before_script
  6. script
  7. OPTIONAL before_cache (for cleaning up cache)
  8. after_success or after_failure
  9. OPTIONAL before_deploy
  10. OPTIONAL deploy
  11. OPTIONAL after_deploy
  12. after_script

Read More

使用 gulp 压缩 hexo 博客资源

使用 hexo generate 命令后在 public 文件夹下面生成 html、css、js 等源文件,里面含有大量的空白,而且博客中还有大量的图片占据了很大的空间。

Automate and enhance your workflow. gulp is a toolkit for automating painful or time-consuming tasks in your development workflow, so you can stop messing around and build something.

gulp 用自动化构建工具增强你的工作流程!

我们可以通过一些 gulp 插件实现对html、css、js、image等静态资源的高效压缩,通过压缩这些静态资源,可以减少请求的数据量从而达到优化博客访问速度的目的。

Read More

使用 Travis CI 自动部署 Hexo 博客

CI 是 Continuous Integration 的缩写,持续集成之意。

持续集成是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

Travis CI 是目前新兴的开源持续集成构建项目,用来构建托管在GitHub上的代码。它提供了多种编程语言的支持,包括Ruby,JavaScript,Java,Scala,PHP,Haskell和Erlang在内的多种语言。许多知名的开源项目使用它来在每次提交的时候进行构建测试,比如Ruby on Rails,Ruby和Node.js。

Travis CI是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在GitHub托管的代码。这个软件的代码同时也是开源的,可以在GitHub上下载到,尽管开发者当前并不推荐在闭源项目中单独使用它。

工作原理

当我们每次进行push等动作时,Travis CI 会自动检测我们的提交,然后根据配置文件,搭建虚拟主机来运行测试,构建等指令。在这里,就是运行 hexo deploy --generate 等命令来自动生成、部署静态网页。

Read More