FEX 技术周刊 - 2019/09/23
深阅读
Software Architecture is Overrated, Clear and Simple Design is Underrated
https://blog.pragmaticengineer.com/software-architecture-is-overrated/
Software architecture best practices, enterprise architecture patterns, and formalized ways to describe systems are all tools that are useful to know of and might come in handy one day. But when designing systems, start simple and stay as simple as you can. Try to avoid the complexity that more complex architecture and formal tools inherently introduce.
The 6 Most Common Types of Logic in Large Applications [with Examples]
https://khalilstemmler.com/articles/software-design-architecture/organizing-app-logic/
In this article, you’ll learn about the Clean Architecture, why we should separate the concerns of large applications into layers, the 6 most common types of application logic, and which layer they belong to.
Eric Evans Wants to Improve the Language of DDD
https://www.infoq.com/news/2019/09/evans-improve-language-ddd/
Evans believes that now, 15 years after his book was published, it may be time to take a few steps back to the fundamentals, then consciously make new steps forward. One area of focus should be to address the confusion that results from the common alignment of bounded contexts, subdomains, and organizations.
A Guide to Component Driven Development (CDD)
https://itnext.io/a-guide-to-component-driven-development-cdd-1516f65d8b55
Let components drive the development of your applications.
Wikipedia’s JavaScript initialisation on a budget
https://phabricator.wikimedia.org/phame/live/7/post/175/wikipedia_s_javascript_initialisation_on_a_budget/
This week saw the conclusion of a project that I’ve been shepherding on and off since September of last year. The goal was for the initialisation of our asynchronous JavaScript pipeline (at the time, 36 kilobytes in size) to fit within a budget of 28 KB – the size of two 14 KB bursts of Internet packets. In total, the year-long effort is saving 4.3 Terabytes a day of data bandwidth for our users’ page views.
Contemporary Front-end Architectures
https://blog.webf.zone/contemporary-front-end-architectures-fb5b500b0231
How we got here? A front-end engineer’s perspective!
How we reduced traffic 10-20 times - data compression in real-time collaboration
https://ckeditor.com/blog/How-we-reduced-traffic-10-20-times-data-compression-in-real-time-collaboration/
When you are creating a complex system from scratch, you have hundreds of problems to solve and the amount of data you send over the network is usually not the first one to be tackled. It was no different in CKEditor 5. Donald Knuth once wrote: “Premature optimization is the root of all evil.” Optimizing upfront, before we know that we actually need to, is something that we consciously avoid when building our WYSIWYG editor capable of handling features such as real-time collaboration.
降低软件复杂性一般原则和方法
https://tech.meituan.com/2019/09/19/common-method-of-reduce-complexity.html
斯坦福教授、Tcl语言发明者John Ousterhout 的著作《A Philosophy of Software Design》[1],自出版以来,好评如潮。按照IT图书出版的惯例,如果冠名为“实践”,书中内容关注的是某项技术的细节和技巧;冠名为“艺术”,内容可能是记录一件优秀作品的设计过程和经验;而冠名为“哲学”,则是一些通用的原则和方法论,这些原则方法论串起来,能够形成一个体系。正如”知行合一”、“世界是由原子构成的”、“我思故我在”,这些耳熟能详的句子能够一定程度上代表背后的人物和思想。用一句话概括《A Philosophy of Software Design》,软件设计的核心在于降低复杂性。 本篇文章是围绕着“降低复杂性”这个主题展开的,很多重要的结论来源于John Ousterhout,笔者觉得很有共鸣,就做了一些相关话题的延伸、补充了一些实例。虽说是”一般原则“,也不意味着是绝对的真理,整理出来,只是为了引发大家对软件设计的思考。
打破框架的范式之争
https://mp.weixin.qq.com/s/0YuYBqD2qWf_EgKMbow1dw
面对框架之间的范式之争,我们需要主动接收正面的、反面的,各种不同的信息,减少信息极化。我们需要了解 JavaScript 是一个多范式的语言。而不同的范式,有各自适用的场景。就算框架作者们强调了自己关注的范式和路线,不代表他们否定其它范式。我们可以通过编译技术,和语言的元编程特性(比如 Proxy/Reflect),让我们的代码得到新的语义和行为,构建不同范式之间的衔接点。保持开放和包容的心态。打破框架的范式之争,实际上,是打破我们心中的偏见。
从网页到应用 - 所经历的前端发展史
https://mp.weixin.qq.com/s/y1SX8CQmc8WROBrSBGbpgw
本次分享将会通过介绍讲师从业以来所经历的项目,以及在不同项目中的思考、技术选型、发现的问题等角度,来阐述前端发展过程中“变”的部分与“不变”的部分,希望能帮助大家对前端演进与发展,提供更多的思考。分享大纲:工程化的发展史,从前端到全栈;移动互联网的发展史,从前端到全端;历史发展过程中,我们所能沉淀下来什么。
微前端说明书
https://zhuanlan.zhihu.com/p/82051427
互联网公司技术选型三定律 1. 流行即正义 2. 新鲜即正义 3. 复杂即正义。本文分为两个部分:“战略”和“战术”。前者关于为什么以及在什么场景下使用微前端,后者关于采用什么的技术实施微前端。这篇文章里我会反对某些方案,赞成某些方案,仅代表个人意见。开头的“互联网公司技术选型三定律”是我个人总结的,也是我在这篇文章里极力反对的。这三条定律的产生有行业的原因也有程序员职业的原因。三定律的存在导致了某些技术的被曲解和滥用,其中就有微前端。在本文中也会引用这三定律做说明。 if people can’t build monoliths properly, microservices won’t help.
(Why) Some HTML is “optional”
https://remysharp.com/2019/09/12/why-some-html-is-optional#targetText=(Why)%20Some%20HTML%20is%20%22optional%22
Chris Coyier blogged recently on weird looking HTML. It’s a nice short post and I’d say it’s worth knowing these optional features (potentially known as defaults). My favourite optional is <script>
and not having to include the type attribute. But Chris’ first example is the most common, the optional closing </p>
tag. What (I think) is an interesting question is: why?
Why Go and not Rust?
https://kristoff.it/blog/why-go-and-not-rust/
Go is a better Java / C#, while Rust is not. The clarity that Go can bring to enterprise software development is without a doubt much more valuable than removing garbage collection at the cost of worsening the overall productivity. Rust is a better C++, and even if you occasionally hear that Go is a better C, well, that’s just not the case. No language with a built-in garbage collector and runtime can be considered a C. And don’t be mistaken, Rust is a C++, not a C. If you want a better C, take a look at Zig. 另附:TinyGo - Go compiler for small places.
新鲜货
Unveiling Dark, a New Language and Environment for Backends
https://darklang.com/
https://medium.com/darklang/unveiling-dark-e0be6f1e0b06
Backends are needlessly complicated. Dark is a holistic programming language, editor, and infrastructure for building backends without accidental complexity. Dark’s mission is to democratize coding by making it 100x easier to build software, so the next billion people can code.
The arrival of Java 13!
https://blogs.oracle.com/java-platform-group/the-arrival-of-java-13
Five enhancements are delivered with Java 13, inclusive of two preview features: Dynamic CDS Archives, ZGC: Uncommit Unused Memory, Reimplement the Legacy Socket API, Switch Expressions (Preview), Text Blocks (Preview).
IPFS Desktop 0.9 released
https://blog.ipfs.io/2019-09-19-ipfs-desktop-0-9/
IPFS Desktop has come a long way to reach its current form. We are here to celebrate and announce the release of 0.9.0 and share the story of this application and, of course, all the exciting new features.
New Query Language for Graph Databases to Become International Standard
https://neo4j.com/press-releases/query-language-graph-databases-international-standard/
Neo4j, the leader in graph databases, announced today that the international committees that develop the SQL standard have voted to initiate GQL (Graph Query Language) as a new database query language. Now to be codified as the international standard declarative query language for property graphs, GQL represents the culmination of years of effort by Neo4j and the broader database community.
Learning Machine Learning - An online comic from Google Ai
https://cloud.google.com/products/ai/ml-comic-1/
另附:Machine Learning For Front-End Developers With Tensorflow.js、AI-Generated Faces: Free Resource of 100K Faces Without Copyright.
All 245 Entries in The 2019 JS13kGames Competition
https://js13kgames.com/entries/2019
HTML5 and JavaScript Game Development Competition in just 13 kB.
React Rainbow Components: Another Suite of React Components
https://react-rainbow.web.app/
React Rainbow is a collection of components that will reliably help you build your application in a snap. Give it a hack and let us know what you think.
Relay 6.0.0
https://github.com/facebook/relay/releases/tag/v6.0.0
Relay is a JavaScript framework for building data-driven React applications.
Storybook 5.2
https://medium.com/storybookjs/storybook-5-2-794958b9b111
World-class design systems infrastructure.
GPU.js v2.0
https://github.com/gpujs/gpu.js/releases/tag/2.0.0
GPU.js is a JavaScript Acceleration library for GPGPU (General purpose computing on GPUs) in JavaScript for Web and Node.
Kea - Data Layer for React. Powered by Redux.
https://kea.js.org/
Think of React as the User Interface (UI) layer of your application. It takes your application’s state and converts it into something the user can interact with. It is exceptionally good at this. React, however, is unopinionated as to where you actually store this state. While it provides some primitives to get you going (think useState), most apps eventually implement a dedicated state management solution. Kea is one such solution. It adds a Data Layer to React’s UI layer and acts as the brain of your application. There is seamless interoperability between both layers as we are standing on the great work done by the react-redux team.
SortableJS
https://sortablejs.github.io/Sortable/
JavaScript library for reorderable drag-and-drop lists
Geometric.js
https://github.com/HarryStevens/geometric
A JavaScript library for doing geometry.
Emittery - Simple and modern async event emitter
https://github.com/sindresorhus/emittery
Emitting events asynchronously is important for production code where you want the least amount of synchronous operations. Since JavaScript is single-threaded, no other code can run while doing synchronous operations. For Node.js, that means it will block other requests, defeating the strength of the platform, which is scalability through async. In the browser, a synchronous operation could potentially cause lags and block user interaction.
Neovim v0.4.0
https://github.com/neovim/neovim
Vim-fork focused on extensibility and usability.
Free Online Image Editor
https://pqina.nl/doka/image-editor/
an online image editor using WebGL and CSS transforms
Microsoft’s C++ Standard Library
https://github.com/microsoft/STL
This is the official repository for Microsoft’s implementation of the C++ Standard Library (also known as the STL), which ships as part of the MSVC toolset and the Visual Studio IDE.
Modern C, Second Edition
https://gustedt.wordpress.com/2019/09/18/modern-c-second-edition/
A new edition of the book Modern C is now available under a CC license via the following page https://modernc.gforge.inria.fr/ . This edition is the result of a collaboration with Manning, and improves a lot over the previous edition; material has been rewritten and reordered, a lot of graphics have been added.
Pure Bash Bible
https://github.com/dylanaraps/pure-bash-bible
A collection of pure bash alternatives to external processes. The goal of this book is to document commonly-known and lesser-known methods of doing various tasks using only built-in bash features. Using the snippets from this bible can help remove unneeded dependencies from scripts and in most cases make them faster. I came across these tips and discovered a few while developing neofetch, pxltrm and other smaller projects
The Pragmatic Programmer, 20th Anniversary Edition
https://pragprog.com/book/tpp20/the-pragmatic-programmer-20th-anniversary-edition
For twenty years, the lessons from The Pragmatic Programmer have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology. This classic title is regularly featured on “Top Ten” lists, and many corporations issue it to their new hires. This new 20th Anniversary Edition offers a fresh look at the modern development landscape, cutting through the “business as usual” and tired advice from the net to help guide you through the next twenty years and beyond. Featuring new tips, new topics, and revisions throughout, you don’t want to miss this one.
Grant for the Web
https://www.grantfortheweb.org/
Grant for the Web is a $100M fund to boost open, fair, and inclusive standards and innovation in web monetization.
设计
Ant Design 1.0 背后的故事:把艺术变成技术
https://www.yuque.com/lyndon/daylesson/xw45g0
距离 Ant Design 1.0 发布,已经过去整整 3 年有余。还是有很多人对 Ant Design 如何起步、如何成长,保留着浓厚的兴趣。其中,Ant Design 是一个设计体系,而 Ant Designers 是一群人。本文将讲讲 Ant Design 1.0 背后的故事,还原 3-4 年前那些人、那些事。
当这些品牌赚得盆满钵满的时候,也是中国设计师的成长机会被蚕食的时候
https://mp.weixin.qq.com/s/7YX0GWMByd6zOsgpzqMW3A
人类不能总对自己说,一定会变好的,然后继续刷着手机,无动于衷地等着未来到来,我们其实是要去做出努力的。我们有一种能力叫做想象,就是我们会去观察,会去提问,去尝试,去实践,把我们想要的未来,通过设计,通过我们自己的双手把它实现出来,变成我们的现实,这个过程其实就是设计在做的事情。我们做的每一件设计,我们画的每一个草稿,其实都是对未来的一种规划。我觉得设计不一定是只能够探讨日常审美,它也可以被赋予道德、价值和意义,这就是我所理解的最好的设计。
iOS and iPadOS 13: The MacStories Review
https://www.macstories.net/stories/ios-and-ipados-13-the-macstories-review/
Following years of a judicious union between platforms, it’s time for iPad to embark on its own journey. 另附:How To Prepare Your App For iOS 13.
Mixing UX and Research Science to Make Music
https://medium.com/google-design/mixing-ux-and-research-science-to-make-music-7538d9cda035
Lessons in design considerations and communication best practices, from two teams that cross-pollinated and built a ML-powered music-making tool.
Sketch 58 — Smart Layout!
https://medium.com/sketch-app-sources/sketch-58-smart-layout-117616e6c241
https://medium.com/sketch-app-sources/smart-layout-in-sketch-58-navigation-menu-dropdown-menu-tutorial-13455fbbff82
This is the most important feature since Symbol Overrides. Finally, you can make Symbols that behave in the same way as its final implementation — everything thanks to Smart Layout. In this story, you will learn what Smart Layout is and what kind of more granular features it includes. I will also show you how to use it in practice.
Level Up – A Guide to Game UI (with Infographic)
https://www.toptal.com/designers/gui/game-ui
Like websites or mobile apps, video games have common UI components that help players navigate, find information, and accomplish goals. From start screens to coin counters, video game UI components are a crucial aspect of playability (a player’s experience of enjoyment and entertainment). To understand how these components impact the gaming experience, we must quickly address two concepts that are vital to video game design: Narrative and The Fourth Wall.
产品及其它
The Internet Relies on People Working for Free
https://onezero.medium.com/the-internet-relies-on-people-working-for-free-a79104a68bcc
Who should be responsible for maintaining and troubleshooting open-source projects? 另附:5年没有工资收入,他如何支撑世界上最大的免费编程社区?
Raising Prices is Hard
https://www.backblaze.com/blog/raising-prices-is-hard/
Everyone is faced with the decision to raise prices at some point. It sucks, but in some cases you have to do it. Most companies, especially SaaS businesses, will look at their revenue forecasts, see a dip, run a calculation predicting the difference between the revenue increase and how many customers might leave, and then raise prices if the math looks favorable. Backblaze is not most companies — here’s how we did it. In this post I’ll dive in to our process for how we wanted the price increase to go, why we decided to build the extension program for existing customers, what went in to our communication strategy, and what the reactions were to the price increase, including looking at churn numbers.
下一个10年,解决问题靠“大脑”!
https://mp.weixin.qq.com/s?__biz=MzIxNTAzNzU0Ng==&mid=2654637523&idx=2&sn=c32ced384546876f19e50cd95e771edf
关于人工智能与人类的关系问题,现在有两个阵营。一方阵营以物理学家霍金、马斯克、孙正义和比尔盖茨为代表,对人工智能是否超越人类保持警惕性。另一方阵营是以计算机领域的很多专家为主,国外的很多实验室主任,还有国内的谭铁牛院土、王飞跃和刘伟老师等,不认同人工智能会全面超越人类。在关于人工智能是否超越人类的争论当中,一种被称之为超级智能的新形式正在悄然兴起。什么意思?就是通过我们对互联网大脑的结构的研究,重新给予了超级智能一个和原来的人工智能领域的超级智能的想法不太一样的定义。那具体是什么,接下来会阐述。
企业里最难管的不是员工,而是CEO自己
https://mp.weixin.qq.com/s/JI0ZLPvwG-wdQknPWNtIGw
在当今技术变革的大潮下,无论传统企业还是互联网公司都不可避免地卷入其中。技术创新、数据革命成了创业者口中的高频词汇,但对于怎么做,大家依旧一脸茫然。近日,阿里巴巴合伙人、蚂蚁金服总裁胡晓明(花名:孙权)在湖畔课堂上,分享了他对企业“技数”(技术与数据)战略落地的思考。另附:多数问题,都是领导惹的祸?、老板“无所不能”,公司迟早关门。
对数据可视化有兴趣的可以阅读由 AntV 带来的 墨者修齐 2019-09-23·植物身上的黄金分割、WDVP Gallery 2019、通俄门调查可视化