Categories

Links

wxPython magic

1. SetMenuBar
在一个MDIParentFrame中,如果SetMenuBar调用在前,而Append 子菜单在后,则默认的Windows菜单总在第一位,无论你使用Insert代替Append也不起作用

2. 在继承PyGridTableBase 时,如果 你错误的实现了一个方法 ,如GetNumberRows你写作了GetNumerRows,则wxpython可能不提示错误,而grid也无法正常显示table 的数据

3.  如果试用 grid.SetCellValue,尽量试用BeginBatch和EndBatch对,这样能提升近50%左右的性能

4.如果有大量的cell要装载,请继承GridTableBase,否则,可能会遇到性能问题

5.设置光标

wx.SetCursor(wx.StockCursor(wx.CUROSR_WAIT))
# do some
wx.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))

简单的方法

wx.BeginbusyCursor()

wx.EndBusyCursor()

 6.垃圾收集通常在最小化主窗口时触发

7.创建从一个字符串描述的模块??有无好的方法

用__import__(modulename)

  8. 如果你使用PyPanel,在里面的控件无法用tab导航,使用Panel 代替

9.wxpython 如果你写了一个事件处理函数,并且与事件挂上以后,那么如果你还想使用还来的事件处理,需要调用 event.Skip() ,否则不管你是否返回,这个事件都将不再继续处理 http://bbs.chinaunix.net/viewthread.php?tid=810221&highlight=wxpython

10.mysql和mssql中文问题(sqlalchemy)
①文件编码 utf-8
②lib\site.py中 在main函数del sys.setdefaultencoding代码前加上sys.setdefaultencoding('utf-8')
③连接方法
mysql  mysql://user:password@server/database?use_unicode=1&charset=gbk ??
mssql 用pyodbc
import pyodbc
create_engine("
mssql://user:password@server/database",module=pyodbc)

[2007-05-07 21:34:49 | Author:jiangjianxiao ] [] 14 comments

超越java 读书笔记

小册子,没什么技术难度,不用花一天时间可读完,书中将语言的成功归纳为几个方面(这里加上个人的总结)
①政治上的,像python ,ruby,或者说java就没有或很少有政治上的问题,而.net ,显然有
②语言上的,这显然是根本,当然,动态语言和静态语言都会有优势,这取决于项目的类型
③社区上的,是否有一个良好的社区。
④大量的类库,java 大量的开放源码的类库显然是吸引很多开发者的一个很大原因。
⑤催化剂,即语言是否有一个杀手级程序或特色,如当时vb在windows 开发上,java的applet和 servlet,目前的ruby on rials等。

在书中,java语言被视为笨重的东西,而如果加上解决这些笨重问题的方案,又显的学习坡度太大。事实上也得确如此,如你用spring+hibernate+webwork开发一个项目,简单的事情会搞得非常复杂。 当然,我觉的语言本身是有些问题,但很多地方,也取决于开发者,那些书作者的言论也没有必要当成圣经。当然,在开发时刻保持这样的认识是很重要的。

显然,作者是ruby 和ruby on rails的吹鼓手,我个人比较认同在一些小的web应用中使用ruby on rails开发和,这会使你的项目有效率而又保持一定规范。至于有人云 ,为了ruby on rails 放弃windows和sql server,是否值得之类的言论。我的第一反应,这是哪根哪啊。ruby/ruby on rails  现在的应用只是在某一方面(即ruby的shell编程和ruby on rails的web应用), 在很多时候,我们更倾向于能在目前的环境中集成ruby(即jruby或是rubyclr/ruby.net之类的意义),但显然,目前这部分还远远不够。因此,在目前而言,很多地方无法完全取代当前任何流行的开发环境的。

摘录几段有感触的地方

p33 其实,java语言没有什么大问题,问题在Java的类库上,类库采用大而无用的设计。 
个人感觉:
结果造成在看起来一个简单的方法调用后面,类库做太多大而无用的工作。 这个直接导致最终系统的性能问题,在这种情况下,简单的语言级的性能测试并不能真正的说明问题。.net 也是如此。

p45 如果jvm 接受动态语言,在可见的未来它将成为部署平台的选择,如果jvm 不接受动态语言,新的虚拟机将会出现。
个人感觉:jvm 会在下个版本引入动态语言支持,jruby 快发布1.0版本了,或许不要多久,我们将会看到结果。

p175 任何语言只要拥抱ruby ,就会在政治上取得更有利的位置。
个人感觉:在.net 上,ironpython 已经比jpython 的实现要好的多的多,由于ms已经招募了rubyclr的开发者,或许过不了多久,我们会看到ruby on .net实现 。但是这条并不适合.net ,很多时候,.net 是政治斗争的牺牲品,而不是其本身的原因。

p182 Stuart Halloway是很尊重的java顾问,特别是在元编程和反射方面。他在NoFluffJustStuff研讨会上说,他强烈觉得微软将会是世界上最大的开放源码厂商,而Davee Thomas 似乎也同意这样的看法。
个人感觉: 虽然ms已经对.net 做了一些标准化的工作,但显然,还做的远远不够,mono 已经在某些方面促进了.net 的发展,如果ms 能够消除开发者心中的“政治”方面的困惑,我想.net 未来应该不可限量。

我比较喜欢文中的催化剂的说法,当我刚接触java时,java 只会在网页上创建一些炫目的效果,jdbc才刚刚提出,java在那时根本就是个玩具,很多使用applet开发企业应用的都失败了。servlet 改变了这个现状,直接造成了java 目前在服务器端的地位。ruby on rails 也是这样一个催化剂。

我觉得我们有必要学习一下ruby on rails ,虽然你未必真的使用其开发,请把注意力放在其如何将ruby 语言的特点发挥到极致的。我个人也在检讨,为什么我们老早就拥有不错的语言 javascript ,而在asp 开发中,我们却很少或者说根本没有创建出一个令人印象深刻的程序。我想,缺少思考和想像力,可能是主要的原因吧

[2007-04-08 09:32:21 | Author:jiangjianxiao ] [] 1 comments

真是惭愧,获得 mvp 了

半夜,完成手头的琐事,打开gmail 准备发送工作结果。结果看到 [MVP] 热烈祝贺!您已经获得 Microsoft MVP 奖励 ,很奇怪 第一个感觉是惭愧,近年来都是独善其身,忙着做自己的一些事情,几乎没做什么事情。 dotnettools 评测网虽然一直去,但也很少发贴,唯一算的上开源的项目dotnettools workflow 也是没有更新。很多时候虽然有些心得,但总是欲言又止。你看,连blog 都不写了。一句话,人是越来越懒散了。

感谢 开心就好 等朋友的推荐,想来想去咱也不能白拿这个称号啊,看来以后的日子里要多干些实际的事情了。

ps. 我选择订阅了 vs ts ,不过很是怀疑,我填写的三角猫的 英文地址,能送到吗? 呵呵.

[2007-04-02 00:46:20 | Author:jiangjianxiao ] [] 1 comments

初步完成xwork的移值

在 java 中,有两个命令模式和责任链模式的典范,一个是apache commons chain,一个就是xwork。其中apache commons chain一开始就被设计为责任链模式。但其外围功能较少。使用的人并不多。

commons chain .net 的简单移值版本

xwork 通过ActionChainResult 支持责任链模式,但由于其创造性的拦截器模式。因此拥有的扩展性远远强于commons chain,这里值的一提的是 ,xwork 的拦截器原理方式可以是非常简单,充分显示了大道至简的概念。是我非常喜欢使用的框架。

目前移值是1.0 版本,移值的处理如下

1. 配置使用spring.net 集成的方式,写一个自定义配置解析器,解析xwork的配置

  <objects xmlns="http://www.springframework.net" xmlns:x="http://www.soho-works.net/xwork">
      <x:xwork>
        <x:package name="default">
          <x:action name="hello"
class="SohoWorks.BusinessFramework.ActionSupport,SohoWorks.BusinessFramework"/>
        </x:package>
        <x:package name="default2">
         
        </x:package>
      </x:xwork>
     
    </objects>

2. 使用spring.expression代替原来的ognl,目前主要的问题是spring.expression并没有提供像ognl一样的PropertyAccesser,MoethodAccessor的接口,这样,无法将OgnlValueStack列表中的第一个对象像当前对象一样

3.

[2007-03-18 22:46:12 | Author:jiangjianxiao ] [] 1 comments

导入ActiveContent某一栏目数据到z-blog

<%
dim connectionString

'需要 设置你数据库在网站的相对路径

dim dbPath
dbPath="blog/xxxxxxx.mdb"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath(dbPath) & ";Persist Security Info=False"


'删除导入记录
del

dim categoryid
dim pagesize

dim blog_authorid
dim blog_categoryid

pagesize=20
'导入后该文章作者的编号
blog_authorid=1
'导入后该文章所在类别
blog_categoryid=6
'需要导入那个ac的栏目
categoryid=63


dim site
set site=Server.CreateObject("ActiveContent.Site")
dim category
set category=site.Getbycategoryid(categoryid)
dim cols

dim pagecount
set cols=category.documents(true,pagesize,1,pagecount)
for each doc in cols
   call addtoblog(doc)
next
if pagecount>1 then
   for i=2 to pagecount
      set cols=category.documents(true,pagesize,i)
      for each doc in cols
         call addtoblog(doc)
      next
  next
end if
'删除已导入记录
public function del()
  dim con
  set con=Server.CreateObject("adodb.connection")
  con.Open connectionString
  con.execute "delete from blog_comment"
  con.execute "delete from blog_article"
  con.close
end function


public function addtoblog(doc )

      'debug
        Response.Write "import " & doc.Id & " " &  doc.title & "...<br/>"
        dim con
        set con=Server.CreateObject("adodb.connection")
        con.Open connectionString
       
        dim rs
        set rs=Server.CreateObject("adodb.recordset")
     
        rs.Open "select * from blog_article",con,3,3
        rs.addnew
        rs("log_authorId")=blog_authorid
        rs("log_title")=doc.title
        rs("log_content")=doc.content
        rs("log_cateId")=blog_categoryid
        rs("log_PostTime")=doc.submitdate
        rs("log_intro")=mid(doc.content,1,500)
         '普通文章
        rs("log_level")=4
        rs.Update
     
         dim id
         id=rs("log_id")
            rs.close
         dim comment
         dim comments
         set comments=doc.comments(50)
         rs.Open "select * from blog_comment",con,3,3
         for each comment in comments
            rs.addnew
            rs("log_id")=id
            rs("comm_author")=comment.username
            rs("comm_content")=comment.comment
            rs("comm_homepage")=comment.url
            rs("comm_posttime")=comment.commentdate
          '  rs("comm_email")=comment.email
            rs("comm_ip")=comment.ip
            rs.update


         next
         rs.close

       con.close

end function


%>

[2007-03-15 23:05:13 | Author:jiangjianxiao ] [] 1 comments

Total 91 Display 36 of 40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Powered by Google App Engine