- Lisp-о подобный (но не каноничный лисп)
- Динамически типизированный
- По большему счету функциональный
- Хостовой (есть версии для JVM, JS, .NET, Dart)
- Язык без кучи языковых новоротов, что есть в других языках. При этом не менее мощный.
- Как JavaScript– (отнимем синтаксис, мутабельность по-умолчанию и прототипы*)
- Построен вокруг нескольких мощных коллекций
nest new project-name

Английская версия: https://evilmartians.com/chronicles/bootstrap-an-intervention
У CSS есть несколько базовых проблем, которые позволяют очень быстро отстрелить себе ногу при неправильном использовании:
-
Глобальный неймспейс – в серверном программировании все что написано в файле, в файле и остается. Все же что написано в css и js засирает глобальное пространство имен со всеми вытекающими. В JS эту проблему сейчас побороли всякими модульными системами, а вот с css сложнее. В идеальном мире это должен починить Shadow DOM и настоящие Web Components, но пока их нет единственный способ с этим бороться – следовать какой-то системе именований селекторов, которая по возможности уменьшает и исключает возможные конфликты.
-
Каскадность – если на один элемент может сработать несколько правил, то они все и сработают последовательно. Если есть элемент
h1.title
, на него сработают все правила для теговh1
и все правила для класса.title
. Так как весь html состоит из тегов, то правил которые п
The ESM standard is considered stable in NodeJS and well supported by a lot of modern JavaScript tools.
ESLint does a good job validating and fixing ESM code (as long as you don't use top-level await, coming in ESLint v8). Make sure to enable the latest ECMA features in the ESLint config.
- .eslint.json
{
- nginx
- nginx-x-rid-header module (https://github.com/newobj/nginx-x-rid-header)
We want to track image downloads from client side and in javascript we cannot get the header values:(.
type StringBool = "true"|"false";
interface AnyNumber { prev?: any, isZero: StringBool };
interface PositiveNumber { prev: any, isZero: "false" };
type IsZero<TNumber extends AnyNumber> = TNumber["isZero"];
type Next<TNumber extends AnyNumber> = { prev: TNumber, isZero: "false" };
type Prev<TNumber extends PositiveNumber> = TNumber["prev"];
Once in a while, you may need to cleanup resources (containers, volumes, images, networks) ...
// see: https://github.com/chadoe/docker-cleanup-volumes
$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm
(((S | |
((S ((S (K S)) ((S (K K)) I))) | |
((S | |
((S (K S)) | |
((S ((S (K S)) ((S (K K)) (K S)))) | |
((S | |
((S (K S)) | |
((S ((S (K S)) ((S (K K)) (K S)))) ((S ((S (K S)) ((S (K K)) (K K)))) (K I))))) | |
((S ((S (K S)) ((S (K K)) (K K)))) (K I)))))) | |
((S (K K)) (K I))))) |