網頁

搜尋此網誌

2010年1月16日 星期六

Delta 實在的力量 Δ 鄭崇華與台達電的經營智慧

這是關於「台達電子」的故事。
只要我們不放棄自己的夢想,堅持在崗位上,
做對社會有價值的事,而且專注踏實地去做,
社會就會愈來愈好,每個人都能享有更好的生活。
Bruce C.H. Cheng

鄭崇華/口述、張玉文/採訪整理,實在的力量:鄭崇華與台達電的經營智慧,台北市:天下遠見,2010。

天下文化專屬網站
Δ
delta
看完這本書,這本書是敘述一位經營者:鄭崇華先生,與台達電的企業經營理念。這本書雖不像李開復先生的(我個人非常推薦這本書)「世界因你不同」令人激昂了,卻是寧靜中帶有力量的自傳,鄭崇華先生將自身的經歷與創業過程、企業經營撰寫成書,與大家分享他的觀念,絕對是實實在在的企業家,推薦此書「實在的力量:鄭崇華與台達電的經營智慧」給大家。

此書撰寫以敘述方式撰寫,因此內容安排依照時間先後,目錄如下:
  • 第一章,成長:流離中鍛鍊心智
    早年流離的生活,雖然吃了不少苦,卻也鍛鍊了心志,豐富了人生。
  • 第二章,茁壯:蓄積創業能量
    每一份工作都認真吸收,機會來了,才有能力掌握。
  • 第三章,開創:在挑戰中站穩腳跟
    創業維艱,資金、採購、業務、品質、技術、服務,無一不是挑戰。面對問題、克服困難,再加上一些機運,終於站穩創業腳步。
  • 第四章,擴張:從台灣向全球開展
    本身的設計生產技術能力以及看準市場成長趨勢,台達掌握到新一波市場成長機會,持續擴充發展,邁開全球化的腳步。
  • 第五章,繁盛:尋求下一波大成長
    科技進步快速,市場不斷改變,除了自己研發、開發的產品,台達也從轉投資、合作、併購的經驗中學習,尋求成長動能。
  • 第六章,新生:發現綠能新商機
    台達不只生產節能產品,也親身實踐環保節能。沒想到,這份希望為環境多盡一點力量的心意,也讓公司從容面對環保規範,創造商機。
  • 第七章,深化:厚植技術與產品基礎
    技術和人才的根扎得深,基礎才會穩固。資源整合、把研發分成三個階段等,都有助於深化競爭力,找到新機會。
  • 第八章,實踐:經營管理,以人為本
    管理者的責任在於培養一個理想的環境,讓公司內的同仁在公平合理的條件下發揮創意與才幹。
  • 第九章,有夢:共築生生不息的未來
    企業不應該走短線,只顧眼前賺錢,而應把眼光放遠,了解未來市場的需要,開發製造對社會真正有價值的產品。


2010年1月7日 星期四

jQuery DOM ready

最近研究JavaScript頗有心得,尤其是Event和Object的操作方面,於是研究了一下jQuery的DOM處理事件,使用jQuery一定會用到的ready事件。這個事件比onLoad還要前面發生,DOM完成時,其他檔案不一定會完全載入,但是onLoad一定是全部完成時才觸發!

$(document).ready(function() {
   // do stuff when DOM is ready
});

當瀏覽器處理好DOM時則會執行function中的程式,那如何做到?答案是,JavaScript告訴Browser使用事件偵聽函式的方式。在jQuery程式碼中,有一段程式碼,就是它:

function bindReady(){
 if ( readyBound ) return;
 readyBound = true;

 // Mozilla, Opera and webkit nightlies currently support this event
 if ( .addEventListener ) {
  // Use the handy event callback
  .addEventListener( "DOMContentLoaded", function(){
   .removeEventListener( "DOMContentLoaded", arguments.callee, false );
   jQuery.ready();
  }, false );

 // If IE event model is used
 } else if ( .attachEvent ) {
  // ensure firing before onload,
  // maybe late but safe also for iframes
  .attachEvent("onreadystatechange", function(){
   if ( .readyState === "complete" ) {
    .detachEvent( "onreadystatechange", arguments.callee );
    jQuery.ready();
   }
  });

  // If IE and not an iframe
  // continually check to see if the  is ready
  if ( .Element.doScroll && window == window.top ) (function(){
   if ( jQuery.isReady ) return;

   try {
    // If IE is used, use the trick by Diego Perini
    // http://javascript.nwbox.com/IEContentLoaded/
    .Element.doScroll("left");
   } catch( error ) {
    setTimeout( arguments.callee, 0 );
    return;
   }

   // and execute any waiting functions
   jQuery.ready();
  })();
 }

 // A fallback to window.onload, that will always work
 jQuery.event.add( window, "load", jQuery.ready );
}

2010年1月4日 星期一

Redefine JavaScript

近期的工作都與 JavaScript 這個程式語言有關,在實際使用中遇到許多問題,藉著解決這些問題當中,我再次重新學習 JavaScript 程式的概念,在此與大家分享自己的學習心得。

JavaScript 程式語言的觀念整理如下:
  • JavaScript 是個完全的物件導向 (object-oriented) 程式語言
  • JavaScript 所有的東西都是物件 (object)
  • JavaScript 的資料類型是動態檢查 (dynamic typing) 類型
  • 目前 JavaScript 主要的使用版本是1.5版,或稱 ECMAScript 3
  • JavaScript 是 Client 端瀏覽器的腳本語言 (script language)
  • 變數區分大小寫 (case-sensitive)
  • JavaScript 不是 Java ,原本是 LiveScript 的名稱 (September 1995),改名於 December 4, 1995,因為當時 Java 語言正流行!
  • JavaScript 除了 cookie 之外,不能存取 Client 端使用者本機電腦的任何資料
  • 所有的 JavaScript 程式遵守「同源策略」, JavaScript 的檔案一定要是相同的URL才可執行
  • 發明者:Brendan Eich
開發 JavaScript 可以參考 Mozilla Developer Center 的Core JavaScript 1.5 Reference,內容寫得非常詳盡。

本篇主要是要介紹物件導向 (Object-Oriented) 的 JavaScript 開發,因為最近程式越寫越大,越寫越複雜,還用了 Ext JS 的開發框架,再不好好弄懂 JavaScript 的話,事情可能越來越糟。

沒錯,JavaScript 所有的類型都是物件 (Object),標準的全域物件有 (Standard Global Objects):ArrayBooleanDateErrorEvalErrorFunctionMathNumberObjectRangeErrorReferenceErrorRegExpStringSyntaxErrorTypeErrorURIError共16種物件。全域函式則有:decodeURIdecodeURIComponentencodeURIencodeURIComponentevalisFiniteisNaNparseFloatparseInt

這裡要特別注意的是「 JavaScript 不像其他的物件導向程式語言, JavaScript 不使用類別的觀念」,大概這點是除了「 JavaScript 不是 Java 」之外最要注意的地方!

JavaScript 是屬於原型繼承 (prototypal inheritance) 的程式語言,也稱 Prototype-Based Programming物件繼承是 prototype 的方式操作, prototype 是 Function 物件的 prototype 屬性 (property),注意到: function 也是一個 Function 類型的物件

推薦詳細的參考文件:(Details of the Object Model
)https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model

2010年1月3日 星期日

Ext JS

使用Ext JS程式庫到現在將近兩個多月,直接和大家說:這是個好東西!學習和使用曲線都不會很困難,而且Ext JS的API寫得十分詳盡,參考http://www.extjs.com/deploy/dev/docs/,對於初學者來說,可以參考Community Learning Center  http://www.extjs.com/learn/Main_Page(這個網址不是很好找),大家可以上去看看!

當你要使用Ext JS時,基本上僅需加入下列這三列程式碼:

<link rel="stylesheet" type="text/css" href="ext/resources/css/ext-all.css" />
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all.js"></script>

另外建立一個自己的JavaScript檔案,內容大概是這樣:
Ext.BLANK_IMAGE_URL = 'ext/resources/images/default/s.gif';
Ext.onReady(function(){
//填入你的程式碼
});
onReady( Function fn, [Object scope], [boolean options] ) : void實際上是onDocumentReady( Function fn, [Object scope], [boolean options] ) : void的縮寫,此函式方法需要三個參數(parameter),後兩個可選擇使用,因此呼叫時需要傳遞引數(argument)來呼叫。

目前最新的版本是3.1.0,我從3.0.0和3.0.3用到現在,程式庫的更新也都很方便,只要將檔案更換就可以繼續使用新功能。

一樣的,推薦一本書:
徐會生、何啟偉、康愛媛,Ext JS開發實戰:次世代Ajax解決方案,台北:精誠資訊(悅知文化),2009。

Ext JS中所有的物件都是Ext.Component元件,元件的設定都是使用JSON格式(沒有使用過Ext JS要特別注意和熟悉)。

另外,因為開發Web Desktop網頁應用程式的需求,因而使用ext-3.1.0\examples\desktop的範例程式,加上分析與修改程式碼符合自己的需要,在這裡貼上程式的五個Ext JS的JavaScript供大家參考。

App.js

/*!
 * Ext JS Library 3.0.3
 * Copyright(c) 2006-2009 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
/*--------------------------------------------------*/
//定義桌面應用程式物件
Ext.app.App = function(cfg){
    Ext.apply(this, cfg);//複製cfg屬性到本物件
    //自行定義兩個事件為ready與beforeunload
    this.addEvents({
        'ready': true,//自行定義
        'beforeunload': true//自行定義
    });
    
    Ext.onReady(this.initApp, this);//呼叫initApp方法,初始化物件
};
/*--------------------------------------------------*/
//定義桌面應用程式物件子類別Ext.app.App,繼承父類別Ext.util.Observable。
Ext.extend(Ext.app.App, Ext.util.Observable, {
    //以下為繼承之後新增的成員
    isReady: false,
    startMenu: null,//開始選單
    modules: null,//應用程式模組
    getStartConfig: function(){//讓使用者建立物件時填入
    },
    
    //建立桌面應用程式物件之後,會執行initApp函數
    initApp: function(){//初始化桌面應用程式
        this.startConfig = this.startConfig || this.getStartConfig();//開始功能表組態
        this.desktop = new Ext.Desktop(this);//建立桌面物件,參考Desktop.js
        //desktop物件之中,包含taskbar物件,其中taskbar物件含有startMenu
        this.launcher = this.desktop.taskbar.startMenu;
        //launcher發射器
        
        this.modules = this.getModules();//取得模組建立
        if (this.modules) {
            this.initModules(this.modules);//如果模組存在,初始化模組
        }
        
        this.init();
        
        //appends an event handler to an element, shorthand for addListener
        //參數:HTML元素,事件名稱,事件處理函數,執行範圍
        Ext.EventManager.on(window, 'beforeunload', this.onUnload, this);
        
        //觸發ready事件
        this.fireEvent('ready', this);
        this.isReady = true;//完成初始化
    },
    
    getModules: Ext.emptyFn,//A reusable empty function讓使用者建立物件時填入
    init: Ext.emptyFn,//A reusable empty function讓使用者建立物件時填入
    
 //這裡將模組加入開始功能表
    initModules: function(ms){//初始化模組
        for (var i = 0, len = ms.length; i < len; i++) {
            var m = ms[i];
   //modify!!
   if(m.show==true)
             this.launcher.add(m.launcher);
            m.app = this;
        }
    },
    
    getModule: function(name){//取得模組
        var ms = this.modules;
        for (var i = 0, len = ms.length; i < len; i++) {
            if (ms[i].id == name || ms[i].appType == name) {
                return ms[i];
            }
        }
        return '';
    },
    
    //定義事件處理
    onReady: function(fn, scope){
        if (!this.isReady) {
            this.on('ready', fn, scope);
        }
        else {
            fn.call(scope, this);
        }
    },
    
    getDesktop: function(){
        return this.desktop;
    },
    
    //定義事件處理
    onUnload: function(e){
        if (this.fireEvent('beforeunload', this) === false) {
            e.stopEvent();
        }
    }
});
/*--------------------------------------------------*/


熱門文章