12/20 ~ 12/26 週記(v2.0)

洋溢聖誕佳節氣氛的一週

Juo Penguin
7 min readDec 29, 2020
Merry Xmas

讀書

終於開始讀演算法

趁著上次雙11時,買了這本「演算法:最強彩色圖鑑+Python程式實作王者歸來」,用來學習初階的演算法,目前看到一半左右,覺得滿容易學習吸收的。

以一個完全沒碰過演算法和資料結構的新手的角度來看,內容算是滿清晰淺顯易懂的,尤其幾乎每個演算法都有搭配圖片講解程式是如何運作的,演算法是如何演算的各個步驟幾乎都有說明,而且還有「實作」,實作部分還有搭配註解,說明程式在該步驟的用途,總之學習起來相對沒有壓力,挺適合用於業餘學習。

但缺點是,每個章節後面的習題都沒有解答(一般學習者只能額外打電話購買解答),雖然習題都不難,但還是挺令人困擾的。

以下是目前關於此書的簡單筆記(仍在整理中…)

技術

演算法的練習用python和js各寫一次

雖然原書只有python的實作,但為了讓印象更深刻,就用javaScript再寫一遍,不過大部分的寫法其實與python差不多,所以轉移上倒沒什麼太大的困難,以下是練習演算法的gitHub repo(持續更新中)。

嘗試render 二元樹

在練習到二元樹的部分時,想起以前看過視覺化呈現二元樹的節點操作,但一時找不到,因此自己趁機會動手做一個,而這次用的方法,是採用轉換資料的方式,是將二元樹的原始資料先轉換為一維陣列,再給react 元件渲染。

python出現無法識別中文的問題

似乎是python2才會出現的問題,不過只要在該python的檔案開頭加上以下這段註解就行了。

# -*- coding: UTF-8 -*-

一些python, 和js語法的學習紀錄

基本語法

// 數值互換
// python
a, b = b, a
//js
[a, b] = [b, a] // 要用陣列包起來
// 檢測非空的object
// python
if not dict:
# ...
// js
if(Object.getOwnPropertyNames(obj).length > 0)
// 因為空物件在js也會是true,必須用查看object是否有properties

class 的擴充

javaScript原生不能一次擴充一個以上的class,typeScript和python寫太順,都忘記不能這樣做了,可以用mixin的方式來將class擴充,關於mixin的寫法,網路上有很多文章,而且也有現成的函式庫可以用。

// 我以為的
class UnivertyStudent extends Person, Student {} // error
// 可以類似這樣做,用mixin將class 擴充 const mixinA = classForExtends => class extends classForExtends {
constructor() {
super()
this.a = 'a'
}
printA() {
console.log(this.a)
}
}
const mixinB = classForExtends => class extends classForExtends {
constructor() {
super()
this.b = 'b'
}
printB() {
console.log(this.b)
}
}
class C extends mixinA(B) {
constructor() {
super()
}
}
var c = new C()
c.printA()
c.printB()

關於react比較同一個值的變化

如果是object為plain object,則react會比較該object的深層變化;但是,如果是該object本身還有包含非plain object,例如class的instance這種,則react不會檢查。

自己是在寫二元樹render時發現,二元樹的值改變了但都沒有觸發更新(useEffect),才想起react的觸發更新的機制。

// plain object
const obj1 = {a: 'a', b: 'b'};
// obj1.a被更新為'c'
// 觸發更新
useEffect(() => { // updated }, [obj1])
// 非plain object
const btree = new Btree()
btree.next = 'b'
const obj2 = { a: 'a', next: btree }
// btree.next 被更新為 'c'
//不會更新
useEffect(() => { // updated }, [obj2])

雜談&回顧

雜談 — 最近迷上了平底鍋蒸煮

原本只是因為想蒸魚買了蒸架,沒想到用蒸的方式來料理,令人意外的挺方便的,不只能完整保持食物的原味,而且多餘的油脂會滴在下層,可以吃到更少油脂,而且青菜用蒸的不僅減少油煙,也比較清爽脆口。

第一次嘗試了蒸青花菜(兩顆),大約蒸5~10分鐘,結果吃起來雖然稍硬,但是煮好後整體都保持翠綠,沒有像一般水煮那麼容易爛掉或發黃,可以嚐到青花菜的清甜,挺好吃的。

從那之後,幾乎每餐都是用蒸的,嘗試不同食材該如何蒸煮比較好,火力和時間該如何調整,如果是新食材,則都有筆記當次的做法和時間等等各種參數,不管是成功還是失敗,都能根據經驗改進,下次做得更美味。

雜談 — 活到老學到老

看了訪談這位發明家的影片,在8, 90歲仍保有赤子之心,持續做自己熱愛的事,即便自己成功了(社會定義上的成功),也沒有停下來,一直做那些能讓自己快樂的事情。

不僅如此,他仍在持續學習著,除了會用電腦查詢專利,看自己的新想法是否已經別人做過了,甚至也會用3D列印印出各種模型,也積極接觸人群,讓自己保持開放的態度,不止於自己的工作與興趣而已。

如果自己在退休之後,也能像這位老爺爺一樣,保持著熱情嗎? 有什麼興趣和志業,是讓我足以堅持下去的呢? 期望自己也能像他一樣,不滿足於所謂的「成功」而已,遵從本心持續為了某個目標繼續生活著,過著更開心的人生呢。

回顧 — 健身環打完第二輪了,講講關於習慣這回事

終於,在經歷了「整整一年」的時間(遊戲天數約250天),通關了健身環的第二輪,在這一年之中,幾乎是每一週(7天)運動5天,也是目前為止,除了上健身房以外,維持自主運動習慣這麼久的一年。

除了運動以外,搭配飲食(低澱粉)+斷食法的用餐方法,讓自己的身形有了顯著的變化,只要是碰到一年以上沒見的朋友,幾乎都會被說怎麼瘦了,簡單來說就是飲食搭配規律運動而已。

雖然聽起來很簡單 ,但是要維持習慣還真的挺困難的,只要放棄大約三天,身體就會「冷卻」下來,習慣幾乎就消失了,必須強迫自己「再點燃」才行。

這也是為什麼「原子習慣」這本書從出版以來,都一直霸佔在排行榜上,就是因為大多數人不太懂如何養成一個習慣,不知道習慣的機制,而此書就是在教你習慣是什麼,一個習慣包含哪些要素(觸發、行動、回饋等等),知道了習慣是什麼之後,還會告訴你習慣要從「原子般」大小開始培養,不要一開始就挑戰最高難度的,就像我玩健身環一開始也不是一週5天,原本是一週3天而已,隨著自己的身體「熱」起來,隨著習慣被肌肉記憶住,再進階挑戰更近一步的階級,並且繼續維持下去,或許就能完成那些以往自己認為不可能辦得到的事情喔!

--

--

Juo Penguin
Juo Penguin

Written by Juo Penguin

不挑食的雜食者,近期的目標是瘦10公斤。

No responses yet