這是我從小玩到大的朋友葫蘆的一篇文字,我不知道他寫這段文字的時(shí)候有什么所指,還是根本就是由心而發(fā)——我們還是有區(qū)別的,我基本上是個(gè)缺乏想象力的人,葫蘆卻是個(gè)園林設(shè)計(jì)師。我覺得他這篇文字確實(shí)精彩——我自己想可能很久都想不到的,但是就是給他說出來了。

          確實(shí),這個(gè)就是長久以來使我困惑,在和朋友的交流中慢慢明晰,現(xiàn)在差不多是我做事的指導(dǎo)原則的東西。


          小時(shí)候看見武俠片中有種練習(xí)輕功的方法,在腿上綁上沉重的沙袋,然后再院子里栽一棵小樹,每天從小樹上跳過,日久天長,去掉沙袋以后,頓時(shí)身輕如燕,輕功絕學(xué)就掌握了。
               看起來很有種微積分里求極限的感覺。
               現(xiàn)在也想練,不過想法也變了,不去等一個(gè)標(biāo)準(zhǔn)慢慢的長大,而是換種態(tài)度,直接去找參天巨樹去練習(xí),有個(gè)用鞭子的人一直在周圍抽打,不能懈怠。
               混沌的時(shí)候是看不見巨樹的是作為樹的存在的,此時(shí)的巨樹只是成為了周圍環(huán)境的一個(gè)部分,在想法中永遠(yuǎn)是不可改變無需超越的一部分。
               所以,千萬別讓你本應(yīng)該要超越的目標(biāo)變成你心中的不可逾越的高山。

          posted @ 2006-02-27 09:22 Under the sunshine 閱讀(214) | 評論 (0)編輯 收藏

          昨天回家跑了一遍昨天用cDomleet改寫的parse程序,看log的時(shí)候發(fā)現(xiàn)了一個(gè)奇怪的問題,總是反復(fù)的出現(xiàn)同樣的出錯(cuò)信息,其實(shí)這個(gè)問題在寫那段程序的時(shí)候也遇到過,不過我沒有怎么在意,但是我仔細(xì)的看了一下關(guān)于xpath的文檔以后發(fā)現(xiàn)自己犯了一個(gè)極其愚蠢的錯(cuò)誤:因?yàn)樽蛱斓某绦蚴前褬?biāo)準(zhǔn)dom的getElementsByTagName方法替換成了cDomleet的xpath方法,但是我給出的xpath表達(dá)式是從document的根部開始搜索所有的Attribute和Key_Group節(jié)點(diǎn)!!!也就是說每parse一個(gè)entity節(jié)點(diǎn)的時(shí)候,整個(gè)文檔的Attribute節(jié)點(diǎn)和Key_Group節(jié)點(diǎn)都要被完整的遍歷一遍!
          看來對于test這個(gè)問題,不當(dāng)回事真是不行。今后我的任務(wù)是為我的每一段程序構(gòu)造測試用例,實(shí)踐一下TDD,并且要堅(jiān)持下去,I am really not a great programmer, but I wish I can be a normal programmer with great habits。
          新的程序我會在構(gòu)造了測試用例,并且所有的測試用例都運(yùn)行通過以后,再放上來。

          posted @ 2006-02-24 09:24 Under the sunshine 閱讀(254) | 評論 (1)編輯 收藏

               摘要: Martin已經(jīng)看過了我的代碼,并且提出了意見,我們最擔(dān)心的問題——性能問題還是凸顯出來了,并不奇怪,erwin導(dǎo)出的文件確實(shí)是非常龐大的。 我在python郵件列表里面查找了一下,找到了幾個(gè)常見的解決方案: 使用4suite提供的cDomleete 通過pywin32通過com調(diào)用ms的MSXML解析器 PIRXX一個(gè)和xerces綁定的dom 4suite提供的c...  閱讀全文

          posted @ 2006-02-23 13:30 Under the sunshine 閱讀(301) | 評論 (0)編輯 收藏

          這個(gè)東西是我的朋友Martin在處理一個(gè)老系統(tǒng)轉(zhuǎn)換erwin的數(shù)據(jù)庫表結(jié)構(gòu)定義的xml文件到hibernate配置文件, VO和DAO時(shí)做的一個(gè)實(shí)驗(yàn),我們本來有一個(gè)牛人寫的程序來處理這些亂七八糟的表設(shè)計(jì),可惜源代碼都丟失了,而且他的轉(zhuǎn)換是基于hibernate 1.x,有很多的先進(jìn)特性無法利用,我們的目標(biāo)是:
          1,erwin版本獨(dú)立,erwin這個(gè)xml文件格式隨不同的版本略有不同,希望我們的東西可以做到隔離版本帶來的問題。
          2,高效,系統(tǒng)中的表定義超過2000,導(dǎo)出的xml文件非常龐大,動輒超過三四十兆,我們希望對于表結(jié)構(gòu)變動帶來的變化能夠及時(shí)響應(yīng),不能(過于)影響開發(fā)。

          初步的設(shè)想是先解析文件,得到最基本的表結(jié)構(gòu)信息,主外鍵信息,然后進(jìn)一步加工成我們想要得文件格式,我選擇的工具是python。
          現(xiàn)在準(zhǔn)備工作已經(jīng)完成了,下面是把xml文件解析成為python對象的代碼。
          下面是幾個(gè)testcase點(diǎn)擊下載

          import logging,logging.handlers
          logging.basicConfig(level
          =logging.DEBUG,\
                  format
          ='%(asctime)s %(levelname)s %(message)s',\
                  filename
          ='trans2.log',\
                  filemode
          ='w')
          logger 
          = logging.getLogger('trans2')

          class entity:

              
          def _parse_entity_properties(self, root):
                  entity_attrs_map 
          = _get_attributes_as_dict(root)
                  self.id 
          = entity_attrs_map['id']
                  self.name 
          = entity_attrs_map['Name']
                  
                  entity_properties_map 
          = _get_child_nodes_as_dict(root.firstChild)
                  
          if 'Physical_Name' in entity_properties_map:
                      logger.debug(
          'found Physical_Name in entity(%s)' % self.id)
                      self.physical_name 
          = entity_properties_map['Physical_Name']
                  
          else:
                      self.physical_name 
          = ''
                  logger.debug(
          'entity id = %s, name=%s, physical_name=%s'\
                          
          % (self.id, self.name,self.physical_name))

              
          def _parse_entity_attributes(self, root):
                  self.attrs 
          = []
                  attr_list 
          = root.getElementsByTagName('Attribute')
                  
          for a in attr_list:
                      attr_map 
          = {}
                      id 
          = _get_attributes_as_dict(a)['id']
                      name 
          = _get_attributes_as_dict(a)['Name']

                      child_map 
          = _get_child_nodes_as_dict(a.firstChild)
                      pysical_name 
          = ''
                      parent_attr_id 
          = ''
                      parent_relation_id 
          = ''
                      master_attr_id 
          = ''
                      nullable 
          = 1
                      
          try:
                          
          #for process some special cases
                          if 'Physical_Name' in child_map:
                              logger.debug(
          'found Physical_Name element in Attribute(%s)' % id)
                              pysical_name 
          = child_map['Physical_Name'].firstChild.data
                          
          if 'Parent_Attribute' in child_map:
                              logger.debug(
          'found Parent_Attribute element in Attribute(%s)' % id)
                              parent_attr_id 
          = child_map['Parent_Attribute'].firstChild.data 
                          
          if 'Parent_Relationship' in child_map:
                              logger.debug(
          'found Parent_Relationship element in Attribute(%s)' % id)
                              parent_relation_id 
          = child_map['Parent_Relationship'].firstChild.data 
                          
          if 'Master_Attribute' in child_map:
                              logger.debug(
          'found Master_Attribute element in Attribute(%s)' % id)
                              master_attr_id 
          = child_map['Master_Attribute'].firstChild.data 
                          
          if 'Null_Option' in child_map:
                              logger.debug(
          'found Null_Option element in Attribute(%s)' % id)
                              nullable 
          = child_map['Null_Option'].firstChild.data
                          data_type 
          = child_map['Datatype'].firstChild.data

                          attr_map 
          = {'attr_id':id,'name':name,'pysical_name':pysical_name,\
                                  
          'nullable':nullable,'data_type':data_type,'parent_attr_id':parent_attr_id\
                                  ,
          'parent_relation_id':parent_relation_id ,'master_attr_id':master_attr_id }
                      
          except KeyError,msg:
                          
          print 'warring, maybe missing some attribute\'s infomation:%s of entity %s'\
                                  % (msg, self.name)
                          logger.warn(
          'warring, maybe missing some attribute\'s infomation:%s of entity %s'\
                                  % (msg, self.name))
                  self.attrs.append(attr_map)

              
          def _parse_entity_keys(self, root):
                  self.pk 
          = {} 
                  self.fks 
          = []
                  key_list 
          = root.getElementsByTagName('Key_Group')
                  
          for k in key_list:
                      key_id 
          = _get_attributes_as_dict(k)['id'
                      key_name 
          = _get_attributes_as_dict(k)['Name']
                      
          # process Key_GroupProps, get the key type infomation 
                      key_type = _get_child_nodes_as_dict(k.firstChild)['Key_Group_Type'].firstChild.data 
                      
          # process Key_Group_MemberProps, get the key column property
                      try:
                          key_attr_id 
          =  _get_child_nodes_as_dict(k.lastChild.firstChild.firstChild)\
                                  [
          'Key_Group_Member_Column'].firstChild.data

                          key_conf 
          = {'key_id':key_id,'key_name':key_name,\
                              
          'key_type':key_type,'key_attr_id':key_attr_id}
                          
          if key_conf['key_type'== 'PK':
                              self.pk 
          = key_conf
                          
          else:
                              self.fks.append(key_conf)
                              logger.debug(
          'key_props for Key_Group(%s):%s:%s:%s'\
                                          
          % (key_id,key_name,key_type,key_attr_id))
                      
          except KeyError, msg:
                          
          print 'error, can\'t find the key defination %for %s'\
                                 % (msg, self.name)
                          logger.error(
          'error, can\'t find the key defination %for %s'\
                                 % (msg, self.name))


              
          def _reset(self):
                  self.id 
          = ''
                  self.name 
          = ''
                  self.attrs 
          = []
                  self.pk 
          = {}
                  self.fks 
          = []

              
          def __init__(self,entity_element):
                  self._reset()
                  self._parse_entity_properties(entity_element)
                  self._parse_entity_attributes(entity_element)
                  self._parse_entity_keys(entity_element)

              
          def __eq__(a,b):
                  
          return a.id == b.id

              
          def __repr__(self):
                  
          #print self.__dict__
                  return 'entity with {id:%(id)s,name:%(name)s,pk:%(pk)s' \
                          
          % self.__dict__

          class relationship:
              
          def __init__(self,relation_element):
                  self._reset()
                  self._parse_relationship(relation_element)

              
          def _reset(self):
                  self.id 
          = ''
                  self.parent_id 
          = ''
                  self.child_id 
          = ''
                  self.name 
          = ''
                  
              
          def _parse_relationship(self, relations_element):
                  attr_map 
          = _get_attributes_as_dict(relations_element)
                  self.id 
          = attr_map['id']
                  self.name 
          = attr_map['Name']
                  
                  rel_props 
          = _get_child_nodes_as_dict(relations_element.childNodes[0]) 
                  self.parent_id 
          = rel_props['Relationship_Parent_Entity'].firstChild.data
                  self.child_id 
          = rel_props['Relationship_Child_Entity'].firstChild.data
                  logger.debug(
          'parsed relation:%s:' % self)

              
          def __repr__(self):
                  
          return 'relationship with {id:%(id)s,name:%(name)s,parent_id:%(parent_id)s,child_id:%(child_id)s}' \
                          
          % self.__dict__

              
          def __eq__(a, b):
                  
          return a.id == b.id

          def _get_attributes_as_dict(element):
              attributes 
          = {}
              
          if element.attributes:
                  
          for attr in element.attributes:
                      attributes[attr.name.strip()] 
          = attr.value
              
          return attributes

          def _get_child_nodes_as_dict(element):
              child_nodes_map 
          = {}
              
          if element.childNodes:
                  
          for e in element.childNodes:
                      
          if not e.nodeType == e.TEXT_NODE:
                          child_nodes_map[e.tagName.strip()] 
          = e
                      
          else:
                          child_nodes_map[e.parentNode.tagName.strip()] 
          = e.data
              
          return child_nodes_map

          def parseXmlFile(file_name):
              
          from xml.dom.ext.reader import Sax2
              doc 
          = Sax2.FromXmlFile(file_name)
              
          return doc

          def _startParse(root):
              entities 
          = root.getElementsByTagName('Entity')
              relations 
          = root.getElementsByTagName('Relationship')
              parsed_entities 
          = [entity(item) for item in entities]
              parsed_relations 
          = [relationship(item) for item in relations]
              
          return parsed_entities,parsed_relations

          if __name__ == '__main__':
              
          import sys,time
              start 
          = time.time()
              
          print 'start@%s' % start
              root 
          = parseXmlFile(sys.argv[1])
              entities,relations 
          = _startParse(root.documentElement)
              end 
          = time.time()
              
          print 'stop@%s' % end
              
          print 'cost %s' % (end - start) 

          posted @ 2006-02-22 08:53 Under the sunshine 閱讀(482) | 評論 (1)編輯 收藏

          http://www.theserverside.com/news/thread.tss?thread_id=39048

          posted @ 2006-02-21 09:04 Under the sunshine 閱讀(155) | 評論 (0)編輯 收藏

          From Version Control with Subversion

          The typical work cycle looks like this:

          • Update your working copy

            • svn update

          • Make changes

            • svn add

            • svn delete

            • svn copy

            • svn move

          • Examine your changes

            • svn status

            • svn diff

            • svn revert

          • Merge others' changes into your working copy

            • svn update

            • svn resolved

          • Commit your changes

            • svn commit

          posted @ 2006-02-18 00:30 Under the sunshine 閱讀(155) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共2頁: 上一頁 1 2 

          posts - 16, comments - 3, trackbacks - 0, articles - 0

          Copyright © Under the sunshine

          主站蜘蛛池模板: 休宁县| 原平市| 阳高县| 雅江县| 会同县| 茌平县| 肥东县| 屯留县| 鄂尔多斯市| 镇江市| 华宁县| 浦城县| 旺苍县| 甘谷县| 漯河市| 措美县| 微博| 黄骅市| 瑞昌市| 彝良县| 建平县| 乌拉特中旗| 色达县| 德保县| 西林县| 微山县| 漠河县| 彩票| 同仁县| 桦甸市| 马龙县| 谷城县| 奉化市| 乌苏市| 确山县| 新源县| 富阳市| 阳山县| 玛纳斯县| 井冈山市| 彰化县|