Total Pageviews

2020/11/03

[閱讀筆記] The Bullet Journal Method: Track Your Past, Order Your Present, Plan Your Future (2/7)

  1. 我們必須降低所需做的決策,我們才可以把珍貴的資源 (i.e. 時間與體力) 專注於重要的事物上。

  2. 解決決策疲勞 (decision fatigue) 的方法:

  1. 如同你要整理衣櫥,在我們決定哪間要留、哪間要丟之前,需要每件衣服拿出來檢視。建立心理盤點清單(mental inventory) 的方法,也是採取類似的方式,將大量的、無用的責任丟棄,讓你專注於重要的事物上

  2. 你應該靜下心來思考,拿張紙,分成三個 columns 建立你的心理盤點清單(mental inventory),深呼吸後,寫下你正在做的 (working on)、應該做的 (should be working on) 與想做的事情 (want to be working on),盡可能保持簡單扼要:

  1. 完成心理盤點清單(mental inventory) 後,就能清楚了解你的時間與體力都投注於哪裡,這就是你的選擇地圖 (map of your choices),下一步就是找出哪些事物是值得去做的。我們常忙於我們現在正在做的事情,常常忘記為什麼要做,最終我們被各種不需要的責任壓到喘不過氣來,心理盤點清單(mental inventory)給我們機會退步一看清楚,並問為什麼

  2. 如何決定哪些項目是重要的呢?你只要問自己兩個簡單問題(若你不知道如何回答,問問自己若沒有完成,會發生什麼事情?),若沒有通過這兩個問題,就都是令你分心且不重要的事物:

Two simple questions

說明

❶ Is this vital?

(這件事至關重要嗎?)

想想你的學貸、你的工作等

❷ Does this matter?

(這件事非做不可嗎)

對於你或你摯愛的人來說,這件事情重要嗎


  1. 任務通常會分成兩種,你需要做的與你想做的任務:

任務

說明

❶ 需要做的事物 

(things you need to do)

例如,你的責任

❷ 想做的事物

(things you want to do)

例如,你的目標


  1. 當你首度啟用你的 Bullet Journal,你應該做的事情只有你相信最重要或對你的生活有加值的事。過有意識的生活不應該僅限於你的筆記本,必須融入在你的生活中。

  2. 智慧型手機的問世,讓我們更容易分心、更沒有時間停下來好好思考,每天沒有螢幕的時間 (non-screen time) 可能只有幾個小時左右。使用實體筆記本做為心靈的避風港,讓我們暫時離線,讓我們能心無旁騖且不受干擾地去思考、反省、執行重要的事物與專注。

  1. 在剪下貼上的世界 (cut-and-paste world),我們推崇速度,常常誤把便利當成效率。當我們採取捷徑,等同放棄慢下腳步思考的機會。當我們用手寫取代電腦或 APP,可以讓我們重新拿回慢下腳步思考的機會。當我們手寫筆記時,我們會自動開始過濾雜訊,去蕪存菁。真正的效率與速度無關,真正的效率是在真正重要的事物上花更多時間

  2. Bullet Journal 可以是你的代辦事項 (to-do list)、筆記 (journal)、規劃表 (planner)、素描本 (sketchbook),或是全部。Bullet Journal 的彈性源自於其模組化的結構,如同 Lego 積木般。Bullet Journal 系統的每一個部分都有其特定功能,例如用來安排你每日待辦識相的輕重緩急、規劃你的整個月的工作或規劃如何完成目標。你可以自由的客製化這個 Bullet Journal 系統來完成你的目標。

  1. BuJo System 的主要概念

Key Concepts

圖示

Index

幫你的 BuJo 的內容建立目錄與索引,指向特定主題 (Topics) 的頁碼,讓你們快速找到需要的資訊。

Future Log

用來儲存未來的任務與事件 (Future Tasks and Events),通常是不在本月發生的任務與事件。


Monthly Log

提供當月的時間與任務安排的總覽。也可以作為你的每個月的心理盤點清單 (monthly mental inventor)。

Daily Log

透過 Rapid Logging,做為每天將你的想法快速記下來的事物。

Rapid Logging

透過簡短的符號,用來快速地描繪、分類與標注重要性,將你的想法轉換為筆記 (Notes)、事件 (Events) 與任務 (Tasks)。

–  Note

 ⚪  Event

 ⚫ Task

  X Task Complete

  >   Task Migrated

  <   Task Scheduled

 ⚫  Task Irrelevant

Collections

這四個組成是 BuJo 的模組化積木 (building block),用來儲存相關的內容,包含 Index, Future Log, Monthly Log, Daily Log 等,你也可以自創任何你想要紀錄的事物。

Migration

每個月會做一次過濾,從你的筆記本剔除無意義的內容。


  1. Rapid Logging 的第一步是架構出你要記錄的內容,你必須要先設定一個主題名稱 (Topic name),例如 Shopping List。通常主題提供三個功能:① 確認與描述 content、② 做為協助你弄清你的目的的機會、③ 設定 content 的 agenda。你是否經歷過許多沒有 agenda 的會議,通常這類會議是非常沒有效率的。透過在開始前設定 agenda,可以協助你專注、了解事情輕重緩急,能夠夠有效率運用你的時間。記得為你的 Topic 設定頁碼,這樣你就可以從目錄索引快速找到此資訊。

  1. 通常,要過有意識的生活 (live intentionally),就是在你開始前,先停下來思考一下。

  2. 好的 Topic 會讓你的 BuJo 變成更有用的參考資料,例如 10/13 Meeting Notes 這樣的 Topic name,過了一週以後你就可能就忘記 10/13 那天發生什麼事情;若是將 Topic name 改成 10/13 (四) / Acme Co. (客戶名稱) / Website Relaunch (專案名稱) / User Feedback (開會優先考慮的事) 就可以給你有助益的描述。

  3. 如果 Rapid Logging 是 BuJo 的語言,Bullets 則是語法 (syntax)。當你建立完 Topic 與 page number 後,接下來就是要簡單扼要的寫出你的想法,並輔以不同的符號來做分類。使用 Bullets 不僅較節省時間,也同時逼迫你萃取出最重要的事物,將資訊轉換為簡單的一句話。

Examples

句子

句子太短

Return call ASAP!

句子太長

Call John back as soon as you can because he needs to know when you will have the sales figures for June ready for him.

簡單扼要

Call John re: June sales figures. (清楚說明 who, what)


  1. 讓你紀錄的事物保持精簡且不失原意是需要練習的,但是這種練習是值得的,這可以訓練你找出真正值得寫下來的事物。這種技能很重要,因為我們身處極度複雜的世界,有太多事情要記錄。

  2. 大多數人的筆記都比較缺乏情境 (context) 與重要程度 (priority),Rapid Logging 就是用來解決此問題,第一步就是將筆記做分類,並給予不同 symbol,如此可以讓你即時紀錄當下的想法,事後瀏覽也可快速回想當下情況:

分類

符號

說明

Tasks

你需要去做的事情

Events

你觀察到的事情或事實

Notes

你不想忘記的資訊


  1. Tasks 可以擁有五種不同的狀態

Tasks State

狀態說明

incompleted task

尚未完成的項目,是你需要採取行動的項目

X  completed task

已經完成的任務

> migrated task

這個月沒有完成並且先移到下個月或者是特定群組 (Collection) 的任務

< scheduled task

任務已經排定好日期,但是這個月沒有完成的任務,所以往前移動到未來誌去


Task Irrelevant

有時候有些任務最後發現一點都不重要,有可能是時空環境改變,或者是單純只是逾期,這些都是令你分心的事物,應該予以刪除。


  1. 建立主任務 (Master Task) 與子任務 (Subtasks):當一個任務需要多個步驟來完成,就要建立主任務與子任務,當子任務過多,變成是一個 Project 時,就要將其轉換成一個獨立的 Collection。例如規劃去荷蘭玩,就是一個 Master Task,其包含訂房、訂機票、租車、訂火車票、訂博物館門票等 Subtasks。


2020/11/02

[閱讀筆記] The Bullet Journal Method: Track Your Past, Order Your Present, Plan Your Future (1/7)

  1. How to bullet journal: https://youtu.be/fm15cmYU0IM

  2. Bullet journal 組成:

  1. 本書論述分成兩大部分:「系統」與「實作」,希望閱讀完本書,能夠讓你克服組織生活大小事所面臨的挑戰

  1. 本書的主要目的:① 協助你完成更多重要的事物;② 幫助你找出且專注於有意義的事物,刪除無意義的事物

  2. The BulletJournal method 的任務是讓我們變得更謹慎地使用我們最珍貴的資源 (i.e. 時間與精力)。要如何做到?答案就是將生產力 (productivity)、察覺當下的能力 (mindfulness) 與有意識的行為 (intentionality) 整合到一套有足夠彈性、可隨意調整,而且最重要的,高度實用的架構(framework)。

① 生產力

 (productivity)

  • 若要提升生產力,就必須去除讓人分心的事物。我們必須遠離科技,至少暫時離開一段時間,確保我們能維持一定的生產力。

  • 當你打開筆記本,便能讓你周遭的忙亂世界暫停。你的心思得以專注在自己的人生。生活不再是一團混亂,你可以更清楚地審視人生。

  • 比起筋疲力盡或吸食大麻,資訊超載會讓我們的專注力極度惡化。

  • 子彈筆記法幫你釐清超載的思緒,保持客觀距離,重新檢視想法。

  • 子彈筆記法幫助你拿回主導權。不再被動反應,而是主動應對。

② 察覺當下的能力 (mindfulness) 

  • 我們活在接近無窮多選擇的時代,這反而讓我們感到更容易分心與比以往更加疏離

  • 如果旅程是目的地,我們必須學習如何變成更好的旅者。為了變成更好的旅者,首先我們必須學會如何調整自己:現在我在哪裡?你想要到該目的地嗎?如果不想,為什麼你想去那邊?

  • mindfulness 是起床後看看當前周遭環境的過程。mindfulness 幫助你變得意識是到你在哪 (where)、你是誰 (who)、你要什麼 (what)

③ 有意識的行為 (intentionality)

  • 忙碌的生活容易讓我們的信念與言行分離。我們很難在每一天的忙碌中,養成新習慣。但是任何一位運動員都會告訴你,你得一再經歷肌肉撕裂與重新鍛鍊的過程。就像鍛練肌肉,我們也需要訓練、強化有意識的行動。

  • 透過 Bullet Journaling,你會自動形成規律地自省習慣,你會開始定義什麼是重要的 (what)、為什麼重要 (why)、找出如何追求這些事物的方法 (how)

  • 子彈筆記猶如一面反像稜鏡 (reverse prism),吸收傳統智慧,然後匯集成一道光束,幫助人們看清楚自己現在的位置,同時照亮未來的路。它將賦予你自主的力量,重新過有意識的生活,從旅客變身為領航員。


  1. 每當有人打電話、寄電子郵件、發訊息給你,都希望你能立即回覆。很多人只是被動回覆源源不絕的訊息,而不是主動設定優先順序,整天手忙腳亂地應付不斷累積的工作。我們不可能依據永無止境的外部需求設定我們的優先順序,因為我們終究會被這些需求淹沒,眼睜睜地看著各種機會流失:例如改進大學在校平均成績、獲得升遷、參加馬拉松、每兩星期讀一本書。子彈筆記法幫助你拿回主導權。不再被動反應,而是主動應對。

  2. 本書希望能幫你:① 將心中不明確的好奇心,轉化為有意義的目標;② 訂出可管理的 Sprint;③ 且有效率地採取行動。本書希望能將筆記本變成強大的工具,幫助你找出機會、剔除令你分心的事物,讓你可以把你的時間與精力專注於真正重要的事物上。

  1. 知道你在何處始於知道你是誰 (Knowing where you are begins with knowing who you are)。

  2. BuJo (Bullet Journal) 只需三樣配備:① 筆記本、② 筆與 ③ 紙張

  1. 透過 Bullet Journaling,讓你的察覺當下的能力結合生產力,協助你設計自己想過的生活 (...where mindfulness meetings productivity to help you design a life you want to live)。

  1. Richie Norton:有意識的生活是一門在別人幫我們做決定前,自己先做好決定的藝術 (intentional living is the art of making our own choices before other’s make us)

  2. intentionality (有意識的行為) 是指尋找有意義的方向,並採取行動的力量。若 intentionality 是根據自己的信念來採取行動,它的相反就是毫無自我意識的自動駕駛 (autopilot)。換句話說,你知道為什麼你在做這件事、正在做什麼 (do you know why you are doing what you are doing?),就是 intentionality。若我們不知道自己要什麼 (what we want),不知為何而做 (why we want),我們就無法真實面對自己。我們必須持續培養自己的自我意識能力 (self awareness),意即注意自己是否已經偏離正軌,並找出原因的能力。

  1. 過完美的生活、舒適的生活,或總是把事情做對,並不是有意識 / 有計劃的生活 (intentional life)。intentional life 是讓你的行為與想法保持一致,是你相信且自豪的生活

  2. 忙碌與生產力,並不是同件事 (Being busy is not the same thing as being productive)。

  3. 對於大部份的我們,忙碌是過勞的意思 (being busy is code for being functionally overwhelmed.)。

  4. 現代人就是選擇太多,變成都在瞎忙,導致生產力低下。因為選擇的時候,我們都需要專注,專注就需投入你有限的、珍貴的資源,也就是體力與時間。Barack Obama, Mark Zuckerberg, Steve Jobs 也曾表示,他們試圖讓衣著與飲食的選擇最小化,因為他們每日有更多、更重要的決策要做。

  1. 無論你想要多理性與擁有多高尚情操,你無法持續做一個又一個的決策,且不付出生物代價 (biological price)。這與一般的身體疲勞 (physical fatigue) 不同,你並沒有感受到疲勞,但是你的精神能量 (mental energy) 處於低點。

  2. 所謂的決策疲勞 (decision fatigue),是指你做越多的決策,你就會越難做出好決策。這就是為什麼你在晚餐的時候會想吃垃圾食物,當你擁有滿滿意志力 (willpower) 的時候就會想吃健康食物。

  3. 決策疲勞會導致我們迴避決策,尤其是面臨重大決策時,我們都會拖延到最後一次才決策。但是重大決策還是在那邊並不會消失,到最後你會面臨沒有足夠的時間讓你專注做決策。難怪我們常感到壓力、焦慮與筋疲力盡。

  4. 當我們出現決策疲勞時,就會做出更多分心的事物,例如吃吃喝喝、旅行、追劇 (binge-watching) 等,但是做出這些行為後,你會變得更焦慮、更有壓力。


2020/11/01

[Apache Freemarker] Custom date/time format example

Purpose
FreeMarker allows you to define your own number and date/time/datetime formats, and associate a name to them.

Here has an example to demonstrate how to convert date from 2020/07/16 to 109/07/16



How-To
1. Create custom number format class:
package com.cht.tool.filegenerator.ftl.custom;

import freemarker.core.Environment;
import freemarker.core.TemplateDateFormat;
import freemarker.core.TemplateDateFormatFactory;
import freemarker.core.TemplateFormatUtil;
import freemarker.core.TemplateValueFormatException;
import freemarker.core.UnparsableValueException;
import freemarker.template.TemplateDateModel;
import freemarker.template.TemplateModelException;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 將西元年轉為民國年
 * <p>
 * 使用方式 ${aDate?string.@mingguo}, 會將 2020/07/16 轉為 109/07/16
 */
public class MingGuoTemplateDateFormatFactory extends TemplateDateFormatFactory {

    public static final MingGuoTemplateDateFormatFactory INSTANCE = new MingGuoTemplateDateFormatFactory();

    private MingGuoTemplateDateFormatFactory() {
        // Defined to decrease visibility
    }

    @Override
    public TemplateDateFormat get(String s, int i, Locale locale,
                                  TimeZone timeZone, boolean b, Environment environment)
            throws TemplateValueFormatException {
        TemplateFormatUtil.checkHasNoParameters(s);
        return MingGuoTemplateDateFormat.INSTANCE;
    }

    private static class MingGuoTemplateDateFormat extends TemplateDateFormat {

        public static final MingGuoTemplateDateFormat INSTANCE = new MingGuoTemplateDateFormat();

        private MingGuoTemplateDateFormat() {
            // Defined to decrease visibility
        }

        @Override
        public String formatToPlainText(TemplateDateModel templateDateModel) throws TemplateModelException {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
            Date date = new Date(TemplateFormatUtil.getNonNullDate(templateDateModel).getTime());

            String dateStr = dateFormat.format(date);
            return (Integer.parseInt(dateStr.substring(0, 4)) - 1911) + dateStr.substring(4);
        }

        @Override
        public Object parse(String s, int i) throws TemplateValueFormatException {
            try {
                return new Date(Long.parseLong(s));
            } catch (NumberFormatException e) {
                throw new UnparsableValueException("Malformed long");
            }
        }

        @Override
        public boolean isLocaleBound() {
            return false;
        }

        @Override
        public boolean isTimeZoneBound() {
            return false;
        }

        @Override
        public String getDescription() {
            return "西元年轉民國年";
        }
    }

}

2. Register to freemarker configuration class:
    Configuration cfg = new Configuration(Configuration.getVersion());
    cfg.setClassForTemplateLoading(this.getClass(), "/");
    
    // register the "mingguo" format:
    Map<String, TemplateDateFormatFactory> customDateFormats = new HashMap<>();
    customDateFormats.put("mingguo", MingGuoTemplateDateFormatFactory.INSTANCE);

    cfg.setCustomDateFormats(customDateFormats);

3. Use this format in ftl template file:
<#-- 取得現在時間 -->
<#assign aDateTime = .now>
<#-- 只保留日期 -->
<#assign aDate = aDateTime?date>
<#-- create the macro variable: -->
<#macro printDate mingguodate>
列印日期:${mingguodate}

</#macro>
<#macro footer records amount>
${"-"?right_pad(25, "-")}
總筆數:${records}
總金額:${amount}
</#macro>
<#-- call the macro: -->
<@printDate mingguodate="${aDate?string.@mingguo}" />
<#assign total = 0>
${"水果名稱"?right_pad(10)}${"單價"?right_pad(10)}${"訂購數量"?right_pad(10)}
${"-"?right_pad(25, "-")}
<#list rows as row>
<#assign total += row.price * row.quantity>
${row.name?right_pad(10)}${row.price?string.@ntd?left_pad(10)}${row.quantity?left_pad(10)}
</#list>
<#-- call the macro: -->
<@footer records="${rows?size?left_pad(10)}" amount="${total?string.@ntd?left_pad(10)}" />


Reference