2020年1月22日 星期三

2020年1月7日 星期二

英文歌詞翻譯 Sven Karlsson feat. Divty - Up Higher


No time to worry about the past
沒有時間去擔心過去
Await the future to come at last
等待的未來最終將到來
This time tomorrow, I will be gone
明天的這個時候我已離去
A faded memory forever worn
褪色的回憶只會永遠地破損下去

I wanna wake up without sorrow
我不想帶著悲傷起床
I wanna step out in the world that's brighter
我想踏進更明亮的世界
We are the people of tomorrow
我們是屬於明天的人們
We stand together raise our hands up higher
我們將手舉的更高
higher, higher
更高
We raise our hands up to the sky
我們將手向上舉直到天空
higher, higher
更高
We raise our hands up to the sky
我們將手向上舉直到天空

A celebration of what’s to come
A better future we'll see it done
我們將目睹一場關於美好未來的慶祝會被舉辦
For every teardrop, you've shed in vain
每滴你流過的眼淚已消逝於虛無
We will be stronger to fight the pain
你將變得更強大去對抗痛苦

I wanna wake up without sorrow
我不想帶著悲傷起床
I wanna step out in the world that's brighter
我想踏進更明亮的世界
We are the people of tomorrow
我們是屬於明天的人們
We stand together raise our hands up higher
我們將手舉的更高
higher, higher
更高
We raise our hands up to the sky
我們將手向上舉直到天空
higher, higher
更高
We raise our hands up to the sky
我們將手向上舉直到天空

Waiting for the future
等待著未來
Nothing in the past
沒有是在過去的
All we ever wanted
所有我們曾想要的
Coming here at last
最後將來到

2020年1月6日 星期一

讀書心得 - Clean Code - Chapter 5

Chapter 5 - 編排

報紙的啟發


    希望原始檔要跟報紙一樣,從上而下閱讀。上方會有頭條的敘述,讓你理解這段報導在談論些什麼,讓你可以決定如何閱讀。第一段通常會是整篇報導的概要,細節資訊會被隱藏。然後你在持續往下閱讀才會發現所有細節。

    然後報紙本身也不會太長,所以原始檔盡量維持最多 200 ~ 500 行。
    垂直空白區隔
    每一個空白行會對眼睛下一個提示,讓其注意空白行後的第一行。通常用在一個概念接續另新的概念。
    垂直密度
    相依的函式盡量緊靠。
    垂直順序
    跟報紙一樣,應該是高層模組到低層模組。
    水平的空白間隔
    水平空白去強調運算子,下面是用空白強調加減法,以及乘法有較高的優先權所以沒有空白。
     public class Quadratic {
          public static double root1(double a, double b, double c) {
               double determinant = determinant(a, b , c);
               return (-b + Math.sqrt(determinant)) / (2*a);
          }
  
          public static double root2(double a, double b, double c) {
               double determinant = determinant(a, b , c);
               return (-b - Math.sqrt(determinant)) / (2*a);
          }
  
          private static double determinant(double a, double b, double c) {
               return b*b - 4*a*c;
          }
     }

上一篇:
讀書心得 - Clean Code - Chapter 4

2019年12月4日 星期三

讀書心得 - Clean Code - Chapter 4

Chapter 4 - 註解

不要替糟糕的程式碼寫註解 - 重寫它


    註解為必要之惡,用來彌補我們用程式碼表達意圖失敗的狀況。註解在絕大多數的情況無法跟著程式演進,導致過時且偏離當初的程式碼解釋。最後的真相只會存於程式碼。

有益的註解

    法律型的註解
    // Copyright 2011-2019 The Bootstrap Authors
    // Copyright 2011-2019 Twitter, Inc.
    資訊型註解
    資訊型註解提供一些基本資訊,但還是很容易被好的程式碼命名給取代
     // Returns an instance of the Responder being tested.
     protected abstract Responder responderInstance();
    對意圖的解釋
     // This is our best attempt to get a race condition
     // by creating large number of threads.
    對後果的告誡
     // Don't run unless you
     // have some time to kill

     // SimpleDateFormat is not thread safe,
     // so we need to create each instance independently

上一篇:
讀書心得 - Clean Code - Chapter 3 (2)
下一篇:
讀書心得 - Clean Code - Chapter 5

2019年12月3日 星期二

讀書心得 - Clean Code - Chapter 3 (2)

Chapter 3 - 函式 - 2

使用具描述能力的名稱


    不要害怕名字過長,若取了有性質的函式名稱就較能符合「當每個你看到的函式,執行結果都與你想的差不多代表為 Clean Code」

函式的參數


    函式的參數越少越好,因為參數的存在也會影響著你對函式的預期,所以最理想的情況為 0 參數。
    一個參數
  1. 與這個參數有關的問題  - boolean fileExits("Myfile")
  2. 對這個參數做某種操作,然後回傳 - InputStream fileOpen("Myfile")
  3. 事件,利用參數去修改系統狀態 - passwordAttemptFailedNtimes(int attempts)
    第三種命名要特別小心,要明確的表示出此函式為事件。若參數為 flag 那你要知道此為很爛的作法,flag 就代表 True 要做一件事,False 要做一件事,違反了只做一件事的原則。
    兩 ~ 三個參數
    兩個參數影響函式的預期就更多,所以可以轉成一個參數就好好利用。
    物件型態的參數、參數串列
    利用物件型態或陣列去減少參數個數是不錯的方法
    Circle makeCircle(double x, double y, double radius);
    Circle makeCircle(point center, double radius);

指令和查詢的分離


    如果函式除了做某件事情後,還回傳了某個問題的答案,就等於做兩件事
    public boolean set(String attribute, String value);
    if(set("username", "unclebob"))...
    所以讀者看到此段 if 會容易產生誤解且疑惑,所以要將查詢與指令分開
    if(attributeExists("username")){
        setAttribute("username", "unclebob");
        ...
    }
    利用例外處理取代回傳錯誤碼
    錯誤處理本身就是一件事

Don't Repeat Yourself


   n 個重複的程式碼,代表修改要花 n 倍時間。

上一篇:
讀書心得 - Clean Code - Chapter 3 (1)
下一篇:
讀書心得 - Clean Code - Chapter 4

2019年12月2日 星期一

讀書心得 - Clean Code - Chapter 3 (1)

Chapter 3 - 函式 - 1

首要準則 - 簡短!!


    即使現今編輯器能讓你在一行塞入 150 個英文字母,現今螢幕能讓你顯示 100 行,你也不該塞好塞滿。越短越好,3 ~ 4 行,每個函式都透漏著本身的意圖且帶領著你至下個函式。
    區塊 ( Blocks ) 和縮排 ( Indenting )
    If、else、while 都應該只有 1 行,而那行通常會是個命名不錯的函式。

只做一件事


    只做一件事很難下定義,以下提出兩種
  1. 透過觀察函式中進而提煉出一個新的函式來
  2. 函式裡有明顯的段落 ( 宣告區、初始區、過濾區... )

只有一層抽象概念


    為了確保只做一件事,就必須確保函式裡都是同一層次的概念。
  • getHtml()      - 高層次
  • parsePath()    - 中層次
  • .append("\n")  - 低層次
    降階準則
    閱讀程式碼通常都是由上而下,所以層次也該從上到下

Switch 敘述


    switch 要簡短很困難且很容易跟上述規則牴觸,作者這裡是利用 Polymorphism ( 多型 ) 將 switch 壓到低的層次且不會被重複利用。

2019年11月26日 星期二

MySQL 筆數查詢、分頁查詢

N 筆資料查詢

    SELECT * FROM 成績單 LIMIT 3    // 取成績單前三筆資料
    SELECT * FROM 成績單 ORDER BY 分數 DESC LIMIT 3 // 取分數前三名的資料
    SELECT * FROM 成績單 ORDER BY 分數 DESC LIMIT 3, 7 // 取第四名到第十名的資料

分頁查詢

     隨著查詢筆數越來越多,網站可能就會需要用分頁來表示查詢結果。
     這裡會出現一個問題 Offset ( LIMIT 的第1個參數 ) 越大,查詢速度越慢。
    SELECT * FROM 成績單 LIMIT  100000, 1         // 大 Offset
     Google 的結果是 InnoDB 會有的情況,InnoDB 會掃 100001 筆資料,然會再把 100000 筆資料給捨棄,導致查詢速度越來越慢。所以解決方法為先只掃索引
    SELECT * FROM 成績單 WHERE id >= (SELECT id FROM 成績單 LIMIT 100000, 1) LIMIT 1

Popular Posts