amis

Month: 2022-03

2022-03-01

Lulu Keng 10:37:07
Hello 阿美族語萌典的各位大家好,開放文化基金會過去兩年有幸參加開放政府 / 開放國會的推動核方案制訂,但跟原民委員們也有感原民社群本來就應該是開放政府的要員,但卻很難實際參與,因此,我們和原民夥伴的舉辦了專門 for 原民參與開放政府的聊天會!!!歡迎大家一起來聊歐 https://ocftw.kktix.cc/events/indigenousog
原青參與政治的討論會,就是明晚!!!現場備有披薩歡迎大家來吃來聊。
Lulu Keng 10:37:07
Hello 阿美族語萌典的各位大家好,開放文化基金會過去兩年有幸參加開放政府 / 開放國會的推動核方案制訂,但跟原民委員們也有感原民社群本來就應該是開放政府的要員,但卻很難實際參與,因此,我們和原民夥伴的舉辦了專門 for *原民參與開放政府*的聊天會!!!歡迎大家一起來聊歐 https://ocftw.kktix.cc/events/indigenousog

ocftw.kktix.cc

有效打開政府!—— 原青參與政治的新管道

一起來聽聽「開放政府」在台灣的推動狀況、國內外的案例,也聊聊原住民族委員會和其他政府部會目前的承諾事項,以及我們可以如何透過「開放政府」降低門檻,更全面而有效地進入公部門參與政策擬定吧!

原青參與政治的討論會,就是明晚!!!現場備有披薩歡迎大家來吃來聊。
👍 4

2022-03-06

etblue 10:01:57
@etblue has joined the channel
miaoski 10:50:01
貼在這裡好了…. Github API 比想像中不直觀。要拿出 `amis-deploy/s/` 目錄下的所有的檔案的列表,要這樣做:
```from github import Github
token = open('/Users/Philippe/github/.oauth').read().strip()
g = Github(token)
user = g.get_user()
print('Login as', user.login)

repo = g.get_repo('g0v/amis-moedict')
commits = repo.get_commits()
last_commit = repo.get_git_commit(commits[0].sha)

root = last_commit.tree.tree
amis_deploy_sha = [x.sha for x in root if x.path == 'amis-deploy'][0]
amis_deploy_tree = repo.get_git_tree(amis_deploy_sha).tree
s_sha = [x.sha for x in amis_deploy_tree if x.path == 's'][0]
dir_list = repo.get_git_tree(s_sha).tree```
拿到的會是像
``` GitTreeElement(sha="195f2e978f95f79d94542c3870f52abfa94e9162", path="'olawen.json"),
GitTreeElement(sha="29b3775f1b1018f813a26469872431f8a5484b0f", path="'olem.json"),
GitTreeElement(sha="d60e1996d75b6964369411ea13abe564d6cd89f9", path="'olic.json"),
GitTreeElement(sha="e8b4479dac00b2f396c13b8735361faa6ab96173", path="'olicen.json"),```
這樣的內容。
miaoski 10:50:01
貼在這裡好了…. Github API 比想像中不直觀。要拿出 `amis-deploy/s/` 目錄下的所有的檔案的列表,要這樣做:
```from github import Github
token = open('/Users/Philippe/github/.oauth').read().strip()
g = Github(token)
user = g.get_user()
print('Login as', user.login)

repo = g.get_repo('g0v/amis-moedict')
commits = repo.get_commits()
last_commit = repo.get_git_commit(commits[0].sha)

root = last_commit.tree.tree
amis_deploy_sha = [x.sha for x in root if x.path == 'amis-deploy'][0]
amis_deploy_tree = repo.get_git_tree(amis_deploy_sha).tree
s_sha = [x.sha for x in amis_deploy_tree if x.path == 's'][0]
dir_list = repo.get_git_tree(s_sha).tree```
拿到的會是像
``` GitTreeElement(sha="195f2e978f95f79d94542c3870f52abfa94e9162", path="'olawen.json"),
GitTreeElement(sha="29b3775f1b1018f813a26469872431f8a5484b0f", path="'olem.json"),
GitTreeElement(sha="d60e1996d75b6964369411ea13abe564d6cd89f9", path="'olic.json"),
GitTreeElement(sha="e8b4479dac00b2f396c13b8735361faa6ab96173", path="'olicen.json"),```
這樣的內容。
miaoski 10:50:40
如果要讀一個檔案就比較簡單 (先不管 branch 的話)
```from github import Github
import json

token = open('/Users/Philippe/github/.oauth').read().strip()
g = Github(token)
user = g.get_user()
print('Login as', user.login)

repo = g.get_repo('g0v/amis-moedict')
word = repo.get_contents("amis-deploy/s/'a'acaen.json")
j = json.loads(word.decoded_content)```
然後就會得到
miaoski 10:50:40
如果要讀一個檔案就比較簡單 (先不管 branch 的話)
```from github import Github
import json

token = open('/Users/Philippe/github/.oauth').read().strip()
g = Github(token)
user = g.get_user()
print('Login as', user.login)

repo = g.get_repo('g0v/amis-moedict')
word = repo.get_contents("amis-deploy/s/'a'acaen.json")
j = json.loads(word.decoded_content)```
然後就會得到
miaoski 10:50:41
```In [1]: j
Out[1]:
{'t': "'a'acaen",
'h': [{'d': [{'f': '即將購買,要買。',
'e': ["\ufff9`O~ `maan~ `ko~ `'~`a~`'acaen~ `iso~ `saw~?\ufffa\ufffb你要買什麼呢?"]},
{'f': '指即將購買的(東西)。',
'e': ["\ufff9`O~ `'~`a~`'acaen~ `a~ `kiradom~.\ufffa\ufffb要買的布。"]}]},
{'d': [{'f': '〔疊 2〕 '},
{'f': '即將購買,要買。',
'e': ["\ufff9`O~ `maan~ `ko~ `'~`a~`'acaen~ `iso~ `saw~ ?\ufffa\ufffb你要買什麼呢?"]},
{'f': '指即將購買的(東西)。',
'e': ["\ufff9`O~ `'~`a~`'acaen~ `a~ `kiradom~.\ufffa\ufffb要買的布。"]}]}],
'stem': "'aca",
'tag': '[疊 2]'}```
miaoski 10:50:41
```In [1]: j
Out[1]:
{'t': "'a'acaen",
'h': [{'d': [{'f': '即將購買,要買。',
'e': ["\ufff9`O~ `maan~ `ko~ `'~`a~`'acaen~ `iso~ `saw~?\ufffa\ufffb你要買什麼呢?"]},
{'f': '指即將購買的(東西)。',
'e': ["\ufff9`O~ `'~`a~`'acaen~ `a~ `kiradom~.\ufffa\ufffb要買的布。"]}]},
{'d': [{'f': '〔疊 2〕 '},
{'f': '即將購買,要買。',
'e': ["\ufff9`O~ `maan~ `ko~ `'~`a~`'acaen~ `iso~ `saw~ ?\ufffa\ufffb你要買什麼呢?"]},
{'f': '指即將購買的(東西)。',
'e': ["\ufff9`O~ `'~`a~`'acaen~ `a~ `kiradom~.\ufffa\ufffb要買的布。"]}]}],
'stem': "'aca",
'tag': '[疊 2]'}```
miaoski 10:50:52
@etblue 耶。第一個 checkpoint.
miaoski 10:50:52
@etblue 耶。第一個 checkpoint.
😱 1
ronnywang 11:05:29
https://g0v.github.io/editor/

g0v.github.io

Metadata Editor

Metadata Editor

ronnywang 11:06:09
https://github.com/g0v/editor

g0v/editor

g0v.json editor for every g0v project

miaoski 11:11:40
@etblue https://medium.com/axlewebtech/upload-a-file-in-github-using-github-apis-dbb6f38cc63

Medium

Upload a file in GitHub using GitHub APIs

Sometimes, It is hectic to upload files manually into the GitHub repository. You can just upload the files using GitHub APIs…

ronnywang 11:17:42
https://github.com/g0v/editor/blob/develop/src/utils/github.js

<https://github.com/g0v/editor/blob/develop/src/utils/github.js | github.js>

``` class Github { constructor(connection, owner, repo) { this.connection = connection; this.owner = owner; this.repo = repo; return this; } getReference(ref) { return this.connection.get(`/repos/${this.owner}/${this.repo}/git/refs/heads/${ref}`); } getCommit(refs) { this.commit = this.connection.get(refs.object.url); return this.commit; } getTree(commit) { return this.connection.get(commit.tree.url); } createBlob(content) { return <http://this.connection.post|this.connection.post>(`/repos/${this.owner}/${this.repo}/git/blobs`, { data: JSON.stringify({ content: content, encoding: 'utf-8' }), }); } createTree(base_tree) { return <http://this.connection.post|this.connection.post>(`/repos/${this.owner}/${this.repo}/git/trees`, { data: JSON.stringify({ base_tree: base_tree.sha, tree: [{ path: this.filename, mode: '100644', type: 'blob', sha: this.blob.sha }], }), }); } createCommit(tree) { return <http://this.connection.post|this.connection.post>(`/repos/${this.owner}/${this.repo}/git/commits`, { data: JSON.stringify({ message: `update ${this.filename}`, tree: tree.sha, parents: [this.commit.sha], }), }); } createReference(commit) { this.branch = `update-${this.filename}-${Date.now()}`; const data = { sha: commit.sha, ref: `refs/heads/${this.branch}`, }; return <http://this.connection.post|this.connection.post>(`/repos/${this.owner}/${this.repo}/git/refs`, { data: JSON.stringify(data), }); } createPullRequest(ref) { const data = { title: `update ${this.filename}`, body: 'this is a pull request from g0v editor', head: `${this.owner}:${this.branch}`, base: 'master', }; return <http://this.connection.post|this.connection.post>(`/repos/${this.author}/${this.repo}/pulls`, { data: JSON.stringify(data), }); } createFork() { return new Promise((resolve, reject) =&gt; { return <http://this.connection.post|this.connection.post>(`/repos/${this.author}/${this.repo}/forks`) .done(resolve).fail(reject); }); } } export default Github; ```

miaoski 11:25:18
哇這個也太省。讚讚。
miaoski 11:25:18
哇這個也太省。讚讚。
miaoski 11:25:34
我來找一下怎麼把 PUT /repos/{owner}/{repo}/contents/{path} 加上去
miaoski 11:25:34
我來找一下怎麼把 PUT /repos/{owner}/{repo}/contents/{path} 加上去
miaoski 11:27:23
PUT file 搞定…. checkpointed.
miaoski 11:27:23
PUT file 搞定…. checkpointed.
miaoski 11:27:29
來看 plugin 怎麼寫
miaoski 11:27:29
來看 plugin 怎麼寫
miaoski 11:28:48
蠻多人用 https://github.com/octokit/octokit.js 我覺得我們用不到,最多參考一下。 Github 的 RESTful API 已經夠單純了,不想再加外部 dependency

octokit/octokit.js

The all-batteries-included GitHub SDK for Browsers, Node.js, and Deno.

miaoski 11:28:48
蠻多人用 https://github.com/octokit/octokit.js 我覺得我們用不到,最多參考一下。 Github 的 RESTful API 已經夠單純了,不想再加外部 dependency
etblue 11:34:46
@miaoski 編輯用的 branch name 要叫什麼
etblue 11:34:46
@miaoski 編輯用的 branch name 要叫什麼
miaoski 11:35:07
`safulo-edit`
👌 1
miaoski 11:35:07
`safulo-edit`
miaoski 11:35:28
其實 `safulo-draft` 應該更好啦,不過不管了 (逃
miaoski 11:35:28
其實 `safulo-draft` 應該更好啦,不過不管了 (逃
😆 1
etblue 11:35:46
那就用更好的吧 XD
etblue 11:35:46
那就用更好的吧 XD
miaoski 11:36:14
咦咦 XD 那我先開 branch
miaoski 11:36:14
咦咦 XD 那我先開 branch
👌 1
miaoski 11:37:11
先不要用 `g0v/amis-moedict` 因為這個我們今天玩完以後,我會直接把這個 fork 清掉 XD
miaoski 11:37:11
先不要用 `g0v/amis-moedict` 因為這個我們今天玩完以後,我會直接把這個 fork 清掉 XD
miaoski 11:37:36
那我來開一個 repo … 你的 github ID 應該就是 etblue 對吧…
應該是…我確認一下
對 XD 大小寫應該沒差吧?
大小寫有分的話是 `ETBlue`
btw 我目前的 code 在這 https://github.com/ETBlue/moeditor
哦哦哦
template! 😄
那那那 我想想 你那個可以 compile 成一頁 JS 對不對。因為 `manifest.json` 需要一個入口,通常是一頁
等下看是整個 src 搬過去,或者我這邊 build 完去哪那邊包成 browser extension
對,現在 compile 完長這樣 https://etblue.github.io/moeditor/#~'a
p.s. 目前內容是假資料,與網址無關 XD
我知道 XD
ok 我來讓他抓一下真資料
這種的不知道行不行 XD https://amis.moedict.tw/m/'a'adopen.json
哦哦,不行,因為這種沒有 branch
阿不對,這是 merge 完的檔案,會跟 draft 不一樣
對 XD
一時錯亂
miaoski 11:37:36
那我來開一個 repo … 你的 github ID 應該就是 etblue 對吧…
應該是…我確認一下
對 XD 大小寫應該沒差吧?
大小寫有分的話是 `ETBlue`
btw 我目前的 code 在這 https://github.com/ETBlue/moeditor
哦哦哦
template! 😄
那那那 我想想 你那個可以 compile 成一頁 JS 對不對。因為 `manifest.json` 需要一個入口,通常是一頁
等下看是整個 src 搬過去,或者我這邊 build 完去哪那邊包成 browser extension
對,現在 compile 完長這樣 https://etblue.github.io/moeditor/#~'a
p.s. 目前內容是假資料,與網址無關 XD
我知道 XD
ok 我來讓他抓一下真資料
這種的不知道行不行 XD https://amis.moedict.tw/m/'a'adopen.json
哦哦,不行,因為這種沒有 branch
阿不對,這是 merge 完的檔案,會跟 draft 不一樣
對 XD
一時錯亂
miaoski 11:51:34
要來找一下 編輯 的 icon 要放哪裡比較好….
都沒有乖乖放 id=“” 是我的錯 QQ
<nav> 裡面的
```<ul class="nav pull-right hidden-xs hidden-sm web-only">
<li><a href="http://ckhis.ck.tp.edu.tw/~ljm/amis-mp/" target="_blank" title="「阿美語萌典」校對活動"><img src="https://www.moedict.tw/dodo/icon.png" width="32" height="32"> 幫校對</a></li>
</ul>```
可以取代掉,不過沒有放 id 啦啦啦
Neither the URL fragment identifier, nor the `#` which precedes it, are considered as part of the _path_.
棒。我們踩到一個和標準不相容的設計 😜
重新尋找該修改的檔案在哪裡….
miaoski 11:51:34
要來找一下 編輯 的 icon 要放哪裡比較好….
都沒有乖乖放 id=“” 是我的錯 QQ
<nav> 裡面的
```<ul class="nav pull-right hidden-xs hidden-sm web-only">
<li><a href="http://ckhis.ck.tp.edu.tw/~ljm/amis-mp/" target="_blank" title="「阿美語萌典」校對活動"><img src="https://www.moedict.tw/dodo/icon.png" width="32" height="32"> 幫校對</a></li>
</ul>```
可以取代掉,不過沒有放 id 啦啦啦
Neither the URL fragment identifier, nor the `#` which precedes it, are considered as part of the _path_.
棒。我們踩到一個和標準不相容的設計 😜
重新尋找該修改的檔案在哪裡….
miaoski 11:57:22
我家貓在喵喵叫求關注…
miaoski 11:57:22
我家貓在喵喵叫求關注…
😂 1
etblue 12:13:01
lunch break!
etblue 12:13:01
lunch break!
miaoski 12:20:55
真好。我好久沒碰 JavaScript 了。天啊我只記得 document.getElementById ….
miaoski 12:20:55
真好。我好久沒碰 JavaScript 了。天啊我只記得 document.getElementById ….
miaoski 12:21:03
一切都不一樣了 QQ
miaoski 12:21:03
一切都不一樣了 QQ
etblue 12:29:04
舊時代的做法還是可以用啦 XD 只是要應付現在流行的高度互動的行為就會顯得很苦力…
etblue 12:29:04
舊時代的做法還是可以用啦 XD 只是要應付現在流行的高度互動的行為就會顯得很苦力…
miaoski 12:29:32
```nav = document.querySelectorAll('nav')[0];
nav.innerHTML = nav.innerHTML.replace(...)```
居然不能動
miaoski 12:29:32
```nav = document.querySelectorAll('nav')[0];
nav.innerHTML = nav.innerHTML.replace(...)```
居然不能動
miaoski 12:31:12
以前是傳指標… 看來改了
miaoski 12:31:12
以前是傳指標… 看來改了
miaoski 12:39:32
@etblue https://github.com/miaoski/amis-moedict-editor/blob/main/amis-editor.js 這樣居然不能動…..
現在要我用純天然的我也是要查個文件 XD
我腦袋裡只有原生的…..
基本上就是這裡。我要找一個方法把「校對活動」換成「編輯本條目」
很久以前是 innerHTML = innerHTML.replace() 就可以搞定了。不知道為什麼現在不行…
miaoski 12:39:32
@etblue https://github.com/miaoski/amis-moedict-editor/blob/main/amis-editor.js 這樣居然不能動…..

<https://github.com/miaoski/amis-moedict-editor/blob/main/amis-editor.js | amis-editor.js>

``` // moedict amis safulo only if(location.href.split('/')[3].slice(0, 2) == '#:') { var c = document.querySelectorAll('nav')[0].innerHTML; c = c.replace( '&lt;a href="http://ckhis.ck.tp.edu.tw/~ljm/amis-mp/" target="_blank" title="「阿美語萌典」校對活動"&gt;', '&lt;a href="#" title="編輯本條目" onClick="editme(location.href);"&gt;').replace( '幫校對', '編輯本條目'); document.querySelectorAll('nav')[0].innerHTML = c; } else { // Not Safulo dict. Ignore it. } function editme(href) { var lexicon = href.split('/')[3].slice(2); alert('我還沒寫好! 要修改的是: ' + lexicon); } ```

現在要我用純天然的我也是要查個文件 XD
我腦袋裡只有原生的…..
基本上就是這裡。我要找一個方法把「校對活動」換成「編輯本條目」
很久以前是 innerHTML = innerHTML.replace() 就可以搞定了。不知道為什麼現在不行…
miaoski 12:39:40
已經不是我認識的 JavaScript 了說
miaoski 12:39:40
已經不是我認識的 JavaScript 了說
miaoski 12:39:47
只好怒煮泡麵….
你午餐吃泡麵喔 ww
對啊
miaoski 12:39:47
只好怒煮泡麵….
你午餐吃泡麵喔 ww
對啊
miaoski 12:46:36
現在的阿美語萌典有的用到 react … 不知道有沒有 jQuery 可以用
miaoski 12:46:36
現在的阿美語萌典有的用到 react … 不知道有沒有 jQuery 可以用
miaoski 13:08:06
吃飽了。碗洗好了。被 JavaScript 搞到感覺真不開心。
miaoski 13:08:06
吃飽了。碗洗好了。被 JavaScript 搞到感覺真不開心。
miaoski 13:09:06
小蟹那邊 server 更新完不知道要多久才會 propagate 到 CDN 上去。希望我不需要 make deps …
嗯,不妙….
有出現「幫校對」的地方有
./index.html
./amis-deploy/index.html
./amis-deploy/deps.js
看來三者都會影響到。
我看還是想辦法避免修改到原始碼比較好…. 已經動不了了。
miaoski 13:09:06
小蟹那邊 server 更新完不知道要多久才會 propagate 到 CDN 上去。希望我不需要 make deps …
嗯,不妙….
有出現「幫校對」的地方有
./index.html
./amis-deploy/index.html
./amis-deploy/deps.js
看來三者都會影響到。
我看還是想辦法避免修改到原始碼比較好…. 已經動不了了。
etblue 13:25:08
我目前卡的是 unicode 字元,因為同一個 unicode 字元有多種行為,讀取時要先解碼,存檔時又要再編碼,很煩 XD
這個還好, .split(‘\U+FFEA’) 我記得是這樣做的
他有三個字元,然後三個字典裡面的用法不一樣 ww
對。不過我們只需要修改 蔡中涵 字典就好
剩下二個字典的作者都作古了,不會提出需求的
聽起來有點哀傷...
Gosh 我要怎麼抓到「字詞紀錄簿」的 DOM obj
還是修改「幫校對」的 DOM obj …
我覺得我需要一個全能的 DOM editor …
你是要找哪一個區塊呀?截圖圈一下?
`data-reactid` 是固定的嗎?還是常常會變
source code 裡面沒有 `data-reactid`,應該是自動產生的,所以我懷疑他會變,哈哈
對。ooxx … 然後 source code 我改了 index.html 和 ./amis-deploy/index.html 都沒用
nav 看來會被 deps.js 蓋掉
我超痛恨 JavaScript. 那個世界沒有 single point of truth.
etblue