2006年1月7日

初学flex

     上大学的时候,看到好多精彩炫丽的flash,学习了一些flash的知识。那个时候不怎么会写脚本,就用动画的概念一帧一帧的拼出一个flash。后来工作以后,给客户在线演示产品,有接触了Captivate。2006年末的时候,客户要求开发一个在线产品展示平台,我偶然搜到了adobe用flex开发的网上购物演示,就体会到如果用flex来实现这个产品展示平台将是很动人的事情,由于某种原因最终未能如愿。最近在做一个通用视频培训平台时又用到了FLV播放器,也是用Flex开发的,最终效果和土豆、优酷非常类似。这些场景使我对flash的展现效果情有独钟,况且有adobe这样的公司在运作flash,如果可能的话应该在合适的场合来把flex集成到我们现在开发的应用中,比如图表功能、表单功能、打印功能等等。基于以上的经历和思路,决定花功夫学习一下flex还是值得的。
    首先,到adobe官方网站下载flex builder 3(当前最新版本)并安装。安装完毕后会看到一些入门文章中提到的Flex SDK已经在builder中存在了,所以初学仅下载个builder就够了。
    然后,打开builder发现它就是基于eclipse开发的,我想这个IDE对于大多数java开发着再熟悉不过了。首次进入时会有一个欢迎界面和初学者向导,我比较习惯看看这些东西,点击下载提供的入门工程Flex3GSEIII_a_WorkingWithData_JSP,并导入builder中。看看工程结构跟我们平时的JAVAEE工程有了一些不同。多了bin-debug和html-template文件夹,文件类型主要是*.mxml、*.as。在工程的左侧视图右键*.mxml运行(类似与运行java文件),会有一个编译过程,过后弹出一个html,html中运行的正式flash。当时比较好奇,一个mxml是如何经过编译产生html和flash的,打开刚才提到的bin-debug发现两个文件生成到了这个文件夹。仔细读一下mxml的代码发现跟XHTML基本类似,其中的一些function都是AS写的。至此我分析得到如下结论:mxml+as-->swf,中间的转换是adobe集成在builder中的转换工具完成的。如此跟我们以往HTML+JS的编程习惯很类似了,并且XHTML与AS的结合更紧密一些。由于初学原理性的知识我就理解至此了。
   最后,我们关心的是用flex都能实现哪些控件,并且控件的效果如何。我没有迫不及待的去google,而是又深入到builder的安装目录下,在D:\Flex Builder 3\sdks\3.0.0发现了好东西,别的我不关心,先看samples,子目录下有一个explorer,其中包含一个build.bat。看到这个bat我更加确定了我以上的结论。于是运行bat,开始编译其下的mxml文件逐一生成swf文件。花一段时间生成完毕,打开类似于index的swf文件,sdk中提供的样例控件就都尽收眼底了。
   后续:有源文件,有开发工具,你可以随意摆弄这些代码,熟悉语法,熟悉开发环境,熟悉对象属性,拼拼凑凑完成自己的一个组合界面了。

posted @ 2008-03-12 14:28 beyondduke 阅读(1380) | 评论 (2)编辑 收藏

谈一谈在家办公的利弊


为缓解早晚高峰带来的拥堵,北京交通委经过调研,拟从商业机构、大型商场开始试行错峰上下班,同时拟在IT行业、科研单位试行弹性工作制。昨天,市人大代表赵凤桐透露,具体方案政府还在拟订中。
市人大代表刘国祥在去年的人代会上提出“合理调整上下班时间”建议(见新闻附件)。市交通委对此予以回复称,本市拟试行错开上下班时间和实行弹性工作时间两种方法,缓解早晚高峰的交通压力。目前,已经在开展商业、机关企事业单位等错峰上下班的研究,并提出了调整商业、机关企事业单位上下班时间的初步方案,拟从商业机构开始实施。 此外,交通委还与相关部门进行了协商,对中关村等地区进行调研,拟对某些行业(如IT行业、科研单位等)实行弹性工作制,鼓励在家网上办公。如果这些措施能够实施,则在一定程度上可以削减高峰时段的交通流峰值。
据了解,截至2007年底,北京的机动车保有量已达到310万辆。市交通委表示,从城市交通运行态势来看,出行需求和机动车保有量仍在持续快速增长,高峰时段道路拥堵区域不断扩大、局部路段平均车速下降,缓解拥堵的措施大多被持续快速增长的交通需求所抵消,交通形势依然十分严峻。


这是前两周的新闻了,当时一看到新闻就感觉这条消息很利好,尤其对我们北京的程序员来说。在家办公的利弊,现在业内也没有个具体的说法,这几天有幸在家办公,体验了一把想跟大家谈一谈我的看法。
一,利:
1,节约时间:花在等车、路上、堵车、倒车或开车、停车等交通出行的时间成本。
2,节约金钱:上下班的路费或车位费、油费等,还不算看不到的时间兑换的钱(时间就是金钱)。
3,为国家做贡献:不但给上述新闻中的交通部门减少压力,而且减少了碳的排放量(节能减排)。
4,为公司节约日常费用:占位费,水费,餐费,办公费,交通费。。。。
5,自己时间把握更准确:由于减少了交通环节,个人时间上更有可控性。
二,弊:
1,缺少办公气氛:家中的环境毕竟没有公司那么统一,一个家一个样儿,有条件给自己打造办公环境和气氛的员工恐怕只有少数。
2,增加交流成本:公司面对面的交流只能改成手机对手机,或麦克对麦克,或手指对手指。这些肯定都比面对面花的时间长,还要通讯费上网费。
3,容易受外界干扰:如果家中有妻儿老小,家里很难给你一个封闭环境,你会不断的被“骚扰”,毕竟工作的事情像写程序需要比较心静的环境。
4,容易自由散漫:没有了公司领导的监控和同事的督促,人的自控能力是有限的,没准看新闻泡论坛玩游戏就过了头,耽误的肯定是正事。
5,造成公共资源浪费:公司里的公共资源在家是很难利用好的,比如内部的服务器,局域网和通讯工具。
以上这些是我所能想到的,至于利大还是弊大我没有偏向都是5条。个人还是觉得天时地利人和才适合在家办公,对于不同的人或同一个人的不同时间段都是利弊难辨的。
希望大家能聊一聊自己的看法。

posted @ 2008-01-31 09:48 beyondduke 阅读(4667) | 评论 (12)编辑 收藏

Excel报表之js版

 半年以前做过server端生成excel的简单引擎,总感觉不够轻便,尤其在一些固定格式,数据量又不是很大的情况下,上周写了一

个根据表单数据在client端用js生成excle的demo,令我我激动了半天------js太强了!

下面分享一下这段js:
 
 1var excel  = new ActiveXObject("Excel.Application"); //创建AX对象excel
 2excel.visible =true//设置excel可见属性
 3var workbook = excel.Workbooks.Add; //获取workbook对象
 4var sheet1 = xlBook.Worksheets(2);  //创建sheet1
 5var sheet2 = xlBook.Worksheets(1);  //创建sheet2
 6sheet1.Range(sheet1.Cells(1,1),sheet1.Cells(1,14)).mergecells=true//合并单元格
 7sheet1.Range(sheet1.Cells(1,1),sheet1.Cells(1,14)).value="员工月考核成绩"//设置单元格内容
 8sheet1.Range(sheet1.Cells(1,1),sheet1.Cells(1,14)).Interior.ColorIndex=6;//设置底色 
 9sheet1.Range(sheet1.Cells(1,1),sheet1.Cells(1,14)).Font.ColorIndex=5;//设置字体色 
10sheet1.Rows(1).RowHeight = 20//设置列高
11sheet1.Rows(1).Font.Size=16;  //设置文字大小
12sheet1.Rows(1).Font.Name="宋体"//设置字体
13//设置每一列的标题
14sheet1.Cells(2,1).Value="工程师考核项";
15sheet1.Cells(2,2).Value="总分";
16sheet1.Cells(2,3).Value="研发进度";
17sheet1.Cells(2,4).Value="出勤率";
18sheet1.Cells(2,5).Value="执行力";
19sheet1.Cells(2,6).Value="责任心";
20sheet1.Cells(2,7).Value="工作规范";
21sheet1.Cells(2,8).Value="协作精神";
22sheet1.Cells(2,9).Value="进取性";
23sheet1.Cells(2,10).Value="工作合理性";
24sheet1.Cells(2,11).Value="解决问题能力";
25sheet1.Cells(2,12).Value="应变能力";
26sheet1.Cells(2,13).Value="人际技能";
27sheet1.Cells(2,14).Value="理解能力";
28//从表单循环控件中取出数据逐行插入对应列的数据
29var count = sfform.GetAttributeValue('Repeat','Count');
30for(var line=1;line<=count;line++)//begin for
31  var name  = sfform.GetValue('Repeat['+line+'].name');
32  var total= sfform.GetValue('Repeat['+line+'].total');
33  var yfjd = sfform.GetValue('Repeat['+line+'].yfjd');
34  var jh = sfform.GetValue('Repeat['+line+'].jh');
35  var gcgj = sfform.GetValue('Repeat['+line+'].gcgj');
36  var cql = sfform.GetValue('Repeat['+line+'].cql');
37  var zxl = sfform.GetValue('Repeat['+line+'].zxl');
38  var gzgf = sfform.GetValue('Repeat['+line+'].gzgf');
39  var zrx = sfform.GetValue('Repeat['+line+'].zrx');
40  var xzjs = sfform.GetValue('Repeat['+line+'].xzjs');
41  var jqx = sfform.GetValue('Repeat['+line+'].jqx');
42  var gzhl = sfform.GetValue('Repeat['+line+'].gzh');
43  var jjwt = sfform.GetValue('Repeat['+line+'].jjwt');
44  var ybnl = sfform.GetValue('Repeat['+line+'].ybnl');
45  var rjjn = sfform.GetValue('Repeat['+line+'].rjjn');
46  var ljnl = sfform.GetValue('Repeat['+line+'].ljnl');
47  sheet1.Cells(2+line,1).Value=name;
48  sheet1.Cells(2+line,2).Value=total;
49  sheet1.Cells(2+line,3).Value=yfjd;
50  sheet1.Cells(2+line,4).Value=cql;
51  sheet1.Cells(2+line,5).Value=zxl;
52  sheet1.Cells(2+line,6).Value=gzgf;
53  sheet1.Cells(2+line,7).Value=zrx;
54  sheet1.Cells(2+line,8).Value=xzjs;
55  sheet1.Cells(2+line,9).Value=jqx;
56  sheet1.Cells(2+line,10).Value=gzhl;
57  sheet1.Cells(2+line,11).Value=jjwt;
58  sheet1.Cells(2+line,12).Value=ybnl;
59  sheet1.Cells(2+line,13).Value=rjjn;
60  sheet1.Cells(2+line,14).Value=ljnl;
61
62}
//end for
63
64

基本的代码已经实现了,生成excel的格式和一些统计计算,用js写应该是很方便的,以后有例子再作补充。

从代码角度来看这种写法不是很灵活,但在能满足用户的需求前提下,这种生成方式还是很受欢迎的,给用户的感觉就是轻

便。个人认为简单就是美!

posted @ 2006-08-05 11:14 beyondduke 阅读(6583) | 评论 (7)编辑 收藏

数据库常见的三种join方式(收藏)

数据库常见的join方式有三种:inner join, left outter join, right outter join(还有一种full join,因不常用,本文不讨论)。这三种连接方式都是将两个以上的表通过on条件语句,拼成一个大表。以下是它们的共同点:

  1. 关于左右表的概念。左表指的是在SQL语句中排在left join左边的表,右表指的是排在left join右边的表。
  2. 在拼成的大表中,左表排在左边,右表排在右边。
  3. on条件语句最好用=号对两表相应的主外键进行连接。当然,也可以用其他操作符,如>, <, 来连接两表的任一字段,此时的关系将非常复杂,连接后的记录数也随之而变得不确定。如果在一些特殊的场合中需要用到这种方式,必须通过简单的实例加以确认,否则,连接结果很可能不是我们所想要的!
  4. on条件语句不能省略。
  5. 可以连锁使用join,每次使用join都令另一表与当前的表或连接的结果相连接。


在下文中,用到了两个表,"部门"表与"组织"表,其中,"部门"表有一名为"组织编号"的外键,指向"组织"表中的主键"编号"。

inner join

  格式:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号

  目的:将两表中符合on条件的所有记录都找出来。

  规律:

    1. 拼出的大表记录不会增加。
    2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。

  典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过=号将主外键进行连接,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。

  备注:inner join 是默认的连接方式,可缩写为join。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号

 

left outter join

  格式: select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号

  格式: select * from 组织 left join 部门 on 组织.编号 = 部门.组织编号

  目的:将左表的所有记录列出,右表中只要符合on条件的,与左表记录相拼合,不符合条件的,填以null值。

  规律:

    1. 选出所有符合条件的左表,如果左边与右表的关系是一对一的关系,则拼成的大表记录不会改变。
       如果左边与右表的关系是多对一的关系,则拼成的大表记录也不会改变。
       如果左边与右表的关系是一对多的关系,则拼成的大表记录会增加。对于每一具有一对多关系的左表记录,如果左表1:N与右表对应,那么会多出N-1条记录。例如,如果左表第一条记录1:3对应于右表,多出2条记录。如果左表第二条记录1:2对应于右表,则再多出1条记录。这样,总共多出3条记录。其他类推。
    2. 如果左边与右表的关系是一对多的关系,在选出的任一记录中,假若右表有多个记录与其对应,那么,连接后的左表,主键将不再唯一。
    3. 如果左边与右表的关系是一对多的关系,对于左表任一记录,如果右表没有记录与其相对应,则全部填以null值。

  典型应用:将存在多关系的引用表放在左表,将存在一关系的被引用表放在右表,通过对右表设定过滤条件,选出相应的且主键唯一的左表记录。

  备注:left outter join可用left join代替。在有些数据库中,如HSqlDb, 只能使用left join而不能使用left outter join。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号


right outter join

  格式: select * from 部门 right join 组织 on 部门.组织编号 = 组织.编号

  格式: select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号

  目的:将右表的所有记录列出,左表中只要符合on条件的,与右表记录相拼合,不符合条件的,填以null值。

  规律:(与left outter join相反)

  典型应用:可转化成left outter join。例如

    select * from 组织 right join 部门 on 部门.组织编号 = 组织.编号
    与
    select * from 部门 left join 组织 on 部门.组织编号 = 组织.编号
    的效果一样

  备注:right outter join可用right join代替。在有些数据库中,如HSqlDb, 没有实现right join功能。

  转化为where子句:

    select * from 部门, 组织 where 部门.组织编号 = 组织.编号

posted @ 2006-05-18 09:43 beyondduke 阅读(5818) | 评论 (1)编辑 收藏

递归小程序

递归

posted @ 2006-03-29 09:31 beyondduke 阅读(286) | 评论 (0)编辑 收藏

程序员的方向

转眼做程序已经1年半了,现在的工作似乎很不可思议,自己也搞不清是否真正属于一个程序员。每天面对msn上几十个客户(大多数都是程序员),忙得不亦乐乎,总是不断的switch workspace,客户的问题你要能重现才行。也许这也是一种锻炼吧,需要十足的耐心,千万不能浮躁,一旦出现问题还要不断的debug!

posted @ 2006-03-25 11:21 beyondduke 阅读(384) | 评论 (0)编辑 收藏

linux 下配置java环境(jdk和tomcat)

JDK的配置:

    1,  下载j2sdk-linux-i386-rpm.bin
    2,运行命令:chmod +x j2sdk-linux-i386-rpm.bin     (修改成可执行权限)
    3,执行:./ j2sdk-1_3_1-linux-i386-rpm.bin        (执行后生成rpm安装包j2sdk-linux-i386.rpm)
    4,rpm -ivh j2sdk-1_3_1-linux-i386-rpm     (安装成功后,jdk将被安装在/usr/java/目录下)
    5,   vi当前用户(例root目录下)的.bash_profile文件,添加内容如下:

1export JAVA_HOME=/usr/java/j2sdk1.4.2_10
2export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.
jar
3export PATH=$PATH:$JAVA_HOME/bin

     6,java命令,验证环境是否配置成功。

TOMCAT的配置:
    
     1,下载jakarta-tomcat-5.0.28.tar.gz
     2, tar zxvf jakarta-tomcat.tar.gz
     3, 转换路径cd到tomcat/bin目录下:./startup.sh (启动tomcat)
     4, 在ie浏览器输入http://servername:port   (验证tomcat是否启动成功)
      

   

posted @ 2006-02-14 12:34 beyondduke 阅读(890) | 评论 (0)编辑 收藏

JDBC实现oracle blob 出库入库

1,首先建一个足够简单的表imageTable
      id         varchar(20)
      image   blob
2,blob入库
      拷贝Sunset.jpg图片在C盘根目录下     
 1      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
 2      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:beyondduke","duke","duke"); 
 3      conn.setAutoCommit(false); 
 4      BLOB blob = null
 5      PreparedStatement pstmt = conn.prepareStatement("insert into imageTable(id,image) values(?,empty_blob())"); 
 6      pstmt.setString(1,"10001"); 
 7      pstmt.executeUpdate(); 
 8      pstmt.close(); 
 9      pstmt = conn.prepareStatement("select content from imageTable where id= ? for update"); 
10      pstmt.setString(1,"10001"); 
11      ResultSet rs = pstmt.executeQuery(); 
12     if (rs.next()) blob = (BLOB) rs.getBlob(1); 
13      String fileName = "c://Sunset.jpg"
14      File f = new File(fileName); 
15      FileInputStream fin = new FileInputStream(f); 
16      System.out.println("file size = " + fin.available()); 
17      pstmt = conn.prepareStatement("update imageTable set image=? where id=?"); 
18      OutputStream out = blob.getBinaryOutputStream(); 
19       byte[] data = new byte[(int)fin.available()]; 
20      fin.read(data); 
21      out.write(data); 
22      out.close(); 
23      fin.close(); 
24
25      pstmt.setBlob(1,blob); 
26      pstmt.setString(2,"fankai"); 
27
28      pstmt.executeUpdate(); 
29      pstmt.close(); 
30
31      conn.commit(); 
32      conn.close(); 
浏览数据库的数据,发现image项中数据大小与图片大小一致,说明入库了!
 3,blob出库
 1   DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
 2   Connection conn = DriverManager.getConnection(            "jdbc:oracle:thin:@localhost:1521:beyondduke""duke","duke");     
          conn.setAutoCommit(
false);
 3    Statement stmt = conn.createStatement();
 4/* 查询BLOB对象 */
 5    ResultSet rs = stmt.executeQuery("SELECT content FROM javatest WHERE id='1001'");
 6while (rs.next()) {
 7/* 取出此BLOB对象 */    
 8    oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("image");
 9 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d://Sunset.jpg"));            
           BufferedInputStream in 
= new BufferedInputStream(blob    .getBinaryStream());        
10    int c;
11while ((c = in.read()) != -1{ out.write(c);        
12   }

13   in.close();
14   out.close();
15   rs.close();
16   stmt.close();
17   conn.close();
18
检查D盘根目录,会发现Sunset.jpg文件,跟C盘下是一样的,说明入库出库成功!

posted @ 2006-02-14 09:23 beyondduke 阅读(2649) | 评论 (0)编辑 收藏

java名人录(csdn摘)

Adrian Colyer AspectJ leader,AJDJ leader,IBM   
Ben Galbraith 活跃人士  
Benjamin Renaud BEA副CTO  
Bill Burke JBoss 架构师,EJB 3.0专家组里的Jboss代表  
Bob McWhirter Groovy,Drools founder  
Cedric Beust Weblogic架构师,BEA  
Cameron Purpy  JCache Lead,Tangosol公司CEO blog
Cliff Schmidt  BEA's Open source strategist and Apache Beehive leader  
Craig McClanahan Struts founder, JSF 1.0 spec lead, Java Studio Creator leader,《Struts in action作者》, SUN  
David Nuescheler JSR 170, Content Repository for Java spec lead  
Dion Almaer  TSS主编, JDO专家组成员 blog
Doug Cutting Lucene founder
Ed Roman TSS CEO, MiddleWare CEO,《Mastering EJB》作者  
Erich Gamma 设计模式开创者,Eclipse 的总设计师, Junit founder,IBM  
Edward Burns JSF 1.2 spec leader  
Floyd Marinescu TSS General Manager,《EJB Design Patterns》作者  
Gavin King Hibernate founder,《Hibernate in Action》作者,Jboss
Gregor Hohpe  《Enterprise Integration Patterns》作者,ThoughtWorks  
Gregor Kiczales AOP之父,AspectJ founder  
Graham Hamilton Sun副总裁,J2SE1.3,1.4,5.0 leader  
Hani Suleiman OSWorkflow开发者,BileBlog作者 blog
Howard Lewis Ship Tapestry和Hivemind founder,《Tapestry in Action 》作者
James Duncan Davidson Ant and Tomcat founder
James Strachan Geronimo的发起者之一, Jakarta项目管理委员会成员,N多JSR expert group的成员  
Jason Careria  Webwork2,Xwork core developer   blog
Jason Hunter Apache基金会管理员,《Java Servlet Programming》作者,Xquery,Jdom等的开发者  
John Crupi 目前专著于SOA, Sun  
Jonathan Bruce  JDBC spec leader,Sun  
Joshua Bloch 《Effective Java》作者,前java平台核心开发者,目前在google。  
Jon Tirsen Nanning lead developer, PicoContainer和NanoContainer活跃开 者,ThoughtWorks   
Juergen Hoeler SpringFramework core developer,Co-Author Of《J2EE Development without EJB》  
Kent Beck 设计模式的开创者之一。XP 和 TDD 的创始人,xUnit 的开发者。  
Linda DeMichiel  EJB 3.0 spec lead,Sun  
Marc Fleury JBoss Group CEO  
Mark Hapner  J2EE1.4 lead. Sun Chief WebService Strategist and  JMS spec lead  
Martin Fowler 软件工程和建模领域的大师,Thoughtworks CEO blog
Matt Raible 《Spring live》作者 blog
Mike Cannon-Brookes
OpenSymphony founder,Atlassian founder(JIRA的公司),
<Java Open Source programing>作者,javablogs founder
 
Pat Lightbody  Webwork founder  
Patrick Linskey
JDO活跃人士,JDO2.0,EJB3.0专家组成员  
Rick Ross Javalobby founder  
Rickard Oberg Xdoclet,Webwork founder, jboss的前架构师,目前主要研究AOP  
Robin Roos JDO2.0活跃人士,《Java Data Object》作者  
Rod Johnson SpringFramework   
Scott Ambler Senior Consultant, 很多书的作者  
Sergey Dmitriev Jetbrains CEO,Intelij IDEA founder  
Ted Neward 《Effective Enterprise Java》作者 blog
Vincent Massol Jakarta Cactus founder,Maven开发组成员, 《Junit in action》作者

posted @ 2006-01-07 13:59 beyondduke 阅读(836) | 评论 (0)编辑 收藏

<2006年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告


MSN联系

常用链接

留言簿(2)

随笔分类

随笔档案

我的连接

搜索

最新评论

阅读排行榜

评论排行榜