Removing jQuery from GitHub.com frontend

查看原文

本文介绍了 GitHub 如何将 jQuery 的依赖一点一点去掉。

  • 以前:jQuery 在 2007 年的时候几乎是标配,就算不主动用,很多库也依赖它。
  • 近些年: jQuery 的特性很多都融进了现代 JS 语言和浏览器中。
  • 取代的原因是 jQuery 的写法不太能传达出代码的原始意图,也很容易默默吞掉错误。
  • 取代品:直接用 JS:https://developer.mozilla.org/en-US/docs/Web/JavaScript
  • 如何取代:
    • 仓库埋 metric 进去,可以查看 jQuery usage
    • lint 把有诸如 $.ajax 之类的新代码直接标为构建失败
    • 有依赖库的,保持接口稳定的同时,替换掉实现,使用 JS 原生的特性 …
read more

Py-Spy - A sampling profiler for Python programs

查看原文

Py-Spy 这个工具是个 Python Profiler,它可以在不重启 Python 程序的前提下得到耗时函数及其调用时间,并将其以 top-like 的形式展示出来。

它的特色是:低 overhead,用 Rust 写的核心部分,不需要侵入 Python 进程。无侵入这个特性也是它有别于标准库甚至其他 profiler 的好特性。你不需要修改任何一行项目代码就能用它。pyflame 倒是可以,不过尚不支持 Python 3.7 及非 Linux 的 OS。

工作原理:通过读取进程内存:

在内存中,全局变量 PyInterpreterState 可以拿到解释器运行着的所有线程,再遍历每个线程拿到 PyFrameObject 中的调用栈。

read more

Typescript at Google

查看原文

本文介绍了 Typescript 逐渐在 Google 产品线被使用的现状。Google 在 JS 很早期的时候就在探索如何编写大型前端程序,并归纳出 Closure 这个框架。时过境迁,这套框架可能目前也就 Google 在用,或者某些用了的公司还需要找 ex-googler 来维护。Closure 本质是一个静态类型的 JS 方言,问题主要在于常年使用估计埋了不少臭虫进去。现代 JS 产出了 UMD, AMD, CommonJS,ES6 甚至也有自己的模块系统,npm,webpack 也逐渐推广开。作者所在的组就在尝试将这些东西引入现有代码仓库。迁移也是慢慢地迁移,而不是从头写一遍。现在好些个 Google Products 都已经有慢慢用上了 TypeScript 了。

read more

Pandas Overview

查看原文

Pandas 是一个数据结构的操作库,核心数据结构是 DataFrame,DataFrame 是 Series 的容器,Series 是 scalar 的容器。你可以用 dictionary-like 的语法来操作数据。这类数据主要用来处理多维数据,例如时间序列数据什么的。

处理数据的时候,比较推荐 immutable,即保留原始数据不变生成新数据,尽管 Pandas 的所有数据结构都是 value-mutable 的。

read more

Airbnb 架构概览

查看原文

本文介绍了 Airbnb 的架构,我们可以看到 Airbnb 是 AWS 的重度用户,使用了 EC2, RDS, S3, CloudWatch, EMR(已废弃,目前用的是 Hive+Airflow 的解决方案)。负载均衡使用 Charon。服务发现用 SmarkStack - 可以监听 ZooKeeper 的数据,自动更新到 HAProxy。后端的前台用 Rails,后台服务用 Java 系的框架 Dropwizard。服务治理将用户请求上下文塞入 RPC 请求中,监控服务的 p95_latency, p99_latency。

可以看到 Airbnb 的架构是从最简单的 Rails MVC 一点一点添砖加瓦搞出来的。

read more

Pandas 10 分钟入门

查看原文

本文是 pandas 的 10min 入门帖子。

  • 新建 Series 对象:pd.Series(given_list), 如果值为空,用 np.nan
  • 新建 DataFrame 对象:pd.DataFrame(given_numpy_array, index=index, columns=given_list)。稍微复杂一些,第一个参数是 numpy 矩阵,index 是 pandas Index 实例,columns 是列的名字。
  • dict 新建 DataFrame 对象:pd.DataFrame({"a": 1., "B": pd_series, ...})
  • 查看每一列的类型:df.dtypes …
read more

How the Go runtime implements maps efficiently

查看原文

本文介绍了 Go 语言如何实现 Map 的泛型,并对比了 C++ STL 和 Java 的实现。

  • HashMap: 一种查询时间复杂度近乎 O(1), 最差为 O(N) 的数据结构,需提供 hash function。O(N) 估计也真是运气背到家了,所有 Key 都哈希碰撞。
    • hash function 一定是一个产出固定长度数据的函数
  • C++ STL std::unordered_map 在编译时就把类型模板编好了,所以编译时就知道每个 map 的 key 类型。
  • Java java.util.Hashmap 要对原子类型做 boxing。由于所有 java …
read more

Latency Heat Maps

查看原文

响应时间(response time),也叫延迟(latency),这个指标有很多模式隐藏其中。这篇文章通过 disk I/O latency 介绍了 latency heat map 这种查看性能问题的图表。

iostat -xz 1 可以查看 Linux 的平均 latency,我们可以定时采样,画出柱状图(histogram),x 轴是时间,y 轴是 N ms 的 latency。 柱状图可能会由于采样频率不同导致给出不一致的结论,解决办法是使用多种采样频率。如果不改进,那你要看好几张柱状图才能得到结论,有了 heatmap 你就可以把使用不同频率采样得到的结果压在一幅图里面。

heatmap 本质上是一张三维图表,x y 轴表示两个维度(一般其中一个是时间,另外一个是采样频率),颜色深浅表示第三个维度 …

read more

Stop future proofing software

查看原文

本文的论点是:诸如 我们需要X,尽管Y目前更好,但一旦未来有Z这个需求,X 会让开发更简单 这样的观点是不一定是对的。

那么我们怎么做技术选型呢?作者认为:Less is more。少想未来会怎样,把当下做到易于扩展即可。当下不一定要完美,但能帮你很快适应未来的架构。

read more

Netflix 使用 Papermill 的实践

查看原文

本文介绍了 Netflix 如何使用 Papermill 管理 .ipynb.

Jupyter Notebook 本质上就是一个 JSON 文档,并自带了简易的接口可以运行它自己。它真正运行的地方是 jupyter-kernels。ipynb 的缺点是常常变化,cell output 跟代码不完全一一对应,不好测试,没有可以配置运行上下文的设施,以及你需要运行一个 Notebook server。

Papermill 的出现改进了很多这些问题。Papermill 做的事情是: 接受一个 ipynb path 和一些参数,然后运行出来一个 output ipynb,所有东西都在这个 output ipynb 里面。伪代码如下:

import papermill as pm

pm.execute_notebook(
   'path/to/input …
read more

« Page 9 / 54 »