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”

自言字语 - 独

自从上一篇博客,大概有一年多没有代表自己写过东西了吧。上了一年班忙忙碌碌,甚至工作总结也写得结结巴巴。领导催了几次,结果都不好意思再催了。连工作总结都没写完,还好意思写博客吗?结果前阵子瞄了一眼领导和另一位资深同事的博客,最近都没写什么东西,心里呵呵一笑却觉着有些悲哀。

直到进入了六月,突然意识到自己偷偷欣赏的人们都要毕业了,或是真正地在学校毕业,或是同事换了部门,刚数了数好像七个都不止了。“离职不是离世”,但总觉得错失了好多跟人打交道的机会,就有点伤心。

冥想盆要溢出了,那还是接一下好了。但愿这是个让我踏踏实实写点文字的机会吧,不过还是得时刻提醒自己,大家都很忙,没人会看的。看来三年了一点都没变啊。

诶,接上了我想了几个星期的这个话题,“独”。毕业了大概也是走向孤独的一条路,那就来自言字语吧。

继续阅读“自言字语 - 独”

有茬找茬该去根 / 离析

几个月前还有班上的时候,我在工单队列里看到了一张工单弹了出来。这是隔壁管网络安全部门的主管申请 Adobe CC 授权的请求。

我校处理这些请求,都是靠工单、然后客服人工把用户名输到一个已经很成熟的、部门自己做的系统里,自动判断可以给的授权然后生成,只有客服主管才能强制覆盖生成授权的参数。我也不是很懂,他们为什么不把这个流程做成全自动工单,估计是没“资源”吧。

我的同事处理这张工单的时候,也没仔细看那位网安主管写了什么,就直接把用户名输了进去,因为那位主管似乎在学校选了课,系统会自动给他激活学生授权。然后网安主管回了封邮件,问我们说这个授权怎么用,他部门有个职工需要用这个授权。 继续阅读“有茬找茬该去根 / 离析”

给 HAProxy 增加第三方登录保护

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

SSH 端口的保护

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

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

趟水身份认证管理 IAM

身份与认证管理的大课题需要面对什么概念和难题?现阶段有什么技术轮子?LDAP、OIDC、RBAC 又是个啥?

这堆幻灯片是给 NetPlanet 准备的,经过了我 N 次砍内容以及可预见的推迟,感觉还是先发出来共享(peer review)好一些。

今天读了篇网课教学的文章,感觉可能还得加一些互动性的内容(于是相应地一些内容就会被砍掉),但总体来说干货就这些了。可能并不是那么系统性的严谨,但愿会对有人有帮助吧。

P.S. 看起来我博客万年没更新的 hacklog 插件出了点兼容问题导致 WordPress 在前台没法正常显示缩略图了,所以下面大概需要 2MB 流量,并且我还得找时间修 = =

继续阅读“趟水身份认证管理 IAM”

Wrap Context Manager (as nested) in a Python function

To make my code more elegant, I need to wrap a context manager with initialization code as a function in Python. This is definitely possible, but it took me some time to find the most elegant way to do this.

Generally speaking, you will want to enter all contexts when using the decorator @contextlib.contextmanager or @contextlib.asynccontextmanager. When the end user uses with my_function() as a:, everything inside the with block has been inside the nested contexts. When Python gets out of the end user's with block, it should also run all related __exit__s in the wrapper function. See example (requires Python 3.7+ probably and writes test.txt; you can test it on repl.it):

import asyncio
import contextlib
import aiofiles
import typing

@contextlib.asynccontextmanager
async def my_context_manager() -> typing.ContextManager[aiofiles.threadpool.AsyncFileIO]:
    # init
    filename = 'test.txt'

    async with aiofiles.open(filename, 'w+') as file:
        # you can still override or interact with `file` if needed
        yield file

async def main():
    # end user
    myfile: aiofiles.threadpool.AsyncFileIO
    async with my_context_manager() as myfile:
        print(await myfile.write("12\n"))
        await myfile.seek(0)
        print(await myfile.readline())

asyncio.run(main())

When I rewrite the code above I feel it so easy and natural. It really took me some time to realize how this works.

美国的身份证明体系 / 离析

国内的实名认证体系推行得看似已经非常成熟,很多地方只要输入身份证号,就能实时在线核验身份、实时预警,统一得让人敬畏。然而,居民身份证与“户口”的强关联性,意味着这套系统对一些人还是很不友好的。

比如,一些只带着中国护照的海外侨胞会被一些只看身份证的地方当成外宾。国家移民管理局最近推出了护照在线核验,似乎在尝试改善这一局面,但能改善多少,还真的很难说。

根据《中华人民共和国出境入境管理法》第十四条规定,定居国外的中国公民在境内办理事务可以凭护照证明其身份。据了解,一些定居国外的中国公民由于没有内地户口和居民身份证,回国后办理相关事务存在不少不便。……根据《中华人民共和国电子签名法》和《中华人民共和国政府信息公开条例》有关规定,华侨个人经上述途径所获得的查询结果电子文件已经国家移民管理局电子签名,与同类纸质文件具有相同效力,华侨可将电子文件向有关办事服务机构出示或提供。

《新便利!国家移民管理局12月31日起开通华侨护照查询服务》

而还有一群中国绿卡持有者,因为永久居留与公民的区别,他们拿到的形似“居民”身份证的卡片上并不是 18 位“公民”号码,有很多不需要区分这两个概念的系统并不认识他们。

中国绿卡的号码是总共15位,其中前三位是代表绿卡持有人现国籍缩写字母,比如加拿大是CAN,越南是VNM,后12位是数字,中间包括持证人的生日数字……作为文化经理人,笔者认为产生以上一系列中国绿卡尴尬或涉嫌“歧视”现象的最根本原因,其实不在政策、行政上,而居然是在这一个小小的技术环节!就是中国绿卡独有的字母加数字的15位代码识别系统!现在看来公安部设计的初衷,可能只考虑了管理的便捷,却忽视了绿卡使用中的便捷性、实用性,以及与中国社会各行业、各系统的兼容性。

《中国绿卡(永久居留身份证)的含金量现在到底有多少?》

而在地球另一边的美国,作为一个由移民建立起来的国家,对“身份”这个事情应该还是很讲究的。我们不妨看一看。 继续阅读“美国的身份证明体系 / 离析”

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

离析是个啥?

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

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

GDPR 是个啥?

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