Category Archives: Programming and Algorithm

A quick hack on Java code formatter

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

XXE attack and mitigation

Recently I’ve got a security violation report from Sonar. It is the XXE attack. This is indeed a scary scenario, with attacker able to access server internal file with ease. The simplest approach is to disable this feature. However in … Continue reading

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

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

PyGTK

本人 Qt 用的比较多。不过最近看到 PyGTK(GTK+ 的 Python 绑定,当然对于 Qt 也有 PyQt)发现这个其实也挺方便。 https://github.com/NoIE/bedit 这里是一个 PyGTK 写的编辑器(看点是带背景图)。东西不是我写的,coding 本身非常一般,只是实现功能所需要的代码量还是比较少的。 再次感叹,GUI 的很多概念和技术都是通用的。 在我看来,Qt 主要的优势还是可移植性。在嵌入式系统中,只要有 frame buffer,或进一步支持全屏 OpenGL (就是说不需要任何窗口系统),就可以完整编译运行 Qt 程序(QGaphicsView 方式,或者直接 Qt Quick 方式)。

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