echo "test" | passwd test --stdin > /dev/null 2>&1这条命令可以把test用户的密码设置为test。
小巧好用的浏览器:Epiphany
哎,真是……真是,怎么不早点用一下这个浏览器呢?简洁、快速、智能,实在是太合我的口味了:)
起因
使用gentoo,自己编译的firefox字体真的很漂亮,使用pango渲染的字体效果没得说,可惜真的太慢了(或许不是pango的错,而只是我的firefox有问题),尤其是在gmail中查看邮件列表时慢的一塌糊涂,动不动CPU利用率就到了100%,在linuxsir上问了半天也没有结果,只能继续忍受firefox带给我的痛苦。
尝试
突然想起来gnome带有一个很简陋的浏览器:Epiphany,不妨拿来试试,一试不当紧,查看gmail速度怎么就那么快啊,我的 firefox简直不能和它相提并论,浏览其他的页面就更不用说了:)发现字体不像firefox那么漂亮,查看一下设置,原来默认的设置下最小字体是7 号,改为9号就好了,是我最喜欢的字号,这下显示效果真的就完美了,哈哈
Epiphany的智能书签很不错,再也不用愁乱哄哄的书签了。
进阶
大家都知道firefox有很多可以选用的插件,给使用带来了非常大的便利,其实这个貌似简陋的Epiphany也是支持插件功能的,安装extensions:
#emerge epiphany-extensions
稍等片刻安装完毕,打开Epiphany,在工具菜单下就有了“扩展”项,体会Epiphany带来的快乐吧,呵呵
莫非at不能定时执行图形程序?
想趁晚上没有人使用网路时用amule下载一些东西,却发现使用at并不能定时执行图形化的程序,而定时执行console程序是没有问题的,man了一下又google了半天没有任何收获,只得用python临时写一个简单的先凑合用着。
#!/usr/bin/python
#coding=UTF-8
import wx
import os
class MyApp(wx.App):
def OnInit(self):
self.frame = wx.Frame(None,-1,'RunAt',size=(290,77))
self.lblCmd = wx.StaticText(self.frame,-1,'命令:')
self.txtCmd = wx.TextCtrl(self.frame,-1,size=(150,-1))
self.btnSelect = wx.Button(self.frame,-1,'选择')
self.btnSelect.Bind(wx.EVT_BUTTON,self.Select)
self.lblTime = wx.StaticText(self.frame,-1,'时间:')
self.txtTime = wx.TextCtrl(self.frame,-1,size=(150,-1))
self.btnSet = wx.Button(self.frame,-1,'设定')
self.btnSet.Bind(wx.EVT_BUTTON,self.Set)
sizer1 = wx.BoxSizer(wx.HORIZONTAL)
sizer1.Add(self.lblCmd,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer1.Add(self.txtCmd,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer1.Add(self.btnSelect,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer2 = wx.BoxSizer(wx.HORIZONTAL)
sizer2.Add(self.lblTime,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer2.Add(self.txtTime,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer2.Add(self.btnSet,0,wx.LEFT|wx.TOP|wx.ALIGN_CENTER,5)
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1,0)
sizer.Add(sizer2,0)
self.frame.SetSizer(sizer)
self.runTime = None
self.timer = wx.Timer()
self.timer.Bind(wx.EVT_TIMER,self.OnTimer)
self.timer.Start()
self.frame.Bind(wx.EVT_ICONIZE,self.OnMin)
self.frame.Center()
self.frame.Show(True)
self.SetTopWindow(self.frame)
return True
def Select(self,event):
dlg = wx.FileDialog(self.frame)
if dlg.ShowModal() == wx.ID_OK:
self.txtCmd.SetValue(dlg.GetPath())
def OnTimer(self,event):
if self.runTime == None:
pass
t = wx.DateTime.Now()
str = '%02d:%02d' %(t.GetHour(),t.GetMinute())
if str == self.runTime and t.GetSecond() == 0:
os.system('%s&' %self.txtCmd.GetValue())
def Set(self,event):
self.runTime = self.txtTime.GetValue()
def OnMin(self,event):
self.frame.Show(False)
def main():
app = MyApp(0)
app.MainLoop()
if __name__ == '__main__':
main()
等宽字体的概念
(由linuxsir上fundawang的帖子整理)
所谓的等宽字体,应该是指同一种script下,所有字符的宽度都相等。至于中文这个script中,汉字的宽度是否是en这个script里英文宽度的 两倍,取决于制作字体时的考虑,以及pango的字体替换算法。因为在很多情况下,pango会试图使用同一种字体来显示所有的字符,所以你经常会看到 gtk2的应用把英文字符也用中文字体来显示。
如果单就解决这个问题而言,你可以告诉这个软件的作者,在进行算法设计的时候,就把中日韩字符以及标点符号算成两个字符宽就行了。说中文的开发者可以自行设定正确的字体。他如果想要测试的话,可以安装文泉驿的点阵字体,这个字体应该是标准的双倍宽度 :)
注:script是字体这个范畴内的一个术语,大概跟字符集的意思差不多,也可以理解为Unicode范围。总之不是脚本的意思了 :D
所谓的等宽字体,应该是指同一种script下,所有字符的宽度都相等。至于中文这个script中,汉字的宽度是否是en这个script里英文宽度的 两倍,取决于制作字体时的考虑,以及pango的字体替换算法。因为在很多情况下,pango会试图使用同一种字体来显示所有的字符,所以你经常会看到 gtk2的应用把英文字符也用中文字体来显示。
如果单就解决这个问题而言,你可以告诉这个软件的作者,在进行算法设计的时候,就把中日韩字符以及标点符号算成两个字符宽就行了。说中文的开发者可以自行设定正确的字体。他如果想要测试的话,可以安装文泉驿的点阵字体,这个字体应该是标准的双倍宽度 :)
注:script是字体这个范畴内的一个术语,大概跟字符集的意思差不多,也可以理解为Unicode范围。总之不是脚本的意思了 :D
limodou大虾评论基于python的web框架
(摘自python-chinese邮件列表)
web framework大多数从功能上都大同小异。从功能上分:zope/plone算大型的,而django,turbogears算是轻量级的。从学习曲线上分,zope/plone要长一些,而django,turbogears相对要短一些。对于django,turbogears来说,开发的理念有所不同,但功能是类似的。django所有东西都是自已开发的,象模板系统,url映射机制,ORM等。而turbogears则是许多相对成熟项目的集合,这一点与pylons也很象,如模板系统主要是kid,通过模板适配可以使用其它的模板(强调一下,django是松耦合的,许多组件也可以替换),webserver组件使用cherrypy,ORM使用SQLObject(还可以使用QLAlchemy)等等。关于这两种集成的方式,不同的人有不同的看法。有人认为turbogears是好的,因为没有重新造轮子。但有些人象我认为集中式更易管理和控制。所以关键看你认同哪一种设计理念。
对于ajax也有许多不同的声音。ajax本身可以与后台无关,它主要是在前端通过javascript,DOM来操纵前端数据,与后台交互。从这一点上,任何web framework都可以算是支持ajax。如果说不支持 ,那是从后台能否自动生成相应的html,javascript代码这一层来说的。turbogears嵌 入了mochekit的js库的支持,可以通过python程序 生成相应的js代码。django则是有人做过这样的工作 ,但要么不是成熟的东西,要么还没有成型。为什么会这样也与dj ango的设计理念有关系。象turbogears ,它的支持是针对不同的js库生成不同的包装,这样如果js库非 常多,自然会有许多的包装,目前已经是这样的。而django在 讨论是则不希望是这样,希望有一个中间层或无关层 ,但的确这一点很难。因此后来可能限定在了dojo ,不过还没有相关的代码可以看到。只不过admin功能使用了d ojo的一些东西。
还有pylons也很有特色。但对于我上人来说,我认为它太复杂 了,不容易理解,所以也没有人研究过。目前国内对于django ,turbogears, pylons都有人研究,从人数上看是比例依次递减 。对于zope/plone则有专门的czug.org ,有许多人在学习和研究。
总之,不同的框架从基本功能上是大同小异,在功能是各有特色的 ,设计理念上也是各有差异。选择一个框架不仅看它的功能是否满足 ,可能还有许多的因素,如人气,成熟度,是否有现实的应用,性能 ,设计理念等等。应用从方面进行考查,而且用着顺心可能更重要 。象karrigell作为初学入门,或更轻量级的选择也是不错 。
web framework大多数从功能上都大同小异。从功能上分:zope/plone算大型的,而django,turbogears算是轻量级的。从学习曲线上分,zope/plone要长一些,而django,turbogears相对要短一些。对于django,turbogears来说,开发的理念有所不同,但功能是类似的。django所有东西都是自已开发的,象模板系统,url映射机制,ORM等。而turbogears则是许多相对成熟项目的集合,这一点与pylons也很象,如模板系统主要是kid,通过模板适配可以使用其它的模板(强调一下,django是松耦合的,许多组件也可以替换),webserver组件使用cherrypy,ORM使用SQLObject(还可以使用QLAlchemy)等等。关于这两种集成的方式,不同的人有不同的看法。有人认为turbogears是好的,因为没有重新造轮子。但有些人象我认为集中式更易管理和控制。所以关键看你认同哪一种设计理念。
对于ajax也有许多不同的声音。ajax本身可以与后台无关
还有pylons也很有特色。但对于我上人来说,我认为它太复杂
总之,不同的框架从基本功能上是大同小异,在功能是各有特色的