- 如果人們有無窮的選擇,並可以輕易找他們想要的,你會發現,市場對電影的需求會繼續延伸、觸及之前想都沒想過的利基商品。網路租片商 Netflix 改變了供應利基商品的經濟效應,也因此讓我們重新理解人們真正想管賞什麼影片
- 別被 80 / 20 法則牽著鼻子走,即使 80% 的營收是由 20% 的商品所創造,我們也沒有道理不要其他那 80% 的產品。在長尾市場,存貨成本很低,因此不管商品的銷量如何,你的存貨都應該盡量多樣化。世事難料,有了功能強大的搜尋引擎和推薦系統,排名在後面的 80% 的冷門商品,很有可能哪天就會擠進前 20%
- 推薦系統與篩選器對長尾市場非常重要,藉由鼓勵人們從暢銷商品世界(高進貨成本)進入利基商品世界(低進貨成本),聰明的零售商便有可能大幅改善零售業的經濟效應
- 人類的注意力比金錢更有擴展性。長尾的主要效應是將我們的品味轉向利基商品,但消費是否增加,則視我們對搜尋到的東西滿意度而定
- 口耳相傳的回饋循環會擴大消費者喜好,為口碑好的產品錦上添花,引來佳評如潮,讓劣評者越來越難翻身。在網絡理論下,這種正向回饋循環會創造贏家通吃的局面,換言之,它是絕佳的暢銷品製造機
- 無論是暢銷商品也好,利基商品也罷,銷售量都會隨著時間趨緩;暢銷商品的起步點可能會高些,但他們終究會走入長尾的末端
- 在資訊科學的世界裡,事情如何歸類是個棘手的難題,也稱為「本體論的難題」(ontology problem)。本體論在各學門意義各異,對圖書館員和電腦科學家而言,本體論是指安排事物的方式。杜威的十進位分類法是歸類圖書的一種方式;大英百科全書是編列資訊的一種方式;元素週期表則是排列物質的一種方式
- 在 The Lure of Choice論文中提到,選項較多時,消費者比較願意做選擇。消費者偏好放映聽較多的戲院,桌子較多的賭場;選擇越多,他們被迫接受不理想產品的風險也會降低
- 零售商店為什麼要把一堆小東西擺在收銀機旁邊,因為可及性 (availability) 與便利性可以創造出更多的銷售量。牛奶、啤酒、飲料這些產品,便利商店販售的價格遠比超市高,但便利商店販售的與其說是商品,倒不如說是可及性,讓你當下即可取得
- 電視的粗俗、下流中、愚蠢,並非因為觀眾粗俗、愚蠢。電視之所以是現在這副德行,純粹是因為人們對粗俗、下流、愚蠢事務的關注極其相似,但對精緻、美感、高尚等各類事務的興趣卻大不相同
- 建立成功的長尾事業的秘訣,可以歸納為兩個要件:
- 讓所有東西都很容易取得
- 幫客戶找到它
- 長尾整合者的九大成功原則
- 把存貨搬進來,或搬出去:Sears、Wal-Mart利用其現有的倉儲網,提供比店面更多樣的商品,因為其存貨集中化,比把產品分別放到數百家店面的貨架上,還有效率。Amazon 已擴展到虛擬存貨,如實體貨品放在某個夥伴的倉庫內,但在Amazon 網站上展示與銷售。Amazon 的庫存成本為0
- 讓客戶自己動手:同好生產創造了eBay, Wikipedia, MySpace等。這不是outsourcing,而是crowdsourcing (運用群眾資源)。使用者的時間與精力幾乎無窮盡。因此,只有同好生產才能將長尾延伸到最遠處。在自助服務下,做事的人就是最關心這件事,也是最瞭解自己的人
- 單一配銷方式不適用於所有人:有的人喜歡到商店購物;有的人喜歡在網路買東西;有的人喜歡先在網路研究,在到商店購買;有的喜歡先到商店瀏覽,然後再網路購買
- 單一商品不適合所有人:我們面臨的顧客,是一群口味各異的顧客
- 單一價格不適合所有人:只要製造與配銷的邊際成本接近零,那麼可變動訂價是順理成章的模式
- 分享資訊:若把購買模式的資訊轉化為客戶推薦,就可成為強力的行銷工具。有了評鑑或產品規格之類的深度產品資訊,某些原本可能阻礙購買行動的問題往往可得到解答。資訊越多越好,但前提是呈現方式應該要幫助顧客做選擇中,而不是讓人摸不著頭緒
- 兼得(and),而非擇一(or):稀少性思考的症狀之一,就是假設市場為零和。換言之,就是誤認凡事只有非此即彼的選擇。但在容量無限的市場,提供所有選項才是正確的策略
- 放心讓市場替你做事:網路市場可貴之處,在於擁有高效率的群眾集體智慧測量工具。由於資訊充分,網路的消費者很容易比較各種商品,並傳播有關自己好惡的訊息。請謹記;別事先預測,而是要根據測量結果做出反應
- 了解免費的威力:網路最普遍的一種商業模式,就是以免費服務吸引大批使用者,在說服其中部分人升級到必須付費訂閱的加值版,以獲得較高品質或功能。由於數位服務成本如此低廉,因此免費服務顧客花部了公司什麼成本,只要其中一小部分能轉換為付費顧客就划得來
Total Pageviews
2017/10/01
[閱讀筆記] The Long Tail (2/2)
Labels:
Reading
2017/09/30
2017/09/11
[DB2] The transaction log for the database is full.
Problem
When I execute the following SQL statement:
I get the error log:
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:
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 ); |
Labels:
Database
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:
假設我要呼叫另外一個 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(); } |
Labels:
webMethods
2017/09/09
如何查詢董監事酬勞
在買賣股票前,要看一下董監事酬勞分配比例是否過高,買到的股價是否合理,避免過度稀釋股東權益的公司。
根據現行制度,公司賺錢後,盈餘會先分給公司的董監事們與員工,意味著假設你買的這檔股票的盈餘是五元,若分配其中的一元給董監事與員工,最後分配給你的只剩下四元。
所以,需查明類似產業的公司董監酬勞與員工分紅的比例過高,影響了股東們配股的權益,同時,投資前要計算所能得到的股利,看看是否划算,再決定是否投資
你可以到公開資訊觀測站來查詢董監事酬勞 http://mops.twse.com.tw/mops/web/t119sb04,選擇條件後,按下查詢按鈕
你就可以得到相關資訊
根據現行制度,公司賺錢後,盈餘會先分給公司的董監事們與員工,意味著假設你買的這檔股票的盈餘是五元,若分配其中的一元給董監事與員工,最後分配給你的只剩下四元。
所以,需查明類似產業的公司董監酬勞與員工分紅的比例過高,影響了股東們配股的權益,同時,投資前要計算所能得到的股利,看看是否划算,再決定是否投資
你可以到公開資訊觀測站來查詢董監事酬勞 http://mops.twse.com.tw/mops/web/t119sb04,選擇條件後,按下查詢按鈕
你就可以得到相關資訊
Labels:
Investment
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
2. Asynchronous and HAVE input parameter (s)
3. Synchronous and DO NOT have input parameter
4. Synchronous and HAVE input parameter (s)
如何在 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);
Labels:
webMethods
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
Here has sample code to demonstrate how to send HTTP Post method and HTTP Get method using commons-httpclient:
Here has the test code:
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); } }
Labels:
Apache Project
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 呼叫規範為:
(9) 到 integration server 的 administration console 檢查結果
Reference
[1] http://serviceorientedarchitect.com/how-to-create-a-rest-service-in-webmethods-integration-server/
若我要提供一個 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/
Labels:
webMethods
2017/09/04
[JSON] Using JSONObject to build and parse JSON
Assume we would like to build a user JSON string, it looks like:
Steps:
If you would like to parse JSON string to List of User, you can check parseUserJson(String json)
Reference
[1] http://www.studytrails.com/java/json/java-org-json.jsp
{"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
Labels:
JSON
2017/09/03
[閱讀筆記] 惡魔財經辭典 (The Devil’s Financial Dictionary) [5/6]
- Pac-Man defense (小精靈反嗜)是抵擋惡意收購的一種戰術,成為收購目標的公司反守為攻,反擊收購者。此舉短期來看通常會拯救被收購者,但長期來看會毀了雙方
- Pareidolia (空想性錯視) 是一種人類難以抑制的傾向,會從隨機的事件或圖像中看出有意義的模式或趨勢。如在一片烤三明治發現喜馬拉雅山、在火星地表看到水道、相信過去的投資績效可以預測未來的結果
- 華爾街深受各種疾病所苦,而失憶症是其中最嚴重的一種。藉由埋葬過去,金融圈就可以拒絕從過去的錯誤中學習
- 耐心在蝸牛和烏龜之類的低等生物上很明顯的特質,但在從事金融投資的人類身上很罕見。金融資產的每一筆買賣都會產生交易成本,多半還會帶來稅金。一再有研究顯示,投資人交易越頻繁,賺到的錢越少
- Ponzi scheme (龐式騙局) 是一種詐欺投資行銷,記住,如果聽起來好到不真實,百分之百是假的
- Portfolio (投資組合)本身可以保護所持有個每一個資產;一個好的投資組合會持有多元類別的資產,不會重疊,價格走勢也不會同步。雖然投資組合無法避免虧損,但分散風險、種類多元的投資組合,是所有理財行為中最穩當的
- Porfolio manager(投資經理人)是一群『假裝做他們做不到的事,假裝喜歡他們不喜歡的事』的人,他們全部以同樣膽小的方式挑選同樣的股票和債券,因此投資績效要高人一等幾乎不可能,尤其是收了手續費以後
- 大多數的投資人往往持有虧損投資太久,而有賺錢的投資又太早賣掉
- Portfolio turnover (投資組合週轉率)的本意是做為投資組合累積過程中的潤滑劑,結果作用卻反而像砂紙。投資經理人交易的愈快速,產生的摩擦力就愈大,也就會燒得愈燙,如同古諺所云:「欲速則不達。」
- 犯錯難免,重大事件和新訊息也會改變資產的價值。不過,一般來說,投資人如果在買進之後很快又脫手,這八成是錯誤的做法
- 人類的不幸全來自一件事,不知道該如何在一個屋子裡保持平靜
- 眼睛一直盯著價格看的投資人,到頭來會交易過度頻繁,對他人的情緒波動反應過度;把重點放在追求價值,才能獲得更好的長期報酬
- 由於盈餘有很多動手腳的方法,所以用本益比來衡量一家公司的價值並不精確,往往會造成誤導。「常態化」(normalized)的本益比會將數年的盈餘加以平均,以取得較可靠的數字
- 保護本金(principal)是固定收益投資(fixed-income investment)的首要原則
- 審慎之人的職責是避開不必要且會賠錢的風險,而不是所有風險都一律避開。所謂審慎,是根據歷史證據和仔細分析做出良好判斷,而不是不論如何就是要追求安全
- 量化寬鬆(QE, Quantitative Easing)是指央行大舉購買債券等等金融資產的行為,企圖用資金淹沒整個金融體系。長期會讓利率下滑,理論上會鼓勵銀行放貸、鼓勵投資人投資、鼓勵消費者消費。但長久以來,普遍認為 QE 會引發大規模通貨膨脹
- 不動產信託(REIT, Real-Estate Investment Trust)包括了一籃子公司,這些公司都持有商業不動產,並且以股利(dividend)形式將租金等收入發放給投資人。那些收入很誘人,不過 REIT 的風險可比債券高
- 回歸平均值(regression to the mean)是一種傾向,「高於平均」之後是「低於平均」,「異常糟糕」之後是「異常美好」,這種傾向是金融物理學中最強大的一股力量。畢竟,人類的努力最基本的單位是「運氣」。偉大的 value investor Graham 喜歡把 regression to the mean 稱為 the law of compensation (補償定律)
- 要預測事件何時會 regression to the mean 、回歸程度如何,這很難。不過,不管是什麼領域,運氣遲早會發揮其重大影響力
- Regulation(管控)無法遏止大型金融公司定期摧毀客戶數十億美元財富,也未能主旨破壞擴散全球經濟,倒是把小公司困在官僚式繁文褥節中,讓小公司無法施展拳腳與大公司一較高下
- 對投資經理人來說,短期績效是唯一重要的東西,因為跟他們的薪水關係密切;但是對客戶來說,長期績效才是最重要的東西
- 若是某個投資或是某個投資經理人處於連續好運中,這時該問的問題不是好運會持續多久,而是從長期的成功機率來看,這個結果的代表性如何?短期表現幾乎絕不是預測長期結果的好指標
- 金融研究是一種金融猜測(guesswork)的技藝,看似科學,其實是猜測,每年大概要花投資人總資產 1% 的成本
- 根據技術分析(technical analysis),壓力(resistance)是指資產的當前價格接近過去高點。技術分析者認為,價格接近壓力水準(resistance level)時,絕不可能繼續上漲,至少短期不會(反正短期到底多短都是隨他們說,只要沒猜到就重新定義)
- 股東權益報酬率(ROE,Return On Equity)是衡量一家公司獲利能力的一種方法,計算方式是淨收入除以股東總投資金額。但是,ROE 告訴你的事公司過去的情況,並不是未來
- 風險就是,不管未來會發生什麼,一定會有更多超乎預期的事發生。風險就是一個落差,一邊是投資人自認為對投資、對金融市場、對自己的了解,另一邊是他們最後學到的
- 沒有任何事比看到朋友致富更能擾亂一個人的安寧和判斷
- Self-serving bias (自利偏誤)是人類的一種傾向,容易把成功歸因於自己的行為,把失敗歸咎於他人或不可控制的外在因素。在年度報告中,經理人會把好的結果歸因於自己的聰明才智,把不號的結果歸咎於政治、戰爭或天氣等等無關的因素
- 一旦企業高層集中精力在經營股票,而不是經營企業,結果必然是企業業績先落難,然後股票接著跟進
- 原本對股票市場不感興趣的人也瘋狂買賣股票時,那你就要注意,現在市場風險非常高。某些華爾街分析師信奉『擦鞋童』(shoeshine boy)理論,其實是因為瞧不起人,如果連無知的散戶投資人(retail investor)也對股票感興趣,老練投資人當然可以嘲笑這些傢伙這麼容易上鉤
Labels:
Investment,
Reading
Subscribe to:
Posts (Atom)