PulseAudio 跨网络应用
我们屋里有一台计算机是专门用来做报告的,为它配备了一台投影仪。在作报告的时候,有时想播放一些音频文件,但是这台计算机没有扬声器。为了便于问题的描述,可以将这台计算机称为“哑巴机”。除了这台哑巴机之外,其他的计算机都内置了音效挺好的扬声器,相应的,我们管这些带扬声器的机器称为“有声机”。由于我们比较缺钱,所以不想为哑巴机再配备一个外部音箱,只想找个办法使得哑巴机可以通过有声机的扬声器播放音频。使用 PulseAudio 可以很简单的解决这个问题。
X Window 系统与云计算
不懂 Unix 的人,注定最终还要重复发明一个蹩脚的 Unix。这句话对于 X Window 系统可能也很合适。
iwlagn 网卡在 linux 3.1.5—3.1.7 中频繁掉线问题的修复
如果你的无线网卡是 iwlagn 驱动,并且它在最近的 Linux 3.1.5, 3.1.6 内核上无法与无线 AP 正常连接,症状是连上即断,继而再连……那么你可能需要查看 http://www.gossamer-threads.com/lists/linux/kernel/1466171 第 10# 帖,将该帖附件中的补丁打到内核源码并编译。
《Real World Haskell》前十八章导读
对于理解 Haskell 这门语言而言,《Real World Haskell》这本书的前十八章已经足够,而且也包含了大量的应用范例,但是对于没有函数编程经验的读者,要想一路畅通无阻的读完这些章节,并非易事。这里,我想共享一下我的阅读体会。
Haskell 世界一次奇妙的旅行(5)
本系列文档的第 1—3 篇,主要讲述了 PGM 图像数据解析程序的 Haskell 与 C 实现,第 4 篇对这两个程序分别进行了重构,在一定程度上改善了代码质量。这几篇文章由于主要是围绕程序的设计与实现思路而写的,其中遇到的一些 Haskell 语法只是略加解释。本文对前 4 篇文档所出现的 Haskell 的相关概念集中起来介绍一下。
Haskell 世界一次奇妙的旅行(4)
本系列文档假设你熟悉 C 语言编程但是对 Haskell 不怎么了解,因为我们要借助 C 语言来解释一个 Haskell 程序的构建过程,主要目的是让你对 Haskell 有一些感性上的认识。本系列文档不可能帮助你掌握 Haskell,但是如果它引发了你对 Haskell 的兴趣,可阅读《Real World Haskell》来学习 Haskell,而且本系列文档也是以这本书的第十章作为背景的。
上一篇讲述了 parseP5 函数的 Haskell 与 C 实现,并且皆通过了测试,但是该函数的两种实现代码皆非常丑陋,这种丑陋是由于存在较多的模式重复导致的。例如,对于 Haskell 实现,存在 6 层 case 表达式的嵌套;对于 C 实现,存在 6 层的 if 语句嵌套,4 处从 Maybe 结构体中提取数据成员的操作,还有 3 处释放 Maybe 结构体内存的操作。我们需要消除这些重复的模式,以达到简化代码的目的。
Haskell 世界一次奇妙的旅行(3)
本系列文档假设你熟悉 C 语言编程但是对 Haskell 不怎么了解,因为我们要借助 C 语言来解释一个 Haskell 程序的构建过程,主要目的是让你对 Haskell 有一些感性上的认识。本系列文档不可能帮助你掌握 Haskell,但是如果它引发了你对 Haskell 的兴趣,可阅读《Real World Haskell》来学习 Haskell,而且本系列文档也是以这本书的第十章作为背景的。
上一篇讲述了 matchHeader, getInt, getBytes 这三个函数的 Haskell 与 C 实现,本文将这三个函数组装成 parseP5 函数并进行测试。
Haskell 世界一次奇妙的旅行(2)
本系列文档假设你熟悉 C 语言编程但是对 Haskell 不怎么了解,因为我们要借助 C 语言来解释一个 Haskell 程序的构建过程,主要目的是让你对 Haskell 有一些感性上的认识。本系列文档不可能帮助你掌握 Haskell,但是如果它引发了你对 Haskell 的兴趣,可阅读《Real World Haskell》来学习 Haskell,而且本系列文档也是以这本书的第十章作为背景的。
在上一篇中,对于 parseP5 函数及其子函数 matchHeader, getInt, getBytes 只是进行了 Haskell 函数签名以及对应 C 版本的函数声明,本篇讲述如何实现这些函数。本文讲述 matchHeader, getInt, getBytes 这几个子函数的实现。
Haskell 世界一次奇妙的旅行(1)
本文假设你熟悉 C 语言编程但是对 Haskell 不怎么了解,因为本文是借助 C 语言来解释一个 Haskell 程序的构建过程,主要目的是让你对 Haskell 有一些感性上的认识。本文不可能帮助你掌握 Haskell,但是如果它引发了你对 Haskell 的兴趣,可阅读《Real World Haskell》来学习 Haskell,而且本文也是以这本书的第十章作为背景的。
Haskell:打印自定义类型的值
本系列文档以《Real World Haskell》第 5 章的内容作为背景,尝试将 Haskell 一部分比较基础但是比较重要的语法特征的阐释贯穿于一个具体的示例之中,并理清 Haskell 编程的一些基本思想。
说明:本文使用 RWH 代指《Real World Haskll》这本书。