here you goThings I’ve made, read and saved — shared here.

Archive

9,565 entries: 46 from X, 8,923 from Pinboard, saved 1998 to 2026.

Browse by tag, site, author, folder or language

Tags

Sites

Authors

Folders

Languages

Showing 1–50 of 68Folder notes ×2020 ×Clear all

2020

Luarocks

When you have multiple lua installations, installing libraries for one of those using luarocks:

luarocks --lua-dir=/usr/local/opt/lua@5.1 install say

To install into a custom location, use the --tree /dir/locn option

mkdir -p lenv
luarocks install --tree lenv fennel

Further exploration:

notes#lua

datasette

Datasette is a tool for exploring and publishing data. Uses sqlite for storing data and is written in python and exposes the db over a web interface. support adhoc querying (made posible by mounting the database file in Readonly mode, so destructive operations are possible).

The author -- Simon Willison has substack newsletter for the project.

How he uses datasette -- "What is the killer app for datasette"; Oct 2022.

datasette.io, an official project website for Datasette -- a blog post detailing how datasette is used to publish a website, in this case the website of the project itself. which uses the The Baked Data architectural pattern.

notes#database#datasette#sqlite

Mnemonics

rahukala

Mother Saw Father Wearing The Turban Suddenly

  • Mother = Mon 7.30-9.00
  • Saw = Sat 9.00-10.30
  • Father = Fri 10.30-12.00
  • Wearing = Wed 12.00-13.30
  • The = Thu 13.30-15.00
  • Turban = Tue 15.00-16.30
  • Suddenly = Sun 16.30-18.00

Eshwarappa brought home a good Ford Car

  • Monday => E => fifth letter => 5 * 1.5 = 7.5
  • Tuesday => B => Second letter => 2 * 1.5 = 3
  • Wednesday => ...

ಯಮಾತಾರಾಜಭಾನಸಲಗಂ in Kannada.

Bharath C has a note about learning this mnemonic from his grandfather

notes

To Read

Authors

  • Kalidasa
  • Abhinavagupta
  • Arthashastra of Kautilya -- read R P Kangle's edition
  • Machiavelli -- Discourses on Livy, the Prince
  • Marcel Proust -- In search of lost time
  • Shakespere

History

  • The Decline and Fall of the Roman Empire by Edward Gibbon

Recommendations:

notes#books

podman

Homepage: Podman

Transitioning from Docker to Podman - Red Hat Developer; HN

Using Podman, Compose and BuildKit · emersion; Aug 2025 via HN, see also abiosoft/colima: Container runtimes on macOS (and Linux) with minimal setup

Colima is an alternative for podman on macOS

  • Simple CLI interface with sensible defaults
  • Automatic Port Forwarding
  • Volume mounts
  • Multiple instances
  • Support for multiple container runtimes

User Notes

Add docker.io to podman container registry

Edit /etc/containers/registries.conf and add the following:

[registries.search]
registries = ['docker.io', 'quay.io', 'registry.fedoraproject.org']

[registries.insecure]
registries = []

[registries.block]
registries = []

notes

Donations

दातव्यमिति यद्दानं दीयतेऽनुपकारिणे |

देशे काले च पात्रे च तद्दानं सात्त्विकं स्मृतम् || 20||

dātavyam iti yad dānaṁ dīyate ‘nupakāriṇe

deśhe kāle cha pātre cha tad dānaṁ sāttvikaṁ smṛitam

Charity given to a worthy person simply because it is right to give, without consideration of anything in return, at the proper time and in the proper place, is stated to be in the mode of goodness -- Bhavadgita 17.20.

But when you do a charitable deed, do not let your left hand know what your right hand is doing. -- Matthew 6:3


This page is just a reminder to myself.

2020

  • Vaidika Bharata Global Foundation for Manuscript Digitization Project; Nov 13; $51
  • Toys for Tots through Proofpoint fundraising campaign; Nov 2; $20
  • Gleaners food bank; Oct 14; $101
  • Internet Archive; Jun 5; $51
  • Akshaya Patra Foundation USA; Ap 13; $300
  • Gleaners food bank; Apr 2; $25
  • Khan Academy; Mar 29; $51
  • HTCI; Feb 9; $51

notes

onlisp

To fix Paul Graham's On Lisp for printing at Lulu.com, I had to fix the embedded fonts:

gs -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
 -sPAPERSIZE=letter -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer \
 -dCompatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true \
 -dEmbedAllFonts=true -sOutputFile=onlisp-fonts-embedded.pdf -f onlisp.pdf

The resulting files:

$ ls -l onlisp*
-rw-r--r--@ 1 pradeep  pradeep  1253063 Jun  6 17:35 onlisp-fonts-embedded.pdf
-rw-rw-rw-@ 1 pradeep  pradeep  1030575 Jun  6 15:38 onlisp.pdf

notes#lisp

learning-python

Occasionally, I am asked to recommend good resources to learn Python. This page is a work in progress to list a few.

  1. Practical Python Programming by David Beazley (https://dabeaz.com). David is a well known Python educator and speaker. His PyCon talks (often keynotes) are standing-room-only. He has also written Python Cookbook which can be a good book to learn pythonic, idiomatic solutions to common programming challenges.

notes

Indian History Books

Important Indian History Authors

Books

Many of these are available on archive.org.

Bharatiya Vidya Bhavan

Chief editors: R C Majumdar and S Ramakrishnan

History and Culture of the Indian People, Volume 01, The Vedic Age archive.org link

History and Culture of the Indian People, Volume 02,The Age Of Imperial Unity archive.org link

History and Culture of the Indian People, Volume 03, The Classical Age archive.org link

History and Culture of the Indian People, Volume 04, The Age Of Imperial Kanauj archive.org link

History and Culture of the Indian People, Volume 05, The Struggle For Empire archive.org link

History and Culture of the Indian People, Volume 06,The Delhi Sultanate archive.org link

History and Culture of the Indian People, Volume 07, The Mughul Empire archive.org link

History and Culture of the Indian People, Volume 08, The Maratha Supremacy archive.org link

History and Culture of the Indian People, Volume 10, British Paramountcy And Indian Renaissance, Part 2 archive.org link

History and Culture of the Indian People, Volume 11, Struggle for Freedom, Part 1 archive.org link

South India

K A Nilakanta Sastri

Published by Oxford University Press

A History of South India by K A Nilakanta Sastri archive.org link

The cōḷas by K A Nilakanta Sastri archive.org link

The Pandyan kingdom by K A Nilakanta Sastri archive.org link

Life in Ancient India

A L Basham

The Wonder That Was India archive.org link

Radha Kumud Mookerji

Ancient Indian education archive.org link

Local Government in Ancient India archive.org link

State and government in Ancient India archive.org link

R C Majumdar

Corporate life in Ancient India archive.org link

A S Altekar

Education in Ancient India archive.org link

Vasudev S Agrawala


The above page was a result of a twitter discussion on May 25, 2020, the person asking for recommendation finally settled on these books:

  • Bharatiya Vidya Bhavan Series: History and Culture of the Indian People (11 volumes)
  • The Wonder That Was India (A.L. Basham)
  • South Indian History (Neelakantha Sastry)
  • Land of the Sever Rivers (Sanjeev Sanyal)
  • Ancient India (R.C. Majumdar)
  • Medieval India (J.L. Mehta)
  • Modern India (Shekhar Bandopadhyaya)

notes

\u015Blokah

Popular ślokas in Devanāgarī script.

Ganesha:

वक्रतुण्ड महाकाय सूर्यकोटि समप्रभ ।
निर्विघ्नं कुरु मे देव सर्वकार्येषु सर्वदा ॥

Shanti Mantra:

असतो मा सद्गमय तमसो मा ज्योतिर्गमय ।
मृत्योर्मा अमृतं गमय ॐ शान्तिः शान्तिः शान्तिः ॥

Shiva:

कर्पूरगौरं करुणावतारम् संसारसारं भुजगेन्द्रहारम् ।
सदा वसन्तं हृदयारविन्दे भवं भवानीसहितं नमामि ॥


त्वमेव माता च पिता त्वमेव त्वमेव बन्धुश्च सखा त्वमेव ।
त्वमेव विद्या द्रविणम् त्वमेव त्वमेव सर्वम् मम देव देव ॥

Sri Raghavendra:

पूज्याय राघवेंद्राय सत्यधर्मरताय च।
भजतां कल्पवृक्षाय नमतां कामधेनवे॥

Hanuman:

मनोजवं मारुततुल्यवेगं जितेन्द्रियं बुद्धिमतां वरिष्ठ ।
वातात्मजं वानरयूथमुख्यं श्रीरामदूतं शरणं प्रपद्ये ।

Saraswati:

Guru:

notes

Diagrams

Community list of comparisons between Text to diagram tools

Diagrams python library allows you to draw architectural diagrams for AWS, and other clouds using Python code.

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Grouped Workers", show=False, direction="TB"):
    ELB("lb") >> [EC2("worker1"),
                  EC2("worker2"),
                  EC2("worker3"),
                  EC2("worker4"),
                  EC2("worker5")] >> RDS("events")

Output:


My own wrapper for https://www.websequencediagrams.com/ is pywsd.

There is a Pure python implementation for WSD here



Isoflow -- Create beautiful cloud diagrams in minutes. Easily create isometric diagrams, for presentations, documentation and illustrations

Penrose | Penrose -- Create beautiful diagrams just by typing notation in plain text. See Examples.

https://excalidraw.com -- online drawing tool.

  • supports exporting drawn diagrams to SVG and PNG directly from right click.
  • has Libraries support to load library of shapes, icons etc.

notes

Kananda keyboards

MacOS

Lipika IME works well on MacOS Ventura on Macbook Air M2 chip - March 2023. You will have to download the compiled LipikaIME.pkg file from it's github releases page.

Some screenshots as seen on MacOS Ventura (Mar 29, 2023).

Keyboard Ventura

Keyboard ventura { width=300px }

Keyboard Settings on MacOS Ventura

Keyboard settings { width=300px }

Lipika settings

Lipika settings { width=300px }


Old notes:

For Mac, Let's investigate MacUIM as given by Shreevatsa. MACUIM no longer works.

Linux

Old notes: On Linux: Setting up Kannada Input on Ubuntu

notes#kannada#macos

Static Site Generators

Some notes and links on Static Site Generators (SSG).

A "hello world" program for the 2010's (and 2020s).

Articles

Why You Should Write Your Own Static Site Generator; Nov 2023.

The understated innovation of static site generators

Smaller Static Sites with New Formats - 2022. Optimizing Fonts, Images etc using newer formats and tools.

Elements Of a Great Markup Language

"... static site generator which takes a bunch of input documents, a custom conversion script, and outputs a bunch of HTML files."

low touch - hosted SSG

Desktop SSG

Publii - Open-Source CMS for Static Site

Static site generators

roman-kashitsyn/mmapped.blog that powers mmapped.blog is a Go program that implements? subset of latex and converts it to HTML. See the "blogware" source code.

Kitten: Home A 💕 Small Web development kit. Build using #html, #css , and #javascript . Progressively enhance with Streaming HTML and #htmx

jemdoc -- light text-based markup language designed for creating websites. Based on Asciidoc. Has #latex support for math, but the equations are rendered as static images, not MathJax etc.,. Appears to be popular with academics.

JBake - Java based open source static site/blog generator -- this is actually surprisingly smooth.

nuex/zodiac: A static website generator written in awk and sh.

Makefile-Based Static Website Generator

Makefile and discount powered blog

Static site generator with rsync and lowdown - Roman Zolotarev [SSG]

kambrium/dssg: A static site generator written in D

sysgears/grain: Static Web Site Building Framework For Groovy that uses ASCIIdoctor

Static site generators need less rigid content APIs | Hacker News

Hammer for Mac 6.9 - Available Now

jeremycw/mfbg: Mother F*ing Blog Generator -- a Makefile + pandoc.

Home - Styx Static Site Generator -- The Purely Functional Static Site Generator. Styx is a functional static site generator based on the Nix package manager.

srid/rib-sample: Sample site for the Rib static site generator

Pelican 4.2.0 — Pelican 4.2.0 documentation with m.css looks very good.

bastibe/org-static-blog: A static site generator using org-mode

Lume, the static site generator for Deno - Lume

jorge  is a personal (small + opinionated) site generator inspired by Jekyll, written in Go, with org-mode and markdown support.

Static site generator for Django - Django Distill

Headless SSG

Deployments

surge.sh:

Examples of surge.sh sites:

Commenting systems

Search for static sites

Not exactly SSG

Crazy / Fun static site generators

Typst

Rheo? is an typesetting and static site engine for Typst.

notes#markdown#markup-language#static-sitegen

Makefile

Why Makefile?

How Make?

Tutorials

Tips and Tricks

  • Polyglot makefiles

    .ONESHELL: python: SHELL := python3 python: greeting = "hello" print(f"{greeting}, python!")

Examples of good use of Makefile

Makefile companions -- autotools, premake, scons, cmake

Make-like

  • Just " is a handy way to save and run project-specific commands." - just is a command runner, not a build system, so it avoids much of make’s complexity and idiosyncrasies. No need for .PHONY recipes!
  • cmake
  • Pants
  • tup is a file-based build system for Linux, OSX, and Windows. It inputs a list of file changes and a directed acyclic graph (DAG), then processes the DAG to execute the appropriate commands required to update dependent files. Updates are performed with very little overhead since tup implements powerful build algorithms to avoid doing unnecessary work. This means you can stay focused on your project rather than on your build system.
  • casey/just: 🤖 Just a command runner ⚡
  • xmake A cross-platform build utility based on Lua Simple, Fast, Cross-platform Modern C/C++ build tools, Support multi-language hybrid compilation.

notes#make

Common Lisp

Why

Why I Chose Common Lisp — Dan's Musings; Jan 2025.

Core

Learning

If you are a beginner to CL, this challenge will help you to get started with setting up a development environment from scratch and begin the journey of learning CL together with other community members.

Reading /practicing CL programming

Scripting

Common Lisp as a Scripting Language, 2015 edition - Cybernethics / Cybernéthique — LiveJournal

Install cl-launch:

git clone https://gitlab.common-lisp.net/xcvb/cl-launch.git
cd cl-launch
make
make install
which cl
/usr/local/bin/cl

Example script -- cllaunch1.lsp:

#!/usr/bin/cl -sp lisp-stripper -E main
(defun main (argv)
  (if argv
      (map () 'print-loc-count argv)
      (print-loc-count *standard-input*)))

Run it: chmod +x cllaunch1.lsp

Fails with: Component "lisp-stripper" not found, required by #<SYSTEM "cl-launch-build-0">

To fix this, i cloned https://github.com/fare/lisp-stripper to ~/common-lisp, and the above problem goes away. Next it fails to find cl-ppcre.

I do remember installing it using quicklisp -- ls ~/quicklisp/dists/quicklisp/software/cl-ppcre-20190521-git.

Distributing CL binaries

Links

Common Lisp Books

Blogs

Projects

Fairly recent Common Lisp project that is not just a web application etc., -- https://github.com/atgreen/red-light-green-light -- "A git-centric policy management and enforcement tool designed to accelerate your CI/CD pipelines."

Opusmodus -- "Music Composition System"

Opusmodus revolutionizes music composition, fuses traditional notation with modern concepts, and streamlines the path to a finalized score.

Editing

notes#lisp#programming-language

SQL

SQL Words
SQL Words (via)
## On SQL

Learning resources

Select Star SQL "... is an interactive book which aims to be the best place on the internet for learning SQL. It is free of charge, free of ads and doesn't require registration or downloads. It helps you learn by running queries against a real-world dataset to complete projects of consequence. It is not a mere reference page — it conveys a mental model for writing SQL". Very nicely laid out (credits M. Buttrick of "Practical Typography").

SQL Teaching - The easiest tutorial to learn SQL

SQLBolt - Learn SQL - Introduction to SQL ... a series of interactive lessons and exercises designed to help you quickly learn SQL right in your browser. Related website - regexone

Advanced SQL window functions quiz

SQL style guide by Simon Holywell

How Does a Database Work? | Let’s Build a Simple Database

Learn SQL while solving crimes! SQL Police Department

SQL for Data Scientists in 100 Queries

SQL visualization/query/notebook tools

Redash -- can be self hosted.

Franchise: a sql notebook -- runs local proxy on your system. the UI itself is on franchise.cloud website. Can also run locally.

apache/incubator-superset: Apache Superset (incubating) is a modern, enterprise-ready business intelligence web application

forbesmyester/esqlate -- Build minimum viable admin panels quickly with just SQL. uses node.js proxy behind nginx. template queries are written using JSON and the "holes" are filled by user to get the results back. Users can also add new records.

The Log File Navigator --

  • An advanced log file viewer for the small-scale
  • Watch and analyze your log files from a terminal.
  • No server. No setup. Still featureful.
  • Many logging tools, like Splunk, provide great features but are optimized for large-scale deployments. They require installing and configuring servers before they can be effectively used. There is still a need for a robust log file analyzer for the terminal.
  • Just point lnav to a directory and it will take care of the rest. File formats are automatically detected and compressed files are unpacked on the fly.
  • Log files are a wealth of information, lnav can help highlight the parts that are important and filter out the noise.

Editors / IDEs

Command line tools

Translation tools

Frameworks

LLM

A Survey Paper (Shi et al. 2024)

Text-to-SQL parsing solves this issue by converting natural language queries into SQL queries, thus making database access more accessible for non-expert users. To take advantage of the recent developments in Large Language Models (LLMs), a range of new methods have emerged, with a primary focus on prompt engineering and fine-tuning. This survey provides a comprehensive overview of LLMs in text-to-SQL tasks, discussing benchmark datasets, prompt engineering, fine-tuning methods, and future research directions.


See also Query Languages

References

notes#database#sql

Software Engineering

A Senior Engineer's CheckList - Little Blah


Learning

Software carpentry - Our Lessons Over the course of the workshop, instructors teach our three core topics: the Unix shell, version control with Git, and a programming language (Python or R).

Paper reviews

Done as part of CSCI 50400 class under Dr. Hill at IUPUI.

No Silver Bullet by Fred Brooks

(Brooks 1987)

This paper by Fred Brooks addresses the inherent difficulties involved in the construction of software. The author distinguishes between the accidental difficulties, which affect the process of development but are not inherent to the final system and essential difficulties, which are inherent to the system. The progress in hardware technology, development of new, higher level programming languages and constructs help in mitigating the accidental difficulties. Of the silverbullets proposed, some have influenced the direction of software development (eg: Ada, OOP), others like program verification, IDEs, cheap & abudant processing power have managed to affect the accidental complexity to a large extent. Expert systems, AI, automated & graphical programming are of little help in deciding and defining what the software should do. The author identifies complexity, conformity, changeability and invisibility as the essential properties of the system. Developing and distributing reusable software components in place of custom development has the benefit of reduced costs via cost-sharing, improved documentation and generalisation of features required by the cross-section of the users. Rapid prototyping allows the clients to narrow down the scope of their requirements in faster fashion and also helps in understanding the capabilities of software systems in an iterative process. Moving beyond the idea of writing software to growing software boosts the morale of engineers and stakeholders alike. All of these proposed methods have to championed by great designers who are trained in sound design methodoligies, have the ability to distinguish between good and great designs and over time develop the capability to deliver structures that are efficient, simple and effective. Managing the entropy generated by the interplay of people, software, hardware is at the core of software engineering. The success of RAD tools has given credence to the rapid prototyping approach. Practicing software construction as an ongoing activity encourages the designers to make choices that address the essential problems instead of getting lost in the accidental aspects, which in practice demand significant attention. Many recent software development methodologies such as continuous integration, agile programming, emphasise the importance of the engineers, and customers having access to the software as it is built. This allows all the stakeholders to get familiar with the system capability from top-down and consequently influence the direction of software development. The idea of software a living, growing entity is a powerful one and one that encourages the desiger to make decisions that are congruent with that expectation. The pervasive adoption of component vendors and Open source software development model has proven that the "buy over build" approach has succeeded spectacularly. reviewed: Aug 22, 2012

Quantitative evaluation of software quality by Boehm

(Boehm et al. 1976)

Software quality evaluation deals with fundametal issues such as: defining characterstics of software quality that are measureable and non-overlapping, how well one can measure overall software quality and how can this information be used to improve the software life-cycle process. The paper concludes that the desireable qualities of a product are not universal and there is no single metric that can universally rate software quality. However, a useful approximation is achievable through checklists and priorities. Even then, the overall rating is suggestive than conclusive and lessons from one product cannot wholly transposed on to a new product. Quality metrics should be used to indicate the presence of anomalies and as guides to develop, test, acquire and maintain software products. Software quality is a fuzzy phrase. This paper does an excellent job of enumerating the characterstics that any proposed metric that claims to improve quality should have. Many metrics have been considered and methodically analyzed to evaluate their efficacy in achieving goals identified for the product. Metrics which are specific, help in tracking errors over the life-cycle and are amenable to automation are considered to be higher value. It is important to develop a catalog of software quality metrics that transcend individual projects. Selecting which metrics to apply for a given project should be an important part of any software project planning. Reviewed: Aug 27, 2012

NAOMI -- An Experimental Plaform for Multi-modeling

(Denton et al. 2008)

This paper documents an experimental platform designed to address the challenge of combining Domain Specific Modeling Langauges(DSMLs). The key challenges are capturing interdependencies, maintaining consistency and semantic precision. A version controlled repository is used to store all the artefacts which provides a model registry, constraint-checking, and notifications on model change. The platform provides data exchange between models, executes the models processing input to output and propagates change between connected models. The platform also checks for consistency of attributes, constraints of models and thier interactions. The components of the NOAMI system are: connectors to provide interoperability between models, a manager to orchestrate modelers in integrating and invoking connectors, and an execution engine that determines the order in which the invdividual models are executed. The system is implemented and tested using an experiment that simulates a traffic light. This paper does a good job of documenting the NOAMI project. The authors start by identifying the key challenges that the proposed system should solve. Then they go on to identify the requirements that are captured as testable outcomes. They model the software that provides the functionality required to achieve the desired outcome. Overall, the paper does an excellent job of explaining why the project was necessary, how to they implemented it and tested it. This paper made me aware of the various modeling languages used in various contexts and the problem of interoperability that exists in large projects. However, I was a little disappointed that they did not test this tool on multi-models from a real-life project that could substantiate some of the challenges they faced and validate the results obtained by using this platform. Reviewed: Aug 29, 2012

Where Do Operations Come from? A Multiparadigm Specification Technique

(Zave and Jackson 1996)

In this paper, a multiparadigm technque is discussed to organize and write complex specifications of systems that are event driven and the output of the systems modify the system state. The Z notation is augmented with automata and grammars to map input stimuli to operations and arguments of the Z specifications. The specification is made of partial specifications written in different languages: finite automaton, first-order logic and Z. Partial specifications have vocabularies which are categorised as event class, argument function and a state component.The technique described assumes that the application is restricted to a event-oriented input and the output is state-oriented. The apply this technique to write the specifications for a graphical user interface and a telephone switch. They then show how the multiparadigm specification is checked for consistency. There are many techniques which allow us to write partial specifications, which can then be combined into a complete specification of the system. While it is appealing to use a single paradigm, having multiple, yet cooperating paradigms allows us to use them against each other to check for overall system consistency. Writing formal specifications for real-life complex applications is very challenging. There are different ways of capturing the specifcations formally. I came to know of the existence of the Z system, which is impressively also an ISO specification. Some problems fit naturally with some paradigms (eg: state diagrams for -> state diagrams). Some paradigms are better suited for low level details (eg: first order logic). I'm of the opinion that the entire system should be specified using the same language, preferrably with a full- fledged, standard system like Zed. This allows the designers to get the complete system picture. However, I see that choosing the right paradigm is a judgement call on the part of the designer. So, while the paper demonstrates the use of the multiple paradigms on a real problem, it is not prescriptive for all projects.

Seven Myths of Formal Methods

(Hall 1990)

There are many commonly held beliefs that are hindering the adoption of formal methods in software development. Formal methods cannot guarantee that software is perfect because there is a limit what can be proven to correct and users of the formal system are not immune to making mistakes. However, formal methods can demonstrate correctness of the specification and find errors. Formal methods are often assumed to be useful only for program proving, however in authors experience, they are more useful in writing formal specifications, providing properties, constructing programs by mathematicaly manipulating specifications and verifying programs by mathematical argument. The paper also counters the lament that formal methods are only useful for safety-critical systems by giving examples from development of CASE tools. Formal methods do not need higher level mathematics are often feared. Familiarity with Logic and Set theory in addition to some training in Z system, can bring up the professional software engineer up to speed. The rigour brought by formal methods are claimed to reduce development costs by identifying potential problems early on. Keeping formal specifications in sync with the implementation, it is claimed that life-cycle change will become easier. The author also references the use of formal methods in large, industrial system development. The author has made a sincere effort to address the unsaid, yet often decision-influencing assumptions about formal methods. This paper makes an attempt at identifying some of those commonly held beliefs and provides anecodtal evidence from author's own software development projects. This papers serves as a good starting point to start addressing some of the concerns that formal methods are "not practical" and "too academic" given the splash of mathematical symbols on any material related to formal methods. What this paper lacks in experimental rigour is made up for by author's enthusiasm in urging the reader to take a second look at formal methods by providing convinient exits. The author's emphasis that formal methods are primarily a tool for capturing specifications rings true to me. Since specifications are contracts between the stake-holders and the implementeres, capturing it with utmost rigour is beneficial. There will always be cultural backlash from programmers who resist deviating from their programming language and platform worldview. However, a serious software engineer will welcome the clarity formal methods bring to the table.

Reviewed: Sep 10, 2012

Requirements Engineering in the year 00 -- A research perspective

(Van Lamsweerde 2000)

This paper covers the milestones in evolution of requirement engineering as a discipline. Existing system can be modeled using ontological questions like why-what-how and reasoning about the model. The scope of requirement engineering also involved identifying the elements of ontology such as goals, viewpoints, data, operations, agents and resources. Goal based reasoning allows us to capture the why questions. Formal frameworks (KOAS methodology) allow us to caputre goal refinements through AND/OR graph structures. Qualitative frameworks (NFR methodology) catpure the soft (and sub)goals. Conflicts betweeen stakeholders' viewpoints are addressed by applying conjuction on pais of viewpoints. Multi paradigm specifications lik OMT capture entiry-relationship, dataflow and state transition which is now popular(!) as UML. To elicit better expression from stakeholders, scenario based "story telling" has proven to be successful. Scenarios capture exceptional cases, abstract conceptual models, requirement validations and generate acceptance tests.

This paper makes a distinction between requirements and software specifications. This distinction is important as stakeholders often think in terms of objects and agents in the real world. Specification are formulated in terms of software objects. I am curious to learn more about goal driven nature of requirement engineering can segue into writing better software specifications. I suspect that the often mentioned screed of "insufficient requirements" can perhaps be attributed to the impedence mismatch between these two vocabularies. Another aspect of requirement engineering that appeals to me is that it has specific methodologies (NFR) to capture non-functional requirements, which is often brushed under the rug.

Reviewed: Sep 12, 2012

Software Architecture Patterns

  • Blackboard architectural model.
  • GBOpen -- a black board system in Common Lisp.

Formal Methods in Software Engineering

Documentation

tutorials, how-to guides, explanation, reference

Research and Development

Misc reading

To read

Software Design X-ray

References

  • Brooks (1987). No Silver Bullet: Essence and Accidents of Software Engineering.
  • Boehm, Brown, Lipow (1976). Quantitative Evaluation of Software Quality.
  • Denton, Jones, Srinivasan, Owens, Buskens (2008). NAOMI--an Experimental Platform for Multi--Modeling.
  • Zave, Jackson (1996). Where Do Operations Come from? A Multiparadigm Specification Technique.
  • Hall (1990). Seven Myths of Formal Methods.
  • Van Lamsweerde (2000). Requirements Engineering in the Year 00: A Research Perspective.

notes

Haskell Programming Language

Why Haskell

via

Why Not Haskell

Learning Haskell

Liquid Haskell

Write Simple Haskell

Read Haskell code

Video lectures and talks

Courses

  • Functional Programming an introductory course on functional programming in Haskell by Graham Hutton.
  • Introduction to Haskell at UPenn by Brent Yorgey, Joachim Breitner et al. This in my experience is the best introduction to Haskell in a classroom format you can find. The lecture notes are self-explantory and written in a conversational, easy to follow manner.
  • CMSC498V -- "Advanced Functional Programming Languages (Fall 2017)" taught by Dr Niki Vazou at UMD.

Developing with Haksell

Resources

Blogs

Blog posts / articles

Meta lists

Editors

  • Haskell idea plugin
  • Haskell for Mac
  • Code.world
  • Haskell-tools A GHC based toolset for Haskell programming. Currently featuring Haskell-tools Refact, a refactoring framework.
  • HyperHaskell -- is a graphical Haskell interpreter (REPL), not unlike GHCi, but hopefully more awesome. You use worksheets to enter expressions and evaluate them. Results are displayed using HTML.

Papers

My Notes

What are some of the low-friction ways of using Haskell?

  • Pandoc -- add custom elements, extract metadata from documents.
  • Hakyll -- build custom site renderers.
  • Shake -- build system where Make isn't sufficient.

If you get can't load .so/.DLL for when installing cabal package: put shared: True in ~/.cabal/config

Cabal

Sandbox:

    cabal sandbox init
    cabal init #to init a new proj.

remember to export HASKELL_PACKAGE_SANDBOX=.cabal-sandbox/x86_64-osx-ghc-7.6.3-packages.conf.d inside the cabal sandbox.

jupyter notebook

See www.btbytes.com/stack.yaml for dependencies.

stack new myproj
cd myproj
stack init
brew install zmq
stack exec ipython -- notebook

Note: iHaskell binary is installed in ~/.local/bin:

Copied executables to /Users/pgowda/.local/bin/:
- ihaskell

(not sure if the above two lines are actually important ...)

Libraries and tools

Haskell Reference

Misc

Links

Projects in haskell

notes#functional-programming#haskell#programming-language

Programming

Notes on Programming as a practice. Collect notes about programming language at the "language" level without getting into specific details of each language. "on", "about", "of" programming.

The Myth of the Coder "Considering the historical distinction between coder and programmer" – Communications of the ACM, Aug 2024.

List of Tips | The Pragmatic Bookshelf -- Extracted From The Pragmatic Programmer

norvig/pytudes: Python programs to practice or demonstrate skills.

My list of challenging software projects some programmers should try | andreinc; 2024.

Papers

Books

  • Nature of Code by Daniel Shiffman. "an online resource and print book exploring the unpredictable evolutionary and emergent properties of nature in software via the creative coding framework processing."

2024 version with a new and rebooted version of this book built around javascript and the p5.js library. The book has a few new coding tricks this time, but it’s the same old nature—birds still flap their wings, and apples still fall on our heads.

The discussions on naming and abstraction are particularly illuminating, exposing some fundamental tradeoffs like synthetic vs natural names, or principled vs adaptable systems of abstractions. Were these notions more widespread, a lot of the pointless rants and debates we hear in programming circles would disappear.

I would not recommend this book to beginners - this book is most useful when you are experienced enough that your struggle is to make choices, not to get things to work. -- HN

Courses

All CS-CMU courses


Other lists

Journals

Papers

Rosetta Code Analysis (Nanz and Furia 2014)

Our statistical analysis reveals, most notably, that: functional and scripting languages are more concise than procedural and object-oriented languages; C is hard to beat when it comes to raw speed on large inputs, but performance differences over inputs of moderate size are less pronounced and allow even interpreted languages to be competitive; compiled strongly-typed languages, where more defects can be caught at compile time, are less prone to runtime failures than interpreted or weakly-typed languages.

Blogs

Tools

... is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool

  • Trinket -- "lets you run and write code in any browser, on any device. Trinkets work instantly, with no need to log in, download plugins, or install software. Easily share or embed the code with your changes when you're done."

Tutorials

Projects

practical-tutorials/project-based-learning: Curated list of project-based tutorials

Videos

Articles

  • The Grug Brained Developer -- grug brain developer not so smart, but grug brain developer program many long year and learn some things although mostly still confused

Concepts

Delimited continuation

Misc

Aphorisms on programming language design

-- via

Links

See also: literate, pl, programming-aphorisms

References

notes#programming

Zig Programming Language

The Zig Programming Language is an open-source programming language designed for robustness, optimality, and clarity.

Introduction

Code

Learning

Articles

Project Management

FFI

Twitter

Provide or link to a small (50-200 ish lines) idiomatic Go program demonstrating concurrency. (Elegant use of goroutines, channels, etc)

I'll provide the equivalent Zig program using async/await and std.event.Loop for comparison.

My notes

Cross compiling zig

Code

# crosscompile.zig
const warn = @import("std").debug.warn;

pub fn main() void {
    warn("Hello, world!\n");
}

Compiling natively on Mac OSX

$ zig build-exe crosscompile.zig
$ file crosscompile
crosscompile: Mach-O 64-bit executable x86_64

Cross-compiling for Linux

The C ABI tuple of (operating system, architecture, C compiler environment) is defined by --target-os --target-arch --target-environ flags of zig. [ref]

zig build-exe crosscompile.zig --target-os linux --target-arch x86_64

Verify the executable file type created:

$ file crosscompile
crosscompile: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, with debug_info, not stripped

Software written in Zig

notes#programming-language#zig

Publishing

See also: 100-page-book

Lulu specific notes

Fixing Embedded fonts error

When you are trying to publish a book via Lulu.com, you might encounter "embed fonts" error. This is the workaround I found on the web that uses ghostscript:

gs -dSAFER -dNOPLATFONTS -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
 -sPAPERSIZE=letter -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer \
 -dCompatibilityLevel=1.4 -dMaxSubsetPct=100 -dSubsetFonts=true \
 -dEmbedAllFonts=true -sOutputFile=new.pdf -f old.pdf

See also: Embed fonts in a PDF with pdflatex which shows a simpler technique:

pdf2ps doc.pdf
ps2pdf13 -dPDFSETTINGS=/prepress doc.ps doc2.pdf

However, the resulting PDF looks fuzzier than the original one.

Resizing all pages of a PDF to a common size

This can happen if you are combining multiple PDF documents (say using pdftk) to make a compendium. You can resize all the pages to be of the same size using ghostscript -- source:

gs -o /path/to/resized.pdf
   -sDEVICE=pdfwrite
   -dPDFFitPage
   -r300x300
   -g2550x3300
   /path/to/original.pdf

Cropping PDFs

Self publishing tools

Manning

Libraries

  • PrinceXML
  • Speedata Publisher to generate reports. XML->PDF. Uses LuaTeX. AGPL/Commercial license.
  • PreTeXt An authoring and publishing system for authors of textbooks, research articles, and monographs, especially in STEM disciplines. The best of DocBook, LaTeX, and HTML. Outputs: print, PDF, web, EPUB, Jupyter Notebooks, braille,. github; XML based syntax.

Web publishing

Zines

Book covers


See also: pandoc

notes#books#publishing

Pandoc

Pandoc is a program that converts between various text markup formats.

Pandoc allows you to customise the output via extensive command line arguments and by templates.

My projects related to Pandoc

  • Semantic CSS for Pandoc -- an attempt at finding and using various semantic Cascading Style Sheets with Pandoc'd default HTML rendering.
  • Pandoc + Missing.css -- is instructions on how to use missing.css to style pandoc output. Summary: you will have to wrap the $body$ variable in <main> </main> tag.

Writing Papers

Guides on using Pandoc to write books

Editors

Customising pandoc

These are some of the examples of users customising pandoc to output LaTeX, HTML to their taste and requirements.

My own attempts are here:

Templates

Filters

Pandoc filters can be written in Haskell which modify the document structure programmatically. These are some of the user written filters that are instructive:

Exporters

Ox-pandoc is an exporter that translates Org-mode file to various other formats via Pandoc.

Markdown to InDesign; Pandoc now ships with a writer able to produce an ICML file from any Pandoc-supported input file format.13 ICML is the document format of Adobe InCopy; Dec 2015.

Books written using pandoc

See also

  • Laika -- Text Markup Transformer for sbt and Scala applications, transforming markdown and reStructuredText to HTML and PDF
  • lise-henry/crowbook -- converts books written in Markdown to HTML, LaTeX/PDF and EPUB.

Styling

Sites built using Pandoc

Book publishing

  • [output.pandoc.profile.pdf] + output-file = "output.pdf" + to = "latex"

Using with weasyprint

From an HN thread:

It's even possible to replace (Xe)LaTeX with weasy, a Python HTML-to-PDF converter. It supports two-colums via CSS, automatic CSS hypens, CSS page counters and embedding SVGs. I just needed an HTML header with CSS in the markdown file.

$ pandoc --filter pandoc-citeproc --csl ieee.csl --bibliography=paper.bib --smart --normalize -f markdown+multiline_tables+inline_notes -t html5 -V margin-top:0.5in -V margin-bottom:0.5in -V margin-left:0.5in -V margin-right:0.5in -o output.html input.md
$ python3 -c "from weasyprint import HTML; HTML('output.html').write_pdf('output.pdf', presentational_hints=True)"

For LaTeX-style math equations I added mathjax-pandoc-filter as filter to the pandoc args:

--filter ~/node_modules/.bin/mathjax-pandoc-filter -Mmathjax.centerDisplayMath -Mmathjax.noInlineSVG

SVG2PDF

^b5a0d2

If you are trying to convert an HTML page to PDF using Pandoc, and the HTML page has svg drawings (e.g.: this excellent post - The Big LLM Architecture Comparison by Sebastian Raschka), pandoc might choke on it unless you have rsvg-convert installed (on macOS: brew install svg2pdf). As you can see from this commit that added passing svg through rsvg-convert command to covnert it into a png file.

also had to install the latex svg package.

even after this the PDF generation failed with:

pdflatex: major issue: User/administrator updates are out-of-sync.                                                                                                    Error producing PDF.
! Package svg Error: File `1e7afdcc9b596b58d739c7d01b66c47cb52f6c23_svg-tex.pdf                                                                                       ' is missing.
                                                                                                                                                                      See the svg package documentation for explanation.
Type  H <return>  for immediate help.                                                                                                                                  ...
                                                                                                                                                                      l.140 ...dcc9b596b58d739c7d01b66c47cb52f6c23.svg}}

notes#markdown#pandoc

NixOS

Why NixOS

Via this HN Comment Maintaining your system configuration is an exercise in software development like any other - if you lack rigor or discipline, your codebase will become painful to work with. Nothing is ever one shell incantation away - it has to be carefully architected into the existing system.

That being said, once you get the hang of things, you reap amazing benefits:

  • You can clone your system to any machine, and immediately have an identical environment
  • You can share system configurations as code (declare the means for hosting a website in its repository, for example)
  • You can use a fully-fledged programming language to configure any part of your system
  • You can make use of an extensive ecosystem of easily composable, prebuilt NixOS modules
  • You can seamlessly integrate with Nix, allowing for ephemeral development environments and shells with packages, eliminating much of the need for imperative package management
  • Everything in a Nix-based system must be derived strictly from (lockfiled) inputs, making the reproducibility guarantees incredibly strong (barring any network errors or resources being taken down)
  • The declarative nature of anything Nix-based means that every change is documented - your system never shifts from the source of truth, compared to other distros where discipline is required to maintain reproducibility
  • Nix is so robust that you could even nuke your filesystems on every log out, if you'd like

Quick Reference


nix-env -iA nixpkgs.octave # to install octave
nix-env -e octave # to uninstlal octave
nix-env --delete generations # to delete old generations
# See [GC](https://nixos.org/manual/nix/stable/package-management/garbage-collection.html)
nix-storage --gc # for collecting garbage and actually removing files from HDD

See MyNixOS site -- home.sessionVariables - MyNixOS

Nix Language

Nix Flakes

Tutorials

NixOps

Nix land

via domenkozar:

Nix + Rust

Articles

Blogs

  • Computing - Shen's Essays has many nixos articles including how to setup home manager, sway, wayland, FDE, latex on linux friendly laptop like Purism Librem.

Running log

2022-11-27 MyNixOS (selfnote: account using github.) - Build and share reproducible software environments with Nix and NixOS.

2022-10-24 Blog posts on Nix at ianthehenry.com; and Using Nix on macOS

2018-06-05

2019-02-24 Static Nix: a command-line swiss army knife.. looks promising to use even on systems where creating -nix is not an option. Can run nix as an unprivileged user.

2019-10-14 bauer: an Emacs+Nix IDE

2019-11-11 Package a Django website -- acelpb/acelpb: Configuration for acelpb.com 2019-11-11 Nix for Python developers | Asko Soukka

2019-11-26 Nix recipes for Haskellers — Sridhar Ratnakumar

2020-02-29 Edit /etc/configuration.nix to add default packages. Run nixos-rebuild switch to update the system to match the configuration.

cron is not installed by default (because nix uses systemd timersand users not allowed to have crontab by default too! quelle surprise. To do that you have to edit the /etc/configuration.nix file do any thing.

2023-03-06 Nix-powered development with OCaml - Dimitrije's Website

2023-09-25 Fast, Declarative, Reproducible, and Composable Developer Environments - devenv

2024-03-28 Flakes aren't real and cannot hurt you: a guide to using Nix flakes the non-flake way - jade's www site

notes#devops#nixos

Docker

Docker is an open-source engine which automates the deployment of applications as highly portable, self-sufficient containers which are independent of hardware, language, framework, packaging system and hosting provider.

See also:

Building docker from scratch

Articles

Software related to docker:

It is essentially Docker, but you can boot bare-metal with it. It even uses Docker under the hood. Every boot is a fresh boot. You can read-write during boot, but all changes are made to ram. You mount with fstab things you want persisted, like home. It uses very simply primitives, which makes it easy to use. Squashfs/grub-mkconfig/overlayfs/etc. Docker isn't exactly a "primitive", but it is easily reasoned with. reply -- creator comment

# You prepare /bin/your_executable here...

ADD https://github.com/coord-e/magicpak/releases/latest/download/magicpak-x86_64-unknown-linux-musl /usr/bin/magicpak
RUN chmod +x /usr/bin/magicpak

RUN /usr/bin/magicpak -v /bin/your_executable /bundle

FROM scratch
COPY --from=0 /bundle /.

CMD ["/bin/your_executable"]

BuildKit in depth: Docker's build engine explained | Hacker News

Building container images - using no tools · Ravikanth Chaganti

More Articles

Dockerizing applications

Nix and Docker

notes#containers#docker#linux

D Programming Language

Why D?

Show off D

Semantics

Garbage Collection

Example code showing GCStats:

import std.stdio;

extern (C)
{
	void gc_stats(GCStats* stats) nothrow;
}

struct GCStats
{
    size_t poolsize;        // total size of pool
    size_t usedsize;        // bytes allocated
    size_t freeblocks;      // number of blocks marked FREE
    size_t freelistsize;    // total of memory on free lists
    size_t pageblocks;      // number of blocks marked PAGE
}

void main()
{
	GCStats stats;
	gc_stats(&stats);
	writeln(stats);
	auto p = new byte[200];
	gc_stats(&stats);
	writeln(stats);
	p = new byte[1000];
	gc_stats(&stats);
	writeln(stats);
	p = new byte[10000];
	gc_stats(&stats);
	writeln(stats);
}

To turn on garbage collection profiling

$ max_column_sum_by_key_v1 --DRT-gcopt=profile:1 ngrams.tsv 1 2
max_key: 2006 sum: 22569013
        Number of collections:  132
        Grand total GC time:  246 milliseconds
GC summary:   35 MB,  132 GC  246 ms

Summary of GC discussion

See June 2016 discussion on the Garbage collector

  • Precise GC is in the works. (todo: summarise progress)
  • "Only a few language features forces you to use the GC." (which ones?)
  • "For most uses you are not forced to use the GC in any form especially with the help of std.experimental.allocator." (How?)
  • Current GC is based on a forked version of Boehm GC. So, not easy to upgrade to current version without deep understanding of how D does Thread Local Storage etc.,
  • "we can disable the GC so it won't go ahead and scan upon allocation (only time it does)" (how?)

Memory allocations are /always/ expensive. Higher level languages like Java have the benefit of using pools and optimizing for this usage pattern, D does and will never have this. Keep in mind an allocation = usage of malloc + write to returned pointer. -- rikki c.

The point is, D doesn't have to have a GC. Not using it is way easier than in most other languages because all the tools to help you profile it and avoid it are provided by the compiler. Go without a good GC is a dead language. D without a good GC is just not as good as it could be. And btw we're generally faster than Go ;-) The point is: while a better GC is a work in progress we'll never have a GC that can fit all needs, but it's not as critical as it is in Go or in C# because we provide other ways to manage memory when limitations arise. -- cym13

"Has anyone thought about taking GC from .NET and reusing it in D?"

One significant point has been already mentioned: cost of write barriers. I'd like to mention another factor: .NET GC is a copying one, it moves data around. One good feature of current D is it never moves data, so you can very easily call C and C++ code and pass pointers to your buffers and stuff and C/C++ code just takes these pointers and works with them as usual. No pinning, no marshaling, zero overhead. If you take a moving GC like .NET's, you immediately make all C/C++ interaction much harder, now you need to worry about pinning stuff or copying "managed" data to "unmanaged" memory and back. This is all costly both in terms of CPU cycles and of programmer cycles. You'll need "FFI", what most other GC-ed languages have to have, and D doesn't. --thedeemon

Precise Garbage Collector

GSoC project

It is essentially in a similar state that it was when Rainer presented it at DConf2013. The version in the pull request is not different from the one Rainer presented at all. It's actually the same one, just updated with what has been changed in druntime recently and my attempts at making the marking phase faster.

Meta programming3

Debugging

Building

  • To build projects using ldc2 instead of dmd2 with dub, use the --compiler switch, thus: dub build --compiler=ldc2
  • To build the release version of the software, use the -b switch, thus: dub build -b release

Cross Compiling

Serialization

  • Orange library for serialization.

Concurrency

Range based programming

  • poita.org has couple of articles on range based programming.

Profiling / performance

D run time

Testing

C/C++ binding

Lexing and parsing

Another option is to use a lexer/state machine generator. Ragel supports D and Rust (as of the not-quite-released v7) as target languages. HN

Memory safety

Documenting D code

  • harbored-mod A documentation generator for D with support for both DDoc and Markdown in documentation comments.

Higher level programming

Resources

Introduction

Intermediary

Articles

Tutorials

Presentations

Editor

  • IntelliJ plugin for D language -- look at the screenshots. It is a fairly complete IDE with syntax highlighting, auto completion, compile checking, code linting (via Dscanner), navigate to classes etc.,

  • DDT -- the Eclipse based D IDE works as advertised. Use the 3.7(Indigo) version. [In Oct 2012, DDT did not work with the latest version of Eclipse: Juno].

  • Setting up TextAdept to autocomplete D code using DCD

Blogs

Talks

Read code

Discussions

Contributing to D development

Software written in D

Developing and distributing D software

Misc

User experience

Libraries

For some reason, many D programmers have this "collection of D libraries", which is interesting in the sense that more than one developer has found it just easy to write their own library to do X...

In addition to those of CWEB:

  • Markdown based -- very easy to read and write Literate source.
  • Generates readable and commented code in the target language (the generated code is usable by others)
  • Reports syntax errors back from the compiler to the right line in the literate source
  • Supports any language including syntax highlighting and pretty printing in HTML
  • Compatible with Vim (literate.vim)
  • Highly customizable (you can add your own HTML or CSS)
  • Runs fast -- wc.lit compiled for me in 7ms for both code and HTML output
  • Supports TeX equations with $ notation.

Inspired from CWEB:

  • Automatically generates hyperlinks between code sections
  • Formatted output similar to CWEB

Interop

The power of reflection | Átila on Code

import autowrap;
mixin(
    wrapDlang!(
        LibraryName("mylib"),
        Modules(
            Module("mymodule"),
            Module("myothermodule"),
        )
    )
);

The code above, when compiled, will generate a Python extension (shared library) that exposes every D function marked as “export” in the modules “mymodule” and “myothermodule” as Python functions. It’ll even convert their names from camelCase to snake_case. Any D exceptions thrown will become Python exceptions. D structs and classes become Python classses. If the original D functions take a D string, you’ll be able to pass Python strings to them in user code. Modulo bugs, this… works! The code shown above is the only code that needs to be written. Setting up the build system takes more work!

notes#dlang#programming-language

Sanskrit

Padyapaana channel on youtube contains tutorial series by Sri R Ganesh on samskRta chandas.

Grammar

Learning

  • https://prakrit.info/vrddhi/ -- Sanskrit at the University of Chicago has lesons with video lectures with exercises, readings; survey of skt grammar, readings of sanskrit texts, annotated and categorized by grammatical features; meters; resources -textbooks, grammars and dictionaries. Via @suhasm.
  • Vyoma labs
  • Sanskrit Chanting --The purpose of this free course is to help aspirants learn correct pronunciation of Sanskrit


The Sounds of Sanskrit


Scholars

Articles

Online Radio

Newspaper

Books

  • The Mahābhārata -- The critical edition of the mahabharata available as electronic text by the Bhandarkar Oriental Institute. I is a good resource for Sanksrit learners. The text is formatted like this:
01001000a नारायणं नमस्कृत्य नरं चैव नरोत्तमम्
01001000c देवीं सरस्वतीं चैव ततो जयमुदीरयेत्
01001001A लोमहर्षणपुत्र उग्रश्रवाः सूतः पौराणिको नैमिषारण्ये शौनकस्य कुलपतेर्द्वादशवार्षिके सत्रे
01001002a समासीनानभ्यगच्छद्ब्रह्मर्षीन्संशितव्रतान्
01001002c विनयावनतो भूत्वा कदाचित्सूतनन्दनः

which makes it easy to read short sentences slowly and progressively build speed. Also available in Roman and ASCII transliteration.


Poems From The Sanskrit : John Brough via this neat thread about John Brough by Srivatsa.


“Sunāma: Beautiful Sanskrit Names” by Nityānanda Miśra.

Tools


Misc Collection


दशकूपसमा वापी दशवापीसमो ह्रदः।
दशह्रदसमः पुत्रो दशपुत्र समो द्रुमः ॥

Ten wells equal a pond.
Ten ponds equal a lake.
Ten lakes equal a child.
Ten children equal a tree.

Via @KS1729


Definition


जननी जन्मभूमिश्च स्वर्गादपि गरीयसी


Interesting and amazing creations in Sanskrit -- on "adhamakavyas", and "varnacitras".

notes#sanskrit

Forth

History

Chuck Moore -- inventor of FORTH. I saw Chuck at Strange Loop 2013. The picture on his home page is from his talk at that Event.

Articles

Presentations

Books

Implementations

See also: Factor

Discussions

Interesting take:

Forth is the language that taught me (among other things) that its possible to break problems into pieces that are too small to understand the whole. I'm not sure really what to call this other than something along the lines of can't see the forest for the trees. Its the opposite of having functions so large it takes hours to figure out what they do. In this case you have words that you can't figure out what they do for days because the call graphs step across 300 different modules and 10k other words all of which are like "update-pie-with-apples" and comprise two other words "dup pie, apple-pie-update" or something. -- via

notes#forth#programming-language

PHP Programming Language

25 years of PHP history a chronological story of PHP by JetBrains.

Jan 2019 Notes:

Success stories

Facebook’s backups were written in PHP. Well, the second version was, anyway. (T... | Hacker News

Multiprocess, forking, long-lived, server-side, I/O intensive PHP. And it worked brilliantly. Over the following years, it scaled from a backup set of a few hundred TB to many, many petabytes.

Alternatives

alekcz/pcp: PCP: Clojure Processor -- Like drugs but better

Just use it like PHP on a webserver (say nginx):

    #new pcp config => change .php to .clj
    index index.clj index.html index.htm;
    #new pcp config => change .php to .clj
    location ~ \.clj$ {
        #default nginx config on digital ocean lemp image
        #include snippets/fastcgi-php.conf;
        #fastcgi_pass unix:/run/php/php7.0-fpm.sock;

        include scgi_params;
        scgi_intercept_errors on;
        scgi_pass   127.0.0.1:9000;
    }

PCP has following libraries built in:

(require  '[cheshire.core :as json]
      '[clostache.parser :as clo]
      '[selmer.parser :as parser]
      '[selmer.filters :as filters]
      '[clj-http.lite.client :as client]
      '[next.jdbc :as jdbc]
      '[honeysql.core :as sql]
      '[honeysql.helpers :as helpers]
      '[postal.core :as email]
      '[clojurewerkz.scrypt.core :as sc])

FrankenPHP: the modern PHP app server "Uses the official PHP executor embedded in a state-of-the-art web server: Caddy"; written in golang

notes#programming-language

Clojure programming language

Clojure is a Lisp that runs on the Java Virtual Machine (JVM).

Learning resources

Clojure as a Lisp

Courseware

Presentations

Clojure like languages

IDE and infrastructure

  • Lightmod -- Lightmod is a tightly integrated tool for making full stack Clojure and ClojureScript web apps. It is fully self-contained -- no need to install the JDK or any build tool. It hot reloads both client and server code automatically with zero setup.

  • Nightlight is an editor you run inside your Clojure projects. Instead of being a separate application like traditional editors and IDEs, it's just a library that you add to your project. It spins up a web server and provides a completely browser-based interface to edit your code.

  • CIDER is the successor to nrepl.

  • Cursive Clojure IDE -- is an IDE built on IntelliJ

  • Parinfer

REPL

online playgrounds

Getting started with Lighttable

Via

Basic instructions. I use cmd for the shortcuts below, substitute ctrl on non-mac platforms.

  1. Install Leiningen http://leiningen.org/ you do not need to install clojure, lein will grab clojure for you.
  2. lein new playground from the command line to create a 'playground' project
  3. Open Light Table
  4. ctrl-space woto for "Toggle Workspace tree"
  5. Add the playground project folder you just created
  6. cmd-o core.clj to open the main clojure file for the project
  7. On an empty line type (+ 1 1) and hit cmd-enter

Things will grind away for a while as all the dependencies are downloaded and the JVM starts up. Get a cup of coffee or something. Eventually you'll see a green 2 show up.

You can then type anything in the tutorial and hit cmd-enter to evaluate it or cmd-shift-enter to evaluate the entire file. Think of the file as a shell with an editable history instead of something you'd want to commit to source control.

Documentation is searchable via ctrl-shift-d or moving your cursor on top of a function name and hitting ctrl-d. Autocomplete is available on tab, you can jump to definition with cmd-. and back with cmd-,

TODO: Explore CIDER + AC(autocomplete) + ritz.

Applications

Libraries

Spec

the biggest win from spec has been with parsing. This completely changes how you'd write a library that takes a data structure and parses it into something meaningful (for example, what hiccup does for html or what honeysql does for sql). In the past, this required a lot of very ugly parsing code and manual error-checking. With spec, you write specs and call s/conform. If it failed, you get a nice error, especially if you pair it with expound. If it succeeded, you get a destructured value that is really easy to pull data out of. I've done this in a half dozen different libraries and i'm pretty sure i wouldn't have even written them without spec.

Mallimalli and specmonstahspecmonstah are my favourite Clojure(Script) libraries built on top of Clojure Spec.

Clojure books

The first chapter, Names, explains why names define the structure of our software, and how to judge whether a name is any good.

The second chapter, Idioms, provides specific, syntactic advice for writing Clojure which is clean and readable.

The third chapter, Indirection, looks at how code can made simpler and more robust through separation.

The final chapter, Composition, explores how the constituent pieces of our code can be combined into an effective whole.

Clojurescript books

Experience reports and discussions

Articles

Talks and presentations

Tips and tricks

Cool projects / Read Code

Visualization / Notebook

Web development

Big data

Blogs

ClojureScript

Graal

  • This nextjournal notebook has a recipe for building Babashka "executing Clojure snippets or scripts in the same space where you would use Bash."

Web development

PCP

alekcz/pcp: PCP: Clojure Processor -- Like drugs but better

Just use it like PHP on a webserver (say nginx):

    #new pcp config => change .php to .clj
    index index.clj index.html index.htm;
    #new pcp config => change .php to .clj
    location ~ \.clj$ {
        #default nginx config on digital ocean lemp image
        #include snippets/fastcgi-php.conf;
        #fastcgi_pass unix:/run/php/php7.0-fpm.sock;

        include scgi_params;
        scgi_intercept_errors on;
        scgi_pass   127.0.0.1:9000;
    }

PCP has following libraries built in:

(require  '[cheshire.core :as json]
      '[clostache.parser :as clo]
      '[selmer.parser :as parser]
      '[selmer.filters :as filters]
      '[clj-http.lite.client :as client]
      '[next.jdbc :as jdbc]
      '[honeysql.core :as sql]
      '[honeysql.helpers :as helpers]
      '[postal.core :as email]
      '[clojurewerkz.scrypt.core :as sc])

Learning Journal

  • this is a good demo of how to use Clojure's -Sdeps at the command line to execute a script (even one hosted remotely on git):
clojure -Sdeps '{:deps
    {hello-clojure
        {:git/url "https://gist.github.com/athos/b68b15b08efedffaf14d8c020b125202"
        :sha "1c9a05106171f97f9b8e8ac8f58c7bd8dbe021f9"}}}'
    -m hello-clojure

See also: lisp, scheme.

notes#clojure#jvm#lisp#programming-language

Javascript

News

Learning

WAT

JS Alternatives

--

Reading

Functional programming

Tooling

Libraries

Visualization

  • Fabric.js Javascript Canvas Library -- via
  • Two.js -- two-dimensional drawing api geared towards modern web browsers. It is renderer agnostic enabling the same api to draw in multiple contexts: svg, canvas, and webgl. Jul 2015.

Frameworks

It is similar to JavaScript frameworks such as React and Vue, which share a goal of making it easy to build slick interactive user interfaces. But there's a crucial difference: Svelte converts your app into ideal JavaScript at build time, rather than interpreting your application code at run time. This means you don't pay the performance cost of the framework's abstractions, and you don't incur a penalty when your app first loads. You can build your entire app with Svelte, or you can add it incrementally to an existing codebase. You can also ship components as standalone packages that work anywhere, without the overhead of a dependency on a conventional framework.


The Bandolier: A Learn JavaScript the Hard Way Project by Zed Shaw. A fresh approach, and since it was built to teach JS programming, it should be easy to grok.

Links

Apps

Books

Talks


See also: webpack

notes#javascript#programming-language

Org Mode

In some users view, org-mode is itself reason enough to learn to use emacs, even if you don't use it for anything else (programming).

Zettelkasten

GitHub - nobiot/Zero-to-Emacs-and-Org-roam: Step by step guide from zero to installing and setting up Emacs and Org-roam on Windows 10

Org mode for writing web documents

While Org-mode is used by many people as an organizer, TODO list tracker, journal etc., I'm interested in it as primarily as a markup language that can be extended. This is is primary area where I want to become good at vis-a-vis orgmode (Jan 2020).

web document friendly CSS themes

See my Org-simple CSS theme page.

Blogging with Org mode

Links

Org Libraries

My notes

  • the metadata tags at the top of the document start with #+TAG: value format. That is "hash plus tag colon value" format.
  • use the - character for un numbered lists
  • what are the keyboard shortcuts to type blocks like EXAMPLE and CODE. Typing C-c C-, brings up a menu using which i could select an src block or an example block.

notes#emacs#programming#tools#writing

Emacs Notes

This page is a journal of my experiments with emacs. In November of 2008, I decided to use emacs for all my text editing purposes, after long been convinced of Emacs's power and utility in editing programs and texts. At this time, I consider myself to be an adequate user of vim, emacs and TextMate. My goal is to teach myself emacs in an auto-didactic manner and make a note of the questions I had and the solutions I found for them. I hope this serves as a reminder for myself on a later date.

Note: All the instructions on this page, unless otherwise noted, are tested on Mac OS X systems and Aquamacs.

Python + Emacs

Install rope, ropemode, pep8 and pyflakes.

$ pip install ropemode pep8 pyflakes

Install yasnippet-bundle and pymacs in emacs:

M-x package-install yasnippet-bundle

References:

Emacs Client on Mac OS X

Here is a nice AppleScript created by Brian McCallister that provides proper emacsclient behaviour. Update: this script launches a "terminal" window, which is an annoyance.

Navigation

Go to Shortcut


Goto line M-gg. End of the buffer M-x > End of the line C-e Beginning of the line C-a

Editing

Do what Shortcut


zap-to-char (say e) M-z e merge multiple lines M-^ (alt-shift-6)

Customising emacs

Customizing emacs is done through editing ~/.emacs file. Though, if you are using emacs-starter-kit you will be putting files under emacs.d.

Adding a new key binding.

You can bind any operation that you can do in emacs to a set of key strokes. For example: the emacs-git integration -- magit can be invoked by typing M-x magit-status. But, this gets tiring after a while, so you may want to assign a short cut. Short cuts in Emacs start with 'C-c'. You have to decide what comes after C-c. In this case, I chose magit-status.

Add the following lines to your .emacs file:

;; C-c ms Magit-status
(global-set-key (kbd "C-c ms") 'magit-status)

The first line is the comment (a good practice) and the second line tells emacs to call magit-status when you press C-c ms.

After editing a custom function in .emacs file how do I reload it?

Select the block of code that you want to reload and hit C-x C-e (evaluate). This can also be achieved by positioning the cursor (point in emacs lingo) after the last closing parentheses of the function and typing C-x C-e.

Editing ConTEXt files with Emacs

Install ConTEXt. Install AUCTEX using port (on mac).

$ sudo port install auctex

Active AucTEX by putting this (load "auctex.el" nil t t) in .emacs.

Auto completion.

Install YASnippet to get auto-completion on emacs. To use YASnippet, type in the trigger word and press TAB. For example, typing def and pressing TAB will give you

    def name():
        """
        """

The next tab press allows you replace the default function name with your own, with subsequent tabs taking you to the parameter list, docstring and finally the body of the function

What programming font?

This page has a nice collection of free programming fonts optimized for editing code over long durations of code. The rule of thumb to remember while selecting a programming font is: it should be a fixed width font. This is especially true in languages like "Python":Python where indentation is essential in understanding the code flow.

I currently use Monaco, a font that is available on Mac OS X set to size 10.

Emacs Muse Notes

Muse tutorial.

Instead of editing the muse-latex.el and muse-book.el files, just use customize on the muse-latex-header and muse-book-latex-header variables. Upgrades to new versions of muse will be much smoother.

Emacs + Git integration

Main entry point M-x magit-status (bound to C-c ms). Go to the magit buffer *magit: PRJNAME* and press tab on the line containing the filenames. The modified text will expand underneath. Press TAB again collapse.

Press g in the magit buffer to refresh git status. or execute M-x magit-status from one of the repository files.

Removing trailing white spaces

The emacs manual defines tells us that setting buffer variable show-trailing-whitespace to t will show trailing white spaces.

(setq show-trailing-whitespace 't)

Paste the above line into the current emacs buffer and evaluate the statement by pressing C-x C-e. Delete the white spaces with M-x delete-trailing-whitespace

Check to see if your emacs configuration is correct.

Source

emacs -q --eval '(condition-case err (progn (load "~/.emacs") (kill-emacs 0)) (error (kill-emacs 1)))'

Shut down emacs gracefully from the command line

emacsclient -n -e '(kill-emacs)'

How to ? Command


Create a Directory from within emacs M-x make-direct ory

[Spell M-x ispell check](http://www.gnu.org/software/emacs/manual/html_no de/emacs/Spelling.html)

Undo C-x u or C-_

Describe key C-h k

Describe bindings C-h b

Describe functions C-h f

Emacs Server/Client

See Running emacs as daemon.

Setting up SLIME

Movie showing how to setup slime, swank, sbcl and emacs

Some notes:

check out slime and put it somewhere convenient, ie., $HOME/elisp/slime.

Put the following lines in .sbclrc

(require :asdf)
(push "/Users/pradeep/elisp/slime/" asdf:*central-registry*)

Load swank in sbcl:

$ sbcl
(asdf:oos 'asdf:load-op :swank)
(setf swank:*use-dedicated-output-stream* nil)
(setf swank:*communication-style* :fd-handler)
(swank:create-server :dont-close t)

Installing emacs24

What's new in emacs 24?

git clone git://git.savannah.gnu.org/emacs.git
cd emacs
sudo apt-get install libxpm-dev
sudo apt-get install libgif-dev
sudo apt-get install libtiff-dev
./configure
make
sudo make install

My initial impression of emacs24 is that it feels much faster compared to the stock emacs-snapshot available on ubuntu maverick.

Understanding Emacs

Essays on Emacs

Interesting modes

Help

Interesting reads

Dotemacs

Distributions

Packages

Information well / emacs people

TODO

Is it possible to show the keybindings in the modeline?

Use case: I have configured 'Fn' keys for mode specific actions, but do not remember them, or I want emacs to prompt me to use them.

Starting point: http://www.emacswiki.org/emacs/ModeLineConfiguration

Random tips

  • Use M-x new-frame create a new Emacs window associated with the current Emacs instance. Great for organising, or when running Emacs on a multi monitor setup!

CIDER

Journal

Fri, January 3, 2020 : Trying out Swaroop's Rangoli-emacs

Sat, Jan 4, 2020 : if you see emacs ssl certificate problem error when installing a new dependency (zencoding-mode in my case), try to launch emacs from the terminal emacs -nw instead of the graphical mode. This finds the root certificates.

Thu, Jan 16, 2020 : settings up mac os x and iterm2 for emacs. what I want is to be able to:

1. on the laptop: use the `command` key as `option` and vice versa, so that it is similar to the "regular keyboard" (I use the Das Keyboards at work and home)
2. in ther iterm2 window, be able to use left-alt key as `meta`. so that when I type `left-alt-m` I get `Meta-m`.

notes#emacs#lisp#text-editor

jq

"A post announcing the 1.0 release of pq, my Rust command-line protobuf deserializer"

asciicast



Associated programs

JSONata and gnata

  • Lightweight query and transformation language for JSON data
  • Inspired by the location path semantics of XPath 3.1
  • Sophisticated query expressions with minimal syntax
  • Built in operators and functions for manipulating and combining data
  • Create user-defined functions
  • Format query results into any JSON output structure

Read gnata blog post (Mar 2026),

gron

gron - "make JSON greppable". brew install gron

▶ **gron** "https://api.github.com/repos/tomnomnom/gron/commits?per_page=1" | fgrep "commit.author"
json[0].commit.author = {};
json[0].commit.author.date = "2016-07-02T10:51:21Z";
json[0].commit.author.email = "mail@tomnomnom.com";
json[0].commit.author.name = "Tom Hudson";

Jo

See also: jo, a tool to write JSON in the shell. Example usage:

$ jo -p name=jo n=17 parser=false
{
    "name": "jo",
    "n": 17,
    "parser": false
}

jc

2020-06-01: https://github.com/kellyjonbrazil/jc This tool converts the output of popular command-line tools and file-types to JSON. This allows piping of output to tools like jq.

Example:

$ ls -l /usr/bin | jc --ls | jq '.[] | select(.size > 50000000)'
{
  "filename": "docker",
  "flags": "-rwxr-xr-x",
  "links": 1,
  "owner": "root",
  "group": "root",
  "size": 68677120,
  "date": "Aug 14 19:41"
}

jtbl

2020-06-01: https://github.com/kellyjonbrazil/jtbl -- A simple cli tool to print JSON and JSON Lines data as a table in the terminal

Example:

$  cat cities.json | jtbl
  LatD    LatM    LatS  NS      LonD    LonM    LonS  EW    City               State
------  ------  ------  ----  ------  ------  ------  ----  -----------------  -------
    41       5      59  N         80      39       0  W     Youngstown         OH
    42      52      48  N         97      23      23  W     Yankton            SD
    46      35      59  N        120      30      36  W     Yakima             WA
    42      16      12  N         71      48       0  W     Worcester          MA

jello - Filter JSON and JSON Lines data with Python syntax

2020-06-01: jello

jid - json incremental digger

2020-06-05: simeji/jid

jj - JSON Stream editor

2023-05-26: tidwall/jj)

fq - jq for binary formats

2023-06-03: wader/fq: jq for binary formats - tool, language and decoders for working with binary and text formats It was originally designed to query, inspect and debug media codecs and containers like mp4, flac, mp3, jpeg. But has since then been extended to support a variety of formats like executables, packet captures (with TCP reassembly) and serialization formats like JSON, YAML, XML, ASN1 BER, Avro, CBOR, protobuf. In addition it also has functions to work with URL:s, convert to/from hex, number bases, search for things etc.

jaq

jaq aims to support a large subset of jq's syntax and operations.

Goals:

  1. Correctness
  2. Performance
  3. Simplicity

faq

jzelinskie/faq: Format Agnostic jQ

faq is a tool intended to be a more flexible "jq", supporting additional formats. The additional formats are converted into JSON and processed with libjq. Supported formats: BSON, Bencode, JSON, TOML, XML, YAML.

jf

2024-04-28 say4n/jf: flatten them json

$ jf -f foo.json
{"foo.bar.0":"baz"}

$ jf --filename foo.json
{"foo.bar.0":"baz"}

$ echo '{"foo": {"bar": ["baz"]}}' | jf
{"foo.bar.0":"baz"}

See also

cube2222/jql: Easy JSON Query Processor with a Lispy syntax in Go


glomRestructuring data, the Python way.

from glom import glom

target = {'a': {'b': {'c': 'd'}}}
glom(target, 'a.b.c')  # returns 'd'

mq – jq-like tool for Markdown processing

mq '.h' demo.md
... lists all the h elements .. 

The Zed Project | Zed


Ecosystem of jq adjacent tools.

notes#json

D3.js

See also: Visualisation

notes

Cascading Style Sheets

My CSS Hacks

Learn

Learning CSS by playing

Frameworks

There are lightweight alternatives to commonly-used libraries. Some do away with compatibility with old browsers, some are less bloated, and some just do less.

Functional CSS

Programming history leading resulting in "functional" CSS -- CSS Utility Classes and "Separation of Concerns"

In defense of Functional CSS | Mike Crittenden's Blog

Functional CSS frameworks

Javascript

StyleX is a JavaScript syntax and compiler for styling web apps.

StyleX combines the strengths and avoids the weaknesses of both inline styles and static CSS. Defining and using styles requires only local knowledge within a component, and avoids specificity issues while retaining features like Media Queries. StyleX builds optimized styles using collision-free atomic CSS which is superior to what could be authored and maintained by hand.

Tools

CSS Variables

Colors

OKLCH Color Picker & Converter; OKLCH in CSS: why we moved from RGB and HSL

Typography

use Modern Font Stacks -- use the System font stack "The fastest fonts available. No downloading, no layout shifts, no flashes — just instant renders."

Markdown

ReMarkdown — HTML that looks like Markdown text

Flexbox

Semantic css

My favorites in particular order are: water.css, pico.css, mvp, though matcha looks excellent (May 2024), and I'm going to try it going forward.

  • matcha.css | Drop-in semantic styling library in pure CSS; the site also has a "preview website" feature - which, given a URL, will apply the semantic CSS and let you preview the site. It also has a custom build feature that allows you to select exactly which elements you want to apply these styles + customize colors. Excellent library and website!
  • missing.css -- The goal of missing.css is to reduce needed intervention in HTML. It lets authors
    • start with a good out-of-the-box experience,
    • customize it easily, even create multiple themes,
    • build common components using plain, semantic HTML,
    • create unique sites by applying utility classes as needed.
  • Carpetsmoker/hello-css: A CSS template focused on readability
  • Water.css -- is a just-add-css collection of styles to make simple websites like this just a little bit nicer..

Minimal CSS

Javascript styling system

StyleX "JavaScript syntax and compiler for styling web apps." by Meta.

StyleX combines the strengths and avoids the weaknesses of both inline styles and static CSS. Defining and using styles requires only local knowledge within a component, and avoids specificity issues while retaining features like Media Queries. StyleX builds optimized styles using collision-free atomic CSS which is superior to what could be authored and maintained by hand.

Cool stuff / experiments

Classic CSS

Good CSS examples

Tips and tricks

Typographic CSS

Introducing TODS – a typographic and OpenType default stylesheet | Clagnut by Richard Rutter

notes#css#web

ZettelKasten

ZettelKasten(ZK) method is a method of optimizing workflow of learning and producing knowledge.

Zettelkasten — How One German Scholar Was So Freakishly Productive is a good introduction to the method.

Here is twitter therad by the creator of roam research. See also these two essays by Niklas Luhmann who was the originator of this method .

A paper on Zettelkasten - Project MUSE - Life without Toothache: Hans Blumenberg's Zettelkasten and History of Science as Theoretical Attitude. Hans Blumenberg's use of ZK system (a historian and philosopher of science and technology).

The Zettelkasten Method: How to (Really) Take Smart Notes

Niklas Luhmann’s Card Index: Thinking Tool, Communication Partner, Publication Machin ( PDF )

The Wikipedia page on Zettelkasten is rich and informative.


Talk How to take smart notes by Sönke Ahrens.

  • Feynman -- "writing is thinking". Notes are not records of our thinking. we think in our notes.

Niklas Luhmann (1927-1998)

  • publications ~600, 60+ books.
  • Luhmann wrote a thesis, rehabilitation and got a degree all in one year when he was offered a professor's job and he did not have any of these pre-requisites.

I'm not doing that on my own, i'm doing it with my zettlekasten. I never force myself to do anything that I don't feel like.

  • Zettelkasten = slip-box. 90,000 notes, index with ~1250 entries. about 600 notes as manuscript outlines. one extra box for literature notes with ~15,000 notes.
  • 6 notes per workday (excluding weekends).
  • day starts with reading
  • simple notes on a sheet paper of the form "on page X see Y"
  • at the end of the day write the notes on a card
  • every note would get an index, starting at 1.

  • nothing like a topic structure. everything builds from bottom-up.
  • "entries into a line of thought"

Specifics / core features:

  • what kind of workflow this kind of note taking enforces?

  • note sequences for developing ideas (instead of storing)

  • links and indeces are helpful, but not central features

  • the workflow is streamlined towards writing. Turn notes into writing. The time consuming part is not the writing, but finding the right order

  • three main types of notes:

    • Fleeting -- daily, reminders of what you have in your head. you chuck it after a day
    • Project Related
    • Permanent notes -- main notes. Understandable even if you forget where they come from
  • one idea per note / all notes have the same format.

Status quo of higher education / writing:

  1. Find topic / research question (brainstorming)
  2. research / find literature
  3. read and take notes
  4. draw conclusions / outline text
  5. write
  6. hit or miss your deadline
  7. start all over with the next project.

"the above makes sense intuitively" (subtext: but does not work very well in practice)

ed: invert, always invert!

Status quo: note taking

  1. collect notes for each course in one place, in sep notebook or section of a notebook... this only arranges the material in chronological order.

The difference between the methods makes the difference:

If you can't explain it your own words, you have not understood it -- Richard Feynman.

What happens when you use the ZK system:

  • thinking, connecting and understanding become concrete actions... people tend to want to "do things", ZK helps you to convert vague notions into concrete things.
  • focus on the process -- and not on the outcome.. making connection happens on the paper, not in the brain.
  • writing broken down into reasonable steps (one note at a time). "Write 3/4 notes a day. because that's the outcome of reading something, thought about it and made some connections".
  • the value of each idea compounds -- the more notes the better
  • clear distinction between permanent and temporary notes

Mentions "Inbox" by DavidAllen's GTD. difference is, this is not goal oriented, but "insights".

What works What doesn't
Spacing Cramming
Interleaving One thing at a tie
Connecting Compartmentalizaton
Self-testing Underlining and cpying
Elaboration Re-reading
  • spacing is the technique of "spaced learning".. problem: they dont come with context.
  • "self-testing" can be frustrating because you feel the gaps in your knowledge. many students go back to re-reading because it feels like progress.

Recommended books:

  • "make it stick" by peter c brown, et al
  • "how to take smart notes" by sonke ahrens (speaker).

--

"real experts dont make plans, they become experts in making informed decisions in the context they are in".


Articles

5 main features of Luhmann’s slip-box:

Category-free notes
Atomized ideas
Note Sequences
Links
And an index

Videos

How to Take Smart Notes | Zettelkasten Method in Roam Research - YouTube:

Org-Roam

GitHub - nobiot/Zero-to-Emacs-and-Org-roam: Step by step guide from zero to installing and setting up Emacs and Org-roam on Windows 10

My ZettelKasten setup

(NOTE: not doing this anymore; using voodoopad instead)

How I would like to use zettelkasten:

  • use "daily notes" to make note of things I read on twitter/books/blogposts, thoughts, questions, "nice to know/do" etc.,
  • remember something "SURPRISING" as Claude Shannon said (something along the lines of the information content in a message is the "surprisingness" in it).

Software

Some comments by lobste.rs user MordecaiMalignatus need further thinking on how to use ZK:

Seeing these Zettelkasten-management systems pop up recently has been very interesting to me. Being German, the Zettelkasten was known to me earlier than for most Americans, so I’ve been stewing on the idea for quite some time (and wrote my own software to support it, as one does)

Most of the now-available Zettelkasten have the following things I see as flaws these days:

1.Titles for cards. These, to me, are an error and lead to ideas being discarded that have value in context. Often it’s much easier to have an idea in context and to write it down. Forcing titling of ideas leads to ideas being discarded that would otherwise (in context) be valuable. 2. The use of meaningless numbers/dates/hashes for file names. If you look into how Luhmann used his Kasten, he made heavy use of ad-hoc sequences and branched ideas based on ancestors, hence his tree-like notation for card IDs. This is a completely ignored aspects in many of the modern implementations. My own Kasten started out this way, too, until I found that it encouraged bigger individual notes - every note tends to be an island, and groups don’t actually form. 3. The treatment of the Kasten as a graph, rather than a tree. The Kasten is not meant to be an arbitrary graph - it’s a tree, where later nodes relate to their ancestors and build on them. Cross references are possible and encouraged, but need to be explicit. > This leads to many people treating a Kasten like a local-hosted wiki with fancier/more integrated interface - everything that was already possible with a directory full of markdown files and some editor support. In writing my own emacs-based solution for this, I’ve fallen into all of the above pitfalls, repeatedly re-writing my kasten into something that I will actually use and converse with.

For further reading, the Kasten is partially transcribed/digitized by the university of Bielefeld. The project can be found here (in German), and it might give some insight into how the person that invented it used it. The common literature that introduced the idea was How To Take Smart Notes, which was targeted at academic writing. Since then it seems the idea has taken off since Roam became a thing. I’m curious as to whether or not my personal conclusions will be replicated in other people’s experiences, or if I’m just a weirdo here.


Examples of Zettelkastens / Evergreen Notes

notes#note-taking#pkm#writing#zettelkasten

A Programming Language (APL)

kdb, Q etc.,

APL learning resources

APL like languages

notes#apl#programming-language

Rust Programming Langauge

A modern alternative to C and C++ for system programming.

Why?

How

Articles / Talks

Books

The Little Book of Rust Books

Print books

Online books

Experience reports

Papers / reports

Videos / Talks

Blogs

Tutorials

Courseware

Source code to study

Links

Libraries and tools

WASM

  • Seed -- A Rust framework for creating web apps

Applications

To study code, library usage etc.,

  • mcux/kylyp: A new Forum. The project uses rust, rocket, diesel, postgresql, and responsive design to build a new Forum.

Command Line Tools in Rust: See also: Common *nix commands written in Rust – gcollazo

ekzhang/rustpad: Efficient and minimal collaborative code editor, self-hosted, no database required alternative to codepad.

Editor setup

Performance

Memory Management

Safety-critical programming

What is Ferrocene?

Ferrocene is the main Rust compiler - rustc - but quality managed and qualified for use in automotive and industrial environments (currently by ISO 26262 and IEC 61508) by Ferrous Systems. It operates as a downstream to the Rust project, further increasing its testing and quality on specific platforms.

References and borrowing

Lifetimes

Async / Await

Web

Embedded

This book is an "introductory course" on microcontroller-based "embedded systems" that uses Rust as the teaching language rather than the usual C/C++.

Comparisons (Rust vs X)

FFI

// rustimport:pyo3
use pyo3::prelude::*;

#[pyfunction]  // ← expose the function to Python
fn fibonacci(number: u64) -> u64 {
...
import rustimport.import_hook
from rustfib import fibonacci

Discussions

Cargo

Installing a package that is not on crates.io: cargo install -f --git https://github.com/cjbassi/ytop ytop

  • Cargo Dist distributes your binaries. and in combination with oranda it also generates websites.

Best Practices / Tips

Hardware / bare metal

Rust vs Python

Rust and Python

Rust vs Java for rest services

-- via reddit

I gave a talk (video) today about "Rust for Java programmers" at my local java users group. Part of the talk was comparing the implementation of a minimal rest service in a container for the following 4 approaches:

  1. Payara-micro (JEE/JAXRS)
  2. Wildfly-swarm (another JEE/JAXRS micro deploy)
  3. Javaspark (non JEE "lightweight" framework)
  4. Rust-rocket

The comparisons are striking, viewed in the same 1/2/3/4 sequence above:

  • Container Image Size: 173MB / 151MB / 104MB / 2MB

  • Container Startup Time: 22.2s / 17.6s / 1.6s / 0.6s

  • Memory Usage at Startup: 630MB / 401MB / 34MB / 1.6MB

  • Memory Usage under Stress: 647MB / 522MB / 74MB / 1.7MB

  • CPU usage and throughput show a similar progression as above.

Nice job, Rocket! (results are unscientific. fight me) -- Source code

Success Stories

We had a similar challenge supporting sending this many notifications at OneSignal, which we solved using Rust. We recently hit a peak of 850 Million notifications per second, and 5 billion notifications per day. Here's a blog post on how we do it. Written back when we were at "only" 2 billion notifications per week: https://onesignal.com/blog/rust-at-onesignal/


Rolling log of things

2017-09-08:

There is a new book -- Programming Rust by Jim Blandy, and Jason Orendorff. Jim Blandy has also written a concise short book Why Rust [PDF]

Rust is currently unable to call directly into a C++ library; so that way Rust is probably behind D.

Rust, by design, makes certain programming patterns more painful than others. This is a GOOD thing! It turns out that, for game development, the patterns that end up being the easiest to deal with in Rust closely mirror the patterns that are easiest for game development in any language. Rust highly rewards data-oriented design with simple, understandable ownership semantics, and this is great news because this is a really good fit for game development.


See also: rust2018

References

notes#programming-language#rust

wiki

I use obsidian which is a personal, desktop wiki software to take notes as well publish some of those pages as this website

Why use a wiki? -- "Use a Wiki to document everything you know" by Nikita Voloboev.

Wiki Software

notes

Frasier

Frasier was an American TV sitcom (1993-2004).

French phrases in Frasier

  • contretemps (ಕಾನ್ ತ್ರೆ ತೋ (ನ್)) - a minor dispute or disagreement. "she had occasional contretemps with her staff".

  • bête noire (ಬೆಟ್ ನುಆ) - a person or thing that someone dislikes very much.

  • depeché-toi (ದೂಪಶೆ ತುಆ) - Hurry up!

  • chef-d'oeu·vre ಶೆವ್ ಡುವಿ ಏ ಹ್ಯು - master piece

  • insouciance ಐನ್ ಸುಸ್ ಯಾನ್ಸ್ - recklessness

  • merde ಮೆರ್ದ್ shit

  • "Tally me banana"

notes#television

Interesting Websites

Trying to collect websites that are intersting, free-standing, with a bit (or a lot) of personality. Preference given to "hand-made" websites. And to do so, all you may need is HTML.

The art of building "personal" websites is a thing of the 90s, it appears.. (See also the idea of IndieWeb).

Why have a personal website?


Meta

Related

Portals


See also:

notes#web

FUNctional programming

See also: <functional-programming.html>

Blog-posts and articles

People

  • Hudak
  • Pierce
  • Milner
  • Harper
  • Peyton-Jones
  • Don Stewart
  • The Racket people - [Brown, IU, NEU]
  • The OCaml people - [INRIA]
  • The Haskell people - [MSR]

See Also: My pinboard bookmarks tagged functional-programming

notes#programming

Go Programming Language

Go is the only programming language that has been designed from the ground down. -- vzverovich

Go advocates for making thread creation easy and light-weight and for using message passing over shared memory for inter-thread communication. Indeed, we saw more gor-outines created in Go programs than traditional threads andthere are significant usages of Go channel and other message passing mechanisms. However, our study show that if not used correctly, these two programming practices canpotentially cause concurrency bugs.

Shared memory vs. message passing: Our study found that message passing does not necessarily make multi-threaded programs less error-prone than shared memory.In fact, message passing is the main cause of blocking bugs.To make it worse, when combined with traditional synchro-nization primitives or with other new language featuresand libraries, message passing can cause blocking bugs thatare very hard to detect. Message passing causes less non-blocking bugs than shared memory synchronization and sur-prisingly, was even used to fix bugs that are caused by wrongshared memory synchronization. We believe that messagepassing offers a clean form of inter-thread communicationand can be useful in passing data and signals. But they areonly useful if used correctly, which requires programmersto not only understand message passing mechanisms wellbut also other synchronization mechanisms of Go.

Project structure

A very common question Go beginners have is "how do I organize my code?". Some of the things folks are wondering about are:

  • How does my repository structure reflect the way users import my code?
  • How do I distribute commands (command-line programs that users can install) in addition to code?
  • How do modules change the way I organize my code?
  • How do multiple packages coexist in a single module?

Moving to Go

History

Learning

The Go Programming Language by Donovan and Kernighan.

Training

Reading

Development practices

The Go team has published official guidelines for organizing / structuring a Go project: https://go.dev/doc/modules/layout This includes recommended project layouts for different kinds of projects: a simple package, a command-line tool, a mix of the two, etc. via

Deployment practices

Performance monitoring

User Groups

Presentations

Libraries

Read Code

List of Lists on Go

  • Awesome Go -- A curated list of awesome Go frameworks, libraries and software.

Editors

FFI

Garbage Collection

Why Discord is switching from Go to Rust - Discord Blog

In Go, on cache key eviction, memory is not immediately freed. Instead, the garbage collector runs every so often to find any memory that has no references and then frees it. In other words, instead of freeing immediately after the memory is out of use, memory hangs out for a bit until the garbage collector can determine if it’s truly out of use. During garbage collection, Go has to do a lot of work to determine what memory is free, which can slow the program down. These latency spikes definitely smelled like garbage collection performance impact, but we had written the Go code very efficiently and had very few allocations. We were not creating a lot of garbage. After digging through the Go source code, we learned that Go will force a garbage collection run every 2 minutes at minimum. In other words, if garbage collection has not run for 2 minutes, regardless of heap growth, go will still force a garbage collection.

garbage collection - How fast is the go 1.5 gc with terabytes of RAM? - Stack Overflow

3-4ms pauses under 1.6, with about an 8GB heap and 150M allocations/minute.

Concurrency

Programming notes

Debugging notes

Copying core dumps

Build notes

Cross compiling a binary for Linux on Mac.

git clone git@github.com:xyproto/algernon.git
cd algernon
env GOOS=linux GOARCH=amd64 go build

Tools

Package management

Web

Frameworks

  • Go Blueprint Hello -- "Choose your desired features, and we'll generate the command you can use to create your project."

  • blackfyre/wga: Jumping forward ~30 years -- This repositry contains the code for the Web Gallery of Art project. The project is a web application that allows users to browse through a collection of paintings, sculptures and other forms of Art. This project is inteded to shave off the 3 decades of tech debt on the original website and provide a modern, responsive and user friendly experience with the same content. -- study this project and the choices it has made -- pocketbase, htmx, bulma, golang, sass, and goreleaser

  • anthdm/superkit still in development.

Templating

templ -- "A HTML templating language for Go that has great developer tooling." github

package main

templ Hello(name string) {
<div>Hello, { name }</div>
}

templ Greeting(person Person) {
<div class="greeting">
@Hello(person.Name)
</div>
}

notes#golang#programming-language

Software tools

List of programs and shell scripts that I find useful.

Meta (lists made by other people)

Chrome extensions

Safari extensions

  • Ghostery -- block intrusive javascript.

Pandoc

pandoc is a fantastic program to convert text to various output formats.

Typcial usage: To convert a markdown formatted text file to html

$ pandoc somefile.txt -f markdown -t html --standalone -o somefile.html

See the detailed pandoc page.

Command line tools

abcde

Command line tool to rip CDs to .mp3.

Installation: $ sudo apt-get install abcde id3v2

Insert Disc #1 of a 3-cd audio book $ abcde -o mp3 -p -W 1.

bcat

bcat pipe to browser utility.

Typical usage: To see the git log.

$ git log -p --color | bcat

fd

sharkdp/fd: A simple, fast and user-friendly alternative to find.

gist

gist pastes code, text to [gist.github.com] from command line.

$ gist one.txt

partimage

partimage is a Linux disk imaging software. It has a curses based interface to guide you through the options.

Typical usage: make a backup of an entire HDD(say SSD/Flash of a prototype) to your desktop.

Make Image:

$ partimage -z1 save /dev/sdg1 $HOME/backup/prototype-hdd-20100707.partimg.gz

Restore:

$ partimage restore /dev/sdg1 $HOME/backup/prototype-hdd-20100707.partimg.gz

qpdf

qpdf -- is a command-line program that does structural, content-preserving transformations on PDF files.

http-prompt

pip install http-prompt

fzf

junegunn/fzf: A command-line fuzzy finder written in Go

peco

q

entr

entr(1) -- Run arbitrary commands when files change

ripgrep

ripgrep recursively searches directories for a regex pattern. See rga, like rg, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.

sd

sd is an intuitive find & replace CLI.

rargs

rargs xargs + awk with pattern matching support. ls *.bak | rargs -p '(.*)\.bak' mv {0} {1}

rak

lizmat/App-Rak: 21st century grep / find / ack / ag / rg on steroids

Code tools

Database tools

  • dbeaver -- crossplatform database manager for all popular sql dbs and some nosql dbs.

Web development tools

Data Cleaning

Interesting ~/bins on github

Some more linked on this page: 15 Greatest Open Source Terminal Applications Of 2012

Interesting

  • ronn - the opposite of roff.

Lorem ipsum

OCR

ASCII Banner

Use Figlet and Toilet to generate ascii text banners in linux terminal.

notes#macos#tools

OCaml programming language

OCaml for the impatient . The web's quickest and dirtiest OCaml getting started guide This is the most up to date setup using Opam, jbuilder, Merlin, VSCode etc.,(. August 2017). (ed note, 2023-10-10: Since then the OCaml system has made huge strides in developer productivity.)

xvw.lol - Why I chose OCaml as my primary language, an opinion piece by a programmer that uses OCaml professionally at tarides. Is a good intro the ecosystem in 2025; via

Language

Concurrency

Learning OCaml

Courseware

Tutorials

Best practices

  • Our current OCaml best practices. -- part 1 and part 2 by Issuu Engineering; Dec 2018.

Books

Textbooks

Articles

Blogs

Resources

Papers

Package managers

OCaml Languages

Reason: a syntax for OCaml, so native development or melange development to compile to JS

ReScript: a syntax similar to Reason, but the entire toolchain. Closer to JavaScript, can't compile to native.

Talks

Yaron Minsky:

Miscellaneous

OCaml as a replacement language

Writing languages using OCaml

Tools, ecosystem and libraries

Js_of_Ocaml

  • js-skeleton -- sample project showing how to build a Javascript web-app using js_of_ocaml, TyXML and React
  • H.261 Video Decoding in OCaml. -- This notebook will demonstrate a simple H.261 Video Decoder written in OCaml and compiled to javascript with js_of_ocaml.

OCaml project tools

Build tools:

Some opinions on the merits of using these tools:

Code bits

Explicit Typing of a polymorphic variant

type download_result =
  [ `aborted_by_user
  | `network_failure of string
  | `success of filepath ]

via

Information

QQ

  • What is good about OCaml's module system?
  • What good is First class Modules?
  • "Using an error monad in a language like ocaml is superior to exceptions in almost every way." via

Sample code / Read Source

Multicore OCaml

Object oriened OCaml

Hindley-Milner type system

Semantics

Web programming with OCaml

PPX

Comparison

min-caml

esumii/min-caml: a complete optimizing native-code compiler for a reasonably usable subset of OCaml, in 2000 lines of OCaml. Paper.

Running log

PSA: Tired of inscrutable type errors from OCaml? If you use jbuilder/dune, just add this to your jbuild build stanza: (flags (:standard -short-paths)) and your type errors and inferred types from Merlin will magically improve!

NixOS

Data Science and AI

OCaml Garbage Collection

My notes

emacs + utop + merlin + typerex = Excellent IDE.

2014-11-25: Run ocamlbrowser in a shell to see a tk based documentaiton browser.

OCamlEditor

Fortunately, you can install it using opam install ocamleditor... unfortunately you are dealing with various idiosyncrasies of GTK on mac... ugh.. To keep it short, lablgtk installation by opam might fail with pkg-config errors. The fix is:

https://github.com/Homebrew/homebrew/issues/14123#issuecomment-37896791

... before running opam install ocamleditor. Solution via

Note: looks butt-ugly on mac, as expected.

opam allows you create "sandboxes" and install packages in them. See the -A --alias-of option.

See Setting up an OCaml environment for Programming. Use ocamlfind, ocamlbuild and make.

Apr 2016. See ogen -- a tool for creating new OCaml projects with OPAM, Oasis, and Merlin.

Compiling an ocaml file:

  • That has no dependecies

    ocamlopt foo.ml -o foo

  • that has a dependency (say csv)

    ocamlfind ocamlopt -o test -linkpkg -package csv test.ml

ocamlfind

  • ocamlfind is a program that finds all the ocaml packages that are installed on your system (or opam instance, for that matter).
  • ocamlfind -h to see list of commands available.
  • ocamlfind printconf shows the path configs etc.,
  • ocamlfind list will list all the packages installed.

ocamldep

typical usage: ocamldep *.ml, which will dumps dependency lines.

** Different file types **

  • .cmo --
  • .cmi --
  • .mli --

--

OCaml has good study materials -- textbooks, lecture notes. There is also the advantage of being able to roll-over to F# for "enterprise" stuff.

notes#ocaml#programming-language

Interesting Programming Languages

An opinionated collection of programming languages. This is a list of what I consider interesting. Requests to add to this list are welcome, but there is no guarantee I'll include them. As you can see many mainstream programming languages are missing from this list.

Of these, I try to maintain interest in -- ATS, Chapel, Zig, Nim, Flix, Crystal, Vale, and Roc, outside the mainstream languages.

  • Alore is a language that explores optional typing in a Python-like programming language.
  • Alpaca is a statically typed, strict/eagerly evaluated, functional programming language for the Erlang virtual machine (BEAM). At present it relies on type inference but does provide a way to add type specifications to top-level function and value bindings. It was formerly known as ML-flavoured Erlang (MLFE).
  • Amber -- "The Programming Language compiled to bash. Write your scripts in a modern type-safe and runtime-safe programming language that handles many bugs and mistakes during compilation process."
  • appcypher/astro: A multi-paradigm programming language that compiles to WebAssembly and native code. with Python syntax.
  • Arturo programming language; looks like REBOL? and claims "Want to ship your scripts anywhere? For any operating system? Without weird dependencies and without asking the user to install an endless list of modules/gems/packages? That's exactly what Arturo was designed for.", and batteries included.
  • Asymptote is a descriptive vector graphics language that provides a natural coordinate-based framework for technical drawing. Labels and equations are typeset with LaTeX, for high-quality PostScript output.
  • ATS is a statically typed programming language that unifies implementation with formal specification. It is equipped with a highly expressive type system rooted in the framework Applied Type System, which gives the language its name. In particular, both dependent types and linear types are available in ATS.
  • Ballerina "Ballerina is a compiled, transactional, statically and strongly typed programming language with textual and graphical syntaxes. Ballerina incorporates fundamental concepts of distributed system integration into the language and offers a type safe, concurrent environment to implement microservices with distributed transactions, reliable messaging, stream processing, and workflows." See ballerina.
  • Boomerang is a language for writing lenses—well-behaved bidirectional transformations—that operate on ad-hoc, textual data formats. Every lens program, when read from left to right, describes a function that maps an input to an output; when read from right to left, the very same program describes a "backwards" function that maps a modified output, together with the original input, back to a modified input.
  • Biscuit is simple imperative programming language using LLVM backend implemented in C. See Tine editor
  • Blorp; Blorp is meant to feel direct at the surface while keeping the compiler's safety and runtime choices explicit.. Static Types, Hindley-Milner-Style inference, Value Semantics, Perceus Ownership, Native Output. Blorp compiles to C, so idiomatic Blorp code is intended to run within range of hand-written C.
  • C2 an evolution of C, using LLVM.
  • C3 - Full C ABI compatibility, Module system, Generic modules, Design by contract, Zero overhead errors, Semantic macro system, First-class SIMD vector types, Struct subtyping, Safe array access using slices, Easy to use inline assembly, Cross-platform standard library which includes dynamic containers and strings, LLVM backend
  • Cell offers, among other things, a very flexible, entirely structural type system; deterministic, repeatable execution; support for reactive programming; the ability to use relations to store data; transactions and propagation of undefined values for error handling; and ortogonal persistence. "Cell is designed to complement and integrate with your primary language, not to replace it. Once a component of an application has been implement in Cell, the compiler will generate from it an easy-to-use Java, C++ or C# class that can be integrated into an existing project. Support for other languages will be added in the future."
  • Chapel is a modern programming language that is parallel, productive, portable, scalable and open-source by Cray.
  • Ciao is a modern prolog implementation and a general-purpose programming language which supports logic, constraint, functional, higher-order, and object-oriented programming styles. Its main design objectives are high expressive power, extensibility, safety, reliability, and efficient execution.
  • Circle compiler enables you to metaprogram C++ in C++. It encourages a seamless mixing of compile-time and runtime capabilities that upends decades of language design.
  • Cito automatically translates the Ć programming language to C, Java, C#, JavaScript, ActionScript, Perl and D. Ć is a new language, aimed at crafting portable programming libraries, with syntax akin to C#.
  • Clean is a general purpose, state-of-the-art, pure and lazy functional programming language designed for making real-world applications. Some of its most notable language features are uniqueness typing, dynamic typing, and generic functions. quick look.
  • Cool is a small language designed for use in an undergraduate compiler course project. While small enough for a one term project, Cool still has many of the features of modern programming languages, including objects, automatic memory management, and strong static typing. Used for Stanford CS1 Compiler class.
  • Crystal -- is a ruby syntax inspired, statically type checked language that compiles to binary. Mint is a language for writing Single page applications. Mint is written in Crystal.
  • Cuneiform is a functional programming language for large-scale data analysis workflows. Cuneiform uses distributed Erlang to scalably run in cluster and cloud environments. The flexible foreign function interface lets you integrate tools and libraries from many different sources. This allows you to drive a heterogeneous software collection through a uniform interface (Bash, Erlang, Python, Java, R, MATLAB, JS). Static type checking.
  • Curry -- Haskell with Logic Extensions
  • Cyber -- is a scripting language for fast, efficient, and concurrent scripting, written in Zig -- Dynamic and static types. Concurrency with fibers. Memory safe. FFI and Embeddable.Fast VM and JIT. Cross platform.
  • Dafny: A Language and Program Verifier for Functional Correctness - Microsoft Research
  • Dao is a lightweight and optionally typed programming language; Optional typing with type inference and static type checking; Object-Oriented Programming (OOP) with class and mixin class; Abstract interface and concrete interface to supplement class-based for OOP; Code section methods as a better alternative to functional methods; Support closures, anonymous functions; Deferred block and exception handling by defer-recover; Native support for concurrent programming; Concurrent garbage collection;
  • Derw -- is a programming language aimed at making complex apps in a simple way. It's built on top of TypeScript and Node, so it's easy to have interop with TypeScript. See also Gren
  • dg — it's a Python! No, it's a Haskell! -- "Slow. Stupid. Absolutely adorable.". Python with Haskell syntax.
  • Duet delta is an educational dialect of Haskell aimed at interactivity.
  • Eff Programming Language is a functional programming language based on algebraic effect handlers. This means that Eff provides handlers of not only exceptions, but of any computational effect, allowing you to redirect output, wrap state modifications in transactions, schedule asynchronous threads, and much much more… Try it out in the browser
  • The Egison Programming Language
  • Ela combines strict and lazy evaluation, dynamic typing and features, which are normally adopted by statically typed languages, such as algebraic data types andHaskell style type classes. Compiles to .NET
  • Euphoria -- the language that brought me back from the C++ induced panic :D
  • rxi/fe -- A tiny, embeddable language implemented in ANSI C. Used to make grid based game framework cel7
  • DRAKON, is a visual language for specifications. Discussions
  • Eyg
  • Elixir is a functional meta-programming aware language built on top of the Erlang VM.
  • Fay is a proper subset of Haskell that compiles to JavaScript
  • Fennel -- Lisp in Lua. "Full Lua compatibilty, Zero Overhead, Compile-time macros, Embeddable".
  • Felix claims to have its own type system based on a combination of Ocaml and Haskell. Like Ocaml it provides strong support for functional programming, whilst also supporting imperative programming. The type system is strict.
  • Flapjax is a new programming language designed around the demands of modern, client-based Web applications. Its principal features include: Event-driven, reactive evaluation; An event-stream abstraction for communicating with web services; and Interfaces to external web services. Flapjax is just a JavaScript framework. Flapjax is built entirely atop JavaScript, it runs on traditional Web browsers without the need for plug-ins or other downloads. It integrates seamlessly with existing JavaScript code and other frameworks.
  • Flask staged Functional Programming for Sensor Networks
  • Flex group at YC Research has a few interesting lanauges like: Ohm, Seymour, Purple, Trainee, and transcript.
  • Flix -- "takes inspiration from F#, Go, OCaml, Haskell, Rust, and Scala. Flix visually resembles Scala, but its type system is closer to that of OCaml and Haskell. Its concurrency model is inspired by Go-style processes and channels. Flix compiles to JVM bytecode and runs on the Java Virtual Machine. Flix supports full tail call elimination which means that tail calls (even to other functions) never overflow the stack."
  • Futhark - A High Performance Functional Array Language. "a small programming language designed to be compiled to efficient parallel code. It is a statically typed, data-parallel, and purely functional array language in the ML family, and comes with a heavily optimising ahead-of-time compiler that presently generates GPU code via OpenCL, although the language itself is hardware-agnostic."
  • Gleam is a statically typed functional programming language for building scalable concurrent systems. It compiles to Erlang and has straightforward interop with other BEAM languages such as Erlang, Elixir and LFE. Interview with the creator of Gleam
  • Gren is a functional programming language with carefully managed side-effects and a strong static type system. is a "fork" of Elm with a node.js target.
  • Gush: A stack based language eventually for genetic programming
  • Hazel, a live functional programming environment featuring typed holes.
  • hobbes -- a programming language, JIT compiler, and database system for low-latency, high-volume trading applications (built at Morgan Stanley).
  • Idris is is a general purpose pure functional programming language with dependent types.
  • Imba is a programming language for the web that compiles to performant and readable JavaScript. It has language level support for defining, extending, subclassing, instantiating and rendering dom nodes.
  • Inko " is a gradually-typed, safe, object-oriented programming language for writing concurrent programs. By using lightweight isolated processes, data race conditions can not occur. The syntax is easy to learn and remember, and thanks to its error handling model you will never have to worry about unexpected runtime errors."

"Inko is an object-oriented programming language, drawing heavy inspiration from Smalltalk, Self, and Ruby. There are no statements used for conditionals and loops, instead Inko uses message passing for (almost) everything." Processes don't share their memory, and communicate by passing messages, which are deep copied. This removes the need for explicit synchronisation, and makes data race conditions impossible. Inko uses a high performance parallel garbage collector, based on Immix. Each process is garbage collected independently, removing the need for a global stop-the-world phase. Inko is an interpreted programming language, with a bytecode virtual machine written in Rust. Inko is gradually typed, with static typing being the default. This gives you the safety of a statically typed language, and the option to exchange this for the flexibility of a dynamically typed language. Related reading: * Joe Duffy - The Error Model

  • ISPC -- Intel® SPMD Program Compiler is a compiler for a variant of the C programming language, with extensions for "single program, multiple data" (SPMD) programming. Under the SPMD model, the programmer writes a program that generally appears to be a regular serial program, though the execution model is actually that a number of program instances execute in parallel on the hardware. The story of ispc: origins (part 1)
  • Janet is a functional and imperative programming language. Janet makes a good system scripting language, or a language to embed in other programs. Think Lua or Guile. Janet also can be used for rapid prototying, dynamic systems, and other domains where lisp shines.
  • Jolie is a service oriented proramming language that compiles to the JVM. I'm reminded of Ballerina. Jolie crystallises the programming concepts of service-oriented computing as linguistic constructs. The basic building blocks of software are not objects or functions, but rather services that can be relocated and replicated as needed. A composition of services is a service.
  • Julia is a high-level, high-performance dynamic programming language for technical computing.
  • Kit is a “Compiles-to-C” language. It is strong, and statically typed with many modern language features like type inference, algebraic data types, pattern matching, generics, implicits, while still having low level features like raw pointers, and manual memory management. Kit is written in Haskell. kit notes.
  • Koka -- is a function-oriented programming language that seperates pure values from side-effecting computations, where the effect of every function is automatically inferred. The language is strict (as in ML), but seperates pure values from side effecting computations (as in Haskell). Through the effect types, there is also a strong connection to its denotational semantics, where the effect type of each function has a direct translation to the type signature of the denotational function. more Recently, Koka fully supports user-defined effects through algebraic effect handlers.
  • Koto -- language for adding scripting to applications developed in Rust. Koto's runtime is fast enough for many applications, with performance comparable to similar embedded scripting languages for Rust like Rhai and Dyon
  • lambdaway :: _ -- S-expression based markup, styling & scripting
  • The Lemon Programming Language -- python with curly braces. embeddable.
  • Lily -- an interpreted, statically typed programming language focusing on expressiveness and safety.
  • The Little Language is a statically typed, C-like scripting language. "... might be useful for you if you are still using Tcl (or Tcl/Tk) but wish it had a more C-like syntax. ". L forum on bitkeeper
  • Lobster is a game programming language. Unlike other game making systems that focus on an engine/editor that happens to be able to call out to a scripting language, Lobster is a general purpose stand-alone programming language that comes with a built-in library suitable for making games and other graphical things. Looks like python, but is statically typed.
  • Logtalk is an object-oriented logic programming language that can use most Prolog implementations as a back-end compiler.
  • Luna "is a data processing and visualization environment built on a principle that people need an immediate connection to what they are building. It provides an ever-growing library of highly tailored, domain specific components and an extensible framework for building new ones. Luna targets domains where data processing is the primary focus, such as data science, IoT, bioinformatics, graphic design and architecture."
  • LuxLang/lux: The Lux Programming Language "It's meant to be a functional, statically-typed Lisp that will run on several platforms, such as the Java Virtual Machine and JavaScript interpreters." Written in Clojure. tutorial.
  • Mercury is a logic/functional programming language, which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.
  • Myrddin is a programming language that runs close to the metal, giving the programmer predictable and transparent behavior and mental model. It also does strong type checking, generics, type inference, closures, and traits.
  • Mythryl is a rewrite of the SML/NJ compiler
  • Nim -- see my more exhaustive set of notes here.
  • Nitlanguage.org
  • Objective-Smalltalk is an evolution of Smalltalk based on the Objective-C runtime.
  • odinlang - Odin is a general-purpose programming language with distinct typing built for high performance, modern systems and data-oriented programming. Odin is the C alternative for the Joy of Programming. ed: seems to have gained much popularity among game developers.
  • Onyx -- A data-oriented, expressive, and modern programming language, targeted at WASM.
  • Opis reliable distributed systems in Ocaml (paper, 2009).
  • P: Safe Asynchronous Event-Driven Programming by Microsoft Research
  • P P provides a high-level state machine based programming language to formally model and specify distributed systems. See Youtube talk
  • Picat is a simple, and yet powerful, logic-based multi-paradigm programming language aimed for general-purpose applications. Picat is a rule-based language, in which predicates, functions, and actors are defined with pattern-matching rules. Picat incorporates many declarative language features for better productivity of software development, including explicit non-determinism, explicit unification, functions, list comprehensions, constraints, and tabling. Picat also provides imperative language constructs, such as assignments and loops, for programming everyday things. The Picat implementation, which is based on a well-designed virtual machine and incorporates a memory manager that garbage-collects and expands the stacks and data areas when needed, is efficient and scalable. Picat can be used for not only symbolic computations, which is a traditional application domain of declarative languages, but also for scripting and modeling tasks.
  • Pike - a dynamic programming language with a syntax similar to Java and C. "the World Wide Web servers Roxen WebServer and Caudium are both written in Pike. Pike’s advanced data types and built-in support for sockets makes it ideal for use in Internet applications."
  • Piplin is a language that lets you write Clojure to simulate and program FPGAs.
  • Ponylang -- is an object-oriented, actor-model, capabilities-secure, high-performance programming language.
  • Play -- a statically typed stack language (aka Forth)
  • Propane Language a language for simple, correct-by-construction network configuration
  • Pure -- is a modern-style functional programming language based on term rewriting. It offers equational definitions with pattern matching, full symbolic rewriting capabilities, dynamic typing, eager and lazy evaluation, lexical closures, built-in list and matrix support and an easy-to-use C interface. The interpreter uses LLVM as a backend to JIT-compile Pure programs to fast native code.
  • Pyret -- python like language (syntactially) with FP ideas. inbuilt testing emphasis with where: keyword. structured data like OCaml etc., Runs on top of Racket.
  • The QED programming language -- "[for]... designing complex graphical user interfaces the simple way. Its parallel GUI/business logic (GUI/BL - or guible) coding paradigm offers unequaled binding power, which considerably reduces the lines of code required to develop a GUI application. QED runs in both native and web environments, without changing a single line of code."
  • RacketScript is an experimental lightweight Racket to JavaScript (ECMAScript 6) compiler. RacketScript aims to leverage both JavaScript and Racket's ecosystem, and make interoperability between them clean and smooth. RacketScript takes in Racket source files, uses Racket's macro expander to produce Fully Expanded Programs, and then compile these fully expanded programs to JavaScript.
  • Rascal -- is a metaprogramming language that integrates source code analysis, transformation, and generation primitives on the language level
  • Red ; FAQ
  • Reva -- a small, cross-platform Forth. Recommended by @deech in the context of "read the source code of the programming language to learn how things work".
  • Roc's goal is to be a fast, friendly, functional language. tutorial; via
  • Rosie Pattern Language -- a better Regex. See MWPLS 2019 slides (PDF). Has a REPL, JSON output, Can use with C, Python, Haskell, Go.
  • Roy is a programming language that tries to meld JavaScript semantics with some features common in static functional languages and targets JavaScript.
  • Rye is a high level, homoiconic dynamic programming language based on ideas from Rebol, flavored by factor, Linux shell and golang. For Interactive use, backend, servers, information exploration and processing. It's written in Go and could also be seen as Go's scripting companion as Go's libraries are very easy to integrate, and Rye can be embedded into Go programs as a scripting or a config language.
  • Quirrel is a purely declarative query language designed for performing analytics and statistics on large-scale, multi-structured data sets.
  • Quorum -- an OOPs lang for teaching that compiles to Java byte-code.
  • scrapscript  solves the software sharability problem. Modern software breaks at boundaries. APIs diverge, packages crumble, configs ossify, serialization corrupts, git tangles, dependencies break, documentation dies, vulnerabilities surface, etc. To make software safe and sharable, scrapscript combines existing wisdom in new ways: 
    • all expressions are content-addressible “scraps” 
    • all programs are data 
    • all programs are “platformed”
  • Self is a prototype-based dynamic object-oriented programming language, environment, and virtual machine centered around the principles of simplicity, uniformity, concreteness, and liveness.
  • SharpScript, a scripting language for .NET Core and .NET Apps that utilizes a familiar expressive Syntax to enable dynamic scripting of .NET Apps via controlled access to pluggable methods and arguments within a sandbox environment. looks good for exploratory and literate programming.
  • Shen is a statically (optional) typed Lisp variant targeting Common Lisp, JavaScript, the JVM and possibly more targets
  • SparForte "... allows you to write small scripts (think bash) and when they (inevitably) grow, you can transform them piecewise into Ada. The approach is similar to starting with Python and extending it with Rust where necessary. The advantage is the language is explicitly designed to support that use case." -- via
  • syn·di·cate -- a language for interactive programs. Syndicate is an Actor-based programming language offering. Pub/sub pattern-based message routing, for mapping events to actors. Dataspaces, stores for semi-structured data, for managing shared state. State change notifications for keeping actors informed of changes in dataspaces. Integrated techniques for registering and discovering services and for cleaning up after both graceful and unexpected actor failures. Recursive layering of groups of actors, each group with a private dataspace of its own, for organising larger programs
  • Tab is a kind of general-purpose query language for text files.
  • Terra is a new low-level system programming language that is designed to interoperate seamlessly with the Lua programming language. Like C, Terra is a simple, statically-typed, compiled language with manual memory management. But unlike C, it is designed from the beginning to interoperate with Lua. Terra functions are first-class Lua values created using the terra keyword. When needed they are JIT-compiled to machine code.
  • Tree Language Tree Notation is a simpler kind of code. Tree Notation is an error-free base notation like binary. Check out the "dumbdown" (markdown) designer demo.
  • TXL is a unique programming language specifically designed to support computer software analysis and source transformation tasks.
  • Uiua - A stack-based array programming language (think FORTH + APL)
  • Vale -- "a fast, safe, and easy programming language." AOT compiled to LLVM, statically-typed, and uses the new generational references technique for memory safety with speed and flexibility. Read comparisons to JS, C++ and Rust.
  • Verse -- language by Epic Games, designed by SPJ et al
  • virgil - A Fast and Lightweight Systems Programming Language by Ben L. Titzer of CMU; WebAssembly co-founder, former V8 engineer.
  • wing - programming language for the cloud ☁️ A unified programming model, combining infrastructure and runtime code into one language ⚡
  • Wuffs - Wrangling Untrusted File Formats Safely - is a memory-safe programming language (and a standard library written in that language) for wrangling untrusted file formats safely. Wrangling includes parsing, decoding and encoding. Example file formats include images, audio, video, fonts and compressed archives.
  • Wren is a small, fast, class-based concurrent scripting language # Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a familiar, modern syntax. Used in luxe game engine.
  • Yaksha - A manual memory managed, compiled to C99, programming language with Python-like syntax.
  • Yeti is ML style functional programming language, that runs on the JVM.
  • Zig Programming Language is a system programming language which prioritizes optimality, safety, and readability. Ambition to replace C discussion on lobste.rs. Iterative Replacement of C with Zig
  • ZL is a C compatible and C++ like programming language that focuses on extensiblilty and giving the programmer control over how high-level constructs (such as classes) are implemented. ZL archives the first goal by means of a customizable grammar and a powerful Scheme-like macro system. ZL archives the second goal by using the macro system to define high-level constructs from a C-like core language in a similar in spirit to Scheme.

Other Programming Langauge Related Lists

Blogs etc.,

Courseware

Related Reading

Tools

Comby is a tool for matching and rewriting code. You start by writing a simple template to match syntax. Look at this Go function:

func main() {
    fmt.Println("hello world")
}

We can match the arguments to fmt.Println with this match template:

fmt.Println(:[arguments])

Learning Programming

Fun

Implementing programming languages

Blog posts

Books

Benchmarks

Linkbacks to this page


See also: D lang, Rust, OCaml, C, C++, Python

notes#programming-language

Advaita

Heard about "nityaanityavivekachaara" via Arvind Iyer. Some more reading here - (Bhaja Govindam verse 30). (Feb 12, 2020).

Nityanitya vivekavicaram is the discrimination or viveka between nitya and anitya. Let my intellect be engaged in discrimination. Let me become an enquiring, thinking or contemplative person. Let me not take things for granted. There are so many notions and assumptions in our life, which we have never stopped to analyze. Therefore, let me consider what is nitya and what is anitya, or what is permanent and what is impermanent.

SADHANA CHATUSTAYA (BASIC QUALIFICATIONS) | Advaitam and Science

The sadhana catustaya are:

  1. Viveka or differentiation

  2. Vairagya or dispassion

  3. Samadi-satka-sampatti or the six diciplines (or virtues) of the mind

  4. Mumuksutvam or the desire for liberation.

notes