Total Pageviews

2016/03/02

[Python] Set Up Python Environment

Step 1. Download Python from https://www.python.org/downloads/windows/


Step 2. Install Python














Step 3. If you are Windows users, you need to configure Python installation path and Scripts path to path (environment variables)
i.e. C:\Python35-32\ and C:\Python35-32\Scripts


If you are Mac user, you can ignore this step.

Step 4. Open command prompt, and type in python3 -V to do verification. 



Write a first and simple Python program
1
2
3
4
# encoding: utf-8

print("Hello, Python")
print("哈囉,派森")




Then you can use IDLE to help you learn Python


IDLE knows all about Python syntax
Ex1. Use terminal


Ex2. Use IDLE


IDEL also offers "code completion" when you use build-in functions, ex. print()

2016/03/01

[閱讀筆記] 富爸爸,窮爸爸 (Part 2)


  1. 風險無所不在,要學會駕馭風險,而不是一昧低迴避風險
  2. 工人付出最高限度的努力工作以避免被解雇,而雇主提供最低額度的工資以防止工人辭職
  3. 麥當勞擁有一套出色的商務體系。許多才華洋溢的人之所以貧窮,是因為他們只專心做好漢堡,而對如何運作商務體系卻所知甚少。
  4. 成功所必要的管理素質包括:
    1. 對現金流的管理
    2. 對系統(包括你本人、時間及家庭)的管理
    3. 對人員的管理
  5. 人們即便是經過學習,掌握財務知,但是在通往財務自由的道路上人面臨許多困難,包含:恐懼心理、憤世嫉俗、懶惰、不良習慣、自負
  6. 在投資活動中,從沒遇過從未損失的富人,但常遇到從未損失過一毛的窮人
  7. 如果你討厭冒險,對金錢損失感到擔心,那就早點動手累積屬於妳的金錢
  8. 在財務上不能獲得成功的最大原因是大部份的人的作法太安全。人們因為太害怕失敗,所以才會失敗
  9. 人人都想上天堂,卻沒有人想死。可是不死怎麼上天堂。這就如同大部份人夢想發財,但卻害怕在投資過程損失金錢,所以她們永遠進不了天堂
  10. 洛克斐洛曾說:我總是試圖將每一次災難轉換成機會
  11. 90%的美國公民財務困難的主要原因在於他們是為了避免損失而理財,而不是為了營利而理財
  12. 失敗會激勵勝利者,也會撃垮失敗者。勝利意味著不害怕失敗,他們了解自己,也討厭失敗,但失敗會激勵他們做的更好
  13. 如果妳沒有什麼資金又有致富的願望,妳就必須集中精力,把妳僅有的雞蛋放在較少的籃子(當然你還要確信籃子的結實程度),不要把很少的雞蛋放在許多籃子裡
  14. 如果妳不願失敗,那就安全的投資;如果損失會讓你元氣大傷,那就安妥一點,去做一個平衡的投資。但以安全的方式進行投資,就要儘早起步,儘早開始累積妳的雞蛋,因為以這種方式需要大量的時間
  15. 未經證實的懷疑和恐懼會產生憤世嫉俗者。憤世嫉俗者抱怨現實,從來不會贏;成功者分析現實,想辦法贏
  16. 我們用錢的習慣決定我們是什麼類型的人,有的人之所以貧窮是因為他們有著不良的用錢習慣
  17. 聰明 + 傲慢 = 無知
  18. 如果你想駕駛飛機,你應該去聽有關飛行原理的課程,而不是直接坐進駕駛艙。妳買了一兩套房地產,不會讓你成為房地產專家。你應該花時間投資你最重要的資產 - 頭腦
  19. 累積財富的過程,最困難的事情莫過於堅持自己的選擇而不盲目從眾
  20. 是否缺乏自律,是將富人與窮人區分開來的首要因素。生活之所以推著你轉,不是因為驅使你的人很厲害,而是因為你個人缺乏自我控制和紀律
  21. 開創你自己的事業需具備三個重要的管理技能:現金流量管理、人事管理、個人時間管理
  22. 不要背負數額過大的債務包袱,要使自己的支出保持低水平。先增加自己的資產,然後再用自己的資產中產生的現金流購買大房子、大車子
  23. 當你資金短缺時,去承受外在壓力而不要動用你的儲蓄或投資,利用這種壓力去激發你的財務天賦,想辦法掙出更多的錢,然後再支付帳單
  24. 窮人有個不好的習慣,就是隨便動用儲蓄,富人知道儲蓄只能用於創造更多的錢,而不是用來支付帳單
  25. 人事管理是要能夠管理在某些技術領域比你聰明的人,而不是只會管理沒有自己聰明的人或能力沒有自己強的人
  26. 最容易的道路往往會越走越艱難,而艱難的道路往往會越走越輕鬆
  27. 如果你的財務智商很低,金錢就會比你更精明,他會從你身上溜走。如果你沒有金錢精明,你將為他工作一生。要成為金錢的主人,你要比金錢更精明,讓金錢為你工作,而不是成為它的奴隸,這就是財務智商
  28. 行動吧!行動者總會擊敗不行動者
  29. 思考是一種思想,你應該思考致富,而不是努力工作致富。讓金錢為你辛勤工作,你的生活將會變得更輕鬆、更幸福
  30. 上天賜與每個人兩樣禮物:思想與時間。隨著每一張鈔票流入你的手中,愚蠢地用掉它,你就選擇了貧困;把錢用在負債專案上,你就會進入中產階級;投資於你的頭腦,學習如何獲得資產,財富將成為你的目標和你的未來
  31. 為你的財務負起責任或一生只聽從別人的命令,你要嘛是金錢的主人,亦或是金錢的奴隸

2016/02/29

2016/02 Travel


嘉義梅山公園
DSC09076

嘉義蘭潭水庫
DSC09106

DSC09117

DSC09122

DSC09123

金瓜石
DSC09186

朱銘美術館
DSC09275

2016/02/27

How to import a git non-Java project into Eclipse

Assume I import a non-Java project from GitHub into Eclipse

1. Import non-Java project from GitHub: File => Import


2. Choose Git => Projects from Git => Next


3. Select Git Repository => Click Next


4. Choose "Import as general project" => Click Next


5. Click Finish


Import project successfully !



Owing to the project which import from GitHub is non-Java project, so I would like to change it to Java Project.

1. Right click on this project => properties


2. Click Project Facelets = > Covert to faceted form


3. Check Java => Apply => click OK


4. Done !



2016/02/24

[Oracle] How to grant privilege and create synonym in Oracle

If I would like to grant two views, dbm200va and dbm400va, to another database user. How do to it?


Syntax for tables/views is as bellows:
GRANT privilege-type ON [TABLE] { table-Name | view-Name } TO grantees



In addition to grant privileges by ap_dbm, ap_psr also need to create synonym on its side.
Create synonym syntax is as following:
CREATE [PUBLIC] SYNONYM [schema .] synonym FOR [schema .] object [@ dblink];



Reference
  1. grant privilege: http://docs.oracle.com/javadb/10.8.1.2/ref/rrefsqljgrant.html
  2. create synonym : http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7001.htm

2016/02/07

[Oracle] How to get the date of the last day of the month in Oracle

Problem
If I would like to get the date of the last day of the month, how to do it?

How to
Oracle had build-in function, LAST_DAY, to fulfill this requirement.

Here is the example:
SELECT to_char(sysdate, 'YYYYMMDD') today,
       to_char(LAST_DAY(sysdate), 'YYYYMMDD') last_day_of_month
FROM dual

Query result :


Reference
[1] https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions077.htm

2016/02/06

[Windows] svchost 狂吃 RAM

Problem
某天打開電腦 (OS: Windows 7),發現整台電腦跑得非常慢
打開工作管理員以後,發現我的 RAM 幾乎被 svchost 這個 process 吃光光所導致


How To
執行以下步驟可以解決此問題
1. 打開命令提示字元,執行以下指令,重新註冊 DDL:
REGSVR32 WUAPI.DLL
REGSVR32 WUAUENG.DLL
REGSVR32 ATL.DLL
REGSVR32 WUPS.DLL
REGSVR32 WUPS2.DLL

2. 在命令提示字元中,執行以下指令暫停Automatic Updates服務:
net stop WuAuServ

3. 進入 C:\windowns,rename  SoftwareDistribution 成其他名字

4. 在命令提示字元中,執行以下指令重新啟動Automatic Updates服務:
net start WuAuServ

5. restart computer

打開工作管理員觀察,可以發現 svchost 吃的記憶體下降非常多,整台電腦就不在像調整前卡卡遲鈍了


Reference
[1] http://sungshu.pixnet.net/blog/post/195361068-%5Bwin%5Dsvchost.exe%E7%8B%82%E5%90%83%E8%A8%98%E6%86%B6%E9%AB%94


2016/02/05

[Microsoft SQL Server] Adding Rows by Using INSERT and SELECT

Problem
Assume I have a function, as user click a button it will copy last year's data and insert data into this year. How to use SQL statement to fulfill this requirement?


How To
We can use insert with a select subquery to implement this requirement
By using a SELECT subquery to specify the data values for one or more rows, such as:
INSERT INTO dbm031fa(sta_date, age, fund_id, fund_name, age_type, remark, user_id, update_date)
SELECT DATEADD(YEAR, 1, sta_date) sta_date,
       age,
       fund_id,
       fund_name,
       age_type,
       remark,
       user_id,
       CURRENT_TIMESTAMP update_date
FROM dbm031fa
WHERE year(sta_date) = year(CURRENT_TIMESTAMP)-2

Reference
[1] https://technet.microsoft.com/en-us/library/ms188263(v=sql.105).aspx

2016/02/04

[Microsoft SQL Server] How to subtract a year in SQL

Problem
I have a select SQL statement as bellows:
SELECT sta_date
FROM dbm031fa
WHERE year(sta_date) = year(CURRENT_TIMESTAMP)-2
If I would like to get the value of sta_date is the value in database subtract one year, how to do it?


How To
Microsoft SQL Server had a build-in function, DATEADD, to fulfill this requirements.
The SQL statement can be modified as following:
SELECT sta_date,
       DATEADD(YEAR, -1, sta_date)
FROM dbm031fa
WHERE year(sta_date) = year(CURRENT_TIMESTAMP)-2


Reference
[1] https://msdn.microsoft.com/zh-tw/library/ms186819(v=sql.120).aspx

2016/02/03

[Apache Commons BeanUtils] How to exclude an Object from a Collection

Problem
Assume I have a dropdown list which name 基金法人類別. 
Our customer requested to remove the first option, i.e. 普通基金, from the dropdownlist


Original code snippet:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
    @RequestMapping(value = "/getAgeTypeList", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Dbm002fbVo> getAgeTypeList(
            @RequestBody(required = true) final Dbm038eFormBean formBean, Alerter alerter) {
        List<Dbm002fbVo> result = new ArrayList<Dbm002fbVo>();

        List<Dbm002fb> dbm002fbs = dbm038eService.findDropdownList("AGTPE");

        if (dbm002fbs != null && dbm002fbs.size() > 0) {
            for (Dbm002fb dbm002fb : dbm002fbs) {

                Dbm002fbVo vo = new Dbm002fbVo();
                convertToDbm002fbVo(dbm002fb, vo);

                result.add(vo);
            }
        } else {
            throw new RuntimeException("查無 基金法人類別 下拉單 (kind_code='AGTPE'");
        }

        return result;
    }


How to
We can use Apache commons BeanUtils to remove the specific object from a Collection.
Updated code snippet:
 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
    @RequestMapping(value = "/getAgeTypeList", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Dbm002fbVo> getAgeTypeList(
            @RequestBody(required = true) final Dbm038eFormBean formBean, Alerter alerter) {
        List<Dbm002fbVo> result = new ArrayList<Dbm002fbVo>();

        List<Dbm002fb> dbm002fbs = dbm038eService.findDropdownList("AGTPE");

        List<Dbm002fb> newDbm002fbs = excludeCodeNoIsZero(dbm002fbs);

        if (newDbm002fbs != null && newDbm002fbs.size() > 0) {
            for (Dbm002fb dbm002fb : newDbm002fbs) {

                Dbm002fbVo vo = new Dbm002fbVo();
                convertToDbm002fbVo(dbm002fb, vo);

                result.add(vo);
            }
        } else {
            throw new RuntimeException("查無 基金法人類別 下拉單 (kind_code='AGTPE'");
        }

        return result;
    }

    private List<Dbm002fb> excludeCodeNoIsZero(List<Dbm002fb> dbm002fbs) {
        /**
         * The BeanPropertyValueEqualsPredicate constructor takes two parameters which determine
         * what property will be evaluated on the target object and what its expected value should
         * be.
         */
        BeanPropertyValueEqualsPredicate codeNoPredicate = new BeanPropertyValueEqualsPredicate(
                "codeNo", BigInteger.ZERO);
        /**
         * Create a new Predicate that returns true if none of the specified predicates are true. If
         * the array of predicates is empty, then this predicate returns true.
         */
        Predicate predicate = PredicateUtils.nonePredicate(new Predicate[] { codeNoPredicate });

        /**
         * Selects all elements from input collection which match the given predicate into an output
         * collection.
         */
        @SuppressWarnings("unchecked")
        List<Dbm002fb> newDbm002fbs = (List<Dbm002fb>) CollectionUtils.select(dbm002fbs, predicate);

        return newDbm002fbs;
    }



2016/02/02

[閱讀筆記] 易讀程式之美 (Part 2)


  1. C++的創造者Bjarne Stroustrup說,在我的個人經驗裡,do / while 敘述經常是錯誤與誤解的來源,我寧願把條件式列在最前面,總而言之,我會盡量避免使用do / while 敘述
  2. 修改程式碼時要以全新的角度審視,退一步以整體的角度考慮程式碼
  3. 盡量消除loop中的巢狀結構,因為巢狀結構可讀性較差
  4. 程式碼的表示式越大,就越難理解。所以,要將巨大表示式分解為更容易消化的大小
  5. 寫法很酷的程式碼,經常會對後續使用程式的人造成困擾
  6. 對邏輯表示式使用De Morgan’s Law,有時能將boolean 表示式以更清晰的方式表達,比較簡單的記法是,把not分配到各項,再反轉and / or。如,if( !(a && !b)) 改寫成 if (!a || b),if ( !(file_exists && !is_protected)) 改寫成 if (( !file_exists || is_protected))
  7. 濫用變數會造成三個問題:變數越多越難同時記住所有變數;變數存活的範圍越大,就必須記得越久;變數越常改變,越難記得目前的數值
  8. 工程就是將大問題分解成小問題在將小問題的解答組合成原本大問題的解答在程式碼應用這個原則能讓程式更強固也更易於閱讀
  9. 抽離程式碼為獨立函數,這是程式設計師每天都在做的工作
  10. 函式庫提供的介面要夠簡潔,不要太多參數,也不要有太多的設定程序,用起來不要有額外的負擔。讓程式碼看起來更佳優雅,也更簡單與強而有力
  11. 程式碼應該組織為一次只做一件事
  12. 如果程式碼很難閱讀,試著列出執行的工作,某些工作可以輕易的抽離為函數或類別,其他部分可以成為函數內邏輯的段落。分離工作細節的形式並不重要,重要的是彼此分咧,真正困難的部份在於列出所有函數執行的小工作
  13. 愛因斯坦曾說:除非能解釋讓祖母了解,不然就不算真正了解
  14. 可讀性最高的程式碼就是完全沒有程式碼
  15. 程式設計師常會低估實作功能需要的功夫,會很理想的估計實作粗糙原形所需的時間,忽略後續維護、文件以及對程式碼增加的額外負擔
  16. 程式設計師一般會高估專案正正需要的核心功能,造成許多功能來不及完成,或祇是增加應用程式的複雜度
  17. 消除不必要的需求、簡化問題非常重要,重新思考需求,在仍然能達到目的的情況下,改為解決簡化過的問題
  18. 避免過度設計
  19. 當任何系統成長時,維持系統所需的複雜度會以更快的速度成長
  20. 盡量維持程式碼小而美
  21. 測試應該易於閱讀,以便其他人可以放心地修改或其加入其他測試。測試程式碼與非測試用程式碼一樣重要。
  22. 依據一般設計原則,應該「對使用者隱藏不重要的細節,凸顯重要的細節」
  23. 錯誤訊息應該盡量清楚地提供有幫助的資訊,有時候,「自行手工打造」印出所需的訊息,會是最好的方式
  24. 測試都時候,應該挑選能完整執行程式碼所需之最簡單的集合作為輸入值。優先使用簡單、明確但能達到測試效果的輸入值
  25. 一般來說,如果在設計程式的時候體認到,「嗯,之後這段會很難測試」,這就是個停止考慮這種設計的好理由
  26. 100行容易讀的程式,比起50行艱澀難懂的程式碼要來得好