Best of LobstersNovember 2024

  1. 1
    Article
    Avatar of lobstersLobsters·2y

    Why Zellij?

    Zellij is a user-friendly terminal workspace designed to make the terminal more approachable and powerful for all users. It emphasizes discoverability and configurability, allowing for a seamless and personalized development environment without relying on graphical elements. Zellij supports plugins, enhancing the terminal's capabilities while maintaining security and portability. It is free and open-source, created to reimagine the terminal's role in development, encouraging a collaborative and community-driven approach.

  2. 2
    Article
    Avatar of lobstersLobsters·1y

    The two factions of C++

    The C++ community is divided on the language's future, particularly over backward compatibility and modernizing the language. While the Evolution Working Group aims to maintain ABI compatibility and avoid disruptive changes, other camps, including key tech companies like Google and Microsoft, are moving towards modern practices and adopting languages like Rust. The divide is notably between older industries with legacy systems and modern tech firms with sophisticated automated tooling. The C++ committee appears committed to maintaining backward compatibility, but this has created tensions within the community.

  3. 3
    Article
    Avatar of lobstersLobsters·2y

    CSS sprite sheet animations · leanrada.com

    Sprite sheets in CSS are used to create animations by displaying different parts of a single image file sequentially. This method reduces HTTP requests and allows for interactive, controllable animations. Key techniques involve using CSS properties like background-position and animation with steps() timing function. Compared to GIFs or SVGs, sprite sheets offer more control but can be complex for higher pixel densities and extensive animations.

  4. 4
    Article
    Avatar of lobstersLobsters·1y

    Using (only) a Linux terminal for my personal computing in 2024

    A personal experiment of using a terminal-only Linux setup on a computer for personal computing over a two-week period. The author shares their experiences, challenges, and lessons learned in using a variety of terminal-based tools and software. While they enjoyed the process and learned a lot, they concluded that a terminal-only setup does not fully meet their personal computing needs.

  5. 5
    Article
    Avatar of lobstersLobsters·2y

    Async Rust vs RTOS showdown!

    A detailed comparison between the Embassy async Rust model and FreeRTOS in C on an STM32F446 microcontroller focusing on interrupt latency, program size, RAM usage, and ease of programming is discussed. Tests reveal that Embassy/Rust outperforms FreeRTOS/C in interrupt time, thread time, interrupt latency, program size, and static memory usage, making it the winner of the showdown. The showdown includes practical implementation examples and performance results, highlighting the strengths of both approaches.

  6. 6
    Article
    Avatar of lobstersLobsters·1y

    What's coming in Go 1.24

    The post highlights new features and improvements coming in Go 1.24, including screen reader support and keyboard shortcuts to enhance developer productivity. It provides insights into upcoming enhancements for accessibility and overall user experience in Go development.

  7. 7
    Article
    Avatar of lobstersLobsters·2y

    chawan: TUI Web Browser

    Chawan is a text-mode web browser designed for use in terminals, featuring multi-processing, incremental document loading, HTML5 support, and customizable keybindings. It supports multiple protocols, basic JavaScript, and has extensive security measures. It requires a POSIX-compliant OS and several dependencies to compile. Chawan is inspired by w3m but offers improvements and additional features while prioritizing simplicity and security.

  8. 8
    Article
    Avatar of lobstersLobsters·2y

    gccrs: An alternative compiler for Rust

    gccrs is an alternative compiler for Rust being developed as part of the GCC project. The main goal is to provide another option for compiling Rust, leveraging GCC's support for various platforms, including some that LLVM doesn't support. The project aims to maintain compatibility with rustc and contribute to the Rust specification effort. Despite its early stage of development, gccrs ensures alignment with Rust's values and minimizes ecosystem friction by reusing rustc components and facilitating communication through familiar platforms like GitHub and Zulip.

  9. 9
    Article
    Avatar of lobstersLobsters·2y

    A Linux Desktop for the family

    The post discusses the challenges and experiences of maintaining a Linux system for non-enthusiast family members. The author describes setting up tailored Linux distributions for their parents using Debian and different desktop environments like XFCE and GNOME, and for their wife using NixOS with a customized interface. Emphasis is placed on the importance of having a knowledgeable person maintain these systems to make them user-friendly for non-enthusiasts.

  10. 10
    Article
    Avatar of lobstersLobsters·1y

    Dear friend, you have built a Kubernetes

    Many developers try to avoid using Kubernetes for container management due to its complexity, opting for simpler tools like shell scripts or Docker Compose. However, this often leads to hastily built, unreliable setups that gradually grow in complexity, resembling Kubernetes in scope and functionality. Developers eventually end up implementing various aspects of Kubernetes such as deployment methods, overlay networks, service discovery, and API servers, despite their initial intentions.

  11. 11
    Article
    Avatar of lobstersLobsters·2y

    What I Wish Someone Told Me About Postgres

    Learn about essential tips and practices for working with Postgres that aren't always clear from the documentation. Covers topics like data normalization, useful psql shortcuts, handling NULLs, the importance of indexing, and managing locks. Also addresses the use of JSONB for flexible data storage and the potential pitfalls of long-running transactions.

  12. 12
    Article
    Avatar of lobstersLobsters·1y

    Python dependency management is a dumpster fire

    Python dependency management can be complex and failure-prone. Reproducibility is crucial to ensure consistent behavior across different environments and stages, from development to deployment. This involves using version control and isolating environments, typically with virtual environments or dedicated tools. Tools like pip, Pipenv, Poetry, pyenv, UV, and Conda each provide different levels of functionality for managing dependencies and environments, each with their own advantages and drawbacks.

  13. 13
    Article
    Avatar of lobstersLobsters·2y

    Turing kicked us out of Heaven

    The post discusses the significance of the halting problem, an undecidable problem in computer science which states that no algorithm can determine if an arbitrary program with arbitrary input will halt. It explores the implications of this problem on mathematics and programming, illustrating that many long-standing mathematical problems could be solved and programming tasks simplified if the halting problem were solvable. However, due to its undecidability, such advancements remain impossible. Various real-world examples and explanations emphasize the profound impact of this theoretical limitation.

  14. 14
    Article
    Avatar of lobstersLobsters·1y

    zaphar/sheetsui

    SheetsUI is a command-line tool that allows users to view and edit spreadsheet files. It can be installed via Nix or Cargo and supports various options including setting locale and timezone. Usage information and help can be accessed using the `sheetui --help` command.

  15. 15
    Article
    Avatar of lobstersLobsters·2y

    We can have a different web

    The post reflects on the current state of the internet and contrasts it with the more open, creative, and less commercialized early days. It discusses issues like the dominance of large platforms, pervasive advertising, engagement farming, and the erosion of personal spaces online. It also emphasizes that the potential to return to a more decentralized and user-driven web still exists, and that modern tools and technologies make it easier than ever to cultivate independent online spaces.

  16. 16
    Article
    Avatar of lobstersLobsters·1y

    Gleam's Lustre is Frontend Development's Endgame

    This post introduces OmniMessage, a tool built in Gleam designed to solve client-server state synchronization issues. It elaborates on how Gleam, a functional language with C-style syntax, along with Lustre, its major frontend framework, offer an exceptional developer experience. The post demonstrates how to build a chat application using Lustre's Model-View-Update (MVU) architecture and explains how OmniMessage extends Lustre to provide a seamless client-server state management solution. OmniMessage combines client, server, and hybrid state management for efficient and maintainable code.

  17. 17
    Article
    Avatar of lobstersLobsters·2y

    The github plugin my coworkers asked me not to write.

    The post discusses the concept of a bus factor, or truck factor, which measures the number of key contributors needed in a project to prevent it from stalling. The author recounts their experience creating a GitHub plugin to calculate this factor, which faced resistance from colleagues who feared it might be misused by management. The post also details efforts to reproduce results from a key research paper on the Linux kernel's truck factor and describes challenges encountered with tools like GNU parallel and Ruby Gems in NixOS. The conclusion suggests the bus factor for critical projects like the Linux kernel has worsened over time.

  18. 18
    Article
    Avatar of lobstersLobsters·2y

    The deterioration of Google

    Independent publishers are struggling due to changes in Google's search algorithm, which now heavily relies on machine learning. This shift has resulted in decreased traffic for many sites, causing financial distress and even closures. The system seems to favor spam content and has become a complex, uncontrollable black box, even for Google's engineers, partly due to internal mass layoffs. Despite these issues, Google's monopoly status shields it from negative business outcomes.

  19. 19
    Article
    Avatar of lobstersLobsters·1y

    Zero Disk Architecture

    Zero Disk Architecture involves offloading data storage to Amazon S3, allowing for scalable and elastic systems without managing stateful storage servers. This approach leverages the durability, availability, and cost-effectiveness of S3, making it suitable for various database systems, especially those prioritizing minimal latency and cost efficiency. Multiple systems, such as Snowflake and Clickhouse, already use S3 or similar services as their primary storage solutions.

  20. 20
    Article
    Avatar of lobstersLobsters·2y

    Against best practices

    Best practices in programming are often touted as essential, but the author argues they can do more harm than good when followed uncritically. These practices are sometimes enforced by zealots or inexperienced programmers, and while some advice may always be relevant, others might just be someone's opinion and contextually inappropriate. The post critiques several well-known practices, advocating for a more nuanced approach rather than blind adherence.

  21. 21
    Article
    Avatar of lobstersLobsters·2y

    A mental model for Linux file, hard and soft links

    In Linux, a file is represented by an inode, which stores metadata about the data block. Hard links connect filenames to inodes, allowing multiple filenames to refer to the same file. Deleting a hard link removes that specific filename's connection to the inode but leaves other hard links intact. Soft links, on the other hand, point a link file to a target filename rather than an inode. When all hard links to an inode are removed, the inode is marked for deletion. Soft links can become dead links if the target file is moved or deleted, retaining a pointer to a non-existing file.

  22. 22
    Article
    Avatar of lobstersLobsters·1y

    Cursed Linear Types In Rust

    The post discusses an attempt to create linear types in Rust that can only be used exactly once using a struct called UseOnce<T>. It explains the implementation details, including destructive move semantics and the use of MaybeUninit<T>. The post also highlights some limitations and issues, such as the potential to exfiltrate the inner value and reliance on the compiler's behavior without optimizations, which make the approach less practical.

  23. 23
    Article
    Avatar of lobstersLobsters·2y

    MomBoard: E-ink display for a parent with amnesia

    Two years ago, an e-ink display was set up to help a parent with anterograde amnesia live independently. The device, a BOOX Note Air2, offers a stable way to display messages from family without requiring interaction or emitting disruptive light. A simple web service and site were created to show and update messages, improving communication and reducing anxiety. The setup has proven reliable and effective in supporting both the patient and their family.

  24. 24
    Article
    Avatar of lobstersLobsters·2y

    Rust needs an official specification

    The post discusses the need for an official language specification for Rust, highlighting issues developers face without it, such as uncertainty in code behavior and challenges in safety-critical software. It compares Rust's current state to C++, which has a clear standard, and emphasizes how a specification would provide stronger guarantees and facilitate the creation of alternative compilers and safety-critical applications.

  25. 25
    Article
    Avatar of lobstersLobsters·2y

    Git and jujutsu: in miniature

    A comparison of handling version control scenarios in git versus jj (jujutsu). It narrates a real-world scenario with a legacy codebase and demonstrates how to handle commits and tests fluidly using both systems. Git forces many decisions and complexities, whereas jj provides a more straightforward approach to managing changes.