Category: Development

Overloading Lambda Abstraction in Haskell: An Elegant Approach to EDSL Design

2024-12-30

This article presents a novel method for overloading lambda abstraction in Haskell to build embedded domain-specific languages (EDSLs). By cleverly using a `Port` type and `encode`/`decode` functions, the author elegantly translates Haskell functions into morphisms within a custom category. This results in a concise and intuitive syntax, avoiding the complexities of Arrow abstractions and the proc notation. The approach requires minimal Haskell code and no metaprogramming or compiler plugins. A flow diagram DSL example demonstrates the method's application, along with discussions on preventing duplication and handling side effects.

Development Lambda Abstraction

Issues with Object-Oriented Programming in Guile

2024-12-30

This article explores the discrepancies between Guile Scheme's object-oriented programming system, GOOPS, and Common Lisp's Object System (CLOS), highlighting GOOPS's shortcomings. GOOPS lacks the elegance and robustness of CLOS in several key areas: setter specialization doesn't compose with inheritance, it lacks before/after/around method qualifiers, method combination algorithms are not controllable, method argument specialization is limited, keyword arguments are unsupported, and documentation strings are absent. The author suggests improvements such as mimicking CLOS behavior, adding method qualifiers, and enhancing method argument specialization to improve code elegance and reduce bugs.

Development

Building a Full Computer Emulator in C: From NAND Gate to Tetris

2024-12-30

This project aims to build a complete computer emulator in C from scratch, following the NandToTetris course. It starts with a single NAND gate and progressively builds more complex chips like multiplexers and demultiplexers, ultimately culminating in a system capable of running Tetris. Unlike other emulator projects that start at the CPU level, this one meticulously constructs the entire hardware stack. The project is in its early stages, with the author planning to implement an assembler after completing the hardware components.

Little Snitch: Your macOS Network Security Guardian

2024-12-30

Little Snitch is a network monitor and personal application firewall for macOS that gives you control over which apps connect to the internet. It alerts you to each connection attempt, letting you allow or deny access, ensuring your data remains secure. Features include silent mode, a visual traffic chart, flexible rule management, built-in DNS encryption, and cryptographic process identification to thwart malware. Monitor and manage your Mac's network activity with ease, protecting your privacy.

Development firewall

Faster CI with Mill: Selective Testing Strategies

2024-12-30

Running all tests in large codebases is inefficient. This article explores three selective testing approaches: folder-based, dependency-based, and heuristic-based. Folder-based is simple but may miss errors; dependency-based is more thorough but can over-test; heuristic-based optimizes test selection with custom rules, balancing speed and thoroughness. The Mill build tool natively supports dependency-based selective testing, significantly improving CI efficiency. However, combining it with heuristic methods further optimizes the balance between speed and test coverage.

The Zombocom Problem: From 'Anything' to 'Something Specific' in Software Development

2024-12-29

This article explores the 'Zombocom Problem' – the failure of many low-code/no-code platforms, super apps, etc., due to their inability to meet specific user needs. The author argues that success hinges on solving a specific problem for a specific user, finding product-market fit. Amazon's success story illustrates this: it started as an online bookstore, gradually expanding into other areas. Similarly, Excel succeeded because it initially targeted small business owners and accountants. The author emphasizes that platforms should emerge from products, not the other way around; build great standalone products first, then consider platformization. Ultimately, the author concludes that the key to success lies in combining systems thinking and product thinking—understanding system-level opportunities while identifying the first best customer, thus transforming from a 'single-purpose product' to a 'platform'.

Stripe Quietly Launches V2 API: REST Improvements and DX Shift

2024-12-29

Stripe quietly released its V2 API in October, featuring a shift from form-encoded request bodies to JSON and the introduction of HATEOAS-style pagination. V2 aims for speed improvements and controlled sub-object loading via an `include` parameter. True idempotency is also attempted for better handling of failed requests. However, improvements are still needed in REST verb usage and resource modeling. The author argues that a great developer experience (DX) now hinges more on high-quality SDKs than a perfect REST API.

Development

Running LLMs Locally: A Developer's Guide

2024-12-29

A developer shares their experience running Large Language Models (LLMs) on a personal computer. Using a high-spec machine (i9 CPU, 4090 GPU, 96GB RAM), along with open-source tools like Ollama and Open WebUI, they successfully run several LLMs for tasks such as code completion and note querying. The article details the hardware, software, models used, and update methods, highlighting the data security and low-latency advantages of running LLMs locally.

BSD kqueue: A Mountain of Technical Debt

2024-12-29

This article delves into the differences between BSD kqueue and Linux epoll in network programming. kqueue uses event filters, offering powerful functionality but lacking composability, leading to accumulating technical debt. Epoll, on the other hand, directly manipulates kernel handles, boasting greater composability and allowing for flexible monitoring of various kernel resources such as sockets, filesystem paths, and timers. The author argues that epoll's design is superior as it avoids the predicament of constantly adding new event filter types to kqueue with each new feature.

Development network programming

Racket Extension: Embedding Images in Source Code

2024-12-29

This Racket library enables embedding images directly into source code files, eliminating the need for external file references. It uses a µ reader extension and uuencode to convert image data into a textual representation, solving the problem of binary file formats (like WXME) created by traditional image embedding methods, which are incompatible with tools like git. The library provides packing and unpacking functions to easily convert images into embeddable text and decode them for display. While error handling and text formatting could be improved, it offers a convenient way to create self-contained Racket projects.

Why I Don't Use Domain-Driven Design

2024-12-29

Tony Marston, a seasoned software developer with four decades of experience building enterprise applications, explains why he doesn't use Domain-Driven Design (DDD). He argues that DDD overemphasizes object-oriented design theory at the expense of database design and code reusability in large systems. He prefers a layered architecture with a separate class for each database table, leveraging inheritance and the Template Method pattern for code reuse. Marston believes this approach better suits real-world projects and increases development efficiency.

10 Essential Django Tools for Enhanced Performance, Security, and Productivity

2024-12-29

This article explores ten indispensable tools for your next Django project, covering dependency management, performance profiling, and more to boost development efficiency, security, and performance. From Poetry for dependency management to Silk for performance profiling, each tool—including Django Extensions, Django REST Framework, djangorestframework-camel-case, Django Storages, django-simple-history, django-otp, Celery, and Gunicorn with Uvicorn Workers—is explained with comparisons to alternatives like Pipenv, FastAPI, and django-reversion. These tools help build faster, more secure, and efficient Django applications.

Development Tools

SQLite3: The Unsung Hero of Databases

2024-12-29

SQLite3 is a powerful, lightweight embedded database that quietly handles data for billions of deployments. Unlike its louder, more complex counterparts, SQLite3 operates as a single file, requiring no server setup. It boasts full SQL functionality, outperforming direct file I/O in speed, and managing databases up to 281 terabytes. From phones to websites, its stability, ease of use, and robust features make it an ideal choice for many projects, particularly those with moderate data needs or simpler database management requirements.

Development embedded database

GitHub Open Source Project libsearch: Index-Free Full-Text Search for JavaScript

2024-12-29

libsearch is an open-source JavaScript full-text search library on GitHub that allows for fast text searching without requiring a pre-built index. It leverages the highly optimized regular expression engine of modern JavaScript engines, transforming query strings into regular expression filters for searching and employing an approximate TF-IDF algorithm for ranking. This library is suitable for simple applications that don't require complex indexing, especially useful for rapid prototyping and small web apps.

Development open-source library

Programmer's Revenge: The Tribulations of Running HelloWorld on z/OS

2024-12-29

A programmer, once dismissive of operating system interaction in graduate school, found herself grappling with IBM's z/OS system years later for a blog post. z/OS, vastly different from modern software engineering environments, presented numerous challenges with its text-based interface, JCL scripts, and IBM's unique naming conventions. The article details her struggles in creating files (datasets), using the ISPF editor, allocating datasets, compiling, linking, loading, and handling output with SPOOL. It shares practical tips and lessons learned, a testament to the challenges of working with legacy systems.

Development

WebGL Fluid Simulation App Launched: Experience Realistic Fluid Effects!

2024-12-29

The "Try Fluid Simulation" app has arrived! Leveraging WebGL, it delivers stunningly realistic fluid simulations right in your browser. Experience the mesmerizing movement of liquids, the ebb and flow of waves, and more, all with simple controls. Create fluids of various shapes and textures with a few clicks, witnessing the power of physics engines in action. This app is perfect for developers learning WebGL and enthusiasts fascinated by computer graphics and fluid simulation. Dive into this mesmerizing world of fluids!

Development Fluid Simulation

resizer2: Manage Windows Like KDE/i3 with Win+Mouse

2024-12-29

resizer2 is a Windows window manager that lets you resize and move windows using Win key + mouse, similar to KDE or i3 window managers. It offers features like moving, resizing, opacity adjustment, minimizing, and maximizing windows, even across multiple monitors. While it requires administrator privileges to move system windows and has some known quirks (like incompatibility with certain fullscreen apps), resizer2 provides a more efficient and convenient window management experience for Windows users.

Setting up a Personal Mail Server on OpenBSD

2024-12-29

This blog post provides a step-by-step guide to setting up a personal mail server on OpenBSD. The author details the process, using Opensmtpd, Dovecot, DKIMProxy, and Spamd, offering solutions for common issues like Dovecot's open file limit. The guide covers server selection, system configuration, security measures, and detailed component setups, making it a valuable resource for users with some Linux experience.

Convoy Ditches UUIDv4 for ULIDs: Efficiency and Scalability in the Big Data Era

2024-12-28

During a database migration from MongoDB to Postgres, Convoy decided to replace UUIDv4 with ULIDs as unique identifiers. The article compares UUIDv4 and ULIDs, highlighting ULID's advantages: lexicographical sortability, URL friendliness, and improved database indexing efficiency, albeit with slightly slower generation and insertion speeds. Convoy chose ULIDs primarily to solve pagination performance issues with large datasets. While ULIDs are marginally slower to generate, the performance gains, especially for large-scale data processing, are deemed worthwhile. The article also discusses potential time information leakage risks and user data implications of ULIDs, and briefly mentions the potential future adoption of UUIDv7.

Development

Fish Shell 4.0: An Epic Rewrite from C++ to Rust

2024-12-28

The Fish shell team completed a massive undertaking: rewriting Fish shell from C++ to Rust over nearly two years. Driven by limitations in C++'s tooling, compiler/platform differences, ergonomics, and thread safety, the team chose Rust to enhance performance, security, and developer experience. Employing a "Ship of Theseus" approach, they incrementally replaced components, ensuring stability throughout the process. While challenges arose, such as compatibility issues with autocxx, the team successfully released the Fish 4.0 beta, boasting performance improvements, new features, and easier-to-install statically linked versions.

Development

Libero: Unleash Your Programming Potential!

2024-12-28

Libero, a free software tool from iMatix, empowers programmers to write better programs. It uses visual state diagrams for program design, supports multiple languages (including C, Java, PHP), and generates program frameworks for rapid prototyping. Based on the GNU General Public License, Libero's source code is open and freely available for use and improvement. While commercial licenses are available for support and updates, Libero's core remains free.

Development programming tool

Microsoft's Phi-3-Mini: A Lightweight LLM for Enhanced Development

2024-12-28

Microsoft unveiled Phi-3-Mini, a lightweight language model offering GPT-3.5-level performance on resource-constrained devices. This article explores its strengths, including robust reasoning and coding capabilities, and seamless integration with tools like Ollama and Pieces. Running Phi-3-Mini locally via Ollama, combined with Pieces for code snippet management, streamlines code generation and refactoring, boosting developer productivity. While context overflow remains an issue with long texts, Phi-3-Mini's lightweight nature and powerful features make it a valuable asset in AI development.

Development developer tools

An Engineer's Journey with Forth: From Fascination to Abandonment

2024-12-28

This blog post recounts an engineer's experience learning and using the Forth programming language. Initially captivated by Forth's brevity and extensibility, the author delved into the source code of pForth, marveling at its compile-time self-modifying capabilities. However, in real-world projects, the author found Forth more suitable for number crunching, struggling with tasks like text processing. While designing a custom hardware embedded system, the author leveraged Forth to design the system's CPU instruction set, but ultimately found C more efficient and abandoned Forth. The author concludes that Forth is ideal for minimalist engineers seeking extreme efficiency, while he himself prefers a more pragmatic approach, opting for more widely used languages.

Development

Unicon Programming Language: An Extension and Enhancement of Icon

2024-12-28

Unicon is a powerful programming language that extends and improves upon the Icon programming language. It inherits many of Icon's strengths, such as concise code, powerful string processing capabilities, and goal-directed evaluation, while adding modern features like object-oriented programming, a POSIX layer, and networking capabilities. Unicon supports multiple programming paradigms, including imperative, procedural, concurrent, and object-oriented, and boasts a rich set of built-in functions and a powerful graphics library. This document details Unicon's syntax, semantics, features, and installation methods, and provides numerous code examples.

Development

Developer Automates Job Application Process, Sends 250 Applications in 20 Minutes

2024-12-28

Tired of the repetitive job hunt, a developer built an automated system that sent out 250 job applications in just 20 minutes—and landed a job offer before even finishing the project! The system uses Python scripts and large language models (LLMs) to scrape job postings, parse data, and generate personalized cover letters. It also includes email sending and tracking features to avoid spam filters. This is part one; part two details the system's refinement and improvements.

Development job search

EmacsConf 2024: A Smoothly Run Online Conference

2024-12-28

EmacsConf 2024 successfully concluded! This post, written by Sacha Chua, reflects on the conference's preparation, execution, and lessons learned. From the call for proposals to the final presentations, organizers cleverly used automation tools (Org mode, emacsconf-mail.el, Ansible, etc.) to boost efficiency and leveraged technologies like BigBlueButton and WhisperX for a smooth experience. While technical challenges (BBB server configuration, audio syncing) arose, they were effectively addressed. Sacha shares insights into time management, volunteer coordination, and future improvements, showcasing dedication to the open-source community.

Development online conference

So You Want to Write Java in Neovim?

2024-12-28

This post details how to efficiently develop Java code within the Neovim editor. The author shares their positive experience using Neovim for Java at work, recommending JDTLS as the LSP server and either nvim-java or nvim-jdtls as Neovim plugins. The article thoroughly explains JDTLS configuration, including debugging and testing setups, and provides a personal configuration example featuring codelens and debugger functionality. Even if you're not a Neovim devotee, you can still learn valuable Java development techniques.

Development Java Development

Sonair Accelerates 3D Ultrasonic Sensor Development with Rust

2024-12-28

Sonair leveraged the Rust programming language to dramatically accelerate the development of its groundbreaking 3D ultrasonic sensor. The article details the reasons for choosing Rust, including its speed, safety, and robust ecosystem. Despite the team's initial lack of Rust experience, they found it surprisingly easy to learn, and its strong type system and borrow checker helped them write safer, more reliable code. Sonair uses Rust for production and Python for algorithm prototyping, creating an efficient workflow. Ultimately, Sonair aims to be among the first to deploy a safety-certified Rust implementation, setting a new standard for functional safety in embedded systems.

Scrapscript: A Compact Programming Language Serialized with Msgpack

2024-12-28

Scrapscript is a novel programming language that compiles programs into "flat scraps" in the Msgpack format, enabling efficient network transmission and storage. Using reverse Polish notation and custom operators, Scrapscript supports various data types and operations, and is interoperable with multiple languages. Its compact nature makes it ideal for bandwidth-constrained environments and offers potential advantages in code hashing and optimization.

Development serialization
1 2 6 7 8 10 12 13 14 22 23