Total Pageviews

2020/06/30

[Travel] 花蓮

瑞穗天合國際觀光酒店

瑞穗天合國際觀光酒店

瑞穗天合國際觀光酒店

☕️ 東昇茶行
☕️ 東昇茶行


☕️ 好茶咖啡工作室 🐈
☕️ 好茶咖啡工作室 🐈


🐄 吉蒸牧場 🐑
🐄 吉蒸牧場 🐑


🐄 吉蒸牧場 🐑

2020/06/10

[Java] [Apache Freemarker] How to get the first and the last item in ftl?

Problem
How to get the first and the last item in ftl?

How-To
A simple ftl example:

<#list rows as row>
<#if row?is_first>
表頭:${row.name}
<#elseif row?is_last>
表尾:${row.name}
<#else>
${row.name}
</#if>
</#list>


Test case:

package com.test.tool.filegenerator.ftl;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import lombok.Builder;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RunWith(SpringRunner.class)
@Slf4j
public class FreemarkerRowTest {

    private Configuration cfg;

    @Before
    public void init() {
        cfg = new Configuration(Configuration.VERSION_2_3_23);
        cfg.setClassForTemplateLoading(this.getClass(), "/");
    }

    @Test
    public void test() throws IOException, TemplateException {
        try (Writer file = new FileWriter(new File("C:/row_test.txt"));) {
            Template template = cfg.getTemplate("ftl/row_test.ftl");

            Map<String, Object> data = new HashMap<>();
            List<TestData> rows = createDummyData();
            rows.stream().forEach(r -> log.debug(r.getName()));

            data.put("rows", rows);

            template.process(data, file);
        } catch (IOException | TemplateException e) {
            throw e;
        }
    }

    private List<TestData> createDummyData() {
        List<TestData> data = new ArrayList<>();
        data.add(TestData.builder().name("apple").build());
        data.add(TestData.builder().name("avocado").build());
        data.add(TestData.builder().name("banana").build());
        data.add(TestData.builder().name("cherry").build());
        data.add(TestData.builder().name("coconut").build());
        data.add(TestData.builder().name("durian").build());

        return data;
    }

    @Builder
    @Getter
    public static class TestData {
        private String name;
    }

}


2020/06/09

[Eclipse] [Maven] missing artifact xxxxxx

Problem
I copy libraries (under .m2/repository) from other's machine.
As I tried to update maven in my eclipse project, I got missing artifact error.
I had confirmed these jar files which existed in my .m2/repository.

How-To
Go to specific directory and delete _remote.repositories, thenthe problem will be resolved.

2020/06/08

[Oracle] How to import dump file

Problem
As I tried to import dump file, I got the following error:

C:\Users\user01\Desktop                                                                       
λ impdp test_user/oracle@orcl directory=C:\Users\user01\Desktop dumpfile=data.dmp;
                                                                                                         
連線至: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production                   
ORA-39002: 無效的作業                                                                              
ORA-39070: 無法開啟日誌檔.                                                                           
ORA-39087: 目錄名稱 C:\USERS\USER01\DESKTOP 無效                                                    

How-To
We need to create directory firstly, then execute impdp command:
CREATE OR REPLACE DIRECTORY DATA_DUMP_DIR AS 'C:\data';

impdp test_user/oracle@orcl directory=DATA_DUMP_DIR dumpfile=data.dmp LOGFILE=dump.log;

2020/06/07

[Oracle] ORA-65096: 無效的通用使用者或角色名稱

Problem
As I tried to create a new user, I got the following error:

SQL> CREATE USER test_user IDENTIFIED BY oracle;    
CREATE USER test_user IDENTIFIED BY oracle          
            *                                       
 ERROR 在行 1:                                        
ORA-65096: 無效的通用使用者或角色名稱                            
                                                  


How-To

SQL> alter session set "_ORACLE_SCRIPT"=true;       
已更改階段作業.                                            
                                                    
                                                    
SQL> CREATE USER test_user IDENTIFIED BY oracle;    
已建立使用者.             



Reference
[1] https://stackoverflow.com/a/41490385/6314840

2020/06/06

[VMWare] VMware Workstation and Device/Credential Guard are not compatible

Problem
When I try to startup Virtual machine it showed this error:
VMware Workstation and Device/Credential Guard are not compatible

How-To
1. Open Windows Powershell (window + x) with administrator role
2. Execute the following command and restart computer:


bcdedit /set hypervisorlaunchtype off


Reference
[1] https://kb.vmware.com/s/article/2146361
[2] https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/554123/

2020/06/05

[Mac] 如何格式化隨身碟

打開應用程式裡的「磁碟工具程式」


選擇隨身碟並點選清除


選擇格式化格式並按下清除 (選擇 exFAT 是因為隨身碟容量大於 32GB)


完工






2020/06/04

[Java] [JUnit] How to expect no exception is thrown?

Before

1
2
3
4
    @Test
    public void testWritePropertyFile() {
        fileGeneratorService.writePropertyFile();
    }


After

1
2
3
4
5
    @Test
    public void testWritePropertyFile() {
        Assertions.assertThatCode(() -> fileGeneratorService.writePropertyFile())
                  .doesNotThrowAnyException();
    }




2020/06/03

[閱讀筆記] Manage Your Day-to-Day (3/3)

  1. 注意 responsibility 這個字,它是 respone-ability,代表是選擇你的反應的能力 (the ability to choose your response)。
  2. 現代人似乎難分辨緊急 (urgent) 與重要 (important) 的區別。我們很容易被迫去做許多緊急、臨時交辦的事情,但是,緊急的事情不代表是重要的事情。當我們總是選擇緊急的事情優先去做,代表你覺得別人的事情比你手上做的事情重要。當一封 e-mail 進來,你就像落葉般,被動地被風吹來吹去。你將失去專注在有意義的事情上,例如思考、反省與想像等有意義的事情。
  1. 犯錯是生活中的一部分,也是我們獲得新的想法的道路。在開車或造訪新的城市的時候迷路,可以把迷路當成探險,但是我們現在都仰賴 GPS,盡可能地避免犯錯。
  2. 【重點提示】如何善用科技工具
❶ 眼光要放遠
  • 將你複雜的、長遠的計劃,貼在座位上。當你要為你手上的工作做輕重緩急計畫時,提醒你要把長遠的計劃放在第一位。
❷ 留意你有限的頻寬
  • 掠過一些無關緊要的 e-mail 與社群軟體的對話。
  • 先把重要的事情做完,再去處理無關緊要的事情。
❸ 留意自己或傷害自己
  • 分清楚被迫 (compulsive) 與有意識的 (conscious) 行為間的差異。
  • 你的行為是否出自於無聊或盲目的習慣?
❹ 適時按下 reset 按鈕
  • 定期休息,將任何事物關閉。如此一來,等同會你的腦袋按下 reset 按鈕,讓你休息過後能有全新的開始。
❺ 別忘了深呼吸
  • 定期深呼吸可以降低你的壓力,也可以協助你做更好的決策。
❻ 相信自己
  • 不要過度依賴科技,相信你的本能與想像力。
  • 讓自己忙碌很容易,做最好、對自己最重要的工作很難 (Doing busywork is easy; doing your best work is hard)


  1. 天才是 1% 的靈感 (inspiration) 與 99% 的揮汗努力 (perspiration)。
  2. 根據 2012 年,Adobe 所贊助的調查報告顯示,接近 75% 的美國、英國、德國、法國與日本的工作者,覺得自己沒有發揮自身的創造潛力。因為日常的專案工作 (day-to-day project work),對於風險忍受度很低,所提供的資源也越來越稀少,這會讓你深感挫折。儘管有許多緊急的任務需要你去關注,為了打破這個惡性循環,你可以試著在上班時間保留一段時間,執行你想完成的專案,讓每週都有所進展,讓你維持創意的能量。
  1. 在 on-demand work 中,你很難學到新的做事方法或發展新的技巧,因為你已被交待,可預期的交付成果。
  2. 善用多餘的創作時間 (unnecessary creation)
❶ 多餘的創作時間,讓你能夠依據自己的好奇心,自由地探索新的可能性
  • 將你想要追逐的問題、擁有的想法或想嘗試的實驗,記錄下來。並在你是先定義好的不需要的創造時間 (pre-defined unnecessary creation time) 來嘗試這些想法。
  • 根據 Steven Johnson 在 《Where Good Ideas Come from》書中所說明的,好的想法是一個網絡 (network),是一群想法同步彼此觸發後,產生的好想法。當你越頻繁、無限制地,做鄰近可能 (adjacent possible) 的探索,你就越可能在你的生活與工作做出創意性的突破。
❷ 多餘的創作時間,讓你冒點風險發展新的技能,讓你之後可以運用於你的日常工作上
  • 有創意的行為,本質上就是有風險的,因為你必須邁向不確定性。當你規劃一段時間來做 unnecessary creation,你就是在為自己創造一個安全的實驗空間,用心的方法來嘗試,即便失敗了也不會有嚴重的影響
  • unnecessary creation 並不是為了符合他人的期望而做,而是在試驗你自己的想法。當成功了,就會提升自己的信心,所發展出來的新技巧,也可以放進你的工具箱 (toolbox),應用到你的日常工作上
❸ 多餘的創作時間,提供你聆聽自身聲音的空間
  • unnecessary creation 給予你探索自身獨特能力的空間,給予你經歷試誤 (trial-and-error) 的熱情。發起一個不受他人指示、期望的專案,逼迫你保持自我意識 (stay self-aware),聆聽內心的聲音與順從自己的直覺。這些都是探索內心聲音的重要技能。


  1. 或許有人會說,我很忙,沒有這種多餘的創作時間,做每件事情都會有機會成本 (opportunity costs),把時間放在多餘的創作時間是沒有效率的行為。但是你想想,若你都是按照別人的指示與期待做事,無暇去探索你更深層的能力與創作技能,這樣值得嗎?
  2. 不要抱怨限制,有時候,擁抱你的限制卻是最好的前進動力。許多導演、設計師與建築師常說,他們最佳的作品常常來自於特定客戶的限制 (restrictions)。將這些限制參數放在腦裡,經過 problem-solving mode 的處理,常有出乎意料之外的結果。限制條件 (a set of limitations) 常常是你創意的催化劑 (catalyst)
  3. 被棘手問題卡住時,如果你學會放鬆並等待答案,你的大腦會回答大多數問題。
  4. 在早晨的時候先做困難的事情。若你選擇簡單的事情先做,代表你是開始先做檢查與回覆 e-mail 之類的事情,這很難讓你接續去做較困難的事情。
  5. 任何事情皆專注完美的藝術家,將無法完成任何事 (The artist who aims at perfection in everything achieves it in nothing)。
  6. 不要過度追求完美主義,因為你無法做出完美無缺的事情。完美主義的性格是指,努力追求毫無瑕疵、設定過高的績效標準、伴隨著過度嚴厲的自我評估以及過度在意他人的評估。
  1. 假設一開始就陷入泥沼 (stuck at the start),兩種思維的處理方式:
完美主義者的方式 (Perfecionist)
實用主義者的方式 (Pragmatist)
  • 必須擁有完整的一段不受打擾的時間、排除任何打擾,才擁有動力開始啟動專案;希望有完整的計畫來優化整體流程
  • 此種心態常常會導致最後一事無成,最後對此種拖延的做事方式感到罪惡感。
  • 到頭來會因為時間壓力,別無選擇被迫開始執行,導致步伐慌亂、熬夜趕工、忽略許多重要事情,導致結果與內心期待落差很大,身心感到挫折
  • 承認不受干擾的時間難尋,定期空出一段時間,一點一滴開始做
  • 當執行一段時間後,會發現先前規劃有點凌亂,需要回頭來在做修正。
  • 或許執行後,會發現會比預期更為複雜、花更多時間,但是,因為及早開始,故還有時間去改進作法、調整計畫,仍舊有機會達成目標與產生好的結果。


  1. 若在執行過程迷失方向 (lost in the middle),兩種思維的處理方式:
完美主義者的方式 (Perfecionist)
實用主義者的方式 (Pragmatist)
  • 逐一審視每個細節,不管其重要性,花很多時間挑出不完美的地方,並將其修正。
  • 最後會發現,不完美的地方很多,導致你難以專注、聚焦於重要的地方。
  • 花太多時間在細節,看不清整體全貌,分不清哪些地方重要
  • 先定義要交付的內容,開始釐清過程需要哪些步驟 (intermediate steps) 才能交付
  • 確認擁有多少時間、交付期限在何時。根據重要性,分配時間到每一個步驟的執行時間。
  • 在執行過程中,努力朝向設定的目標前進,在有限的時間產生 good enough work 而非 perfect work。若完成後,還有額外的時間,也允許自己回頭修正。如此一來才能夠確保自己不要過度投資時間在較不重要的事物上。


  1. 遇到完成與否的兩難時,兩種思維的處理方式:
完美主義者的方式 (Perfecionist)
實用主義者的方式 (Pragmatist)
  • 如果我可以想到可以改進、精進的地方,就不該結束。
  • 若交付的成果,沒有成功達成當初預想的理想水準,說已經完成是一件不精確的事情。
  • 所謂的完成,是指在所給予的時間與資源的條件下,盡全力達成最低的需求水準 (mimimum requirements)。
  • 說某件事情完成,不代表未來沒有改進或精進的意思。代表我可以交付,並進行下一個工作。


  1. 害怕回饋 (dread of feedback),兩種思維的處理方式:
完美主義者的方式 (Perfecionist)
實用主義者的方式 (Pragmatist)
  • 若別人指正錯誤、提出不同的意見、提及自己未考慮到的事情或他人提出更有深度的意見時,就覺得很困窘,如同完全失敗一樣。憂心自己的專業能力遭受質疑,覺得自己不適任,像個冒牌貨。
  • 感謝別人給予回饋,將其視為驗證與精進自己的好方法。
  • 對於他人的意見,我可能同意或反對,我可以選擇如何回應。
  • 如果我沒有打開心胸,接納他人的分析意見,我可能會錯過他人寶貴的意見。
  • 透過他人的意見,可以改善你的缺點、擴展你的視野。


  1. 在執行任務的每個階段,實用主義者要採取的心態
  1. John Cleese: 創造力不是一種天賦,是一種運作方式 (Creativity is not a talent. It is a way of operating)。
  2. 當遇到 creative block,不要先懷疑自己,你要先釐清自己為何被 block,了解問題本質後,問題就迎刃而解。
  1. 如何強化自身的 creative mind
❶ 練習不必要的創作
  • 利用個人的創作專案 (side project),在較無壓力的環境下,探索新的想法、技能或工作方式
❷ 被問題卡住時,休息片刻
  • 當你卡住的時候,讓你的想法與身體有點時間,休息片刻。暫時與問題抽離,或許就會有新的想法。
❸ 在開始的時候,就做好「完成」的定義
  • 在專案開始時,就先做好完成 (finished) 的定義,當你完成後,就停止,不要受到完美主義的影響。
❹ 自動導航 (autopilot) 是創意的敵人
  • 重複是創意的敵人。有時候,試試非正規的 (unorthodox)方法來解決你的問題,看看會發生什麼事情
❺ 尋找問題的根源
  • 當感到創意泉源枯竭時,不要怪罪自己才能不足。creative blocks 常常騎在問題上,端視你是否能找出問題。
❻ 擁抱限制
  • 將限制 (constraints) 視為好處,而非阻礙。
  • 限制可以促發你的創意思考。

  1. Chuck Close:只有靈感只是業餘者,剩下的就是捲起袖子、開始工作 (inspiration is for amateurs, the rest of us just show up and get to work)。