An i18n Solution for Jekyll Site by jekyll-polyglot
May 08, 2016

Abstract

This website has been moved to the site below for i18n supporting:

https://scozv.github.io/blog/

网站已经迁移到如下地址,以便支持多语言(i18n):

https://scozv.github.io/blog/zh

Read more ...


A Low Coupling Architecture of the Web Solution with Continuous Integration
May 05, 2016

摘要

本文将要解释,我目前以及未来在项目中,将会一直实践的两个概念:低耦合与持续集成。

本文还没有完全地写完。

This article will discuss two core ideas for a Architecture of the Web Solution, that is Low Coupling and Continuous Integration.

This article is still on the writing.

Read more ...


Fully Migrating from Bitbucket Cloud Issue System to JIRA Server
Apr 05, 2016

Abstract

This post will give a full migration guide from Bitbucket Cloud Issue to JIRA Server, including:

  • Import legacy Bitbucket Cloud Issue into JIRA Server,
  • Build Dual-direction connection between Bitbucket Cloud and JIRA Server,
  • Upgrade the issue ticket number in git commits history, to archive the FULL migration.

This post will NOT cover the topics below:

  • Why I choose JIRA instead of other issue system,
  • Why I choose Bitbucket Cloud instead of other git server,
  • Why I choose Ubuntu 14.04 Server instead of other OS.
Read more ...


How Do We Apply the Hyde Theme to Existing Jekyll Site?
Mar 18, 2016

Abstract

This article will describe the process of applying Hyde theme on my existing Jekyll Bootstrap site. And this approach can be used for applying any theme of Jekyll. The main ideas of integrating the 3rd Jekyll Theme are:

  • knowing the basic structure of Jekyll site,
  • knowing the basic workflow of rendering HTML from Jekyll scripts,
  • comparing the code differences between Hyde and your site,
  • replacing code and test.
Read more ...


A Version Controlled Project Workflow for Requirement, Coding and Continuous Integration
Sep 04, 2015

摘要

开发团队中,使用Word或者PDF文档,或者邮件来描述需求,可能导致同样内容的文档出现在不同成员的电脑上,进而可能导致 版本不一致。另外两次版本的需求更改,很难进行差异比较(Word和PDF文档不是简单的文本文件)。 一种解决方案是,使用文本文件(比如Markdown或者LaTeX)来描述需求,并将所有的文件纳入源代码管理。 所以,本文描述的这个工作流,将所有的文档纳入源代码管理。同时还将提到:

  • 使用Issue来跟踪需求、变更和问题解决
  • 产品、测试和开发等不同角色如何便捷的使用Bitbucket来提出并跟踪任务
Read more ...


Introduction of Building Documents with LaTeX
Aug 12, 2015

摘要

TeX家族是一个专业的排版系统。本文简要地介绍了TeX家族的常见成员,并整理出了LaTeX入门使用过程中会遇到的一些问题, 同时,将演示LaTeX在网页中的集成。最后在附录部分,给出了样式模板的参考代码。

This artical will give brief introduction for TeX and LaTeX, then discuss a few issues during using LaTeX and how to display LaTeX eqation on web page. Finally, a LaTeX template will be attached in Appendix.

Read more ...


Understand Monads in C#
Jun 20, 2014

摘要

本文主要对几篇讨论Monad的文献进行综述,文中的大部分代码都来自参考文献(我会指明参考来源)。本文有几处地方提出了几个思考题,这些思考题也来自参考文献,建议先尝试写写这些思考题,再去阅读参考文献。这一份综述尝试抛开函数编程的背景,去看看我们平时已经在使用但却没有留意的一些Monad。文章主要涉及到C#这门语言,但是不同的语言背景并不会有太多的影响。

我推荐阅读参考文献中的英文原文。虽然中文意合英文形合1,但是本文的综述将使用中文,除了部分程序代码,和一些术语、人名 that 我不打算翻译的。

本文对Haskell和.NET中异步Task的理解不够,如果需要了解Task这个Monad的话,请参考Stephen Toub的文章2。另外,本文对Monad的综述都建立在强类型系统的基础上,关于JavaScript中的Monad,请观看Douglas Crockford的演讲。Douglas说“假如你理解了Monad,你就失去了用语言来解释它的能力”3

Read more ...


How to Make Code of Algo.js Run in Node.js as in Browser
Dec 21, 2013

I have planed to run unit test by reading file as the input for algorithm like graph algorithm for a few months (see issue #18). However, it is not easy or effective to read local file from browser, even using FileReader in JavaScript. An alternative way is that we can read file using the file system of Node.js, where we write JavaScript code as in browser.

So the top proiority is making codes run appropriately in Node.js as they run in browser, including the codes of unit tests. I am going to tell the details of this process today:

  • Making codes of algorithm work in Node.js, and
  • Making codes of unit tests work in Node.js, and
  • Introduce CI into my project.

本文描述了我让代码在浏览器和Node.js两边都能运行的过程,略属娱乐。因为就项目 Algo.js 而言,我认为,重点在算法( Algorithm )。至于引入大文本输入测试(参见 issue #18 ),是为了保证算法的正确和高效,以及今后的重构,当然这也很重要。引入持续集成,是尽可能想让一切都是自动化。

Read more ...


How to Write Iterative Tarjan SCC Algorithm, Part II
Nov 23, 2013

In previous part, we talked about iterative DFS, where we use a stack named frontier to keep the visiting order. This time, we are going to look at the iterative topological sort and Karasoju SCC algorithm.

The key idea of my iterative topological sort is use another stack named head to track when we finish visiting all descendant vertex of the head vertex.

上一次,我们提到了迭代深度优先查找(DFS)——用一个叫frontier的栈来保持访问顺序。今天,我们将看到迭代拓扑排序以及Karasoju强连通算法。

今天的重点在于,我们会增加一个栈,名为head。当父节点的所有后代都访问过之后,应该满足head.peek() === frontier.peek()。

Read more ...


How to Write Iterative Tarjan SCC Algorithm, Part I
Nov 10, 2013

During the work on Algo.js, I found there is a limitation on recursive stack size of JavaScript. This series posts describe the way to convert recursive Tarjan SCC algorithm to iterative one, containing:

  • Part I: Iterative BFS and DFS algorithm on graph;
  • Part II: Iterative topological sort and Kosaraju SCC algorithm on graph;
  • Part III: Iterative Tarjan SCC algorithm on graph.

上个月我完成了迭代版的Tarjan强连通算法(参见 Algo.js ) 。这一个系列的文章将解释这一过程和相关代码——包括迭代图遍历、迭代拓扑排序和Kosaraju强连通算法以及最后的迭代Tarjan算法三部分。本文先讲迭代图遍历。

Read more ...


How to Update Heap in Dijkstra Shortest Path Algorithm
Nov 03, 2013

When we use a heap to improve the runing time of Dijkstra shortest path algorithm from to , we may find that it is not easy to keep the heap in heap order just using insert() or delete(). This post describes the update of that heap.

I suppose that you might:

  • know how to wirte Dijkstra algorithm with running time, and
  • know how to use heap.

为了将Dijkstra最短路径算法的时间复杂度从 降低到 ,我们可以使用 heap 。不过迭代中的每一次更新heap的过程,我们需要一些技巧来保持heap的有序性。本文就会指出该技巧,并且解释我在算法代码中的一些变动

Read more ...