<![CDATA[flyeruo.bokee.com]]> zh_cn Tue,22 Nov 2005 09:51:22 CST Fri,14 Jul 2006 17:44:24 CST http://www.bokee.com http://reg.bokee.com/account/web/img/logo.gif 博客网 http://www.bokee.com 您好,欢迎访问yunle110.bokee.com <![CDATA[Resin2学习笔记]]> .html  Resin2下载地址 http://www.caucho.com/download/index.xtp

  步骤:

  安装Resin

  tar xvfz resin-3.0.19.tar.gz   //解压缩Resin包

  mv resin-3.0.19 resin

  ./configure --with-java-home=/usr/java/jdk1.5.0_07/ --with-pxs=/usr/local/apache2/bin/apxs --with-apache=/usr/local/apache2   //配置一些信息,这样编译安装后,就和Apache整合起来了
  make
  make install

 

  配置 apache的httpd.conf

  按上面的操作安装后,httpd.conf最后面应该已经有以下一些简单的配置了

  LoadModule caucho_module /usr/local/apache2/modules/mod_caucho.so
  ResinConfigServer localhost 6802
  CauchoStatus yes

  可以在根据自己的需要配置一些 Location 如:

  <Location /servlet/*>
    SetHandler caucho-request 
  </Location>

 

  配置 resin/conf/resin.conf

  <host id="" root-directory=".">
      <!--
         - configures an explicit root web-app matching the
         - webapp's ROOT
        -->
      <web-app id="" document-directory="app路径"/>
  </host>

 

   通过 resin/bin/httpd.sh start  启动resion

   启动apache2

   基本上已经成功,不过遇到个问题,程序中通过 class.getClassLoader().getResourceAsStream("") 获得配置文件路径时,地址是 resin.home的地址,而不是应用的地址,看来resion.conf配置之后,发现有个地方可以配置,

    <class-loader>
        <compiling-loader path="/app/WEB-INF/classes"/>
        <library-loader path="/app/WEB-INF/lib"/>
     </class-loader>

修改后,在window的系统下可以认出,但是在liunx下还是错的,真恶心。最后使用

/usr/local/resin/bin/httpd.sh -classpath /app/WEB-INF/classes start 启动Resion 问题解决

 

修改 resion/bin/wrapper.pl

添加参数  $JAVA_ARGS="-Xms512M -Xmx512M -Xss640K -server -Dcom.sun.management.config.file=/usr/java/jdk1.5.0_07/jre/lib/management/management.properties"

配置 Dcom.sun.management.config.file 可以使程序可以通过 jdk1.5的jconsole监控

要监控生效,还需要修改 JAVA_HOME/jre/lib/management/management.properties 文件

开启 com.sun.management.snmp.port=<port-number>

开启 com.sun.management.jmxremote.ssl=false

修改 JAVA_HOME/jre/lib/management/jmxremote.access

在最后添加用户和该用户的权限

在mv JAVA_HOME/jre/lib/management/jmxremote.password.template  jmxremote.password

chmod 755 jmxremote.password

在里面增加新用户的密码

chmod 600 jmxremote.password  //这个非常关键

修改 /etc/hosts 文件 把 localhost 指成 外网地址 重启resion OK

 

  

 

 

 

]]>
Fri,14 Jul 2006 17:44:24 CST 0
<![CDATA[试用图片功能]]> .html 天气:       心情: 

   一直都想传些照片上去,可50MB的空间对我的电脑里面几百张相片来说,的确是很有点小。现在数码相机照的相片,一张基本上都有1MB以上,这50MB的空间,顶多只能传个50张。而且这里还限制了单张图片最大1MB,这样还有好多相片还不能传,真是恶心。更恶心的是我发现,这边就算传上去一张分辨率2560*1706、大小637KB的照片上去后,这边的系统,会对你的图片进行压缩,最后我看到的最大的图片只有480*320、大小134KB,但是我的空间还是减少了637KB。白白浪费了我500KB的空间,也就是我如果传了宽度一张大于480的照片,一点用都没有,只是在浪费空间。所以我们应该在上传时就把图片压缩到宽度只有480左右,这样就不会浪费空间了。

    不过几百张图片,都用PhotoShop处理一遍,简直是想要我的命。于是乎,在Google上去查了查,看有没有批量切图的工具,最后找到了一个“批量图片处理小助手”的绿色软件。下载地址: http://dl.itbulo.com/download.asp?ID=11846 ,用用感觉还不错,我的需求基本上都可以满足。不过还是有点不爽,我好歹也是个搞开发的,老用人家做的工具,的确不是很爽,所以决定自己写一个程序,来完成切图的工作。

     去网上查了查,看到 ImageMagick API的Java版实现 JMagick ,比较好用。于是在这两个网站,下载了最新版本的JMagick-6.2.6 和 ImageMagick-6.2.8,并且要求安装后,用了一下午的时间,终于实现了想要的功能,并且还在切好的图片上添加了签名。不过还是有一个问题一直都没有解决,不知道为什么JMagick好象对中文支持的很差,想使用一个中文的签名,试了N种编码就是不行,看它的源码应该是可以支持UTF-8的字符的,可是换成UTF-8的编码后就根本不显示,真是怪哉!

    现在已经近300张图片都传上去了,才只用了42MB的空间,真是爽死

 

 

下面是主要方法的代码:

 public void makeByJMagick(File souceFile, String tagerFileName) throws MagickException{  
      ImageInfo info  = new ImageInfo(souceFile.getAbsolutePath());   
      info.setCompression(CompressionType.JPEGCompression);  //压缩类别为JPEG格式
      info.setPreviewType(PreviewType.JPEGPreview);  //预览格式为JPEG格式
      info.setQuality(100); //设置图片的质量
      MagickImage image = new MagickImage(info);
      image.profileImage("*", null);
      MagickImage scaled = null;   
      BufferedImage imageOriginal = null;
      try {
          imageOriginal = ImageIO.read(souceFile);
      } catch (IOException e) {
         imageOriginal = null;
         e.printStackTrace();
      }      
      double width = imageOriginal.getWidth(null);    //得到图片的宽度
      double height = imageOriginal.getHeight(null);  //得到图片的高度
      double p = width/height;
      if(width > height){
         scaled = image.scaleImage(480, (int)(480/p)); //设置处理后图片的大小
      }
      else{
         scaled = image.scaleImage((int)(480*p), 480); //设置处理后图片的大小
      }   
      //添加边框
      scaled.setBorderColor(PixelPacket.queryColorDatabase("black"));   //设置边框颜色
      MagickImage borderedImage = scaled.borderImage(new Rectangle(0, 0, 1, 1)); //边框线的粗细        
    

      //在图片上添加签名
      DrawInfo   aInfo   =   new   DrawInfo(info);   
      aInfo.setFill(PixelPacket.queryColorDatabase("white"));  //签名的字体颜色         
      aInfo.setOpacity(0);  
      aInfo.setPointsize(14);  //字体大小
      aInfo.setFont("flyer");  //使用的字体, 这里是我用的是我自己修改的字体         
      aInfo.setText("Photo By Flyeruo.Bokee.com");   //签名文字         
      if(width > height){         
          aInfo.setGeometry("+" +(480-140)+"+"+(int)((480/p)-10));  //签名在图象上的位置
      }
      else{
          aInfo.setGeometry("+"+(int)((480*p)-140)+"+" +(480-10));  //签名在图象上的位置
      } 
      borderedImage.annotateImage(aInfo);        
      borderedImage.setFileName(tagerFileName);
      borderedImage.writeImage(info);   //写新图片

      borderedImage.destroyImages();
      image.destroyImages();
      image = null;
      scaled = null;
 }

]]>
Thu,22 Jun 2006 17:07:16 CST 0
<![CDATA[RSS遇到的问题]]> .html 天气:        心情:

  这两天被人告之,说网站输出的RSS有问题,找了个时间好好的研究了一下,发现有两个比较大的问题:

 1.RSS中有一些特殊的字符没有过滤,导致RSS抓去是解析失败.

 2.时间的格式不是标准的格式.

 第一个研究了一下,发现XML对字符还是有一些特定的范围,根据官方http://www.w3.org/TR/2004/REC-xml-20040204/上的说明:
   [2]    Char    ::=    #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

 做了一个的正则在RSS输出前过滤掉那些特殊字符,问题就可以解决了.

 

   Pattern xmlPattern = Pattern.compile("[\\u0000-\\u001F]|[\\uD800-\\uDFFF]|[\\uFFFE-\\uFFFF]");

  Matcher matcher = xmlPattern.matcher(xmlStr);         
   String str = matcher.replaceAll("");

 

 第二个好象是因为时间采用的是本地的时间,输出的时间中使用了中文,把代码改成下面的后,问题解决.

 Locale locale = Locale.US; 
    SimpleDateFormat frm = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz" , locale);

]]>
Wed,21 Jun 2006 09:42:23 CST 0
<![CDATA[prototype 1.2.0 的函数简介]]> .html
prototype 1.2.0 的函数简介
 函数名  解释  举例
 Element.toggle  两个Element交替隐藏显示  Element.toggle("div1","div2") -- 注意其中一个Element初试为隐藏
 Element.hide  隐藏多个Element  Element.hide("div1","div2",...) ...表示可以继续填写Element名称
 Element.show  显示多个Element  Element.show("div1","div2",...) ...表示可以继续填写Element名称
 Element.remove  删除多个Element  Element.remove("div1","div2",...) ...表示可以继续填写Element名称
 Element.getHeight  取得指定Element的高度  Element.getHeight("div1")
 Toggle.display  和Element.toggle相同  Toggle.display("div1","div2")
 Insertion.Before  在DIV前插入文字  Insertion.Before("div1","文字内容")
 Insertion.After  在DIV后插入文字  Insertion.After("div1","文字内容"")
 Insertion.Top  在DIV里最前插入文字  Insertion.Top("div1","文字内容")
 Insertion.Bottom  在DIV里最后插入文字  Insertion.Bottom("div1","文字内容")
 PeriodicalExecuter  以给定频率调用一段JavaScript  PeridicalExecutor(函数名称,1) 1--(1秒).
 $  取得一个Element, 相当于getElementById()  $("div1")
 Field.clear  清空一个输入框  Field.clear("textfield1")
 Field.focus  把焦点集中在输入框上  Field.focus("select1")
 Field.present  判断内容是否为空  alert(Field.present("textfield1"))
 Field.select  选择输入框的内容  Field.select("textfield1")
 Field.activate  把焦点集中在输入框上并选择输入框的内容  Field.activate("textfield1")
 Form.serialize  持续化函数,将form中所有的Element组织成特定字符串  Form.serialize("form1") 格式 ?aaa=xx&cc=xxx
 Form.getElements  取得表格内容为数组形式  Form.getElements("form1")
 Form.disable  disable表格所有内容  Form.disable("form1") (这个好象不work)
 Form.focusFirstElement  把焦点集中在表格第一个元素上  Form.focusFirstElement("form1")
 Form.reset  Reset表格  Form.reset("form1")
 Form.Element.getValue   取得表格输入框的值  Form.Element.getValue("text1")
 Form.Element.serialize  把表格中输入框内容转化成string  Form.Element.serialize("text1") 格式 aaa=xx
 $F  等同于Form.Element.getValue()  $F("text1")
 Effect.Highlight  高亮特效.  Effect.Highlight("text1")
 Effect.Fade  褪色特效  
 Effect.Scale  放大缩小(百分比)

 Effect.Scale("text1", 200)
 这里200 = 200%, 即两倍

 Effect.Squish  消失特效.文字缩小后消失  Effect.Squish("text1")
 Effect.Puff  消失特效.文字放大后消失  Effect.Puff("text1")
 Effect.Appear  出现特效  
 Effect.ContentZoom  ZOOM特效.  
 Ajax.Request  传送Ajax请求给服务器  Ajax.Request("http://server/s.php")
 Ajax.Updater  传送Ajax请求给服务器并用答复的结果更新指定的Container  Ajax.Updater("text1","http://server/s.php")

]]>
Fri,02 Jun 2006 15:51:02 CST 0