最近刻苦学习中,无心打理小站
不过
依然坚持给小博换了个风格,宗旨当然是为了娱乐。拒绝成为一个没有生活的程序员,娱乐至上!
提到这个背景,我想它现在成为了我主要的文化传播平台,在不影响大家阅读的情况下起到了强制传播的PUSH作用,希望在上面投放广告的JS可以联系本人……跑题了
顺便要说的是,背景图如假包换是程序生成的,Python + PIL的初次实践,我会在大家看腻之前把它换掉,然后在大家再一次审美疲劳之前努力的想出下一个华丽的算法,誓死娱乐大众……
另外,我这两天做的一件比较无聊也比较有成就感的事情就是把之前由于网站安全漏洞产生的大约10000个spam comments基本完全解决掉了,剩下的一些看起来不太像spam的spam就让它们来见证这次事件吧!
当然,也是写程序删的。不然绝对累死了,至少干掉了9900个,成就感……
post on 2007-08-22 17:10
需要用到wx.ScrolledWindow这个控件,找来找去找不到例子,只好自己摸索,白白花费两个小时。
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='ScrolledWindow Test')
self.panel = wx.ScrolledWindow(self)
self.button1 = wx.Button(self.panel, -1, "1", (10,0))
self.button2 = wx.Button(self.panel, -1, "2", (20,500))
self.panel.Show()
self.Show()
self.panel.EnableScrolling(False, True)
self.panel.SetScrollbars(0,20,0,30)
self.panel.Scroll(-1, 15)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.MainLoop()
自己在UI方面断断续续学习了很多年,一些概念知识也是断断续续才补充完整的。今天两个小时的额外收获在于,搞清楚了什么是Window什么是Frame什么是Panel
Frame和Panel都是Window,一切的控件都是Window,这个概念其实很多人都明白的,不过是一个针对程序员的概念。
Frame算得上是一种TopLevelWindow,也就是平常人眼中的Window,比如浏览器。用户才不会像程序员一样思考,抽象的去理解一个Button就是一个Window这样的事实。Frame的意思是边框,导轨。想象一下常用词语Framework框架,可以帮助我们理解。
Panel是一种容器,当然我们也可以直接把控件放在Frame中,有时候为了需要,也会把控件放到Panel中。ScrolledWindow就是一个例子,它继承了Panel
ScrolledWindow的使用方法希望能够被搜索引擎收录,能帮其他人节约下来两个小时,做一些更有意义的事情
post on 2007-08-15 12:17
版本1.1很早就发布了,不是什么新闻。但是版本2已经Alpha3了
IronPython是用C#写的,开发用了VS2005,所以默认平台是DotNet 2,运行ipy.exe的时候可以看到这样的信息。想要获得基于DotNet 1.1平台的版本,可以自己下载代码编译,需要自己加个宏
IronPython可以调用Python标准库,在Lib\site.py里面加入
import sys
sys.path.append(r"c:\python24\lib")
就可以了,但是有些东西还是不能用的,比如CPython内置的库和调用dll的库:_winreg和cString,说再见吧!作为补偿,我们拥有了一大堆DotNet提供的强大功能
IronPython可以写ASP.NET了,这是个新闻,具体的信息可以查看http://www.asp.net/ironpython/
我们可以用IronPython调用WinForm和WPF
WPF需要DotNet Framework 3的支持,最好再搞一份Vista SDK以便查阅文档
说到WPF,让人同时感觉到震撼和绝望,写窗口等价于写HTML,这样的日子不远了
post on 2007-08-3 12:14
首先需要在OS X上安装Xcode,gcc也会被安装上
进入Terminal以后,我们可以执行的命令有gcc和g++,我们知道gcc用来编译c程序,g++用来编译c++程序
按照常规的想法,GCC会单独提供命令来编译objc程序,因为我们知道,Objective-C程序的扩展名是.m,Objective-C++程序的扩展名是.mm。但是GCC没有这么做,我们仍然使用gcc命令来编译objc程序
不过单纯使用gcc命令是不行的,还是需要一些参数
-fgnu-runtime是为objc准备的参数,由于objc在实现了很多动态的特性,使用了很多的运行时绑定,所以运行的时候需要有一个runtime,据说在新的版本中,runtime还支持GC
-ObjC 或者 -ObjC++ 这在标准的GCC中是不存在的,是Apple对GCC的扩展,用这个命令可以轻松的编译ObjC程序
我们用来编译main.m的命令就是gcc -ObjC -c main.m
上面两个选项当然只要用一个就可以了,更多的信息可以察看Xcode自带的GCC文档
http://developer.apple.com/documentation/DeveloperTools/gcc-4.0.1/gcc/index.html
file:///Developer/ADC%20Reference%20Library/documentation/DeveloperTools
/gcc-4.0.1/gcc/index.html
注意:如果不加-c选项,gcc会帮我们link程序,但是link的步骤会出错
由此可以看出,objc对c的扩展没有c++那么夸张,就像The Objective-C Programming Language中说的一样: "Moreover, Objective-C is a simple language. Its syntax is small, unambiguous, and easy to learn. "
察看各种reference,我们可以看到 .h的文件,但是找不到熟悉的.lib或者.a文件,objc使用framework这样的概念,如果我们要link一个使用了Foundation的源程序,就要加上参数-framework Foundation
post on 2007-07-26 08:45
bazaar是一个十分拗口的名字,直到现在我都觉得拼写很不方便
几个月之前知道这个名字,接着又因为Mozilla更换了他们的VCS系统,开始使用我们正在谈论的这个bzr
一个星期以前又见到了这个名字,发现原来它是用Python写的,看来不需要像svn那样,需要先编译再使用了(要知道在OS X下面编译svn的痛苦,到现在binary还是跟我speak乱码)
因为好奇,读一读文档,所谓的DVCS(分布式版本控制系统)使用了和传统的系统怎样不同的概念。
分布式的说法很简单的说就是不需要服务器,我并不是说不需要网络,仅仅是不需要特定的服务器而已,换一种说法,你旁边的文件夹有可能就承担了服务器的功能
一般来说,传统的VCS都需要一个服务器,而且相互不兼容。p4绝对不可能连上svn的服务器,svn也不能上cvs。但是对于bazaar来说,一切都可以成为它fetch代码的源,任何fetch行为被称作branch
我们可以从电脑上的另外一个目录上branch,也可以是一个web站点,一个sftp,一个网上邻居(对于Windows,它可以被透明的当作一个文件夹)
第二个观点是,提交并不需要和服务器打交道。提交这个动作仅仅相当于给自己的工作打一个标记,bzr的submit不等于svn的submit。我们可以在任何时间submit,不管有没有网络
这样看起来,对于没有固定IP服务器,或者没有良好上网条件的家伙来说,bazaar是一个绝好的东西。至少,当开发团队成员只有你一个人,或者提着笔记本出去没有网络的地方半个月,bazaar能帮你省去不少麻烦
但是bazaar绝对不是给个人使用的玩具,想象一下mozilla你就知道bazaar可以展开工作的规模了
不要对分布式报有幻想,如果你想要和其他人一起工作,没有网络是绝对不行的。虽然你可以暂时没有网络,但是最终你需要网络来把一切工作成果汇总。或者你可以使用U盘
传统的提交工作,在这里就变成了merge,最终我们branch出来的一切终将回归主分支,这就是开发,这就是开发
post on 2007-07-13 09:33