不客观的大波士顿游玩指南

海上看到的波士顿海岸线与落日

今年春天去了好几个地方玩之后,才发现还没有人会来波士顿这个鬼地方找我玩。与其盼着人来,还不如主动出击,写一写好玩的地方好了。毕竟也在这里呆了好些时间。

这也大概是一篇我不会标日期的博客——初稿写于 2022 年 6 月,但如果我想起来了什么变动,会回来改的。

这篇标题里的「不客观」也代表着这不应该是你阅读的唯一的游玩指南,写这篇的时候我并没有参照任何现成的排名。我错过了什么好地方我可没法负责的 :/
继续阅读“不客观的大波士顿游玩指南”

条码加手机,把搬家箱子闭环管理起来

这篇本来我一年半前就该写了,很奇怪,生活就这么慢了下来我也不知道为啥,可能是在等「闭环管理」结束吧。最近想起来了,就介绍一下这个支撑了我自己搬家的一套体系好了。

一年半前搬家的时候,我也不知道自己怎么想的,决定自己一个人搬。我的大件也不多,两张写字桌两个书架一张床垫这样,可能是生活过出了一种实体太累赘的感觉吧。其实我担心的并不是大件这个事情,毕竟小推车租一个也不贵体验也很好,我更担心的是落下东西,于是就产生了这套解决方案。

我的想法是,每一件要搬的东西都贴上条码,起终点的楼上楼下分别扫码标记一下,就不会丢东西了。即便是请别人帮忙搬家,即便只扫两次码,这个体系还是有帮助的吧。

结果还算完成,累是挺累,当时有些惊险的反而是入住手续问题。我花了一个小时冲刺解决完保险,迅速卸货,终于是赶在一天结束之前把车还了。 继续阅读“条码加手机,把搬家箱子闭环管理起来”

Customized COVID data comparison with pandas and plotly

It's yet another summer that people just want to travel without fear. Probably it has been "back to normal" for some people, but for me, it has to be backed with some data. There are plenty of websites that publish COVID case data and visualize them by city (even in Google onebox - by the way, Google Travel shows some helpful metrics on hotel reservation rate as well).

However, with a lot of travel destinations in mind, it would be very helpful if there's a dashboard that I can compare COVID cases between different cities and figure out the trend myself. I haven't seen one handy, and I really want to play around the data with some home baked solution. 继续阅读“Customized COVID data comparison with pandas and plotly”

给 HAProxy 增加第三方登录保护

HAProxy 作为一个非常强大且高效的负载均衡软件,真的是想做啥都可以了。最近就比较头疼某个很多人使用的 SSH 端口整天被人扫,想做一个动态 IP 白名单。顺着这个思路下去,就做了一个 HAProxy 的第三方登录保护的方案出来。

SSH 端口的保护

由于 SSH 协议的鉴权通常没法做到 reject,我也不大想去研究协议的细节,于是就准备直接从 4 层 TCP 的位置去保护。HAProxy 端想做一个动态白名单,本来是想用 acl file list 实现的,然后发现只有收费版 HAProxy 才有一个定时重载文件列表的模块 lb-update。看了看 HAProxy 的管理接口似乎可以实现动态维护 acl 列表,于是准备写一个小的 Web 应用去维护这个列表。

仔细看了看这个接口,似乎还有一个 table 的特性更符合需求,还可以动态记录访问次数什么的,于是就搞起来了。 继续阅读“给 HAProxy 增加第三方登录保护”

软件镜像站 + GDPR:欧洲用户真的会路过吗 / 离析

离析是个啥?

这是一个偶然想到的新栏目名字,确实想理解的话可以通过拆字来解释。这个词其实挺适合近几年的大趋势的,全球化似乎玩不下去了,更多的人开始思考中心化的问题。引用一个我之前其实很不想引用的句式,“哪有什么岁月静好”,只不过时候未到。

声明:不是律师,本文跟法律有关的分析纯属瞎扯。

GDPR 是个啥?

各国的互联网用户这几年开始见到越来越多的网站问你要不要饼干(Cookies)、越来越多的应用文绉绉地要你同意隐私协议,这是为什么呢?隐私保护法律的跟进是一大原因,起点就在 2018 年,欧盟的 GDPR 开始实施了。 继续阅读“软件镜像站 + GDPR:欧洲用户真的会路过吗 / 离析”

关于 0.5% 的刷课党,这里有五组数据

两年前博客(+ 微信订阅号)做过一篇特稿,分析了“公开渠道的教务系统 2016 年 1 月选课期间的一些日志”。写那篇文章让我直面了刷课这个事情,还意外地小小采(tiao)访(xi)了下某个同学。

两年过去,变化还是挺大的。比如,我校教务处终于把新的教务系统完整上线了。还比如,自从上个月新教务系统第一次选课开始,更多的人听说了“刷课”这个词。已经不需要抢课的我,只听说了这次选课期间有人卖课啥的。虽然实际上可能并没这么“道德沦丧”,但大家对这个行为的不齿,是多了一些。

我好奇的是,为啥 2018 年的刷课行业发展成这样子了?新的教务系统并没有可以从公开渠道获取的日志,不过从旧教务系统里看过去几年的趋势,还是可以的。于是这次我使用 Elastic Stack 处理了更大跨度的数据(灌数据进去挺折腾的,不过非常高效),从 2014 到 2017 年选课期间的本科选课操作日志中,得到了下面的一些数据。(以下数据均来自旧教务系统,下简称“教务系统”)

如果太长不想看,这是五组数据的梗概:

一. 大二到大三、2016 至今,进入刷课频道:2017 年暑假 2015 级选课期间操作次数人均 496 次,创了记录。
二. “刷课”一直是少数,但这 0.5% 的玩家越来越多:四年来用户操作次数中位数保持在 50 - 65 之间,刷课的人数成倍增加,在 2017 年寒假达到顶峰。
三. 教务系统的压力从来不小,峰值 QPS 95,大多因为“人多”:选课第一天明明不用抢也是挤爆,卡起来就是死 10 秒钟又闪现 20 秒的体验。
四. 单用户刷课平均每秒 17 次,问你怕不怕:靠刷课党们一“己”之力,还是可以把教务系统搞慢的,最疯狂的人连续一分钟操作 1060 次。
五. 午夜档的热闹从第二阶段开始,刷课党也就个位数:如 2017 年暑假第二阶段的第一场午夜档 218 人参加,其中操作频率极高的也就 5 个人。

继续阅读“关于 0.5% 的刷课党,这里有五组数据”

jzGradeChecker - 优雅查成绩 Graceful Grade-Checking Experience

链接 Links

  • 网站 Website (包含导出数据查看网页 Includes a webpage for reading the exported file)
  • 演示 Demo (这是扩展的欢迎界面,显示效果与实际扩展工作情况无异 This is the introduction page of the extension, which reuses the same core scripts of the parsing code, working identically to the extension)
  • Chrome Web Store

重要提示 Notice

由于原网站在今年改版,成绩查询服务器已经下线,该扩展的读取成绩功能已经无法工作。但因为扩展自定义了一套 JSON 数据结构,即便服务器不可用,仍可通过离线数据实现信息显示,因此在线演示、导出成绩查看器等仍可查看。

Due to the original website upgrade, this Chrome extension cannot fetch grade data any more (the grade check server is down). However, the demo and the exported data reader still work, because I have implemented a customized JSON data structure, which make the code functional by reading the JSON data even if the remote server is unavailable. 继续阅读“jzGradeChecker - 优雅查成绩 Graceful Grade-Checking Experience”

魔方机器人(网页与 Python 控制程序) Rubik's Cube Solving Robot

介绍 Introduction

本作品为本科专业必修课《科研项目指导与训练》的课程项目。我们选择实现一台魔方机器人,可对打乱的三阶魔方在进行表面颜色识别后,恢复至六面同色状态。

This is a course project for "Scientific Research Project Guidance and Training" course of my major. We chose to build a Rubik's cube solving robot, which can identify a third-order cube's pattern and solve it.

该机器人拥有六个自由度,对六个面进行旋转,并有四个摄像头从四个角进行颜色的识别。此外,机器人采用树莓派作为上位机进行总体控制,采用 Arduino 作为下位机进行步进电机的控制。

The robot has six degrees of freedom, rotating the six sides. It identifies the cube by four cameras from the four corners. A Raspberry Pi is used as an upper controller for the general control, and an Arduino board as a lower controller for the motor control.

项目在最终结题答辩时获得非常高的评价,同一课程中共有 9 组项目。之后,项目在 2017 年全国青年科普创作实验暨作品大赛中获得北京赛区未来教育组三等奖

The project gets an excellent feedback at the final presentation among 9 projects of the course. Afterwards we also won a third prize (Beijing Area/FutureEDU) in 2017 China Youth Science Popularization Experiment and Work Contest.

继续阅读“魔方机器人(网页与 Python 控制程序) Rubik's Cube Solving Robot”

瞬移吧,时光(飞逝金中 2017 年创意网页)

介绍 Introduction

这是一个利用 canvas 技术的互动相册,其中共有 12 组照片。用手涂抹旧照片会显示出新照片,此外还有可能触发一些“信息点”提示。

You can see this as an interactive album with canvas technology, in which the scene in a same place changes over time by wiping it with your finger, and stories hid behind specific positions in the photo may pop up.

该页面上线后,通过校友的微信朋友圈自发传播,截至 2017 年 5 月已获得近 5000 次点击,完整体验次数达 1000 余次,留言 72 条。

I put 12 couples of photos in the album. After sharing the webpage on the social media, ~5000 page views and 1000+ full journeys have been made to date (May 2017), while 72 comments with thoughts about the high school in the album are left.

继续阅读“瞬移吧,时光(飞逝金中 2017 年创意网页)”

分享一些打磨单页网页的经验

这一篇想讲点老本行。寒假的时候做了一个网页,类似于相册。用大家熟悉的词说,有点“H5”的感觉(然而并不想用这个词)。在这个项目里,我很多精力都被用在优化用户体验上了,觉得应该分享一下。

网页性能的优化

页面用到了 canvas。这部分我是在别人的代码的基础上做了很大的改造再完成的。

跟图形处理一相关,网页的运算性能就会变得很重要,尤其是每一次交互操作都需要进行绘图、需要在手机上运行的时候,要是画面跟不上交互,看着就特别难受。在把基本功能都实现了之后,自然需要处理这个问题。 继续阅读“分享一些打磨单页网页的经验”