FEX 技术周刊 - 2019/03/04
Technical lessons from building a compiler startup for 3 years
Pagedraw recently shut down and is now open source. Pagedraw is a UI builder like Sketch + a compiler that translates your designs into React code. Instead of doing a “It was an incredible journey, thank you so much everyone“ type of post, we think what would be the most helpful for other people interested in DevTools, programming, or startups in general is to just try to distill the most important lessons we learned doing Pagedraw over the past three years. 另附：Launch HN: Pagedraw (YC W18) – Compile UI Mockups to React Code、Pagedraw is shutting down and going open source.
Redis Turns 10 – How it started with a single post on Hacker News
10 years ago, a link was posted on Hacker News to a new software project called Redis. In the comments, its creator Salvatore Sanfilippo (a.k.a. antirez) says “one of the major points of Redis is to support more complex types as values”. From Day 1, Salvatore knew what he wanted to build. And to his credit, he stayed focused. Redis now has 10 complex types and a module system that enables developers to build more. And as a result, Redis is the most popular key-value store on the planet.另附：Gopher: a present for Redis.
Why we created npm Enterprise
Last week we launched npm Enterprise, a fact that might come as a surprise to those of you who’ve been paying attention and know that we’ve had an enterprise product since 2014. The new Enterprise is a totally different beast, the result of recognizing that the way npm works is fundamentally new and different to previous package ecosystems.
Gartner 2018 年的一份报告中提到三项前端相关的战略技术：Digital Twin、Immersive technologies、Smart Spaces，但当下的前端技术远不足以胜任这些领域。站在 201X 的末尾、互联网下半场的开始，不妨一起看看前端的未来在哪里，有哪些值得投入的方向。
Taro UI 2.0 发布
新增自定义主题功能，适配更多小程序。另附：决战性能之巅 - Taro H5 转换与优化升级.
Semantics to Screen Readers
Assistive technologies (ATs), which are hardware and software that help us perceive and interact with digital content, come in diverse forms. ATs can use a whole host of user input, ranging from clicks and keystrokes to minor muscle movements. ATs may also present digital content in a variety of forms, such as Braille displays, color-shifted views, and decluttered user interfaces (UIs). If you make websites, you may have tested your sites with a screen reader. But how do these and other assistive programs actually access your content? What information do they use? We’ll take a detailed step-by-step view of how the process works.
Taming the front-end monolith
While larger back-end systems are usually split up in terms of responsibilities into what we call (micro)services, the client(s) consuming these services are still monoliths. In terms of debugging and coherence this must obviously offer some advantage, otherwise, such a concentration of knowledge seems inefficient and unmaintainable. In this post, I will try to tackle the problem with a solution proposal that works especially great for what I would call “portal-like applications”.
Implications of Rewriting a Browser Component in Rust
Six tips for better web typography
How do we avoid the most common mistakes when it comes to setting type on the web? That’s the question that’s been stuck in my head lately as I’ve noticed a lot of typography that’s lackluster, frustrating, and difficult to read. So, how can we improve interfaces so that our content is easy to read at all times and contexts? How do learn from everyone else’s mistakes, too? 另附：Typography for Developers.
Feross Aboukhadijeh, The Lost art of midi bringing back to the web
In the days of Geocities and Angelfire, a quirky HTML tag called bgsound enabled sound files to play in the background of webpages. Usually, these files were in the MIDI format. What a glorious era that was! Sadly, bgsound has been removed from browsers and MIDI is obscure and hard to play back. In this talk, we’ll bring MIDI and bgsound back from the dead using WebAssembly, Emscripten, Web Audio, and Web Components. When we’re finished, you’ll be able to give your webpages the 90’s treatment in a modern, standards-compliant way!
Server-Side Caching in Expressjs
Caching has always been one of the many optimization tricks widely used in software development. In this post, we will look at how to enable server-side caching in Expressjs. Read on.
ReDoS vulnerabilities in npm spikes by 143% and XSS continues to grow
Regular expression denial of service (ReDoS) attacks exploit the non-linear worst-case complexity vulnerabilities that some regex patterns can lead to. For a single-threaded runtime this could be devastating, and this is why Node.js is significantly affected by this type of vulnerability. We found that there were a growing number of ReDoS vulnerabilities disclosed over the last three years, with a spike of 143% in 2018 alone. 另附：Top ten most popular docker images each contain at least 30 vulnerabilities、Node.js February 2019 Security Releases、Breaking Down the MarioNet Service Worker Attack? Can Your Website Be Compromised?.
Reconstructing Twitter’s Firehose
How to reconstruct over 99% of Twitter’s firehose for any time period.
Managing Uber’s Data Workflows at Scale
At Uber’s scale, thousands of microservices serve millions of rides and deliveries a day, generating more than a hundred petabytes of raw data. Internally, engineering and data teams across the company leverage this data to improve the Uber experience. Application of this data spans several use cases, including calculating more efficient uberPOOL routes and making sure Uber Eats orders are delivered while the food is still hot, real-world events represented by data in our infrastructure.
Rebuilding the Profile Highlights System at LinkedIn
One of the many ways to drive member conversations and active communities is through profile highlights, which are insights between the viewer of a profile and that profile’s owner. In this post, we will touch on why we decided to rebuild the backend system that supports this feature, its technological background, how we re-architected it, and the benefits and successes achieved thus far.
Serverless Needs a Bolder, Stateful Vision
The Requirements of Serverless Are Evolving from the Infrastructure, up to the Application Logic. The enterprise is broadly replatforming data centers on containers, Kubernetes, and cloud-native frameworks in its orbit, and the adoption and momentum have been remarkable.
MySQL Challenge: 100k Connections
In this post, I want to explore a way to establish 100,000 connections to MySQL. Not just idle connections, but executing queries. 100,000 connections. Is that really needed for MySQL, you may ask? Although it may seem excessive, I have seen a lot of different setups in customer deployments. Some deploy an application connection pool, with 100 application servers and 1,000 connections in each pool. Some applications use a “re-connect and repeat if the query is too slow” technique, which is a terrible practice. It can lead to a snowball effect, and could establish thousands of connections to MySQL in a matter of seconds. So now I want to set an overachieving goal and see if we can achieve it. 另附：ValuStor — a memcached alternative built on Scylla、SageDB: a learned database system.
Fearless concurrency: how Clojure, Rust, Pony, Erlang and Dart let you achieve that
In this article, we’ll have a quick look at a few of them, from new to not-so-new languages. I don’t intend to give an extensive analysis of each solution, or make a formal comparison between them. My intention is to simply explain the basics of each solution and how they can be used in practice (with code samples that show off what the result of using the models might look like), so that other developers may have an easier time understanding them and deciding which solution, or language, might be better applicable to their particular problems.
Why Does Julia Work So Well?
Julia is fast by design. Type stability and multiple dispatch is necessary to do the specialization that is involved in Julia’s compilation to make it work so well. The robust type system is required to make working with types at such a fine level in order to effectively achieve type-stability whenever possible, and manage optimizations when it’s not totally possible.
Launching Flutter 1.2 at Mobile World Congress
Flutter 1.2 is the first feature update for Flutter. We’ve focused this release on a few major areas:
- Improved stability, performance and quality of the core framework.
- Work to polish visual finish and functionality of existing widgets.
- New web-based tooling for developers building Flutter applications.
Mozilla releases the largest to-date public domain transcribed voice dataset
Mozilla crowdsources the largest dataset of human voices available for use, including 18 different languages, adding up to almost 1,400 hours of recorded voice data from more than 42,000 contributors. From the onset, our vision for Common Voice has been to build the world’s most diverse voice dataset, optimized for building voice technologies. We also made a promise of openness: we would make the high quality, transcribed voice data that was collected publicly available to startups, researchers, and anyone interested in voice-enabled technologies.
Announcing a New Management Structure for Ecma TC39
Highlights from Git 2.21
The open source Git project just released Git 2.21 with features and bug fixes from over 60 contributors. We last caught up with you on the latest Git releases when 2.19 was released. Here’s a look at some of the most interesting features and changes introduced since then. 另附：GitHub - Release Radar · February 2019.
React Native Open Source Update March 2019
We announced our React Native Open Source roadmap in Q4 2018 after deciding to invest more in the React Native open source community. For our first milestone, we focused on identifying and improving the most visible aspects of our community. Our goals were to reduce outstanding pull requests, reduce the project’s surface area, identify leading user problems, and establish guidelines for community management. In the past two months, we made more progress than we expected. 另附：Choosing React Native For Your Mobile Tech Stack _ Ideamotive.
Go 1.12 is released
The latest Go release, version 1.12, arrives six months after Go 1.11. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before.
Ionic 4 Roadmap: New Features, Release Schedule, & Goals—Oh My!
We’ve been overwhelmed with the positive feedback, and so far 4.0 has exceeded our expectations of what’s been possible with a rewrite. So, with the official Ionic Framework 4.0.0 release behind us, I figured now would be a great time to lay out our roadmap and immediate plans for next steps—a vision, if you will, for where we hope to take Ionic Framework in the near future…
play.js - The Node.js and React Native IDE for iPhone and iPad
play.js brings the power of React Native and Node.js to your iOS device. Finally you can use your iPhone or iPad to develop fast and reliably scripts and applications with a full fledge code editor that features code autocompletion, multi-file projects, documentation and much more.
Package Diff: A Way to diff npm Packages
Package Diff displays a diff between two versions of the same npm package. Why not simply link to the GitHub repository of a package using two different version hashes? Well, the version of an npm package checked into source control isn’t always the same as the version used inside of an npm package. This is commonly done for well-intending reasons, such as checking in raw source code but packaging a minified version. This is sometimes done for nefarious reasons as well, such as when a malicious package is published. 另附：Introducing Package Diff.
Zero Server - Zero configuration web framework
Zero abstracts the usual project configuration for routing, bundling, and transpiling to make it easier to get started. It allows you to build your application without worrying about package management or routing. Write your code in a mix of Node.js, React, HTML, MDX, and static files and put them all in a folder.
Ember 3.8 Released
The Ember project is releasing version 3.8 of Ember.js, Ember Data, and Ember CLI. This release kicks off the 3.8 beta cycle for all sub-projects. We encourage our community (especially addon authors) to help test these beta builds and report any bugs before they are published as a final release in six weeks’ time. The ember-try addon is a great way to continuously test your projects against the latest Ember releases.
Announcing Apollo Client 2.5
One year ago, we had a vision for the future of state management. We wanted to provide developers with one source of truth for all of their app’s data and one unified interface to access it. Our dream is finally a reality with the release of Apollo Client 2.5, now with local state management! 附：Apollo Client with REST APIs.
Understanding a Performance Issue with “Polymorphic” JSON Data
We’re so happy you want to try out TypeScript with React! This is meant to be a guide for React developers familiar with the concepts of TypeScript but who are just getting started writing their first React + TypeScript apps. 另附：Why I Was Wrong About TypeScript • TJ VanToll.
ReactN is a extension of React that includes global state management.
Automatically format your numbers and currencies.
Tiny milisecond conversion utility.
Lightweight UI components for Vue.js based on Bulma.
Level Up with WebAssembly
A practical guide to building WebAssembly applications. 另附：Wasmer - Universal Binaries Powered by WebAssembly.
Halley Game Engine
A lightweight game engine written in C++14. It has been used to ship Wargroove, a turn-based strategy game, on Windows, Mac (experimental), Nintendo Switch and Xbox One (soon PS4!). The Halley Game Engine is licensed under the Apache 2.0 license. 另附：CSS powered 3D environment.
Zulip 2.0: Open source team chat
Zulip is the world’s most productive team chat software, used by thousands of teams as an alternative to Slack, HipChat, Mattermost and IRC. Zulip’s unique topic-based threading combines the immediacy of chat with the asynchronous efficiency of email-style threading, and is 100% free and open source software. Zulip 2.0 is a huge release, with 1900 new commits since November’s 1.9.
k3s - 5 less than k8s
Lightweight Kubernetes. Easy to install, half the memory, all in a binary less than 40mb. Great for: Edge, IoT, CI, ARM, Situations where a PhD in k8s clusterology is infeasible.
We Need Chrome No More.
Ten years ago, we needed Google Chrome to break the Web free from corporate hegemony, and we managed to do so for a brief period. Today, its dominance is stifling the very platform it once saved from the clutches of Microsoft. And no one, beside Google, needs that.
For the 30th anniversary of the web, CERN brought nine web nerds together to recreate the very first web browser — Or a working replication of it anyway, as you use it from your web browser, inception style. I love that it was written in React and the font is an actual replication of what was used back then. What a cool project. They even opened-sourced the code. 另附：Help build a timeline of the web’s history.
Explore how your product should work, before building it. Sketch.systems helps software designers think about complex product behavior. Sketch out states, add prototypes, and clarify questions quickly. 另附：Formally Specifying UIs.
Redesigning Github repository page
Github design is pretty good: it gets the job done, it’s clean, has consistent visual language, its design is calm and suitable for everyday use. Given all that, there are still many areas that could be improved. Today we’ll take one interface—repository page—and look what UI problems it has and if we can fix them. 另附：UI redesigns are mostly a waste of time.
The future of UX design is not on a screen
The world has changed with such a speed in just 10 years, that I cannot even imagine what might happen in next ten years. It might be strange to think that we are in the middle of a great change right now. The generation before us is facing hard time using touch-screen mobile phones, and the generation after us is making robots. We are in the middle, dealing with everything like a mid-life crisis! But what will happen to UX ten years from now? Let’s look at some of the changes that may happen in merely a decade from now (this is just a personal forecast, and may or may not stand true!).
My Twitch Live Coding Setup
This article is an updated review of tools and software that I use to run my live coding stream each Sunday. If you’re interested in the original article, which offers some advice outside of tools and software, feel free to read it as well! When I wrote the original post, it was intended to be a “lessons learned” post, and I didn’t expect folks to use it as a real guide. Reflecting upon that, I’m going to share my current setup with more attention to detail this time, as I still get questions on a weekly basis from folks looking for more information.
AR, VR & the Future of Learning
Imagine a geography lecture where students can really experience the Amazon forest and all the species instead of a teacher delivering a plain boring lecture. Or an anatomy lecture where instead of listening to the long lectures having all the complicated terms you are actually visualizing the whole skeleton system or a whole organism. And to all the engineers out there, imagine using all the concepts from books and applying it on a machine via virtual reality.
Microsoft’s HoloLens 2_ a $3500 mixed reality headset for the factory
There’s one more unremarkably remarkable thing: even though it was just a demo, I was playing the part of a worker because that’s who the HoloLens 2 is exclusively designed for — workers, not consumers. 附：New HoloLens 2 gives Microsoft the edge in the next generation of computing、Microsoft releases new apps that make augmented reality way more helpful to businesses.
自 2001 年起，《麻省理工科技评论》每年都会评选出当年的“十大突破性技术”，这份在全球科技领域举足轻重的榜单曾精准预测了脑机接口、智能手表、癌症基因疗法、深度学习等诸多热门技术的崛起。今年的榜单与过去稍有不同，同时，他们还邀请到了比尔·盖茨先生作为客座评选人，全程参与了评选工作，并为本届榜单作序。本届榜单的入选技术也多是以“人类福祉”为最终目标。另附：1909-2019，历代浪潮扑空者。
– THE END –