Total Pageviews

2016/12/01

[閱讀筆記] Security Analysis (Part 6)


  1. Balance Sheet 是一家公司在特定時間的資產與負債的snapshot
  2. 當一家公司的資產價值超過獲利能力,代表管理階層未妥善利用公司資產;當一家公司的獲利能力超過資產價值,公司就必須採取一些手段,維護競爭優勢;若公司的資產價值與獲利能力差不多,代表公司對資產有做合理的管理與沒有甚麼特殊措施避免競爭
  3. 投資人應該對於想要買的股票進行 assets valuation,這樣才能對於該公司能夠有完整的picture,投資人也比較有自信能夠抓出適當的 margin of safety
  4. Asset Valuation 包含了主觀與客觀的衡量方式,如在財務報表中無法呈現公司品牌的價值,這部分就屬於主觀;淨利則是透過公司的收入減去支出所得到的數字,則是屬於客觀。其方法包括收益現值法、重置成本法、現行市價法以及清算價格法等等
  5. 研究balance sheet你可以得知:企業花多少資金投資;公司的財務狀況(也就是營運資金)吃緊與否;資本結構的詳細資訊;驗證營收報告的有效性;分析公司收入來源
  6. Book value (帳面價值)是公司之會計紀錄上所記資產的價值,它通常指資產的取得成本減去累積折舊的餘額,並非現金流量,使用不同的折舊方法會有不同的帳面價值。帳面價值只包含形資產,不包含無形資產。實務上,book value 的重要性逐漸式微
  7. 帳面價值的缺憾是無法測量公司的創意與革新 (因為此部分屬於無形資產)。帳面價值最管用的是分析那些有龐大且有形的資產的公司,如鋼鐵業者
  8. 債券票面價值是指債券票面所列價值,即發行人在到期日必須支付的金額。股票票面價值是指公司發行的股票票面上所載明的金額。當發行價格<票面價值,為折價發行(under par);發行價格>票面價值,為溢價發行(over par);當發行價格=票面價值時,是平價發行(at par)
  9. current assets (流動資產) 是指現金或銀行存款、短期投資、應收帳款、應收票據、存貨、預付費用等,具有高度流動性的皆屬於current assets;大樓、設備、不動產等則屬於 fixed assets (固定資產) 。相較於有形資產(只需花錢投資設備),若是靠無形資產所創造出來的營收,受到競爭者的威脅會比較低
  10. 股票的流動資產的價值,其遠比book value 重要。其可作為清算價值的約略的指標。當一家公司價格低於清算價值時,本質上是不合邏輯的,其可能是市場判斷、公司管理的政策或股東對公司資產的態度等等所造成
  11. 清算價值(Liquidation Value)是指公司撤銷或解散時,資產經過清算後,每一股份所代表的實際價值。在理論上,清算價值等於清算時的帳面價值,但由於公司的大多數資產只以低價售出,再扣除清算費用後,清算價值往往小於帳面價值
  12. 當一家公司的股價低於其清算價值(liquidation value)時,不是價格太低,就是公司應該要被清理。對於股民來說,要判斷是不是一個購買點(若該公司可以永續經營勝過破產);對於公司來說,代表著公司錯誤的政策所導致,經營者應該進行矯正措施
  13. 若此檔股票的價格低於清算價值、很清楚沒有浪費公司資產且從過往記錄可以顯示強大的營收能力時,若於此時買進將會是划算的交易,可藉此擴大margin of safety,降低本金損失的風險
  14. 清算價值(Liquidation Value)的重要性不高,因為一般公司並沒有清算的打算。儘管公司的清算價值低於股價,仍不建議買進的原因是:(1) 公司的獲利差強人意;(2) 公司並沒有進行清算的打算
  15. 挑選股票只是一個單一的動作,但是擁有股票則是一個持續的過程
  16. 選股的藝術在於選擇管理良好的企業,濾掉管理不良的企業 。許多企業的管理者都是不稱職且沒有效率的
  17. 公司的股價取決營收然而清算的價值取決所擁有的資產
  18. 低股價的原因通常在於營收衰退與不規則的股利政策
  19. 股票的賣出是根據其營收與股利政策,不是其現金資產價值,除非這些現金資產在未來很有展望
  20. 謹慎的投資人會從資產負債表中,分析公司手上現金是否充裕、流動資產與流動負債的比率是否適當、有沒有即將到期的債務會影響公司財務
  21. 一家公司手上應該有多少現金才夠?Graham的建議是,流動資產至少是流動負債的兩倍才夠。另外一個評估財務強度的指標稱之為acid test,其條件是流動資產扣除庫存後,至少要等於流動負債,超過越多越好
  22. 分析資產負債表有三個重要的層面:(1) 檢查報表上中的EPS;(2) 確認損失或獲利對於公司財務報表中的影響;(3)  追蹤公司長期的resources 與 earning power 之間的關係
  23. 錯誤的價格無法持續太久
  24. 證券市場的估價常常是毫無邏輯且錯誤百出的,出價的過程不是自動或是有規劃的產生,完全是群眾的心理,而群眾的心理卻是最難理解的
  25. 人們在股市常犯的三個錯誤:誇大 (exaggeration), 過度簡化 (oversimplification) or 疏忽 (neglect)
  26. 試著想抓住市場的鐘擺是不可行的,你無法知道高點與低點在何時出現
  27. 標準的或大型的公司,其所發行的股票的股價,會針對其獲利數字做快速反應;一些較小型或比較不為人所熟悉的公司,則看市場的專業作手而決定,如果缺乏市場作手的興趣,其股價就會落後其營收表現;若得到市場作手關愛的眼神,則不管其營收表現,股價一樣一飛衝天
  28. 不要因為今年配發股利增加,就花更多的錢去追高
  29. 預測未來股價不是 security analysis 的工作
  30. 依照過去的歷史紀錄來預測未來有幾個問題:(1) 分析的行為本身並不科學,且無法讓你持續成功;(2) 不是個可靠的方法可以讓你在股市賺錢;(3) 理論基礎基於一個有缺陷的邏輯或僅僅是一個假說
  31. Security analysis 與 market analysis 的差異是,security analyst 會透過 margin of safety (安全邊際) 來保護自己 。Security analysis 強調為了面對未來可能的動盪,要做好安全邊際。若遭逢重大股災,至少有防護網做一定程度的保護,market analysis 則無此概念,若預測失誤,就只有賠錢的份
  32. Market forecasting 本身是一門藝術,其需要分析師的天賦、判斷力、直覺以及其他人格特質,沒有制式的規則或程序來保證預測成功。
  33. 在經濟的領域,具備科學性與完全可靠的預測方法,在邏輯上是不可能的
  34. 無論你是在華爾街或其他地方,沒有一個可靠的分析方法讓你容易且快速的賺錢
  35. 因為預測明年營收良好而受推薦的股票,有兩個地方要注意:ㄧ、有可能預測失準;二、即使預測正確,有可能現價已經貼現或過度貼現了
  36. 無論是那種分析方法或準備工作,成功的交易不是一種暫時與偶然,不然就是一種高度罕見的天賦。所以,大部分的投資人無可避免地都會以失敗收場
  37. Simple businesses with strong franchises can be run by any idiot.

2016/11/30

[Travel] 2016/11

容軒步道
DSC00844

DSC00845



情人湖觀景台
DSC00888

DSC00884

DSC00889

DSC00893

2016/11/10

[Java 8] Optional

Assume I have a List of project:
1
2
3
 OptionalTest.Project(id=1, name=FMS)
 OptionalTest.Project(id=1, name=NSS)
 OptionalTest.Project(id=1, name=DBM)

If we use a non-existing project name to do search, it will throw java.lang.NullPointerException
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
@Slf4j
public class OptionalTest {

    public static void main(String[] args) {
        OptionalTest test = new OptionalTest();        

        Project test1 = test.getProjectByName("test");
        log.debug("test1 = " + test1.toString());
    }
    

    private Project getProjectByName(String name) {
        return getProjects().stream().filter(p -> p.getName().equals(name)).findAny().orElse(null);
    }
}

Therefore, we need to add if-else statement to stay away from java.lang.NullPointerException
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@Slf4j
public class OptionalTest {

    public static void main(String[] args) {
        OptionalTest test = new OptionalTest();
        Project test1 = test.getProjectByName("test");
        if (test1 != null) {
            log.debug("test1 = " + test1.toString());
        } else {
            throw new RuntimeException("無資料");
        }
    }
    
    private Project getProjectByName(String name) {
        return getProjects().stream().filter(p -> p.getName().equals(name)).findAny().orElse(null);
    }
}

Optional is a container object which is used to contain not-null objects. Optional object is used to represent null with absent value. This class has various utility methods to facilitate code to handle values as ‘available’ or ‘not available’ instead of checking null values. It is introduced in Java 8 and is similar to what Optional is in Guava.

For example, it will return Optional instead of Project in getProjectByNameWithOptional method. Owing to using Optional, if you find nothing it will throw java.util.NoSuchElementException: No value present
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
@Slf4j
public class OptionalTest {

    public static void main(String[] args) {
        OptionalTest test = new OptionalTest();

        Project test2 = test.getProjectByNameWithOptional("test").get();
        log.debug("test2 = " + test2.toString());
    }
    

    private Project getProjectByName(String name) {
        return getProjects().stream().filter(p -> p.getName().equals(name)).findAny().orElse(null);
    }

    private Optional<Project> getProjectByNameWithOptional(String name) {
        Optional<Project> project = Optional.ofNullable(getProjects().stream()
                .filter(p -> p.getName().equals(name)).findAny().orElse(null));
        return project;
    }
}    


If you would like use customized error message instead of java.util.NoSuchElementException: No value present, you can do this way:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Slf4j
public class OptionalTest {

    public static void main(String[] args) {
        OptionalTest test = new OptionalTest();

        Project test2 = test.getProjectByNameWithOptional("test").get();
        log.debug("test2 = " + test2.toString());
    }
    

    private Project getProjectByName(String name) {
        return getProjects().stream().filter(p -> p.getName().equals(name)).findAny().orElse(null);
    }

    private Optional<Project> getProjectByNameWithOptional(String name) {
        Optional<Project> project = Optional.ofNullable(getProjects().stream()
                .filter(p -> p.getName().equals(name)).findAny().orElse(null));
        project.orElseThrow(() -> new RuntimeException("查無資料"));
        return project;
    }
}

Reference
[1] https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

2016/11/09

[Chrome Extension] How to adjust the width of popup window ?

Problem
In chrome extension, we will create a html file which will be rendered inside the popup window that's created in response to a user's click on the browser action. 

I hope the image, search input text and search button are in the same row. 
But it display in difference row.


How do I adjust the width of the popup window?

The popup window html content looks like:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Hello Page</title>
        <script src="helloWorld.js"></script>
    </head>

    <body>
        <form id='myForm'>
            <img src="magnifier.png" height="20" width="20">
            <input type="text" id="queryString" style="width:100px">
            <button type="submit" id="doSearch">Search</button>
        </form>
    </body>
</html>



How-to
You can set the width of html tag. The updated popup window html content looks like:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html style="min-width:210px;">
    <head>
        <meta charset="UTF-8">
        <title>Hello Page</title>
        <script src="helloWorld.js"></script>
    </head>

    <body>
        <form id='myForm'>
            <img src="magnifier.png" height="20" width="20">
            <input type="text" id="queryString" style="width:100px">
            <button type="submit" id="doSearch">Search</button>
        </form>
    </body>
</html>

See it works!

Reference
[1] https://stackoverflow.com/questions/5020953/popup-html-change-width


2016/11/08

[Chrome Extension] Hello World Example

1. Create a manifest.json
In this manifest, I will declare a browser action, and the activeTab permission
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "manifest_version": 2,
  "name": "Hello World",
  "description": "My first Chrome extension",
  "version": "1.0",
  "permissions": [ "activeTab" ],
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "helloworld.html"
  }
}


2. Resources
Download a icon.png as an icon for this chrome extension


helloWorld.html will be rendered inside the popup window that's created in response to a user's click on the browser action.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Hello Page</title>
    </head>

    <body>
    Hello! It is my first Chrome extension!!!!
    </body>
</html>

3. Load the extension and test (remember to turn on developer mode)



If I would like to show a JavaScript alert message

1. Create a helloWorld.js
alert("Hello World! 測試測試");

2. Import helloWorld.js into helloWorld.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Hello Page</title>
        <script src="helloWorld.js"></script>
    </head>

    <body>
    Hello! It is my first Chrome extension!!!!
    </body>
</html>

3. Reload the hello world extension and test




Reference
[1] https://developer.chrome.com/extensions/getstarted

2016/11/07

[Microsoft Outlook] 如何在 outlook 中,找出未讀取的信件

Problem
如何在 outlook 中,找出未讀取的信件

How-To
Step 1. 點選收件夾
Step 2. 點選搜尋方格
Step 3. 點選未讀取


2016/11/06

[Spring Boot] How to Update Code and Take Effect Immediately

Problem
Assume I have a controller:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package albert.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String sayHello(){
        return "Hello! Spring Boot!";
    } 
}


After I start up spring boot application, then connect to http://localhost:8080/.
The page  will look like:


If I would to change some wording in the sayHello() method, and I hope it takes effect immediately.
How to fulfill this requirement?

Solution
Add spring-boot-devtools dependency in pom.xml
1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

Update application.yml, and set spring.devtools.restart.enabled=true
1
2
3
4
spring:
  devtools:
    restart:
      enabled: true

When you set this property, immediately it takes effect and you need not manually stop and start the spring boot application.


Reference
[1] http://javabeat.net/spring-boot-devtools/

2016/11/05

[Spring Boot] Quick Start

Step 1. Download Eclipse from https://eclipse.org/downloads/

Step 2. Installed Spring Tool Suite (STS) in Eclipse Marketplace, then restart Eclipse


Step 3. Create a Spring Starter Project



Step 4. Fill in project name, group, artifact, package, and so on. Then click Next button.



Step 5. Choose Boot Version and check Web. Then click Next button.



Step 6. Click Finish button.



Step 7. Created demo project.



Step 8. Create a test controller.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package com.example.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/")
    public String sayHello(){
        return "Hello! Spring Boot!";
    }
 
}


Step 9. Start up Spring Boot App






Step 10. Test




2016/11/04

[Windows] 用 Excel 打開 CSV,繁體中文都是亂碼

Problem
當我在 Windows 7 打開一份 CSV 檔案,在 Mac 平台可以正常顯示繁體中文,但是在Windows 平台卻是亂碼


Solution
Step 1. 打開 Excel
Step 2. 資料 => 從文字檔


Step 3. 選取要匯入的 CSV 檔案


Step 4. 透過預覽的方式,選擇編碼方式,如原本是 UTF-8,將其修改為 BIG5 就可以正常顯示了




Reference
[1] http://goo.gl/an21Zo

2016/11/03

[Eclipse] Source not found Problem

Problem
I am working in a Maven Project in Eclipse.
As I tried to check the Apache POI's source code, but it show Source not found error message as bellows:



Solution
Step1. Go to Preferences => Maven
Step2. Check "Download Artifact Sources" and click "OK"


Check result:



2016/11/02

[閱讀筆記] The Unwritten Laws of Business (1/2)


  1. 在任何組織中,阻礙成功的主要因素,往往是人和管理的問題
  2. 如果你不先在目前的工作上力求表現,你就不太可能有機會去嘗試更符合自己志趣的工作
  3. 工作的執行力包含:
    1. 積極進取:即著手開始做事的幹勁
    2. 機智或靈巧:有能力想辦法達成想要的結果
    3. 堅持到底:即使遭遇困難、挫折,仍不屈不撓的精神
  4. 每當工作遭遇阻礙時,都要立即設法跨越, 尋其他資源或權宜之計,讓工作持續運轉,不致於失去動能
  5. 要以書面形式確認你的指示和對方的工作承諾
  6. 有些事情若是單憑想像,可能會顯得太過抽象、難以捉摸,唯有透過第一手的直接觀察,才能得到充分、深入的了解
  7. 決策反覆會讓他人看輕你
  8. 一個安靜又膽小的人,一句話都不說,通常會被看成是沒有想法,所以無話可說
  9. 對專案內容侃侃而談的人,就會獲派去完成該項專案。如果你不想爭取那份工作,那就什麼都別說,而你一定會被略過,但是等到日後要指派更重大的職責時,你勢必也會被略過
  10. 如果你不知道答案,就說你不知道,但是同時也要說:「我會立刻找出答案。」如果你對自己的答案不是那麼有把握,就要表明你確定的程度。博得可靠和值得信賴的好名聲,是你最珍貴的資產之一
  11. 每一位主管都必須了解其職掌範圍內的所有狀況
  12. 無論你多麼努力想把工作做好,難免還是會出現出乎意料之外的問題或失誤。在此時,你應該在呈報問題的同時,一併提出解決辦法,以便在最短的時間內著手推行。沒有主管喜歡有人冷不妨地向他們丟出意料之外的問題,但是如果在提報問題時,也提出你對於解決方案的實用建議,你所面臨的困境將會大幅改善
  13. 你的上司就是你的老闆。你躲不開評估你績效的上司,必須能夠向上司展現出最起碼的個人忠誠度,同時感覺到我們是在協助上司完成重要的工作時,才會從工作中獲得更大的滿足感
  14. 你的主管絕對有充分的理由要求你立即完成工作,而且比起其他或許看似更急迫、但是卻較不引人注目的專案,主管指派的任務往往與你的績效考核更相關
  15. 忽略自己的工作,而去做他人的工作,並不會得到讚賞或感謝。但是,很常發生的情況是,如果你可以先把自己分內的事情處理得有條不紊,那麼你對於其他人的事務所展現的瞭解和積極的興趣,將會促使妳升遷到另一個承擔更大職責的職位
  16. 許多職員之所以獲得拔擢,主要是因為他們確實有能力協助處理其他人的事務,並同時做好自己的工作
  17. 面臨任何形式的對立時,你可以拋出這個問題:「你的建議是什麼?」這個問題會讓對方展開建設性的討論,並且避免爭端
  18. 向他人徵詢意見時,對於其他人的意見抱持高傲態度是沒必要且討人厭的。如果你無意聽取、採用或考慮他人提供的資訊或意見,那就根本不要徵詢他們的建議,因為你的同事不久就會認清這種假意謙遜的姿態
  19. 當你忽略他人的承諾或是任其打折扣,就等於是免除別人的責任,也會為自己惹來額外的責任
  20. 對另一個部門的服務有所不滿時,要向最直接負責相關工作的那個人,表達你的怨言。若跳過當事人,找上他的上司,會引起強烈的憤恨
  21. 與顧客和公司以外的人是往來時,切記你是代表公司,在別人眼中,你負有全部責任和職權
  22. 主管要通盤掌握全局,主要是指重大或顯著的進展,而不是要你對任務的每個細節窮追不捨。要是到了會妨礙事務的運作,就會變成一種惡行
  23. 事必躬親是很糟糕的事情,對你不好、對工作不好、對你的部屬也不好。即使你能夠獨立應付所有工作,還是必須授權。過度依賴一個人,並不是聰明的做法,對同事和部屬也不公平
  24. 無論是就個人或主管的層面而言,限制自己只從事能夠讓你發揮特殊才能、技巧或貢獻的工作,或是只做能夠讓你享有某些天生優勢的工作,會是個明智之舉。一般人普遍相信,人只要努力,什麼都做得成,這種看法頂多就是沒效率,糟的話還會招致徹底失敗。很少有人能夠多才多藝到事事都專精