博客园的成长史,全都烙印在从古至今的 400 多万条评论里了

by Conmajia

网站的成长史

每一个大神都是从菜鸟成长起来的。每一个个人网站,也都是从简陋的HTML开始的。

这个过程也许对天才来说很短暂,但多数人还是会经历一些漫长的成长。比如博客园BKY

▲ BKY 现存的第一篇帖子,编号146

这个一开始由 dudu 个人完成的向博客堂致敬的网站,在15年前刚刚诞生的时候,谁也没有想到它能活到今天并成长到现在的规模。甚至阿杜本人在当时也只是以一个爱好者的身份在玩,像个初哥似的诚惶诚恐。

▲ 现在的站长们可能无法体会和读者商量着来的感觉,毕竟可以一键建站了

回帖评论,是博客站长和读者最直接的互动方式,也是BKY成长的历史。BKY早期的功能,就是在站长-读者这样的对话当中一步步完善下来的。

然而不管前端还是后台,BKY的代码写得是真的随心所欲,可能这就是爱好者的风格吧。我在研究(吐槽)过程中,抓取了BKY全部400多万条评论。正是这些评论,让我看到了BKY的几乎整个成长史。

▲ 只有闲人,才会去浏览过期的言谈

读者的故事

技术网站的文章,也许全都是关于技术。文章下的评论,却折射着读者各自的人生。每条评论都有一个永久编号,只要不删除,它就永远不会改变。这可能正代表着评论者那一刻的人生故事,印在了岁月的年轮上,永远不会磨灭。

当然,评论里对骂互喷也是家常便饭。

浩瀚的400多万条评论里,有读者对技术的争辩,也有他们对人生的感慨。这当中,有茫然无助的北漂族,古道热肠的从业者,也有心怀大志的学生仔,奋发图强的后进生,还有为情所困的女学生,捉襟见肘的男老师,养家糊口已经对生活麻木的中年大叔。他们甚至可能是我们身边的任何一个人。

▲ 也许技术会让人相聚,但生活的道路不止一条

我不知道留下这些评论的人后来如何。也许愿望实现了,也许感情清晰了,也许家庭和睦了,等等。当然,事实也可能向完全相反方向走去。即便他们当初只是随口说说,发发牢骚,转头就不记得了,但是不管如何,至少这也是他们活过的证明之一。

或者某一天,当我再次按下随便看看按钮时,刷新出来的评论,正是这些素未谋面的陌生人的另一部分故事。

过去的都已经过去

过去的都已经过去,曾经毕竟只是曾经。
——忘了·爱

这些历史,现在早就淹没在无数文章之中,不是我这么闲,根本不会有人想要去翻看十几年前的坟贴。就像互联网拓荒时代那些潮水般涌起,又泡沫般消失芸芸网站,谁又会去纪念呢?

只有幸存者的故事能够成为励志的传说。其他的人,不过是他们功成名就的背景墙。

最后,让我用一条评论来结束这篇文章。

The End. \(\Box\)

评论档案柜

你可以在这里查阅全部评论(截止2019.2.25,大约共418万条),说不定能翻到你看过,甚至是你本人发表的评论。

演示功能直接从BKY服务器读取,你需要登录你的账号以得到查询权限。如果读到的评论中含有恶意代码,页面有小概率会崩溃或者跳转到其他网站。杠精们不用怀疑我有没有真的采集400万,或者心疼BKY的服务器,我完全不在意它会不会挂。


你需要登录账号

登录

var f1 = function (id) { if (id < 146) id = 146; jQuery.ajax({ url: '/mvc/comment/GetCommentBody.aspx', type: 'post', data: '{commentId:' + (id) + '}', dataType: 'text', success: function (e) { if (e) jQuery('#dTable').DataTable().row.add([id, e]).draw(false); }, error: function () { jQuery('#dTable').DataTable().row.add([id, '(消失的评论)']).draw(false); } }); }; var f2 = function () { var c = 0; var strt = Math.abs(numeral(jQuery('#nStart').val()).value()); jQuery('#nStart').val(strt); var cnt = Math.abs(numeral(jQuery('#nCount').val()).value()); jQuery('#nCount').val(cnt); var tid = 'id' + strt + '-' + cnt; set('tid', tid); jQuery('#nStart').attr('disabled', true); jQuery('#nCount').attr('disabled', true); jQuery('#bStart').addClass('disabled'); jQuery('#bStart').attr('disabled', true); jQuery('#bRandom').addClass('disabled'); jQuery('#bRandom').attr('disabled', true); jQuery('#bStop').removeClass('disabled'); jQuery('#bStop').attr('disabled', false); get('fnClear')(); jQuery('#loading').removeClass('hidden'); jQuery.doTimeout(tid, 100, function () { get('fnGet')(strt + c); jQuery('#ld-percent').text(numeral(c / cnt).format('0.0%')); c++; if (c != cnt) return true; else get('fnStop')(); }); }; var f3 = function () { jQuery.doTimeout(get('tid')); jQuery('#nStart').attr('disabled', false); jQuery('#nCount').attr('disabled', false); jQuery('#bStart').removeClass('disabled'); jQuery('#bStart').attr('disabled', false); jQuery('#bRandom').removeClass('disabled'); jQuery('#bRandom').attr('disabled', false); jQuery('#bStop').addClass('disabled'); jQuery('#bStop').attr('disabled', true); jQuery('#loading').addClass('hidden'); }; var f4 = function () { jQuery('#dTable').DataTable().clear().draw(); }; var f5 = function () { var strt = Math.floor(Math.random() * 4186614) + 1; jQuery('#nStart').val(strt); var cnt = Math.floor(Math.random() * 300) + 1; jQuery('#nCount').val(cnt); get('fnRetrieve')(); }; set('fnGet', f1); set('fnRetrieve', f2); set('fnStop', f3); set('fnClear', f4); set('fnRandom', f5); if(isLogined) { jQuery('#need-authentication').hide(); jQuery('#authenticated').removeClass('hidden'); } jQuery('#dTable').DataTable({ scrollY: 480, scrollCollapse: true, "deferRender": true, "lengthMenu": [ [10, 25, 50, 100, -1], [10, 25, 50, 100, "全部(小心你的浏览器)"] ], language: { "sProcessing": "整理中...", "sLengthMenu": "每页显示:\_MENU\_", "sZeroRecords": "没有找到内容", "sInfo": "上面是第 \_START\_ 至 \_END\_ 条,一共找到 \_TOTAL\_ 条", "sInfoEmpty": "什么都没有", "sInfoFiltered": "(由 \_MAX\_ 条过滤)", "sSearch": "文字过滤器:", "sEmptyTable": "什么都没有", "sLoadingRecords": "整理中...", "oPaginate": { "sFirst": "第一页", "sPrevious": "◄", "sNext": "►", "sLast": "最后一页" }, "oAria": { "sSortAscending": ": 升序", "sSortDescending": ": 降序" } } }); jQuery('#bStart').click(); jQuery('#nStart').val(200); jQuery('#nCount').val(100);
posted @ 2019-02-26 09:33  Conmajia  阅读(4063)  评论(41编辑  收藏