原文:Adding Keyboard Shortcuts to a 24 Year Old Government Website with Userscripts

背景 (Background)

在过去的一年里,我一直在清理美国食品药品监督管理局(FDA)的 510k 数据库的数据[1]

该数据库收录了 510k 项目[7]的申请,包含 FDA 的审批流程,几乎所有(99%)供人使用的医疗器械都采用这一程序。[2]

在 archive.org[3] 上的搜索显示,这个网站至少从 2000 年 10 月 18 日就存在了。事实上,我们甚至可以看到它当年的样子。顶上配有官方的 Comic Sans 字体设计的标志。

阅读全文 »


如果博客中含有公式,记得要在顶部添加 mathjax: true,否则公式无法渲染。例如:

1
2
3
4
5
6
7
8
9
10
---
title: hexo 中渲染公式
categories:
- 技术
tags:
- hexo
- 公式
mathjax: true
date: 2025-10-20 12:25:59
---


原文:The beauty of OLAP SQL

我的日常工作是构建分析仪表板的后端系统。这些仪表板通过数据可视化,帮助用户深入洞察其业务数据。今天,我将分享一个利用 SQL 编写强大 OLAP 查询的真实案例。

请设想您正在运营一系列披萨品牌,目标是评估您的产品货架份额与主要竞争对手的差距。您最关心的业务问题可能包括:

  • 您在披萨品类中的铺货份额(Share of Assortment, SOA)是多少?在沃尔玛分销的披萨产品中,有 50% 是您的吗?还是只有 5%
  • 平均而言,您的披萨产品有多少在 Kroger 进行了分销?您有 5 种不同的产品,但平均只有 2 种有售?是更多还是更少?
  • 您的铺货份额随时间推移是如何变化的?与去年/上个月相比,是增加 10% 还是减少 5%
  • 哪些竞争对手占据了大部分货架份额?您与他们的比较如何?
  • 谁正在投放新产品?谁在减少投放?
  • 您的哪个品牌是成功的?哪个需要撤市或通过广告/更优惠的价格等进行改进?

数据结构如下所示(已匿名化):

p_id manufacturer category brand retailer period distributed_days
i64 i64 i64 i64 i64 str i64
6581 61 20 273 1 2023_52 31407
8563 34 4 274 1 2023_52 27515
8411 11 6 276 1 2023_52 30693
阅读全文 »


原文:The Temporal Dead Zone, or why the TypeScript codebase is littered with var statements

如果您使用 JavaScript 已经有一段时间,您可能知道有几种不同的方式来初始化变量。现在,我们通常使用:

1
const password = "hunter2";

并且偶尔的,当状态可变时我们使用:

1
let password = "hunter2";

这些声明方式已经存在一段时间了,它们拥有合理的块级作用域规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function example(measurement) {
console.log(calculation); // ReferenceError(引用错误)
console.log(anotherCalc); // ReferenceError(引用错误)

if (measurement > 1) {
const calculation = measurement + 1;
let anotherCalc = measurement * 2;
// ...
} else {
// ...
}

console.log(calculation); // ReferenceError(引用错误)
console.log(anotherCalc); // ReferenceError(引用错误)
}
阅读全文 »


工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的实例化延迟到子类。这意味着,你不再直接使用 new 关键字来创建对象,而是通过调用一个“工厂方法”来获取对象,这个工厂方法由子类实现,决定了要实例化哪个具体类。

阅读全文 »
0%