Engineering (3)
SFU, MCU, or P2P: What's the Difference Between These WebRTC Architectures?
SFUs are commonly used in VoIP and video conferencing applications. SFUs differ from Peer-to-Peer (P2P) connections, in which each party sends and receives media directly to and from the other party. They are also different from Multipoint Control Units (MCUs), which receive media from all parties and then broadcast it to all other parties. SFUs
6 Jetpack Compose Best Practices for Optimizing Your App Performance
Since Google announced Jetpack Compose stable 1.0, many companies are getting started to adopt Jetpack Compose into their projects. According to Google's What developers are saying, Jetpack Compose increases their productivity and code quality. Jetpack Compose has a dedicated optimization system but it's essential to understand the rendering mechanism of Jetpack Compose for improving your
Stream Loves Open Source: Aug 2022
At Stream, we rely on open source to build our products and SDKs. In this article, we want to take the time to highlight some of our favorite projects and maintainers . The key takeaway of this article is to support open source projects you rely on in any way you can. We can all
Using Xcode: Creating Reusable and Shareable Color Palettes
Having a full range of colors that can be shared and reused in different Xcode projects improves efficiency and workflow because it removes the time wasted in looking for colors that will work together for your projects. Additionally, it ensures consistency of color usage within your apps and projects. Historically, developers and designers create color
Definitive Flutter Painting Guide
"Everything is a widget." Well, yes - but what is a widget? Widgets used in making Flutter apps can themselves be composed of smaller widgets. Most widgets carry some kind of visual component - either defined by themselves or represented by smaller widgets. Unlike native frameworks, Flutter underneath does not use OS views. Instead, Flutter
Exploring Google's Now in Android Open-Source Project
In 2022 Google I/O, Google's DevRel team released an open-source project, Now in Android, built with the modern Android architecture and Jetpack libraries. In this article, you will cover the overall architecture, each layer, and tech stacks that are used in Now in Android project, such as Material3, Jetpack Compose, and app performance. Before you
Transformations in Machine Learning
On 8th September 2020, an article in the Guardian was written by a robot called GPT-3. They asked the robot to write an article about why humans should not be scared of robots and Artificial Intelligence. The human editors wrote the introduction for the article and instructed GPT-3 to generate the next possible sentences iteratively.
Seeding a Core Data Store With Remote JSON Data
There are various situations where you'll find yourself needing to import a sizable amount of JSON to seed a Core Data store. Sometimes you can ship this data alongside your app in the form of a pre-populated SQLite store. Other times, the data that you need to retrieve is so dynamic that shipping the data
Server-Side Vapor Swift Implementation With Google, Apple, and Github Authentication
In this post, you'll learn how to build a server application with the Vapor framework to provide tokens to an iOS app to use with the Stream Chat SDK. You'll learn how to leverage different types of authentication for users and provide them with tokens. Note: for this tutorial, you'll need Xcode 12.3 installed, Homebrew,
App Navigation and Jetpack: The Android Developer Roadmap - Part 3
We've broken down our 2022 Android developer roadmap into a multi-part series. Each section dives deep into important Android fundamentals and the current Android ecosystem. In the last post, we discussed important elements of Android's primary components, including Intents and App Entry Points. In part three, we'll cover the next four sections of our Android
Building Your First Application With Deno
Deno is a recently launched runtime environment for JavaScript and TypeScript used for building modern server-side applications. In this article, you will learn how to build a backend server with Deno. I will show you how to create a live server, create API routes, store environment variables, read and write files in file systems, and
Modeling Retrofit Responses With Sealed Classes and Coroutines
As the rate of data communication increases, the complexity of the application architecture also increases. How an application handles API responses will determine its overall architectural design and code complexity. In this post, you will cover how to model Retrofit responses with Coroutines and Sealed classes to reduce code complexity and make your application architecture
Reducing App and SDK Size With Emerge Tools
The Importance of Mobile App and SDK Size When developing a mobile app, one crucial performance metric is app size. An app's size can be difficult to accurately measure with multiple variants and device spreads. Once measured, it's even more difficult to understand and identify what's contributing to size bloat. Many people think that as
App Components: The Android Developer Roadmap - Part 2
We've broken down the Android developer roadmap into five modules, each covering different aspects of the Android development ecosystem. In the last post, we discussed important elements of Android's architecture, including the primary Android languages, the OS, the Android Platform, and the App Manifest. In part two, we'll cover the next three sections of our
Build Vikings Feb 2022 Winners
As avid open-source Flutter developers, the Stream team was in full attendance at this year's Flutter Vikings conference. Similar to our previous participation at Flutter Vikings, the team decided to host a codelab and hackathon for the event. For this year's codelab, entrants were required to create a chat application with custom stickers and animations. A daunting task! We
Exploring Jetpack WindowManager for Foldable Devices
Of this new generation of foldable devices, dual-screen devices, which provide symmetrical screens that work together in unique ways, are particularly interesting. But, they also present unique challenges. A key feature of these foldable, responsive UIs is that screen sizes can change in runtime. This means that applications should recognize screen changes in runtime, which
Recap the Android Developer Roadmap in 2025
It has been over three years since the launch of the Android Developer Roadmap, and Android technologies continue to evolve rapidly across various areas. At the time, Jetpack Compose had just reached its 1.0 stable release, and developers were eagerly anticipating its maturity and ecosystem growth. Over time, numerous solutions and tools have emerged to
Why Every Flutter Dev Should Care About BuildContext
While the quest for abstraction and the purist's assertion that all APIs should be simple by design are both noble pursuits, there is a point where too much abstraction becomes harmful and hinders the personal growth of new developers. One of the most common complaints of developers who are new to Flutter is the general
Exploring Material You for Jetpack Compose
You'll learn all about Material You and how you can dynamically import colors from the Material 3 Compose library into our versatile Chat Compose SDK, giving your app a more polished and personalized feel for your users. To show you just how powerful the API is, you'll also learn how to use the Material Theme
macOS Performance Comparison: Flutter Desktop vs. Electron
This article covers the following: The underlying engines and technologies powering Flutter and Electron. Important performance considerations and how they relate to Flutter Desktop and Electron. Real performance metrics demoing example Flutter Desktop and Electron applications on macOS. Before reading on, keep in mind that this article isn't intended to promote one solution over the
Flutter vs React Native: The Ultimate Comparison
Over the years, it's become common for developers to compare Flutter and React Native. Both are prevalent multi-platform tools for quickly and easily building mobile applications. If you walk into a developer meetup and ask the question, "What should I pick, Flutter or React Native?", you're setting the stage for a very spirited debate. In
Building a Production-Ready Chat SDK Using Jetpack Compose
Released in July 2021, Jetpack Compose is the highly anticipated native UI toolkit for Android that is designed to help developers build faster and with more ease. After two years in development, Jetpack Compose is now in its 1.0 version, and is both stable and deeply flexible. Stream's Lead Android Developer for Jetpack Compose, Filip
Keeping Public API in Check With the Kotlin Binary Validator Plugin
Within the Stream Chat Android SDK project, we use the Kotlin binary compatibility validator plugin to keep track of all the changes we make to our public API. This is a first-party plugin by JetBrains, though it's still experimental (it's an incubator project by JetBrains on GitHub). In this article, you'll learn what the plugin
Add Location Sharing to a Messaging App Using Flutter
A stand-out feature of the most popular messaging applications is the ability to share a user's location quickly and conveniently with trusted peers. Using Stream Chat and Flutter, we can implement a similar feature in very little time. In this article, we will build a small location-sharing chat feature using Flutter, Stream Chat, and the
Clean Chat Example App with Jetpack Compose
Stream now provides a Jetpack Compose Chat SDK. Check out the Compose Chat Messaging Tutorial and give it a try today! We've recently published a Jetpack Compose design sample on Twitter, recreating the Contacts & Messages design by Mickael Guillaume on Dribbble. The source code for this sample is available on GitHub. In this article,
React Native: How To Build Bidirectional Infinite Scroll
Introduction There have been many discussions on Stack Overflow and GitHub around implementing infinite scroll using React Native, on top of FlatList or SectionList. I've found that there aren't any easy solution out there for bidirectional infinite scroll for React Native. Recently, while working on v3.0.0 of React Native Chat SDK at Stream, we had
Swift WebSockets: Starscream or URLSession in 2021?
Building applications such as online games and real-time chat has never been more straightforward since the standardization of the WebSocket protocol in 2011. Before that, most app experiences were plagued with manual refreshes to access the latest data available. Remember F5? Since then, most apps use WebSockets in some form to update their user interface
Singleton vs Dependency Injection in Swift
When coding iOS apps, we often create classes that manage a particular aspect of the application. For example, it's common to develop "manager" classes that encapsulate methods for interacting with a specific application aspect. These aspects commonly include the REST API, WebSockets, database, caching, notifications, chat, etc. That is what's called the Facade pattern, and
Publishing Android libraries to MavenCentral in 2021
Introduction This is an updated version of an article published two years ago on blog.autsoft.hu. This new version supports non-Android libraries, uses command line GPG handling instead of a specific Windows GUI app, includes new best practices, and uses GitHub Actions for its CI integration. Update, April 2021: addressed new Sonatype infra, moved to using
Announcing Flutter SDK 1.0.0 Beta
At Stream, we are always trying to find new ways to help developers build great apps in as little time as possible. That's why today, we are thrilled to announce the release of our new Flutter Chat SDK and not one but two new Stream Flutter packages . Our goal with this release is to
Announcing Experimental Multi-Platform Support for the Stream Flutter SDK
Stream is always looking out for the next big thing in developer tools to build new applications. React Native was one of the first mobile development framework supported by our SDKs and is still going strong. We announced support for Dart/Flutter in February of 2020. Flutter has been one of our fastest-growing integrations since -
How to use GitHub with Android Studio
Android Studio makes it easy to push changes to your favorite Open Source, professional, or personal projects on GitHub. In this tutorial, we'll learn how to use GitHub with Android Studio. We'll use an Open Source contribution for context. Android developers use Open Source projects to speed up development or enable functionality that is otherwise
Text-to-Speech Chat App with AWS Polly
We'll be leveraging AWS Polly's natural speech capabilities to implement this feature and Stream's Messaging API for our chat infrastructure and interface. AWS Polly supports dozens of languages and a wide selection of natural-sounding male and female voices. When you send text to AWS Polly's API, it returns the audio to your application as a
Build a One-to-One Chat Application Using JavaScript
This blog post describes an outdated approach to using Javascript against our Chat platform. Javascript developers can now use SDKs specific to their tech stack, like our dedicated Angular Chat SDK. It allows you to build chat experiences with ease. You can still refer to the post below for its concepts and ideas, but
Styled Components vs. CSS Stylesheets
Over the last few years, CSS-in-JS solutions have become prevalent across the front-end landscape with many offerings such as styled-components, and emotion that provides a way to colocate your components and style definitions. The power of these libraries lies in the ability to use JavaScript features to enhance reusability & easily create a design system
How a Go Program Compiles down to Machine Code
Here at Stream, we use Go extensively, and it has drastically improved our productivity. We have also found that by using Go, the speed is outstanding and since we started using it, we have implemented mission-critical portions of our stack, such as our in-house storage engine powered by gRPC, Raft, and RocksDB. Today we are
Go 1.11 Rocket Tutorial
This tutorial combines two of my favorite things, the Go programming language and images of SpaceX rocket launches. With Go rapidly picking up adoption in the developer community, its becoming one of the leading languages for building backend systems. Go's performance is similar to Java and C++, yet it's almost as easy to write as
Takeaways on Building a React Based App with Electron
Earlier this year, Stream launched Winds 2.0, an open-source and native application for macOS, Windows, and Linux, which provides an entirely new way to consume RSS feeds and Podcasts. It was our first time building a native application, so we chose to go with Electron, a framework for creating cross-platform applications. In addition to Electron,
Building an End-to-End Deep Learning GitHub Discovery Feed
There's hardly a developer who doesn't use GitHub. With all those stars, pulls, pushes and merges, GitHub has a plethora of data available describing the developer universe. As a Data Scientist at Stream, my job is to develop recommender systems for our clients so that they can provide a better user experience for their customers. With that said, I wanted to see if I could build a recommendation
Fixing the billion dollar mistake in Go by borrowing from Rust
panic: runtime error: invalid memory address or nil pointer dereference If you ever used Go, you probably saw this error at least once. Somewhere a nil pointer or nil interface was passed to a function that doesn't handle nil. In all cases this is a programming error, either the function should handle nil or the
Go Client Now Available
Go is one of the fastest growing languages around. We ourselves use it extensively inside the Stream API service. Support for Go was added almost two years ago by MrHenry and HyperWorks, which open-sourced a Go client. We are proud to announce that starting today, we are releasing our official Go API client. You can
Moving Beyond EdgeRank for Personalized Newsfeeds
This blog post is broken into two parts and harkens back to learnings from a prior post. The sum of all these parts is altogether my best effort to provide you with a framework of how to take the creation of personalized news feeds to the next level. Part 1: Theory behind a very basic
Using .IO Domain Names for Production Traffic
We're currently updating this article. Please check back soon. In the meantime, check out these helpful resources: APIs: Feeds, Messaging UI Kits: Feeds, Messaging Tutorials: Feeds, Messaging
Why we switched from Python to Go
Updated May 14th 2019 to better reflect improvements to Go in the last 2 years (package management, better performance, faster compile times and a more mature ecosystem) Switching to a new language is always a big step, especially when only one of your team members has prior experience with that language. Early this year, we
Testing Go at Stream
Stream's API is used in production by more than 500 companies and 200 million end users. While we like to move fast, we definitely don't like to break things. An extensive test infrastructure enables us to move quickly and deploy code with confidence. A solid testing workflow is essential to stay productive as your team
Follow Recommendations in Social Networks
Social media is a series of networks connecting individuals, companies, organizations, and groups to one another. These networks can transcend local, national, and international borders connecting people to networks far and wide. With all those connections, how can a user find the ones that they want to connect with? That's where follow suggestions come in.
Best Practices for Recommendation Engines
In this blogpost I will describe how to implement a feature-rich activity feed that will make relevant and accurate personalization algorithms easier to implement. As we have already explored in previous blog posts, app personalization is linking activity feeds and user engagement data. In most cases, a well thought out feed structure provides valuable information
Building a Performant API using Go and Cassandra
Introduction Software performance is critical to a SaaS company like Stream and while the majority of our infrastructure is written in Python, we are actively porting portions of our code base to Go. Stream is an API for building scalable feeds and now handles over 20 billion feed updates a month. While Python has been
Factorization Machines for Recommendation Systems
As a Data Scientist that works on Feed Personalization, I find it it important to stay up to date with the current state of Machine Learning and its applications. Most of the time, using some of the better-known recommendation algorithms yields good initial results; however, sometimes a change in the model is essential to provide customers
Example Ranking Methods for Your Feeds
In this short tutorial we will show you how to use Custom Ranking for your activity streams and news feeds. By default all feeds on Stream are ranked chronologically. Custom ranking allows you to take full control over how your feeds are sorted. Some common use cases include: Showing popular activities higher in the feed
In Depth Guide on Building a REST API with Node.js, Restify & MongoDB
Update for August 2017: This guide has been updated for Restify 5 and Mongo 3.4 with modern Javascript practices. Clone the Github repo to get the full working project. Choosing the Technology With the multitude of JavaScript frameworks and databases available nowadays, there are countless options for building APIs. For this guide, we're working with
Personalization & Machine Learning for News Feeds and Social Networks
Winds is an open source RSS reader is powered by React, Redux, Sails and Stream. This tutorial explains how we've built personalization for Winds, as an example of how using Stream makes it easy to build personalized feeds. About Personalization Personalization is a very broad concept. In this case, personalization equates to leveraging engagement data
An Introduction to Contextual Bandits
In this post I discuss the Multi Armed Bandit problem and its applications to feed personalization. First, I will use a simple synthetic example to visualize arm selection in with bandit algorithms, I also evaluate the performance of some of the best known algorithms on a dataset for musical genre recommendations. What is a Multi-Armed Bandit? Imagine
Building News Feeds & Activity Streams With Meteor
We are happy to announce stream-meteor. This integration library makes it easy to build scalable newsfeeds and activity streams for your Meteor app.
