第21章 使用数据库 从网络论坛到播客采集软件甚至备份程序的一切频繁地使用持久存储的数据库.基于SQL的数据库往往是相当方便:速度快,可扩展从微小到巨大的尺寸,可以在网络上运行,经常帮助处理锁定和事务,甚至还可以为应用提供故障转移和冗余.数据库有许多不同:大的商业数据库如Oracle,开源的引擎如PostgreSQL或MySQL,甚至嵌入式引擎如sqlite. 因为数据库是如此重要,haskell对他们的支持也很重要.在本章中,我们将向你介绍一个用于数据库的haskell框架.我们也将使用这个框…
第22章 扩展示例:Web客户端编程 至此,您已经看到了如何与数据库交互,解析一些数据,以及处理错误.现在让我们更进了一步,引入Web客户端库的组合. 在本章,我们将开发一个真正的应用程序:一个播客下载软件,或播客采集软件.一个播客采集软件的想法很简单.给出一系列的URL.下载每个URL并将结果存到RSS格式的XML文件中.在这个XML文件里,我们会找到用于下载音频文件的URL. 播客采集软件通常是让用户通过往他们的配置里添加RSS URL来订阅播客.然后,用户可以定期执行更新操作.播客采集软件…
第20章 Haskell系统编程 到目前为止,我们已经讨论了大多数的高层次的概念.Haskell也可以用于较低级别的系统编程.很可能是用haskell编写出底层的与操作系统接口的程序. 在本章中,我们将尝试一些雄心勃勃的事情:类似Perl的“语言”,纯用haskell来实现是可行的,它使得shell脚本编程容易.我们要实现管道,简单的命令调用,和一些简单的工具可能会和grep和sed一起处理任务. 针对不同的操作系统特定的模块是存在的.在本章中,我们将使用尽可能的通用的独立于OS的模块.然而,我…
第27章 网络通信和系统日志 Sockets and Syslog 基础网络 在本书的前面几章,我们讨论了运转在网络上的服务.其中的两个例子是客户端/服务器架构的数据库和Web服务.当需要制定一个新的协议或者是和一个没有现成库的协议通信时,你就需要使用haskell库中较低级别的网络工具. 在本章中,我们将讨论这些低级的工具.网络通信是整本书都在阐述的广泛的话题.我们将向您展示如何使用Haskell去应用你已经知道的底层的网络知识. Haskell的网络功能几乎总是直接对应于熟悉的C函数调用.由…
第23章 GUI编程使用gtk2hs 在本书中,我们一直在开发简单的基于文本的工具.虽然这些往往是理想的接口,但有时图形用户界面(GUI)是必需的.有几个Haskell的GUI工具包是可用的.在本章中,我们将着眼于其中一个,gtk2hs. %多个替代选择存在.除了gtk2hs,wxHaskell也是一个著名的跨平台GUI工具包. 安装gtk2hs 在我们和gtk2hs工作之前,你需要安装它.在大多数Linux,BSD,或其他POSIX平台,你会发现已经编译好的gtk2hs包.一般你会需要安装GT…
第24章 并发和多核编程 第一部分并发编程 当我们写这本书的时候,CPU架构正在以比过去几十年间更快的速度变化. 并发和并行的定义 并发程序需要同时执行多个不相关任务.考虑游戏服务器的例子:它通常是由几十个组件组成,每个组件都与外部世界有着复杂的交互.一个组件可能处理多用户聊天;几个会将处理几个玩家的输入并回复他们状态的更新,而另一个执行物理计算. 并发程序的正确执行并不需要多核,尽管可能会提高性能和响应速度. 与此相反,一个并行程序解决了一个单一的问题.考虑一个尝试在单只股票的价格波动来预测下…
原文:<Programming WPF>翻译 第8章 2.Timeline Timeline代表了时间的延伸.它通常还描述了一个或多个在这段时间所发生的事情.例如,在前面章节描述的动画类型,都是Timeline.可哦率这样的DoubleAnimation: <DoubleAnimation From=”10” To=”300” Duration=”0:0:5” /> 正如Duration属性指出的,这代表了一个5秒的时间长度.所有类型的Timeline总是有一个开始时间和一个持续时…
原文:<Programming WPF>翻译 第9章 5.默认可视化 虽然为控件提供一个自定义外观的能力是有用的,开发者应该能够使用一个控件而不用必须提供自定义可视化.这个控件应该正好工作,当以它最直接的方式使用时.这意味着控件应该提供一组默认的值. 这些默认的可视化存储在组件的二进制资源中,使用的源文件为theme"generic.xaml.如果你在Visual Studio 2005中创建了一个WPF 控件库的工程,这将自动添加这个文件到你的工程中,并且设置它的Build Act…
原文:<Programming WPF>翻译 第9章 6.我们进行到哪里了? 只有当任何内嵌控件都没有提供你需要的底层行为时,你将要写一个自定义控件.当你写一个自定义控件,你将要使用到依赖属性系统,来提供支持数据绑定和动画的属性.你将使用routed事件结构来暴露事件.如果你想写一个没有外观的控件,允许其可视化能被替换--如内嵌控件,你必须考虑你的控件和模板之间如何进行交互.你还将要为一个提供了一组默认可视化的模板提供一个默认值.…
原文:<Programming WPF>翻译 第9章 4.模板 对一个自定义元素最后的设计考虑是,它是如何连接其可视化的.如果一个元素直接从FrameworkElement中派生,这将会适当的生成它自己的可视化.(第7章描述了如何创建一个图形外观.)尤其是,如果你创建了一个元素,是为了提供一个特定的可视化表现,该元素应该完全控制这个可视化是如何管理的,一旦你编写了一个控件,通常你不会将一个图形硬编码到里面. 记住,一个控件的工作是提供行为.可视化是由控件模板提供的.这种可视化是由控件模板提供的…