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

2019年11月15日 星期五

英文歌詞翻譯 Gryffin, Elley Duhé - Tie Me Down




Don't lie, I know you've been thinking it
別說謊了,我知道你一直很渴望
And two times, you let it slip from your lips
兩次了,你那不想讓人聽見的低語
You've got too much pride to make any promises
你有太多不必要的驕傲以致做不出任何承諾
Thinking that we got time, and you want to keep it in
覺得我們還有時間,想著先保留

I want you out in the pouring rain
想要你在傾盆大雨中
I want you down on your knees
想要跪下雙膝
Prayin' to God that I feel the same
祈禱著我跟你一樣愛著彼此
I'm right here, baby, so please
我就在這寶貝,所以請

Hold me up, tie me down
抱起我,綁住我
'Cause I never wanna leave your side
因為我永遠不想離開你
Swear to never let you down
發誓永遠不會讓你失望
And it's been eatin' me alive
這份想法正把我身吞活剝
You can take me home
你可以把我帶回家
You can never let me go
你也可以讓我永遠不離開
Hold me up, hold me up
所以抱起我,抱起我
And tie me, tie me down, down (down)
And tie me, tie me down, down
And tie me, tie me down, down (down)
And tie me, tie me down, down
綁住我

Nine lives until you fall at my feet
不顧一切直到你倒在我腳下
Don't hide, you're wasting your energy
別躲了,你是在浪費力氣
You're not shy, so baby, it's useless
你又不害羞,所以寶貝別躲了
So don't try, 'cause you'll end up losin' it
別再嘗試了,最後也只會敗在我手下

Hold me up, tie me down
抱起我,綁住我
'Cause I never wanna leave your side
因為我永遠不想離開你
Swear to never let you down
發誓永遠不會讓你失望
And it's been eatin' me alive
這份想法正把我身吞活剝
You can take me home
你可以把我帶回家
You can never let me go
你也可以讓我永遠不離開
Hold me up, hold me up
所以抱起我,抱起我
And tie me, tie me down, down (down)
And tie me, tie me down, down
And tie me, tie me down, down (down)
And tie me, tie me down, down
綁住我

So wrap your arms around my chest
用你的手抱住我吧
And I'll put my hands around your neck
我也會用我的抱住你的
'Cause nobody wins these waiting games
這場等待的遊戲是不會有贏家的
You push and you pull, but you should stay
你一下推一下拉的,但你真正該做的是留下
Stay
留下

Nine lives - Myth to typically describe cats or humans that survive shit that should have otherwise killed them. Narrowly escaping death time after time.
經過九死一生後

2019年11月14日 星期四

Python UnitTest

Unit Test


     單元測試有一個通用模式 AAA原則,理解了就可以開始實作
  • Arrange   : 初始化物件、要用到的參數
  • Act   : 呼叫要測試的方法
  • Assert   : 驗證測試結果

Python Unit Test


     unittest — Unit testing framework,下面是官方給的範例
import unittest

class TestStringMunittestethods(unittest.TestCase):

     def test_upper(self):
          self.assertEqual('foo'.upper(), 'FOO')

     def test_isupper(self):
          self.assertTrue('FOO'.isupper())
          self.assertFalse('Foo'.isupper())

     def test_split(self):
          s = 'hello world'
          self.assertEqual(s.split(), ['hello', 'world'])
          # check that s.split fails when the separator is not a string
          with self.assertRaises(TypeError):
               s.split(2)

if __name__ == '__main__':
     unittest.main()
     unittest.main() 會執行所有 test_ 開頭的 function,主要判斷的 function 是 assert
  • assertEqual - 確認是否符合期望的值
  • assertTrue、assertFalse -  確認是否符合期望的判斷
  • assertRaise - 確認是否有特定 exception raise
     接著就是執行以上這 python 檔
D:\temp\JunYe\MyPython\Python3\LeetCode\UnitTest>python3 UnitTest.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

D:\temp\JunYe\MyPython\Python3\LeetCode\UnitTest>
     然後就是我自己的實作,拿 LeetCode - 0736 當範例
import unittest
import Solution

class TestMethods(unittest.TestCase):

     def test_case1(self):
          # Arrange 
          testclass = Solution.Solution()
          spec = '(add 1 2)'

          # Act & Assert
          self.assertEqual(testclass.evaluate(spec), 3)

     def test_case2(self):
          # Arrange 
          testclass = Solution.Solution()
          spec = '(mult 3 (add 2 3))'

          # Act & Assert
          self.assertEqual(testclass.evaluate(spec), 15)
     
     def test_case3(self):
          # Arrange 
          testclass = Solution.Solution()
          spec = '(let x 2 (mult x 5))'

          # Act & Assert
          self.assertEqual(testclass.evaluate(spec), 10)

if __name__ == '__main__':
     unittest.main()



參考資料 : 

  1. https://docs.python.org/3/library/unittest.html
  2. http://www.codedata.com.tw/python/python-tutorial-the-6th-class-1-unittest

2019年11月13日 星期三

Python List.pop(0)

Python list.pop(0)


     python 的 list 為 dynamic array,python.pop() default 值為 -1
  • python.pop()     # 時間複雜度 : O()
  • python.pop(0)   # 時間複雜度 : O(n)

Python deque.popleft()


     deque = double - ended - queue,deque.popleft() 的時間複雜度為 O(1)

     所以當變數為 list 且頻繁地操作 pop(0),不妨考慮
     tokens = collections.deque(mylist)
     x = tokens.popleft()


參考資料 : https://stackoverflow.com/questions/32543608/deque-popleft-and-list-pop0-is-there-performance-difference

2019年11月11日 星期一

讀書心得 - Clean Code - Chapter 2

Chapter 2 - 有意義的命名

使之名符其實

     選一個好的名稱很花時間,但省下的時間更多。
    // 沒命名
    public List<int[]> getThem(){
        List<int[]> list1 = new ArrayList<int[]>();
        for (int[] x : theList)
            if (x[0] == 4)
                list1.add(x);
        return list1;
    }
    // 有命名
    public List<int[]> getFlaggedCells(){
        List<int[]> flaggedCells = new ArrayList<int[]>();
        for (int[] cell : gameBoard)
            if (cell[STATUS_VALUE] == FLAGGED)
                flaggedCells.add(cell);
        return flaggedCells;
    }
     有命名的參數也比較好找,STATUS_VALUE 和 FLAGGED。

類別的命名

     使用名詞或名詞片語
  • Account
  • AddressParser
  • Customer
  • WikiPage
     避免以下之命名
  • Manager
  • Data
  • Info

方法的命名

     使用動詞或動詞片語
  • deletePage()
  • save()
  • 取出器 - getXX()
  • 修改器 - setXX()
  • 判定器 - isXX()

2019年11月6日 星期三

讀書心得 - Clean Code - Chapter 1

Chapter 1 - 無暇程式碼

讓開發速度變快唯一方法


     寫爛程式碼去趕截止日期並不會加快開發,只會越來越慢。唯一方法就是隨時隨地使程式碼保持潔淨。想說寫爛程式碼先應急後來再回頭改的,勒布朗克法則 ( LeBlanc's law ) : 待會兒等於永不。( 深感認同... )

大師們的 Clean Code

  • 優雅又有效率,邏輯直接了當,程式相依性低                         -     Bjarne Stroustrup
  • 像一篇優美的散文,不會掩蓋設計者的意圖                             -     Grady Booch
  • 包含單元測試與驗收程式,使用有意義的名稱                         -     Dave Thomas
  • 一定是由某位重視且照料的人所撰寫                                         -     Micheal Feathers
  • 當程式碼讓程式語言看起來就像是為了解決問題而存在的     -     Ward Cunningham

我們是作者


     「 有作者,就有讀者 」,要與讀者有良好的溝通是作者的責任。

童子軍規則


     離開營地前,讓營地比使用前更乾淨。

下一篇:
讀書心得 - Clean Code - Chapter 2

2019年11月5日 星期二

Windows Command Line

CMD : Command Line

列出檔案

     dir                            // 列出當前資料夾下的檔案
     dir /s                         // 列出當前資料夾下 + 子資料夾的檔案
     dir /?                         // 列出所有 dir 的指令參數

輸出成檔案

     dir /? > 123.txt               // 輸出成 123.txt

檔案名稱有空格

     net share "共用 資料夾名稱"     // 用雙引號,不能用單引號

參考資料 : 1. https://www.csie.ntu.edu.tw/~r91112/myDownload/WEB/CMD.html
                   2. https://www.itread01.com/content/1543219938.html

2019年10月31日 星期四

CSS Selector Priority

CSS

在套用的時候,是有優先順序的。

沒研究前我以為是程式碼先後或最靠近的element
<table id='table'>
 <tr>
  <td><table class='subtable'>...</table></td>
  <td><table class='subtable'>...</table></td>
  <td><table class='subtable'>...</table></td>
 </tr>
</table>
我在將上面的 HTML 套用 CSS
#table {
 XXX
}
.subtable {
 YYY
}
所有的 table 都照著 XXX 顯示,所以在設計時,要盡量避免 id selector 的使用當你的 element 還包含很多 elements 的時候。以下為 CSS Selector 的 Priority

參考資料 : http://qnimate.com/dive-into-css-specificity/Colum

讀書心得 - 大腦衝浪 - 第二十八講

第二十八講

接受自己的優勢性格


欣賞美麗比較像我的嚮往,暗戀的對象也有欣賞美麗能力,被欣賞是很幸福的。欣賞美麗者的世界似乎比原本世界擁有的色彩還要豐富。欣賞美麗者擁有像小孩一樣的清澈眼神,Precious ,這或許也是讓我喜歡上的理由,想要被欣賞想要人生色彩豐富。

寬恕比較像我會設身處地去思考,只要對方有羞恥心,通常會比責罵來得好。比較像我擁有的技巧,但我的耐心不足,接觸久的反而不怎麼原諒。

判斷力,其實我一直知道做什麼是好的。只要跟著我的判斷走通常結局都是好的。缺的是執行力與意志力。所以我應該多做些尤里西斯的約定。耍廢就找朋友汲取動力,顆顆。

Sounds like plan.

2019年10月30日 星期三

讀書心得 - 大腦衝浪 - 第二十七講

第二十七講

發覺自己的優勢

做了書中的心理測驗,自以為的性格還在前段,但第一項跟第二項優勢特質還真的沒想到,因為壓根不覺得是優勢。

第一個優勢 - 欣賞美麗與卓越

看不出來有啥優勢,連利用都不行。只能讓自己開心,取樂自己我真的一把罩。

第二個優勢 - 寬恕與慈悲

這更慘,我覺得我最常寬恕的是自己,導致現在這種廢材樣。



常認為自己需要壓力逼迫自己努力上進,看這兩優勢我看是沒緣了。大概就是現實肥宅,精神高富帥。一輩子不會自殺,不會難過,努力過及格邊緣的平凡人生。真的不適合做奔三的我的夢。

我認為這兩優勢是在利用一點資源達到大大的滿足,但還是消耗資源。獲得資源還是我最煩惱的。

2019年10月29日 星期二

英文歌詞翻譯 Sasha Sloan - Dancing With Your Ghost


Yelling at the sky
向著天空大吼
Screaming at the world
向著世界咆嘯
Baby, why'd you go away?
寶貝為何你要離開
I'm still your girl
仍然是你的女孩
Holding on too tight
仍然努力堅持著
Head up in the clouds
仰望著天空
Heaven only knows
卻只有天堂知道
Where you are now
你的所在
How do I love
我要如何去愛
How do I love again?
如何再去愛
How do I trust
我要如何去相信
How do I trust again?
如何再去相信愛情

I stay up all night
整夜未眠
Tell myself I'm alright
說服自己沒事
Baby, you're just harder to see than most
寶貝我再也見不到你了
I put the record on
我播放著唱片
Wait 'til I hear our song
直到我聽到屬於我們的歌
Every night I'm dancing with your ghost
每個晚上我都在與你鬼魂共舞
Every night I'm dancing with your ghost
每個晚上我都在與你鬼魂共舞

Never got the chance
從沒有機會
To say a last goodbye
做最後的告別
I gotta move on
我該試著放下了
But it hurts to try
但只有沉痛

Baby, you're just harder to see than most
邏輯上沒有比最多還要更多,所以翻成不可能。

2019年10月23日 星期三

Python 檢查 dict 的索引值是否存在

Check if a given key exists in a dict


要檢查 dictionary 是否存在索引值
直接查會直接 KeyError
>>> d = {}
>>> d['a']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'a'
這時就要靠 collections.defaultdict(default_factory)
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['a']
0
再回到檢查 dictionary 是否存在索引值的地方
from collections import defaultdict

s = 'mississippi'
my_dict = defaultdict(int) 
for key in s:
     if key in my_dict:
          my_dict[key] += 1
     else:
          my_dict[key] = 1

print(my_dict)
結果
defaultdict(, {'m': 1, 'i': 4, 's': 4, 'p': 2})

參考資料 :
https://docs.python.org/3/library/collections.html#defaultdict-examples
https://stackoverflow.com/questions/473099/check-if-a-given-key-already-exists-in-a-dictionary-and-increment-it

讀書心得 - 大腦衝浪 - 第二十三講

第二十三講

障礙預報

我想睡眠是最大的障礙預報,曾設過鬧鐘規定時間去睡覺但一點效都沒,我的潛意識裡認為晚上10點還早,但其實過了 10 才在做一天收尾已經算晚了,所以設定晚上 9:30。

但懶惰的狀況總是發生,我想要折衷,出發是必須即使只有 1 %的 CP 值,因為 1 > 0,1 還可以累加。

2019年10月22日 星期二

英文歌詞翻譯 James Smith - Tell Me That You Love Me




 No more lazy mornings with you lyin' next to me
再也沒有那些你躺在我身旁的慵懶早晨
No more late night talkin' 'fore we lay our heads to sleep
再也沒有那些晚上入睡前的談話
No more lookin' in the mirror with you steppin' on my feet
再也沒有那些你踩著我的腳照著鏡子的場景
Without your arms around my shoulders
你環繞在我肩膀的手已然消失
I've lost the strength to be
我失去了力氣
Come and set me free
解救我吧

Will you stay with me tonight
你今晚會陪伴我嗎 ?
And pretend it's all alright?
假裝一切沒事
Tell me that you love me
告訴我你愛我
The way you used to love me
就像以前一樣地愛我
Will you whisper in my ear
你會在我耳邊說出
Those three words I wanna hear?
那個我想聽到的三個字嗎 ?
Tell me that you love me
告訴我你愛我
The way you used to love me
就像以前一樣地愛我

Even if you don't mean it will you say I'm still the one
你會說我仍然是你的唯一嗎 ? 即使你不是真心的
Hide the way that you're feeling and make believe I still belong
把感情藏起來讓我相信我還是屬於你的
And nothing's changed since you've gone
就跟你離開前一模一樣

讀書心得 - 大腦衝浪 - 第二十一講

第二十一講

正向幻想

我想應該是像叔叔一樣的生活吧,靠著投資為主本業為輔的生活,我想當個打打程式且不被薪水跟進度摧殘的程式設計師,百分之百的享受寫程式帶來的成就感而不因是主要收入來源而討厭。

想著清晨  6:30 起床,吃著早餐看本書到 7:30,運動到 9:00 並回家洗澡,10:00上班 ~ 17:00 下班吃飯,參加著某個社團活動到 21:00 回家,23:00 就寢。

六日在家的話,同樣行程到 10:00 便睡到中午吃中餐,下午出門找朋友,不在家的話就用心地玩。

2019年10月18日 星期五

英文歌詞翻譯 The Vamps - Missing You


I've had space and time to realize the grass ain't greener
我花了一些時間去了解別人的不一定更好
And I kinda miss my side
有點開始想念那些曾經
Know I shoulda listened when you told me the first time
早知道當初我一開始就聽你的
"You won't find another like me"
你再也遇不到跟我一樣的人了」
'Cause I'm sat here in my front room with a girl who ain't you
因為我坐在前房而身旁的女孩卻不是妳
Hopin' and prayin' you're breakin' up with another fool
祈禱著你會跟某個笨蛋分手
Who didn't hear the words that I hear on the same loop
沒聽過在我腦內重複撥放的那句話
"You won't find another like me"
你再也遇不到跟我一樣的人了」

Maybe I shoulda loved harder
也許當時我應該愛得更深
Put up more of a fight
加深感情而不是吵架
I know I could've been stronger tonight
我知道我今晚可以更堅強
I look for love, but there's a space inside my mind
我尋找愛情,但你總是佔據我的思緒
Where I keep on missing you, I keep on missing you
因為我一直想念著你,一直想念著你
If you've seen enough, know that I'll be right here
如過妳厭倦了其外面的世界,請記得我在這裡
Now with somebody new, I keep on missing you
即使已經有人陪伴,但我還是一直想念著你
You, you

I learned every lesson, no more guessing
我已受到每個教訓,不想再去猜想
No more reasons why I should be reminiscing
已經沒有任何理由讓我去回憶
Instead of saying how I feel (I feel)
不要再去述說我的感覺
Instead of running from what's real (Why)
不要再逃避整個世界
'Cause I can't keep all this weight on my shoulders
因為我無法承受這一切
I can't sleep while my bed's getting colder
在漸漸變冷的床上我仍然無法入睡
Strip it back and underneath, I know
追根究柢,我知道
I'm scared you'll find another like me
我害怕妳找到一個跟我一樣的

Maybe I shoulda loved harder
也許當時我應該愛得更深
Checked if you were alright
時不時地注意著妳
I know I could've seen things in a better light
我知道我應該可以更清楚地看事情
Now I realize
現在我知道了

I look for love, but there's a space inside my mind
我尋找愛情,但你總是佔據我的思緒
Where I keep on missing you, I keep on missing you
因為我一直想念著你,一直想念著你
If you've seen enough, know that I'll be right here
如過妳厭倦了外面的世界,請記得我在這裡
Not with somebody new, I keep on missing you
即使已經有人陪伴,但我還是一直想念著你
You, you
You, you

And even though there was nights
即使有些晚上
(I, I keep on missing, I, I keep on missing)
We'd fight until it subsides
我們吵架吵到沒力氣
(I, I keep on missing, I, I keep on missing)
And, God, you know that I tried (I, I keep on missing)
神啊,祢知道我努力了
But I keep on missing you (I, I keep on missing)
但我還是一直想念著你
You, you
You, you
You, you
You, you

讀書心得 - 大腦衝浪 - 第十六講

 第十六講

對的時間,做對的事

說實在這很難,我通常晚上狀態最好,所以沉住氣不要回家通常都會很充實。但到了家發現耍廢的時間不夠,影響到睡眠 => 隔天 => 早上 => 晚上又好了...

我想要先拓展對的時間,所以還是制定個早睡早起的習慣

2019年10月17日 星期四

JQuery 自動將 Listener 作用於動態新增的 Element

Adding event listeners to dynamically added elements

拿 click 舉例
$(".myclass").click(function(){
     // do something
});
若在整個網頁讀取完後,才新增 class = 'myclass' 的 element 不會有這個 Event Listener

這時要用 on
$('#mydiv').on('click', '.myclass', function(){
     // do something
});
onJquery 1.7 才出現

這裡提供 Jquery > 1.4.2 的方法
$('#mydiv').delegate('.myclass', 'click', function(){
     // do something
});

參考資料 :
1. Adding event listeners to dynamically added elements
2. https://stackoverflow.com/questions/21625231/on-is-not-a-function-jquery-error

讀書心得 - 大腦衝浪 - 第十三講

第十三講

尤利西斯合約

尤利西斯在打贏特洛伊戰爭後,在返鄉的路上發現自己會經過 Siren 海妖的地盤,傳說海妖幽美的歌聲會迷惑水手,並讓其自行觸礁沈船。尤利西斯很想聽看看那歌聲,所以命令水手把他綁在甲板的桅杆上,並讓自己的手下用蠟堵住耳朵,拼命划不要理他的叫喊。

我想簽下未來的強制合約似乎有點用,目前最想改的是起床划手機的惡習。

2019年10月15日 星期二

Python 遞迴初學

最近用 python 刷題

刷到要用 DFS 的題目,想用遞迴去寫才發現 python 沒有指標

看著討論的 python 大神寫的程式碼,發現都是 python 裡的參數都是指標

下面拿一題示範 0947 - Most Stones Removed with Same Row or Column

class Solution:
     
     def removeStones(self, stones: List[List[int]]) -> int:
          
          # 想像用 垂直線 跟 水平線 去想辦法連接所有石頭
          # 連接了 n 個, 代表可以去掉 n -1, 看圖
                 
          # 初始樹的數目 以及 複製一個 stones 去做 DFS
          treeNum = 0
          points = {(i, j) for i, j in stones}
          
          # 建立 row 跟 col 兩個 List
          # row 紀錄該 index 下的所有有石頭的 y 座標值
          # col 紀錄該 index 下的所有有石頭的 x 座標值
          row = collections.defaultdict(list)
          col = collections.defaultdict(list)
          for i, j in stones:
               row[i].append(j)
               col[j].append(i)

          for i, j in stones:
               if (i, j) in points:
                    self.dfs(i, j, row, col, points)
                    treeNum += 1

          return len(stones) - treeNum
     
     def dfs(self, x, y, row, col, points):
          
          # 刪除這個點
          points.discard((x, y))

          # 此兩個刪除是為了加速計算
          #row[x].remove(y)
          #col[y].remove(x)

          for i in row[x]:
               if (x, i) in points:
                    self.dfs(x, i, row, col, points)

          for i in col[y]:
               if (i, y) in points:
                    self.dfs(i, y, row, col, points)
以 C 的角度來看 points 不是全域變數根本不可能有用,但在 python 卻成功了
因為在 dfs() 這 function 裡的 points,若沒有特別賦予值的話,就是一個指標指到 call function 所傳入的變數

注意這對 string, int, tuple 無效

參考資料 :  python 新手初學

讀書心得 - 大腦衝浪 - 第十一講

第十一講

騰出生活的空間

我想我有一狗票東西得丟了,舊的不去新的不來。
留東西前先問自己三遍,愛它嗎 ? 能幹嘛 ? 確定嗎 ?

目標 :

一輩不會再打開的書

沒開過的海報

沒穿過的鞋子

掛到發霉的衣服

擺到發霉的褲子

抽屜裡的廢物

當兵的雜物

沒用的箱子

沒用的袋子

2019年10月8日 星期二

讀書心得 - 大腦衝浪 - 第十講

第十講

仔細聆聽身邊的故事,思考背後動機

書上寫近一個禮拜的故事,但我是臭宅男兼大嘴巴,所以都是我在講話。但我都是抱怨而已。所以我想到 Daryl Morey。

火箭總管 Morey 在 2019/10/5 在 Twitter 上轉發了 Fight For Freedom. Stand with Hong Kong.
老實說那就是一張圖,而且很快就刪推,加上NBA火箭隊的中國球迷最多,很難想像 Morey 是在深思熟慮後發推,我猜想不經過思考就發的推機率很高。

也許美國人對自由發聲是家常便飯,但顯然他們從沒真正認識過中國人。這顯然跟2016年初那位台灣女孩的事情有異曲同工之妙。對於本人理所當然的事卻觸犯了中國共產黨的底線。動機單純。

好玩的事,中國共產黨應該最不想川普連任才對,但對這件事沒有制止,反而還讓央視做出帶頭抵制的動作,簡直就是川普的助選員。反觀當初台灣女孩央視還出來澄清。動機不明。

2019年10月7日 星期一

英文歌詞翻譯 Meghan Trainor - Title

If you want my love
想要得到我的愛
He gotta do what he does
必須要做該做的事
If you want these sweet like sugar Gucci lips
想要得到我甜蜜的Gucci紅脣
He gotta give it up
必須得先放棄
I know you think I'm cool
我知道你覺得我很酷
But I ain't one of the boys
但我是不屬於"男孩"的
No, don't be scared that I'm gon' tie you down
不用擔心我把你綁住
I need a little more
我只是需要更多

Baby, don't call me your friend
寶貝,不要我是你朋友
If I hear that word again
如果我再聽到一次
You might never get a chance to see me naked in your bed
你很可能再也看不到我裸體在你床上
And I know girls ain't hard to find
我也知道女孩到處都是
But if you think you wanna try
但如果你想試試
Then consider this an invitation to kiss my ass goodbye
就當作是"拜拜"的邀請函吧
Give me that title, title
給我那個名稱吧
Come on give me that title, title
快叫我那個名稱吧
Better give me that title, title
最好給我那名稱喔
Come on give me that title, title
快叫我那個名稱吧


If it ain't no thang
如果沒有什麼
I won't be hanging around
我才不會這裡瞎耗著
But don't blow up my shit at 3 AM saying
但別半夜三點打給我
"How you need me now?"
說你需要我
Don't call me boo
別叫我"寶貝"(一種寶貝叫法)
Like you're some kind of ghost (which you're a ghost)
好像你是鬼一樣(但你的確像鬼一樣)(守護靈或糾纏不清)
If you don't want me seeking other guys
如果你不想我去找其他男人
Well, here's what you need to know
你必須先知道這些

Yeah, said I'm a special kind of woman
對,說過我是特別的女人
I'm loving what you got, but I'm hating what you doing
我喜歡你,但我討厭你現在做的事
Gotta understand that I'm looking for a man
必須知道我在找一個男人
Who can get up on a bike, look ma, no hands
一個有擔當的男人(就是一個情景證明不是男孩而已)
You gotta show me off, off
你至少要演給我看
But you embarrassed, if that's the case I'm all gone
如果你覺得不好意思,只好說掰掰
You gotta treat me like a trophy, put me on the shelf
你要向像對待獎盃一樣對待我,把我保護得好好的
Or call something else
或其他東西(這裡指像獎盃會珍惜的東西)

讀書心得 - 大腦衝浪 - 第八講

第八講

用自己最光榮的事情鼓勵別人
用自己最挫敗的事情鼓勵別人

也許我總用最光榮的事情來檢視,而忽略用最挫敗的。回首想想,我的過往好像只有100分跟0分,但我不是天才,沒有所有事情的100分規劃,所以才一直拿0分。從那些不該拿的0分,我理解了,即使是20分的規劃也勝過0分。出了社會發現,評分標準更複雜了,一百分似乎更不存在。但我可以先做20分,因為20分比0分好太多太多。

2019年10月4日 星期五

讀書心得 - 大腦衝浪 - 第七講

第七講

人生的故事

我是這麼認為的,我的人生無聊又充滿後悔,要我選最光榮的時刻還真的很難。

我的人生高峰大概就是 2017 元旦吧。凌晨三點醒來的我沒絲毫倦意,把眼睛睜得大大看著同袍弟兄,準備迎接 2017 第一個總統府升旗典禮。雖然如臨大敵但絲毫不緊張,因為我把一切交給肌肉,而大腦則慢慢地享受迎來榮耀的時間到數。結束後我只記得最後的"向右轉",因為我知道那是屬於完美結束的標誌動作。

2019年10月3日 星期四

英文歌詞翻譯 Amber Mark - Mixer

Gonna get in your mind, one fine day
總會有一天,讓我進入你腦海
Gonna figure you out, one fine day
總會有一天,讓我看透你
Dear Lord, maybe I should stay away, stay away
神啊,也許我該離遠點
Little lost, little blind, blind with temptation
一點迷失,一點盲目,在誘惑裡失去方向

Tell me something, do I make you feel the way that I do?
告訴我,要如何讓你感受到我所感受到的
I been uptight, you got me right, I'm back into my groove
當我不能放鬆時,你總能察覺,讓我回到正軌
Keep me bumpin', give me something that I could get used to
讓我感受,讓我有東西去成癮
I'm a fire, gotta keep me lit all night, all night, they say
我就像火焰,必須讓我的熱情燃燒整個晚上

And they say my heart will bleed
人們總說有一天我會受傷
But it doesn't matter to me
但我一點都不在意
'Cause your love is so nasty
因為你的愛實在是太下流了
Boy, yeah yeah yeah
...
In the dark, I'm living the dream
夜幕低垂,我活在夢裡
When you pull up behind me
當你在後面威脅著我
Like a mixer of night cream
就像攪拌器,攪拌著屬於夜晚的奶油(為我的處男翻譯道歉...)
Boy, yeah yeah yeah
...

Every night, club tights, touch your face
每個夜晚,每件緊身褲,每次撫摸你的臉
Every night I try to find out what's on your brain
每個晚上都試著看透你
Dear Mama, help me know just what to say
聖母阿,讓我知道該說什麼吧
'Cause I don't wanna be blind with temptation
因為我不想迷失在誘惑裡

You got me late night talking, I come over
你讓我夜晚輾轉難眠,我過來了
But you won't replay in my mind, all slumber
因為在夢裡你不會出現
I'm wide awake, my body shakes and shivers
十分清醒,身體微微顫抖著
I'm a fool, I guess 'cause I text you yes
我一定是笨蛋,因為我又答應妳了
Even though my friends, they say
即使我的朋友他們說...


lit : When something is turned up or popping ...
只是偶然聽到,沒想到這麼A...

Popular Posts