JavaScript Performance Pitfalls in V8
In recent years, JavaScript engines have improved on all fronts. Not only did the peak performance improve, but engines also managed to deliver more consistent and predictable levels of performance. But heuristics can also easily work against you, and it helps to be aware of them. So today I’m gonna share some background on two subtle performance pitfalls in the V8 JavaScript engine. Being aware of these potential pitfalls might help you to resolve issues if you get bitten by these more easily.

Real virtuality: connecting real things to virtual reality using web technologies
This is the story of our lucky encounter at FOSDEM, the largest free and open source software event in Europe. We are two developers, focused on different domains, who saw an opportunity to continue our technical conversation by building a proof of concept. Fabien Benetou is a developer focused on virtual reality and augmented reality. Phillipe Coval works on the Internet of Things. Creating a prototype gave the two of us a way to explore some ideas we’d shared at the conference.

Case Study: Npm uses Rust for its CPU-bound bottlenecks
The challenges that npm faces demand efficient and scalable solutions. When a service can be deployand-forget, that saves valuable operations time and lets them focus on other issues. npm employees also value having a helpful community around any technology they use. Rust fits all these criteria and is currently in use as part of npm’s stack.
另附:Building fast interpreters in Rust.

How Are Function Components Different from Classes?
Are there any fundamental differences between React functions and classes at all? Of course, there are — in the mental model. In this post, I will look at the biggest difference between them.

Cache-Control for Civilians
The best request is the one that never happens: in the fight for fast websites, avoiding the network is far better than hitting the network at all. To this end, having a solid caching strategy can make all the difference for your visitors. That being said, more and more often in my work I see lots of opportunities being left on the table through unconsidered or even completely overlooked caching practices. Perhaps it’s down to the heavy focus on first-time visits, or perhaps it’s a simple lack of awareness and knowledge? Whatever it is, let’s have a bit of a refresher.




以往我们说某一功能跨多端,往往是指在诸如 PC、移动等不同类型的设备之间都能实现;或者更加具体一点,指的是“跨平台”,可能是大到跨操作系统,比如 Windows、macOS、Linux、iOS 与 Android 等,可能是小到跨某个具体技术的不同实现库。但是今天我们要介绍的是关于跨 MVVM 架构模式各种环境的场景。

作为开发者,经常需要面对影响整个应用架构的决策。而Web开发者的核心决策之一,就是应用逻辑与渲染工作的实现,应处于架构中的什么位置(译注:客户端 or 服务器?)。现在有很多不同构建网站的方法,因此这些决策变得愈加困难。我们对这一领域的理解,来自于我们过去几年在 Chrome 工作中,与大型网站的交流。从广义上讲,我们鼓励开发人员考虑通过一种称为 rehydration 的方式,进行服务器渲染或静态渲染。

迈向 Tech Lead 之路
2019 年 1 月 19 日 ~ 2019 年 1 月 20 日,蹭了一个公司的 Tech Lead 培训—— Coach 来自 ThoughtWorks 中国区的两个资深 Tech Lead 和 ThoughtWorks 澳大利亚联邦区的资深 Tech Lead。两天的培训下来,学习到了不少的东西。内容只进不出,过些日子怕是会忘记了。于是,便有了这篇文章,一来记录下自己学习的东西;二来,结合自己的 “经验” 做一些总结。


Computer science in JavaScript: Circular Doubly-linked lists
This post is about modifying a doubly linked list (also called a linear doubly linked list) in such a way that the last node in the list points to the first node in the list, effectively making the list circular. Circular doubly linked lists are interesting because they allow you to continuously move through list items without needing to check for the end of the list. You may encounter this when creating playlists or round-robin distribution of traffic to servers.

How a Monolith Architecture Can Be Transformed into Serverless
In this post, I want to focus on how a monolith application can transform into serverless over time. We already know that anything brand new could be built using serverless. But how do we take the application or service we have today and make it serverless? The simplest answer is that we rewrite it. But this is expensive from a development perspective and depends on what needs to be rewritten. I propose that we pause a second before we jump in and begin rewriting our codebases. Let’s look at how we would move the components of existing applications to serverless.

How not to design a wire protocol
A wire protocol is a way to pass data structures or aggregates over a serial channel between different computing environments. Designing wire protocols is, like other kinds of engineering, an art that responds to cost gradients. It’s often gotten badly wrong, partly because of clumsy technique but mostly because people have poor intuitions about those cost gradients and optimize for the wrong things. In this post I’m going to write about those cost gradients and how they push towards different regions of the protocol design space.

How we made Firewall Rules
In this blog post I tell the story of Cloudflare’s Page Rules mechanism and how Firewall Rules came to be. Along the way I’ll look at the technical choices that led to us building the new matching engine in Rust.

We Analyzed 13 Billion Log Entries – Here’s What We Learned
We analyzed 13 billion (that’s right billion) log entries, and this time around we’ve decided to share all of our findings with you! We split the stats into three different sections: access logs, cache performance, and PHP engine.

Autotuning Cassandra to reduce latencies
At Vorstella we’re building an AI expert that helps teams run distributed systems at scale. A while back our team was passing around some research papers about autonomous databases and optimizing system configurations, and they grabbed our attention. This post walks through how we used Bayesian Optimization to build an auto-tuning system for Cassandra and achieved a 43% latency reduction and an 80% throughput increase over documented best practices.
另附:2019 Database Trends – SQL vs. NoSQL, Top Databases, Single vs. Multiple Database Use.

Achieving 100k connections per second with Elixir
In this article, we look at scaling Elixir to handle 100k connections per second. The workload consists of 100k devices, each simply opening a TCP/IP connection, waiting for 1±10% seconds, and closing the connection. The test consists of three phases: a 15-minute rampup, 1 minute sustained load, and 15-minute rampdown.

What happened to OpenStack?
I get asked this question fairly often during interviews, like people think that OpenStack is dead. I make a squishy face before answering. Here’s a hint: OpenStack is not dead, but something happened to it. The project is still quite healthy and is following the usual hype curve: OpenStack is finally mature enough that it’s less interesting to talk about, so it’s understandable that people think something happened.

Real-Time AR Self-Expression with Machine Learning
One of the key challenges in making these AR features possible is proper anchoring of the virtual content to the real world; a process that requires a unique set of perceptive technologies able to track the highly dynamic surface geometry across every smile, frown or smirk. To make all this possible, we employ machine learning (ML) to infer approximate 3D surface geometry to enable visual effects, requiring only a single camera input without the need for a dedicated depth sensor.

Design Principles for Mathematical Engineering in Experimentation Platform at Netflix
Mathematical engineers at Netflix in particular work on the scalability and engineering of models that estimate treatment effects. They develop scientific libraries that scientists can apply to analyze experiments, and also contribute to the engineering foundations to build a scientific platform where new research can graduate to. In order to produce software that improves a scientist’s productivity we have come up with the following design principles.

Exploring Neural Networks with Activation Atlases
In this article we introduce activation atlases to this quiver of techniques. (An example is shown at the top of this article.) Broadly speaking, we use a technique similar to the one in CNN codes, but instead of showing input data, we show feature visualizations of averaged activations. By combining these two techniques, we can get the advantages of each in one view — a global map seen through the eyes of the network.

Linux 5.0: A major milestone with minor improvements
It’s not like Linus Torvalds didn’t warn us. Linux 5.0 is out, but there’s no big updates to be found here.


What’s new in the Go Cloud Development Kit
Last July, we introduced the Go Cloud Development Kit (previously referred to as simply “Go Cloud”), an open source project building libraries and tools to improve the experience of developing for the cloud with Go. We’ve made a lot of progress since then – thank you to early contributors! We look forward to growing the Go CDK community of users and contributors, and are excited to work closely with early adopters.

Design. Build. Publish. Create full-stack web apps with or without code.

W3C approves WebAuthn as the web standard for password-free logins
W3C declared that the Web Authentication API (WebAuthn) is now an official web standard. First announced by the W3C and the FIDO Alliance in November 2015, WebAuthn is now an open standard for password-free logins on the web. It is supported by W3C contributors, including Airbnb, Alibaba, Apple, Google, IBM, Intel, Microsoft, Mozilla, PayPal, SoftBank, Tencent, and Yubico.

CKEditor 5 v12.0.0 with inline widgets and distraction free editor released
We are happy to announce the release of CKEditor 5 v12.0.0. This editor version brings many new features (editor placeholder, inline widgets, CKEditor 5 inspector), a new editor build, many improvements for plugin authors as well as integration developers and, of course, some new guides in our documentation. It is a major release, so there are some breaking changes for plugin authors, possibly more breaking changes for developers who created their own rich text editors and a few changes that will affect CKEditor 5 integrations.

Ionic Release: 4.1 Hydrogen Out Now!
We are excited to announce that our first feature release after Ionic 4.0 is out now! In keeping true to using code names from the periodic table of elements, Ionic 4.1 is named Hydrogen (after the initial release of Neutronium). We have some exciting new features to share in this release, so let’s dive right in!

Storybook 5.0
Welcome to the future of component development! We’re kicking off 2019 with Storybook 5.0 (SB5), our biggest release to date. Here’s what’s in it: Complete overhaul of Storybook’s developer experience; Theme-ready component library; Evolved front-end architecture for addons; Brand new Storybook website.
另附:Storybook 5 Migration Guide.

A very fast and lightweight, standards-compliant, self-hosted javascript parser with high focus on both performance and stability.

React for CLIs. Build and test your CLI output using components.

An NLP library for building bots, with entity extraction, sentiment analysis, automatic language identify, and so more.

Handtrack.js: Hand Tracking Interactions in the Browser using Tensorflow.js and 3 lines of code
Handtrack.js library allows you track a user’s hand (bounding box) from an image in any orientation, in 3 lines of code.

A HTTP/1.1 benchmarking tool written in node, greatly inspired by wrk and wrk2, with support for HTTP pipelining and HTTPS. On my box, autocannon can produce more load than wrk and wrk2.

Ghidra, NSA’s reverse-engineering tool
Ghidra is a software reverse engineering (SRE) framework developed by NSA’s Research Directorate for NSA’s cybersecurity mission. It helps analyze malicious code and malware like viruses, and can give cybersecurity professionals a better understanding of potential vulnerabilities in their networks and systems. NSA will be making Ghidra available to the public as an open source release in time for its first public demonstration at the 2019 RSA Conference this March.

PureOS is Convergent, Welcome to the Future
Purism is beating the duopoly to that dream, with PureOS: we are now announcing that Purism’s PureOS is convergent, and has laid the foundation for all future applications to run on both the Librem 5 phone and Librem laptops, from the same PureOS release.

Introducing Kraken, an Open Source Peer-to-Peer Docker Registry
To solve performance issues with our legacy Docker registry stack, Uber’s Cluster Management team developed Kraken, an open source, peer-to-peer (P2P) Docker registry.
另附:Open Sourcing Peloton, Uber’s Unified Resource Scheduler.

An introduction to distributed systems
This outline accompanies a 12-16 hour overview class on distributed systems fundamentals. The course aims to introduce software engineers to the practical basics of distributed systems, through lecture and discussion. Participants will gain an intuitive understanding of key distributed systems terms, an overview of the algorithmic landscape, and explore production concerns.

Functional Programming in OCaml
Based on courses taught by Michael R. Clarkson, Robert L. Constable, Nate Foster, Michael D. George, Dan Grossman, Daniel P. Huttenlocher, Dexter Kozen, Greg Morrisett, Andrew C. Myers, Radu Rugina, and Ramin Zabih. This work is based on 20 years worth of course notes and intellectual contribution by the authors named above; teasing out who contributed what is, by now, not an easy task. The primary compiler and author of this work in its form as a unified textbook is Michael R. Clarkson.

Introduction to Theoretical Computer Science
This is a textbook in preparation for an introductory undergraduate course on theoretical computer science. I am using this text for Harvard CS 121.

Python Data Science Handbook
The book introduces the core libraries essential for working with data in Python: particularly IPython, NumPy, Pandas, Matplotlib, Scikit-Learn, and related packages. Familiarity with Python as a language is assumed; if you need a quick introduction to the language itself, see the free companion project, A Whirlwind Tour of Python: it’s a fast-paced introduction to the Python language aimed at researchers and scientists.
另附:Machine Learning for Beginners: An Introduction to Neural Networks.


Guidelines for Human-AI Interaction
We’re excited to share a set of Guidelines for Human-AI Interaction. These 18 guidelines can help you design AI systems and features that are more human-centered. Based on more than two decades of thinking and research, they have been validated through a rigorous study published in CHI 2019.
另附:AI Guidelines in the Creative Process.

It has never been this easy to work better together
These are exciting times to be alive in friends! With the free release of Sketch2React v1 we are giving everyone a fighting chance to really try out our version of the future and how we see collaboration going forward. First a recap if you’re not 100% sure what you can do with our free design to code component framework.

Scaling the Craft of Design
Design Operations (DesignOps) is an emerging function/methodology uniquely aligned to help solve certain classes of problems for evolving and scaling design organizations. In this article, I’ll share my approach to decoding this for myself through conducting my own research and engaging with a community of leaders in the space. With many inputs, it’s important to be mindful that every design organization is different — with its unique variables and challenges — as is how DesignOps takes shape.

Data-driven Design and Generative Design
At the intersection of great design and better user experiences are two key concepts that complement each other while also being distinct in their approach.

How eBay Uses Microinteractions to Delight Customers
At eBay, we’re always looking for ways to truly localize for all of our international markets. Our design team has spent some time designing and experimenting with exciting new experiences and microinteractions for shoppers in China.

10 principles to build interfaces you won’t hate
Having a high level of usability in products creates engaged users, but there are some challenges involved. The issue product developers commonly run into is getting people to talk about the usability of products in a structured and descriptive way. Traditional forms of critique such as “crappy” and “slow” are not useful for designers. They need more specific information that will help them produce actionable tasks to improve the product. We use usability heuristics to establish a framework for feedback.


调查全球 98,000 名程序员发现,PHP 遭厌弃,前端岗已饱和
位于美国旧金山的知名招聘公司 Hired(专门为 Facebook、Uber 等顶级公司招聘人才)在走访全球 10,000 多家企业、邀请 98,000 名求职者参与其中之后正式发布了《2019 年软件开发者现状》调查报告,在以人工智能、机器学习、区块链、物联网等为首新技术打开互联网新纪元之际,与全球的开发者共同探讨技术圈最为流行的开发技能,编程语言以及市场最前沿趋势。

在如今的互联网产品团队当中,很多问题都是「房间里的大象」,显而易见却常常被忽略。由于工作经常需要和许多互联网初创团队打交道,设计师 Eugen Eşanu 在今天的文章中说了5句大实话,每一句话都是针对一个具体而真实的问题而说的。也许它们会给你一些共鸣。




- 百度数据可视化
- 百度智能建站