vaccine

Month: 2021-05

2021-05-02

Yao Wei 13:31:29
@medicalwei has joined the channel

2021-05-03

Yao Wei 18:36:31
@kevinliao did you test the PR?
kjcl 18:36:58
confirm it's working. 🙂 check out vaxx.tw
🙌 1

2021-05-08

kjcl 17:00:05
@medicalwei I've deployed the changes onto the local scraper, so the data from your fixes is now in production. 🙂
kjcl 17:00:32
I configured GitHub Actions today, so we'll now get Type checking and linting support in both JS and Python for pull requests. 🙂
kjcl 17:00:39
Getting ready to take this to the next g0v hackathon. 🙂
🙌 1
Yao Wei 17:43:54
Aaaaand I forgot to add Nantou MOHW into parser list ._.

2021-05-12

Yao Wei 15:32:09
@kevinliao seems that the parser I did doesn't work as intended
kjcl 15:32:30
Which hospital? Im on my way home. Can take a look :)
kjcl 15:33:01
We should also think about how to add 公費疫苗資訊
Yao Wei 15:33:32
MOHW hospitals: Keelung MOHW is now fully booked
mrblueblue 16:53:19
@grokut has joined the channel
kjcl 17:14:28
Hi, I think conversation is happening in #covid19

2021-05-13

kjcl 14:09:38
@medicalwei sorry I've been a little busy with work and havent had a chance yet. Have you investigated issues with MOHW parsers?
Not yet. I can do that this evening
Tested by running this script directly, you should see most of MOHW hospitals being unavailable. Also, this can be used for sponsored vaccines if hospitals use the same system for booking.
I'll test! Can you reformat with `pipenv run black`?
done. didn't see that the format is off
Go check it out!
Also, what's the format of sponsored vaccines?
Didn't notice that the repo is moved
The next issue is the link to the registration page
The data needs improvement. I agree... I'm trying to move from the CSV file to something more readable. I want to convert it to JSON.
Would suggest YAML though
Lemme run formatter again ._
tmonk 14:09:50
@felixtypingmonkey has joined the channel
2

2021-05-14

kjcl 15:45:23
Dont know if anyone finds this interesting but today the local scraper migrated to async Python and it is now 5x faster. https://github.com/g0v/vaccinate/pull/36

#36 Asyncify our methods to improve performance

It's taking on average 40-50 seconds to scrape each time. This is too slow because the appointments are going very quickly now. We will save significant time by adopting async. Now down to 10-12 seconds. Test plan: `yarn scrape` confirm still works. mohw_nantou is broken and I need to file a fix request. *Test Plan:* ``` (vaccine2) ~/Documents/Programming/g0v/vaccine2/backend  master●  0m  python local_scraper.py  [(3, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (11, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (19, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (8, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (27, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (21, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (17, {'self_paid': <AppointmentAvailability.AVAILABLE: 'Available'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (10, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (1, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (13, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (14, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (28, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (29, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (12, {'self_paid': <AppointmentAvailability.AVAILABLE: 'Available'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (22, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (2, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (4, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (5, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (6, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (7, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (9, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (15, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (16, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (18, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (20, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (23, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (24, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (25, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (26, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (30, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (31, {'self_paid': <AppointmentAvailability.NO_DATA: 'No data'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>})] ----Time: 50.78437399864197---- (vaccine2) ~/Documents/Programming/g0v/vaccine2/backend  async  0m  python local_scraper.py  ----scrape_tonyen_hsinchu: 0.1959974765777588----- ----parse_tzuchi_hualien: 0.22075915336608887----- ----parse_ntu_yunlin: 0.4962174892425537----- ----parse_ntu_hsinchu: 0.8664581775665283----- ----parse_ntu_taipei: 1.107123613357544----- ----scrape_pch_nantou: 1.1037871837615967----- -----parse_mohw_nantou: Unexpected error: <class 'KeyError'> ----scrape_changgung_chiayi: 1.19110107421875----- ----parse_tzuchi_taipei: 1.9510462284088135----- ----parse_mohw_keelung: 1.9770476818084717----- ----scrape_siaogang_kaohsiung: 2.4221842288970947----- ----parse_mohw_taitung: 2.4698691368103027----- ----parse_mohw_miaoli: 2.8588149547576904----- ----parse_mohw_taoyuan: 3.3229405879974365----- ----parse_mohw_taichung: 3.3663933277130127----- ----parse_ncku_tainan: 5.681906461715698----- ----parse_mohw_kinmen: 8.428256511688232----- [(3, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (11, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (19, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (8, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (27, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (21, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (17, {'self_paid': <AppointmentAvailability.AVAILABLE: 'Available'>, 'government_paid': <AppointmentAvailability.NO_DATA: 'No data'>}), (10, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (1, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (13, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>}), (14, {'self_paid': <AppointmentAvailability.UNAVAILABLE: 'Unavailable'>, 'government_paid': <AppointmentAvailability.AVAILABLE: 'Available'>}), (28, {'self_paid': <AppointmentAv…

1 1 1
kjcl 15:45:54
We are reaching the point where vaccination slots are gone in the minute it takes for us to scrape and put them up so performance really matters now!

2021-05-15

isabelhou 05:18:19
@isabelhou has joined the channel
chihao 07:01:30
@chihao has joined the channel
kiang 08:23:18
@kiang has joined the channel
Randyanto 12:46:23
@yonathan.randyanto has joined the channel
kjcl 18:54:11
https://github.com/g0v/vaccinate/pull/45

更新了網站的資料。現在全力往公費疫苗的方向走!
Screenshot from 2021-05-15 18-39-16.png
Screenshot from 2021-05-15 18-45-59.png
在網頁和Code中注意到「疾病管理署」這個名稱,應該是「疾病管制署」,全名「衛生福利部疾病管制署」,英文名稱「Taiwan Centers for Disease Contorl」
4 👍 5

2021-05-16

tmonk 15:38:08
Thanks to @kevinliao . vaxx.tw is now being accessed with Let's Encrypt TSL. Such secure such wow. :doge:
❤️ 3
kjcl 15:53:40
I'm going to post an update in #general with all the accomplishments everyone has made! We have Tagalog support now too!
👍 3
Allen 15:57:44
@alllenwang6212 has joined the channel
Cos 16:27:33
@vikarechronos has joined the channel
marge 16:28:54
@marge.consunji has joined the channel
bettyvisualtech 16:43:42
@bettyvisualtech has joined the channel
chewei 16:53:09
@chewei has joined the channel
Mai 16:54:58
@karmin.sphinx has joined the channel
heranchris0430 16:55:12
@heranchris0430 has joined the channel
Ti-Chung 17:01:08
@tcheng10 has joined the channel
ael 17:34:31
@aelcenganda has joined the channel
Linc 17:42:17
@turtlelin1210 has joined the channel
Ezek 17:52:27
@lin.liszt has joined the channel
Jeremy 18:06:00
@qwe0123xd has joined the channel
Yu Shen 18:50:40
@hyy6983 has joined the channel
Vivi 18:55:49
@vivi5377 has joined the channel
yukai 19:02:06
@yukai has joined the channel
lanf0n 21:15:26
@lanf0n has joined the channel
liao.shen.yi 22:16:58
@liao.shen.yi has joined the channel
liao.shen.yi 22:21:29
There are some new vaccine locations that aren’t showing up on vaxx.tw — can someone check? For example the district office associated clinics: https://www.cdc.gov.tw/Category/MPage/1Bxh1TWpagHekyuEDSDknQ

cdc.gov.tw

臺北市COVID-19疫苗接種院所

😮 1 👀 1
hdes93307 23:44:01
@hdes93307 has joined the channel
ky 23:46:21
@lisa has joined the channel
bil 23:52:20
@bil has joined the channel

2021-05-17

kjcl 00:30:53
Hi @liao.shen.yi, I have scraped the CDC website and put all the data into this JSON file
2
kjcl 01:20:50
I put a notice saying our data is incomplete. I'm going to work on putting this data in tomorrow. I debated taking the site down, but since we provide live data and the CDC doesn't, it makes sense to keep it up with the warning.
👍 1
kjcl 01:25:20
https://g0v-tw.slack.com/archives/C02G2SXKX/p1621157336377800?thread_ts=1621153484.370900&cid=C02G2SXKX

感謝資訊更新 但我想再補充一下,在高危險區域內的醫院 需要被特別標示嗎?還是說就不鼓勵前往?

Yuting 01:25:32
@chaossha has joined the channel
游士鋒 01:33:11
@sfyou614 has joined the channel
u9780112 01:49:37
@u9780112 has joined the channel
Ian Li 01:54:24
@s09454 has joined the channel
yorkxin 10:42:59
@ducksteven has joined the channel
hungmi 12:52:57
@hungmi has joined the channel
tmonk 13:04:10
確認有沒有公費疫苗可打還真的蠻麻煩的:
• 根據 COVID-19 防治一網通上面顯示,預定有配給疫苗的單位由大醫院到地方衛生所都有。
• 地方衛生所的資訊就要自己打電話去詢問目前掛號進度跟是否還有疫苗可打。
• 如同 @chaossha 所說的,有些醫院因為有確診病例等原因被認為不建議前往,也希望能標明清楚。
• 這麼多間醫院、衛生所都要寫一隻爬蟲抓取資料,現在感覺好像不太實際。
我目前的想法是要有個機制透過眾包(crowdsourcing)的來蒐集大家回報的狀況。
可能架構會跟最初一開始 @tnstiger 寫的口罩地圖蠻像的。

最後我有點不確定目前施打公費疫苗是不是當下最該去做的事。
tnstiger 13:04:22
@tnstiger has joined the channel
isabelhou 13:06:21
據我所知,目前公費疫苗預約應該都已經滿了。要等新一批疫苗到貨。
QQ
😢 2
kjcl 13:25:46
但是可能會有人取消名額,應該還是不要把爬蟲關掉。我可以在網站上加一個通知
2 2 👍 1
kjcl 13:26:58
我們現在的狀況應該就是要準備下一批公費疫苗了。看一下可不可以跟PDIS/衛福部的公務人聊一聊
🙌 2
utekidesign 13:48:05
@utekidesign has joined the channel
bess 13:52:07
@besslee has joined the channel
utekidesign 13:52:29
大家好,我是時雨設計的平面設計師,我今晚開始會幫忙設計「全民新冠肺炎 (COVID-19) 疫苗資訊」(https://vaxx.tw/)的網頁視覺設計,想確認一下應該沒人認領要設計吧?

vaxx.tw

台灣新冠肺炎自費疫苗資訊 Taiwan COVID-19 Vaccination Information

台灣31家醫院COVID-19疫苗名額的現時資訊 Real-time Data about COVID-19 Vaccination Appointments in Taiwan.

謝謝跳坑!
我現在都是在用 getbootstrap.com 的 component
zyan951231 2021-05-17 14:24:23
@utekidesign~請問你使用figma還是XD,我們可以來協作一下?:)
想協作(+希望用Figma)
utekidesign 2021-05-17 14:49:26
我只會用illustrator欸
utekidesign 2021-05-17 14:51:04
我問一下UIUX設計師朋友
我這邊在改一些前端的程式了, 有設計要改的話我可以順便做
什麼樣的改變?
utekidesign 2021-05-17 15:07:55
請問給illustrator原始檔案可以嗎?
多語系的架構, 以及選語言的方式. 會改成用 dropdown. 不過昨天大多先調整多語系的code, UI 的東西還沒做完
@utekidesign figma 或者 zeplin 可以嗎? 然後可以的話盡量先用 bootstrap 有的東西, 我怕我沒太多時間重刻 UI orz
utekidesign 2021-05-17 15:10:22
我也怕我沒時間學你們說的軟體
對對拜託大家用Bootstrap的東西,方便工程師
@utekidesign
不然先調整排版或者部分元件的顯示方式去改 (例如選語言改成 dropdown 這類的), 先朝著讓上面的資訊方便閱讀的方向下去改
@kevinliao 有什麼想法嗎?
zyan951231 2021-05-17 15:13:56
@utekidesign 抱歉我似乎沒參與過用 AI 和 PS 來設計網站的時期…QQ
Figma/XD的好處是設計師們方便協作,有 css code panel 對前端工程師來說也比較方便
@lin.liszt PR 我好像看過了!~但是還沒時間 Deploy
需要串個 CI / CD, 先列個坑看誰有資源 & 時間可以用
我現在正在用一個Digital Ocean的 VPS
CI/CD我們在另外一個Thread聊天好了
@zyan951231 @anmicius
嗨,這邊我會協助這個專案進行
會在#designer 這邊開啟相關的 Figma 協作
@utekidesign 所提供的 AI 我也會協助放到 Figma 上面

轉移到新軟體上都需要學習成本,設計師們在自己習慣的軟體上面也能夠有更棒的發揮,希望在這部分大家可以稍微諒解,我會協助大家找到好的合作型態,感謝你們願意參與
5 👍 7 1 🙏 1
tofus 13:53:44
@terry.f.wang has joined the channel
5
Gordon 13:54:23
@gordon890908 has joined the channel
林禾堃 14:09:03
@ken1357924681010 has joined the channel
zyan951231 14:14:20
@zyan951231 has joined the channel
caasi 14:14:52
@caasi has joined the channel
Jonathan 14:21:32
@jonathan97.main has joined the channel
kjcl 14:21:41
Hi everyone, welcome Jonathan, who helped translate more of our UI to Bahasa Indonesia yesterday.
👍 7 2 4
alan5281 14:42:19
@alan5281 has joined the channel
Anmicius 14:45:19
@anmicius has joined the channel
kjcl 15:16:22
CI/CD Thread
現在是一個在VPS上跑的 NGinx/Gunicorn SystemD service. 我每一次要deploy 的時候必須先 Git pull; yarn build; sudo systemctl restart vaccinate
想要開通autodeploy但是想不出來怎麼做
我可以把這個systemD service需要SuDO 的 Permission 關掉
我可以幫忙做 CD Pipeline 但是我比較習慣在 cloud 上做,不是 on-premise,你不介意的話我可以嘗試看看
什麼樣的Cloud呢?
像是跑在 ECS 或是 Heroku;我比較擅長打包成 container 的作法
不過要具體看你目前怎麼 deploy 的🤔
這段對嗎?我好奇 GCP 彰化機房有沒有被擋?

https://github.com/g0v/vaccinate#architecture
蟲蟲沒有在服務器上。他們在我家裡的一個NAS上跑
lol
那麼什麼部分需要 CI / CD 呢?
Flask app
backend/app.py
稍微看了一下大部分的 endpoint 可以變成靜態檔案,但是有一部分看起來會去 sync 抓資料,想知道什麼情況下會發生?

https://github.com/g0v/vaccinate/blob/b71591f310e215d281834740474d5f350b3b41cf/backend/local_scraper.py#L79
你說為什麼app.py 會 call local_scraper?
yes,應該問說什麼情況下會去 call local_scraper ?
因為如果有人想要在他們 local machine 上面測試蟲蟲的話,可以:
pipenv run python app.py --scrape
然後他們就可以在他們自己機器上測試他們寫的蟲蟲
OK 那你跑在 VPS 的時候是沒有開啟 scrape 功能的嗎?
沒有
great
Redis 的KEY我可以到時候給你
.env 檔案
scraper -> VPS 是透過 Redis 傳遞的嗎?
Scraper -> 上傳到redis
App.py 從redis 讀
Great 那我大概知道怎麼做了,我先試試看 deploy 到 Heroku
到時候直接連到你的 Redis
好我把 key 私訊給你
稍等
我這邊先試著 deploy,如果你剛好下線,我會開一台 Redis 給你連連看
我在 GitHub 上開 issue 給你。你的 github username 是什麼/
`@yorkxin`
先弄了 docker image(s). 我明天下班再來研究看看如何 deploy docker images on Digital Ocean. 如果你要直接嘗試的話也請便 🙂

https://github.com/g0v/vaccinate/pull/55
但其實我同意你說的最終可能連 web server 都不需要,只剩下 scraper 需要在線上跑,那就得研究一下 static site generation。
kjcl 15:39:14
先說一下,我覺得我們最優先該做的事情是找衛福部/PDIS的人討論。我們需要知道現在到底怎麼知道醫院有沒有公費名額然後如果有其他政府單位打算開發這種全國疫苗名額平台。

現在因為自費疫苗制度已經結束了,並且公費疫苗名額全滿,本案子沒有太急跳坑的需求。這樣說明是避免大家白費精神在一個有可能不會在被用的網站(如果PDIS自己有自己的打算的話)。我今天晚上看能不能連絡的上PDIS的人再跟大家報告。

討論之後我們會知道:
• 怎麼最好支援準備下一批的公費疫苗
• 怎麼收集現時名額資料
然後在想網站的UI長得什麼樣子

當然只是我個人的感想!
先 tag 一下 @mcpeng 有什麼想法
我們先收集一下問題吧~不想麻煩她
噢,只是想要先讓他知道有這件事。簡單摘要一下,就是之前 @kevinliao 做了一個可以查自費疫苗哪裡還有缺可以登記的網站。現在取消自費疫苗了,但有很多設計師想要跳坑幫忙設計得更好。

@kevinliao 覺得應該先釐清未來可能需要怎樣的民間疫苗查詢網站,再開工設計。

也許可以想一下可以如何參考口罩地圖的案例,政府開放 API 後民間可製作查詢介面,畢竟台灣最後還是需要大規模施打。
八點進去跟你們一起討論
設計部分的協作處理,個人會比較希望功能先落實下來,設計在加入
zyan951231 2021-05-17 20:17:25
請問 meeting 已經開始了嗎XD 我找不到加入的連結 QQ
等一下我可以開一個Jitsi會議室
但是不多久就要停電了
隨時會斷掉
🙌 4 👍 1
kjcl 15:43:47
開了一個共筆。我們一起收集給衛福部跟PDIS的問題吧!https://g0v.hackmd.io/gF3Pw0Y3QOOtvsuI-eARrQ

g0v.hackmd.io

關於公費疫苗制度的下一批的問題 - HackMD

贊成~
👍 3 2