2005年12月23日

          apache 2.0.55
          jk 1.2.15

          httpd.conf中設置JkMount /pay/* paycore
          當form的action(如/pay/do/%ab%df123456)已經用url編碼編碼過后再提交時,jk無法識別,不能正確轉化到對應的tomcat上.
          posted @ 2005-12-23 17:32 zzzhc 閱讀(252) | 評論 (0)編輯 收藏
           

          由docbook生成pdf,且基本上沒有中訪問題的簡單方法:

          將hibernate文檔部分源碼(:pserver:anonymous@cvs.sourceforge.net:/cvsroot/hibernate下的doc/reference)取下,將zh-cn目錄下的xml文件用自已的代替,修改zh-cn/styles/fopdf.xsl,將與hibernate相關的部分改為自已的內容,主要是version和logo,通過在文件中查找hibernate很容易找得到,用原來的fopdf.xsl生成的pdf的subtitle為亂碼,將fopdf.xsl文件中的

          <fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
                                          <xsl:value-of select="bookinfo/subtitle"/>
                                      </fo:block>
                                      <fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
                                          Version:
                                          <xsl:value-of select="bookinfo/releaseinfo"/>
                                      </fo:block>

          修改為

          <fo:block font-family="simsun" font-size="22pt" padding-before="10mm">
                                          <xsl:value-of select="bookinfo/subtitle"/>
                                      </fo:block>
                                      <fo:block font-family="simsun" font-size="12pt" padding="10mm">
                                          Version:
                                          <xsl:value-of select="bookinfo/releaseinfo"/>
                                      </fo:block>

          換一下subtitle的字體,就不會有亂碼了.刪除en目錄,修改一下build.xml,去掉<antcall target="lang.all"><param name="lang" value="en"/></antcall>,只生成中文結果.

          有點難受的是標點還是有可能會出現在句首.

          參考:

          http://www.donews.net/limodou/archive/2004/04/01/9917.aspx

          http://www.blogcn.com/user6/caoxg/blog/2402234.html


          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!106.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(522) | 評論 (0)編輯 收藏
           

          用figure表示圖形,再用fop轉換成pdf時,如果圖片的大小比pdf的一頁的大小還大時,fop會出錯,拒絕工作,它不會把圖片縮小一點的,自已把圖片縮小一點就可以了.害我找了半天才發現原因,暈啊.


          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!121.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(257) | 評論 (0)編輯 收藏
           

          smc源自于 Bob Martin 的狀態機編譯器,能根據定義文件生成c++,java,tcl,vb.net,c#狀態機.

          定義文件一般格式

          當前狀態

          {

          狀態變遷  變遷后狀態

                          {

                              變遷時執行的動作

                           }

          }


          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!123.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(338) | 評論 (0)編輯 收藏
           
                對于沒有外鍵關系的簡單表,hbm文件中不要做修改就能映射成dom4j的Element,默認每個屬性都映射為一個node;有外鍵關系的要在many-to-one中加入 embed-xml="false",要不的話經常會造成堆棧溢出或者dom4j試圖給一個節點設置多個父節點.
          簡單測試:
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping
           package="test">
           
           <class name="Xml" table="xml" lazy="true" node="xml">
            <id name="id" column="id" type="long" node="@id">
             <generator class="native"/>
            </id>
            <property name="name" column="name" not-null="true" length="250" node="@name"/>
            
            <bag name="subs" table="sub" inverse="true" node="subs">
             <key column="parent" />
             <one-to-many class="Sub" node="sub"/>
            </bag>
           </class>
           
          </hibernate-mapping>
           
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping
           package="test">
           
           <class name="Sub" table="sub" lazy="true" node="sub">
            <id name="id" column="id" type="long" node="@id">
             <generator class="native"/>
            </id>
            <property name="name" column="name" not-null="true" length="250" node="@name"/>
            
            <many-to-one name="parent" column="parent" class="Xml" embed-xml="false"/>
           </class>
           
          </hibernate-mapping>
           
          復雜一點的:
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping
           package="test">
           <class name="Dir" table="dir" lazy="true">
            <id name="id" column="id" type="long" node="@id">
             <generator class="native"/>
            </id>
            <property name="name" column="name" not-null="true" length="50" node="@name"/>
            
            <many-to-one name="parent" column="parent_id" class="Dir" node="@parentId" embed-xml="false"/>
            
            <bag name="children" inverse="true" cascade="all" node="dirs">
             <key column="parent_id"/>
             <one-to-many class="Dir"/>
            </bag>
            
            <bag name="files" inverse="true" table="file" node="files">
             <key column="parent_id" />
             <one-to-many class="File"/>
            </bag>
            
           </class>
           
          </hibernate-mapping>
           
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
          <hibernate-mapping
           package="test">
           
           <class name="File" table="file" lazy="true">
            <id name="id" column="id" type="long" node="@id">
             <generator class="native"/>
            </id>
            <property name="title" column="title" not-null="true" length="250"/>
            <property name="content" column="content" not-null="true" type="string"
             lazy="true" length="10000"/>
            <many-to-one name="parent" column="parent_id" class="Dir" not-null="true" node="@parentId" embed-xml="false"/>
           </class>
           
          </hibernate-mapping>
           

          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!124.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(498) | 評論 (0)編輯 收藏
           
          參考http://www.wespoke.com/archives/000978.html,用python重寫了一下,可以指定目錄,指定保存路徑
          #! /usr/bin/python
          import urllib, re,sys,os,os.path,getopt
          threadNum = 20
          savePath = "mp3-2"
          optlist,left = getopt.getopt(sys.argv[1:], "t:d:")
          for opt in optlist:
              print opt
              if (opt[0]=='-t'):
                  threadNum = int(opt[1])
              if (opt[0]=='-d'):
                  savePath = opt[1]
          print "threadnum="+str(threadNum)
          print "savePath="+savePath
          if (not os.path.exists(savePath)):
              os.makedirs(savePath)
          base = "http://list.mp3.baidu.com/topso/"
          url = "http://list.mp3.baidu.com/topso/mp3topsong.html"
          def getUrlData(url):
              num = 0
              while (num<3):
                  num = num+1
                  try :
                      f = urllib.urlopen( url )
                      data = f.readlines()
                      f.close()
                      return data
                  except:
                      pass
              return []
             
          data = getUrlData(url)
          pattern = re.compile( r'href="(.*?tsomp3.htm)' )
          target = [];
          for line in data:
              if ( line.find( "tsomp3.htm" )!=-1 ):
                  items = pattern.findall( line )
                  for item in items:
                      target.append( item )
                     
          print "find ",len( target )," mp3 "
          mp3Pattern = re.compile( r'href="(.*?\.mp3)"' )
          titlePattern = re.compile( r'<title>.*?_(.*?)\s+</title>' )
          import threading
          lock = threading.Lock()
          def getMp3():
              while True:
                  t = ""
                  lock.acquire()
                  if ( len( target )>0 ):
                      t = target[0]
                      target.remove( t )
                  else :
                      return
                  lock.release()
                  tempUrl = base+t
                  data = getUrlData(tempUrl)
                  mp3Target = []
                  title = "";
                  for line in data:
                      if ( line.find( "title" )!=-1 ):
                          m = titlePattern.search( line )
                          if ( m ):
                              title = m.group( 1 )
                              break
                  for line in data:
                      if ( len( mp3Target )>10 ):
                          break
                      if ( line.find( ".mp3" )!=-1 ):
                          items = mp3Pattern.findall( line )
                          for item in items:
                              mp3Target.append( item )
                  filename = savePath+"/"+title+".mp3"
                  for t in mp3Target:
                      try :
                          print "try to get "+title+".mp3,url=",t
                          ret = urllib.urlretrieve( t, filename )
                          size = os.path.getsize(filename)
                          if (size>500*1024):
                              print "done:"+title+".mp3"
                              break
                      except :
                          print "fail to get "+title+".mp3 with url "+t
                          pass
          for num in range(threadNum):
              thread = threading.Thread( None, getMp3 )
              thread.start()
              print "start thread ",num
             

          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!125.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(1034) | 評論 (0)編輯 收藏
           
          apache(2.0.55) rewrite+proxy 至少需要三個module: rewrite_module, proxy_module, proxy_http_module 配置文件片斷: LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/proxy_http.so rewriteengine on #注意 不是proxyrequest proxyrequests on #ProxyPass ^/(.*)$ http://host/$1 rewriterule ^/(.*)$ http://host/$1 [P,L] apache已安裝后要新添加module可以用apache安裝目錄/bin下的apxs ,apxs -i -a –c foo_module.c 參考資料: apxs - APache擴展工具 http://www.uplinux.com/download/doc/apache/ApacheManual/programs/apxs.html Apache 重寫規則的常見應用 (rewrite) http://fanqiang.chinaunix.net/a6/b1/20010905/0800001238.html

          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!128.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(390) | 評論 (0)編輯 收藏
           
           
          對于簡單的圖形驗證碼(字體規則,沒有雜點或雜點容易過濾掉),用模板匹配的方式可以比較容易地識別出來.
          0.圖片黑白化,用1表示有字的像素,0表示無字的像素
          1.字塊分隔,將圖片分隔成只包含成單字的最小塊
          2.生成模板,將字塊與字符關聯
          3.識別,將新圖片分塊并與模板匹配
          java(jdk1.5)實現:
          //先運行TemplateCreator創建模板,再運行Recognize2識別
          //圖片數據表示,也用來表示字塊
          package pay365;
          import java.awt.image.BufferedImage;
          import java.io.BufferedReader;
          import java.io.File;
          import java.io.FileReader;
          import java.io.IOException;
          import java.util.ArrayList;
          import java.util.Iterator;
          public class ImageData {
              public int[][] data;
              public int w;
              public int h;
              public char code;
             
              public ImageData() {
              }
             
              public ImageData(BufferedImage bi) {
                  this(bi,new WhiteFilter());
              }
              public ImageData(BufferedImage bi,Filter filter) {
                  h = bi.getHeight();
                  w = bi.getWidth();
                  data = new int[h][w];
                  for (int i = 0; i < h; i++) {
                      for (int j = 0; j < w; j++) {
                          int p = bi.getRGB(j, i);
                          data[i][j] = p;
                      }
                  }
                  filter.doFilter(data);
              }
              public ImageData[] split() {
                  ArrayList list = new ArrayList();
                  ImageIterator ite = new ImageIterator(this);
                  while (ite.hasNext()) {
                      list.add(ite.next());
                  }
                  return (ImageData[]) list.toArray(new ImageData[0]);
              }
              int skipEmpty(int begin, boolean isX, int value) {
                  if (isX) {
                      for (int i = begin; i < w; i++) {
                          for (int j = 0; j < h; j++) {
                              if (data[j][i] != value) {
                                  return i;
                              }
                          }
                      }
                      return -1;
                  } else {
                      for (int i = begin; i < h; i++) {
                          for (int j = 0; j < w; j++) {
                              if (data[i][j] != value) {
                                  return i;
                              }
                          }
                      }
                      return -1;
                  }
              }
              int skipEntity(int begin, boolean isX, int value) {
                  if (isX) {
                      for (int i = begin; i < w; i++) {
                          for (int j = 0; j < h; j++) {
                              if (data[j][i] == value) {
                                  break;
                              }
                              if (j == h - 1)
                                  return i;
                          }
                      }
                      return -1;
                  } else {
                      for (int i = begin; i < h; i++) {
                          for (int j = 0; j < w; j++) {
                              if (data[i][j] == value) {
                                  break;
                              }
                              if (j == w - 1)
                                  return i;
                          }
                      }
                      return -1;
                  }
              }
              class ImageIterator implements Iterator {
                  int x;
                  ImageData ia;
                  ImageData next;
                  public ImageIterator(ImageData ia) {
                      this.ia = ia;
                  }
                  public boolean hasNext() {
                      if (next != null)
                          return true;
                      next = getNext();
                      return next != null;
                  }
                  ImageData getNext() {
                      int x1 = skipEmpty(x, true, 0);
                      if (x1 == -1) {
                          return null;
                      }
                      int x2 = skipEntity(x1, true, 1);
                      if (x2 == -1) {
                          x2 = w;
                      }
                      x = x2;
                      int y1 = skipEmpty(0, false, 0);
                      if (y1 == -1)
                          return null;
                      int y2 = skipEntity(y1, false, 1);
                      if (y2 == -1)
                          y2 = h;
                      return ia.clone(x1, y1, x2 - x1, y2 - y1);
                  }
                  public Object next() {
                      ImageData temp = next;
                      next = null;
                      return temp;
                  }
                  public void remove() {
                  }
              }
              ImageData clone(int x, int y, int w0, int h0) {
                  ImageData ia = new ImageData();
                  ia.w = w0;
                  ia.h = h0;
                  ia.data = new int[ia.h][ia.w];
                  for (int i = 0; i < h0; i++) {
                      for (int j = 0; j < w0; j++) {
                          ia.data[i][j] = data[i + y][j + x];
                      }
                  }
                  return ia;
              }
              public void show() {
                  System.out.println();
                  for (int i = 0; i < h; i++) {
                      for (int j = 0; j < w; j++) {
                          System.out.print((data[i][j] == 1 ? "1" : " ") + "");
                      }
                      System.out.println();
                  }
                  System.out.println();
              }
              public int hashCode() {
                  int code = w ^ h;
                  int count = 0;
                  for (int i = 0; i < h; i++) {
                      for (int j = 0; j < w; j++) {
                          if (data[i][j] == 1)
                              count++;
                      }
                  }
                  code ^= count;
                  return code;
              }
              public boolean equals(Object obj) {
                  if (this == obj) {
                      return true;
                  }
                  if (obj instanceof ImageData) {
                      ImageData o = (ImageData) obj;
                      if (o.h != h)
                          return false;
                      if (o.w != w)
                          return false;
                      for (int i = 0; i < h; i++) {
                          for (int j = 0; j < w; j++) {
                              if (o.data[i][j] != data[i][j])
                                  return false;
                          }
                      }
                      return true;
                  } else {
                      return false;
                  }
              }
              public static ImageData[] decodeFromFile(String path) throws IOException {
                  BufferedReader reader = new BufferedReader(new FileReader(
                          new File(path)));
                  String line;
                  ArrayList list = new ArrayList();
                  while ((line = reader.readLine()) != null) {
                      ImageData ia = decode(line);
                      if (ia != null) {
                          list.add(ia);
                      }
                  }
                  return (ImageData[]) list.toArray(new ImageData[0]);
              }
              public static ImageData decode(String s) {
                  String[] ss = s.split("\\,", 4);
                  if (ss.length != 4)
                      return null;
                  if (ss[0].length() != 1)
                      return null;
                  ImageData ia = new ImageData();
                  ia.code = ss[0].charAt(0);
                  ia.w = Integer.parseInt(ss[1]);
                  ia.h = Integer.parseInt(ss[2]);
                  if (ss[3].length() != ia.w * ia.h) {
                      return null;
                  }
                  ia.data = new int[ia.h][ia.w];
                  for (int i = 0; i < ia.h; i++) {
                      for (int j = 0; j < ia.w; j++) {
                          if (ss[3].charAt(i * ia.w + j) == '1') {
                              ia.data[i][j] = 1;
                          } else {
                              ia.data[i][j] = 0;
                          }
                      }
                  }
                  return ia;
              }
              public String encode() {
                  StringBuffer sb = new StringBuffer();
                  sb.append(code).append(",");
                  sb.append(w).append(",");
                  sb.append(h).append(",");
                  for (int i = 0; i < h; i++) {
                      for (int j = 0; j < w; j++) {
                          if (data[i][j] == 1) {
                              sb.append('1');
                          } else {
                              sb.append('0');
                          }
                      }
                  }
                  return sb.toString();
              }
          }
          //像素過濾接口
          package pay365;
          public interface Filter {
             
              void doFilter(int[][] data);
          }
          //
          package pay365;
          public abstract class AbstractFilter  implements Filter {
              public void doFilter(int[][] data) {
                  int h = data.length;
                  if (h<=0)
                      return;
                  int w = data[0].length;
                  if (w<=0)
                      return ;
                  for(int i=0;i<h;i++) {
                      for(int j=0;j<w;j++) {
                          data[i][j] = filter(data[i][j]);
                      }
                  }
              }
             
              protected abstract int filter(int p);
          }
          //過濾csdn驗證碼的過濾器
          package pay365;
          public class CsdnFilter extends AbstractFilter {
              protected int filter(int p) {
                  return isNotWhite(p)?1:0;
              }
              private boolean isNotWhite(int p) {
                  boolean b = (p & 0x0ff) == 255 && (p >> 8 & 0x0ff) == 255
                          && (p >> 16 & 0xff) == 255;
                  return !b;
              }
          }
          //過濾前景色為白色的過濾器
          package pay365;
          public class WhiteFilter extends AbstractFilter {
             
              protected int filter(int p) {
                  if (isWhite(p)) {
                      return 1;
                  }
                  else {
                      return 0;
                  }
              }
              private boolean isWhite(int p) {
                  return (p & 0x0ff) > 240 && (p >> 8 & 0x0ff) > 240
                          && (p >> 16 & 0xff) > 240;
              }
          }
          //模板創建類
          package pay365;
          import java.awt.image.BufferedImage;
          import java.io.BufferedReader;
          import java.io.File;
          import java.io.InputStreamReader;
          import java.io.PrintWriter;
          import java.net.URL;
          import java.util.HashSet;
          import java.util.Iterator;
          import java.util.Set;
          import javax.imageio.ImageIO;
          public class TemplateCreator {
              /**
               * @param args
               */
              public static void main(String[] args) throws Exception {
                  Set set = new HashSet();
                 
                  String url = "http://passport.csdn.net/member/ShowExPwd.aspx";
                  String filterClazz = "pay365.CsdnFilter";
                  if (args.length>=1) {
                      url = args[0];
                  }
                  if (args.length>=2) {
                      filterClazz = args[1];
                  }
                  Filter csdnFilter = (Filter) Class.forName(filterClazz).newInstance();
                  for (int i = 1; i < 10; i++) {
                      URL u = new URL(url);
                      BufferedImage bi = ImageIO.read(u);
                      ImageData ia2 = new ImageData(bi,csdnFilter);
                      ImageData[] ii = ia2.split();
                      for (int x = 0; x < ii.length; x++) {
                          ImageData imageArr = ii[x];
                          set.add(imageArr);
                      }
                      // set.addAll(Arrays.asList(ia2.split()));
                  }
                  System.out.println(set.size());
                  for (Iterator iter = set.iterator(); iter.hasNext();) {
                      ImageData ele = (ImageData) iter.next();
                      ele.show();
                      System.out.print("char:");
                      String s = readLine();
                      if (s.length() == 1) {
                          ele.code = s.charAt(0);
                      }
                  }
                 
                  PrintWriter pw = new PrintWriter(new File("template.data"));
                  for (Iterator iter = set.iterator(); iter.hasNext();) {
                      ImageData ele = (ImageData) iter.next();
                      pw.println(ele.encode());
                  }
                  pw.flush();
                  pw.close();
              }
              private static BufferedReader reader = new BufferedReader(
                      new InputStreamReader(System.in));
              private static String readLine() {
                  try {
                      return reader.readLine();
                  } catch (Exception e) {
                      e.printStackTrace();
                      return "";
                  }
              }
          }

          //識別類
          package pay365;
          import java.awt.image.BufferedImage;
          import java.io.File;
          import java.io.IOException;
          import java.net.URL;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.Iterator;
          import javax.imageio.ImageIO;
          public class Recognize2 {
              static Filter filter;
              public static void main(String[] args) throws Exception {
                  if (args.length >= 1) {
                      url = args[0];
                  }
                  String filterClazz = "pay365.CsdnFilter";
                  if (args.length >= 2) {
                      filterClazz = args[1];
                  }
                  filter = (Filter) Class.forName(filterClazz).newInstance();
                  int total = 10;
                  int count = 0;
                  for (int i = 0; i < total; i++) {
                      boolean b = recognize(i);
                      if (b)
                          count++;
                  }
                  System.out.println("rate:" + (count * 1.0 / total * 100) + "%100");
              }
              /**
               * @throws IOException
               */
              private static boolean recognize(int num) throws IOException {
                  BufferedImage bi = ImageIO.read(new URL(url));
                  ImageIO.write(bi,"png",new File(num+".png"));
                  ImageData ia2 = new ImageData(bi, filter);
                  ImageData[] ii = ia2.split();
                  ArrayList list = new ArrayList();
                  ImageData[] template = ImageData.decodeFromFile("template.data");
                  HashMap map = new HashMap();
                  for (int i = 0; i < template.length; i++) {
                      map.put(template[i], new Character(template[i].code));
                  }
                  for (int x = 0; x < ii.length; x++) {
                      ImageData imageArr = ii[x];
                      if (imageArr.w > 15)
                          continue;
                      Character c = (Character) map.get(imageArr);
                      if (c != null) {
                          list.add(c);
                      }
                  }
                  String s = "";
                  System.out.print(num + ":");
                  for (Iterator iter = list.iterator(); iter.hasNext();) {
                      Character c = (Character) iter.next();
                      s += c;
                      System.out.print(c);
                  }
                  System.out.println();
                  return s.length() != 0;
              }
          }
           

          文章來源:http://spaces.msn.com/members/zzzhc/Blog/cns!1pPbKg7hHgS7AKKQm6CWG1ZQ!129.entry
          posted @ 2005-12-23 15:13 zzzhc 閱讀(986) | 評論 (3)編輯 收藏
          僅列出標題  
           
          主站蜘蛛池模板: 赤壁市| 大余县| 无锡市| 台中县| 聂荣县| 和硕县| 桦川县| 镇江市| 齐河县| 同心县| 如皋市| 信阳市| 江川县| 鄂伦春自治旗| 田阳县| 吉木萨尔县| 孟连| 海伦市| 教育| 修水县| 调兵山市| 依兰县| 桃园市| 乐昌市| 越西县| 延寿县| 固原市| 浦城县| 澄城县| 湛江市| 喀喇沁旗| 隆德县| 灯塔市| 同心县| 当阳市| 泉州市| 黄石市| 溆浦县| 东乡族自治县| 阿图什市| 临朐县|