Total Pageviews

2017/10/01

[閱讀筆記] The Long Tail (2/2)


  1. 如果人們有無窮的選擇,並可以輕易找他們想要的,你會發現,市場對電影的需求會繼續延伸、觸及之前想都沒想過的利基商品。網路租片商 Netflix 改變了供應利基商品的經濟效應,也因此讓我們重新理解人們真正想管賞什麼影片
  2. 別被 80 / 20 法則牽著鼻子走,即使 80% 的營收是由 20% 的商品所創造,我們也沒有道理不要其他那 80% 的產品。在長尾市場,存貨成本很低,因此不管商品的銷量如何,你的存貨都應該盡量多樣化。世事難料,有了功能強大的搜尋引擎和推薦系統,排名在後面的 80% 的冷門商品,很有可能哪天就會擠進前 20%
  3. 推薦系統與篩選器對長尾市場非常重要,藉由鼓勵人們從暢銷商品世界(高進貨成本)進入利基商品世界(低進貨成本),聰明的零售商便有可能大幅改善零售業的經濟效應
  4. 人類的注意力比金錢更有擴展性。長尾的主要效應是將我們的品味轉向利基商品,但消費是否增加,則視我們對搜尋到的東西滿意度而定
  5. 口耳相傳的回饋循環會擴大消費者喜好,為口碑好的產品錦上添花,引來佳評如潮,讓劣評者越來越難翻身。在網絡理論下,這種正向回饋循環會創造贏家通吃的局面,換言之,它是絕佳的暢銷品製造機
  6. 無論是暢銷商品也好,利基商品也罷,銷售量都會隨著時間趨緩;暢銷商品的起步點可能會高些,但他們終究會走入長尾的末端
  7. 在資訊科學的世界裡,事情如何歸類是個棘手的難題,也稱為「本體論的難題」(ontology problem)。本體論在各學門意義各異,對圖書館員和電腦科學家而言,本體論是指安排事物的方式。杜威的十進位分類法是歸類圖書的一種方式;大英百科全書是編列資訊的一種方式;元素週期表則是排列物質的一種方式
  8. 在 The Lure of Choice論文中提到,選項較多時,消費者比較願意做選擇。消費者偏好放映聽較多的戲院,桌子較多的賭場;選擇越多,他們被迫接受不理想產品的風險也會降低
  9. 零售商店為什麼要把一堆小東西擺在收銀機旁邊,因為可及性 (availability) 與便利性可以創造出更多的銷售量。牛奶、啤酒、飲料這些產品,便利商店販售的價格遠比超市高,但便利商店販售的與其說是商品,倒不如說是可及性,讓你當下即可取得
  10. 電視的粗俗、下流中、愚蠢,並非因為觀眾粗俗、愚蠢。電視之所以是現在這副德行,純粹是因為人們對粗俗、下流、愚蠢事務的關注極其相似,但對精緻、美感、高尚等各類事務的興趣卻大不相同
  11. 建立成功的長尾事業的秘訣,可以歸納為兩個要件:
    1. 讓所有東西都很容易取得
    2. 幫客戶找到它
  12. 長尾整合者的九大成功原則
    1. 把存貨搬進來,或搬出去:Sears、Wal-Mart利用其現有的倉儲網,提供比店面更多樣的商品,因為其存貨集中化,比把產品分別放到數百家店面的貨架上,還有效率。Amazon 已擴展到虛擬存貨,如實體貨品放在某個夥伴的倉庫內,但在Amazon 網站上展示與銷售。Amazon 的庫存成本為0
    2. 讓客戶自己動手:同好生產創造了eBay, Wikipedia, MySpace等。這不是outsourcing,而是crowdsourcing (運用群眾資源)。使用者的時間與精力幾乎無窮盡。因此,只有同好生產才能將長尾延伸到最遠處。在自助服務下,做事的人就是最關心這件事,也是最瞭解自己的人
    3. 單一配銷方式不適用於所有人:有的人喜歡到商店購物;有的人喜歡在網路買東西;有的人喜歡先在網路研究,在到商店購買;有的喜歡先到商店瀏覽,然後再網路購買
    4. 單一商品不適合所有人:我們面臨的顧客,是一群口味各異的顧客
    5. 單一價格不適合所有人:只要製造與配銷的邊際成本接近零,那麼可變動訂價是順理成章的模式
    6. 分享資訊:若把購買模式的資訊轉化為客戶推薦,就可成為強力的行銷工具。有了評鑑或產品規格之類的深度產品資訊,某些原本可能阻礙購買行動的問題往往可得到解答。資訊越多越好,但前提是呈現方式應該要幫助顧客做選擇中,而不是讓人摸不著頭緒
    7. 兼得(and),而非擇一(or):稀少性思考的症狀之一,就是假設市場為零和。換言之,就是誤認凡事只有非此即彼的選擇。但在容量無限的市場,提供所有選項才是正確的策略
    8. 放心讓市場替你做事:網路市場可貴之處,在於擁有高效率的群眾集體智慧測量工具。由於資訊充分,網路的消費者很容易比較各種商品,並傳播有關自己好惡的訊息。請謹記;別事先預測,而是要根據測量結果做出反應
    9. 了解免費的威力:網路最普遍的一種商業模式,就是以免費服務吸引大批使用者,在說服其中部分人升級到必須付費訂閱的加值版,以獲得較高品質或功能。由於數位服務成本如此低廉,因此免費服務顧客花部了公司什麼成本,只要其中一小部分能轉換為付費顧客就划得來


2017/09/11

[DB2] The transaction log for the database is full.

Problem
When I execute the following SQL statement:
DELETE FROM test_table where id between 1 and 500000;


I get the error log: 
The transaction log for the database is full.


How-To
This error resulted from "All space in the transaction log is being used."

I need to modify the delete statement into 5 SQL statement, delete 100000 records in each statement instead of delete 500000 at one time.

The updated delete SQL statement are the following:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
-- delete rownumber from 1 to 100000
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 1 AND 100000 
     );

-- delete rownumber from 100001 to 200000     
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 100001 AND 200000 
     );     

-- delete rownumber from 200001 to 300000     
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 200001 AND 300000 
     );          

-- delete rownumber from 300001 to 400000          
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 300001 AND 400000 
     );               

-- delete rownumber from 400001 to 500000           
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 400001 AND 500000 
     );                    





2017/09/10

[webMethods] How to invoke a Flow Service from a Java Service and get its output values

Problem
假設我要呼叫另外一個 flow service,此 flow service 沒有 input parameter,會回傳一個 output parameter,parameter name 為 isAlive

若我要透過 Java code 呼叫此 flow service,且取得其 output value 的話,該怎麼撰寫?


How-To

若呼叫 flow service 的方式是 synchronous,以下為 code snippet:
1
2
3
4
5
6
7
8
    try {
        // Invokes any service published on the server with the given input arguments.
        IData iData = Service.doInvoke("test.work", "Ping_Server", IDataFactory.create());
        // Returns a String representation of the value at the specified key.
        String isAlive = IDataUtil.getString(iData.getCursor(), "isAlive");
    } catch (Exception e1) {
     e1.printStackTrace();
    }



若呼叫 flow service 的方式是 asynchronous,以下為 code snippet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    try {
        // Invokes any service published on the server as a thread
        ServiceThread serviceThread = Service.doThreadInvoke("test.work", "Ping_Server", session, IDataFactory.create());
        // Returns the pipeline from the service running in this service thread.
        IData iData = serviceThread.getIData();
        // Returns a String representation of the value at the specified key.
        String isAlive = IDataUtil.getString(iData.getCursor(), "isAlive");
        loggerAsync(session, " is Alive = " + isAlive);
    } catch (Exception e) {
     e.printStackTrace();
    }

2017/09/09

如何查詢董監事酬勞

在買賣股票前,要看一下董監事酬勞分配比例是否過高,買到的股價是否合理,避免過度稀釋股東權益的公司。

根據現行制度,公司賺錢後,盈餘會先分給公司的董監事們與員工,意味著假設你買的這檔股票的盈餘是五元,若分配其中的一元給董監事與員工,最後分配給你的只剩下四元。

所以,需查明類似產業的公司董監酬勞與員工分紅的比例過高,影響了股東們配股的權益,同時,投資前要計算所能得到的股利,看看是否划算,再決定是否投資

你可以到公開資訊觀測站來查詢董監事酬勞 http://mops.twse.com.tw/mops/web/t119sb04,選擇條件後,按下查詢按鈕


你就可以得到相關資訊















2017/09/08

[webMethods] How to invoke a Flow Service from a Java Service

Problem
如何在 Java Service 中,呼叫一個 Flow Service?

How-To
按照不同的情境 (synchronous 或 asynchronous),與有參數或無參數,需呼叫不同的 API,JavaDoc 如下:
JavaDoc for asynchronous


JavaDoc for synchronous


Examples:
1. Asynchronous and DO NOT have input parameter
    Session session = Service.getSession(); 
    Service.doThreadInvoke("test.work", "Test_Flow", session, IDataFactory.create());


2. Asynchronous and HAVE input parameter (s)
    Session session = Service.getSession(); 
    
    IData input = IDataFactory.create();
        
    IDataCursor inputCursor = input.getCursor();
    IDataUtil.put(inputCursor, "input", " test test ");
    inputCursor.destroy();
    
    Service.doThreadInvoke("test.work", "Test_Flow", session, input);


3. Synchronous and DO NOT have input parameter
    Service.doInvoke("test.work", "Test_Flow", IDataFactory.create());


4. Synchronous and HAVE input parameter (s)
    IData input = IDataFactory.create();
        
    IDataCursor inputCursor = input.getCursor();
    IDataUtil.put(inputCursor, "input", " test test ");
    inputCursor.destroy();
    
    Service.doInvoke("test.work", "Test_Flow", input);

2017/09/07

How to call a REST service in webMethods Integration Server from commons-httpclient

Scenario
Assume I had created two REST Resources in webMethods, one is via HTTP Post method, another one is by HTTP Get method.

How do I test them by commons-httpclient?


How-to
Add two dependencies in your pom.xml
    <dependency>
        <groupId>commons-httpclient</groupId>
        <artifactId>commons-httpclient</artifactId>
        <version>3.1</version>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>


Here has sample code to demonstrate how to send  HTTP Post method and HTTP Get method using commons-httpclient:
package albert.practice.httpClient;

import java.io.IOException;

import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.io.IOUtils;

import com.google.common.base.Charsets;

public class HttpClientExample {

    private String post_uri = "http://10.12.14.28:5555/rest/test.restful.RestTest2";
    private String get_uri = "http://10.12.14.28:5555/rest/test.restful.RestTest3";
    private String inputJson = "{\"ip\":\"10.10.12.66\",\"state\": \"OFFLINE\"}";

    /**
     * Implements the HTTP POST method.
     * 
     * @return response code
     * @throws HttpException
     * @throws IOException
     */
    public int sendPost() throws HttpException, IOException {
        AuthScope authScope = getAuthScope();
        Credentials credentials = getCredentials();

        HttpClient client = new HttpClient();
        client.getState().setCredentials(authScope, credentials);

        PostMethod postMethod = new PostMethod(post_uri);
        postMethod.setDoAuthentication(true);
        postMethod.setParameter("data", inputJson);

        return client.executeMethod(postMethod);
    }

    /**
     * Implements the HTTP GET method.
     * 
     * @return the response string of the HTTP method
     * @throws HttpException
     * @throws IOException
     */
    public String sendGet() throws HttpException, IOException {
        String responseString = "";

        AuthScope authScope = getAuthScope();
        Credentials credentials = getCredentials();

        HttpClient client = new HttpClient();
        client.getState().setCredentials(authScope, credentials);

        GetMethod getMethod = new GetMethod(get_uri + "?input=albert");
        getMethod.setDoAuthentication(true);

        int statusCode = client.executeMethod(getMethod);
        if (HttpStatus.SC_OK == statusCode) {
            responseString = IOUtils.toString(getMethod.getResponseBodyAsStream(), Charsets.UTF_8);
        }
        return responseString;
    }

    /**
     * Set authentication scope.
     * 
     * @return authentication scope
     */
    private AuthScope getAuthScope() {
        String ip = "10.12.14.28";
        int port = 5555;
        String realm = AuthScope.ANY_REALM;

        AuthScope authScope = new AuthScope(ip, port, realm);
        return authScope;
    }

    /**
     * Set the authentication credentials for the given scope.
     * 
     * @return credentials
     */
    private Credentials getCredentials() {
        String username = "cctv";
        String password = "cctv";
        Credentials credentials = new UsernamePasswordCredentials(username, password);
        return credentials;
    }

}


Here has the test code:
package albert.practice.httpClient;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.io.IOException;

import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.junit.Before;
import org.junit.Test;

public class HttpClientExampleTest {

    private HttpClientExample httpClientExample;

    @Before
    public void setup() {
        httpClientExample = new HttpClientExample();
    }

    @Test
    public void testSendPost() throws HttpException, IOException {
        int statusCode = httpClientExample.sendPost();
        assertEquals(HttpStatus.SC_OK, statusCode);
    }

    @Test
    public void testSendGet() throws HttpException, IOException {
        String responseString = httpClientExample.sendGet();
        System.out.println("responseString = " + responseString);
        assertNotNull(responseString);
    }

}
    



2017/09/06

[webMethods] How to Create a Restful Service?

Problem
若我要提供一個 restful service 給另外一個系統呼叫,該如何實作?


How-To
步驟如下:
(1) 在 restful folder 下,建立一個 Rest Resource,命名為 RestTest




(2) RestTest 提供呼叫的方式為 HTTP POST


(3) 在 RestTest 中,設定一個 input parameter,parameter name 為 data


(4) 建立一個測試用的 Java Service,命名為 TestJavaService


(5) 在 TestJavaService 中,設定一個 input parameter,命名為 inputJson


(6) TestJavaService 程式邏輯為:當接收到參數值後,將 log 印到 integration server


(7) 將 TestJavaService drag and drop,放到 RestTest 中,並且將透過 restful service 中傳入的參數,傳遞到 TestJavaService  的 inputJson parameter


(8) 透過 rest client,用此 url 來進行呼叫 http://10.12.14.28:5555/rest/cctv.restful.RestTest,http method 選取 POST,在 Data Form 設定參數名稱為 data,並填入 value,按下 Send。

需注意 URL 呼叫規範為:
http://server:port/rest/FullyQualifiedResource
若是要在 URL 帶入帳號密碼,呼叫規範為:
http://username:password@server:port/rest/FullyQualifiedResource




(9) 到 integration server 的 administration console 檢查結果


Reference
[1] http://serviceorientedarchitect.com/how-to-create-a-rest-service-in-webmethods-integration-server/

2017/09/04

[JSON] Using JSONObject to build and parse JSON

Assume we would like to build a user JSON string, it looks like:
{"users":[{"name":"Albert","id":1},{"name":"Mandy","id":2}]}

Steps:
1. Create a User object which have two attributes (id and name)
2.  Create a getUsers method to retrieve dummy user collection 
3. Create buildUserJson() to build JSON string from List of User 
package albert.practice.json;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class JsonObjectTest {

    public static void main(String[] args) {

        JsonObjectTest test = new JsonObjectTest();
        
        String userJSON = test.buildUserJson();
        log.debug("user JSON = " + userJSON);
    }

    public String buildUserJson() {
        List<User> users = getUsers();
        JSONObject dataset = new JSONObject();
        users.stream().forEach(u -> addToDataset(u, dataset));

        return dataset.toString();
    }

    private static void addToDataset(User user, JSONObject dataset) {
        JSONObject userObj = new JSONObject();
        userObj.put("id", user.getId());
        userObj.put("name", user.getName());

        // use the accumulate function to add to an existing value. The value
        // will now be converted to a list
        dataset.accumulate("users", userObj);
    }

    public List<User> getUsers() {
        User albert = new User(1, "Albert");
        User mandy = new User(2, "Mandy");
        return Arrays.asList(albert, mandy);
    }

    @Data
    @AllArgsConstructor
    @ToString
    private static class User {
        private Integer id;
        private String name;
    }

}


If you would like to parse JSON string to List of User, you can check parseUserJson(String json)
    public List<User> parseUserJson(String json) {
        JSONObject jsonObj = new JSONObject(json);
        JSONArray userArray = (JSONArray) jsonObj.get("users");

        List<User> users = new ArrayList<>();

        userArray.forEach(u -> addToList(u, users));

        return users;
    }

    private void addToList(Object user, List<User> users) {
        JSONObject userObj = (JSONObject) user;
        Integer id = (Integer) userObj.get("id");
        String name = (String) userObj.get("name");
        users.add(new User(id, name));
    }




Reference
[1] http://www.studytrails.com/java/json/java-org-json.jsp

2017/09/03

[閱讀筆記] 惡魔財經辭典 (The Devil’s Financial Dictionary) [5/6]


  1. Pac-Man defense (小精靈反嗜)是抵擋惡意收購的一種戰術,成為收購目標的公司反守為攻,反擊收購者。此舉短期來看通常會拯救被收購者,但長期來看會毀了雙方
  2. Pareidolia (空想性錯視) 是一種人類難以抑制的傾向,會從隨機的事件或圖像中看出有意義的模式或趨勢。如在一片烤三明治發現喜馬拉雅山、在火星地表看到水道、相信過去的投資績效可以預測未來的結果
  3. 華爾街深受各種疾病所苦,而失憶症是其中最嚴重的一種。藉由埋葬過去,金融圈就可以拒絕從過去的錯誤中學習
  4. 耐心在蝸牛和烏龜之類的低等生物上很明顯的特質,但在從事金融投資的人類身上很罕見。金融資產的每一筆買賣都會產生交易成本,多半還會帶來稅金。一再有研究顯示,投資人交易越頻繁,賺到的錢越少
  5. Ponzi scheme (龐式騙局) 是一種詐欺投資行銷,記住,如果聽起來好到不真實,百分之百是假的
  6. Portfolio (投資組合)本身可以保護所持有個每一個資產;一個好的投資組合會持有多元類別的資產,不會重疊,價格走勢也不會同步。雖然投資組合無法避免虧損,但分散風險、種類多元的投資組合,是所有理財行為中最穩當的
  7. Porfolio manager(投資經理人)是一群『假裝做他們做不到的事,假裝喜歡他們不喜歡的事』的人,他們全部以同樣膽小的方式挑選同樣的股票和債券,因此投資績效要高人一等幾乎不可能,尤其是收了手續費以後
  8. 大多數的投資人往往持有虧損投資太久,而有賺錢的投資又太早賣掉
  9. Portfolio turnover (投資組合週轉率)的本意是做為投資組合累積過程中的潤滑劑,結果作用卻反而像砂紙。投資經理人交易的愈快速,產生的摩擦力就愈大,也就會燒得愈燙,如同古諺所云:「欲速則不達。」
  10. 犯錯難免,重大事件和新訊息也會改變資產的價值。不過,一般來說,投資人如果在買進之後很快又脫手,這八成是錯誤的做法
  11. 人類的不幸全來自一件事,不知道該如何在一個屋子裡保持平靜
  12. 眼睛一直盯著價格看的投資人,到頭來會交易過度頻繁,對他人的情緒波動反應過度;把重點放在追求價值,才能獲得更好的長期報酬
  13. 由於盈餘有很多動手腳的方法,所以用本益比來衡量一家公司的價值並不精確,往往會造成誤導。「常態化」(normalized)的本益比會將數年的盈餘加以平均,以取得較可靠的數字
  14. 保護本金(principal)是固定收益投資(fixed-income investment)的首要原則
  15. 審慎之人的職責是避開不必要且會賠錢的風險,而不是所有風險都一律避開。所謂審慎,是根據歷史證據和仔細分析做出良好判斷,而不是不論如何就是要追求安全
  16. 量化寬鬆(QE, Quantitative Easing)是指央行大舉購買債券等等金融資產的行為,企圖用資金淹沒整個金融體系。長期會讓利率下滑,理論上會鼓勵銀行放貸、鼓勵投資人投資、鼓勵消費者消費。但長久以來,普遍認為 QE 會引發大規模通貨膨脹
  17. 不動產信託(REIT, Real-Estate Investment Trust)包括了一籃子公司,這些公司都持有商業不動產,並且以股利(dividend)形式將租金等收入發放給投資人。那些收入很誘人,不過 REIT 的風險可比債券高
  18. 回歸平均值(regression to the mean)是一種傾向,「高於平均」之後是「低於平均」,「異常糟糕」之後是「異常美好」,這種傾向是金融物理學中最強大的一股力量。畢竟,人類的努力最基本的單位是「運氣」。偉大的 value investor Graham 喜歡把 regression to the mean 稱為 the law of compensation (補償定律)
  19. 要預測事件何時會 regression to the mean 、回歸程度如何,這很難。不過,不管是什麼領域,運氣遲早會發揮其重大影響力
  20. Regulation(管控)無法遏止大型金融公司定期摧毀客戶數十億美元財富,也未能主旨破壞擴散全球經濟,倒是把小公司困在官僚式繁文褥節中,讓小公司無法施展拳腳與大公司一較高下
  21. 對投資經理人來說,短期績效是唯一重要的東西,因為跟他們的薪水關係密切;但是對客戶來說,長期績效才是最重要的東西
  22. 若是某個投資或是某個投資經理人處於連續好運中,這時該問的問題不是好運會持續多久,而是從長期的成功機率來看,這個結果的代表性如何?短期表現幾乎絕不是預測長期結果的好指標
  23. 金融研究是一種金融猜測(guesswork)的技藝,看似科學,其實是猜測,每年大概要花投資人總資產 1% 的成本
  24. 根據技術分析(technical analysis),壓力(resistance)是指資產的當前價格接近過去高點。技術分析者認為,價格接近壓力水準(resistance level)時,絕不可能繼續上漲,至少短期不會(反正短期到底多短都是隨他們說,只要沒猜到就重新定義)
  25. 股東權益報酬率(ROE,Return On Equity)是衡量一家公司獲利能力的一種方法,計算方式是淨收入除以股東總投資金額。但是,ROE 告訴你的事公司過去的情況,並不是未來
  26. 風險就是,不管未來會發生什麼,一定會有更多超乎預期的事發生。風險就是一個落差,一邊是投資人自認為對投資、對金融市場、對自己的了解,另一邊是他們最後學到的
  27. 沒有任何事比看到朋友致富更能擾亂一個人的安寧和判斷
  28. Self-serving bias (自利偏誤)是人類的一種傾向,容易把成功歸因於自己的行為,把失敗歸咎於他人或不可控制的外在因素。在年度報告中,經理人會把好的結果歸因於自己的聰明才智,把不號的結果歸咎於政治、戰爭或天氣等等無關的因素
  29. 一旦企業高層集中精力在經營股票,而不是經營企業,結果必然是企業業績先落難,然後股票接著跟進
  30. 原本對股票市場不感興趣的人也瘋狂買賣股票時,那你就要注意,現在市場風險非常高。某些華爾街分析師信奉『擦鞋童』(shoeshine boy)理論,其實是因為瞧不起人,如果連無知的散戶投資人(retail investor)也對股票感興趣,老練投資人當然可以嘲笑這些傢伙這麼容易上鉤