Tag Archives: awesome

Awesome papers (developer focused)

This summary is touched-up by AI.

On the Criteria to Be Used in Decomposing Systems into Modules

Paper: criteria_for_modularization

This paper introduced information hiding as the fundamental principle for modular design. Instead of breaking systems apart by what they do i.e. mapping a flowchart onto modules, it argues we should decompose them by what design decisions are likely to change i.e. one module per decision which is likely to change.

Impact: This idea underpins encapsulation, stable APIs, and modern system boundaries — from object-oriented design to microservices. Nearly every discussion about maintainability traces back here, whether explicitly or not.

A Note on Distributed Computing

note-distributed-computing

This paper explains why distributed systems are not just “local systems with a network.” It highlights hidden assumptions—like zero latency or perfect reliability—that break down immediately once computation is spread across machines.

Impact: It became a foundational text for distributed systems thinking. The ideas influenced RPC design, cloud architecture, and the now-famous fallacies of distributed computing.

The Next 700 Programming Languages

Landin66-next-700-languages

Rather than proposing a new language, this paper introduced a framework for describing programming languages using mathematical foundations. It showed that languages could be reasoned about formally, not just implemented ad hoc.

Impact:
This work shaped the field of programming language theory and semantics. Many modern functional and hybrid languages owe their conceptual clarity to ideas introduced here.

Can Programming Be Liberated from the von Neumann Style?

This paper critiques imperative, state-heavy programming and argues for a functional alternative built around composition and mathematical reasoning rather than mutable state.

Impact:
It helped legitimize functional programming as a serious alternative, influencing languages, compilers, and parallel programming models.

Reflections on Trusting Trust

This paper demonstrates how a compiler can be maliciously modified to insert backdoors—even when the compiler’s source code appears clean. It shows that trust in software cannot rely solely on source inspection.

Impact:
It permanently changed how we think about trust, compilers, and software supply chains. The ideas are still central to discussions about reproducible builds and secure toolchains.

Lisp: Good News, Bad News, How to Win Big

This essay reflects on why technically superior systems often lose to simpler, more pragmatic ones. It contrasts ideal design with real-world adoption pressures.

Impact:
It popularized the “worse is better” philosophy, influencing how engineers think about trade-offs, simplicity, and adoption.

An Experimental Evaluation of the Assumption of Independence in Multiversion Programming

This paper experimentally challenges the idea that independently developed software versions fail independently—a key assumption in fault-tolerant system design.

 

Abstract of “AN EXPERIMENTAL EVALUATION OF THE ASSUMPTION OF INDEPENDENCE IN MULTI-VERSION PROGRAMMING”

Impact:
It forced a reevaluation of N-version programming and influenced how safety-critical systems are designed, tested, and certified.

Arguments and Results

This paper reframes design patterns not as code recipes, but as arguments—ways to reason about design trade-offs and communicate intent.

Impact:
It shifted how patterns are taught and discussed, emphasizing design rationale over mechanical reuse.

A Laboratory for Teaching Object-Oriented Thinking

This paper advocates teaching object-oriented design through experimentation, feedback, and responsibility-driven design rather than rigid theory.

Impact:
Its ideas influenced OO pedagogy, agile practices, and test-driven development.

Programming as an Experience: The Inspiration for Self

This paper focuses on programming as a human experience, emphasizing simplicity, immediacy, and live exploration rather than static abstractions.

Impact:
It influenced IDE design, live programming environments, and dynamic languages that prioritize developer experience.

self-hosted ntfy service with admin account

  • First, we need a script that setup admin account for us after starting the service. init.sh file that you should put inside ntfy/init.sh
    #!/bin/sh
    ntfy serve &
    sleep 2
    NTFY_PASSWORD=${NTFY_PASSWORD} ntfy user add --role=admin ${NTFY_USER}
    wait
    
  • Now the compose file compose.yaml or docker-compose.yaml file.
    services:
      ntfy:
        image: binwiederhier/ntfy
        container_name: ntfy
        entrypoint: [ "/bin/sh", "/var/lib/ntfy/init.sh" ]
        environment:
          - TZ=UTC    \# optional: set desired timezone
          - NTFY_BASE_URL=https://ntfy.dilawars.me
          - NTFY_AUTH_FILE=/var/lib/ntfy/auth.db
          - NTFY_CACHE_FILE=/var/lib/ntfy/cache.db
          - NTFY_AUTH_DEFAULT_ACCESS=deny-all
          - NTFY_ATTACHMENT_CACHE_DIR=/var/lib/ntfy/attachments
          - NTFY_ENABLE_LOGIN=true
          - NTFY_USER=admin
          - NTFY_PASSWORD=yoyodillusingh
        volumes:
          - /var/cache/ntfy:/var/cache/ntfy
          - /etc/ntfy:/etc/ntfy
          - ./ntfy/:/var/lib/ntfy
        ports:
          - 8001:80
        healthcheck: \# optional: remember to adapt the host:port to your environment
            test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"]
            interval: 60s
            timeout: 10s
            retries: 3
            start_period: 40s
        restart: unless-stopped
    

Great Video That Explains Farkas Lemma

https://youtu.be/jpY50KQabxc

Given a system of linear inequalities represented by matrix A and vector b, either there exists a vector x that satisfies all the inequalities or there exists a vector y such that y is a non-negative linear combination of the rows of A and y is orthogonal to b.

This video is perhaps the most lucid explanation of Farkas lemma I know.