| 麦田守望者's profile异想空间PhotosBlogLists | Help |
|
|
11/17/2009 被我遗忘了很久的一本好书有一本被我遗忘了很久的书,它叫《GNU/Linux编程指南》。已经忘记是什么时候买的了。翻看了一下目录。这本书非常系统地讲解了,在Linux环境中编程所需要了解的方方面面的内容。其内容涉及编程环境、系统编程、网络接口、GUI编程、驱动程序开发等。每个部分都提供了详尽的代码示例。由于有些年头了,书中介绍的某些技术细节可能稍显过时。但是,这并不妨碍通过它完整地了解Linux环境的应用程序开发。 回想当初买这本书的时候,对什么是GNU、什么是UNIX和Linux、什么是自由软件和开源软件,没有一点概念。然而,运气相当好的是,自己曾经在无意间买了一本非常值得珍藏的好书。 10/26/2009 与rc有关的几个重要文件OpenBSD uses an rc(8) style startup. This uses a few key files for startup.
10/22/2009 在命令行中调节音量在命令行调节音量使用mixerctl,方法如下: $ mixerctl outputs.master=200,200 其中,两个数值200,分别代表的是左右声道的音量,中间用一个逗号分隔。其取值范围是0到255。不加任何参数执行mixerctl,能够看到系统当前的音频配置参数。 把系统时间调整为本地时间By default, OpenBSD assumes your hardware clock set to UTC (Universal Coordinated Time) rather than local time, assumed by some other operating systems, which can cause problems when multi-booting. Many other operating systems, can be configured to do the same, which avoids this problem altogether. If having the hardware clock set to UTC is a problem, you can change the default behavior of OpenBSD using config(8). For example, to configure OpenBSD to use a hardware clock set to US/Eastern (5 hours behind UTC, so 300 minutes): # config -ef /bsd See options(4) and search for option "TIMEZONE=value" for more information. 以上是从OpenBSD FAQ中摘录的。config命令用于更改时区。对于北京时间,使用如下命令行修改时区: ukc> timezone -480 timezone的参数是以分钟为单位。因此,八小时为480分钟。quit之后,重启心爱的OpenBSD,date一下。看,时间变过来了。 10/21/2009 OpenBSD的rc脚本是如何工作的(摘录)The main files a system administrator should concentrate on are /etc/rc.conf (for guidance), /etc/rc.conf.local (for changes), /etc/rc.local and /etc/rc.shutdown. To get a look of how the rc(8) procedure works, here is the flow: After the kernel is booted, /etc/rc is started:
9/10/2009 对getcwd函数的一例应用的不解在OpenBSD源代码树的pwd.c中,有这样一个代码片段: int main(int argc, char *argv[]) 该段代码的目的是获得当前工作目录,并打印出来。请注意getcwd的调用方式。根据OpenBSD Maunal对getcwd函数的描述:如果给第一个参数传递NULL的话,getcwd会在某个地方分配内存空间,存放当前目录的字符串,并返回指向这个字符串的指针。调用方应该在稍后调用free,释放字符串占用的内存空间。然而,在上述从OpenBSD源代码中摘抄的代码片段,并没有调用free。 8/29/2009 听歌也很简单听MP3你用什么软件?我用VLC。不过,我还用更高效、易用的mpg321。mpg321是一个命令行程序,没有任何用户界面。这就使得mpg321非常的高效,占用非常之少的系统资源。安装mpg321同样很容易。如果使用Debian或者Ubuntu,那么sudo apt-get install mpg321;如果使用BSD Unix,那么可以使用他们各自的软件包管理系统安装;或者干脆从源代码编译。看你的喜好了。 播放MP3: mpg321 file1.mp3 播放多个MP3: mpg321 file1.mp3 file2.mp3 singer/famous-song.mp3 打乱顺序播放: mpg321 -z file1.mp3 file2.mp3 singer/famous-song.mp3 man mpg321会显示完整的使用参考。 mpg321可以被用在shell脚本中。发挥一下想象力,是否能够把它用到什么特别有意思的地方呢。 BTW:mpg321不是Windows环境中的产物。想在Windows下使用的话,你可以搜一搜试试看。 8/27/2009 IATTopic.queryCatalogIATTopic接口声明了queryCatalog方法: def queryCatalog(REQUEST=None, **kw): 利用这个方法,我们能够以编程的方式控制提供了IATTopic接口的对象的搜索行为。最典型的是Plone的标准内容类型Collection,在更早期的Plone版本中其称作Smart Folder。Collection这个名字可以看作是面向用户的名字,非常清晰直观的反映了它的功能。在Plone内部,Collection类型实际上是一个ATTopic类,其portal_type是Topic,archetype_name是Collection。言归正传,看一看能用这个接口方法做什么。 在ATTopic类实现中,丰富了queryCatalog方法的参数: def queryCatalog(self, REQUEST=None, batch=False, b_size=None, 利用这些参数,能完成如下任务: 1、在已经设置了搜索条件的基础上,附加其它额外的条件。将任何额外的搜索条件,按照ZCatalog的规范组合成一个字典对象,传递给kw参数。关于ZCatalog的参考,《The Zope2 Book》的Searching and Catagorizing Content章节有详细的介绍。 2、按批次返回特定数量的对象集合,即分页。batch参数指明是否按批次返回搜索结果,b_size说明返回的结果集的大小。除了这两个参数,还需要在context.REQUEST对象中设定b_start。b_start指明,在完整的搜索结果结合中,从第几个对象开始返回b_size数量的对象集合。和数组的下标一样,b_start的值从0计起。 在这种情况下,queryCatalog方法返回的是一个 ZTUtils.Batch.Batch对象。Batch对象实现了__getitem__和__len__方法。同时,还提供了previous和 next属性,用于前后双向跌代下一个Batch对象。如果到头了,则previous和next会相应的被置为None。 3、返回的对象集合中,包含每一个完整的对象。full_objects参数指明,调用每一个Brain对象的getObject方法,从ZODB中获取完整的对象。此种做法可能会影响Plone的运行性能。 举个例子: 在当前上下文中存在一个Collection对象,其ID为search。想要搜索EffectiveDate在2009年1月1日以来的Page对象,并且按照EffectiveDate排序,显示头10个对象。 from DateTime import DateTime qc = {}context.search.queryCatalog(**qc)[0:10] 如果想要分页显示所有Page对象,每一页显示20个,显示第2页: qc = {}# 这一行很重要。如果缺少这一行,则会始终从搜索到的第一个对象开始返回结果 context.search.queryCatalog(batch=True, b_size=20, **qc) |
||||
|
|