Category Archives: Programming and Algorithm

Dependency Injection

早先遍历 SOLID 的时候基本是直接略过了 DIP,原因是做 client 的 coding 比重较大,而对于 client 来说依赖的组件基本是固定的,因此没有太多需要 decouple 依赖关系的需求。 最近 library 的 coding 多了些,于是比较倾向于用 dependency injection 来 decouple 依赖关系了。 在比较简单的情况下,assembler 只要一些 glue code 就可以了,没什么必要用复杂的配置文件。 个人的感想是在下面几种情况下 dependency injection 比较简单和有效: 依赖的组件的接口非常简单。一到两个抽象方法且内部保持 stateless 的接口在设计、测试和整合方面都非常便利。 依赖的是常用的功能组件。比如 logging 或是简单 http client 往往会被数个依赖库使用,dependency … Continue reading

Posted in Computer and Internet, Programming and Algorithm | Tagged , | Leave a comment

AIDL 与 ProGuard

Android 可以用  AIDL 做 IPC。程序的发布版本一般会使用 ProGuard 进行混淆。 值得注意的是如果有一些共享的 Java 类型 用于不同程序之间 AIDL 通信,需要在 ProGuard 的配置中将这些类型排除在混淆操作外。

Posted in Computer and Internet, Programming and Algorithm | Tagged , | Leave a comment

The Architecture of Open Source Applications

The Architecture of Open Source Applications 几十篇各位开发者对自己维护的开源软件的架构的介绍。主要是客户端软件,其中相当一部分赫赫有名,应用广泛。 架构的描述并不十分详细,但信息密度很高,很适合用来拓宽眼界。

Posted in Computer and Internet, Programming and Algorithm | Tagged , | 1 Comment

Haskell 教程介绍

Learn You a Haskell 和 Real World Haskell 都有在线电子版。两书的互补性很好。 Learn You a Haskell 配插图风趣幽默,容易阅读;Real World Haskell 有丰富的示例和习题,易于上手。个人建议初学者可以先从 LYAH 入门,看到有点不容易理解的章节(比如 functor 和 monad)的时候,换到 RWH,读几个例子写几个程序(消化下 map 和 fold,尝试下 point free style,等),感受下 Haskell 的不同之处,然后再切换回来,loop and advance。 有一点需要注意下,RWH 按照 Haskell 98 标准,用的 ghc 也比较旧,可能会有少量内容和新的 … Continue reading

Posted in Computer and Internet, Programming and Algorithm | Tagged | Leave a comment

Haskell程序,按正则表达式过滤编译日志

程序目的很简单,只是用来过滤 gcc 的输出。当然因为正则表达式是通用的,所以也可以拿来干其它事情。 我知道 awk 最简单,也有更平台无关的 python 实现。于是其实只是想写个 haskell 玩罢了。 https://github.com/weidongxu84/haskell_study/blob/master/GccWarningFilter/GccWarningFilter.hs

Posted in Computer and Internet, Programming and Algorithm | Tagged , | Leave a comment

缓存友好的数据结构

就是 cache friendly data structure。不知道如此中译是否合适了。 之前在 cJSON 链表的缺陷 文中提到过双向链表很可能是 cJSON 的 array 添加 item 所存在的效率问题的原因。 这次在解 POJ 的时候也遇到了同样的问题。于是就顺便做下代码示例。 题目是 POJ3253,Fence Repair。简单而言解法利用 Huffman 编码的思想。 看如下两个实现: 我首先写出的是 std::vector 的实现,提交后顺利通过。注意41行至52行的在已排序数列中插入元素的算法用二分查找会更快,但目前也不影响AC。 然后,注意到程序中完全没有使用数列的随机存取功能(上面只使用了线性搜索而非二分搜索),于是打算改用列表实现来节省 std::vector 的 erase 和 insert 造成的内存复制的额外开销。将 std::vector 换成 std::list,代码对应有少量修改。接下来出乎意料的是,提交后直接超时。 于是在本地简单用随机数据测试,20000大小的数据,列表实现要比数组实现慢近10倍,几乎全部的CPU时间都花在46行的 merge 函数上。内存访问对性能的影响极其显著。 关于缓存友好这个问题本身,个人并没有看到特别专门的论述。 … Continue reading

Posted in Computer and Internet, Programming and Algorithm | Tagged , , | Leave a comment

Introduction to C11

Introduction to C11 by Tom Plum

Posted in Computer and Internet, Programming and Algorithm | Tagged | Leave a comment