2006年09月27日

昨天9月26日,是我入职的第三个月。
回首3个月的时间,好快…
学到的东西感觉比4年还多。最大的感触就是,上班下班的时候怎么tmd那么拥挤阿!!!
没有亲身经历过每天早上和下班的时候挤公交车的场景的人是无法想象那样痛苦的感觉的。一个小小的巴士,差不多要塞上100个人,车厢内的拥挤程度,气味浓度,绝对比养鸡场的鸡舍还差劲。
技术上的东西,也学到了不少,从刚开始对jsp一窍不通,到现在的还成。我感觉也算我学得比较快的了。毕竟以前我根本没有接触过jsp。还有一点就是ajax的学习,很感谢我的leader的指点。
游戏方面,通过我的努力终于摆脱了长宽的纠缠,换上了还成的adsl。顺畅多了。
昨天,也就是昨天,经历了第一次的裁员,对我的震撼,无法表达。
我的想法是,多学点东西,裁就裁吧,大不了再找个。无所谓了。

2006年09月14日

import java.io.*;
import java.lang.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
public class ResizeImg
{
 private String srcFile;
 private String destFile;
 private int w;
 private int h;
 private Image img;
 
 /**
  * 构造函数
  * @param filename 原图片名称 
  * @param resizefilename 新图片名称
  * @throws IOException
  */
 public ResizeImg(String filename,String resizefilename) throws IOException
 {
  File _file = new File(filename); //读入文件
     this.srcFile = _file.getName();
     this.destFile = resizefilename;
     img = javax.imageio.ImageIO.read(_file); //构造Image对象
     w = img.getWidth(null); //得到源图宽
     h = img.getHeight(null); //得到源图长
 }
 /**
  * 缩略图–剪切方法
  * @param x  新图的长
  * @param y  新图的高
  * @return
  */public boolean cutImg(int x, int y)
   {
   float factor = getCutFactor(x,y);
   if((int)(factor)>1)
    factor =1;
   int new_x = (int)(w*factor);
   int new_y = (int)(h*factor);
   if(w<x)
    new_x = w;
   if(h<y)
    new_y = h;
  
   int start_x = (x-new_x)/2;
   int start_y = (y-new_y)/2;
  
   BufferedImage _image = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
    Graphics g = _image.getGraphics();
    g.setColor(Color.WHITE);
    g.fillRect(0,0,x,y);
    //System.out.println(factor);
    //System.out.println(w+"-"+h+"-"+new_x+"-"+new_y+"-"+start_x+"-"+start_y);
    //以原始大小在新图上画旧图,以偏移坐标为偏移,从而得到旧图的中间部分
    if(g.drawImage(img,start_x,start_y,new_x,new_y,null))
    {
     FileOutputStream out;
     try {
     out = new FileOutputStream(destFile);
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
     try {
      encoder.encode(_image);
      out.close();
     } catch (ImageFormatException e) {
      // TODO 自动生成 catch 块
      e.printStackTrace();
      return false;
     } catch (IOException e) {
      // TODO 自动生成 catch 块
      e.printStackTrace();
      return false;
     } //近JPEG编码
     
    } catch (FileNotFoundException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
     return false;
    } //输出到文件流
    }
    else
    {
     return false;
    }
   return true;
    
   }
  /**缩略图-压缩方法
  * @param x
  * @param y
  * @return
  */
 public boolean resize(int x,int y)
  {
   float factor = getFactor(x,y);
   int new_x = (int)(w*factor);
   int new_y = (int)(h*factor);
   if(w<x)
    new_x = w;
   if(h<y)
    new_y = h;
   int start_x = (x-new_x)/2;
   int start_y = (y-new_y)/2;
  
  
   BufferedImage _image = new BufferedImage(x,y,BufferedImage.TYPE_INT_RGB);
    Graphics g = _image.getGraphics();
    g.setColor(Color.WHITE);
    g.fillRect(0,0,x,y);
    //以new_x,new_y为大小在x,y大的图片上,从start_x,start_y开始画图
    if(g.drawImage(img,start_x,start_y,new_x,new_y,null))
    {
     FileOutputStream out;
     try {
     out = new FileOutputStream(destFile);
     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
     try {
      encoder.encode(_image);
      out.close();
     } catch (ImageFormatException e) {
      // TODO 自动生成 catch 块
      e.printStackTrace();
      return false;
     } catch (IOException e) {
      // TODO 自动生成 catch 块
      e.printStackTrace();
      return false;
     } //近JPEG编码
     
    } catch (FileNotFoundException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
     return false;
    } //输出到文件流
    }
    else
    {
     return false;
    }
   return true;
  }
  /**返回小的比例因子
  * @param x
  * @param y
  * @return
  */
 public float getFactor(int x,int y)
  {
   if((w/x)>(h/y))
    return (float)x/w;
   else
    return (float)y/h;
  }
  /**
   * 返回大的比例因子
   * @param x
   * @param y
   * @return
   */public float getCutFactor(int x,int y)
  {
   if((w/x)>(h/y))
    return (float)y/h;
   else
    return (float)x/w;
  }
   /**
    * 获取目标文件名
    * getDestFile
    */
   public String getDestFile() {
     return destFile;
   }
   /**
    * 获取图片原始宽度
    * getSrcWidth
    */
   public int getSrcWidth() {
     return w;
   }
   /**
    * 获取图片原始高度
    * getSrcHeight
    */
   public int getSrcHeight() {
     return h;
   }
   public static void main(String[] args)
   {
    ResizeImg ri = null;
  try {
   ri = new ResizeImg("RR1_T7DeWDLqELA0.jpg","RR1_T7DeWDLqELA0_thumbnail.jpg");
   ri.resize(500,500);
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
   
   }
}

package mop.gamespace.dkp;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;

import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**parseobj class
 * @author Administrator
 *
 */
public class ParseRaidTracker {
 
 private String RaidTime;
 
 private ArrayList joinXml;

 private ArrayList leaveXml;

 private ArrayList lootXml;
 
 private String savefilename = "./temp.xml";

 public ParseRaidTracker() {

  RaidTime = new String();
  joinXml = new ArrayList();
  leaveXml = new ArrayList();
  lootXml = new ArrayList();
 }
 
 /**parseObjFromStr
  * @param str
  * @return ArrayList
  */
 public ArrayList parseObjFromStr(String str)
 {
  String checkstr;
  checkstr = "<?xml version=\"1.0\" encoding=\"GBK\"?>";
  if(str.indexOf(checkstr)== -1)
   str = checkstr +str;
  File file = new File(savefilename);
  BufferedWriter bw = null;
  try {
   bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
   bw.write(str);
   bw.flush();
  } catch (FileNotFoundException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  } catch (IOException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  finally
  {
   try {
    if(bw != null)
    {
     bw.close();
    }
   } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
   }
   
  }
  return parseObjFromFile(savefilename);
  
 }
 /**parseObjFromFile
  * @param filename
  * @return ArrayList
  */
 public ArrayList parseObjFromFile(String filename) {
  ArrayList returnAL = new ArrayList();
  try {
   SAXReader saxReader = new SAXReader();
   Document document = saxReader.read(new File(filename));
   Element ee = document.getRootElement();

   Iterator t;
   Element element;
   t = ee.elementIterator("key");
   element = (Element) t.next();
   RaidTime = element.getStringValue();
   t = ee.elementIterator("Join");
   element = (Element) t.next();
   joinXml = parsejoinElement(element);
   t= ee.elementIterator("Leave");
   element = (Element) t.next();
   leaveXml = parseleaveElement(element);
   t = ee.elementIterator("Loot");
   element = (Element) t.next();
   lootXml = parselootElement(element);
   
   returnAL.add(RaidTime);
   returnAL.add(joinXml);
   returnAL.add(leaveXml);
   returnAL.add(lootXml);

  } catch (DocumentException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  } finally {
   
  }
  return returnAL;

 }

 /**parsejoinElement
  * @param _element
  * @return ArrayList
  */
 public ArrayList parsejoinElement(Element _element)
 {
  ArrayList eleArr = new ArrayList();
  Element elementKey;
  Element element;
  JoinPlayer obj;
  JoinPlayer tmpobj;
  Iterator tmpIterator;
  boolean flg = true;
  int j = 0;
  for (Iterator i = _element.elementIterator(); i.hasNext();)
  {
   flg = true;
   elementKey = (Element) i.next();
   obj = new JoinPlayer();
   tmpIterator = elementKey.elementIterator("player");
   element = (Element) tmpIterator.next();
   obj.setplayer(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("race");
   element = (Element) tmpIterator.next();
   obj.setrace(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("class");
   element = (Element) tmpIterator.next();
   obj.setclass(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("level");
   element = (Element) tmpIterator.next();
   obj.setlevel(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("time");
   element = (Element) tmpIterator.next();
   obj.settime(element.getStringValue().trim().replace("\’","\\\’"));
   for(j=0;j<eleArr.size();j++)
   {
    tmpobj = new JoinPlayer();
    tmpobj = (JoinPlayer)eleArr.get(j);
    if(tmpobj.getplayer().equals(obj.getplayer()))
    {
     flg = false;
     break;
    }
   }
   if(flg)
    eleArr.add(obj);
  }
  return eleArr;

 }
 /**parseleaveElement
  * @param _element
  * @return ArrayList
  */
 public ArrayList parseleaveElement(Element _element)
 {
  ArrayList eleArr = new ArrayList();
  Element elementKey;
  Element element;
  LeavePlayer obj;
  Iterator tmpIterator;

  for (Iterator i = _element.elementIterator(); i.hasNext();)
  {
   elementKey = (Element) i.next();
   obj = new LeavePlayer();
   tmpIterator = elementKey.elementIterator("player");
   element = (Element) tmpIterator.next();
   obj.setplayer(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("time");
   element = (Element) tmpIterator.next();
   obj.settime(element.getStringValue().trim().replace("\’","\\\’"));

   eleArr.add(obj);
  }
  return eleArr;

 }
 /**parselootElement
  * @param _element
  * @return ArrayList
  */
 public ArrayList parselootElement(Element _element)
 {
  ArrayList eleArr = new ArrayList();
  Element elementKey;
  Element element;
  LootItem obj;
  Iterator tmpIterator;

  for (Iterator i = _element.elementIterator(); i.hasNext();)
  {
   elementKey = (Element) i.next();
   obj = new LootItem();
   tmpIterator = elementKey.elementIterator("ItemName");
   element = (Element) tmpIterator.next();
   obj.setitemname(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("ItemID");
   element = (Element) tmpIterator.next();
   obj.setitemid(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("Color");
   element = (Element) tmpIterator.next();
   obj.setcolor(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("Count");
   element = (Element) tmpIterator.next();
   obj.setcount(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("Player");
   element = (Element) tmpIterator.next();
   obj.setplayer(element.getStringValue().trim().replace("\’","\\\’"));
   tmpIterator = elementKey.elementIterator("Time");
   element = (Element) tmpIterator.next();
   obj.settime(element.getStringValue().trim().replace("\’","\\\’"));
   
   eleArr.add(obj);
  }
  return eleArr;

 }

}

2006年09月09日

这周的工作忙碌而混乱…
不过,感觉学到了不少东西。
       首先,java方面:总的感觉是,第一次感觉到了面向对象编程的巨大的优势,项目越大优势越明显。虽然,面向对象的基础还是基于面向过程的。但是在比较大的项目中,面向对象的方法就表现出了他对对象操作的方便性和安全性,二次开发的便捷性的巨大优势。开发中,明显感觉自己的思想比较混乱,理不清一些东西,总是搞得自己晕头转向的,犯一些很小很小的错误又得花很长很长的时间去解决。

       然后,是js方面的突飞猛进。虽然说以前开发的时候就用到了ajax技术,但这次用到的更多,学习得更加具体,对innerHTML的改变,getElementByID的获取,对具体对象的具体操作,增加子对象,访问父对象数据库方面需要的数据,等等。

       其次,对数据库的学习更加深入。第一次学习了如何联合查询,以前都是傻乎乎的一个表一个表的查询,现在知道,可以把几个相关表联合起来一起获得需要的数据的。。。特别今天还学习到了数据库中对日期的操作,比如说,RaidDate + Interval 14 day >now() 就是说:选出2周以内的Raiddate数据。distinct的用法等等

         最后,总结一周的工作,学习到了不少,但是比较乱,后面加油。

2006年09月01日

需要些钱去干些事情。

但是,现在没有钱,去那里弄呢?贷款。

但是去了好几家银行问了,都没有适合我的小额贷款,我该怎么办呢…

今天才知道,return不要写在finally里,好无知。

受教了…

2006年08月31日

这周的编码量在5k以上。

没有什么难点基本上是些重复性的劳动,555,学不到东西。

不过还是有2个地方学到了不少东西的:

1、分页导航条,参考了discuz的。

2、图片的缩略功能,这个东西还是比较麻烦的,花了差不多10+工作小时。

制作了2种缩略功能:1、以大比例缩放,不足的地方补白。

                                  2、以小的比例缩放,多余的地方切割。

缩略图关键在于,计算好新图的大小和开始画的坐标就ok!

2006年08月27日

千呼万唤始出来,犹抱琵琶半遮面。

不是很恰当。大概闲了3个星期左右吧,终于开始做项目了,闲得我有点恐慌。

这次开发时间比较充足,我就好好向2位学习学习。

这次,尽量把代码写在了java类中…555,上次都写页面了。

不过这才是我第二次作jsp开发,需要学习的还很多。我会努力的。

基本没什么难点。老大要求用ajax就顺带学习ajax了…

周末学习了下discuz的navigator。很好。受教了。

下周继续开发,在开发中努力需求突破。

2006年08月20日

写了一个解析特定xml文件的类

很特殊,只能去解析特定的文件,wow的插件RaidTracker生成的类XML代码

很形象的感受了对象编程,4个class:parse Class、Join Class、Leave Class、Loot Class。

差不多花了一天的时间写…写起来的感觉是在设计的时候需要花比较多的时间去思考:如何创建他们,以及他们之间的联系,到真正写代码的时候花不了太多的时间。

很明显和高手的差距还很大,我会努力的。

2006年08月17日

dom4j这东西是java的一个架包,由XXorg开发的,我也不知道…

写在前面…

Welcome to dom4j!

dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP.

dom4j 是一种使用简单,开源的使用了java框架收集技术和全面支持DOM,SAX和JAXP,工作在java平台的XML,XPath和XSLT的工具

。。。。以上为我翻译

Dom4j是一个易用的、开源的库,用于XMLXPathXSLT。它应用于Java平台,采用了Java集合框架并完全支持DOMSAXJAXP

。。。。以上为别人翻译
我使用了它来解析xml文件。
部分代码:
ee是一个Element

for ( Iterator i = ee.elementIterator(); i.hasNext(); ) {

          Element element = (Element) i.next();
          s1 = element.getName();
          if(s1.equals("Join"))
          {
           for(Iterator ii = element.elementIterator(); ii.hasNext();)
           {
            Element eee = (Element) ii.next();
            for(Iterator iii = eee.elementIterator(); iii.hasNext();)
            {
             Element e4 = (Element) iii.next();
             s3 = e4.getName();
             System.out.println(s3+"::"+e4.getStringValue());
            }
            s2 = eee.getName();
            System.out.println(s2);
           }
          }
          // do something
          System.out.println(s1);
          //System.out.println(element.getData().toString());
       }