Home / Companies / Stream / Blog / July 2018

July 2018 Summaries

5 posts from Stream

Filter
Month: Year:
Post Summaries Back to Blog
Asynchronous functions in JavaScript offer both advantages and challenges, particularly in a Node.js context. While they are non-blocking and fast, handling them can be cumbersome due to the need for callbacks. The text discusses the intricacies of Promises and Async/Await, emphasizing that while Promises simplify asynchronous operations compared to traditional callback-based approaches, they don't fully resolve the issue of "callback hell" caused by nested function calls. The document highlights the benefits of Async/Await, which makes asynchronous code appear more like synchronous code, thereby enhancing readability and reducing errors. Although Async/Await can be slightly slower due to its synchronous nature, it provides a cleaner, more concise codebase with effective error handling using try/catch blocks, making it a preferred choice for many developers. The transition from Promises to Async/Await can significantly streamline code, as evidenced by a complete rewrite of a codebase in just a couple of days, resulting in less code overall.
Jul 26, 2018 1,374 words in the original blog post.
Stream, a company specializing in activity feeds, developed Winds, an open-source RSS and Podcast application that gained significant popularity on platforms like Hacker News and Product Hunt. As Winds' user base grew, performance optimization became crucial, prompting the implementation of various strategies to enhance app efficiency. The team focused on reducing API call latency by optimizing database schemas, incorporating caching with Redis, and using tools like New Relic, StatsD, and Grafana for monitoring and visualizing API performance. They also improved MongoDB usage through proper index management and query optimization, and employed Redis for caching to minimize database queries. Additionally, they integrated Bull Queue for managing asynchronous tasks, which helped in maintaining optimal response times, and utilized third-party services like Algolia for efficient search functionality. These approaches collectively improved the application's performance and scalability, demonstrating the importance of using specialized tools and services in the development process.
Jul 19, 2018 2,857 words in the original blog post.
Stream introduced Winds 2.0, an open-source application for macOS, Windows, and Linux that allows users to consume RSS feeds and podcasts, marking their first venture into native app development using Electron and React. They detailed the process of building and publishing an Electron-based app, including using Create React App for React, and preparing the application for Electron. The article covers crucial steps like code signing with electron-builder, generating provisioning profiles, and setting up entitlement files for macOS distribution. It also discusses working with ASAR files, debugging, and deploying applications via AWS S3 and the macOS App Store. Stream highlights the challenges and learning curves encountered, especially with Apple's stringent app submission process, and offers resources and tips for overcoming common pitfalls in Electron app development.
Jul 12, 2018 2,430 words in the original blog post.
A data scientist at Stream undertook a project to create a GitHub recommendation system by leveraging deep learning architectures and big data processing tools like Dask and PyTorch. The project involved processing over 600 million events from the GitHub Archive, a dataset encompassing public activity data for numerous repositories but excluding private information. The scientist aimed to use implicit data from various event types to generate recommendations, opting for a neural matrix factorization model and sequence-based models to account for users' diverse tastes. The process involved downloading data, converting it into a suitable format, and building a recommendation model that could provide real-time suggestions by analyzing users' past interactions. The model was trained using Bayesian Personalized Loss with an emphasis on efficient candidate generation and ranking to ensure quick response times in a production environment, eventually utilizing Spotify's Annoy library for approximate nearest neighbors to enhance performance. The recommender system was deployed using Django Rest Framework, allowing users to receive recommendations based on their recent GitHub activity, demonstrating the potential impact and application of advanced data processing and machine learning techniques in enhancing user experience.
Jul 09, 2018 3,954 words in the original blog post.
Stream, a provider of infrastructure for over 300 million end users, emphasizes the importance of rigorous testing to ensure code stability and functionality, especially when launching applications. Their recent project, Winds 2.0, built with Node.js, revealed unique testing challenges due to the absence of built-in test functionality within the frameworks they used, requiring them to develop a custom test suite. They utilized various tools like Mocha for test running, Chai for assertions, Sinon for mocking, and Nock for HTTP request simulation, highlighting the importance of testing in preventing breaking changes and maintaining code quality. Stream also encountered complexities such as creating custom test runners and managing module loading with Babel, which reflects broader challenges within the Node.js ecosystem. Despite these challenges, their integration with tools like Travis CI and CodeCov helped streamline their testing process and ensure continuous integration. The article concludes with recommendations for staying updated with the latest tools and trends in the fast-evolving JavaScript ecosystem.
Jul 05, 2018 2,068 words in the original blog post.