2006年2月14日

          初學flex

               上大學的時候,看到好多精彩炫麗的flash,學習了一些flash的知識。那個時候不怎么會寫腳本,就用動畫的概念一幀一幀的拼出一個flash。后來工作以后,給客戶在線演示產品,有接觸了Captivate。2006年末的時候,客戶要求開發(fā)一個在線產品展示平臺,我偶然搜到了adobe用flex開發(fā)的網上購物演示,就體會到如果用flex來實現(xiàn)這個產品展示平臺將是很動人的事情,由于某種原因最終未能如愿。最近在做一個通用視頻培訓平臺時又用到了FLV播放器,也是用Flex開發(fā)的,最終效果和土豆、優(yōu)酷非常類似。這些場景使我對flash的展現(xiàn)效果情有獨鐘,況且有adobe這樣的公司在運作flash,如果可能的話應該在合適的場合來把flex集成到我們現(xiàn)在開發(fā)的應用中,比如圖表功能、表單功能、打印功能等等。基于以上的經歷和思路,決定花功夫學習一下flex還是值得的。
              首先,到adobe官方網站下載flex builder 3(當前最新版本)并安裝。安裝完畢后會看到一些入門文章中提到的Flex SDK已經在builder中存在了,所以初學僅下載個builder就夠了。
              然后,打開builder發(fā)現(xiàn)它就是基于eclipse開發(fā)的,我想這個IDE對于大多數(shù)java開發(fā)著再熟悉不過了。首次進入時會有一個歡迎界面和初學者向導,我比較習慣看看這些東西,點擊下載提供的入門工程Flex3GSEIII_a_WorkingWithData_JSP,并導入builder中。看看工程結構跟我們平時的JAVAEE工程有了一些不同。多了bin-debug和html-template文件夾,文件類型主要是*.mxml、*.as。在工程的左側視圖右鍵*.mxml運行(類似與運行java文件),會有一個編譯過程,過后彈出一個html,html中運行的正式flash。當時比較好奇,一個mxml是如何經過編譯產生html和flash的,打開剛才提到的bin-debug發(fā)現(xiàn)兩個文件生成到了這個文件夾。仔細讀一下mxml的代碼發(fā)現(xiàn)跟XHTML基本類似,其中的一些function都是AS寫的。至此我分析得到如下結論:mxml+as-->swf,中間的轉換是adobe集成在builder中的轉換工具完成的。如此跟我們以往HTML+JS的編程習慣很類似了,并且XHTML與AS的結合更緊密一些。由于初學原理性的知識我就理解至此了。
             最后,我們關心的是用flex都能實現(xiàn)哪些控件,并且控件的效果如何。我沒有迫不及待的去google,而是又深入到builder的安裝目錄下,在D:\Flex Builder 3\sdks\3.0.0發(fā)現(xiàn)了好東西,別的我不關心,先看samples,子目錄下有一個explorer,其中包含一個build.bat。看到這個bat我更加確定了我以上的結論。于是運行bat,開始編譯其下的mxml文件逐一生成swf文件。花一段時間生成完畢,打開類似于index的swf文件,sdk中提供的樣例控件就都盡收眼底了。
             后續(xù):有源文件,有開發(fā)工具,你可以隨意擺弄這些代碼,熟悉語法,熟悉開發(fā)環(huán)境,熟悉對象屬性,拼拼湊湊完成自己的一個組合界面了。

          posted @ 2008-03-12 14:28 beyondduke 閱讀(1391) | 評論 (2)編輯 收藏

          談一談在家辦公的利弊


          為緩解早晚高峰帶來的擁堵,北京交通委經過調研,擬從商業(yè)機構、大型商場開始試行錯峰上下班,同時擬在IT行業(yè)、科研單位試行彈性工作制。昨天,市人大代表趙鳳桐透露,具體方案政府還在擬訂中。
          市人大代表劉國祥在去年的人代會上提出“合理調整上下班時間”建議(見新聞附件)。市交通委對此予以回復稱,本市擬試行錯開上下班時間和實行彈性工作時間兩種方法,緩解早晚高峰的交通壓力。目前,已經在開展商業(yè)、機關企事業(yè)單位等錯峰上下班的研究,并提出了調整商業(yè)、機關企事業(yè)單位上下班時間的初步方案,擬從商業(yè)機構開始實施。 此外,交通委還與相關部門進行了協(xié)商,對中關村等地區(qū)進行調研,擬對某些行業(yè)(如IT行業(yè)、科研單位等)實行彈性工作制,鼓勵在家網上辦公。如果這些措施能夠實施,則在一定程度上可以削減高峰時段的交通流峰值。
          據了解,截至2007年底,北京的機動車保有量已達到310萬輛。市交通委表示,從城市交通運行態(tài)勢來看,出行需求和機動車保有量仍在持續(xù)快速增長,高峰時段道路擁堵區(qū)域不斷擴大、局部路段平均車速下降,緩解擁堵的措施大多被持續(xù)快速增長的交通需求所抵消,交通形勢依然十分嚴峻。


          這是前兩周的新聞了,當時一看到新聞就感覺這條消息很利好,尤其對我們北京的程序員來說。在家辦公的利弊,現(xiàn)在業(yè)內也沒有個具體的說法,這幾天有幸在家辦公,體驗了一把想跟大家談一談我的看法。
          一,利:
          1,節(jié)約時間:花在等車、路上、堵車、倒車或開車、停車等交通出行的時間成本。
          2,節(jié)約金錢:上下班的路費或車位費、油費等,還不算看不到的時間兌換的錢(時間就是金錢)。
          3,為國家做貢獻:不但給上述新聞中的交通部門減少壓力,而且減少了碳的排放量(節(jié)能減排)。
          4,為公司節(jié)約日常費用:占位費,水費,餐費,辦公費,交通費。。。。
          5,自己時間把握更準確:由于減少了交通環(huán)節(jié),個人時間上更有可控性。
          二,弊:
          1,缺少辦公氣氛:家中的環(huán)境畢竟沒有公司那么統(tǒng)一,一個家一個樣兒,有條件給自己打造辦公環(huán)境和氣氛的員工恐怕只有少數(shù)。
          2,增加交流成本:公司面對面的交流只能改成手機對手機,或麥克對麥克,或手指對手指。這些肯定都比面對面花的時間長,還要通訊費上網費。
          3,容易受外界干擾:如果家中有妻兒老小,家里很難給你一個封閉環(huán)境,你會不斷的被“騷擾”,畢竟工作的事情像寫程序需要比較心靜的環(huán)境。
          4,容易自由散漫:沒有了公司領導的監(jiān)控和同事的督促,人的自控能力是有限的,沒準看新聞泡論壇玩游戲就過了頭,耽誤的肯定是正事。
          5,造成公共資源浪費:公司里的公共資源在家是很難利用好的,比如內部的服務器,局域網和通訊工具。
          以上這些是我所能想到的,至于利大還是弊大我沒有偏向都是5條。個人還是覺得天時地利人和才適合在家辦公,對于不同的人或同一個人的不同時間段都是利弊難辨的。
          希望大家能聊一聊自己的看法。

          posted @ 2008-01-31 09:48 beyondduke 閱讀(4704) | 評論 (12)編輯 收藏

          Excel報表之js版

          ?半年以前做過server端生成excel的簡單引擎,總感覺不夠輕便,尤其在一些固定格式,數(shù)據量又不是很大的情況下,上周寫了一

          個根據表單數(shù)據在client端用js生成excle的demo,令我我激動了半天------js太強了!

          下面分享一下這段js:
          ?
          ?1var?excel??=?new?ActiveXObject("Excel.Application");?//創(chuàng)建AX對象excel
          ?2excel.visible?=true;?//設置excel可見屬性
          ?3var?workbook?=?excel.Workbooks.Add;?//獲取workbook對象
          ?4var?sheet1?=?xlBook.Worksheets(2);??//創(chuàng)建sheet1
          ?5var?sheet2?=?xlBook.Worksheets(1);??//創(chuàng)建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="研發(fā)進度";
          17sheet1.Cells(2,4).Value="出勤率";
          18sheet1.Cells(2,5).Value="執(zhí)行力";
          19sheet1.Cells(2,6).Value="責任心";
          20sheet1.Cells(2,7).Value="工作規(guī)范";
          21sheet1.Cells(2,8).Value="協(xié)作精神";
          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//從表單循環(huán)控件中取出數(shù)據逐行插入對應列的數(shù)據
          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

          基本的代碼已經實現(xiàn)了,生成excel的格式和一些統(tǒng)計計算,用js寫應該是很方便的,以后有例子再作補充。

          從代碼角度來看這種寫法不是很靈活,但在能滿足用戶的需求前提下,這種生成方式還是很受歡迎的,給用戶的感覺就是輕

          便。個人認為簡單就是美!

          posted @ 2006-08-05 11:14 beyondduke 閱讀(6602) | 評論 (7)編輯 收藏

          數(shù)據庫常見的三種join方式(收藏)

          數(shù)據庫常見的join方式有三種:inner join, left outter join, right outter join(還有一種full join,因不常用,本文不討論)。這三種連接方式都是將兩個以上的表通過on條件語句,拼成一個大表。以下是它們的共同點:

          ? 1. 關于左右表的概念。左表指的是在SQL語句中排在left join左邊的表,右表指的是排在left join右邊的表。
          ? 2. 在拼成的大表中,左表排在左邊,右表排在右邊。
          ? 3. on條件語句最好用=號對兩表相應的主外鍵進行連接。當然,也可以用其他操作符,如>, <, 來連接兩表的任一字段,此時的關系將非常復雜,連接后的記錄數(shù)也隨之而變得不確定。如果在一些特殊的場合中需要用到這種方式,必須通過簡單的實例加以確認,否則,連接結果很可能不是我們所想要的!
          ? 4. on條件語句不能省略。
          ? 5. 可以連鎖使用join,每次使用join都令另一表與當前的表或連接的結果相連接。


          在下文中,用到了兩個表,"部門"表與"組織"表,其中,"部門"表有一名為"組織編號"的外鍵,指向"組織"表中的主鍵"編號"。

          inner join

          ? 格式:select * from 部門 inner join 組織 on 部門.組織編號 = 組織.編號

          ? 目的:將兩表中符合on條件的所有記錄都找出來。

          ? 規(guī)律:

          ??? 1. 拼出的大表記錄不會增加。
          ??? 2. 如果左邊與右表的關系是一對多的關系,在選出的任一記錄中,假若右表有多個記錄與其對應,那么,連接后的左表,主鍵將不再唯一。

          ? 典型應用:將存在多關系的引用表放在左表,將存在一關系的被引用表放在右表,通過=號將主外鍵進行連接,通過對右表設定過濾條件,選出相應的且主鍵唯一的左表記錄。

          ? 備注:inner join 是默認的連接方式,可縮寫為join。

          ? 轉化為where子句:

          ??? select * from 部門, 組織 where 部門.組織編號 = 組織.編號

          ?

          left outter join

          ? 格式: select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號

          ? 格式: select * from 組織 left join 部門 on 組織.編號 = 部門.組織編號

          ? 目的:將左表的所有記錄列出,右表中只要符合on條件的,與左表記錄相拼合,不符合條件的,填以null值。

          ? 規(guī)律:

          ??? 1. 選出所有符合條件的左表,如果左邊與右表的關系是一對一的關系,則拼成的大表記錄不會改變。
          ?????? 如果左邊與右表的關系是多對一的關系,則拼成的大表記錄也不會改變。
          ?????? 如果左邊與右表的關系是一對多的關系,則拼成的大表記錄會增加。對于每一具有一對多關系的左表記錄,如果左表1:N與右表對應,那么會多出N-1條記錄。例如,如果左表第一條記錄1:3對應于右表,多出2條記錄。如果左表第二條記錄1:2對應于右表,則再多出1條記錄。這樣,總共多出3條記錄。其他類推。
          ??? 2. 如果左邊與右表的關系是一對多的關系,在選出的任一記錄中,假若右表有多個記錄與其對應,那么,連接后的左表,主鍵將不再唯一。
          ??? 3. 如果左邊與右表的關系是一對多的關系,對于左表任一記錄,如果右表沒有記錄與其相對應,則全部填以null值。

          ? 典型應用:將存在多關系的引用表放在左表,將存在一關系的被引用表放在右表,通過對右表設定過濾條件,選出相應的且主鍵唯一的左表記錄。

          ? 備注:left outter join可用left join代替。在有些數(shù)據庫中,如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值。

          ? 規(guī)律:(與left outter join相反)

          ? 典型應用:可轉化成left outter join。例如

          ??? select * from 組織 right join 部門 on 部門.組織編號 = 組織.編號
          ??? 與
          ??? select * from 部門 left join 組織 on 部門.組織編號 = 組織.編號
          ??? 的效果一樣

          ? 備注:right outter join可用right join代替。在有些數(shù)據庫中,如HSqlDb, 沒有實現(xiàn)right join功能。

          ? 轉化為where子句:

          ??? select * from 部門, 組織 where 部門.組織編號 = 組織.編號

          posted @ 2006-05-18 09:43 beyondduke 閱讀(5860) | 評論 (1)編輯 收藏

          遞歸小程序

          遞歸

          posted @ 2006-03-29 09:31 beyondduke 閱讀(290) | 評論 (0)編輯 收藏

          程序員的方向

          轉眼做程序已經1年半了,現(xiàn)在的工作似乎很不可思議,自己也搞不清是否真正屬于一個程序員。每天面對msn上幾十個客戶(大多數(shù)都是程序員),忙得不亦樂乎,總是不斷的switch workspace,客戶的問題你要能重現(xiàn)才行。也許這也是一種鍛煉吧,需要十足的耐心,千萬不能浮躁,一旦出現(xiàn)問題還要不斷的debug!

          posted @ 2006-03-25 11:21 beyondduke 閱讀(388) | 評論 (0)編輯 收藏

          linux 下配置java環(huán)境(jdk和tomcat)

          JDK的配置:

              1,  下載j2sdk-linux-i386-rpm.bin
              2,運行命令:chmod +x j2sdk-linux-i386-rpm.bin     (修改成可執(zhí)行權限)
              3,執(zhí)行:./ j2sdk-1_3_1-linux-i386-rpm.bin        (執(zhí)行后生成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命令,驗證環(huán)境是否配置成功。

          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 閱讀(903) | 評論 (0)編輯 收藏

          JDBC實現(xiàn)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(); 
          瀏覽數(shù)據庫的數(shù)據,發(fā)現(xiàn)image項中數(shù)據大小與圖片大小一致,說明入庫了!
           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盤根目錄,會發(fā)現(xiàn)Sunset.jpg文件,跟C盤下是一樣的,說明入庫出庫成功!

          posted @ 2006-02-14 09:23 beyondduke 閱讀(2663) | 評論 (0)編輯 收藏

          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          導航

          統(tǒng)計

          公告


          MSN聯(lián)系

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          我的連接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 江山市| 台山市| 新疆| 修文县| 樟树市| 凤庆县| 博罗县| 九龙县| 洪雅县| 福安市| 杭锦后旗| 新竹县| 格尔木市| 开封县| 清徐县| 永福县| 奉贤区| 凤庆县| 盐山县| 孟州市| 正蓝旗| 雷州市| 习水县| 大兴区| 德化县| 盐边县| 略阳县| 赞皇县| 屯留县| 靖宇县| 文安县| 封开县| 屏山县| 巴青县| 石阡县| 民权县| 长子县| 安泽县| 禄丰县| 绥芬河市| 红桥区|