开发个人博客除了写写 HTML/CSS/Javascript ,也是会遇到不少算法问题的。下面是我对一些问题的思考,以及相关的方案:
1. 热门度 ranking
即如何确定热门文章的排序。用于度量文章热门程度的主要有两项指标:点击数和评论数。我看到不少博客程序的办法是,有两个列表,一个是按点击量的 top 10 ,一个是按评论数的 top 10 。或者有些网站是只有评论数 top 1... 阅读全文
这个脚本可以将当前页面上已加载的所有新鲜事置为“已读”。
注意这个跟人人网自带的最下面的“全部标记为已读”是不同的。“全部标记为已读”是将你的全部新鲜事——不管是否已经在当前页面加载,标记为已读。我这个是只清除当前已加载的新鲜事。
人人-全部已读
用法 将上面的链接拖到书签栏。然后在人人网的页面点击书签栏的按钮,会提示你是否确定。如果确定,最后会显示已清除的新鲜事的数量。
... 阅读全文
注意这个跟人人网自带的最下面的“全部标记为已读”是不同的。“全部标记为已读”是将你的全部新鲜事——不管是否已经在当前页面加载,标记为已读。我这个是只清除当前已加载的新鲜事。
人人-全部已读
用法 将上面的链接拖到书签栏。然后在人人网的页面点击书签栏的按钮,会提示你是否确定。如果确定,最后会显示已清除的新鲜事的数量。
... 阅读全文
Google Real Link
觉得 Google 搜索的重定向很烦?这个脚本可以让 Google 的搜索结果不包含重定向,点击链接直接到对应网站。
豆沙绿#C7EDCC
我在之前的介绍 awesome 的文章提到,浏览器的背景太白,感觉很刺眼。这个脚本可以把所有网页的白色部分改成豆沙绿。
t.co Bypasser[modified]
让 twitter 上的短地址不再经过 t.co 。
... 阅读全文
树形 dp 就是在一颗树上做 dp ,其基本思想是由子节点的信息推出父节点的信息。
由于树都是一般树,可能不只二叉,所以要用到一般树的“左儿子右兄弟”表示法(详见代码中的 first_child 和 next_sibling)。
hdu 1520 Anniversary party 最基本的树形 dp 。题目大意是,有一群人之间有上下级关系,在一个 party 中,有直接的上下级... 阅读全文
由于树都是一般树,可能不只二叉,所以要用到一般树的“左儿子右兄弟”表示法(详见代码中的 first_child 和 next_sibling)。
hdu 1520 Anniversary party 最基本的树形 dp 。题目大意是,有一群人之间有上下级关系,在一个 party 中,有直接的上下级... 阅读全文
最近遇到的一个问题:程序中有一个文件名,需要把这个文件名放在 shell 中执行,但文件名中可能包含特殊字符,所以需要转义。
比如,如果文件名是:
[SumiSora&CASO&HKG][Tears_to_Tiara][02][GB].rmvb 这个文件名肯定不能直接放到 bash 中的,因为“&”和 [ 、] 等都是 bash 的特殊字符。
bash 的自动补全默认采用反斜... 阅读全文
比如,如果文件名是:
[SumiSora&CASO&HKG][Tears_to_Tiara][02][GB].rmvb 这个文件名肯定不能直接放到 bash 中的,因为“&”和 [ 、] 等都是 bash 的特殊字符。
bash 的自动补全默认采用反斜... 阅读全文
最短增广路算法在黑书上有介绍,其时间复杂度跟 Edmonds-Karp 是一样的 O(VE2) ,而且编程还复杂些。那为什么我还要介绍这个算法呢?因为这个算法引入了“距离标号”的概念,是后面的预推流算法的基础。
距离标号 节点 i 的距离标号 d[i] 首先被初始化成 i 到汇 sink 的实际距离,即最短路径的长度。
然后,在增广的时候要遵循一条规则:增广路上的每一条弧,其起始... 阅读全文
距离标号 节点 i 的距离标号 d[i] 首先被初始化成 i 到汇 sink 的实际距离,即最短路径的长度。
然后,在增广的时候要遵循一条规则:增广路上的每一条弧,其起始... 阅读全文
网络流问题定义什么的我就不介绍了,网上到处都找得到。
我第一次听说“最大流有 4 种做法”,大约是在这篇帖子里:http://tieba.baidu.com/p/1359675218 ,现在知道最大流的求法不止 4 种。
寻找增广路派:
原始的 Ford-Fulkerson 算法,用 DFS 寻找增广路 Edmonds-Karp 算法,用 BFS 寻找增广路 最短增广路算法,... 阅读全文
我第一次听说“最大流有 4 种做法”,大约是在这篇帖子里:http://tieba.baidu.com/p/1359675218 ,现在知道最大流的求法不止 4 种。
寻找增广路派:
原始的 Ford-Fulkerson 算法,用 DFS 寻找增广路 Edmonds-Karp 算法,用 BFS 寻找增广路 最短增广路算法,... 阅读全文
先来张图:
我以前用的是 wmii ,但后来转到 awesome ,主要是因为 awesome 的脚本化能力很强大。
使用 linux 的过程中我们经常面对的东西有两样:terminal 和浏览器。前者漆黑,而后者很白。在两者之前来回切换造成的后果是让你的眼睛低亮度的环境还没适应过来,一下子就面对高亮度,眼睛很容易疲劳。
所以我首先想到的解决方法是:为不同的程序设置不同的... 阅读全文
我以前用的是 wmii ,但后来转到 awesome ,主要是因为 awesome 的脚本化能力很强大。
使用 linux 的过程中我们经常面对的东西有两样:terminal 和浏览器。前者漆黑,而后者很白。在两者之前来回切换造成的后果是让你的眼睛低亮度的环境还没适应过来,一下子就面对高亮度,眼睛很容易疲劳。
所以我首先想到的解决方法是:为不同的程序设置不同的... 阅读全文
最近做右边“热门文章”的彩虹表效果,为了让它在 IE 上能优雅降级,研究了下针对 IE 的 CSS Hacks :
selector{ property:value; /* all browsers */ property:value\9; /* IE 6 7 8 9 */ property:value\0; /* IE 8 9 Opera */ pro... 阅读全文
selector{ property:value; /* all browsers */ property:value\9; /* IE 6 7 8 9 */ property:value\0; /* IE 8 9 Opera */ pro... 阅读全文
poj 2778 DNA Sequence 题目大意:给你一些疾病 DNA 片段,求长度为 n 的 DNA 串中不包含这些片段的串的数量。
一开始不知道怎么做,直到看到网上的一句话,“长度为 n 的字符串可以由长度为 n - 1 的字符串后面加一个字符构成”,由此大彻大悟,原来这就是传说中的自动机 dp !
举个例子:{AG, CG} ,首先构造 AC 自动机:
... 阅读全文
一开始不知道怎么做,直到看到网上的一句话,“长度为 n 的字符串可以由长度为 n - 1 的字符串后面加一个字符构成”,由此大彻大悟,原来这就是传说中的自动机 dp !
举个例子:{AG, CG} ,首先构造 AC 自动机:
... 阅读全文
终于开始看字符串算法了。。。字典树(trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 trie 的 key 只能是字符串。
trie 强大之处就在它的时间复杂度。它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 trie 中保存了多少个元素无关。Hash 表号称是 O(1... 阅读全文
trie 强大之处就在它的时间复杂度。它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 trie 中保存了多少个元素无关。Hash 表号称是 O(1... 阅读全文
并查集(Union-find set)用来表示一些不相交集合(Disjoint set),并且可以高效地实现以下两种操作:
查询:查询某个元素在哪个集合里 合并:合并两个集合 实现一般需要一个 father 数组,将集合实现成树,树的根就是这个集合的代表元。合并两个集合的时候,将其中一个的根节点的 father 设为另外一个。
并查集的关键就在于两个优化:
... 阅读全文
查询:查询某个元素在哪个集合里 合并:合并两个集合 实现一般需要一个 father 数组,将集合实现成树,树的根就是这个集合的代表元。合并两个集合的时候,将其中一个的根节点的 father 设为另外一个。
并查集的关键就在于两个优化:
... 阅读全文
最近遇到这样一个问题:生成 1 - N 的随机排列。这是一个比较常见的问题,生成一个有限集合的随机排列的时候就要用到。一种 naive 的算法是:
for i = 1..n do r = 1..n 之间的随机数 while (r 已经被选择) do r = 1..n 之间的随机数 end ar[i] = r 将 r 标记为已被选择 end 这... 阅读全文
for i = 1..n do r = 1..n 之间的随机数 while (r 已经被选择) do r = 1..n 之间的随机数 end ar[i] = r 将 r 标记为已被选择 end 这... 阅读全文
线段树(Segment Trees)主要用来解决跟区间有关的问题。比如,给你一个数组,要求支持以下操作:
更新:将某个区间的所有数加上一个数 查询:查询某个区间的所有数的和 普通的做法时间复杂度为 O(n) ,每次需要遍历区间内所有的数,但用线段树可以做到 O(log n) 。
其基本思想就是把区间信息先预处理出来。如果根节点保存 [l, r) 的信息(可以是和... 阅读全文
更新:将某个区间的所有数加上一个数 查询:查询某个区间的所有数的和 普通的做法时间复杂度为 O(n) ,每次需要遍历区间内所有的数,但用线段树可以做到 O(log n) 。
其基本思想就是把区间信息先预处理出来。如果根节点保存 [l, r) 的信息(可以是和... 阅读全文
树状数组(Binary Indexed Trees)适用于单点更新、区间查询的问题,更新和查询的复杂度都是 O(log n) 。可以求前缀和(sum(a[1]..a[n])),用两个前缀和相减就可以求任意区间和。更新的时候只能是对某位的一个 delta ,而不是设置某一位。经过变形可以解决区间更新、单点查询的问题。
使用的时候需要注意,树状数组的下标必须从 1 开始,下标 0 是错误的... 阅读全文
使用的时候需要注意,树状数组的下标必须从 1 开始,下标 0 是错误的... 阅读全文
最近继续补算法……学习一下单调队列。据说 POJ 2823 是道经典题目。
给出一个数组和一个固定长度的窗口,这个窗口从左滑到右,要求依次输出每个区间的最大值。
用单调队列求解:滑动窗口每往右边移动一步,就有一个元素出队,另一个元素进队。考虑队列中有两个元素依次是 a b(b 在 a 后面),如果 b > a ,那么 a 在任何时刻都不可能作为最大值输出,所以在这种情况下就可以... 阅读全文
给出一个数组和一个固定长度的窗口,这个窗口从左滑到右,要求依次输出每个区间的最大值。
用单调队列求解:滑动窗口每往右边移动一步,就有一个元素出队,另一个元素进队。考虑队列中有两个元素依次是 a b(b 在 a 后面),如果 b > a ,那么 a 在任何时刻都不可能作为最大值输出,所以在这种情况下就可以... 阅读全文
最长上升子序列(Longest increasing subsequence, LIS)是个经典的动态规划问题,用动态规划可以在 \(O(n^2)\) 的时间内解决。
问题描述参见 POJ 2533 。
但还有另外一种利用决策的单调性的算法,可以在 \(O(n\log n)\) 的时间解决。
设 min[i] 为长度为 i 的最长子序列的最后一个元素最小可以是多少。每次... 阅读全文
问题描述参见 POJ 2533 。
但还有另外一种利用决策的单调性的算法,可以在 \(O(n\log n)\) 的时间解决。
设 min[i] 为长度为 i 的最长子序列的最后一个元素最小可以是多少。每次... 阅读全文
ffmpeg 是个跨平台的全套视频音频解决方案,可以录屏、录音、转码。
为了能在 Linux 中录音,必须先安装 PulseAudio 。
启动 PulseAudio :
pulseaudio --start 退出 PulseAudio :
pulseaudio --kill 然后就可以在 ffmpeg 中使用 pulse 这个音频设备了... 阅读全文
为了能在 Linux 中录音,必须先安装 PulseAudio 。
启动 PulseAudio :
pulseaudio --start 退出 PulseAudio :
pulseaudio --kill 然后就可以在 ffmpeg 中使用 pulse 这个音频设备了... 阅读全文
在 Linux 中,你是如何复制粘贴的呢?
是不是也像在 Windows 中一样:选择一段文本 -> 右键 -> Copy -> 切到另一个程序 -> 右键 -> Paste ?
接触 Linux 这么多年来,我一直都是这么干的——偶尔也会有“如果像 Windows 一样可以 Ctrl-C Ctrl-V 就更好了”这种想法——Windows 的惯性思维让我中毒太深。
我今天才... 阅读全文
是不是也像在 Windows 中一样:选择一段文本 -> 右键 -> Copy -> 切到另一个程序 -> 右键 -> Paste ?
接触 Linux 这么多年来,我一直都是这么干的——偶尔也会有“如果像 Windows 一样可以 Ctrl-C Ctrl-V 就更好了”这种想法——Windows 的惯性思维让我中毒太深。
我今天才... 阅读全文
在一般情况下,Lua 的随机数可以工作得很好。但我最近做的一个程序是这样的:程序会多次启动,每次随机选择一条记录。代码:
math.randomseed(os.time()) x = math.random() 结果是:x 与时间呈完全的正相关。比如我隔一秒再运行这个程序,x 正好比上一次大 1 。这样的随机数显然并不能用。
在 lua users wiki 上找到了关于这个问... 阅读全文
math.randomseed(os.time()) x = math.random() 结果是:x 与时间呈完全的正相关。比如我隔一秒再运行这个程序,x 正好比上一次大 1 。这样的随机数显然并不能用。
在 lua users wiki 上找到了关于这个问... 阅读全文
有时候我们可能需要在非主线程中使用 wxWidgets 创建 GUI :由主线程启动 GUI 线程,再在 GUI 线程中创建窗口,然后主线程等待一些事件的发生,当事件发生时由主线程通知更新 GUI 。
但对 wxWidgets 来说还需要一些额外的技巧:因为 wxWidgets 默认使用 IMPLEMENT_APP 宏来生成 main 函数,并在 main 函数里进入 Mainloop... 阅读全文
但对 wxWidgets 来说还需要一些额外的技巧:因为 wxWidgets 默认使用 IMPLEMENT_APP 宏来生成 main 函数,并在 main 函数里进入 Mainloop... 阅读全文
有数量不限的面值为 100 ,50 ,20 ,10 ,5 ,2 ,1 元的纸币,问要组成 N(N <= 10^6)共有多少种组合方式?
题目来源:
http://www.cnblogs.com/alexyang8/archive/2011/10/15/2212850.html http://hi.baidu.com/lennydou/blog/item/b848b48270d86... 阅读全文
题目来源:
http://www.cnblogs.com/alexyang8/archive/2011/10/15/2212850.html http://hi.baidu.com/lennydou/blog/item/b848b48270d86... 阅读全文
Python 的 C 模块中比较容易遇到的问题就是多线程问题。考虑如下场景:
在 Python 中开了两个线程,其中一个线程调用了 C 模块,然后 C 模块中有 blocking 操作(比如 scanf)……
造成的后果是:整个 Python 解释器一直卡在 C 模块的 blocking 操作中,另一个线程始终得不到执行。当然这些问题就不得不牵扯到 Python 的伪线程模型,... 阅读全文
在 Python 中开了两个线程,其中一个线程调用了 C 模块,然后 C 模块中有 blocking 操作(比如 scanf)……
造成的后果是:整个 Python 解释器一直卡在 C 模块的 blocking 操作中,另一个线程始终得不到执行。当然这些问题就不得不牵扯到 Python 的伪线程模型,... 阅读全文
C++ 的 vector 是有多蛋疼啊!比如现在有一个 vector<int> ,我要删除所有值为 0 的元素。
一种 naive 的想法是:
vector<int>::iterator it = ar.begin(); for (; it != ar.end(); it++) { if (*it == 0) { ar.erase(it); } } ... 阅读全文
一种 naive 的想法是:
vector<int>::iterator it = ar.begin(); for (; it != ar.end(); it++) { if (*it == 0) { ar.erase(it); } } ... 阅读全文
Google 已经完全不收录 co.cc 域名了。我还是想让我的博客可以被搜索到的,所以去买了个 .info 域名。理论上,以后 .info 域名应该不会被 block 吧, 不然月光博客等一系列博客都会被 block 。我这叫跟着月光博客走,肯定有肉吃。
本博客现迁移到:
http://blog.henix.info/
旧地址 http://www.henix-blog.... 阅读全文
本博客现迁移到:
http://blog.henix.info/
旧地址 http://www.henix-blog.... 阅读全文
最近需要在 Lua 中将 stdout 设为二进制模式,因为要将 png 图像的内容输出至标准输出。实际上,这个问题在 C 语言中就存在,而且只有 Windows 下才有这么蛋疼的问题,Linux 中根本就不区分所谓“文本模式”和“二进制模式”,程序里输出什么实际上就是什么。而 Windows 中,默认以文本模式打开 stdout 和 stdin ,输出一个'\n'(0x0A),但最终得到的是... 阅读全文
是时候分享一下这些年来一直激励着我的名言警句了:) 。
First make it run, then make it right, then make it fast.
先要让程序跑起来,然后求正确,然后求快。 -- Unix 设计哲学 当我不知道该做什么、或者是掉进一味追求性能的陷阱的时候,我就想起这句话,它总能给我正确的指引。
当你试图解释一... 阅读全文
First make it run, then make it right, then make it fast.
先要让程序跑起来,然后求正确,然后求快。 -- Unix 设计哲学 当我不知道该做什么、或者是掉进一味追求性能的陷阱的时候,我就想起这句话,它总能给我正确的指引。
当你试图解释一... 阅读全文
想实现这么一个功能:
写 html 的时候只需写:
<h2>foo</h2> <h3>foo foo</h3> <h3>foo bar</h3> <h2>bar</h2> 但出来的效果是:
1 foo 1.1 foo foo 1.2 foo bar 2 bar 虽然,用 CSS 的 content / counter ... 阅读全文
写 html 的时候只需写:
<h2>foo</h2> <h3>foo foo</h3> <h3>foo bar</h3> <h2>bar</h2> 但出来的效果是:
1 foo 1.1 foo foo 1.2 foo bar 2 bar 虽然,用 CSS 的 content / counter ... 阅读全文
最近恶补算法中……
最大子段和问题:若有数组 a[n],每个元素是一个整数(可正可负),求子数组 a[s:t],使得 \(\sum_{i=s}^t a[i]\) 最大。
解法:动态规划。设 maxf[i] 为 i 之前,且包含 a[i] 的所有子数组的最大和,则有状态转移方程:
maxf[i] = maxf[i-1] > 0 ? maxf[i-1] + a[i] : a[i]... 阅读全文
最大子段和问题:若有数组 a[n],每个元素是一个整数(可正可负),求子数组 a[s:t],使得 \(\sum_{i=s}^t a[i]\) 最大。
解法:动态规划。设 maxf[i] 为 i 之前,且包含 a[i] 的所有子数组的最大和,则有状态转移方程:
maxf[i] = maxf[i-1] > 0 ? maxf[i-1] + a[i] : a[i]... 阅读全文
最近读《多核计算与程序设计》,其中提到了伪共享问题。
伪共享(false sharing)是多核编程中特有的问题。而且牵扯到 Cache ……什么东西一牵扯到 Cache 就变得异常复杂。
我们知道 CPU Cache 是按行进行的,位置相近的内存会被放入同一个 Cache 行,这被称为程序的局部性(RAM Locality)。但是,如果多个 CPU 访问的内存单元距离很近,以至于... 阅读全文
伪共享(false sharing)是多核编程中特有的问题。而且牵扯到 Cache ……什么东西一牵扯到 Cache 就变得异常复杂。
我们知道 CPU Cache 是按行进行的,位置相近的内存会被放入同一个 Cache 行,这被称为程序的局部性(RAM Locality)。但是,如果多个 CPU 访问的内存单元距离很近,以至于... 阅读全文
最近读到冯·诺依曼的《Theory of Self-Reproducing Automata》的中译本,被自复制自动机理论深深吸引了!
生命是什么?这本书让我对生命有了新的认识。
热力学第二定律是宇宙的死亡法则:系统的熵总是趋于增加,系统总是由有序趋向无序,由有形趋向混沌,最后终结于热寂。宇宙万物都逃不过这条法则,唯有生命例外。通过与外界交换能量,生命可以保持内在的有序。只有生命... 阅读全文
生命是什么?这本书让我对生命有了新的认识。
热力学第二定律是宇宙的死亡法则:系统的熵总是趋于增加,系统总是由有序趋向无序,由有形趋向混沌,最后终结于热寂。宇宙万物都逃不过这条法则,唯有生命例外。通过与外界交换能量,生命可以保持内在的有序。只有生命... 阅读全文
最近搞 redis ,看到 Tim Yang 的文章:《Redis 的几个认识误区》,其中提到了使用 hash 而不是 key/value 方式可以节省内存,还举了 antirez 的这篇《Full of keys》作为例证。antirez 的测试表明,一千万条记录,在作为 key/value 插入时会占用 1.7 GB 内存,而作为 hash 插入时只占用 300 MB 。
所以我自己... 阅读全文
所以我自己... 阅读全文
我们经常喜欢在 bash 中定义 alias 或者写一些小脚本,以自动化某些常见任务。但这就有一个问题:哪些命令最需要定义成 alias?
考虑两个因素:
命令使用的频率 命令的长度 显然,一条命令被使用的次数越多,长度越长(需要输入的内容越多),这个命令越有必要定义一个更短的“快捷方式”,以减少击键次数。
比如,我的 .bash_history 中,“startx”... 阅读全文
考虑两个因素:
命令使用的频率 命令的长度 显然,一条命令被使用的次数越多,长度越长(需要输入的内容越多),这个命令越有必要定义一个更短的“快捷方式”,以减少击键次数。
比如,我的 .bash_history 中,“startx”... 阅读全文
slt(Simple Lua Template)是一个 Lua 模板引擎。模板引擎类似 printf 的格式化字符串,根据一个模板,将一些变量“串行化”成一段文本,不过功能更强大,通常用来生成 HTML 页面。
一般的模板引擎应该实现的功能有:
分支条件 循环,可以遍历列表 包含文件 …… 我接触到的第一个模板引擎是 Java 的 FreeMarker ,发现这... 阅读全文
一般的模板引擎应该实现的功能有:
分支条件 循环,可以遍历列表 包含文件 …… 我接触到的第一个模板引擎是 Java 的 FreeMarker ,发现这... 阅读全文
最近读编程珠玑II ,其中介绍了 pic 这个 DSL 。于是试用了一下,感觉非常好。简而言之,pic 就是一门画示意图的语言,类似于 PostScript 或者 LOGO ,但比它们更面向问题。
我使用的是 dpic ,支持输出 svg 。
先有图有真相,以下是用 pic 画的电路图:
pic 支持以下基本图形(svg):
上面的图形由以下源代码生... 阅读全文
我使用的是 dpic ,支持输出 svg 。
先有图有真相,以下是用 pic 画的电路图:
pic 支持以下基本图形(svg):
上面的图形由以下源代码生... 阅读全文
说起最大公约数,众所周知的当然是辗转相除法。但最近看到一个 Stein 算法,据称比辗转相除法更高效。
其基本思想是,完全不使用整数乘除、取余,只使用整数加减、位移完成运算。
在网上看了一段代码如下:
int gcd(int a, int b) { if (a < b) { int temp = a; a = b; b = temp; } ... 阅读全文
其基本思想是,完全不使用整数乘除、取余,只使用整数加减、位移完成运算。
在网上看了一段代码如下:
int gcd(int a, int b) { if (a < b) { int temp = a; a = b; b = temp; } ... 阅读全文
因为最近要编写数值计算程序,对线性代数库做了一些研究。线性代数库就是别人已经写好的、高性能的矩阵运算库,可以做矩阵乘法、求逆、行列式、解线性方程组、LU 分解、QR 分解等等。
其实我最想说的是:boost::ublas 就是个渣!除了重载了运算符看起来好像很“美观”以外,性能比直接调用 LAPACK 函数低大约 50 倍(是的,即使用 Release 编译),任何一个严肃的数值应用都... 阅读全文
其实我最想说的是:boost::ublas 就是个渣!除了重载了运算符看起来好像很“美观”以外,性能比直接调用 LAPACK 函数低大约 50 倍(是的,即使用 Release 编译),任何一个严肃的数值应用都... 阅读全文
最近遇到这样的问题:只有用 Cygwin 编译出来的静态库(.a),需要转换成可以在 VC++ 中调用 .dll 和 .lib 。
网上大多说的是 dll 怎么生成 .lib 什么的,跟我要的不一样。所以我自己想了这么一种办法:
先用 ar 将 .a 中的所有 .o 文件解出来:ar x libatlas.a 使用 MinGW 的 --export-all-symbols 选... 阅读全文
网上大多说的是 dll 怎么生成 .lib 什么的,跟我要的不一样。所以我自己想了这么一种办法:
先用 ar 将 .a 中的所有 .o 文件解出来:ar x libatlas.a 使用 MinGW 的 --export-all-symbols 选... 阅读全文
《编译原理》课本上的一道带星号的习题:
习题 5.9*. 请为语言 L 写一文法使其满足 LL(1) ,且 L = {w | w ∈ (a|b)* 且 w 中 a ,b 的个数相等} 。 当时一看到这题我就想:这怎么可能呢?这不是要用文法计数吗?文法有这个能力吗?(貌似我脑子里一直想的是正则表达式……)
后来在老师的提示下,终于写出了这道题的上下文无关文法解法:
... 阅读全文
习题 5.9*. 请为语言 L 写一文法使其满足 LL(1) ,且 L = {w | w ∈ (a|b)* 且 w 中 a ,b 的个数相等} 。 当时一看到这题我就想:这怎么可能呢?这不是要用文法计数吗?文法有这个能力吗?(貌似我脑子里一直想的是正则表达式……)
后来在老师的提示下,终于写出了这道题的上下文无关文法解法:
... 阅读全文
因为最近要做彩色云图,研究了一下 HSL 色彩空间,即色相(Hue)、饱和度(Saturation)、亮度(Lightness)。
如果你需要用颜色的冷暖来表示数值的多少,那你就需要使用 HSL 色彩空间了。从冷色到暖色在 HSL 空间中只需把 H 分量从 240° 取到 0° 。
转换算法详见维基百科:
若 s = 0 ,则返回 (l, l, l) 。否则,使用下列过程:... 阅读全文
如果你需要用颜色的冷暖来表示数值的多少,那你就需要使用 HSL 色彩空间了。从冷色到暖色在 HSL 空间中只需把 H 分量从 240° 取到 0° 。
转换算法详见维基百科:
若 s = 0 ,则返回 (l, l, l) 。否则,使用下列过程:... 阅读全文
从官网上下下来的 wxWidgets 只有源代码,需要自己编译。
如何编译的问题全在源码包里的 INSTALL-MSW.txt 里写清楚了。命令样例:
make -f makefile.gcc BUILD=release SHARED=1 INSTALL-MSW.txt 的后面列出了一些编译选项:
BUILD=debug/release :编译 debug/rel... 阅读全文
如何编译的问题全在源码包里的 INSTALL-MSW.txt 里写清楚了。命令样例:
make -f makefile.gcc BUILD=release SHARED=1 INSTALL-MSW.txt 的后面列出了一些编译选项:
BUILD=debug/release :编译 debug/rel... 阅读全文
以下均为免费/开源软件:
EASEUS Partition Master 无损分区调整软件。兼容 Win7 。免费版不能修改簇大小,不能 NTFS -> FAT32 。refer: http://blog.csdn.net/shell_picker/archive/2010/08/06/5793610.aspx Q-Dir 文件管理器。可在左边显示目录树,可两列并排,最多可 4 ... 阅读全文
EASEUS Partition Master 无损分区调整软件。兼容 Win7 。免费版不能修改簇大小,不能 NTFS -> FAT32 。refer: http://blog.csdn.net/shell_picker/archive/2010/08/06/5793610.aspx Q-Dir 文件管理器。可在左边显示目录树,可两列并排,最多可 4 ... 阅读全文
在网页上显示数学公式,以前我知道的有这几种方法:
W3C 的 MathML -> 只有少数浏览器支持,不同浏览器显示不一致,而且最关键的是:太丑 mimetex -> 只能保存成图片,不能做成矢量图,制作 PDF 时效果较差 后来偶然在班固米上看到了 MathJax 这个神器:不但漂亮,而且使用 CSS 的 @font-face ,让出来的数学公式不是图片。我对班固米上的大... 阅读全文
W3C 的 MathML -> 只有少数浏览器支持,不同浏览器显示不一致,而且最关键的是:太丑 mimetex -> 只能保存成图片,不能做成矢量图,制作 PDF 时效果较差 后来偶然在班固米上看到了 MathJax 这个神器:不但漂亮,而且使用 CSS 的 @font-face ,让出来的数学公式不是图片。我对班固米上的大... 阅读全文
最近读蔡基刚的《英汉写作对比研究》,颇有收获。
怎样才能避免 Chinglish ?
怎样才能写出地道的英文?
如果说英文写作有捷径的话,那么这本书便是了。
当时还是我的 Writing 课老师推荐的,感谢老师!
下面是我的笔记:
一、篇章 1. 主题句
英文:往往是每段开头有主题句,整篇文章的主题句也放在开头 中文:没有主题句,或者... 阅读全文
怎样才能避免 Chinglish ?
怎样才能写出地道的英文?
如果说英文写作有捷径的话,那么这本书便是了。
当时还是我的 Writing 课老师推荐的,感谢老师!
下面是我的笔记:
一、篇章 1. 主题句
英文:往往是每段开头有主题句,整篇文章的主题句也放在开头 中文:没有主题句,或者... 阅读全文
SyntaxHighlighter 是一个基于 JavaScript 的代码着色器。默认没有支持 Tcl 语言,所以我写了一个 Tcl 的语法定义,让它可以高亮 Tcl 源代码。
SyntaxHighlighter is a syntax highlighter based on JavaScript. But it doesn't have built-in support for th... 阅读全文
SyntaxHighlighter is a syntax highlighter based on JavaScript. But it doesn't have built-in support for th... 阅读全文
就我的观察,我认为未来这些东西会是互联网的热点:
1. 推荐引擎
未来,用户最大的问题不再是获取不到信息,而是被淹没在信息的汪洋大海中;不再是没有选择,而是选择太多,无从下手。
于是推荐引擎应运而生。根据用户的历史记录估计用户的口味,向用户推荐他可能感兴趣的东西。因为往往,用户自己也不知道自己喜欢什么。
实际上,在这个网络阅读横行的时代,图书馆的地位仍然不可... 阅读全文
1. 推荐引擎
未来,用户最大的问题不再是获取不到信息,而是被淹没在信息的汪洋大海中;不再是没有选择,而是选择太多,无从下手。
于是推荐引擎应运而生。根据用户的历史记录估计用户的口味,向用户推荐他可能感兴趣的东西。因为往往,用户自己也不知道自己喜欢什么。
实际上,在这个网络阅读横行的时代,图书馆的地位仍然不可... 阅读全文
无聊?闲得蛋疼?试试让网页跳舞:
将此链接:Dance it 拖到书签栏。
然后打开任何网站,点“Dance it”。
与这个网页射击游戏配合使用,效果更佳。
源代码,受到某电工基地某主页启发而写,而且针对上面的网页射击游戏做了特殊处理:
(function() { var elements = document.getElementsByTagNam... 阅读全文
将此链接:Dance it 拖到书签栏。
然后打开任何网站,点“Dance it”。
与这个网页射击游戏配合使用,效果更佳。
源代码,受到某电工基地某主页启发而写,而且针对上面的网页射击游戏做了特殊处理:
(function() { var elements = document.getElementsByTagNam... 阅读全文
// 旧地址:http://blog.csdn.net/shell_picker/archive/2010/09/17/5889851.aspx
看到最近技术宅是如此的火,比如 Word 版 Only my railgun、Vim 版 Bad Apple。我也来玩玩技术宅,装一下逼。。。
做出来的效果看这里(请用高清):
http://v.youku.com/v_show/id_XMj... 阅读全文
看到最近技术宅是如此的火,比如 Word 版 Only my railgun、Vim 版 Bad Apple。我也来玩玩技术宅,装一下逼。。。
做出来的效果看这里(请用高清):
http://v.youku.com/v_show/id_XMj... 阅读全文
这两天本来在看 awesome ,但,archlinux 的 awesome 只能通过 AUR 安装,于是,wmii !
作为一个崇尚键盘操作的 linuxer :
用了 wmii ,腰不酸了,蛋也不疼了。
用了 wmii + tmux ,everything is different 。
用了 wmii ,终于发现 Xfce 真是 suck 。
用了 ... 阅读全文
作为一个崇尚键盘操作的 linuxer :
用了 wmii ,腰不酸了,蛋也不疼了。
用了 wmii + tmux ,everything is different 。
用了 wmii ,终于发现 Xfce 真是 suck 。
用了 ... 阅读全文
不久前介绍过 GNU Screen ,不过 screen 的问题是只能水平分割,不能垂直分割。要垂直分割得装 vertial split patch。
偶然发现了 tmux ,screen 的替代品,可以轻松实现垂直分割。
先上图:切成三个窗格,一边看 manpage ,一边用 vim ,还可以一边跑 make :
使用方法:
先一个 tmux 进入,然后快捷键:
... 阅读全文
偶然发现了 tmux ,screen 的替代品,可以轻松实现垂直分割。
先上图:切成三个窗格,一边看 manpage ,一边用 vim ,还可以一边跑 make :
使用方法:
先一个 tmux 进入,然后快捷键:
... 阅读全文
最近学了下 Tcl/Tk ,语法还比较容易理解,但很纠结:
# 递归版 proc fac {n} { if {$n == 1} { return 1 } else { return [expr {$n * [fac [expr {$n-1}]]}] } } # 非递归版 proc fac2 {n} { set r 1 for {set i 2} ... 阅读全文
# 递归版 proc fac {n} { if {$n == 1} { return 1 } else { return [expr {$n * [fac [expr {$n-1}]]}] } } # 非递归版 proc fac2 {n} { set r 1 for {set i 2} ... 阅读全文
三年前我写过一篇《Windows 命令行基础》,在网络上被转载过几次。事实证明,这篇文章还是有价值的。
一方面,就我了解的情况,学校的书和教学都很不重视 Windows 命令行这部分的知识。另一方面,这部分知识又是基础中的基础,几乎无法通过自己摸索来掌握。
今天我还有不少同学,会写 Java 程序、还会用 eclipse ,但搞不清楚绝对路径和相对路径。网络上这方面文档都是给有... 阅读全文
一方面,就我了解的情况,学校的书和教学都很不重视 Windows 命令行这部分的知识。另一方面,这部分知识又是基础中的基础,几乎无法通过自己摸索来掌握。
今天我还有不少同学,会写 Java 程序、还会用 eclipse ,但搞不清楚绝对路径和相对路径。网络上这方面文档都是给有... 阅读全文
以前参加过 CSS Naked Day 2008 。旨在关注前端,关注 Web 标准。
“如果没有 CSS ,世界将会怎样?”——联想广告词
“CSS 不重要, 那还有什么重要呢?难道是表格?”——fcicq
“如果你接触了 CSS ,你会发现它真的很强大——特别是跟 HTML 一起使用的时候。”——henix
Naked CSS Day 2011:
April ... 阅读全文
“如果没有 CSS ,世界将会怎样?”——联想广告词
“CSS 不重要, 那还有什么重要呢?难道是表格?”——fcicq
“如果你接触了 CSS ,你会发现它真的很强大——特别是跟 HTML 一起使用的时候。”——henix
Naked CSS Day 2011:
April ... 阅读全文
从来没有什么书能像彼得·圣吉的《第五项修炼》一样发人深省了。一直以来我在生活中观察到一些东西,但我自己并不知道怎么把它们表达出来。而彼得·圣吉把这些生活的智慧表达了出来,而且更详细、更系统。这本书让我一见如故。
以前,我总认为人类的组织是如此复杂,各种内外因素交织在一起,每个人的性格又各各不同,我们没法把握它。但圣吉告诉我们,把握它是有可能的。并且教给我们一套分析的方法。读了这本书,让... 阅读全文
以前,我总认为人类的组织是如此复杂,各种内外因素交织在一起,每个人的性格又各各不同,我们没法把握它。但圣吉告诉我们,把握它是有可能的。并且教给我们一套分析的方法。读了这本书,让... 阅读全文
由于我的 Linux 发行版(Arch Linux)不包含 iuplua ,所以我不得不自己下载安装:
从 http://sourceforge.net/projects/iup/files/ 下载 解压后,看 install ,那是个 shell script 我看 install 这个脚本的大意是,把 *.so copy 到 /usr/lib/lua/5.1 。
实际的安装过程如... 阅读全文
从 http://sourceforge.net/projects/iup/files/ 下载 解压后,看 install ,那是个 shell script 我看 install 这个脚本的大意是,把 *.so copy 到 /usr/lib/lua/5.1 。
实际的安装过程如... 阅读全文
记录一下,参考 Vim 的 example 修改:
set nocompatible syntax on filetype on set number set ruler set incsearch set showcmd set hlsearch set backspace=indent,eol,start set mouse=a " 启用鼠标 set t... 阅读全文
set nocompatible syntax on filetype on set number set ruler set incsearch set showcmd set hlsearch set backspace=indent,eol,start set mouse=a " 启用鼠标 set t... 阅读全文
继火星文之后,伟大的中国网友又发明了娇艳欲滴的菊花文,火星上菊花盛开:
菊花前:火曐攵γ煶個恏╒倲徆,菊マざ錵ヵ魰忚媞嗰σκ鯟覀
菊花后:҉火҉曐҉攵҉γ҉煶҉個҉恏╒倲҉徆҉,҉菊҉マ҉ざ҉錵҉ヵ҉魰҉忚҉媞҉嗰҉σ҉κ҉鯟҉覀
javascript:var s="看得我菊花一紧";var s2="";var i=0;while(i<s.length){s2 += String.fromCharCo... 阅读全文
菊花前:火曐攵γ煶個恏╒倲徆,菊マざ錵ヵ魰忚媞嗰σκ鯟覀
菊花后:҉火҉曐҉攵҉γ҉煶҉個҉恏╒倲҉徆҉,҉菊҉マ҉ざ҉錵҉ヵ҉魰҉忚҉媞҉嗰҉σ҉κ҉鯟҉覀
javascript:var s="看得我菊花一紧";var s2="";var i=0;while(i<s.length){s2 += String.fromCharCo... 阅读全文
用 Linux 一直都有个问题:屏幕太大,黑漆漆的,那么多空间都浪费了。如果 tty 下也可以像 vim 一样,split/vsplit,那该多好啊。。
最近发现了 screen 这个神器,可以实现以上功能,对控制台作水平分割,让空间得到充分利用。还可以一边用 vim 编代码,一边 make(虽然 vim 可以运行 shell 命令,但我觉得不爽)。简直就是命令行下的瓦片式窗口管理... 阅读全文
最近发现了 screen 这个神器,可以实现以上功能,对控制台作水平分割,让空间得到充分利用。还可以一边用 vim 编代码,一边 make(虽然 vim 可以运行 shell 命令,但我觉得不爽)。简直就是命令行下的瓦片式窗口管理... 阅读全文
当我发现某个磁盘的空间不够的时候,就想手动整理一下这块盘,看看那些文件是不必要的,把它们删除或者把旧的文件压缩。
但是在整理之前,最好先看一下哪个文件夹是最占用空间的,这样才能最大限度地释放空间。在 Linux 下我们可以用 du 命令,Windows 下也可以用 du :
dir /ad /b | sed -e "s/\(.*\)/""\1""""/" | xargs du -h... 阅读全文
但是在整理之前,最好先看一下哪个文件夹是最占用空间的,这样才能最大限度地释放空间。在 Linux 下我们可以用 du 命令,Windows 下也可以用 du :
dir /ad /b | sed -e "s/\(.*\)/""\1""""/" | xargs du -h... 阅读全文
// 旧地址:http://blog.csdn.net/shell_picker/archive/2010/11/25/6034158.aspx
上次看到一个“凑24”的题目但想不出来- -b,所以蛋疼地写了个程序来算。。。现在终于知道答案了。。。
这个凑24程序没有用搜索或递归之类,想法就是先用逆波兰式枚举所有可能的表达式的形式(这个直接手算枚举),共 5 种:
11+1+1... 阅读全文
上次看到一个“凑24”的题目但想不出来- -b,所以蛋疼地写了个程序来算。。。现在终于知道答案了。。。
这个凑24程序没有用搜索或递归之类,想法就是先用逆波兰式枚举所有可能的表达式的形式(这个直接手算枚举),共 5 种:
11+1+1... 阅读全文
寒假里读了两本书:《脑的学习与记忆》《皮亚杰的认知发展理论》,都是跟教育有关的。
下面是脑图(Mindmap):
一些有趣的结论:
关于学习的本质,两本书都认为主体必须与客观事物积极的交互,必须运用各种感官去感受,学习才能发生。皮亚杰认为,单靠语言描述是不能建立新的概念的。也许在一个新的概念建立了之后可以通过语义信息来学习。
Sprenger 女士... 阅读全文
下面是脑图(Mindmap):
一些有趣的结论:
关于学习的本质,两本书都认为主体必须与客观事物积极的交互,必须运用各种感官去感受,学习才能发生。皮亚杰认为,单靠语言描述是不能建立新的概念的。也许在一个新的概念建立了之后可以通过语义信息来学习。
Sprenger 女士... 阅读全文
// 旧地址:http://blog.csdn.net/shell_picker/archive/2010/07/21/5753226.aspx
平时奔走于寝室和实验室两地,经常需要切换 IP/DNS 配置。曾经在网上看了一段用 netsh 的切换脚本,下面这段是我对其的改进版:
set OUT=%tmp%\telecom.txt set name="本地连接" ech... 阅读全文
平时奔走于寝室和实验室两地,经常需要切换 IP/DNS 配置。曾经在网上看了一段用 netsh 的切换脚本,下面这段是我对其的改进版:
set OUT=%tmp%\telecom.txt set name="本地连接" ech... 阅读全文
// 最近准备写[旧文重发]系列,筛选我的老博客上的部分有价值的文章转发过来
// 旧地址:http://blog.csdn.net/shell_picker/archive/2010/05/20/5612563.aspx
最近自己写程序的时候,想提高程序的性能。
一个基本的想法是:减少对象的创建。由于我的程序中要大量使用整数操作,包括 Integer.toString... 阅读全文
// 旧地址:http://blog.csdn.net/shell_picker/archive/2010/05/20/5612563.aspx
最近自己写程序的时候,想提高程序的性能。
一个基本的想法是:减少对象的创建。由于我的程序中要大量使用整数操作,包括 Integer.toString... 阅读全文
最近遇到的一个问题,我把 Windows 中的 E 盘挂到 /mnt/e 后,普通用户无法访问,Permission denied。一查,/mnt/e 的权限竟然是 700。
到网上搜索,发现很多人遇到的问题与我类似。不是普通用户没权限挂载,而是本来就是普通用户挂载的,自己却没有权限访问!
最后发现似乎自己还是没有仔细地 Read The Fucking Manual 。mou... 阅读全文
到网上搜索,发现很多人遇到的问题与我类似。不是普通用户没权限挂载,而是本来就是普通用户挂载的,自己却没有权限访问!
最后发现似乎自己还是没有仔细地 Read The Fucking Manual 。mou... 阅读全文
最近一直在断断续续地做这个博客,当时决定自己做一个博客的时候,突发奇想想到了用纯静态的方式。当时主要是觉得用 python 的话必须用 Google 特定的数据库操作方式,不能用普通的 SQL 之类,写出来的程序不具备通用性,所以还不如干脆纯静态。
优势 显然纯静态博客有以下这些优势:
速度快。访问页面不用查询数据库,自然是快得没话说。 最大限度的控制。相较于用 wor... 阅读全文
优势 显然纯静态博客有以下这些优势:
速度快。访问页面不用查询数据库,自然是快得没话说。 最大限度的控制。相较于用 wor... 阅读全文
最近做这个博客,需要将动态生成出来的网页拷贝到一个放静态文件的文件夹中。
我需要的是差异拷贝,或者说同步。也就是说,只有更新过的文件才需要拷贝,如果某个文件被删除,那么目标文件夹中的对应文件也应该被删除。
想到同步,自然就想到 rsync,但那玩意儿是 Linux 下的,Windows下得用 Cygwin。Cygwin 搞了半天又嫌太麻烦,于是找了一下 Windows 原生的,... 阅读全文
我需要的是差异拷贝,或者说同步。也就是说,只有更新过的文件才需要拷贝,如果某个文件被删除,那么目标文件夹中的对应文件也应该被删除。
想到同步,自然就想到 rsync,但那玩意儿是 Linux 下的,Windows下得用 Cygwin。Cygwin 搞了半天又嫌太麻烦,于是找了一下 Windows 原生的,... 阅读全文
鉴于 CSDN 博客如此不给力,我已经准备换到我自己做的这个新博客上了。现在还在编码中。
以前之所以用百度空间,因为它允许匿名评论——但后来不能了。于是我又用 CSDN,因为那时的 CSDN 博客还可以匿名评论——但后来也不行了。。。
看了下 donews,好像现在还可以匿名评论,但以后谁知道呢?而且貌似代码着色不能,太丑。
算了算了,好歹俺也是做过前端开发的。GAE ... 阅读全文
以前之所以用百度空间,因为它允许匿名评论——但后来不能了。于是我又用 CSDN,因为那时的 CSDN 博客还可以匿名评论——但后来也不行了。。。
看了下 donews,好像现在还可以匿名评论,但以后谁知道呢?而且貌似代码着色不能,太丑。
算了算了,好歹俺也是做过前端开发的。GAE ... 阅读全文