Total Pageviews
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
2017/09/02
[閱讀筆記] Common Stocks and Uncommon Profits (1/4)
- 投資目標應該是一家成長的公司,公司應當有按部就班的計劃使盈利長期大幅成長,且擁有很難讓新加入者分享其高成長的內在特質
- 集中全力購買那些失寵的公司。這是指因為市場走勢或當時市場誤判一家公司的真正價值,使得股票的價格遠低於真正的價值,此時則應該斷然買進。費雪有過教訓,在股市高漲的年代,買到一家成長股,但是由於買進的價格高昂,業績即使成長,但亦賺不了錢。
- 我們投資的是公司不是GDP,亦不是 CPI 或者定期存款利率。許多人信奉波段操作,但是至今沒有一個靠波段操作成為投資大師的
- 追求資本大幅成長的投資人,應淡化股利的重要性。獲利高但股利低或根本不發股利的公司中,最有可能找到十分理想的投資對象。成長型的公司,總是將大部分盈利投入到新的業務擴張中去。若大比例分紅,則多數是因為公司的業務擴張有難度,所以才將盈利的大部分分紅。
- 無論是公司經營還是股票投資,重要的是停損,而不是停利。許多投資者往往是做反了,買進一隻股票一旦獲利,總是考慮賣出;相反的,買進的股票套牢了便一直持有,讓虧損持續擴大。
- 股票投資,有時難免有些地方需要靠運氣,但長期來說,好運、壞運會相抵,想要 持續成功,必須靠技能和運用良好的原則
- 在熊市時,這是個去提升你持有股票品質的好時機,公司的素質在熊市時一覽無遺
- 當大家對於市場焦躁不安、瘋狂殺出時,你反而要憂心那些股票是你該擁有的,但是你卻沒有
- 購買股票前,你要考慮 15 個面向:
- 這家公司所提供的產品與服務,在未來數年間,是否有足夠的市場潛力來產生大量的銷售業績?【此點著重於公司現有產品的銷售成長潛力】
- 當現有的受歡迎的產品線的成長潛力出現停滯時公司的管理階層是否有能力持續開發新產品或服務?【此點著重於公司領導階層的能力與態度。其是否能從現有市場中,發展出有潛在需求的產品或服務,做為未來成長的動能】
- 公司是否有效利用其研發能力,如投入多少 R&D成本,帶來多少效益?【你可以研究一下這家公司在特定時間區間 (如過去十年),花多少錢在 R&D,以及貢獻多少銷售額或是淨利】
- 公司是否擁有優於一般公司的銷售組織?【企業成功的三大基石:生產 (production)、銷售 (sales) 與研發 (research),只有堅強的生產與研發團隊,是不夠的,若要有穩定、長期的成長,一個強大的銷售團隊是非常重要的】
- 公司是否有足夠的淨利 (profit margin)?【投資人要遠離低淨利的公司】
- 公司在維持或改善淨利上,做了甚麼努力?【靠漲價來維持或改善淨利,長期來說對投資人不是好事;好的公司,會思考新的點子、方法來降低成本與改善淨利,這才會是長久之道】
- 公司與員工間是否有良好的關係?【好的勞資關係,員工的就會擁有較高的生產力、比較高的向心力、較低的流動率,對於公司是正向的。若一家公司,很多人排隊去應徵、薪水高於該產業平均薪資以及高階主管是否善待基層員工,都是可以觀察的重點】
- 公司的高階管理階層與基層工作人員是否有良好的關係?【公司內部人員的升遷、調薪,是否有被公平對待,影響著內部的和諧、向心力與生產力】
- 一人管理 (one-man management) 的公司是無法持續成長的。【若公司要獲得更進一步的成長,最高主管有無培養接班人選、是否能傾聽別人的意見,都是值得注意的地方】
- 公司是否有良好的成本分析與成本會計?【沒有好的成本分析,就不會有好的訂價策略。成本會計分為管理及財務兩個方面,成本會計協助管理計劃及控制公司的經營,制定長期性或策略性的決策,並且建立有利的成本控制方法、降低成本與改良品質】
- 公司在此產業中,是否異於其他公司的特色或能力?【如擁有技術專利,可以在激烈的競爭中取得優勢、維持一定的毛利,但是要注意,當專利到期後,此保護傘就不見了】
- 公司有無短期或長期的獲利目標?【投資人要避免短視的公司】
- 公司是否擁有健全的財務來支撐公司未來的成長?【請記住,不要因為財務健全就投資此間公司,其還要滿足其他十四點條件】
- 公司的管理階層是否只有在經營狀況好的時候跟投資人說明狀況,但是在經營狀況不佳時,則三緘其口?【若是遇到問題,卻不跟投資人說清楚狀況,代表經營者也徬徨不安,對於問題沒有解決方法,也代表著對於股東毫無責任感,投資人應遠離這類型的公司】
- 公司的經營者是否有誠信?【若一家公司缺乏誠信,即使擁有極佳的經營績效,符合上述的14點說明,投資人仍應遠離這類型的公司】
- 挑選理專時,有兩個原則
- 理專必須誠實
- 理專的財顧管理的基本概念必須要跟你一致,如上述的15點。若理專與你的想法不一致,你最好換另外一個理專,因為若想法不同,其所挑選的投資組合,也不會是你想要的
- 在投資前,請準備好足夠的錢來面對可能會遇到的醫療費用、或是其他意外事件所衍生的額外費用。投資不保證賺錢,再怎麼訓練有素的投資人,也有可能誤判情勢
- 成長型的股票,不僅在同行中要有卓越的績效表現,其在股息回報率上,在同行中也會擁有卓越的表現
- 不要仰賴財經專家、機構所做的預測來投資,因為他們的預測,大部分都是錯的
- 當公司經營過程出現麻煩,此時你要判斷這對公司的影響是暫時的,還是永久的。如果只是暫時的,你可以考慮在投資大眾恐慌殺出時,酌量買進
Labels:
Investment,
Reading
Subscribe to:
Posts (Atom)