中文互聯網崩塌,平台應當提供備份下載
相關閱讀:【404文庫】何加鹽|中文互聯網正在加速崩塌
今天有篇文章很火,早上剛看到才幾千點擊,現在已經好幾萬了,等我寫完估計已經10萬+了。文章標題叫《中文互聯網正在加速崩塌》,大致意思是說很多互聯網內容已經消失不見了,尤其是2005年以前的。但看朋友圈轉發,則遠不局限於2005年前,大家談的更多是這幾年的事情。
這裏麵有很多角度,技術問題、經濟問題、監管問題……但之所以戳中人心的,我猜還是長期主義的衰敗,由此讓人想到,你不僅沒有未來,甚至沒有過去,這種個體不能承受生命之輕的痛楚。
可談的很多,但這裏隻想談一點:給用戶提供備份下載服務是互聯網內容平台的基本義務。光哀歎沒用,我們總得提點具體的訴求才行。
先回顧一下鄙人在互聯網上生產的內容,如今安在?
最早是天涯,現在沒了,去年大家讓邢明(天涯老板)搞個打包下載個人內容的收費項目,也沒見他搞出來,真是讓人無語。
然後是鳳凰網,當初瘋狂卷自己,一開始天天寫,後麵隔天寫一篇,少說也寫了一兩百篇“評中評”,現在欄目沒了,從文章頁點進欄目頁也404了。
再後麵是騰訊微博,嗯,也沒了。
還有騰訊大家,這個我迄今寫得最認真的專欄,雖然不多,也沒了(我從郵箱中找了部分出來發在公號)。
還有豆瓣,雖然久不更新,也收到過兩次通知:一次通知我的一篇N年前發的《悲情城市》影評被刪了,把備份內容發給我;還有一次通知我同樣是N年前做的《農民問題的書單》卷首語被屏蔽了,我去改了一下。
我現在最操心的就是朋友圈內容,很久前就說,誰要開發一個朋友圈備份工具,我願意付費(100塊一次)使用。等了兩年沒等到,準備自己動手,找了個程序員朋友合作,他開發我運營,但這哥們半天沒動手,另外也擔心被微信官方封殺,拖著拖著就黃了。寫這篇文章的時候又搜了一下,兩個月前有個技術博主倒是做了了一個,但看反饋,產品還有瑕疵,好像目前並不能備份全部內容,尤其是發得時間比較長,內容比較多的。
事情既然到了今天,我覺得必須得給互聯網平台公司提出一個明確的要求,開發相應功能以保障用戶備份自己內容的權利。
如果說之前大家還相信這些內容可以永續留存的話,現在這個夢已經破滅了,你們已經搞砸了這麽多次,為什麽還不留個後手呢?
道理很簡單,內容是用戶創造的,理所當然擁有所有權。六七年前霍炬兄就寫過一篇《互聯網完蛋了,已經。》,講得非常清楚,裏麵還提到了微信朋友圈:“理論上說它應當屬於用戶,但實際上用戶拿不到它,甚至沒法備份它,隻能被企業利用。一個比較直觀的例子:你能很容易的備份自己的朋友圈嗎?……朋友圈本來完全是你自己創造的數據,最後你反而沒有對它的控製權,這就是現在這個時代的荒唐之處。”
分析前麵我個人的案例,內容湮滅不外乎兩個原因,一個是經濟原因,比如公司經營不下去(天涯),產品運營不下去了(比如騰訊微博),一個是政治原因,比如對所謂敏感內容的承受力下降(比如豆瓣),比如產品被迫下線(比如騰訊大家)。而這兩大原因,在今天愈發嚴峻,所以開頭提到的那篇文章才會格外觸動大家的心弦。
大環境不好,大家都能理解。凜冬將至,公司都在未雨綢繆,搞降本增效,收縮投資。但這種情況下,就完全不考慮一下用戶嗎?你們天天喊的“用戶至上”是被狗吃了嗎?這也不是多麻煩的事情,外麵的程序員這麽不方便都能幹,你們自己開發還不是分分鍾的事情?非不能也,實不為也。
請注意,這隻是要求自我備份,不是要求在互聯網永續留存,不需要公司付出成本。萬一哪天產品要下線,公司要倒閉,好歹給用戶留點念想——這麽說可能不吉利,但你能保證你公司產品能一直經營下去嗎?
好,就算微信這樣的產品,騰訊這樣的公司,我相信它也許比我活得還要久(我也不怕這麽說不吉利),但你能保證你能扛得住壓力,不封我賬號嗎?
如果既不能保證產品永不下線,公司永不倒閉,也不能保證不刪我內容不封我賬號,還有什麽理由不給我備份呢?
對了還有一個特別愚蠢不值一駁的觀點,認為互聯網上的內容水得要命,本來也不值得留存,對此不必在意。這實在是傻得冒煙,因為價值總是因人而異,在你看來一錢不值,在我看來可能千金難買。
舉個例子,我翻到了2013年4月5日我發的第一條朋友圈,內容是這樣的:
這樣的內容,是我人生最重要的組成部分,這樣的記錄,也是我人生最珍貴的記錄——不誇張地說,這11年來,朋友圈承載無數這樣的回憶,一朝湮滅,難以想象。不消說,對很多人來說,都是如此。
為什麽這篇文章重點談朋友圈,談微信,談騰訊?因為在我看來,騰訊/微信還是可以對話的,張小龍說過很多把用戶放在第一位的話,騰訊這幾年也一直在強調“科技向善”,既然如此,毋以善小而不為。
-->
`,
"script":[{"type":"text/javascript","src":"//widgets.outbrain.com/outbrain.js","async":"async"}]
}
, "gg_rightside": {
"html":`
`,
"script":[{"type":"text/javascript","src":"//widgets.outbrain.com/outbrain.js","async":"async"}]
}
, "gg_duturandom": {
"html":`
`,
"script":[]
}
, "gg_square": {
"html":`
`,
"script":[]
}
, "gg_topbanner": {
"html":`
`,
"script":[]
}
, "gg_middlesquare": {
"html":`
`,
"script":[]
}
, "gg_dutu": {
"html":`
`,
"script":[]
}
, "gg_botline": {
"html":``,
"script":[]
}
, "gg_dututop": {
"html":`
`,
"script":[]
}
, "gg_shipintop": {
"html":`
`,
"script":[]
}
, "gg_inContent": {
"html":`
`,
"script":[]
}
, "gg_shipinrandom": {
"html":``,
"script":[]
}
, "gg_sideSticky": {
"html":`
`,
"script":[]
}
, "gg_bottombanner": {
"html":`
`,
"script":[{"type":"text/javascript","src":"//widgets.outbrain.com/outbrain.js","async":"async"}]
}
, "gg_marquee": {
"html":`
`,
"script":[]
}
}
const adEnv={
"gg_header": {
"html":``,
"script":[{"type":"text/javascript","exec":` var googletag = googletag || {}; googletag.cmd = googletag.cmd || []; var pbjs = pbjs || {}; pbjs.que = pbjs.que || []; `},{"type":"text/javascript","src":"https://adncdnend.azureedge.net/adn-hb/adn.wnx2.js","async":""},{"type":"text/javascript","src":"https://adncdnend.azureedge.net/adn-video/WenxuecityPlayer.js","async":"async"}]
}
}
const wxcEnv = {
"base":{
"exe":[],
"src":[
{"src": "/news/js/recommendednews.js","defer":"true"},
{"src":"/js/wxcFunc.js","defer":"true"}
]
},
"func":{
"exe":[
//展示評論
'function showMoreComments(){let n = 10;for(let i=0;i
2){dom.hide();}}$("#showallcomment").show();$("#showlesscomment").hide();};hideComments();',
],
"src":[
//圖片,搜索,QR code
{"src": "/news/js/view.js?v=05132024"},
//計數器
{"src":"//count.wenxuecity.com/service/count/script/do.php?type=news&id=125581986&n=0&out=jsval","defer":"true"},
]
}
}
function wxcCode(){
wxcEnv.base.exe.forEach(x=>{
let tag = buildAdcode(x);
document.head.append(tag);
})
wxcEnv.base.src.forEach(src => {
let tag = buildSrc(src)
document.head.append(tag);
});
wxcEnv.func.exe.forEach(x=>{
let tag = buildAdcode(x);
document.body.append(tag);
})
wxcEnv.func.src.forEach(src => {
let tag = buildSrc(src)
document.body.append(tag);
});
}
function adcode(){
let adkey = Object.keys(ads);
adkey.forEach(x=>{
let code = ads[x].html;
let div = document.getElementById(x);
if(div)div.innerHTML = code;
ads[x].script.forEach(s=>{
if(Object.keys(s).indexOf('src')===-1){
let tag = buildAdcode(s.exec);
document.body.append(tag);
}else{
let tag = buildSrc(s);
document.body.append(tag);
}
})
})
}
function baseCode(){
let baseKeys = Object.keys(adEnv);
baseKeys.forEach(x=>{
adEnv[x].script.forEach(s=>{
if(Object.keys(s).indexOf('src')===-1){
let tag = buildAdcode(s.exec);
document.head.append(tag);
}else{
let tag = buildSrc(s);
document.head.append(tag);
}
})
})
}
function buildAdcode(script){
let tag = document.createElement('script');
tag.innerHTML = script;
return tag;
}
function buildSrc(obj){
let keys = Object.keys(obj);
let tag = document.createElement("script");
keys.forEach(key=>{
tag.setAttribute(key, obj[key]);
})
return tag ;
}