目前本站缺陷的原因及处理

没办法做到快速出完所有题,进而无法保证内容及时更新。这才是最大的问题。

截至2021年4月,本站已经建立一段时间了。废话不多说,直接开始细数本站的一堆神坑(是的,80%的资金都拿去做BI了,剩下50%都拿去刷题了,还倒欠30%的工程款)。


图片点了不放大

问题的发现:

就BI工具里看到有一堆Dead clicks,于是就调查了一下。然后发现,好家伙,据我肉眼胡乱统计,80%的Dead clicks来自Mobile用户点击图片。

问题的原因:

没啥原因。Ghost自带的图片显示就是没有点击功能的。

解决方案:

Gallery popup of images when clicked?
I’m using a customized version of Casper. How can I make it so when you click on a gallery image, it gets larger for the viewer?

解决计划:

别问,问就是上面的解决方案都还没来得及看……


链接点不动

问题的发现:

有小伙伴吐槽,我就特意注意了一下。我发现国内用户的确经常遇到这个问题。至于海外用户……海外用户目前我没有观察到这个问题……(是的,我估计已经有人点不开上一个问题的解决方案了……)

问题的原因:

目测要么是Ghost的bug,要么就是AD的Bug。盲猜网络相关。

解决方案:

讲道理我猜更可能是AD的Bug。多半是点击之后,按照设置应该是会弹出广告的。但是呢,要么是某些浏览器(尤其指微信)可能干扰了这个东西。然后干扰的不太优越,就挂了……

暂时不认为是Ghost的bug。因为暂时没有观察到海外用户点击失败。尤其指那些看了题解还要看代码的,点了之后跳转到CF之后,BI工具如预期的记录了页面关闭。其间隔我不认为每个用户都能那么快。

解决计划:

再观察观察。不行就减广告。


加载时间感人

问题的发现:

我自己从国内的机器访问过。其实加载时间比较随缘。缘分到了,服务器里有缓存,那就还行。没缓存?恭喜你,你将能体验到我的那套伪CDN的神奇特性。

问题的原因:

其实两方面原因。

一是Ghost自身在mobile上的优化有限,具体见下图(别点了,不会放大的,凑近点也能看的):

桌面端的网页测速
移动端的网页测速

注意,这是google的测速,直连的那种……Ghost自身Mobile端的加载时间就比较感人,再加上我还上了一堆Mathjax之类的……

另一方面,这就要感谢我那一套伪·CDN了。因为当初设计的时候,为的是尽可能保持稳定不受干扰,且尽可能保证带宽。不惜提高复杂度和延迟。于是,别的不说,光nginx,国内用户就得过5个。我曾经测试过,延迟500ms起。

但高复杂度和高延迟带来的是较稳定的高带宽,而且是未使用cn2、GIA前提下保证带宽,就是裸的骨干网。“得益”于避免“特权腐蚀”的基本方针,导致基本不会考虑依赖“特权”,不论是线路或是公司资产。也使得事情变得比较复杂。

复杂了就容易翻车。就只能船到桥头自然沉。

解决方案:

撑死增加延迟有效时间。

解决计划:

拒绝解决。增加延迟只会缓解“某些错误”带来的痛苦,而不是改正错误。如果没有勇气改正错误,那么就请回避或者接受错误。


页面Style容易崩

问题的发现:

曾经有个小伙伴给我看过,也看到一个上传到BI的渲染结果,的确比较凄惨……

问题的原因:

还用问?css加载失败,再不就是js下载失败(尤其是mathjax)。

解决方案:

把部分第三方依赖的js弄成自己的js(尤其是mathjax)。

解决计划:

我尽快。毕竟我已经看到海外用户有时候能明显的看到画面巨变了……


评论区点了没东西

问题的发现:

曾经在BI上看到一个国内用户点击了显示评论。结果啥都没有。不止是没有评论,就连让用户写评论的地方都没有。

问题的原因:

因为我用disqus。

解决方案:

更换评论工具。

解决计划:

拒绝解决。更换工具只会缓解“某些错误”带来的痛苦,而不是改正错误。如果没有勇气改正错误,那么就请回避或者接受错误。


为什么这么多问题都不解决?

先说别人怎么做的:

两种操作(显然我选择的是第二种):

一种就像是我家楼下的路一样。我的记忆中,每年都会重新修一遍(也许是两年修一遍,也可能是半年一次)。

另一种就像Codeforces经常在比赛中比着比着就挂了。然后全场unrate。以及最近见缝插针的做题,有时候用手机看题,那个体验至少穿越10年前。

问题在于为啥连CF这样的网站不去解决这些问题?

因为我们家楼下虽然人流量确实大一些,但至少每次修的时候,我是没见路面有啥不对劲需要修的的地方。(当然,人家可能本身目标是地下的管道。)

再说我为啥延迟修这些:

理由很简单,几张图就说明了:

所以其实我的用户画像是:

  1. 印度人或者埃及人。一周内,至少50%的点击是来自印度人,剩下30%是埃及人。
  2. 果断是用电脑做题。不是说用手机读题、看题解的人不存在。但是“得益于”CF“良好的”移动端体验,一般不会有人这么干。
  3. 用英语。而且长期受到CF的语言侵蚀,对各种蜜汁英语表达都能猜个7、8分。(有兴趣可以了解一下下面这道阅读理解题,虽然这不是常态,但CF上一堆不是英语母语的人,包括出题人。)
  4. 不懂俄语。CF是一个俄国网站,网站支持英语和俄语。我大胆猜测我没有俄国本地用户的原因是,他们都懂俄语。(而且我怀疑他们可以直接坐车过去当面请教。)
  5. Google用户。说了是印度人或者埃及人。网络不成问题。
  6. 水平一般。需要看题解,说明自己没做出来。而结合上面特性,说明不仅没做出来,还在看了官方题解之后还是不会。
  7. 基本都是Windows+Chrome用户,毕竟比赛主要是面向大学生。我不认为大多数学生会选择Linux,或者有钱搞Mac(尤其是开发,不是说不好,是性价比低)。
Codeforces Round #711 Bananas in a Microwave 阅读理解题
题意此题的难点主要在于题意……以下内容全为意译。你有$m$根香蕉,你的目的是在n次操作后,问每根香蕉最早可能被操作的时间。(其中假设有一根0号香蕉,已经被处理过了,之后不用输出这个香蕉。也就是$k=0$。)
就是这个,读题1小时,思路2分钟,代码1分钟……

综上,是不是合理多了?除了mathjax这个确实有点问题,因为我注意到以我目前的用户量来说,我自己维护用户体验更好,也更好管理。

目前本站真正的瓶颈:

真正的瓶颈其实是我菜。

本质问题是其实是我目前无法迅速把一场比赛里的每一道题都全部吃下来。

以Div3为例,虽然Div3很水,但Div3的工作流程其实是我理想的流程。

  1. 因为Div3很水,于是我可以在比赛期间的2个多小时直接AK(出完所有题)。
  2. 然后等比赛结束,开始CF特有的互相hack代码的阶段,我就可以开始写题解。
  3. 等Hack阶段完了,系统开始re-judge的时候,我就可以去洗漱了。
  4. 等回来一看,都通过全量测试了,直接发布。
  5. (如果居然有挂的题)无节操看一眼数据,直接快速修完就睡觉。

但Div2或者Div1就不是很理想了。

  1. 因为我很菜。于是两个多小时撑死做完Div1一小半。
  2. 比赛结束。Div2,Div1我理解目前还是锁题Hack的模式。所以系统会直接re-judge。此时我脑子里可能还在想上一道题怎么弄。
  3. 等re-judge完。随缘看有没有思路。睡觉等第二天继续。

而CF的比赛频率大概是这样的:

这导致我得一直不停的做才能刚好赶上他的节奏。

所以,瓶颈是我菜。没办法做到快速出完所有题,进而无法保证内容及时更新。这才是最大的问题。

至于为啥我要以CF为主要内容?还是因为菜。正如我写Codeforces介绍时候提到的为什么要刷CF的一样。

刷Codeforces的乐趣其实就在这里。因为想不到。因为突然发现自己脑子不好使了。这个时候,来几场紧张刺激的Codeforces,可能想不到的就慢慢变成能想到了。
Codeforces介绍(工作向)
首先,我已经工作好几年了。不搞ACM很多年了,然后当年是个蒟蒻,现在比当年更弱了。所以这篇文章主要针对的是已经工作的朋友,而且是从事非算法相关的工作的开发朋友。

最后悄悄承认,是的,英文内容就是机翻之后稍微人工干预一下。主要之前见到一个印度哥们用google翻译。结果就是他在用一个有损的工具翻译本来就不标准的中文,结果那叫一个感人……所以,我现在的做法是:中文写完,然后贴google翻译。然后优化一下中文表达,以及中文断句之后,贴英文上去。质量依然很低,但总比之前好。