信息茧房

自打上班之后,真的是越来越懒了……本来这篇文章一个月以前就想写了,但是一直拖到今天才开始。

我本人是学计算机的,毕业之后也理所应当的进入了某IT公司,从事推荐算法的研究。说来也奇怪,我从小对计算机感兴趣,幼儿园就开始接触计算机,小学还参加了计算机兴趣小组,自从开始上计算机课,我就是班里的课代表。08年到21年,我更是在几所大学里完成了3个计算机学位。虽然自己对技术很感兴趣,但是自己一直对技术的应用保持了一个很排斥态度。比如滴滴打车,在刚刚出现的时候,我依旧选择招手拦车,即使用滴滴打车,也会选择出租车服务,直到2,3年后,我才慢慢接受滴滴打车的快车业务。同样的,我现在虽然每天在研究如何为用户展示用户想看的内容,但是一直觉得推荐系统是一件很邪恶的事情。

这就要从很多年前说起了。小时候我是一位根正苗红的社会主义接班人,但是逐渐的,随着家庭的网络普及,我开始接触到各种渠道的信息。这些信息,改变了我很多想法。人嘛,都是一样,只愿意相信自己愿意相信的东西,并且尽可能的为自己找到证据。于是,我也开始在网络上抱团取暖。大学时,还参加过中文网志年会,接触了很多和我有同样想法的人。于是,自己每天接受到的信息,大体上就是一些如今可能连想都不能想的内容了。自己的RSS订阅里的内容,除了技术和游戏相关的内容,剩下的就是一些观点犀利的博客和媒体。虽然至今,我也不觉得自己的想法错了,但是在当时,我也慢慢有一种错觉。我觉得大家的想法应该都和我一样,什么五毛党和如今的小粉红之类的,都是少数人。直到后来被一个小学同学在校内上莫名奇妙的数落一通并拉黑之后,我才发现,我其实是一个少数派。这就是我的RSS订阅内容无形中为我建立起的信息茧房。当然了,因为RSS订阅主要是靠自己往里面添加各种源,所以这可能就是一种作茧自缚的感觉……

后来,随着机器学习的普及,各种推荐系统也被摆上台面。你看了某个帖子,就会给你推更多相关帖子。你看了某个新闻,就会给你退更多相关的新闻。你买了某样东西,就会给你退更多相关的东西。毕竟AI是不会骗人的。推荐系统增加了用户粘性,增加了用户的停留时间与点击量,用户也觉得看到了更多自己想看的东西。真是一片欢乐祥和的氛围。但是,真的是这样么?你以为你看到了自己想看的东西,殊不知,你看到的,其实是推荐系统(甚至是别人)想让你看到的东西。这无形中,就又形成了信息茧房。获取的内容越来越多,但眼界却越来越窄。所以现在,我反而更喜欢从一些传统媒体上接受信息,比如广播,电视,报纸,杂志。我坚信,虽然这样的方式很低效,而且这些信息可能并不全是我喜欢的内容,但是他们会为我带来一些新的内容和角度。不像现在很多APP,你随便搜集个关键词,你就掉入了一个无底深渊,再也爬不出来了。

回到正题上,我之所以想写这篇文章,并不是因为我对某些app有什么怨言,而是因为这么一件事。最近几年,国内舆论环境更加收紧,在宣传的作用下,小粉红是越来越多。尤其是去年疫情来袭,由于体制的原因,我们在疫情的处理的效果上,真的非常棒的。于是网络上,真的是一片欢乐祥和的景象,甚至有些人开始觉得,作为世界第二大经济体的中国,已经可以和美帝掰掰手腕了。连我都被感动了呢,我说的是真的。

我平时工作时,有听东西的习惯,听听音乐,听听播客。所以我前段时间,就想找一些国内的新闻节目来听听,虽然人在美帝,但是,还是想了解一下国内发生的事情。但是我发现,国内的主流媒体,并没有提供这样的服务,而且由于各种限制,个人也很难发布时政新闻类的播客节目。所以,我就想看看外网有没有类似的内容。你别说,还真的有,赶紧订阅了几个频道。但是,听了几期就听不下去了。这些节目大多都是一个套路,通过一件国际新闻开头,评论一番,然后矛头一转,开始夹带私货。尤其很多真的都是一些无端的指控。时至今日,我都不觉得我们的体制是好的,但是听这样的胡邹白咧,真的是非常没有营养且浪费时间的事情。于是赶紧就把这些播客订阅都取消了。

仔细想想,这何尝不是一种信息茧房呢?国内的新闻,作为宣传的手段,肯定只给你一些筛选过的消息。甚至是非常明目张胆的断章取义。而由于国内互联网的封锁,普通人很难在中国以外的媒体平台发声,这就导致了这些平台被另一拨人占领。于是乎,大家都成为了井底之蛙。毕竟,坐井观天的事情是最舒服的了……很可惜,我觉得这一大一小的信息茧房的壁垒,短时间内很难打破了。作为我自己,我只能提醒自己,不要掉进任何一个信息茧房,兼听则明吧……不过,这真的太累了-。-

2020年终总结

实际上今天已经是美东时间1月4日了,才突然想起来,好像很多年没有写过年终总结了。没准儿大学之后就没有写过了,而现在博士都快毕业。之所以说快毕业,是因为还没有正式毕业。虽然答辩过了,但是最后的论文还没有交。还需要找雷妈妈帮忙看看,改改语法错误。提前感谢雷妈妈。

2020年,由于疫情,从春假开始,大概就是3月初吧,我就再也没有在餐厅吃过饭,没有乘坐过公共交通了,估计这种情况还要持续几个月。也是因为疫情,从19年9月1日回到美国之后,我就再也没回过国了。早就破了我连续离开家的记录了,并且记录还在持续,估计这种情况还要持续个一年半载。同样是因为疫情,哪里也不敢去,从18年12月20号从夏威夷度蜜月回到匹兹堡之后,我就再也没有坐过飞机了,也算是个小记录吧,估计这种情况也要持续几个月。人生中又浪费了一个夏天,希望2021年的夏天可以有条件多出去走走。

话说从96年9月开始上小学,我就一直没有离开过学校。虽说硕士毕业到博士学习开始之前,工作了两年,但是也是在UIC工作的。所以其实并没有脱离学校的环境。终于,在2020年12月初,博士课题答辩成功,并且正式成为了一名快乐的小班儿逼。开始了自己的职业生涯。当初说读博士是为了找教职工作的,现在也已经被金钱蒙蔽了双眼了。其实我还是很喜欢教课的。只不过,我花了几年的功夫认识到,我可能并不太适合搞研究。如果有只用教课,不用搞研究的教职,我可能还是会很心动的。

其实去年主要就是发生了这些值得记录的事情,也算是人生大事吧。不过说起来,我已经一年没有和我导师在现实中见面了。去年1月份,导师生病做手术去了,回来时正好赶上疫情,学校都关门了,我们只能网上聊天了。希望今年在离开匹兹堡之前,能有机会再见一面,要不然下次回来就不知道啥时候了。匹兹堡太冷了。

最后,希望今年能顺利完成毕业的最后一步,提交论文。并且,4月底,5月初疫情能够得到控制,学校能够举行毕业典礼。我一直很看重毕业典礼这件事,确实不希望最后只有一个网络毕业典礼,这样就太不帅了。

祝自己和家人在新的一年,生活顺利吧。

2020年9月1日

不知道我的博客时区设置的是哪里,如果是国内的话,现在其实已经9月2日了。可是我现在还在美国东部,时间是9月1日的晚上11点30分。一年前的今天的这个时候,我又一次回到美国,继续攻读我的博士学位。没想到,因为疫情等各种原因,我已经一年没有回家了。

虽然我从08年开始,就在外念书,但是因为天津人骨子里都恋家,所以每年都能回国2到3次。甚至来到美国之后,也依然保持着这个习惯。可能在这之前,最长一次连续离开家的时间记录是2017年的1月初到8月初,一共7个月的时间。当时因为不知道导师会不会收我,所以整个夏天,就呆在了匹兹堡。没想到,今年,是我第二次在匹兹堡过夏天,但是因为疫情的原因,几乎哪也没去。就连买了钓鱼证,也只去钓过3,4次,每次还都只能钓到Bluegill。

其实今天也没有啥特别想说的,就是想记录一下自己连续离家1年这件事。下一个记录将在12月中旬达成,也就是连续1年没有做飞机……最可气的是,我今年还是美联航的金会员,完完全全浪费了,感觉血亏,幸亏会籍可以延长到明年,但是不知道明年能飞多少次。毕竟,如果真的开始工作了,回国的机会就更少了。希望一切顺利吧。

我老了

去年春天,右腿膝盖突然还是疼。虽然觉得是旧伤复发,但是以前疼两天就好了,然而这次断断续续疼了半年多。时至今日,我都不敢进行太剧烈的运动。

福无双至,祸不单行,上周末开始,突然没有征兆的疼了起来。虽然修养了一周,疼痛有些缓解了。但是还是不得不开始想想自己真的变老了。人到30,身体真的是不行了?

我曾经告诉自己,永远不服老,即使身体老了,还是得保持一颗年轻的心,所以我也一直在给自己塑造一种闷骚搞笑的形象。目的,当然是不希望身边的朋友觉得我是一个年轻人。

直到最近,我在和朋友讨论播客(https://tlxxfm.com)的内容时,我发现,我可能真的老了。大家都说,初生牛犊不怕虎,反而我现在是越来越不敢说话,或者在公共场合发表自己的观点。即使是播客的内容,我也更倾向于陈述事实,给观众更多思考的余地,但很少发表评论,生怕会扛精来说些不知所谓的话。

我还翻了一下自己的博客,年轻的自己是真的敢说,甚至敢说到自己的博客直接被墙了。反观现在,我已经很少在博客里发表这样的观点了,反而是技术类的文章越来越多。毕竟,技术是中立的。

要说自己为什么变得不敢说了,可能还得是因为大学的时候。在那个时候,我也是意气风发,总觉得自己可以通过自己的声音改变世界,所以在校内等平台,疯狂的输出自己的观点。后来有个朋友因为不能理解我的观点,于是和我吵了起来。我还在莫名其妙的时候,他就把我好友删掉了。从那以后,我们就再也没联系过了。大概已经过了10年了吧。

虽说,10年没联系的朋友有很多,但是这个人让我印象很深刻,因为他让我知道,我身边的很多朋友,并不能接受和而不同这个观点。我总觉得,我不认同你的想法,但我应该尊重你的想法。可是总有些人遇到不认同的想法时,第一反应是让你闭嘴。如果你是一个陌生人,我可能真的不介意你不理我了,但如果你是我认识的人,我还真的觉得挺惋惜的。

人们都说,随着阅历越来越多,人也会越来越成熟。随着见过听过的越来越多,人也会变得越来越不敢表达。如果成熟是变老的一个标志的话,我觉得我可能真的变老了。有机会还是应该把这个博客利用起来,即使不在公开的大型平台上发表自己的观点,但是我在我自己的独立域名博客上随便说说,总没有什么问题吧?

为Chrome插件加载Javascript

上一次(其实就是昨天),为了防止中华职棒官方的录播页面剧透比分,所以我写了个简单的Chrome插件,用来屏蔽比分。也写出了第一个版本。

虽然星期一是休赛日,甚至连比赛都没有,但是我还是觉得,如果把所有比赛分数都隐藏了,那如果我有时候还是想看到比分,这可怎么办啊。在过去的一天,我试过了一些方法,通过菜单来实现显示和隐藏所有比分,但是那个菜单做的很丑,而且,把所有比分都显示出来,还是有剧透的风险,所以,我决定要给每一场比赛加一个开关,用来显示当场比赛的分数。

肉壳是个前段小白,真的试了好久,才解决这个简单的问题。

首先,这个网站还在用table来制作表格,而且,也没有为比分栏设定id。如果每个比分栏没有固定id的话,就无法定位到这个比分,进而无法控制这个比分的显示或隐藏。所以,第一个要解决的问题是,为每一个比分添加一个id。我们使用JavaScript来解决这个问题。

var scores = document.getElementsByClassName("score");
for (var i = 0; i < scores.length; i++) {
    var score = scores.item(i);
    score.id = "score_" + i;
}

我们通过class找到每一个score,然后给他加一个id。

其次,我们需要给表格增加一列,用来显示开关,我们把开关放在表格最后面。

var tbl = document.getElementsByClassName('vod_table'), // table reference
tbl = tbl.item(0);

for (var i = 0; i < tbl.rows.length; i++) {
    var row = tbl.rows[i];
    if (i == 0) {
        var th = document.createElement('th');
        th.innerText = "显示/隐藏分数";
        row.appendChild(th);
    } else {
        createCell(tbl.rows[i].insertCell(tbl.rows[i].cells.length), i-1, 'stadium');
    }
}

然后,我们要为每一个开关,写一个function,用来把开关和分数栏对应起来。这样,在点击开关的时候,就会显示或隐藏相应的比赛分数了。

function createCell(cell, id, style) {
    cell.setAttribute('class', style);
    cell.innerHTML = "<label class=\"switch\"><input id=\"switch_" + id + "\" type=\"checkbox\"><span class=\"slider round\"></span></label>";
    var toggle = document.getElementById("switch_" + id);
    toggle.onclick = function(){toggleSwitch(id)};
}

function toggleSwitch(id) {
    var score = document.getElementById("score_" + id);
    if (document.getElementById("switch_" + id).checked) {
        score.setAttribute("style", "visibility: visible;");
    } else {
        score.setAttribute("style", "visibility: hidden;");
    }
}

这这里,开关我们用了一个checkbox,我还找来了一个css,以便让它看起来更美观。大家有兴趣可以去看看我的css文件

当然,我们要把之前写的js代码,都存放在一个文件中。最终代码的样子在这里

因为css,我们还是写在了旧的文件中,那我们刚刚写的js文件要怎么办?如何让自己的插件可以加载JavaScript?其实很简单,只要打开manifest.json,在content_scripts中加入一行"js": ["assign_ids.js"],用来加载我们刚刚创建的assign_ids.js文件就可以了。最终文件长这个样子

值得注意的一点是,在js中,在建立开关的时候,我用了一种类似hardcode的方式添加的onclick事件。这是因为Chrome插件在使用content_scripts加载js的时候,并不会一只保留js文件,所以如果只是简单的调用某个function,浏览器会找不到这个function。所以只能退而求其次的hardcode。不过我看大家好像都是这么做的,也无所谓了。

其实本来还想用这个js来替换掉比分,而不是简单的隐藏。但是发现,js会在网页加载之后才会被调用,于是有那么一个瞬间,比分是会被显示出来的。

所以这个插件的整体流程就是,默认先通过css将所有分数隐藏,等网页加载后,为每个分数添加id,并为每一行添加开关。等用户点击相应的开关时,根据开关的状态,显示或隐藏对应的比分。

未来,我会再加一个开关,用来一键显示所有比分。而且,还会为插件添加一个开关,以便用户可以关掉屏蔽比分的功能,而不需要通过后台停用整个插件。

肉壳已经为大家打包好了这个插件,大家可以直接去Github下载。

https://github.com/Rokeer/CPBLTV-Spoiler-Alert/releases

最终的网站效果如下图……终于又能看到比分咯……

看到右边的开关没?

未来,我还会继续学习开发这个插件,这两天研究一下,如何把它丢去商店里,方便大家下载……

另外,如果没有什么太大问题,我就不每次更新都为大家更新文章了。请大家关注我的Github

4月14日更新:

花了一晚上的时间把这个插件完善了一下,增加了一些功能,并发布在了Chrome Web Store中……大家可以搜索CPBLTV Spoiler Alert或访问这个链接下载使用……

v1.0.0
04/14/2020
正式版上线,并发布于Chrome扩展平台
添加开关用于显示、隐藏所有比赛分数
为插件添加菜单
用户无需停用扩展,即可在菜单中关闭此功能
为扩展添加图标
为踏浪寻星广播电台做广告
添加英文,简体中文,和繁体中文支持