Chrome 80 跨域 Cookie 变化的影响和应对方案

Chrome Cookie SameSite Secure 跨域

根据 时间线 Chrome 80 稳定版本将在 2020-02-04 发布。 它的 变更列表 中有两项 Cookie 安全 相关的变更, 对非安全连接下的 Cookie 设置和 Cookie 跨于发送做了更多限制。 这意味着通过 Cookie 跨域跟踪用户的相关功能可能会受到影响(比如日志、统计), 且只能在 HTTPS 上修复(意味着可以避免针对非安全连接的 MitM 攻击)。 具体地,有这两个 feature:

对应的标准草案可以在 IETF 网站找到:Incrementally Better Cookies。 下文关注这两个变更对业务带来的影响,以及可能的应对方案。

从当前位置打开 Terminal

Terminal Shell i3wm

我们有很多工作区时,每次打开一个 Terminal 都需要先 cd 到和上一个 Terminal 一样的位置再开始工作。 这个过程既然是固定的,那就一定能自动化。

Harttle 遇到的具体场景是,i3wm 有 workspace(工作区)的概念,每个工作区可以打开任意多个 Terminal。 我希望同一个工作区的 Terminal 打开时都有一样的 CWD(Current Working Directory), 不同的工作区有不同的 CWD。即:打开 Terminal 时,自动 cd 到当前工作区其他 Terminal 所在的位置

本文基于 Reddit 上的一个小脚本展开,这一思路适用所有 Terminal Emulator 和 Desktop Environment(尽管我只有 Window Manager 也是适用的)。

X11 多显示器配置:玩转 XRandR

Mac X11 XRandR HDMI

RandR(Resize and Rotate)协议是基于 X Window 系统的一个扩展,它可以直接操作显示器模式、刷新率,属于 DDX 组件。 xrandr 是官方的 RandR 配置工具,比老的 Xinerama 机制更容易测试和配置。 本文在没有桌面环境的情况下直接对底层软件进行配置,如果有安装某种 DE 可以在其控制面板中找到对应的配置。

编写跨时区的 JavaScript 代码

JavaScript Date 时区

JavaScript 在 1.1 就支持 Date 对象,所有主流浏览器都支持。 和其他语言类似,Date、Time 的表现会受到时区的影响,在编写跨时区网站的页面脚本时,或者单元测试在其他时区的持续集成服务上运行时,都需要熟悉 Date 对象里的时区概念。 本文介绍 Date 对象的初始化字符串会被当做怎样的时区解释,Date 上的方法哪些是时区相关的,以及如何编写在所有时区都能运行的代码。

Vim 下大小写敏感的搜索/替换

Vim 大小写敏感 搜索 替换

Vim 中的搜索默认是大小写敏感的,即搜索 vim 不会匹配到 Vim。 这一点跟多数编辑器/IDE 都不同,因此 Vim 的默认设置其实很不顺手。 本文来分享一些个性化的配置方法,让 Vim 下的大小写敏感/不敏感用起来更加顺手。 比如当搜索词包含大写时应用大小写敏感搜索;其他情况应用大小写不敏感搜索。

TL;DR

以搜索词为 harttle 为例(省略了最后的回车):

  • 强制大小写不敏感搜索:/harttle\c
  • 强制大小写敏感搜索:/harttle\C
  • 强制大小写不敏感替换:s/harttle\c/Harttle
  • 强制大小写敏感替换:s/harttle\C/Harttle
  • 设置为大小写敏感::set ignorecase
  • 设置为大小写不敏感::set noignorecase
  • 设置为智能模式(有大写时敏感否则不敏感)::set smartcase
  • 设置为非智能模式::set nosmartcase

VT 下的键盘映射设置

ArchLinux keycode TTY X11 vconsole

最近遇到在 X11 下切换到 TTY 可以用 Ctrl+LeftAlt+Fn 或 Ctrl+RightAlt+Fn,但从 TTY 切换回 X11 只能使用 Ctrl+LeftAlt+Fn 的问题。 为了手感比较一致今晚解决了这个问题并记录在这里,希望能帮助遇到同样问题的人。

具体原因是 X11 下的键盘映射由 xkbmap 来管理,它默认提供了比较复杂的配置;但 VT 直接运行在内核上没有经过 X11 它的配置更直接和简单。 这两份配置的不同导致了在 VT 下 RightAlt 不能正确映射。 这里我们关心的是 keycode 到 keysym 的映射关系, 更过关于 scancode, keycode, keysym 的概念解释可以先参考 ArchLinux 键盘映射 的第一小节。 这个 keycode 到 keysym 的映射关系就是我们常说的 keymap, 就是装各种系统时要选的键盘布局。 所有的 keymap 都存在 /usr/share/dbd/keymaps 中:

find /usr/share/kbd/keymaps/ -type f

关键在于 X11 和 VT 中如何选择这些文件,其中每个 .map.gz 文件解压后得到的 .map 文件即为键盘布局文件。文件中的数字表示 keycode,Alt、Control 这样的词即为 keysym。

使用模逆元计算组合问题

模逆元 欧拉定理 费马小定理 扩展欧几里得算法

模逆元(modular multiplicative inverse)俗称模倒数,是指与原数的乘积和 1 同余的整数。即对于整数 $a$ 和 $n$:

\[ax \equiv 1 \mod(n)\]

上式中 x 就是 a 对于 n 的模逆元,$a$ 与 $n$ 互质时模倒数存在,否则不存在。 它的数学意义是模倒数存在时,除以一个数和乘以它的模倒数同余,可以把除法转换为乘法。 这对于计算大数(10 以上)组合问题非常有效,适用于 Sherlock and PermutationsMatrix Tracing 等问题。 这类问题的都可以转化为组合问题 ${n \choose m}$,由于它的值通常会很大,我们只关心它对某个大质数 M(比如 $1e9 + 7$)的模:

\[{n \choose m} = C_n^m = \frac{n!}{m!(n-m)!} \mod{M}\]

上一页 下一页