随笔-57  评论-129  文章-0  trackbacks-0
 
面试官:熟悉哪种语言
应聘者:Java。

面试官:你会Hibernate吗
应聘者:知道,动物冬天经常Hibernate,但我从来不冬眠

面试官:tomcat了解么
应聘者:小时看过。现在也喜欢看

面试官:用过 apache 的东西吗
应聘者:没有,我没开过也没座过直升机。

面试官:知道什么叫class么
应聘者:不知道。

面试官:知道什么叫类么
应聘者:我这人实在,工作努力,不知道什么叫累

面试官:知道什么是接口吗?
应聘者:我这个人工作认真。从来不找借口偷懒

面试官:知道什么是package?
应聘者:不知道。

面试官:知道什么是包?
应聘者:我这人实在  平常不带包 也不用公司准备了

面试官:知道什么叫对象么?
应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。。

面试官:知道什么是继承么
应聘者:我是孤儿没什么可以继承的

面试官:你知道google是干什么的么?
应聘者:等我先百度一下。


posted @ 2007-05-19 11:27 金大为 阅读(172) | 评论 (0)编辑 收藏
最近在搞JSI 的重构,少来冒泡了。
发一个中午的刚用到的小技巧:

在关机效果实现上,现在一般根据浏览器特征分别使用 虑镜/样式/图片 去模拟。

其中Opera是不支持网页透明的,只能用png的alpha透明模拟。
所以,我们需要一张特别的小图片。一个象素,alpha透明。

但是这个单象素图片的出现,感觉有点怪怪的,而且当网速很慢的时候,装载这个小图片还会延迟,效果不好。

不过,Opera的另外一个特性,可以避免这个问题:data:协议的支持。

对于这种小图片,完全可以编码到样式里面

background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mM4ffp0AwAHqALiYeNxSgAAAABJRU5ErkJggg==)


好了,如此一来,关机效果的实现,就没有图片这个累赘了。


图片的生成:

图片的生成,浪费我一个中午的时间:(
开始本想找个软件做掉,最后没发现一个如意的,干脆,自己看看api,自己写了一下:
代码如下:
    public static void main(String[] args) throws IOException {
        BufferedImage image 
= new BufferedImage(11,
                BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d 
= image.createGraphics();
        
// RGBA #cccccc80
        g2d.setColor(new Color(0xcc0xcc0xcc0x80));
        g2d.fillRect(
0011);
        g2d.dispose();
        IIOImage iioImage 
= new IIOImage(image, nullnull);
        ImageTypeSpecifier type 
= ImageTypeSpecifier
                .createFromRenderedImage(image);
        ImageWriter writer 
= (ImageWriter) ImageIO.getImageWriters(type, "png")
                .next();
        ByteArrayOutputStream out 
= new ByteArrayOutputStream();
        writer.setOutput(ImageIO.createImageOutputStream(out));
        writer.write(
null, iioImage, null);
        BASE64Encoder encoder 
= new BASE64Encoder();
        String result 
= encoder.encode(out.toByteArray()).replaceAll("[\r\n]",
                
"");
        System.out.println(
"data:image/png;base64," + result);
    }


需要其他颜色,自己修改一下代码即是。
posted @ 2007-05-18 15:30 金大为 阅读(1299) | 评论 (1)编辑 收藏
第一次见到媒体的关注,精神为之一振。
^_^

一定好好做,不让关注她的人群失望:)
posted @ 2007-05-16 13:09 金大为 阅读(140) | 评论 (0)编辑 收藏
想想,自己从事JSI的开发已经一年多了。
一直没能找到合适的伙伴,就这么一个人走过来。

说累,主要不是身体上的累,时间自己可以控制。

一年前,无意间有了个自以为可以的想法,投入了一年多的时间(包括在家休养的半年),产品却一直没能正式发布,这个时候才体会到理想和现实的距离;
加上年龄和身体的因素,真想放下,又放不下。不想看着自己依然认为不错的想法,就这么湮灭。也不想看着自己一年多的心血付诸东流。

有时候,不想再忍受这种寂寞了,想找个人去接手它,可是自己的圈子里更本就又没有合适的人选,这个时候才发现,自己是多么的孤独。
偶尔碰见以前的朋友,上前一问,忙啊,无暇顾及,也难怪,干我们这行的有几个闲人;
偶尔碰到个有空的,这年月,没钱的事情谁干啊。开源的东西,拿来用用就是,何必自己这么投入。


尝试着到网上去宣传宣传,然而,同样没什么希望。
甚至连你的宣传帖子也当作广告处理了;
也难怪,天下熙熙,皆为利来,天下攘攘,皆为利往。
人家媒体的版面寸块寸金。你一个蝇头小生,在我们这里大肆宣传一个不知所云的东西,是何居心。


有人说,要为自己的行为付出代价,可我今天,为自己的想法付出了代价。
不要胡思乱想了,小小程序员,要为自己的思想付出代价的。
posted @ 2007-05-14 13:10 金大为 阅读(308) | 评论 (10)编辑 收藏

发布了一段时间JSI2预览版了,下一步准备JSI2Alpha版开发。
主要任务有:

1、优化依赖管理模块。
2、完善日志输出功能。
3、清理现有bug。

预计需要3周左右时间。

按需装载的优化、JSDoc的完善、将推后。

示例装饰器将暂时停止更新。
posted @ 2007-05-13 13:14 金大为 阅读(75) | 评论 (0)编辑 收藏

Spinner(微调器)装饰器开发:


组件介绍:


仿照 window时间日期管理中,年份调节的控件,原型是一个文本输入筐,一般用于数字输入。筐后有上下微调按钮,用于增减控件值。

这种控件在
backbase框架中也有出现,JSIspinner就是仿照其外形设计。


显示效果:




在线演示见:http://www.xidea.org/project/jsi/decorator/spinner.html

代码:


org/xidea/decorator/spinner.js


 


  1. /** 

  2.  * @public 

  3.  * @decorator spinner 

  4.  * @attribute start 

  5.  * @attribute end  

  6.  * @attribute step 

  7.  */  

  8. function Spinner(){  

  9. }  

  10.   

  11. Spinner.prototype = new Decorator();  

  12. Spinner.prototype.decorate = function(){  

  13.   this.start = parseInt(this.attributes.get('start'))  

  14.   this.end = parseInt(this.attributes.get('end'))  

  15.   this.step = parseInt(this.attributes.get('step'))||1;  

  16.   var container = this.getContainer();  

  17.   var table = document.createElement('table');  

  18.   var outerDiv = document.createElement("div");  

  19.   var upDiv = document.createElement("div");  

  20.   var downDiv = document.createElement("div");  

  21.   table.border = 0;  

  22.   table.cellSpacing=0;  

  23.   table.cellPadding=0;  

  24.   container.insertBefore(table,container.firstChild);  

  25.   var row = table.insertRow(0);  

  26.   var cell = row.insertCell(0);   

  27.   var ele = table.nextSibling;  

  28.   do{  

  29.     container.removeChild(ele);  

  30.     cell.appendChild(ele);  

  31.   }while(ele = table.nextSibling)  

  32.   cell = row.insertCell(1);  

  33.   cell.style.verticalAlign = 'middle',  

  34.   cell.appendChild(outerDiv);  

  35.   outerDiv.style.position = 'relative'  

  36.   outerDiv.style.top = '0px'  

  37.   outerDiv.style.left = '0px'  

  38.   outerDiv.style.height = '0px'  

  39.   outerDiv.style.width = '0px'  

  40.   outerDiv.style.zIndex= 2;  

  41.   //outerDiv.style.border= "solid 1px red";  

  42.   outerDiv.appendChild(upDiv);  

  43.   initializeHandleDiv(this,upDiv);  

  44.   outerDiv.appendChild(downDiv);  

  45.   initializeHandleDiv(this,downDiv);  

  46.   //alert(this.start+'/'+this.end+'/'+this.step+':'+(this.start<0))  

  47. }  

  48. Spinner.prototype.jump = function(offset){  

  49.   if(offset){  

  50.     var input = this.getContainer().getElementsByTagName('input')[0];  

  51.     var value = value = input.value * 1 + offset*this.step;  

  52.     if(value>this.end){  

  53.       value=this.end;  

  54.     }else if(value<this.start){  

  55.       value = this.start;  

  56.     }  

  57.     input.value = value;  

  58.   }  

  59. }  

  60. /** 

  61.  * @internal 

  62.  */  

  63. var imagePath = 'url("'+this.scriptBase + 'spinner.gif")';  

  64. /** 

  65.  * @internal 

  66.  */  

  67. function initializeHandleDiv(spinner,handleDiv){  

  68.   var position = 0;  

  69.   var style = handleDiv.style;  

  70.   style.backgroundImage=imagePath;  

  71.   style.position='absolute';  

  72.   style.width='12px';  

  73.   style.height='8px';  

  74.   style.margin='1px';  

  75.   style.left = '-14px'  

  76.   style.overflow = 'hidden'  

  77.   if(handleDiv.previousSibling){  

  78.     style.backgroundPosition = '0 -32px';  

  79.     position = -32;  

  80.     style.top = '0px'  

  81.   }else{  

  82.     style.top = '-10px'  

  83.   }  

  84.   handleDiv.onmouseout = buildMouseHandle(spinner,position,0)  

  85.   position -= 8;  

  86.   handleDiv.onmouseup=handleDiv.onmouseover = buildMouseHandle(spinner,position,0)  

  87.   position -= 8;  

  88.   handleDiv.onmousedown = buildMouseHandle(spinner,position,0)  

  89.   handleDiv.onclick = buildMouseHandle(spinner,position,position<-32?-1:1)  

  90. }  

  91. /** 

  92.  * @internal 

  93.  */  

  94. function buildMouseHandle(spinner,imagePosition,offset){  

  95.   imagePosition = '0 '+imagePosition+'px';  

  96.   return function(){  

  97.     this.style.backgroundPosition = imagePosition;  

  98.     spinner.jump(offset);  

  99.   }  

  100. }  











使用方法见在 基于FCKEditor 开发JSI Editor装饰器已有详细介绍,不再叙述。


见:http://www.javaeye.com/article/79063




评论也很精彩,请点击查看精彩评论。欢迎您也添加评论。查看详细 >>





JavaEye推荐
杭州:外企高薪聘请系统维护工程师(10-15K)
杭州:国内大型网络公司高薪招聘系统架构师,资深JAVA开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
广州:急招 JAVA开发经理/系统架构师(10-15K/月)也招聘java程序员



文章来源: http://jindw.javaeye.com/blog/79064
posted @ 2007-05-12 11:17 金大为 阅读(65) | 评论 (0)编辑 收藏

基于FCKEditor 开发JSI Editor装饰器:




组件介绍:


JSI Editor装饰器,是一个用于可视化html编辑的组件(当能,将来也可考虑其他格式,如ubb),在标记设计上,参照Mozilla XUL的editor标记。而具体实现上,使用FCKEditor。



效果:




 


装饰器实现代码:



 


  1. /** 

  2.  * @public 

  3.  * @decorator editor 

  4.  * @attribute src 

  5.  * @attribute contenttype text/html(默认值) text/ubb .... 

  6.  */  

  7. function Editor(){  

  8.   

  9. }  

  10. Editor.prototype = new Decorator();  

  11. Editor.prototype.decorate = function(){  

  12.   var container = this.getContainer();  

  13.   var textarea = container.getElementsByTagName('textarea')[0];  

  14.   var fckEditor = new FCKeditor(textarea.name);  

  15.   var src = this.attributes.get('src');  

  16.   if(src){  

  17.     new Request(src,  

  18.     {asynchronous:true}).setFinishListener(function(){  

  19.       textarea.value = this.getText()||textarea.value;  

  20.       fckEditor.ReplaceTextarea();  

  21.     }).send();  

  22.   }else{  

  23.     fckEditor.ReplaceTextarea();  

  24.   }  

  25. }  







装饰器定义代码:


装饰器定义其实就是普通类库定义,没有任何区别。

 


  1. //选自org/xidea/decorator/__$package.js,删除了无关信息  

  2. this.addScript("editor.js",'Editor');  

  3. this.addObjectDependence("*",  

  4.     "js.html.Decorator",true);  

  5. this.addObjectDependence("Editor",  

  6.     "js.io.Request",false);  

  7. this.addObjectDependence("Editor",  

  8.     "net.fckeditor.FCKeditor",false);   









使用方法:


使用JSI装饰器,需要在页面上做如下处理:


  1. 增加命名空间(xmlns:d="http://www.xidea.org/taglib/decorator")

  2. 加入JSI引导脚本(<script src="../scripts/boot.js"></script>)

  3. 加入所用装饰器的标记


简单示例:

 


  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  

  3. <html xmlns="http://www.w3.org/1999/xhtml"  

  4.   xmlns:d="http://www.xidea.org/taglib/decorator" xml:lang="zh_CN"  

  5.   lang="zh_CN">  

  6. <head>  

  7. <script src="../scripts/boot.js"></script>  

  8. <title>Editor 示例</title>  

  9. </head>  

  10. <body>  

  11. <d:editor>  

  12.   <textarea name='editorText'>  

  13.    待编辑html:<br>  

  14.   This is some <strong>sample text</strong><br>  

  15.   You are using <a href="http://www.fckeditor.net/">FCKeditor</a>.<br>  

  16.   </textarea>  

  17. </d:editor>  

  18. </body>  

  19. </html>  





总结:


JSI 装饰器是一个新事物,如果要一切从零开始,是一个艰巨的任务;但是,借助于JSI无侵入的特性,我们可以集百家之长。在前人丰厚的积累上,创造出更加简单易用的ui 组件集。



海纳百川,有容乃大。




评论也很精彩,请点击查看精彩评论。欢迎您也添加评论。查看详细 >>





JavaEye推荐
杭州:外企高薪聘请系统维护工程师(10-15K)
杭州:国内大型网络公司高薪招聘系统架构师,资深JAVA开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
广州:急招 JAVA开发经理/系统架构师(10-15K/月)也招聘java程序员



文章来源: http://jindw.javaeye.com/blog/79063
posted @ 2007-05-12 10:51 金大为 阅读(86) | 评论 (0)编辑 收藏

<script>

var test1 = 1;

function test1(){};//函数申明不能覆盖变量申明?

alert(test1);

</script>

<script>

var test2 = 1;

eval('function test2(){};');

alert(test2);//函数申明怎么又覆盖了变量申明?

</script>




评论也很精彩,请点击查看精彩评论。欢迎您也添加评论。查看详细 >>

推荐相关文章:
  ext应用载图,PP几张~
  云想衣裳花想容--JSI组件模型介绍(一)




JavaEye推荐
杭州:外企高薪聘请系统维护工程师(10-15K)
杭州:国内大型网络公司高薪招聘系统架构师,资深JAVA开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
广州:急招 JAVA开发经理/系统架构师(10-15K/月)也招聘java程序员



文章来源: http://jindw.javaeye.com/blog/78277
posted @ 2007-05-09 17:21 金大为 阅读(83) | 评论 (1)编辑 收藏

 

JSA 1.0 Alpha发布,压缩效率提高大约10%


压缩算法改进:

实现了自己的文本压缩算法
  • 提高了压缩比率以及解压效率。
优化了语法压缩
  • 合并连续var申明,
  • 删除了多余var申明,
  • 删除了多余大括弧({、}),
  • 删除了多余分号(;)。

UI改进:


  • 自动编码识别
  • 支持文件拖放
  • 支持JAVA1.4.2+ 当jar打开方式为java时,可双击运行,但,若JAR打开方式被修改(如winrar),请使用如下方式:
    CMD>java -jar xx.jar
  • 格式化
    注释只能在各语句之间,插在语句中间的注释有可能丢失,在格式化的时候,算bug吧。
  • 压缩参数设置
    操作->设置:
    执行语法压缩:将替换局部变量,删除冗余语法。
    执行文本压缩:将脚本文本分词、替换压缩。执行时可通过eval( 解压函数() )方式还原。
    兼容IE5、NS3:老版本的浏览器对正则表达式支持优先,是否需要兼容他们(需要采用稍微复杂一点的解压函数)。
    执行文本压缩的条件设置:设置何时采用文本压缩,有两项,比率要求和大小要求;因为eval是需要额外开销的,所以,只有当文本压缩的比率小于指定值且文件大小大于指定值时才采用文本压缩。

ANT Task


  • 默认编码 :取JRE的默认编码,可能随机器不同而改变,所以,推荐手动指定器编码方式(eg:charset="utf-8"/charset="GBK")
  • jsicompile 任务:编译JSI (压缩,预装载编译,定制启动文件)
  • jscompress 压缩脚本

ANT Task 示例


    jsicompiler 示例(处理JSI及其集成的第三方脚本)

      <target name="compress" depends="init">
        
    <jsicompiler destDir="ant/temp/script2" charset="utf-8" rebuildboot="true">
          
    <fileset dir="web/scripts">
            
    <include name="*/**/*.js" />
            
    <include name="*.js" />
            
    <exclude name="preload/**" />
          
    </fileset>
          
    <preloadgroup path="code-decorator.js">
            
    <fileset dir="web/scripts">
              
    <include name='js/io/__$package.js' />
              
    <include name='js/io/request.js' />
              
    <include name='js/io/writer.js' />
              
    <include name='js/xml/__$package.js' />
              
    <include name='js/xml/template.js' />
              
    <include name='js/xml/tag.js' />
              
    <include name='js/util/__$package.js' />
              
    <include name='js/util/collections.js' />
              
    <include name='org/xidea/syntax/__$package.js' />
              
    <include name='org/xidea/syntax/syntax-parser.js' />
              
    <include name='org/xidea/decorator/__$package.js' />
              
    <include name='org/xidea/decorator/code.js' />
            
    </fileset>
          
    </preloadgroup>
        
    </jsicompiler>
      
    </target>

    jscompress 示例(压缩普通脚本)

      <target name="test-compress">
        
    <jscompress destDir="ant/temp/script2" charset="utf-8">
          
    <fileset dir="web/scripts">
            
    <include name="js/**/*.js" />
            
    <include name="*.js" />
          
    </fileset>
        
    </jscompress>
      
    </target>

 




评论也很精彩,请点击查看精彩评论。欢迎您也添加评论。查看详细 >>
推荐相关文章:
  邀请第三方团队开发页面装饰器实现的公开信。
  云想衣裳花想容--JSI组件模型介绍(一)
  云想衣裳花想容--JSI组件模型介绍(二)

文章来源: http://jindw.javaeye.com/blog/77776
posted @ 2007-05-08 11:35 金大为 阅读(125) | 评论 (1)编辑 收藏


邀请第三方团队开发页面装饰器实现的公开信





页面装饰引擎简介


用于装饰朴素html元素的框架,使用简单的xml标记,标识期装饰行为,比如将一个普通的input装饰成一个日期输入控件。将一个textarea装饰成一个代码语法高亮显示区域,或一个wysiwyg html编辑器。 JSI启动后将采用异步方式,自动检查decorator标记,自动做相关类的寻找、导入并装饰页面。

实现零脚本代码的web富客户端编程:



更多信息参考:

示例装饰器演示:http://www.xidea.org/project/jsi/decorator/index.html

JSI项目主页:http://www.xidea.org/project/jsi/index.html

JavaEye JSI专栏:http://www.javaeye.com/subject/JSI



适用范围


页面装饰引擎是用来装饰普通网页的框架,只需要在普通网页上增加相应装饰标签,即可实现富web客户端的常用功能。保持页面简洁、优雅的同时,享受页面通用组件带来的便捷。

同时,正因为它的简单性,使用装饰引擎的页面,后期维护也更加简单。

在开发效率优先的项目中,其优势尤为明显。当能,对于非常非常复杂的页面,导入JSI托管类库直接编程的方式也许更加适合。



现状分析


页面装饰引擎是一个工作于JSI上的可实现零代码编程的RIA解决方案。

JSI项目已有一年多的历史,在类库管理,按需装载方面,技术已经非常先进;

其中无侵入的脚本管理,我们是最完善的;2.0提出的异步装载技术,同类框架中也只有JSI2能做到。



当今业界,在RIA操作的火热的时候,JSI提出装饰引擎这个优雅简洁的RIA解决方案。

我认为,只要我们可以尽快推出完善实用的装饰器集合,完全可以在业界占领一席之地。



目前我们已有一个简单示例实现集,不够丰富,而且都还是初级阶段,不够完善。

现在发布的这些装饰器,主要是为了演示JSI装饰引擎的工作方式,编码风格。



参考


JSI装饰引擎工作原理介绍:


  1. 云想衣裳花想容--JSI组件模型介绍(二)



JSI装饰器编写示例:


  1. 基于FCKEditor 开发JSI Editor装饰器

  2. 从零开始 Spinner(微调器)装饰器开发



结语


目前就我一人之力,开发一套完整的装饰器,尚需时日,并且由于本人缺乏ui设计的天赋,在这里很难有出色的表现。

所以,我希望能邀请到第三方团队、公司在这个基础上开发出自己的更加实用的装饰器集合。同时我可以空出更多的时间去优化核心模块。



JSI及其装饰引擎采用LGPL开源协议。可以商业应用,当能,更希望能开源。



对于开源第三方的实现,我可以提供充分的技术支持。并配合其宣传,推广。

对于商业实现,可以提供必要的技术支持,并提供JSI专用的脚本混淆工具,保护您的知识产权。



我的联系方式(email&msn):jindw◎xidea。org




评论也很精彩,请点击查看精彩评论。欢迎您也添加评论。查看详细 >>

推荐相关文章:
  云想衣裳花想容--JSI组件模型介绍(二)
  云想衣裳花想容--JSI组件模型介绍(一)




JavaEye推荐
杭州:外企高薪聘请系统维护工程师(10-15K)
杭州:国内大型网络公司高薪招聘系统架构师,资深JAVA开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
广州:急招 JAVA开发经理/系统架构师(10-15K/月)也招聘java程序员



文章来源: http://jindw.javaeye.com/blog/77597
posted @ 2007-05-07 22:18 金大为 阅读(54) | 评论 (0)编辑 收藏
仅列出标题
共6页: 上一页 1 2 3 4 5 6 下一页