站点正在导入数据,暂时处于只读模式:这段时间里无法登录,也不能发帖或回复。

挖坑已填——人民英雄紀念碑(誠實wiki)

NodeBE4

有些想法,希望跟大家探討出一個大家都感興趣的方向和方案,能搞個小組更好。我技術垃圾,天馬行空的不敢想,只能想些屬於小打小鬧的點子,大家不必拘泥與我的條條框框。

另一個想法是 github pages上的純匿名論壇

第一個想法是

人民英雄紀念碑(誠實wiki)

1 概述

惡俗wiki的正義版,不要讓英雄被忘記。

2 功能

主要就是兩個

  • 第一把人物的wikipedia頁面抓過去顯示
  • 第二有點贊和瀏覽量統計功能,讓大家對人物匿名點贊,顯示瀏覽量。
  • 第三(可選)自動蒐集人物相關新聞報道等最新動態。

3 方案

(只是草案,我是技術垃圾,歡迎推翻重來。)

  • github page平臺
  • 頁面功能主要由js實現(從github repo讀json文件,渲染成html)
  • 數據存在repo的json格式文件裏
  • 互動功能:前端api掛在vercel上,寫github repo裏的json
  • 後臺功能:會NLP的寫個自動提取跟人物相關的新聞,github action運行定期任務,自動提取新聞到人物頁面。實現跟蹤比如許章潤有關的一切新聞。新聞可以直接從 git.io/JJCxX 的repo裏讀。

這個方案主要考慮的是serverless + 全透明 + 部署的代碼可驗證 (參考duty-machine)

状态更新

为保存记录,更新一下进展

坑基本填好了,我一个学文科的干这活容易吗。

回应几点讨论:

  • 域名: 不打算买域名,但是...
  • 任何网站都可以host本英雄榜的镜像,如官方鏡像,方法在这里,欢迎站长博主们部署,欢迎朋友们参与、传播。
  • 评论区,目前需要github帐号才能评论,是否开放匿名评论,看大家的意见。
  • 界面和美工,欢迎专业人士提出意见,基本原则是精简。
  • 还可以有哪些功能:人物页面还可以加入近期Twitter相关评论,人物大头照可以有举报纠错功能,匿名评论可以有,根据大家的反馈,可以逐步添加。
  • 安全:基本上就是对duty-machine的方案的发挥,头像图片也都自动替换成了imgur的图。
4
  1. thphd
    thphd2047前站长

    其实直接用mediawiki也是可以的,条件是有的,俺这里不缺服务器,缺能战斗且信得过的人手。

    只不过,我在2047上开一个wiki,那大家为啥不去wikipedia对吧,都翻墙出来了,搜还是能搜到的。

    恶俗之所以能成是因为他们抓到一个痛点,就是出道,好比膜乎也抓到了一个痛点,就是辱包。辱和出道是最荷尔蒙的。

    聊政治,太严肃了曲高和寡,太干货了入不敷出,要么就是搞得像精神病院一样一堆人在阴阳怪气。偶尔来一个给大家放猛料的好心人,最后发现是建国骗子,类似这样的事情。感觉人类还是更偏爱荷尔蒙类的项目。

    这种荷尔蒙项目还有很多,比如pornhub,澳门首家线上赌场,诸如此类。如果开在github上是good idea,那么这些站全都会开在github上。。。另一篇的回帖已经提了经济学,这里不提了。

    离题了,不要介意。

    总结就是,做可以,但是要比现有的东西(比如wikipedia之类的),更加能留住用户。搞点赞功能是可以,但是纯点赞也不可持续,允许匿名留言会被水军刷爆,等等诸多经济学考量。

    我做2047,2047的账户本身得是一个门槛,有门槛才有社区,有社区(有稳定的社交联系、互信机制)之后才能在上面搭建更多的东西,包括你建议的这几个idea。让陌生人一起来建巴别塔是很困难的,这方面我比较欣赏知乎早期发展的路线。

    2
  2. NodeBE4
    NodeBE4

    @thphd <#7124762> 功能很容易實現,我也可以用django完成。但這裏想探討的是如何做到serverless,以及某種意義上的去中心化。

    另外,我可能沒有把功能描述清楚,這個idea的核心是盡可能的serverless, 對每個人,網站的數據只有一個wikipedia的鏈接,一個名字,點贊數量。人物介紹的內容是由瀏覽器端的js從wikipedia抓取呈現,不重複造輪子。相關新聞可以用jekyll simple search這樣的js插件用人物的名字關鍵詞自動搜索填充。

    不是爲了重複造wikipedia的輪子,更不會像惡俗那樣需要人工編輯,編輯還是在wikipedia上直接做。這就相當與以wikipedia爲數據庫的一個帶投票功能的名人榜,如果要server+人工管理+註冊帳號編輯那就太沒意思了,一千種現成的方案在那裏,我提那種要求的話有點侮辱自己智商。核心就是讓搭建者無成本,無風險。

    需要探討和解決的問題:比如如何防spam或者其它沒想到的問題。

  3. NodeBE4
    NodeBE4

    觀點網站 git.io/JJCxS 實現方案也很多,爲什麼我單獨選看上去非常笨的jekyll + nodejs後臺抓取,主要是因爲它無需任何維護,無需成本,我現在停止任何工作的話,它還能一直跑下去,一直自動更新內容。很多年後如果空間滿了,清空一下就能繼續自動運行。

    web開發者能想到的常規方案是用wordpress之類的模板+數據庫+服務器+域名,但是這就意味着大量的後臺維護、升級、租設施等需要人工參與的東西。有人DDOS你的網站,你還要人工處理迎戰。

    靜態網頁的優點還有響應快,比python的每個請求現生成網頁響應快多了,此外,掛在github page上無需擔任任何攻擊。總之架設後不用管的。

  4. NodeBE4
    NodeBE4

    @thphd <#7124762> 写了个展示单个英雄人物的演示页面,投票功能还没有,这个主要目的是演示如何利用wikipedia和新闻站自动填充内容。页面只需要存两个变量:

    people: 许章润
    wiki: https://zh.wikipedia.org/wiki/%E8%AE%B8%E7%AB%A0%E6%B6%A6
    

    其它都从别的网站抓

    https://nodebe4.github.io/hero/

    2
  5. thphd
    thphd2047前站长

    @NodeBE4 <#7311463> 看到了,做的不错。我得单独友链一下这个站。

    hero这个站,离名扬海外,还差一个微信/reddit 风格的评论区。


    edit:

    客户端js拉取维基百科的其中一个缺点是墙内无法工作。

  6. NodeBE4
    NodeBE4

    @thphd <#7313935> 如果有人能帮忙写个api,挂在vercel.com上,点赞和评论功能就有了。

    我设想的是这样,人物信息放在一个json文件,

    [
        {
         "wiki": "https://zh.wikipedia.org/wiki/%E8%AE%B8%E7%AB%A0%E6%B6%A6",
         "people": "许章润",
         "vote": 1,
         "hash": "xxxxxxx",
        }, 
        {
         "wiki": "https://zh.wikipedia.org/zh-tw/%E8%94%A1%E9%9C%9E",
         "people": "蔡霞",
         "vote": 1,
         "hash": "xxxxxxy",
        },
      ...
    ]
    

    api只需要两个函数,一个点赞,一个提交新的人物。点赞的api的实现方式就是直接读取这个json文件,然后给对应的那个人的vote加1。提交新人物就在主页做个表格,提交到api就添加一个item。url合法性检查在网页js实现。api直接修改github repo里的json文件,网页定期自动刷新一次。

    主页的人物索引或排行榜就根据这个json文件来由浏览器的js动态产生。

    hash就是wikipedia+名字的md5 hash,留着给加载评论区用,比如,评论的json数据就以这个hash为文件名。如果做评论区的话,就要再在api里头加一个评论的函数,也是往一个<hash>.json的文件里追加评论就行了。

    这种网站流量不会很大,基本不用考虑两个人同时提交/评论的问题,出现这种情况的话,页面js根据api反馈让用户重新点个赞或者点一下提交按钮就行了。

    1
  7. thphd
    thphd2047前站长

    @NodeBE4 <#7358484> 你会不会写API呀?

    用Flask写是最方便的,不过目前我Priority在2047上,如果你要等我来写,要等久一些

    你写好了先本地测试可用,然后把代码贴在github上,并通知我。我看到之后会放到2047的服务器上运行。

    一些提醒:

    1. 为什么要用hash作为文件名而不用直接用名字呢?
    2. 评论长度和频率应该是有限制的不然会炸掉。
    3. 你也许需要删除某些不良评论的功能。
  8. NodeBE4
    NodeBE4

    @thphd <#7360685> 沒什麼nodejs經驗,我目前考慮的是這種api

    https://github.com/duty-machine/duty-machine-form/blob/master/api/submit.js

    它自動部署在vercel.com上,而且有vercel的機器人在commit下面留言認證。

    因爲這種敏感的網站,很多人會擔心遇到釣魚網站泄漏自己IP,所以vercel是可以確保部署運行的源代碼就是他們看到的且沒有記錄IP等信息的源代碼。

    如果python開發的api能部署到vercel上,也不必拘泥於nodejs。

    用hash一是怕重名的人,也怕有人提交一些奇怪的字符或者超長的名字讓文件名不安全,或者系統崩潰。

    評論頻率在api那裏就可以限制,github也有流量限制的。

  9. thphd
    thphd2047前站长

    沒什麼nodejs經驗

    Flask是python啦,例子很简单的。

    我目前考慮的是這種api

    https://github.com/duty-machine/duty-machine-form/blob/master/api/submit.js

    这个是用nodejs写的。

    不管是python还是nodejs,你只要在你自己机器上测试了能工作,发给我之后我都可以在 2047.name 上跑起来的。

    至于2047什么时候被墙,不好说。真被墙了我可能要隔三差五换域名。

  10. NodeBE4
    NodeBE4

    @thphd <#7367425> 前面的留言更新了一下,回答了你再前面的問題。自己的服務器主要的問題是對用戶的透明度和personal access token之類的密鑰管理不方便,另外也怕有人攻擊服務器之類。我有空先看看nodejs的開發流程是怎麼樣的,目前我用js而非python是因爲我從來沒用過js不怕泄漏代碼指紋。

    1
  11. mountainsea
    mountainsea发完10个帖子,账号保持静默。账号是隔壁佛学院共用的,写的东西跟我无关,请领导不要上山下海找我。

    @NodeBE4

    你的几个项目都很不错,观点和外媒两个项目我也常常去扫一眼看看有没有我感兴趣的报道。我本来对你的新闻站有比较高的期望,也许能变成中文的hacker news,可惜了。

    我还是建议你尽量注册一个一级域名,从exposure来说会比现在用github的二级域名来说要好很多。从工程量上来说,你只用把你现在在github的指向转发给你的一级域名就好了(搜索一下custom domain for github pages site)。

    当然,注册一级域名牵扯到付费,需要当心一点,不过可以一次注册管10年,应该还好。你可以衡量一下benefits vs. risk。

    我还是很看好你的行动力和一些务实的点子的。加油!

    2
  12. NodeBE4
    NodeBE4

    @mountainsea <#7475668> 謝謝支持,域名將來可以考慮到eu.org註冊一個免費二級域名。我希望這是 一個真正由社區一起完成的項目。

    剛剛更新了一下人物列表展示功能,把前面提到的json文件加進去了。

    做了外媒之後,我覺得新聞站的意義小了,無法Tor訪問也無所謂,我自己都很少去看了,畢竟外媒網站是有近期全部新聞記錄的,即時搜索功能也很好用。

    不過新聞站的最顯著模塊網頁版RSS閱讀器我已經單獨拿出來放到了一個靜態頁面。 news

    ---更新---

    又可以从tor访问了

    2
  13. duty-machine
    duty-machine

    突然感觉我们需要一些艺术人士设计一个吸引人的界面,比如之前有个武汉肺炎逝者的纪念网页。整理这些资料当然是好的,但是感觉还不能够吸引普通人,普通人不太可能一个一个来翻,除非这些内容在改朝换代之后变成媒体启蒙的宣传内容。

    4
  14. NodeBE4
    NodeBE4

    @duty-machine <#7671344> 我找了个node.js rest api的例子学习入门,现在可以用post改写index.json,github上邀请你加入私有repo了,不过最终还是要移植到vercel。

    不过主楼里数据的存储方案确实要再考虑一下,https://raw.githubusercontent.com/ 上的文件同repo里相比的还是有相当长的延迟,raw里的数据还是不能做实时交互的应用。具体的数据,投票和评论从index.json分开也是可以的。

    你提到的翻看的问题,可以考虑用搜索框来完成,但是这样的话,就需要为每个人建立一个页面了,当然个人页面内容还是可以用github action从wikipedia抓取等方式后台自动填充。

  15. NodeBE4
    NodeBE4

    @NodeBE4 <#7699626> @thphd <#7367425>

    在github向你们俩都发出了合作邀请到,有空的时候可以搞一搞。

    另外,添加了一些说明

    https://github.com/NodeBE4/hero

    另外,@thphd 有这个repo的访问权限后,将来可以在2047搞个添加新人物的接口,论坛直接向repo提交新人物。

  16. thphd
    thphd2047前站长

    将来可以在2047搞个添加新人物的接口,论坛直接向repo提交新人物。

    你应该会做一个静态的提交页面,里面用js完成提交

    做好告诉我,我把这个页面添加到2047的某个url即可。

    PS:英雄榜缺大头照。

  17. NodeBE4
    NodeBE4

    @thphd <#8134090> 现在投票、添加新人物的功能都有了,就在首页,还是抄 @duty-machine 的作业。

    提交之后,机器人会自动搜集数据,将来大头照也靠机器人找google要。

  18. thphd
    thphd2047前站长

    @NodeBE4 <#8534103> 我看index.html里面有 {{site.baseurl}},意思应该是让github pages把这里填上合适的字符。

    那我如果直接clone你这个repo,并不能直接host里面的内容,必须先做一些字符串替换,对吧。

  19. NodeBE4
    NodeBE4

    @thphd <#8549730> 要host的话可以定期clone gh-pages branch,网站的更新是靠github action完成,现在是有新人物被提交或每个小时自动刷新一次。

    github pages只是一個靜態網站的host,具體來說,是靠github action運行jekyll build生成純靜態網站,放到gh-pages分支,大家在nodebe4.github.io/hero所看到的靜態頁面,就是repo的gh-pages的內容,而不是master branch的內容。

  20. NodeBE4
    NodeBE4

    @thphd <#8549730> 受到你的啓發,我突然想到,這個項目應該往支持分佈式多鏡像部署的方向發展,而數據的彙總都在github上項目本身的repo. 完全可以做到的。

    這樣,任何網站都可以host這個英雄榜,而數據都是同一個來源。

  21. NodeBE4
    NodeBE4

    状态更新

    为保存记录,更新一下进展

    坑基本填好了,我一个学文科的干这活容易吗。

    回应几点讨论:

    • 域名: 不打算买域名,但是...
    • 任何网站都可以host本英雄榜的镜像,方法在这里,欢迎站长博主们部署,欢迎朋友们参与、传播。
    • 评论区,目前需要github帐号才能评论,是否开放匿名评论,看大家的意见。
    • 界面和美工,欢迎专业人士提出意见,基本原则是精简。
    • 还可以有哪些功能:人物页面还可以加入近期Twitter相关评论,人物大头照可以有举报纠错功能,匿名评论可以有,根据大家的反馈,可以逐步添加。
    • 安全:基本上就是对duty-machine的方案的发挥,头像图片也都自动替换成了imgur的图。
    2
  22. NodeBE4
    NodeBE4
  23. thphd
    thphd2047前站长

    我感觉我得做一个oauth之类的东西,允许别人【用2047账号登录】。

    2
  24. NodeBE4
    NodeBE4

    @thphd <#9748528> 目前我的设想是网页可以分布式部署,任何网站都可以按照GPL 3协议部署镜像,但镜像里的数据源、新人物提交、点赞都指向这个repo本身。这样这个榜单的人物和投票都有比较广泛的来源。

    当然,直接把项目整个fork过去,做一个独立运行的榜单也是可以的,但是这样受众就有限,榜单本身的意义不大了。维基百科之所以强大就是因为每个人都访问同一个维基百科。

    2