whitglint 積分 3

不擅表達,簡單講一下跟 Python 不同之處:

  1. 語言原生支援(由 compiler 把 async method 轉成 state machine 改變執行方式)。比起 generator + decorator 更直覺更不容易寫錯,我常忘記加 decorator 或是有多個 decorator 時不知要加在第幾個,而 async 或 await 沒寫就是編譯錯誤。

  2. 方便利用多個核心。Caller 遇到必須等待的 task 就先離開,之後根據 SynchronizationContext 決定由哪個 thread 繼續執行 await 之後的程式,可以是 UI thread 也可以是 thread pool 裡的 thread。

  3. Event loop 不是必要的。GUI 程式才需要利用 event loop 繼續執行 async method。

感想:用過 async/await 後真的無法再回去寫 callback hell 和 promise 什麼的了... XD

whitglint 積分 0

只有用過 Tornado,覺得這種 coroutine/generator 的 async/await 滿不錯的。

IngramChen 積分 1

題外話,我們公司的 front-end (nodejs ecosystem) 全部是交給 gradle build,從此開發者不用再自行安裝 nodejs,也不用管設定 PATH 或是 virtual env. 版本互衝那些啊哩不搭的鳥事。

haocheng 積分 1

早鳥票只到 5/1 ,動作要快喔!

caterpillar 積分 3

〈Python 3 Tutorial〉大綱略有調整,不過基本上可以與〈Python 2 Tutorial〉兩相對照…XD

IngramChen 積分 0

python 轉到 lua…

不過作者是 lua fan 所以轉過去應該是難免的…

zwlin 積分 0

大概就只差在一個 index 從 0 開始,一個從 1 開始 XD

liang2 積分 0 編輯於

Day 2 Note1 還沒有在這個 collection 裡,但點 Day 1、3 可以找到。

EDIT: 三天的筆記都進來囉

ickxlin 積分 0

剛好來檢討一下自己的寫法有沒有問題...

koji 積分 0

之前一直以為沒有動靜了,其實還是有在跑。我就是裡面 Getting to Jython 2.7 and beyond1 投影片前幾張提到的人 0rz。

IngramChen 積分 5

我們公司的系統都有寫 unit test,所以在追加功能和維護上都相對簡單 (就成本低一點,大家也比較敢改東西)。我自己寫了快十年的 unit test,這件事簡單說就是倒吃甘庶:一開始很累,因為要建一些基礎設施。到了中期稍微好了一點,但你還是會覺得有負擔。到了後期這負擔還是在的,但這個階段沒 test 還真的不曉得怎麼寫怎麼改了。(沒 test 通常就是照前輩流傳的 沒壞的東西不要去動 的準則去做了,想當然爾什麼功能都加不太上去)

沒 test 的 legacy code 這種債務我們很低,不過系統久了,其他地方還是會有債務的。我們去年花了一點時間還了一筆技術債,就是升級 Cassandra,從 thrift 到 CQL。大概花了一、二週寫了一些橋接的程式讓兩種 drivers 能共存。這筆債還了之後我們後來加功能就變得輕鬆很多,直覺好寫又不容易出錯,效能又變好。(大部份的人都對 Cassandra 不熟,我打個比方好了,改版的進步大約是一開始是純 js 的亂七八糟碼,然後後來導入 jQuery 那樣,巨大的改進)

這篇投影片的內容建議:你應當先清償債務利息最高的部份。說得真是好啊,把最大的路障移走後面自然快速通暢了。我上面的例子對我們單位來說就是清掉擋路的大石塊,爽得咧!當然這是一次成功的清償我才會拿出來臭屁啊,其實也有多次的清償都失敗的 (例如 refactor 後也沒什麼顯注改善之類...)

qrtt1 積分 2

暫時性的,我習慣靠 /etc/hosts 解決。

IngramChen 積分 1

果然我的習慣跟大家不同...

嘛,寫 domain 的話,我覺得有兩個地方不便。

  • 一是當機器掛掉時,你想馬上補一台,在這緊要當口,換 route53 緩不濟及,因為 dns 要一段時間才會生效 (再快也要幾分鐘) ,而且 dns 常常是在這切換的十幾分鐘內,一下指向舊的 IP ,一下指向新的 IP。這完全不能精準復機啊。

  • 二是要移機時,移機的過渡期會有新舊共存的時段 (看服務性質) ,你會先 provision 一台新的,再慢慢引導流量過去。新舊主機共存,自然只能先用 IP provision,等全部好了才會切換 dns。

haocheng 積分 0

我是寫 domain 耶,想說這樣換機器只要在 route53 換 IP 就好,不用改 inventory...

qrtt1 積分 0 編輯於

我是遇到才認識 ansible_ssh_host 的用法的。 domain 或 IP 能通就可以了,不過有時會做點 special 時就可以用 /etc/hosts 把 domain 蓋掉 :P

IngramChen 積分 0

咦?在 inventory 裡我一直都會替每個 host 做別名,而不是直接用 domain,即使是不用 azure。像是 kaif 就是:

kaif       ansible_ssh_host=104.155.193.153

然後 ansible_ssh_host 我也是傾向直接寫 IP,不用 domain。

qrtt1 積分 1 編輯於

遇到這個問題是在用 Azure Cloud Service 遇到的。因為 Cloud Service 是透過 1 個 FQDN 去溝通的,它看起來會像是:

yourdomain.cloudapp.net

當你有多台 vm 在裡面的時候,就會把 ssh port 對應到不同的 port,例如:

vm1:22 => yourdomain.cloudapp.net:2021
vm2:22 => yourdomain.cloudapp.net:2022
vm3:22 => yourdomain.cloudapp.net:2023
vm4:22 => yourdomain.cloudapp.net:2024

那麼寫 ansible inventory 時就要寫成這樣子(原來的 host 就隨意取個代號就行了):

[service4azurecloud]
vm1 ansible_ssh_port=2021 ansible_ssh_host=yourdomain.cloudapp.net ...
vm2 ansible_ssh_port=2022 ansible_ssh_host=yourdomain.cloudapp.net ...
vm3 ansible_ssh_port=2023 ansible_ssh_host=yourdomain.cloudapp.net ...
vm4 ansible_ssh_port=2024 ansible_ssh_host=yourdomain.cloudapp.net ...