Arrow is promoted as the functional companion for Kotlin's standard library. Indeed, the package of ready-to-use higher-level abstractions delivered by Arrow has proven so useful that our teams now consider Arrow a sensible default when working with Kotlin. Recently, in preparation for the 1.0 release, the Arrow team introduced several changes, including the addition of new modules but also some deprecations and removals.
In the case where implementation in Node.js is necessary, we see that Fastify is an option that our teams are very happy with. This web framework offers ease in handling request-response validations, support for TypeScript and a plugin ecosystem giving our teams an easier experience developing software. Although it's a good option in the Node.js ecosystem, we stand by our previous advice: don't fall into Node overload scenarios.
We've decided to move Redux back into the Trial ring to show that we no longer consider it the default approach for state management in React applications. Our experience shows that Redux is still a valuable framework in many cases but compared to other approaches, it also leads to more verbose and harder-to-follow code. Throwing Redux Sagas into the mix usually compounds this issue. As an alternative, you can often use the features in recent versions of React to manage state effectively without an additional framework. However, we want to highlight that when you reach the point at which your simple state management solution starts to become complex, it might be worth reaching for Redux after all or perhaps even Facebook’s recently published Recoil.
The Rust programming language continues to grow in popularity and has been voted Stack Overflow's "most loved" language by developers five years in a row. We like it too. It's a fast, safe and expressive language that is increasing in utility as its ecosystem grows. For example, Rust is starting to be used for data science and machine learning and can give a significant performance boost. Also, Materialize is a streaming-oriented, low-latency database written in Rust.
The Kotlin ecosystem keeps growing and more libraries are taking advantage of Kotlin language features to replace their Java alternatives. Strikt is an assertion library that allows you to write test assertions in a very fluent style. It uses Kotlin features such as blocks and lambdas to help make your tests less verbose while maintaining readability. Strikt also supports building custom assertions, which can make your tests more domain specific.
When we wrote about VR beyond gaming a few years ago we made no prediction on how quickly and to what extent VR solutions would be found in fields other than video gaming. In hindsight, we've certainly seen interest and adoption grow but the uptake has been slower than some of us anticipated. One reason could be tooling. Unity and Unreal are two very mature and capable engines for developing VR applications. We also highlighted Godot. However, these engines are quite unlike what most web and enterprise teams are familiar with. As we continued exploring, we realized that web-based VR solutions have come a long way and we've had positive experience with Babylon.js. Written in TypeScript and rendering its applications in the browser, Babylon.js provides a familiar experience for many development teams. Additionally, Babylon.js is open-source software, mature and well-funded, which makes it even more attractive.
Flutter Driver is an integration testing library for Flutter applications. With Flutter Driver you can instrument and drive the test suite on either real devices or emulators. Our teams continue to write unit and widget tests to ensure most of the business functionality in Flutter apps is implemented. However, for testing the actual user interaction, we're assessing Flutter Driver, and you should too.
Although we're big advocates of defining security policy as code, the tooling in this space has been fairly limited. If you're using HashiCorp products (such as Terraform or Vault) and don't mind paying for the enterprise versions, you have the option of using HashiCorp Sentinel. Sentinel is, in effect, a complete programming language for defining and implementing context-based policy decisions. For example, in Terraform it can be used to test for policy violations before applying infrastructure changes. In Vault, Sentinel can be used to define fine-grained access control on the APIs. This approach has all the benefits of encapsulation, maintainability, readability and extensibility that high-level programming languages offer, creating an attractive alternative to traditional, declarative security policy. Sentinel is in the same class of tools as Open Policy Agent but is proprietary, closed-source and only works with HashiCorp products.
We've been really enjoying using TypeScript for a while now and love the safety that the strong typing provides. However, getting data into the bounds of the type system, from say a call to a back-end service, can lead to run-time errors. One library that helps solve this problem is io-ts. It bridges the gap between compile-time type-checking and run-time consumption of external data by providing encode and decode functions. It can also be used as a custom type guard. According to our teams, it's an elegant solution to a rascal of a problem.
In the past we've talked about the improving tooling for applying good engineering practices in data science projects. Kedro is another good addition in this space. It's a development workflow framework for data science projects that brings a standardized approach to building production-ready data and machine-learning pipelines. We like the focus on software engineering practices and good design with its emphasis on test-driven development, modularity, versioning and good hygiene practices such as keeping credentials out of the codebase.
Steady progress has been made since we first wrote about web components in 2014. LitElement, part of the Polymer Project, is a simple library that you can use to create lightweight web components. It's really just a base class that removes the need for a lot of the common boilerplate making writing web components a lot easier. We've had early success using it on projects and are excited to see the technology maturing.
More and more teams using React are reevaluating their options for state management, something we also mention in our reassessment of Redux. Now, Facebook — the creators of React — have published Recoil, a new framework for managing state, which came out of an internal application that had to deal with large amounts of data. Even though we currently do not have much practical experience with Recoil, we see its potential and promise. The API is simple and easy to learn; it feels like idiomatic React. Unlike other approaches, Recoil provides an efficient and flexible way to have state shared across an application: it supports dynamically created state by derived data and queries as well as app-wide state observation without impairing code splitting.
Modern ML models are very complex and require massive amounts of labeled training data sets to learn from. Snorkel started at the Stanford AI lab with the realization that manually labeling data is very expensive and often not feasible. Snorkel allows us to label training data programmatically via the creation of labeling functions. Snorkel employs supervised learning techniques to assess the accuracies and correlations of these labeling functions, and then reweighs and combines their output labels, leading to high-quality training labels. The creators of Snorkel have since come out with a commercial platform called Snorkel Flow. While Snorkel itself is no longer actively developed, it's still significant for its ideas on the use of weakly supervised methods to label data.
Streamlit is an open-source application framework in Python used by data scientists for building good-looking data visualization applications. Streamlit stands out from competitors such as Dash with its focus on rapid prototyping and support for a wide range of visualization libraries, including Plotly and Bokeh. For data scientists who need quick showcases during the experimentation cycle, Streamlit is a solid choice. We're using it in a few projects and like how we can put together interactive visualizations with very little effort.
SWR is a React Hooks library for fetching remote data. It implements the stale-while-revalidate HTTP caching strategy. SWR first returns data from cache (stale), then sends the fetch request (revalidate) and finally refreshes the values with the up-to-date response. Components receive a stream of data, first stale and then fresh, constantly and automatically. Our developers have had a good experience using SWR, dramatically improving the user experience with always having data on the screen. However, we caution teams to only use SWR caching strategy when appropriate for an application to return stale data. Note that HTTP requires that caches respond to a request with the most up-to-date response held that is appropriate to the request, and only in carefully considered circumstances is a stale response allowed to be returned.
Testing Library is a family of packages for testing applications in numerous frameworks such as React, Vue, React Native and Angular among others. This set of libraries helps you test UI components in a user-centric way by encouraging you to test user behavior rather than implementation details, such as the presence of elements in the UI at a certain moment in time. One of the benefits of this mindset is more reliable tests, and this is what we call out as its main differentiator. We recommend you assess this family of libraries when testing your web applications in any framework. Although our direct experience is limited to React Testing Library and Angular Testing Library, we've been impressed with what we've seen.