<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Javaphua Blog

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      46 Posts :: 5 Stories :: 46 Comments :: 0 Trackbacks

    #

    JBuilder2007 打通任督二脈的嶄新Java開發工具

    JBuilder的發展史說起來并不順暢,從早期JBuilder 1~3版本在Java開發工具競爭場中苦苦追趕對手,到JBuilder 4~8版本時期雄霸Java開發工具王者的寶座,JBuilder可以說是在備嘗艱辛之后才擁有光榮的Java開發工具王朝。但是許多人并不知道JBuilder在Borland內部的定位非常奇怪,也就是因為這個定位讓JBuilder在9之后的版本逐漸被其他Java開發工具奪去其第一的地位。這個故事要從JBuilder成功地成為第一的Java開發工具之后說起。
    原來在數年前當JBuilder 8打下天下之后,Borland開始走向ALM的市場。由于JBuilder在當時是舉世皆知的Borland成名工具,因此當Borland決定開發ALM產品系列時,希望使用Java技術,并且希望能夠和JBuilder連接在一起,好借助當時JBuilder在企業的影響力而能夠順利地把Borland的ALM產品線打入企業市場。所以當時JBuilder在Borland內部被歸屬為ALM部門的產品,而不屬于開發工具部門的產品。
    由于JBuilder肩負了ALM的重大任務,在隨后的版本中,JBuilder的功能大都是為了與ALM產品連接以及支持最新的EJB服務器,因此,JBuilder R&D花費了大量的時間集成Borland ALM產品,更新使用最新的JDK和各廠商的EJB服務器,幾乎把所有精力都放在企業級的應用。然而不幸的是,那時正是開源碼和各種Java開源框架蓬勃發展的時期,Java開發者最需要的是Java開發工具能夠支持這些最新、最重要的Java框架和Java技術,JBuilder卻在Borland錯誤的定位下逐漸失去其領導地位。不過,雖然在這個時期JBuilder錯失了大多數開發人員需要的功能,但是我個人認為JBuilder唯一在開發者需求方面最成功的地方就是集成了Together的強大建模能力,以及能夠對于模型/程序碼進行稽核和度量的功能,這是任何其他Java開發工具所不能企及的。
    2006年是JBuilder轉機的一年,因為JBuilder終于脫離了Borland而正式成為CodeGear公司的主力Java開發工具。CodeGear終于能夠指正Borland犯下的錯誤,讓JBuilder有機會重返Java開發工具王者的地位,主角就是JBuilder 2007。
    是什么使JBuilder 2007能夠再次成為Java開發工具的首選? 現在版本的JBuilder有什么過人之處以及比不上的地方? 答案就是JBuilder有無人能及的建模和企業級的開發功能,例如JBuilder的EJB開發功能。表現不如人意的地方就是缺乏支持主流Java框架,例如Hibernate,Spring和Web方面的框架,以及充分支持開發人員生產力的功能,例如Build Java項目、追蹤臭蟲、項目管理等。
    而目前EJB 3和Java Persistence API(JPA)正如潮水般席卷Java開發社群,Hibernate 3.x和Oracle的TopLink都開始支持JPA,JBoss 4.x和GlassFish/AppSever 9也都支持EJB 3.0的開發,因此JBuilder 2007的成功運算式就是:
    完整建模能力 + 主流Java框架 + 強大EJB3/JPA開發能力 + 高生產力開發者功能
    JBuilder 2007將充分而且完美地結合第一名的Java商業開發工具和Java開源框架/程序碼成為第一個打通任督二脈的嶄新Java開發工具。例如在JBuilder 2007中我可以建立可視化EJB 3開發項目,可視化JPA開發項目,Hibernate/Spring項目,Tapestry項目,Java建模項目等,JBuilder 2007支持的Java相關開發項目絕對是第一的。例如下圖就是筆者在JBuilder 2007中使用JBoss 4.x + Hibernate 3.x + InterBase 2007進行可視化EJB 3.0的項目開發:

    11月28日和11月30日我將代表公司分別在北京和上海舉辦JBuilder 2007的發布會,使用Java開發的朋友將有機會一見最強大的新時代Java開發工具:JBuilder 2007。在這個發布會中我將介紹JBuilder的技術發展史,JBuilder 2007的技術架構,令人驚嘆的新功能以及JBuilder未來的發展路線圖,不管您目前是否使用JBuilder,您都需要看看這個即將震撼Java開發工具界的王者。對于大陸的朋友,您可以在下面的URL中找到相關資訊:
    http://www.csdn.net/subject/borland/index.html
    CodeGear的JBuilder會成功地重返頂級Java開發工具之巔嗎? 我想這是有機會的,CodeGear也有決心做到。從CodeGear的第一個推出版本JBuilder 2007看來,這個目標似乎已經不遠了。現在連我這個以前不常使用JBuilder的人都愈來愈喜歡JBuilder 2007了,最近一段時間居然發現花在JBuilder 2007集成開發環境中的時間比花在BDS 2006都多了,呵呵,這當然是因為我非常喜歡EJB 3/JPA和Hibernate 3.x,現在JBuilder 2007是支持這三個最新技術的最完整和強大的Java開發工具。
    這篇介紹JBuilder 2007的文章只是第1篇,因為這篇文章的名稱就是“首部曲”。在下一篇文章中我將會介紹如何使用JBuilder 2007開發EJB 3.0的應用程序,還將詳細介紹如何使用JBoss 4.x + Hibernate 3.x + InterBase 2007+JBuilder 2007進行強大的可視化開發。
    我們下次再見了:)。


    jbuilder 2007 好像是居于eclipse開發的。
    posted @ 2006-12-15 14:15 Javaphua 閱讀(739) | 評論 (6)編輯 收藏

    編 程 之 道
    Geoffrey James
    ?
    ? 第一篇 靜寂的空宇
    ? 第二篇 古代的大師
    ? 第三篇 設計
    ? 第四篇 編碼
    ? 第五篇 維護
    ? 第六篇 管理
    ? 第七篇 公司里的學問
    ? 第八篇 硬件和軟件
    ? 第九篇 尾聲
    ?
    ?
    第一篇 靜寂的空宇
    編程大師如是說:
    “當你有本事奪走我手中的這塊水晶石時,就是你出師的時侯了?!?
    1.1
    在靜寂的空宇里,一種神奇的物質形成并誕生了。它立刻便靜止了,獨自守侯著,豪無動靜,然而又處于永恒的運動之中。它是所有程序的源頭,我不知道它的名字,所以我將稱它為編程之道。
    ?
    如果此道是完美的,那些操作系統就是完美的,如果操作系統是完美的,那么編譯程序就是完美的,如果編譯程序是完美的,那么應用程序就是完美的。用戶滿意之至--和諧便應運而生。
    ?
    編程之道流逝遠去,又乘著晨風而歸。
    1.2
    此道產生了機器語言,機器語言又產生了匯編語言,
    匯編語言產生了編譯程序,如今有了上萬種的語言。
    每一種語言都有其各自的卑微用途。每一種語言都表達出軟件的陰和陽。每一種語言都在此道之中有其一席之地。
    但是,應盡量避免用COBOL語言編寫程序。
    1.3
    宇宙之初有道,道產生了空間和時間??臻g和時間便是程序設計之陰陽。
    不能領悟此道的編程者總是耗盡他們所要編寫的程序的時間和空間;而領悟了此道的編程者卻總有足夠的時間和空間來達到他們的目標。
    除此之外,難道還有其它的情形嗎? 1.4
    精明的編程者聽說了此道,并遵循它;平庸的編程者聽說了此道,并尋覓它;愚蠢的編程者聽說了此道,卻嘲笑它。
    要不是因為有嘲笑,道也就不復存在了。
    最高的聲音最難被聽見。前進也是一種倒退。大器晚成。即使是一個完美的程序也仍然會有隱患。
    道深藏不露,難于理解。
    top
    ?
    ?
    ?
    第二篇 古代的大師
    編程大師如是說:
    “倘若三天不編程,生活將變得毫無意義。”
    2.1
    老一輩的程序員是神秘的、深奧的。我們沒法揣摩他們的想法,我們所能做的只是描述一下他們的表象。
    ? 他們是清醒的,就像一只游過水面的狐貍;
    ? 他們是警惕的,就像一位戰場上的將軍;
    ? 他們是友善的,就像一位招待客人的女主人;
    ? 他們是簡單的,就像未經刻鑿的木頭;
    ? 他們還是難以琢磨的,就像黑暗的洞穴中漆黑的池水。
    誰能說出他們心中的秘密?
    答案只存在于道中。
    2.2
    計算機科學巨擘圖靈曾經夢到他是一臺機器。當他醒來時,他驚嘆道:
    “我不知道--我是夢到了自己是臺機器的圖靈,還是一臺夢到了自己是圖靈的機器?”
    2.3
    一家大電腦公司的一名程序員參加了一次軟件研討會。他回來后向經理匯報說:“為其它公司工作的那些程序員都是些什么的人?。克麄冃袨樽玖?,不顧及自己的儀表。他們的頭發又長又亂,衣服又皺又舊。他們闖進我們的會客組,還在我演講時發生粗魯的喧鬧?!?
    ?
    經理說:“我本不應該讓你去參加這個會議。那些程序員是生活在物質世界之外的。他們認為生活是荒唐的,一種意外的巧合。他們來去自如。他們只為他們的程序而活著,無憂無慮地活著。為什么要用社會習俗來約束他們呢?
    ?
    他們活在此道之中?!?
    2.4
    一個禮堂者問大師:“有位程序員,從不構思、編寫文檔或測試他的程序,然而所有知道他的人都認為他是世界上最棒的程序員。這是為什么呢?”
    大師回答說:“那個人掌握了道。他不需要事先進行構思,當系統崩潰時,他不會因此而悶悶不樂,而是心平氣和地接受整個事實。他還從編寫程序說明文檔的需要之中超脫了出來,不在意是否有人看他的編碼。他也不需要進行測試。他的每個程序都完美無缺。寧靜而優雅,程序的用途也顯而易見。
    ?
    的的確確,他已經進入了道的神奇境界?!?
    top
    ?
    第三篇 設計
    編程大師如是說:
    “當程序被測試時,再修改設計方案就太遲了。”
    3.1
    曾經有個人去參加一次電腦展示會,每天當他進入展館時,都對門衛說:
    “我是個大盜,我偷盜的本領是出了名的。事先警告你,這次展示會也在劫難逃。”
    這番話讓門衛坐立不安,因為里面有價值數百萬美元的電腦設備,所以他緊緊地盯住這個人。但這個人只是從一個展攤逛到另一個展攤,嘴里輕輕地哼著小曲。
    當這個人出門時,門衛把他拉到一邊,搜查他的衣服,但一無所獲。
    第二天,這個人又來了,并對著門衛囂張地嚷著:“昨天我滿載而歸,但今天的收獲會更大?!庇谑牵T衛盯他盯得更緊了,但仍一無所獲。
    在展示會的最后一天,門衛再也抑制不住自己的好奇心了?!按蟊I先生,”門衛說,“我被你搞糊涂了,實在想不明白。請告訴我,你究竟在偷什么?”
    這個人笑了?!拔以谕迪敕??!彼f。
    3.2
    曾經有位編程大師,喜歡編寫非結構化的編程。一位初學者試圖模仿他,也開始編寫非結構化的程序。當這位徒弟請師父評價他的進展時,師父批評了他的做法。他說:“對一位編程高手適合的,對初學者來說并不一定適合。在超越結構化之前,你必須先領悟道?!?
    ?
    3.3
    曾經有位程序員被派到IBM的軍機大臣手下工作。軍機大臣問程序員:“設計一個財務軟件包,和設計一個操作系統,哪一個更容易?”
    “操作系統。”程序員回答說。
    軍機大臣立刻發生一種不信任的驚嘆,“與一個復雜的操作系統,一個財務軟件包簡直是小巫見大巫?!彼f。
    “并非如此,”程序員說,“在設計一個財務軟件包時,編程人員是作為一個中介者在觀念各異的人們之間起作用的:這個軟件必須如何操作,它的報表必須是什么形式,它必須如何與稅法一致,等等,一個操作系統則不為其外觀所限制。當設計一個操作系統時,編程人員只要在機器與人的思維之間尋找一種最簡單的和諧就可以了。這就是為什么操作系統更容易設計。”
    ?
    軍機大臣點點頭,笑了。“說來也是。但要想檢測和糾正其中的錯誤,哪個更容易呢?”
    程序員沒有回答。
    3.4
    一位經理到編程大師那里,交給他一份有關一個新應用程序的需求說明。經理問編程大師:“如果我分配五個程序員給你,你需要多久能設計好這個系統?”
    “那將花費一年的時間?!贝髱熈⒖袒卮?。
    “但我們馬上就需要這個系統,甚至要求更快!如果我分配十個程序員給你,你需要多長時間?”
    大師皺了皺眉頭,“那樣的話,需要兩年?!?
    “如果我分配一百個程序員給你怎么樣?”
    大師聳了聳肩膀,“那么這項設計將永遠無法完成。”他說??
    ?
    ?
    ?
    第四篇 編碼
    編程大師如是說:
    “一個寫得完美的程序是其自身的天堂,而一個寫得糟糕的程序則是其自身的地獄?!?
    4.1
    一個程序應當是輕盈的、靈活的,它的子程序就像一串珍珠一樣連接著。它的精神和意圖應該貫穿始終。在程序中,內容既不應太多,也不應太少;既不應該有不需要的循環結構,也不該有冗余的變量;既不缺乏結構性,又不過分僵化。
    ?
    一個程序,無論多么復雜,都應該以一個整體的方式運行。程序應以其內在的邏輯為指引,而非外在形態。
    如果一個程序不能達到這些要求,它將處于一種雜亂無章的混淆不清的狀態。唯一的方法就是重寫這個程序。
    4.2
    一位初學者問大師:“我有個程序,時靈時不靈。我一直都遵循著編程的規則,結果卻整個兒搞糊涂了。這是什么原因呢?”
    大師回答說:“因為你沒有領悟道,所以你迷惑不解。只有傻瓜才會指望從人類身上看到理性的行為,你又能指望一臺人類制造的機器怎么樣呢?計算機模仿的是決定論,只有道才是盡善盡美。
    ?
    編程用的那些條條框框式的規則僅僅是曇花一現,只有道才是永恒的。因此,在你受到道的啟發之前,你必須沉思于道?!?
    “但是我怎樣才能知道我已經受到了啟發了呢?”初學者問。
    “當你的程序運行無誤時。”大師回答說。
    4.3
    一位大師正在向他的一名初學編程的弟子解釋道的真諦?!按说荔w現在所有的軟件當中--不管它看上去多么無足輕重。”大師說著。
    “此道體現在手掌計算器中嗎?”初學者問。
    “是的。”
    “此道在電子游戲中嗎?”初學者繼續問。
    “此道甚至也體現在電子游戲之中?!贝髱熣f。
    “那么此道也體現在個人電腦的DOS系統之中嗎?”
    大師咳嗽一聲,并稍稍挪動了一下位置。“今天的課就到這里吧?!彼f。
    4.4
    一位項目經理手下的一名程序員正編寫軟件。他的手指在鍵盤上飛舞著,在程序的編譯過程中沒有出現任何錯誤信息。程序運行起來就像一陣和風。
    “太好了!”經理高興地大叫了起來,“你的技藝簡直是完美無缺?!?
    “技藝?”程序員說著便從他的終端機前轉過身來,“我遵循的是道--所有的技藝遠不能及!當我剛開始編程時,我眼前看見的是整個問題亂成一團。三年之后,我再也看不見這種一團糟的情形了。相反,我用了各種各樣的子程序。但現在,我什么也看不見了。我的整個身心存在于一種無形的虛空里,我的知覺是空蕩蕩的。
    ?
    我的精神隨其本能而動,不無原則計劃就能自由地工作。總而言之,是我的程序自己寫出了自己。誠然,有時會有一些難題。我看見那些難題向我走來,于是我放慢了速度,默默地注視著他們。然后我更改了一行編碼,那些問題就煙消云散了。然后我完成程序的編譯。我靜靜地坐著,讓工作的歡心情舒暢遍布我的全身。我閉上雙眼,歇息片刻,然后退出系統?!?
    ?
    經理說,“希望我的所有的程序員都這么聰明!”


    第五篇 維護
    編程大師如是說:
    “即使一個程序只有三行長,總有一天它也不得不需要維護?!?
    5.1
    一記扇經常開啟的門的絞鏈不需要潤滑油。
    一條湍急的河流不會變得污濁。
    無論是聲音還是想法都不可能在真空中傳播。
    軟件如果不用就會腐朽。
    這世界真奇妙。
    5.2
    一個程序員正在編寫他的程序,經理問他還需要多長時間完成。
    “明天就可以完成?!背绦騿T立刻回答。
    “我想你這是不切實際,”經理說,“實話實說,這需要多長時間?”
    程序員想了一會兒?!拔疫€想加進一些新的特色,這需要花至少兩個星期的時間。”他最后說。
    “即使那樣也期望過高,”經理堅持說,“只要你編完程序時告訴我一聲,我也就滿足了。”
    程序員答應了。
    幾年以后,那位經理要退休了。在他去退休午餐會的路上。他發現那個程 序員趴在他的終端機前睡著了。整個晚上都在忙于編寫那個程序。
    5.3
    一次一位初學編程者被指派編寫一個簡單的財務軟件包。這位初學者大張旗鼓地工作了許多天。但當他的師父檢查這套程序時,發現其中包含有一個屏幕編輯器,一套通用圖表程序,一個人工智能界面,然而卻沒有任何財務方面的東西。
    ?
    當師父問及此事時,初學者顯得憤憤不平?!安灰@樣沒有耐心嘛,”他說,“我最后加些財務的素材進去就是了?!?
    5.4
    難道一位好農民會漏掉他所種的一株莊稼嗎?
    難道一位好老師會放棄哪怕是最差的學生嗎?
    難道一位好父親會允許哪一個孩子挨餓嗎?
    難道一位好程序員會不愿維護他的程序嗎?
    top
    ?
    ?
    ?
    第六篇 管理
    編程大師如是說:
    “讓程序員多而經理少--然后生產效率就會高。”
    6.1
    當經理們沒完沒了地開會時,程序員就寫些游戲玩;當財務主管們談到季度利潤時,開發用的預算馬上就要被削減;當資深科學家們談論藍藍的天空時,馬上就會風起云涌。
    其實,這并不是編程之道。
    當經理們忠于職守時,游戲程序就會被擱置到一邊;財務主管們制訂出長 遠的計劃時,和諧秩序將很快恢復;當資深科學家們著手于眼前的問題時,這些問題不久就會解決。
    其實,這才是編程之道。
    6.2
    為什么程序員沒有效率?
    因為他們的時間浪費在開會上。
    為什么程序員很難管束?
    因為管理層多管閑事。
    為什么程序員接二連三地辭職?
    因為他們的熱情已耗盡。
    在糟糕的管理之下工作,他們不再敬業。
    6.3
    一位經理即將被解職,但此時他手下的一名程序員發明了一個新的程序。這個程序流行起來,并且極為暢銷。結果,經理又回到了原來的崗位上。
    經理試圖要發給那位程序員一筆資金,但程序員拒絕了。他說:“我寫這個程序,因為我認為這是個很有意思的想法。我并不期望有所回報?!?
    經理聽到這話,評論說:“這位程序員雖然身居卑位,卻能很好地理解一位雇員應盡的職責。讓我們提拔他到管理顧問的高位上吧!”
    然而,接到通知后,那位程序員又一次拒絕了。他說:“我在屬于我的位置上,才能較好地編程。如果我被提升了,除了浪費每個人的時間,我將一事無成?,F在我可以走了嗎?我還有一個程序要編呢。”
    ?
    6.4
    一位經理走過來對他的程序員們說:“關于你們的上班時間:你們要早上九點鐘到,下午五點鐘下班?!甭犃诉@話,所有的程序員都很氣憤,其中有幾位要當場辭職。
    于是,經理只好又說:“好吧,那樣的話,你們可以自己安排上班時間,只要你們能按時完成項目。”程序員們滿意了。以后,他們中午來到辦公室,一起工作到凌晨。
    top
    ?
    第七篇 公司里的學問
    編程大師如是說:
    “你可以向一位公司總裁演示一個程序,但你無法使他學會使用電腦。”
    7.1
    一位初學者問大師:“在東方(此處喻指美國的東海岸,有許多大公司的總部--譯注),有一個不尋常的樹狀結構,人們稱它為‘公司總部’。它的副總裁們和財務主管們的數量之大,使它鼓得不成開關。它簽發大師的便函,每份上都寫著”歸去”“來兮”,卻沒有人知道那是什么意思。它的那些分支機構每年都要換新的名字,但都毫無價值。如此一個不正常的實體怎么能繼續存在呢?”
    ?
    大師回答說:“你探察這個龐大的鄧因其沒有合理的用途而心神不定。難道你不能從它那無盡的回旋中得到樂趣嗎?你不會享受一下在它所蔽護的部分里的編程的那種無憂無慮的輕松嗎?你為什么要因為它毫無用處而心煩意亂呢?”
    ?
    7.2
    在東方,有一條大魚,比其它所有的魚都要大。它變成了一只鳥,它的翅膀就像云朵一個布滿了天空。當這只鳥飛過陸地時,它帶來了“公司總部”的消息,像蜻蜓點水一樣把這個消息丟在了那些程序員中間。然后這只鳥駕著風,背負藍天,返回了家園。
    ?
    初學編程者驚奇地盯著那只鳥,因為他根本無法理解;平庸的程序員畏懼那只鳥的到來,因為他害怕鳥兒帶來的消息;而編程大師卻仍然在他的終端機前工作,因為他不知道那只鳥來了又去了。
    ?
    7.3
    象牙塔里的魔術師帶來了他最新的發明,要讓編程大師檢驗一下。魔術師把一只大黑箱子推進辦公室,大師靜靜地等侯著。
    “這是一臺集成的、分布式的、通用的工作站,”魔術師開始,“運用人類工程學原理,使用享有專利的操作系統、第六代評議和多重狀態用戶界面而設計完成。建造這臺工作站,花了我幾百名助手幾年的時間。這不足以令人驚奇嗎?”
    ?
    大師輕輕地揚了揚眉毛。“這的確令人驚奇?!彼f。
    “公司總部已經命令,”魔術師繼續說,“每個人都得使用這臺工作站作為操作平臺來設計新的程序。你同意嗎?”
    “當然同意,”大師說,“我馬上就把它運到數據中心去?!庇谑悄g師興高采烈地回到了象牙塔去了。
    幾天后,一位初學者走進大師的辦公室問道:“我找不到我的新程序清單了。你知道它會放在哪兒嗎?”
    “知道,”大師回答說,“那些清單就堆放在數據中心的臺子(platform“可以指操作平臺”,也可以指普通的臺子--譯注)上。”
    7.4
    編程大師從不懼怕在設計不同程序的崗位間調來調去;管理層的變動不可能對他有所損害;他不會被解雇,即使項目取消了。這是為什么呢?因為他胸有成“道”。
    top
    ?
    ?
    ?
    第八篇 硬件和軟件
    編程大師如是說:
    “沒有風,草兒靜止不動;沒有軟件,硬件則無所為用?!?
    8.1
    一位初學者問大師:“我覺察到有一家電腦公司比其它所有的公司都要大得多。它在中遙遙領先,就如同鶴立雞群一般。它的任意一個部門都可以組成一個完整的企業。這是為什么呢?”
    ?
    大師回答說:“你怎么問這么愚蠢的問題呢?因為那家公司大,所以它就大嘛。如果它僅僅生產硬件,沒人愿買;如果它僅僅生產軟件,沒人愿用;如果它僅僅維護一下系統,人們將把它當作是傭人。然而,因為它把所有這些東西都結合了起來,它便搖身一變,被人們看作是諸神之一。不費吹灰之力,它便能取勝。
    ?
    8.2
    一天,一位大師從初學編程者身邊經過,他發現這位初學者正在全神貫注于掌上電腦游戲?!皩Σ黄穑彼f,”我可以看一下嗎?”
    初學者立刻緊張起來,把那個玩意兒遞給了大師。“我知道這種設備提供了三個游戲級別:容易、中等和高難,”大師說,“然而每個這樣的設備都有另一個級別,在這一級,游戲機既不想贏人,也不想被人打敗?!?
    ?
    “請問,尊敬的大師,”初學者懇求道,“怎樣才能找到這個奇妙的級別設置呢?”
    大師把那個玩意兒扔到地上,踩到粉碎。突然間,那個初學者明白了什么。
    8.3
    曾經有一個程序員,擅長在微電腦上編程,“瞧,我在這里過得多好呀,”他對另一位來訪的程序員說,這位程序員是在大型主機上工作的,“我有自己的操作系統和文件存儲設備,我不必和其他任何人分享我的資源。這里的軟件自相一致,很容易使用。你為何不辭去現在的工作,加入到我這里來呢?”
    ?
    于是,主機程序員開始向他的這位朋友描繪他的系統:“主機就像一位陷入沉思的圣人一樣,端坐在數據中心。它的磁盤器首尾聲相連,就如同機器的海洋。這里的軟件既像鉆石一樣能多面反射光芒,又像原始叢林一樣復雜難測。這里的程序,各具特色,它們像湍急的河流穿過系統。這就是我樂于此處的原因。
    ?
    微電腦程序員聽到這里,陷入了沉默。但這兩位程序員至死都保持著友誼。
    8.4
    在去硅谷的路上,硬件碰上了軟件。軟件說:“你是陰,我是陽。如果我們攜手同路,我們將聞名于世,并能賺大筆的錢?!庇谑?,這一對陰和陽便一同往前走,想著怎么征服世界。
    ?
    不一會兒,他們遇到了固件(firmware,硬件和軟件結合在一起的部件,如IC卡--譯注),他衣衫襤褸,手里拄著根帶刺的拐杖,蹣跚地走著。固件對他們說:“道存在于陰、陽之外。它默默無聞,靜如止水。它不追求名譽,所以沒人知道它的存在;它不追求財富,因其自身完整圓滿。它存在于空間和時間之外。”
    ?
    軟件和硬件,自覺慚愧,掉頭回家去了。
    posted @ 2006-11-28 00:22 Javaphua 閱讀(179) | 評論 (0)編輯 收藏

    關于javascript對cookie的設置與讀取

    <script>
    //設置Cookie
    ? function setCookie(va){
    ???????var expires = new Date();
    ??????expires.setTime(expires.getTime() +?12 * 30 * 24 * 60 * 60 * 1000);
    ??????/*?? 一年 x 一個月當作 30 天 x 一天 24 小時
    ??????x 一小時 60 分 x 一分 60 秒 x 一秒 1000 毫秒 */
    ???????document.cookie=va+';expires='+expires.toGMTString();
    ? }
    ? //讀取Cookie
    ? function readCookie(name){
    ? var cookieValue = "";
    ? var search = name + "=";
    ? if(document.cookie.length > 0)? {
    ??? offset = document.cookie.indexOf(search);
    ??? if (offset != -1)??? {
    ????? offset += search.length;
    ????? end = document.cookie.indexOf(";", offset);
    ????? if (end == -1) end = document.cookie.length;
    ????? cookieValue = unescape(document.cookie.substring(offset, end))
    ??? }
    ? }
    ? return cookieValue;
    }

    setCookie("user=123");
    alert(readCookie('user'));
    </script>
    posted @ 2006-11-11 19:58 Javaphua 閱讀(329) | 評論 (0)編輯 收藏

    ??????? 第一次給客戶安裝正版oracle 10g數據庫,配套很多,大概有十多張盤,但真正就只用了兩張,一張還是屬于oracle工具類,遠沒有盜版集成的方便。
    ??????? 本人英文不是太好,找了半天才找到安裝的盤,安裝很順利,但這種順序讓我產生了一個疑問,怎么我沒有輸序列號就安裝過去了,郁悶,不知道哪位朋友能否告訴我一下,正版的不需要序列號就可以安裝嗎?還是安裝序列號已經集成在盤內了,無解,也是第一次安裝,只好向各位請教一下?
    posted @ 2006-10-28 20:42 Javaphua 閱讀(1309) | 評論 (6)編輯 收藏

    程序員每天該做的事

    1、總結自己一天任務的完成情況
    最好的方式是寫工作日志,把自己今天完成了什么事情,遇見了什么問題都記錄下來,日后翻看好處多多

    2、考慮自己明天應該做的主要工作
    把明天要做的事情列出來,并按照優先級排列,第二天應該把自己效率最高的時間分配給最重要的工作

    3、考慮自己一天工作中失誤的地方,并想出避免下一次再犯的方法
    出錯不要緊,最重要的是不要重復犯相同的錯誤,那是愚蠢

    4、考慮自己一天工作完成的質量和效率能否還能提高
    一天只提高1%,365天你的效率就能提高多少倍你知道嗎? (1+0.01)^365 = 37 倍

    5、看一個有用的新聞網站或讀一張有用的報紙,了解業界動態
    閉門造車是不行的,了解一下別人都在做什么,對自己能帶來很多啟示

    6、記住一位同事的名字及其特點
    你認識公司的所有同事嗎?你了解他們嗎?

    7、清理自己的代碼
    今天完成的代碼,把中間的調試信息,測試代碼清理掉,按照編碼風格整理好,注釋都寫好了嗎?

    8、清理自己的桌面
    當日事當日畢,保持清潔干勁的桌面才能讓你工作時不分心,程序員特別要把電腦的桌面清理干凈

    程序員每周該做的事
    1、向你的老板匯報一次工作
    讓你的老板知道你在做什么,這很重要。可以口頭、書面、郵件,看你老板的工作方式而定

    2、進行一次自我總結(非正式)
    這周之內自己表現得怎么樣?該加分還是扣分?

    3、制定下周計劃
    把下周要做的事情列出來,一樣要分清楚優先級

    4、整理自己的文件夾、書柜和電腦文件
    把桌面以外的地方也要清理干凈,電腦的文件夾,收到的郵件,把過時的垃圾全部清理掉

    5、與一個非公司的朋友溝通
    它山之石,可以攻玉

    6、看一本雜志
    找一本適合自己的專業雜志

    7、糾正自己或同事一個細節上的不正確做法
    《細節決定成敗》看過了嗎?沒看過強烈建議先看看

    程序員每月該做的事
    1、至少和一個同事一起吃飯或喝茶
    不光了解自己工作伙伴的工作,還要了解他們的生活

    2、自我考核一次
    相對正式地考核自己一下,你對得起這個月的工資嗎?

    3、對你的同事考核一次
    你的同事表現怎么樣?哪些人值得學習,哪些人需要幫助?

    3、制定下月的計劃,確定下月的工作重點

    4、總結自己工作質量改進狀況
    自己的質量提高了多少?

    5、有針對性地對一項工作指標做深入地分析并得出改進的方案
    可以是對自己的,也可以是對公司的,一定要深入地分析后拿出自己的觀點來。要想在老板面前說得上話,做的成事,工作上功夫要做足。

    6、與老板溝通一次
    最好是面對面地溝通,好好表現一下自己,虛心聽取老板的意見,更重要的是要了解老板當前關心的重點

    程序員每年該做的事
    1、年終總結
    每個公司都會做的事情,但你真正認真地總結過自己嗎?

    2、兌現給自己、給家人的承諾
    給老婆、兒子的新年禮物買了沒有?給自己的呢?

    3、下年度工作規劃
    好好想想自己明年的發展目標,爭取升職/加薪、跳槽還是自己出來干?

    4、掌握一項新技術
    至少是一項,作為程序員一年要是一項新技術都學不到手,那就一定會被淘汰。
    掌握可不是看本書就行的,要真正懂得應用,最好你能夠寫一篇教程發表到你的blog

    5、推出一種新產品
    可以是一個真正的產品,也可以只是一個類庫,只要是你創造的東西就行,讓別人使用它,也為世界作點貢獻。當然如果真的很有價值,收點注冊費也是應該的

    6、與父母團聚一次
    常回家看看,?;丶铱纯?/p>

    posted @ 2006-10-24 09:33 Javaphua 閱讀(335) | 評論 (0)編輯 收藏

    xdb占用8080端口的問題

    關鍵詞oracle ?? ??????????????????????????????????????

    原因:
    Oracle 9i開始,創建數據庫時默認包含了XDB特性。一旦啟動了數據庫和Listener,Oracle XDB的http服務就占用8080端口,剛好和JBoss、Tomcat等默認端口沖突。因此,必須有一個做出更改。改Tomcat等容易,只是一時不知道怎么改XDB的配置。

    在Google上搜索一下,找到了答案。原來Oracle XDB的端口設置不在配置文件中,而是在數據庫里。


    首先存入列代碼到C:盤根目錄中文件名?。ǜ腛racle9.2的8080端口.SQL):

    call dbms_xdb.cfg_update(updateXML(
    ????????????dbms_xdb.cfg_get()
    ??????????, '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()'
    ??????????, 8081));

    call dbms_xdb.cfg_update(updateXML(
    ???????? dbms_xdb.cfg_get()
    ?????? , '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()'
    ?????? , 2111));

    COMMIT;

    EXEC dbms_xdb.cfg_refresh;


    然后,在“運行”中鍵入cmd進入命令行模式:



    執行:
    sqlplus /nolog
    conn SYS/(SYS用戶的密碼)SYS@(全局數據庫名)orcl as sysdba;
    @c:\OraDB\更改Oracle9.2的8080端口.SQL
    exit

    另:這個方法在我機子上試了好像不行,也許是我操作有誤吧。又google了一下發現了一個簡單的辦法:進入 database configuration assistant ,選“在數據庫中配置數據庫選項”,選擇你要修改的數據庫—>出現“數據庫特性”標簽,點“標準數據庫功能”,再點“自定義”按鈕,看到了配置端口的內容了吧,然后就不用我多說了。

    posted @ 2006-10-19 20:03 Javaphua 閱讀(939) | 評論 (0)編輯 收藏

    正則表達式(經典) "^\d+$"  //非負整數(正整數 + 0) "^[0-9]*[1-9][0-9]*$"  //正整數 "^\d+$"  //非負整數(正整數 + 0) "^[0-9]*[1-9][0-9]*$"  //正整數 "^((-\d+)|(0+))$"  //非正整數(負整數 + 0) "^-[0-9]*[1-9][0-9]*$"  //負整數 "^-?\d+$"    //整數 "^\d+(\.\d+)?$"  //非負浮點數(正浮點數 + 0) "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點數 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮點數(負浮點數 + 0) "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負浮點數 "^(-?\d+)(\.\d+)?$"  //浮點數 "^[A-Za-z]+$"  //由26個英文字母組成的字符串 "^[A-Z]+$"  //由26個英文字母的大寫組成的字符串 "^[a-z]+$"  //由26個英文字母的小寫組成的字符串 "^[A-Za-z0-9]+$"  //由數字和26個英文字母組成的字符串 "^\w+$"  //由數字、26個英文字母或者下劃線組成的字符串 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" ( 2006年09月28日, 05:24:42 下午 CST )Permalink留言 [0]

    使用AJAX的Struts驗證框架   實時數據驗證是AJAX技術的一大優勢之一。通過應用此技術,struts驗證框架將增強struts MVC,并使Web應用程序更接近于桌面應用程序。  此驗證框架用于驗證字段。有許多在Web應用程序上進行驗證的方法。這些方法可分為兩類:服務器端方法和客戶端方法。Struts驗證框架是面向基于Java的Web應用環境的最佳框架之一。它能夠配置應用程序,方法是使用服務器端驗證和錯誤消息,此錯誤消息在處理請求時呈現在調用的驗證流程上,它還能夠進行客戶端驗證,方法是使用請求頁面上呈現的JavaScript。  AJAX是一種JavaScript技術,它能夠異步呼叫服務器并獲取XML文檔,這類文檔最近非常流行。其用途之一就是實時數據驗證?! ”疚年P注使用AJAX增強現有struts驗證框架。必須開發幾個組件(例如控制器),以選擇驗證框架,并呈現特定格式的消息(用于客戶端)和標簽庫(處理錯誤消息呈現)。必要條件  需要一個具有Eclipse和Tomcat應用服務器的Windows系統。請確定已在操作系統中注冊了MSXML 3.0 ActiveX對象。還需要Struts庫(http://struts.apache.org)和JDOM庫(www.jdom.org),以用于XML開發(參見圖1和圖2)。 服務器端場景 StrustsActionServlet   我們必須擴展來自org.apache.struts.action.ActionServlet的類,以獲得servletMapping變量,此變量存儲關于如何針對動作類將該擴展格式化為瀏覽器地址形式的動作路徑的信息。當添加代碼時,我們必須將web.xml配置為應用服務器的Web應用程序描述符?! eb.xml配置如下:  ... actionnet.sf.struts.servlet.StrutsActionServlet ... action*.do... StrutsActionServlet Java代碼如下: public class StrutsActionServlet extends the ActionServlet. { public String getServletMapping() { return this.servletMapping; } } AjaxValidationRequestProcessor   要在第一步中支持現有Struts框架,我們必須擴展來自Struts軟件包的RequestProcessor。我們必須定制化此請求處理器,因為我們必須判別將如何進行驗證(通過使用現有Struts框架,還是利用AJAX概念),還因為我們將在服務器和客戶端之間制訂一個有關如何解釋消息的契約。在消息呈現方面,我們將使用XML格式,這是一種很好的媒體消息傳遞格式。我們將應用的XML格式的定義是:  XML Format   XML Format MessageValue 描述 ? Identity是客戶端JavaScript用于了解消息將被置于何處的ID。 ? Description是在服務器端呈現錯誤消息后的結果。   首先我們需要在繼續流程映射之前,從Web描述符獲得servlet映射配置。調用此流程后,應用程序將準備表單實例,此實例繼承自AjaxForm類。這一處理管理AJAX驗證,并且應進行檢查以確定來自客戶端的請求沒有使用struts驗證框架。其他在請求過程中執行的流程是流程填充(用于收集客戶端發送到動作表單的信息)和流程驗證(通過使用現有Struts驗證框架中已經存在于AjaxValidationRequestProcessor的父類TilesRequestProcessor中的方法)?! 碜訲ilesRequestProcessor的驗證流程將調用所有基于struts驗證框架的驗證,并將動作錯誤存儲到請求。我們需要仔細分析動作錯誤,并生成XML消息驗證,此驗證將被發送到客戶端。因為我們希望更改支持驗證的行為方式,所以驗證流程應檢查所用的驗證框架的指示器(參見圖3)。   使用JDOM作為處理引擎,生成XML消息。如圖4所示,如果流程驗證被調用,且驗證框架的條件等同于AJAX驗證框架,則流程將繼續填充錯誤消息并構建XML消息驗證。 ErrorMessageHandler   該類處理XML消息生成器的功能。此Java類將構建基于identity和description屬性的XML消息。調用方調用了buildXMLMessage之后,它將準備文檔并設置XML消息的根元素。此類還具有一個addNextXMLMessage函數,以將更多驗證消息添加到XML(參見清單1)。   清單1   ... public void buildXMLMessage() throws ParserConfigurationException { // initiate document builder to prepare the media of XML Message this.rootElement = new Element(CONSTANT_MESSAGE); addNextXMLMessage(); } ... public void addNextXMLMessage() throws ParserConfigurationException { // creating the xml message based on format above Element identityElement = new Element(CONSTANT_IDENTITY); identityElement.setAttribute(CONSTANT_NAME, this.identity); Element descriptionElement = new Element(CONSTANT_DESCRIPTION); descriptionElement.addContent(this.description); identityElement.addContent(descriptionElement); rootElement.addContent(identityElement); }   此流程方法將響應的內容類型設置為“text/xml”,并將XML消息作為字符串發送。AjaxValidationRequestProcessor代碼上的流程函數如清單2所示。   清單2   public void process(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { if ( request.getParameter(CONSTANT_VALIDATION_FRAMEWORK_ARG) != null ) { ... this.processValidate(req, resp, form, mapping); response.setContentType(CONSTANT_XML_CONTENT_TYPE); response.getWriter().write(sbXMLMessage.toString()); response.flushBuffer(); } } else { super.process(req, resp); } } processValidation方法將填充  動作錯誤,并基于面向客戶端的XML格式契約構建消息。AjaxValidationRequestProcessor代碼上的processValidation函數如下所示:  ... ActionErrors errors = (ActionErrors) request.getAttribute(Globals.ERROR_KEY); Locale locale = (Locale) request.getAttribute(Globals.LOCALE_KEY); generateXMLMessage(errors, identity, locale, sbXMLMessage); ... 客戶端場景構建標簽庫組件 ? AjaxJavaScriptLibraryTag:此標簽庫組件在客戶端呈現JavaScript功能,以實現基本XMLHTTP控制器功能。 ? AjaxErrorHtmlRenderTag:此標簽庫組件在JSP頁面呈現錯誤消息區域。 配置標簽庫定義  開發出標簽庫組件之后,我們需要配置清單3中顯示的標簽庫tld文件。   清單3   1.01.1ajaxLiblibrarynet.sf.ajax.taglib.AjaxJavaScriptLibrary JSPerrornet.sf.ajax.taglib.AjaxErrorHtmlRender JSPpropertytruetrueeventtruetrue構建JSP和Struts配置  要模擬驗證處理的結果,我們首先需要構建呈現層,方法是合并我們已經構建的標簽庫。在此例中,我試圖給出一個示例驗證(通過使用來自Struts的驗證規則組件)以及來自表單本身的驗證。準備五個JSP頁面下的文本框。第一個到第四個文本框使用驗證規則配置,第五個文本框使用來自動作表單的驗證流程。除此之外,我們還需要一個提交按鈕,以在提交表單后模擬它,現有的struts驗證仍在沒有AJAX的情況下工作。用戶界面外觀如圖5所示。 構建動作和動作表單  為獲得Struts動作,我們轉到已經構建的JSP。此動作代碼如下所示:  public ActionForward execute(...) { return mapping.findForward("success"); }   如果輸入為空,則此動作表單代碼將驗證requiredText屬性。請記住,要從AjaxForm類擴展此表單。動作表單的驗證方法如下所示:  public ActionErrors validate(...) { ActionErrors errors = new ActionErrors(); if (StringUtils.isEmpty(this.requiredText)) { errors.add("requiredText", new ActionError("error.required.input")); } request.setAttribute(Globals.ERROR_KEY, errors); } 應用Struts驗證規則  配置Struts驗證規則(例如最小長度、最大長度、電子郵件和模式文本)將應用于客戶端的輸入對象,且配置與清單4類似。   清單4   mask^[0-9]{3}-[0-9]{2}$minlength5maxlength5驗證處理流  首先客戶端會初始化XMLHTTP組件以執行到服務器的請求,然后在用戶觸發器開始構建時,URL參數將被發送到服務器。在完成構建參數后,客戶端會連接oneadystatechange XMLHTTP事件,以偵聽來自服務器端的響應。收到響應后,客戶端會開始分析XML驗證消息,并將消息放置到正確的區域(參見圖6)。   如果請求被服務器接受,則服務器會開始檢查AJAX驗證條件的參數,并處理驗證。完成之后,將從生成的錯誤對象過濾出與用戶輸入對象相關的特定錯誤。在過濾流程完成之后,將生成XML消息,并發送回客戶端(參見圖7)。 結束語  在本文中,我們構建了一個控制器,它能夠接收來自客戶端的異步請求,并合并struts驗證流程以產生動作錯誤對象。在產生錯誤對象并生成作為應答返回客戶端以指示錯誤消息的XML消息之后,將對被驗證的特定輸入對象進行過濾

    posted @ 2006-10-09 00:29 Javaphua 閱讀(372) | 評論 (0)編輯 收藏

    每頁都有的表頭和打印分頁

    ?

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>無標題文檔</title>
    <style>
    @media print{
    INPUT {display:none}
    }
    </style>
    </head>

    <body>

    <TABLE border="0" style="font-size:9pt;" width="300px" align="center">
    <THEAD style="display:table-header-group;font-weight:bold">
    <TR><TD colspan="2" align="center" style="font-weight:bold;border:3px double red">每頁都有的表頭</TD></TR>
    </THEAD>
    <TBODY style="text-align:center"">
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR style="page-break-after:always;"><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR style="page-break-after:always;"><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR><TD>表格內容</TD><TD>表格內容</TD></TR>
    <TR style="page-break-after:always;"><TD>表格內容</TD><TD>表格內容</TD></TR>
    </TBODY>
    <TFOOT style="display:table-footer-group;font-weight:bold">
    <TR>
    <TD colspan="2" align="center" style="font-weight:bold;border:3px double blue">每頁都有的表尾</TD>
    </TR>
    </TFOOT>
    </TABLE>
    <input type=button value=" 打? 印 " onclick=javascript:window.print()>
    </body>
    </html>


    ?

    在 WEB 中實現打印分頁

    ?

    要動態生成一個頁面,ASP從數據庫中生成, 要根據具體情況分頁打印,請問改怎么實現分頁打印?

    解答:

    page-break-after版本:CSS2  ?兼容性:IE4+ 繼承性:無?

    語法:page-break-after ?: ?auto ? ?| ?always ? ?| ?avoid ? ?| ?left ? ?| ?right ? ?| ?null?

    參數:

    auto: 假如需要在對象之后插入頁分割符

    always: 始終在對象之后插入頁分割符

    avoid:避免在對象后面插入頁分割符

    left:在對象后面插入頁分割符直到它到達一個空白的左頁邊

    right: 在對象后面插入頁分割符直到它到達一個空白的右頁邊

    null:空值。IE5用來取消頁分割符設置

    說明:

    檢索或設置對象后出現的頁分割符。IE5僅支持always值和空白值(null)。

    在IE4中此屬性不作用于br對象,但是IE5作用。

    對應的腳本特性為pageBreakAfter。請參閱我編寫的其他書目。

    示例:

    p ?{ ?page-break-after: ?always;}???


    另一實例:
    <HTML>
    <HEAD>
    <TITLE>print</TITLE>
    <meta http-equiv="content-type" content="text/html;charset=gb2312">
    <style>
    /**//*
    ?*??? 打印相關
    */
    @media print
    {}{
    ??? .notprint
    ??? {
    ??????? display:none;
    ??? }
    ??? .PageNext
    ??? {}{
    ??????? page-break-after:always;
    ??? }????
    }

    @media screen
    {}{
    ??? .notprint
    ??? {
    ??????? display:inline;
    ??????? cursor:hand;
    ??? }
    }

    .text1
    {}{
    ??? width: 120px;
    ??? overflow: hidden;
    ??? text-overflow:ellipsis;
    }
    .text2
    {}{
    ??? width: 80px;
    ??? overflow: hidden;
    ??? text-overflow:ellipsis;
    }
    </style>

    <script language="javascript">
    <!--

    /**//*?
    **??? ==================================================================================================?
    **??? 類名:CLASS_PRINT?
    **??? 功能:打印分頁?
    **??? 示例:?
    ??? ---------------------------------------------------------------------------------------------------?
    ?
    ??????? var pp = new CLASS_PRINT();

    ??????? window.onload = function(){
    ??????????? pp.header = document.getElementById("tabHeader");
    ??????????? pp.content= document.getElementById("tabDetail");
    ??????????? pp.footer = document.getElementById("tabFooter");

    ??????????? pp.hideCols("5,7");???
    ??????????? pp.hideRows("3,15");
    ??????????? pp.pageSize = 10;???
    ??????? }

    ??????? <BODY onbeforeprint="pp.beforePrint()" onafterprint="pp.afterPrint()">

    ?
    ??? ---------------------------------------------------------------------------------------------------?
    **??? 作者:ttyp?
    **??? 郵件:ttyp@21cn.com?
    **??? 日期:2005-12-13?
    **??? ==================================================================================================?
    */
    function CLASS_PRINT()
    {
    ??? this.header??????? = null;
    ??? this.content??? = null;
    ??? this.footer??????? = null;
    ??? this.board??????? = null;
    ??? this.pageSize??? = 10;

    ??? var me??????????? = this;

    ??? //哈希表類
    ??? function Hashtable()
    ??? {
    ??????? this._hash??????? = new Object();
    ??????? this.add??????? = function(key,value){
    ??????????????????????????? if(typeof(key)!="undefined"){
    ??????????????????????????????? if(this.contains(key)==false){
    ??????????????????????????????????? this._hash[key]=typeof(value)=="undefined"?null:value;
    ??????????????????????????????????? return true;
    ??????????????????????????????? } else {
    ??????????????????????????????????? return false;
    ??????????????????????????????? }
    ??????????????????????????? } else {
    ??????????????????????????????? return false;
    ??????????????????????????? }
    ??????????????????????? }
    ??????? this.remove??????? = function(key){delete this._hash[key];}
    ??????? this.count??????? = function(){var i=0;for(var k in this._hash){i++;} return i;}
    ??????? this.items??????? = function(key){return this._hash[key];}
    ??????? this.contains??? = function(key){return typeof(this._hash[key])!="undefined";}
    ??????? this.clear??????? = function(){for(var k in this._hash){delete this._hash[k];}}

    ??? }

    ??? //字符串轉換為哈希表
    ??? this.str2hashtable = function(key,cs){
    ???????
    ??????????? var _key??? = key.split(/,/g);
    ??????????? var _hash??? = new Hashtable();
    ??????????? var _cs??????? = true;

    ???????
    ??????????? if(typeof(cs)=="undefined"||cs==null){
    ??????????????? _cs = true;
    ??????????? } else {
    ??????????????? _cs = cs;
    ??????????? }

    ??????????? for(var i in _key){
    ??????????????? if(_cs){
    ??????????????????? _hash.add(_key[i]);
    ??????????????? } else {
    ??????????????????? _hash.add((_key[i]+"").toLowerCase());
    ??????????????? }

    ??????????? }
    ??????????? return _hash;
    ??????? }

    ??? this._hideCols??? = this.str2hashtable("");
    ??? this._hideRows??? = this.str2hashtable("");

    ??? this.hideCols = function(cols){
    ??????? me._hideCols = me.str2hashtable(cols)
    ??? }

    ??? this.isHideCols = function(val){???
    ??????? return??? me._hideCols.contains(val);
    ??? }

    ??? this.hideRows = function(rows){
    ??????? me._hideRows = me.str2hashtable(rows)
    ??? }

    ??? this.isHideRows = function(val){???
    ??????? return??? me._hideRows.contains(val);
    ??? }

    ??? this.afterPrint = function()
    ??? {
    ??????? var table = me.content;???????
    ???????
    ??????? if(typeof(me.board)=="undefined"||me.board==null){???????
    ??????????? me.board = document.getElementById("divPrint");
    ??????????? if(typeof(me.board)=="undefined"||me.board==null){
    ??????????????? me.board = document.createElement("div");
    ??????????????? document.body.appendChild(me.board);
    ??????????? }
    ??????? }

    ??????? if(typeof(table)!="undefined"){
    ??????????? for(var i =0;i<table.rows.length;i++){
    ??????????????? var tr = table.rows[i];
    ??????????????? for(var j=0;j<tr.cells.length;j++){
    ??????????????????? if(me.isHideCols(j)){
    ??????????????????????? tr.cells[j].style.display = "";
    ??????????????????? }
    ??????????????? }
    ??????????? }
    ??????? }

    ??????? me.content.style.display??? = '';
    ??????? me.header.style.display??????? = '';
    ??????? me.footer.style.display??????? = '';
    ??????? me.board.innerHTML??????????? = '';

    ??? }

    ??? this.beforePrint = function(){

    ??????? var table = me.content;???

    ??????? if(typeof(me.board)=="undefined"||me.board==null){???????
    ??????????? me.board = document.getElementById("divPrint");
    ??????????? if(typeof(me.board)=="undefined"||me.board==null){
    ??????????????? me.board = document.createElement("div");
    ??????????????? document.body.appendChild(me.board);
    ??????????? }
    ??????? }


    ??????? if(typeof(table)!="undefined"&&this.hideCols.length>0){???????
    ???????????
    ??????????? for(var i =0;i<table.rows.length;i++){
    ??????????????? var tr = table.rows[i];
    ??????????????? for(var j=0;j<tr.cells.length;j++){
    ??????????????????? if(me.isHideCols(j)){???????????????????
    ??????????????????????? tr.cells[j].style.display = "none";
    ??????????????????? }
    ??????????????? }
    ??????????? }
    ??????? }
    ???
    ???????
    ??????? ///開始分頁???
    ??????? var pageSize = this.pageSize;
    ???????
    ??????? var head??? = me.header;
    ??????? var foot??? = me.footer;
    ???????
    ??????? var page??? = new Array();
    ??????? var rows??? = "";???
    ??????? var rowIndex= 1;

    ??????? var cp??????? = 0;
    ??????? var tp??????? = 0;
    ???????
    ???????
    ??????? for(i=1;i<table.rows.length;i++){???????????????
    ??????????? if(this.isHideRows(i)==false){
    ??????????????? if((((rowIndex-1)%pageSize)==0&&rowIndex>1)||i==table.rows.length){???????????????????????????????
    ??????????????????? page[page.length] = getTable(head,table,rows,foot);
    ???????????????????????????????????????????????????
    ??????????????????? rows??? = getOuterHTML(table.rows[i]) + "\n" ;
    ??????????????????? rowIndex= 2;
    ???????????????????????????????????????????????????????????????????????????
    ??????????????? } else {
    ??????????????????? rows??? += getOuterHTML(table.rows[i]) + "\n";
    ??????????????????? rowIndex++;
    ??????????????? }
    ??????????? }
    ??????? }
    ???????
    ??????? if(rows.length>0){
    ??????????? page[page.length] = getTable(head,table,rows,foot);
    ??????? }

    ??????? tp = page.length;

    ??????? for(var i=0;i<page.length;i++){
    ??????????? page[i] = page[i].replace(/\<!--ct-->/g,(i+1)+'/' + tp).replace(/\<!--cp--\>/g,i+1).replace(/\<!--tp--\>/g,tp);
    ??????? }
    ???????
    ???????????????????
    ??????? head.style.display??????? = 'none';
    ??????? foot.style.display??????? = 'none';
    ??????? table.style.display??????? = 'none';
    ???????
    ??????? me.board.innerHTML = page.join("");
    ??? }

    function getOuterHTML (node) {

    ??? if(typeof(node)!="undefined"&&typeof(node.outerHTML)!="undefined"){
    ??????? return node.outerHTML;
    ??? }

    ??? var emptyElements = {
    ????? HR: true, BR: true, IMG: true, INPUT: true
    ??? };
    ??? var specialElements = {
    ????? TEXTAREA: true
    ??? };

    ??? var html = '';
    ??? switch (node.nodeType){
    ??????? case Node.ELEMENT_NODE:
    ??????????? html += '<';
    ??????????? html += node.nodeName;
    ??????????? if (!specialElements[node.nodeName]) {
    ??????????????? for (var a = 0; a < node.attributes.length; a++)
    ??????????????????? html += ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue + '"';
    ??????????????? html += '>';
    ??????????????? if (!emptyElements[node.nodeName]){
    ??????????????????? html += node.innerHTML;
    ??????????????????? html += '<\/' + node.nodeName + '>';
    ??????????????? }
    ??????????? }
    ??????????? else
    ??????????????? switch (node.nodeName){
    ??????????????????? case 'TEXTAREA':
    ??????????????????????? var content = '';
    ??????????????????????? for (var a = 0; a < node.attributes.length; a++)
    ??????????????????????????? if (node.attributes[a].nodeName.toLowerCase() != 'value')
    ??????????????????????????????? html += ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue + '"';
    ??????????????????????????? else
    ??????????????????????????????? content = node.attributes[a].nodeValue;
    ??????????????????????????? html += '>';
    ??????????????????????????? html += content;
    ??????????????????????????? html += '<\/' + node.nodeName + '>';
    ??????????????????????? break;
    ??????????????? }
    ??????????? break;
    ??????? case Node.TEXT_NODE:
    ??????????? html += node.nodeValue;
    ??????????? break;
    ??????? case Node.COMMENT_NODE:
    ??????????? html += '<!' + '--' + node.nodeValue + '--' + '>';
    ??????????? break;
    ??? }
    ??? return html;
    }

    ??? function getTable(header,table,content,footer){
    ??????? var htm = "";

    ??????? if(typeof(header)!="undefined"){
    ??????????? htm += getOuterHTML(header);
    ??????? }

    ??????? if(typeof(table)!="undefined"){???????
    ??????????? htm += "\n<" + table.tagName;
    ???????????
    ??????????? for(var i =0;i<table.attributes.length;i++){
    ??????????????? if(table.attributes[i].specified){
    ??????????????????? if(table.attributes[i].name=="style")
    ??????????????????????? htm += " style='" + table.style.cssText + "'";
    ??????????????????? else
    ??????????????????????? htm += " " + table.attributes[i].nodeName + "='" + table.attributes[i].nodeValue + "'";
    ??????????????? }???????
    ??????????? }???
    ???????????
    ??????????? if(table.rows.length>0){
    ??????????????? htm += ">\n" + getOuterHTML(table.rows[0]) + content + "</" + table.tagName + ">";
    ??????????? } else {
    ??????????????? htm += ">\n" + content + "</" + table.tagName + ">\n";
    ??????????? }???????
    ??????? }

    ??????? if(typeof(footer)!="undefined"){
    ??????????? htm += getOuterHTML(footer);
    ??????? }

    ??????? htm += "\n<div class='pageNext'></div>"
    ???????
    ??????? return htm;
    ??? }

    ??? if(!window.attachEvent){
    ??????? window.attachEvent = function(){window.addEventListener(arguments[0].substr(2),arguments[1],arguments[2]);}
    ??? }
    }


    var pp = new CLASS_PRINT();

    window.onload = function()
    {

    ??? pp.header = document.getElementById("tabHeader");
    ??? pp.content= document.getElementById("tabDetail");
    ??? pp.footer = document.getElementById("tabFooter");

    ??? pp.hideCols("5,7");???
    ??? pp.hideRows("3,15");
    ??? pp.pageSize = 10;???
    }

    //-->
    </script>
    </HEAD>
    <BODY onbeforeprint="pp.beforePrint()" onafterprint="pp.afterPrint()">

    <table border=0 width="95%" align=center id="tabHeader">
    ??? <tr>
    ??????? <td align="center"><font size='6' face='楷體_gb2312'>元件列表</font></td>
    ??? </tr>
    ??? <tr>
    ??????? <td><strong>日期:2005年12月12日</strong></td>
    ??? </tr>
    </table>
    <table border=1 width="95%" style="border-collapse:collapse;" align=center cellpadding=3 id="tabDetail">
    ??? <tr bgcolor='#e8f4ff'>
    ??????? <td align="center" width="35">序號</td>
    ??????? <td width="160">產品名稱</td>
    ??????? <td>規格型號</td>
    ??????? <td align="center">品牌</td>
    ??????? <td align="right">數量</td>
    ??????? <td width="125">供應商</td>
    ??????? <td align="right">實際數量</td>
    ??????? <td align="center">包裝</td>
    ??????? <td align="center">需用日期</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">1</td>
    ??? <td><span class="text2"><nobr>
    ??? 貼片電路
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ??? <span class="text1" title='ADE7755 63 7'>
    ??? <nobr>
    ??? ADE7755ARS
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">ADI</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1" title ='世健國際貿易(上海)有限公司'><nobr>世健國際貿易(上海)有限公司</nobr></span></td>
    ??? <td align="right">1003</td>
    ??? <td align="center">59</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">2
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1" title='CC0805 0.1μ 168 7'>
    ??? <nobr>
    ??? C2012X7R1H104KT
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">TDK</td>
    ??? <td align="right">8000</td>
    ??? <td width="125"><span class="text1" title ='南京商絡電子有限公司'><nobr>南京商絡電子有限公司</nobr></span></td>
    ??? <td align="right">8000</td>
    ??? <td align="center">4000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">3
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1" title='CC0805 20p 162 7'>
    ??? <nobr>
    ??? C2012COG1H200JT
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">TDK</td>
    ??? <td align="right">2000</td>
    ??? <td width="125"><span class="text1" title ='南京商絡電子有限公司'><nobr>南京商絡電子有限公司</nobr></span></td>
    ??? <td align="right">4000</td>
    ??? <td align="center">4000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">4
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1" title='CC0805 33N 765 7'>
    ??? <nobr>
    ??? C2012X7R1H333KT
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">TDK</td>
    ??? <td align="right">4000</td>
    ??? <td width="125"><span class="text1" title ='南京商絡電子有限公司'><nobr>南京商絡電子有限公司</nobr></span></td>
    ??? <td align="right">4000</td>
    ??? <td align="center">4000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">5
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 壓敏電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1" title='MY20K681 186 7'>
    ??? <nobr>
    ??? GND20D681K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">中普</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1" title ='蘇州中普電子有限公司'><nobr>蘇州中普電子有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">1000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">6
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 晶振
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? HC-49U/S 3.579545MHz 20pf 帶墊片
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">海創</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>武漢海創電子有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">200</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">7
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 安規電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? 275V-X2-0.47μF
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">昱電</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海昱電電子有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">1000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">8
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 電解電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>

    ??? <span class="text1">
    ??? <nobr>
    ??? CD112 16V 33μF
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">Samyoung</td>
    ??? <td align="right">2000</td>
    ??? <td width="125"><span class="text1"><nobr>上海文得貿易有限公司</nobr></span></td>
    ??? <td align="right">2000</td>
    ??? <td align="center">2000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">9
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 電解電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? CD112S 16V 220μF
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">Samyoung</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海文得貿易有限公司</nobr></span></td>
    ??? <td align="right">2000</td>
    ??? <td align="center">2000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">10
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 電解電容
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? CD112S 35V 470μF
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">Samyoung</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海文得貿易有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">1000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">11
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 插件電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RSF2BJ 470Ω
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">KOA</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海凡元電子有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">100</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">12
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 發光二極管
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? L-314LRC-A-SS
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">HUADING</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海滬鼎電子有限公司</nobr></span></td>
    ??? <td align="right">1000</td>
    ??? <td align="center">1000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">13
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 插件二、三極管
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? 1N4744A
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">MCC</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>勵智電子(上海)有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">14
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 磁珠
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? B62
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">JONES</td>
    ??? <td align="right">2000</td>
    ??? <td width="125"><span class="text1"><nobr>北京中石偉業技術有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">15
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 晶振
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? CFS206 32.768kHz 20ppm/12.5pf
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">CITIZEN</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海創邦國際貿易有限公司</nobr></span></td>

    ??? <td align="right">1000</td>
    ??? <td align="center">1000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">16
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-071K2
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">17
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805FR-071K2
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">2000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">18
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-0710R
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>
    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">19
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-0710K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">20
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-07150K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">21
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805FR-071K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">2000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">22
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-072K4
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">23
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-0720K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">24
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-072K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">25
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-07390K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">3000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>
    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">26
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-0739K
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>

    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    ??? <tr>
    ??? <td align="center">27
    ??? </td>
    ??? <td>
    ??? <span class="text2"><nobr>
    ??? 貼片電阻
    ??? </nobr></span>
    ??? </td>
    ??? <td>
    ???
    ??? <span class="text1">
    ??? <nobr>
    ??? RC0805JR-074K7
    ??? </nobr></span>
    ??? </td>
    ??? <td align="center">YAGEO</td>
    ??? <td align="right">1000</td>
    ??? <td width="125"><span class="text1"><nobr>上海衡謙貿易有限公司</nobr></span></td>
    ??? <td align="right">5000</td>
    ??? <td align="center">5000</td>
    ??? <td align="center">2005-11-04</td>
    ??? </tr>

    </table>
    <table width="95%" border=0 id="tabFooter" align=center cellpadding=4>
    ??? <tr>
    ??????? <td><!--ct--></td><td align=right>上海市XXX有限公司</td>
    ??? </tr>
    </table>
    <div id="divPrint"></div>
    <table width="95%" align=center>
    ??? <tr>
    ??????? <td align=right>
    ??????????? <input type=button id="bp"? onclick="pp.beforePrint();this.disabled = true;document.getElementById('ap').disabled = false;" value="打印前" style="border:1px solid #000000"> <input id="ap" type=button onclick="pp.afterPrint();this.disabled = true;document.getElementById('bp').disabled = false;" value="打印后" style="border:1px solid #000000" disabled=true> <input type=button value='打印' onclick="window.print()" style="border:1px solid #000000">
    ??????? </td>
    ??? </tr>
    </table>
    </BODY>
    </HTML>

    posted @ 2006-09-06 12:03 Javaphua 閱讀(381) | 評論 (1)編輯 收藏

         摘要: 事件源對象 event.srcElement.tagName event.srcElement.type 捕獲釋放 event.srcElement.setCapture();? event.srcElement.releaseCapture();? 事件按鍵 ...  閱讀全文
    posted @ 2006-09-02 16:25 Javaphua 閱讀(333) | 評論 (0)編輯 收藏

    中文字符編碼簡介
    1 GB2312-80

    GB2312碼是中華人民共和國國家漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集——基本集》,由國家標準總局發布,1981年5月1日實施,通行于大陸。新加坡等地也使用此編碼。

    GB2312收錄簡化漢字及符號、字母、日文假名等共7445個圖形字符,其中漢字占6763個。GB2312規定“對任意一個圖形字符都采用兩個字節表示,每個字節均采用七位編碼表示”,習慣上稱第一個字節為“高字節”,第二個字節為“低字節”。

    GB2312將代碼表分為94個區,對應第一字節;每個區94個位,對應第二字節,兩個字節的值分別為區號值和位號值加32(2OH),因此也稱為區位碼。01-09區為符號、數字區,16-87區為漢字區,10-15區、88-94區是有待進一步標準化的空白區。GB2312將收錄的漢字分成兩級:第一級是常用漢字計3755個,置于16-55區,按漢語拼音字母/筆形順序排列;第二級漢字是次常用漢字計3008個,置于56-87區,按部首/筆畫順序排列。故而GB2312最多能表示6763個漢字。

    GB2312的編碼范圍為2121H-777EH,與ASCII有重疊,通行方法是將GB碼兩個字節的最高位置1以示區別。

    2 GBK

    GB2312-80僅收漢字6763個,這大大少于現有漢字,隨著時間推移及漢字文化的不斷延伸推廣,有些原來很少用的字,現在變成了常用字,例如:朱镕基的“镕”字,未收入GB2312-80,現在大陸的報業出刊只得使用(金+容)、(金容)、(左金右容)等來表示,形式不一而同,這使得表示、存儲、輸入、處理都非常不方便,對于搜索引擎等軟件的構造來說也不是好消息,而且這種表示沒有統一標準。從我們對人民日報98年數據的處理過程中,得出這樣的經驗:回填外字最困難的就是如何得到這種表示方法的集合。

    為了解決這些問題,以及配合UNICODE的實施,全國信息技術化技術委員會于1995年12月1日《漢字內碼擴展規范》。GBK向下與GB2312 完全兼容,向上支持ISO 10646國際標準,在前者向后者過渡過程中起到的承上啟下的作用。GBK 亦采用雙字節表示,總體編碼范圍為8140-FEFE之間,首字節在81-FE之間,尾字節在40-FE之間,剔除XX7F一條線。

    GBK共收入21886個漢字和圖形符號,包括:

    * GB2312中的全部漢字、非漢字符號。
    * BIG5中的全部漢字。
    * 與ISO 10646相應的國家標準GB13000中的其它CJK漢字,以上合計20902個漢字。
    * 其它漢字、部首、符號,共計984個。

    微軟公司自Windows 95 簡體中文版開始支持GBK代碼,但目前的多數搜索引擎都不能很好地支持GBK漢字。

    GBK編碼區分三部分:

    * 漢字區 包括
    GBK/2:OXBOA1-F7FE, 收錄GB2312漢字6763個,按原序排列;
    GBK/3:OX8140-AOFE,收錄CJK漢字6080個;
    GBK/4:OXAA40-FEAO,收錄CJK漢字和增補的漢字8160個。
    * 圖形符號區 包括
    GBK/1:OXA1A1-A9FE,除GB2312的符號外,還增補了其它符號
    GBK/5:OXA840-A9AO,擴除非漢字區。
    * 用戶自定義區
    即GBK區域中的空白區,用戶可以自己定義字符。

    3 GB18030

    GB18030 是最新的漢字編碼字符集國家標準, 向下兼容 GBK 和 GB2312 標準。 GB18030 編碼是一二四字節變長編碼。一字節部分從 0x0~0x7F 與 ASCII 編碼兼容。 二字節部分, 首字節從 0x81~0xFE, 尾字節從 0x40~0x7E 以及 0x80~0xFE, 與 GBK標準基本兼容。 四字節部分, 第一字節從 0x81~0xFE, 第二字節從 0x30~0x39, 第三和第四字節的范圍和前兩個字節分別相同。 四字節部分覆蓋了從 0x0080 開始, 除去二字節部分已經覆蓋的所有 Unicode 3.1 碼位。也就是說, GB18030 編碼在碼位空間上做到了與 Unicode 標準一一對應,這一點與 UTF-8 編碼類似。

    目前最新的 glibc 2.2.x 系列已經全面支持了 GB18030 Locale 和 GB18030 與 UCS-4 之間的編碼轉換, 也就是說在系統層上 Linux 已經可以支持 GB18030 標準了。 下面問題的關鍵就是怎樣讓 XFree86 窗口系統也支持 GB18030 標準。

    4 BIG5

    BIG5是通行于臺灣、香港地區的一個繁體字編碼方案。雖然存在一些瑕疵,但廣泛應用于電腦行業,尤其是互聯網中,從而成為一種事實上的行業標準。

    1983年10月,臺灣國家科學委員會、教育部國語推行委員會、中央標準局、行政院共同制定了《通用漢字標準交換碼》,后經修訂于1992年5月公布,更名為《中文標準交換碼》,BIG5是臺灣資訊工業策進會根據以上標準制定的編碼方案。

    BIG5碼是雙字節編碼方案,其中第一個字節的值在OXAO-OXFE之間,第二個字節在OX40-OX7E和OXA1-OXFE之間。

    BIG5收錄13461個漢字和符號,包括:

    * 符號408個,編碼位置A140-A3BE
    * 常用字5401個,編碼位置A440-C67E,包括臺灣教育部頒布的《常用國字標準字體表》的全部漢字4808個,臺灣教科書常用字587個,異體字6個。
    * 次常用字7652個,編碼位置C940-F9D5,包括臺灣教育部頒布的《次常用國字標準字體表》的全部漢字6341個,《罕用國字標準字體表》中使用頻率較高的字1311個。
    posted @ 2006-07-25 14:06 Javaphua 閱讀(2726) | 評論 (3)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: j8又粗又长又硬又爽免费视频 | 亚洲伊人久久大香线蕉AV| 亚洲人成电影亚洲人成9999网 | 国产精品四虎在线观看免费| 成年女人18级毛片毛片免费| 毛片免费视频在线观看| 成年性生交大片免费看| 麻豆国产入口在线观看免费| 宅男666在线永久免费观看| 四虎永久在线精品免费观看地址 | 91精品免费观看| 91精品国产免费久久久久久青草| 亚洲电影免费观看| 国产大片线上免费观看| 成人免费在线视频| 免费在线观看的黄色网址| 亚洲国产电影av在线网址| 亚洲色大成网站WWW久久九九| 日韩va亚洲va欧洲va国产| 亚洲春黄在线观看| 亚洲色成人四虎在线观看| 偷自拍亚洲视频在线观看99| 一个人看的www在线免费视频| 国产免费黄色无码视频| 久久99精品免费视频| 国产福利在线免费| 免费人成在线观看播放国产| 国产综合亚洲专区在线| 日韩精品一区二区亚洲AV观看| 亚洲福利视频网址| 日韩欧美亚洲中文乱码| 久久久久女教师免费一区| 日韩精品无码一区二区三区免费| 手机看黄av免费网址| 日本免费一区二区三区最新 | 无码乱肉视频免费大全合集| 日韩黄色免费观看| 国产啪亚洲国产精品无码| 久久99亚洲网美利坚合众国| 亚洲色大成网站www| 丁香花在线观看免费观看图片 |