cofacts

Month: 2017-06

2017-06-01

mrorz 00:52:29
@darkbtf 請問你上次在用的那個
可以接 elasticsearch 下 query 的 chrome extension 是哪一個呢
darkbtf 02:45:17
叫作 sense
alvinyen219 16:02:16
@alvinyen219 has joined the channel

2017-06-02

mrorz 00:15:47
結果我用 docker export 做出來的,production 資料庫的備份 tar 檔
拉回本機來
試著還原回 image 然後拿它來啟動 container
mrorz 00:16:01
elastic search server 啟動是啟動了
mrorz 00:16:04
但內容是空的 orz
mrorz 00:16:53
下 GET /_search ,使用 match_all query,會拿到空的 orz
mrorz 01:25:11
oh 我發現 production 機器上的 elasticsearch docker
沒有 mount drive 的話,他會在 /var/lib/docker/volumes 底下自己弄一個資料夾,然後 mount 上去。

然後 docker export 又不會打包 mounted volume 的資料,elasticsearch image 又把資料庫 data directory 設成 mounted volume
所以就變成 docker export 包起來的 tar 檔裡,mounted volume = data 會是空的。
mrorz 01:42:24
總之我成功在本機端把 production 的 elasticsearch data 跑起來了
步驟我補在 https://github.com/cofacts/rumors-db#backup-production-database-and-run-on-local-machine

GitHub

cofacts/rumors-db

rumors-db - Scripts for managing rumors db

ggm 12:33:37
欸對所以 Adam 後來有回覆嗎?
ggm 12:34:14
@mrorz 你問完 OCF 需要擔負什麼責任義務之後
ggm: 沒有,或許是在暗示我們自己去讀使用者條款吧 orz
ael 12:37:14
@mrorz 如果是問申請 Line ID 的事,請同時寄信到 hi@ocf.twg0v-jothon@googlegroups.com 方便討論 ><
ggm 12:41:04
噢我解釋一下
ggm 14:27:56
就是後來 @mrorz 問 LINE 人說,OCF 需要擔任什麼責任與義務之後,他們就一直沒回,我就想說先了解這個在寄信到 OCF
ggm 14:29:04
因為 OCF 應該也會想知道,我作為一個單位 or 組織,申請之後要做什麼事情,如果「真的假的」出包了,OCF 會受到什麼影響之類的
ggm 14:29:14
所以我就還沒有寄信過去給 OCF
mrorz 14:32:44
嗯這一開始是我的 concern
但也有可能是我想太多
一種 overengineering (?)
ggm 15:05:22
不會吧 XD 這是很合理的想法呀 只是他們不回有點囧 要在 ping 一下嗎 XD
ael 15:10:51
@ggm 噢噢,了解。主要是因為 OCF 跟揪松的 email 是不同人看(只有 clkao 和阿端會重疊),所以提醒要寄的時候需要兩個都寄 XD
ggm 16:49:17
http://www.ettoday.net/dalemon/post/26430

鍵盤大檸檬

「藍鯨遊戲」害青少年自殺?他提關鍵線索推翻BBC假新聞 | 鍵盤大檸檬 | ETNEWS新聞雲

《國王遊戲》很荒謬,但後來我發現現實世界更荒謬。那些收到一個電話便被人騙走幾百萬,比小說更荒謬,但不斷有人上當。這說明了...(藍鯨,遊戲,電玩,青少年,自殺,任務,關卡,爭議,宅宅,紅豆Q粉粿)

.michael_li 23:47:31
公視有話好說製作人 晚上貼了一篇文 內容主要是說之前有一集節目播出之後 反同團體的人就在 LINE 中截圖轉傳 製造同溫層的謠言 給大家參考這個案例
https://www.facebook.com/permalink.php?story_fbid=10212957859569560&id=1483304899

facebook.com

陳信聰

針對上報報導,高雄市國小教師劉育豪遭反同人士,大量投訴指責怒罵及騷擾一事,本人代表公視有話好說節目表達以下立場: 1 劉老師因本節目報導而遭到民眾怒罵指責投訴,徒增無謂困擾與壓力,本人及節目鄭重向劉老師致歉. 2...

昨天在 cofacts 搜尋過,發現沒人回報
看來觸角還不夠廣呢,同溫層超厚 QQ

2017-06-03

2017-06-05

ael 22:31:48
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
@null 22:31:49
@aelcenganda commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: 看大家有沒有空去性別提案工作坊分享真的假的
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
@null 23:13:10
@ggm commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: 我可以當備案,有沒有人比較想去的 XDD 我們可以輪流使用社交點數(?)
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
lucien 23:26:40
這週 meeting 可以討論
2
@null 23:55:57
@mrorz commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: 請問有活動地點嗎
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊

2017-06-06

@null 10:07:49
@aelcenganda commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: 地點:女人迷樂園(和平東路二段50號),在和平建國路口
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
@null 13:23:28
@mrorz commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: :ok_hand:
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
ggm 20:02:28
https://udn.com/news/story/7241/2505639

聯合新聞網

茶裏王用毒越茶謠言又來 統一報警追兇 | 產業綜合 | 產經 | 聯合新聞網

「統一茶裏王龍潭茶廠被查封近萬頓含劇毒的越南茶葉,稍晚將宣布回收下架..」,類似這樣的謠言從2014年開始,每年都會上演...

2017-06-07

@null 20:55:54
@mrorz commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: @aelcenganda 我們可以去唷~~
@ggm 會到
我也會,但會大概 19:30 才到 QQ
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊
@null 20:58:40
@mrorz commented on @aelcenganda’s file 6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊: 我們可以去被 Q&A ~~
6/21 (三)19:00 g0v grant x 女人迷性別提案工作坊

2017-06-08

ael 11:24:39
螢幕截圖 2017-06-08 11.24.05.png
ael 11:32:44
@ggm 後續討論分享內容是應該發信給你,還是你們有共同的 email 群組?
ggm 12:44:28
沒 XD 我來負責轉發給大家
mrorz 13:26:20
原來只有一組
mrorz 13:26:29
我們原本以為是很多 team 會去分享 XD
mrorz 13:26:48
昨天我們怎麼想都不知道性別議題可以怎麼參與提案
mrorz 13:27:23
或者是說,對我們來說參與提案這件事情與是不是性別議題無關
而是你有沒有擅長提案的朋友 (?)
ael 23:59:18
恩,我明天打個電話跟他們講一下,然後覺得也許我應該要在群組裡問大家,看誰有興趣上這樣

2017-06-09

ael 11:06:33
你們九點半到就可以啦
mrorz 11:09:18
喔喔喔好唷
mrorz 11:09:58
到場無壓力 XD
ggm 13:32:32
咦 九點半到 XD 可是那個分享不是 20:00 ~ 21:00 嗎
ggm 19:53:43
https://www.facebook.com/ETBlue/posts/10210203709141889

facebook.com

ET Blue

有聽媒體人說過 fact check 是一門專業... 「 抵抗假新聞真正需要的是有事實查證專業的機關進行。而事實查驗也只能就事論事,政府不得有任何作為,不然就可能涉及新聞管制。 」

是說當初會想要撈過界做「回應」而不是嚴守 fact checking
有一部分就是在想,邀請大家「連結回應」的本質與大家會想回應的動機,本身很難可以做到 fact-checking 所需要的一種自我把持的需求。

我認為嚴謹的 fact-checking,與 collaborative 的回應各自有各自的價值,也各自有各自擅長的地方。傳統的 fact-checking 肯定是個專業,硬是使用 collaborative work 來做它,會給大家非常大的壓力,參與的人少,自然也很難 collaborate 起來。
另一方面來看,當 cofacts 編輯們,抱持著維護自己的立場的心態來參與、來連結回應的時候,不開放回應主觀訊息,反而就以些不近人情,也在某種意義上犧牲了原本 collaborative 的長處。
ggm 23:32:03
之前 @mrorz 是不是有寫個期中紀錄的哪個呀 忘記你貼在哪裡了
ggm 23:32:09
就是人數,文章數的那個

2017-06-10

ael 13:45:00
噢噢,我看錯,是6/21(三)八點要到

2017-06-12

mrorz 09:39:19
本週開會我想到可能要 cover 的點
1. **編輯小聚籌備** (by Hazel)
2. 七月檢核標準(如果週三之前 GGM 還沒寫的話 XD)
3. LINE (need someone pushing on this), Google (news lab summit), first draft (concall invitation), mafindo (what kinds of interaction is needed?)
上次討論完 顧問人選 還沒有發信給揪團松
1
ggm 22:59:37
大家到這頁 https://github.com/orgs/cofacts/people 把自己改成 public 好不,不然直接點這個專案看都沒有人 XD

GitHub

g0v cofacts/真的假的專案

GitHub is where people build software. More than 22 million people use GitHub to discover, fork, and contribute to over 60 million projects.

ggm 23:00:18
Screen Shot 2017-06-12 at 10.59.58 PM.png

2017-06-13

mrorz 09:21:06
發現 cofacts-api 無法登入
我看看 Rillvar
mrorz 09:21:10
Rollbar
mrorz 09:29:49
https://rollbar.com/mrorz/rumors-api/items/40/

已回報: https://github.com/cofacts/rumors-api/issues/37

GitHub

Internal server error when logging in in search result · Issue #37 · cofacts/rumors-api

Steps to reproduce: Go to article list page. If already logged in, logout first. In search box type in Chinese characters, perform search Login using any method sees internal server error. Root c...

2017-06-15

mrorz 01:08:29
是說我們 LINE bot 有很多要算字數的地方
字串要像這樣做 https://github.com/cofacts/rumors-line-bot/blob/master/src/processMessages.js#L125

GitHub

cofacts/rumors-line-bot

rumors-line-bot - Line bot that checks if a message contains internet rumor.

mrorz 01:12:56
如果我寫一個 string template function 可以做到

```
limitLength(28)`[相似度:${Math.round(similarity * 100)}%] \n ${addEllipsis(text)}`
// => [相似度:32%] \n 文字文字文字如果超過就自動加上⋯⋯
```

`limitLength(limit)` 自動計算 template string 現在有多長,跟 `limit` 相減之後得到剩下還可以多長,然後自動把有包過 `addEllipsis()` 的字串裁減到那個長度
這樣會不會讓 code 變得比較好讀啊
mrorz 01:15:20
```
limitLength(100)`幫您查詢「${addEllipsis(event.input)}」的相關回應。`
```

這樣就不用自己去算 event.input 要 slice 多長
而且改 wording 的話也不用更新 slice 的數量
mrorz 01:15:49
這在 JS 裡面是辦得到的 (用 tagged template literals https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals )
所以我們要討論的是,如果 code 這樣寫會不會真的比較好讀
ggm 01:45:52
我覺得暫時不會(意思是有一天我可能會改觀),我是覺得在 string template 裡面如果 code >= word的話,會不好讀,而且你因為要實作這個 tagged template 而另外寫了兩個 function,不如就寫一個 function 直接解決?
ggm 01:46:23
``` function buildFormatedReply (prefix, content, limit ) {} ``` 之類的
mrorz 01:50:42
主要是 template string 可以滿自由的,不只是 prefix,而是可以讓要加上 ellipsis 的字串插在任何的地方
mrorz 01:51:29
像剛才的例子
```
limitLength(100)`幫您查詢「${addEllipsis(event.input)}」的相關回應。`
```
就是要縮小的字串插在整個字串的中間
然後 limitLength(100) 保證回傳的字串長度會 <= 100
mrorz 01:54:04
當然也是可以用自訂的格式啦,像是 `buildFormatedReply("[相似度 %s] 幫您查詢 %s 的相關回應", [similarity, addEllipsis(input)], 100)`
ggm 02:09:03
其實就像是你寫個 `printf()` or `fprintf()` 之類的概念
ggm 02:09:47
然後他會分開處理 `%s, %s`
lucien 02:50:55
剛剛用手機看真是完全看不懂 code 在寫啥,我覺得兩個都可以接受啊,我之前沒用過 tag template literals ,所以第一次看還是想了一下
lucien 02:53:32
具體來說,他本來可以看成兩個過程:1. trim 到 limit - ‘…’.length 2. 上 ellipsis,所以看成兩個 function 也蠻合理的
lucien 02:55:21
我不是很確定其他人看到
```
limitLength(100)`幫您查詢「${addEllipsis(event.input)}」的相關回應。`
```
會不會覺得很難讀
lucien 02:57:27
因為他有兩個點需要理解: tagged template 、 limitLength 是個 closure function return 出需要的 tag function
lucien 03:02:39
```
function buildFormatedReply(format, content, limit)
```
可能對一般人比較好懂,但 tag template 比較 fp ,我覺得取決於要參與 code 的受眾對於語言的喜好或是語法的了解程度耶
ggm 05:00:08
為什麼 tagged template 比較 fp 呀?
ggm 05:27:39
我認真想了一下,就這個例子來說
```
limitLength(28)`[相似度:${Math.round(similarity * 100)}%] \n ${addEllipsis(text)}`
```
我覺得要把 `Math.round()` 和 `addEllipsis()` 包進去 tagged template 才有價值,不然那跟
```
limitLength(`[相似度:${Math.round(similarity * 100)}%] \n ${addEllipsis(text)}`, 28)
```
大概沒什麼兩樣,應該就是寫成
```
formatedTemplate`[相似度:${similarity}%] \n ${text}`
```
調整格式的實作,要寫在 Template 裡面,而不單單只是拿來做 `limitLength`,然後清楚的表達這個 Template 會做的事情有:
1. 如果是浮點數就換成百分比
2. 如果是字串大於 x 長度,就剪掉
mrorz 10:48:39
```
limitLength(`[相似度:${Math.round(similarity * 100)}%] \n ${addEllipsis(text)}`, 28)
```
在技術上不可行,因為一定要 tagged template function 才有辦法拿到被拆解的 template string,否則只能拿到 Javascript 幫你串完的整個字串。


要做自動計算現有 string length,你一定要能夠拿到中間的這些字串
```
["[相似度:", "%] \n "]
```
還有各個 `${...}` 的執行結果:
```
["32", <addEllipsis(text)的回傳值,可以設計成 function 或 object>]
```

我才有辦法計算:
1. 還剩下多少字元長度
2. 誰可以被縮短(addEllipsis 回傳的東西可以不是字串,然後我們就縮短那個不是字串的玩意)來符合長度限制
mrorz 10:49:36
而這剛好就是 tagged template function 才能上下其手的部分
mrorz 10:51:45
若不使用 tagged template,那就是要自己把要縮的字跟其他分開,例如說:

```
limitLength([`[相似度:${Math.round(similarity * 100)}%] \n `, addEllipsis(text)], 28)
limitLength(['幫您查詢「', addEllipsis(event.input), '」的相關回應。'], 100)
```
mrorz 11:02:44
其中那個 `addEllipsis` 透過回傳 object 或 function 來與 `limitLength` 知道說「我是要被縮小的字串」
mrorz 11:03:06
當然另一種更正規的作法可能是類似 sprintf 那種 string replacement 了
ggm 13:44:34
為什麼技術上不可行呀,limitLength 你不是只是要砍字串尾巴換成「…」這樣而已噢?他所拿到的參數不是就是一個展開後的完整字串了,就直接就可以做啦?
ggm 13:52:19
噢你的 limitLength 是想要只縮 `${addEllipsis(text)}` 這個字串,而不是整個字串,是嗎?(阿不過我們的情境,一次看整個字串和只看後面的字串沒差)
ggm: 沒錯,不是砍整個字串的尾巴,而是縮小被標記成要縮小的字
嗯嗯,那你進到 tagged template 去判斷要縮小的字的時候,是從進來的參數順序判別的嗎?
順序怎麼判別 @@

我的意思是:
```
limitLength(28)`[相似度:${Math.round(similarity * 100)}%] \n ${addEllipsis(text)}`
```

```
limitLength(28)`${addEllipsis(text) \n [相似度:${Math.round(similarity * 100)}%]}`
```
tagged template 有辦法去判斷,他只要縮 `${addEllipsis(text)}` 的嗎
他應該是沒辦法用參數解析去判斷吧,噢看到你說的了你要讓 addEllipsis 回傳 object 或 function …
是靠 addEllipsis 與 limitLength 這兩個 function 建立某種 protocol 來偵測誰要變短的

以這個為例
```
limitLength(['幫您查詢「', addEllipsis(event.input), '」的相關回應。'], 100)
```

我可以這樣實作
```
function addEllipsis(str) {
return (limit) => str.length > ? str : str.slice(0, limit-2)+'⋯⋯'
}

function limitLength(tokens, limit) {
const usedLength = tokens.reduce((length, token) => typeof token === 'string' ? length + token.length : length, 0)
const lengthLeft = limit - usedLength;
return tokens.reduce((concatenated, token) => {
if(typeof token === 'function') return concatenated + token(lengthLeft);

return concatenated + token;
});
}
```
lucien 14:36:45
trim 是做全部字串還是輸入字串啊
lucien 14:57:00
長度限制是全文還是輸入部分?
lucien: 全文。
因為 LINE reply API 是對全文長度做限制啊⋯⋯
這整個討論就是因為 LINE api 對全文長度做限制
我們又一狗票的 template string
例如說 LINE 限制你這個地方只能填 100 字
你的回答樣板用掉了 10 個字
那剩下就只有 90 字
現在的問題就是
例如說,我希望每則回應前面加寫一個「`[相似度: xx%]`」
你的樣板就變長了,後頭接的回應文本字數就要更少
之前我們改樣板之後忘記改 truncate 長度,然後就悲劇啊
LINE server 直接不給我們回傳
使用者用起來就是,跟 bot 講到一半 bot 就沒回應
然後我們還有這種要 truncate 的字在中間、樣板在兩邊的:
`幫您查詢「${addEllipsis(event.input)}」的相關回應。`
所以不能單純只在整個字串的最後頭加上「⋯⋯」
喔喔那我搞錯了
我範例改了
lucien 15:10:12
如果是輸入部分,那為什麼不讓 `addEllipsis ` trim 呢?
lucien 15:27:46
tag template literal 大致上是這樣的感覺
ggm 15:32:50
所以你必須要做一些 function or object 去負責和 你所實作的 tagged template 構通
mrorz 15:32:55
是呢
ggm 15:33:23
而這些 function or object 大概只會被用在 tagged template
mrorz 15:34:35
另一種正規的做法就是 sprintf 那種
```
format(`[相似度:${similarity}%] \n %s`, [text], 40)
```

然後在 replace `%s` 的時候
順便加上 ellipsis
ggm 15:34:46
我要說的是,他並不是一個普通的 shorten 而是 shorten only for tagged template ?
lucien 15:35:03
嗯…突然覺得好像沒有比較好讀呢XDD ,因為要預先知道 shorten 會做特殊標記
lucien: 沒錯,這就是我覺得不一定好讀的地方 xd
mrorz 15:35:08
tagged template 只是一種實作方式呀 @@
lucien 15:35:18
如果第一次看的人一定會覺得怪怪的
mrorz 15:35:26
不用 tagged template 就是做 string replacement (像 ‘%s’)
mrorz 15:35:43
或者是自己拆字串(自己先拆成陣列)
ggm 15:35:46
是可以把 shorten 命名成 tagged_shorten 解決混淆的問題
mrorz 15:35:59
tagged template 就只是一個語法會幫你拆而已
ggm 15:36:05
是呀
ggm 15:36:28
好處就是拼接的時候可以留著可讀性
lucien 15:36:48
string replacement 感覺讀起來比較直觀?
mrorz 15:37:01
lucien: 沒錯,這就是我覺得不一定好讀的地方 xd
mrorz 15:37:01

嗯…突然覺得好像沒有比較好讀呢XDD ,因為要預先知道 shorten 會做特殊標記

lucien: 沒錯,這就是我覺得不一定好讀的地方 xd

ggm 15:38:40
就是為了使用 tagged template 而得製作另外的 function
ggm 15:39:31
但是你如果有很多個 template 可能就會有用吧(勢必也會有一些 function for tagged template )
ggm 15:40:11
啊另外我還不懂的是 為什麼 tagged template 比較 fp 呀?
lucien 19:08:59
語法上比較像一個 decorator 去處理啊
ggm 22:09:35
可是 decorator 是 fp 的特色歐?

2017-06-16

lucien 00:22:42
decorator 不是呢
yhsiang 00:26:45
ggm 完全不是啊 XD
lucien 00:27:38
糟了,為什麼tag template literals比較FP,我不會說
lucien 00:33:51
我覺得他看起來比較declarative
mrorz 10:35:15
所有看起來神秘的語法
我們都可以說他看上去比較 FP
mrorz 10:35:28
瞬間增添神秘的美感
lucien 10:35:43
是這樣的嗎?😂😂
lucien 10:36:41
因為mark function 像一個 monad wrapper吧
mrorz 10:37:21
所有看起來神秘的語法
我們都可以說他看上去像是個 monad
mrorz 10:37:46
我們要努力培養雅量
lucien 11:18:37
我們的 mark function 真的很像 monad 啊,把數據封裝成一種 type,然後 limitLength 打開他來做事情
lucien 11:19:01
只是我們沒有再封裝回去 orz

2017-06-17

ggm 02:22:52

有人看過這個網站嗎 ? ( via <@U4DKKP76E> ) <http://www.mygopen.com/>

ggm 02:24:34
這個厲害耶!
lucien 02:26:14
Wow
pofeng 02:26:24
@pofeng has joined the channel
lucien 02:27:16
方向是一樣的產品!
delightfullychaotic 02:27:44
@delightfullychaotic has joined the channel
lucien 02:28:02
感覺他們是手動處理呢
ggm 02:46:03
他們的粉絲團 XD
hsiaoting 04:12:29
@hsiaoting has joined the channel
Michael Hsu 15:57:59
@evenchange4 has joined the channel
mrorz 20:14:05
跟泰國那個一樣嗎
mrorz 20:15:44
mygopen 有列在去年最古早的提案 hackpad 裡頭
https://g0v.hackpad.com/-LINE-bot-Zb4bFLB7pnv

英凱提醒,他會有錯誤的資訊澄清謠言的狀況,因此要注意

g0v.hackpad.com

真的假的 LINE bot

***上層 Hackfoldr:<http://beta.hackfoldr.org/rumors> / <http://謠言.大平台.tw|xn--zz2a3v.xn--kpr34ji6e.tw>*** 專案簡介 2016/12/17 提案影片:<https://www.youtube.com/watch?v=IX7Vp3DYOFk&amp;index=11&amp;list=PLdwQWxpS513CcFIWolRQQg-THPjiCnLgV> 2016/12/17 提案投影片 2016/10/15 提案影片: <https://www.youtube>.

mrorz 20:17:07
目前除了泰國與印尼的之外
還沒遇到去年列的 related work 之外的網站 XD
clementtang 20:50:08
@clementtang has joined the channel
mrorz 21:10:03
我發現一個尷尬的狀況
mrorz 21:10:14
這則文字其實對應到兩種影片
mrorz 21:11:03
他在 LINE 轉傳的時候
mrorz 21:11:15
是文字與影片檔案分成分開的訊息一起轉發
mrorz 21:12:17
有相同狀況的回報文章有下面 3 篇:
https://cofacts.g0v.tw/article/AVrGYUx3yrDaTqlmmqTr
https: