Home / Companies / Earthly / Blog / February 2024

February 2024 Summaries

9 posts from Earthly

Filter
Month: Year:
Post Summaries Back to Blog
Self-hosting offers significant value and problem-solving capabilities by allowing individuals and businesses to customize and control their software environments. The author recounts their first experience with self-hosting BugTracker.NET in 2009, which addressed a critical need for a bug/feature tracking system without incurring additional costs. Despite the challenges of setup and configuration, self-hosting provided immense business value and became a preferred solution. The advent of Docker simplified the self-hosting process, enabling the author to experiment with various applications. The text also highlights the introduction of self-hosted Earthly Satellites, which offer enhanced security, customizable performance, and seamless integration with Earthly Cloud, allowing users to manage their infrastructure while maintaining consistent build processes. The ability to utilize cloud vendor credits and maintain full control over maintenance schedules further underscores the benefits of self-hosting.
Feb 27, 2024 1,826 words in the original blog post.
Docker, an open-source platform for packaging applications and dependencies into containers, faces challenges with slow build times, particularly for languages like Rust that compile to a single binary. This slowness is often due to large dependencies, inefficient caching, and hardware constraints. The article discusses how cargo-chef, a Cargo subcommand, optimizes Docker builds for Rust by enhancing caching capabilities, allowing for faster builds through the reuse of previously built layers. It introduces the use of Docker multistage builds and cargo-chef to streamline the build process by separating dependency compilation and final application builds into distinct stages. Despite its benefits, cargo-chef has limitations, such as requiring consistent working directories and not efficiently handling unchanged local dependencies. The article suggests leveraging Earthly for further optimization, particularly in continuous integration environments, as it offers significant speed improvements by using persistent build runners and efficient caching strategies.
Feb 15, 2024 2,444 words in the original blog post.
The text explores the concept of readability in programming, highlighting the subjective nature of what is considered readable, which often depends on familiarity and the level of expertise of the programmer. It distinguishes between "Newcomer Readability," which focuses on how quickly beginners can adapt to a new programming language, and "Experienced Readability," which is about how easily seasoned programmers can comprehend the code. The author argues that readability is influenced by code structure, syntax, and programming concepts, and discusses the use of structural enhancements such as functions, whitespace, and comments to improve code readability. The text also examines the trade-offs between simplicity and complexity in programming languages, using Go and Rust as examples, and suggests that while simpler languages cater to beginners, more complex languages like Rust offer advanced features that enhance expert readability. The author concludes with a preference for expert readability, advocating for the use of higher-level programming concepts to improve code quality and efficiency for experienced users, while acknowledging the challenges these pose for beginners.
Feb 14, 2024 2,207 words in the original blog post.
The article explores the management of Rust monorepos using Cargo workspaces, highlighting their benefits in organizing and simplifying complex software projects by consolidating code into a single repository. Cargo, Rust's package and build manager, is essential for handling dependencies and managing larger projects through workspaces, which organize code into interrelated crates, each with its own configuration and purpose. This approach enhances code sharing, simplifies dependency management, and reduces potential conflicts, thus promoting a more efficient and maintainable development environment. The article also discusses best practices for structuring codebases and managing dependencies, alongside the importance of continuous integration and testing to maintain code quality. Additionally, it emphasizes the role of incremental builds in optimizing build performance, offering developers faster iterations and streamlined workflows.
Feb 14, 2024 1,613 words in the original blog post.
Earthly has introduced three new Satellite instance sizes—2xlarge, 3xlarge, and 4xlarge—in both x86 and arm64 architectures, aimed at enhancing the build experience by offering more compute power, RAM, and cache storage. These upgrades are a response to user feedback indicating that previous instance sizes were insufficient for some Satellite customers. The expansion reflects Earthly's commitment to providing flexible and powerful solutions for various build requirements, encouraging users to explore these new capabilities and provide further feedback. The announcement is part of Earthly's broader mission to improve the consistency and speed of builds, supported by the insights of its users.
Feb 13, 2024 393 words in the original blog post.
The article provides a comprehensive guide on creating and managing a monorepo using Gradle, a flexible build tool widely used for Java and Android applications, which supports multiple languages. It explains the process of setting up a monorepo project directory, creating and developing subprojects, and managing dependencies within a monorepo structure. The tutorial illustrates how subprojects can be organized and how dependencies among them are configured, showcasing Gradle's efficiency in handling complex project dependencies and build processes. Additionally, the article highlights the benefits of using Earthly to enhance build efficiency by optimizing build steps and leveraging caching mechanisms, which is especially useful in large monorepo projects. The example used involves an imaginary e-commerce company, demonstrating the real-world application of these concepts.
Feb 10, 2024 2,287 words in the original blog post.
The article serves as a comprehensive guide to setting up a monorepo using Yarn and Vite, aimed at streamlining the development of JavaScript and TypeScript applications by utilizing Vite's fast development server and hot module replacement (HMR) capabilities. It details the creation of a monorepo structure that accommodates multiple subprojects, including React and Vue apps, and a shared library, demonstrating how Yarn workspaces can efficiently manage dependencies and enable parallel builds. The article explains the use of Vite's native ECMAScript module capabilities to improve development efficiency and describes the execution of global scripts for streamlined operation across the monorepo. It also highlights how Earthly, a build tool for monorepos, can further enhance development and build times when Yarn and Vite's limitations are reached, particularly when incorporating backend languages.
Feb 08, 2024 3,115 words in the original blog post.
The article explores techniques to optimize Rust build speeds, highlighting the challenges associated with Rust's slow compilation, particularly for large projects, and introduces sccache as a solution. sccache, a distributed compiler cache, can significantly reduce build times by caching and reusing Rust compilation outputs. The article provides guidance on installing and configuring sccache, integrating it with Cargo, and applying caching in continuous integration (CI) environments. It also discusses potential limitations of sccache, such as network overhead and its effectiveness with incremental compilation. To address these issues, Earthly offers an alternative, lib/rust, which leverages incremental compilation for more efficient caching, making it particularly effective in CI environments. The author encourages exploring lib/rust for further optimization and invites community feedback to enhance the Rust development experience.
Feb 06, 2024 2,430 words in the original blog post.
The text explores the complexities and expressiveness of programming languages, highlighting how advancements such as lambdas in Java and C++'s `constexpr` have improved code readability and reduced boilerplate. It discusses how these features, while beneficial to experienced developers, can introduce a steep learning curve for newcomers, leading to potential confusion when encountering complex or overly concise code. The article uses examples from various programming languages, including Java, Scala, C++, and Rust, to illustrate how expressive features can both enhance and obscure code clarity. It argues that while expressiveness is generally a win for experienced users, it can lead to jargon-like code that is difficult for outsiders to understand, urging programmers to balance the use of advanced features with accessibility for others who may inherit the code. The author suggests that while showboating is rare, programmers should strive for clarity and avoid overly complex solutions in shared codebases.
Feb 01, 2024 2,040 words in the original blog post.