🧩 Паттерн Context
Примеры:
- 1-closure.js — Контекст с замыканием: Частично применяемая функция с привязанным контекстом; простой RBAC и аутентификация пользователя
- 2-oop.js — Контекст в ООП: Контекст передается в конструктор; RBAC, User и AccountService как классы
- 3-factory.js — Фабрика контекста: Фабрика создает сервисы с общим контекстом; внедрение зависимостей
- 4-pipeline.js — Контекст в конвейере промежуточного ПО: Асинхронный конвейер с распространением контекста; трассировка и идентификаторы запросов
- 5-async.js — Асинхронный контекст (AsyncLocalStorage): Контекст сохраняется между асинхронными границами без явной передачи
- 6-immutable.js — Неизменяемый контекст: Замороженный контекст и производные контексты с помощью вспомогательных функций; без мутаций
👉 https://github.com/HowProgrammingWorks/Context
Контекст используется для обеспечения обмена данными между различными компонентами (абстракциями, модулями, слоями), не имеющими общего окружения, без лишнего связывания.
Примеры:
- 1-closure.js — Контекст с замыканием: Частично применяемая функция с привязанным контекстом; простой RBAC и аутентификация пользователя
- 2-oop.js — Контекст в ООП: Контекст передается в конструктор; RBAC, User и AccountService как классы
- 3-factory.js — Фабрика контекста: Фабрика создает сервисы с общим контекстом; внедрение зависимостей
- 4-pipeline.js — Контекст в конвейере промежуточного ПО: Асинхронный конвейер с распространением контекста; трассировка и идентификаторы запросов
- 5-async.js — Асинхронный контекст (AsyncLocalStorage): Контекст сохраняется между асинхронными границами без явной передачи
- 6-immutable.js — Неизменяемый контекст: Замороженный контекст и производные контексты с помощью вспомогательных функций; без мутаций
👉 https://github.com/HowProgrammingWorks/Context
👍12❤2🔥2💯2
We will have this in JavaScript in future, Insha'Allah
https://github.com/tc39/proposal-do-expressions
https://github.com/tc39/proposal-do-expressions
GitHub
GitHub - tc39/proposal-do-expressions: Proposal for `do` expressions
Proposal for `do` expressions. Contribute to tc39/proposal-do-expressions development by creating an account on GitHub.
🔥11🤷♂9❤6⚡2👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍1🔥1
AI сломал новичков.
Не понимая, что такое stack trace, не освоив даже циклы, новички массово рвутся изучать архитектуру.
Не понимая, что такое stack trace, не освоив даже циклы, новички массово рвутся изучать архитектуру.
🤣41😁14😢10👎7🤷♂5🤩2
джаваскриптоднопоточный
Что хотят сказать люди, когда мы слышим это заклинание?
Удивительно, но я 15 лет слышу эту чушь из каждой второй статьи и доклада. Но для чего на ней настаивать? Может быть, хочется думать, что в js не бывает корапшена данных, неконсистентного состояния, когда ссылки на данные есть у нескольких частей программы одновременно, а в многопоточной среде это приводит к состоянию гонки. Но все эти проблемы могут быть и в однопоточном приложении, которое использует кооперативную многозадачность, передавая управление разным частям кода хоть через колбеки и ивентлуп или даже без него, на промисах и async/await, которые вообще часть языка, но позволяют в одном месте приостановить выполнение, а в другом поработать и в это время. Если объект доступен из таких разных мест, которые работают асинхронно в одном потоке, как только промис, await или callback возвращает управление в нашу часть кода, и она ожидает, что объект все еще в том же состоянии, что и был до асинхронной операции, то это опасная иллюзия, нужно все перепроверять в условно синхронном фрагменте кода. Но это тоже не всегда сработает, у нас есть Atomics и SharedArrayBuffer, которые могут и в синхронном фрагменте менять состояние и гарантий консистентности в JS нет.
Что же говорит спецификация? Безопасность не гарантируется даже в синхронном фрагменте кода и не только через Atomics и SharedArrayBuffer. Деми Мурыч хорошо это комментирует "спецификация дала возможность любому окружению, создавать условия, когда выполнение JS кода не прибито гвоздями к одному агенту". Это значит, что в будущем могут появиться такие среды исполнения, где будет общий хип для нескольких потоков и нескольких агентов. Но прямо сейчас все известные рантаймы js гарантируют безопасность данных на коротких фрагментах условно синхронного кода, если не использовать SharedArrayBuffer. Это уже что-то, но это далеко не безопасно в том смысле, на который надеются люди, кричащие "джаваскриптоднопоточный" из любого утюга. И это не имеет никакого отношения к потокам или процессам, потому что для исполнения кода ваш js рантайм может порождать сколько угодно внутренних потоков для компиляции, оптимизации, сбора мусора, выполнения I/O операций, и еще пачку потоков для пользовательского кода: worker threads, shared workers, service workers.
Поразительно, как широко распространилось это клише про однополосный js, статьи, доклады, комменты, просто разговоры, люди это повторяют как мантру. Мне вот футболку подарили 5 лет назад, с надписью джаваскриптоднопоточный и nodejsоднопоточный, хоть я это уже лет 15 критикую на конфах всех, и нет конца этому...
👍14❤7🤯4😁2💯1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
use AI but don't forget good old automation
😁16💯2🫡2❤1
Красота, эстетика и интуиция решают задачи там, где формального компутер-саенса пока недостаточно.
Я не противопоставляю эстетику науке и уж точно не свожу все к мистике. За настоящей эстетикой почти всегда стоит какой-то принцип, обобщение, закономерность, просто оно еще не формализовано.
Инженерия постоянно сталкивается с вещами, которые еще не открыты, не осознаны и даже не сформулированы как проблемы. И в этот момент начинает работать интуиция - она сворачивает огромный массив опыта, знаний и наблюдений в одно решение. Иногда это выглядит как озарение. Иногда - как красивое решение.
А потом уже приходит наука и аккуратно рационализирует то, что сначала было найдено чувством формы.
Я не противопоставляю эстетику науке и уж точно не свожу все к мистике. За настоящей эстетикой почти всегда стоит какой-то принцип, обобщение, закономерность, просто оно еще не формализовано.
Инженерия постоянно сталкивается с вещами, которые еще не открыты, не осознаны и даже не сформулированы как проблемы. И в этот момент начинает работать интуиция - она сворачивает огромный массив опыта, знаний и наблюдений в одно решение. Иногда это выглядит как озарение. Иногда - как красивое решение.
А потом уже приходит наука и аккуратно рационализирует то, что сначала было найдено чувством формы.
👍20❤6💯6⚡4🔥2👎1
По состоянию на 7 марта 2026 лучшее применение:
Sonnet 4.6 - модель по умолчанию для написания кода
Opus 4.6 - для написания ТЗ, стратегии и ревью кода
Opus 4.6 лучше отдавать архитектуру, спецификации, декомпозицию задач, критерии приемки и финальный QA для рискованных задач. Sonnet 4.6 лучше отдавать реализацию, итерации, рефакторинг, тесты и выполнение хорошо определенных задач в масштабе.
Лучшая схема на сегодня: Opus 4.6 проектирует, Sonnet 4.6 реализует, потом Opus 4.6 ревьюит
Sonnet 4.6 - модель по умолчанию для написания кода
Opus 4.6 - для написания ТЗ, стратегии и ревью кода
Opus 4.6 лучше отдавать архитектуру, спецификации, декомпозицию задач, критерии приемки и финальный QA для рискованных задач. Sonnet 4.6 лучше отдавать реализацию, итерации, рефакторинг, тесты и выполнение хорошо определенных задач в масштабе.
Лучшая схема на сегодня: Opus 4.6 проектирует, Sonnet 4.6 реализует, потом Opus 4.6 ревьюит
👍43❤7🔥3💯1
- наблюдение за фалом через
fs.watch- наблюдение за папкой через
fs.readdir + fs.watch- кеширование изменений для сервера статики
👉 добавлены примеры:
- с ключами
--watch --watch-path --watch-kill-signal- объяснения того, как наблюдается дерево зависимостей
- как влияет на наблюдение
delete require.cache[name]Код - https://github.com/HowProgrammingWorks/FilesystemWatch/tree/master/JavaScript
Объяснения будут в керсе - https://www.patreon.com/collection/1913313?view=expanded
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Моя политика: так называемая Jira и все творения террористической организации Атласиан - запрещены везде, где я присутствую.
- Я вынедрил Jira в десятках организаций
- Может, внедрил?
- Нет, именно вынедрил
Confluence, битбакет - это все инструменты геноцида: если сложить время работы людей, которое было списано вникуда из-за этого софта, и разделить на среднее рабочее время разработчика за одну жизнь, то это будут сотни тысяч полноценных человеческих жизней (ну насколько жизни на галерах полноценные, конечно).
Конфлюенс, например, полностью заменяется .md-файликами. Все это Atlassian-искусство построено вокруг одной идеи: они капитализируют бюрократию. Берут простое действие: написать текст, поставить задачу, обсудить изменение, слить ветку - и обмазывают его таким слоем интерфейсного цемента, что через год команда уже не создает продукт, а обслуживает инструмент.
- Я вынедрил Jira в десятках организаций
- Может, внедрил?
- Нет, именно вынедрил
Confluence, битбакет - это все инструменты геноцида: если сложить время работы людей, которое было списано вникуда из-за этого софта, и разделить на среднее рабочее время разработчика за одну жизнь, то это будут сотни тысяч полноценных человеческих жизней (ну насколько жизни на галерах полноценные, конечно).
Конфлюенс, например, полностью заменяется .md-файликами. Все это Atlassian-искусство построено вокруг одной идеи: они капитализируют бюрократию. Берут простое действие: написать текст, поставить задачу, обсудить изменение, слить ветку - и обмазывают его таким слоем интерфейсного цемента, что через год команда уже не создает продукт, а обслуживает инструмент.
💯26🤣23❤9😁5👍1
Ревью кода и постановка ТЗ занимает много времени в программировании с AI и люди, естественно, пытаются переложить эту задачу тоже на AI. Пусть агенты друг-другу ТЗ пишут, друг-друга дрессируют и ревью делают. Так можно дойти и до кнопки "Сделай все хорошо", которая запускает бесконечный цикл. У вас не выйдет не тратить внимания на проект.
AI про ваши потребности не занет и мысли не читает. Идеи, приоритеты, контекст, критерии качества и продуктовые компромиссы он сам не определит. AI хорошо пишет только то, что уже много раз кем-то писалось. Если убрать из процесса человеческое внимание, вы не ускорите проект - вы просто зациклите галюцинирование.
На проект все равно придется тратить внимание. Вопрос не в том, как убрать человека из контура, а в том, куда именно направить внимание и в какой форме его вписать в жизненный цикл разработки, чтобы получить максимальную отдачу. Например, в виде DSL-языков, в форме md-файлов или json-файлов, блок-схем, в виде ревью или архитектурных документов.
- Не заменять ревью, а удешевлять его через стандарты, скилы, субагентов, экономию контекста
- Не строить зацикленные цепочки агентов, а ограничивать зоны их ответственности
- Не пытаться автоматизировать мышление целиком, а освобождать внимание человека от рутины
- Не держать требования в текстовой форме, а выносить логику в строгие синтаксисы и контракты
- Не надеяться на память чата, а собирать контекст в версионируемые артефакты, схемы и спецификации
AI про ваши потребности не занет и мысли не читает. Идеи, приоритеты, контекст, критерии качества и продуктовые компромиссы он сам не определит. AI хорошо пишет только то, что уже много раз кем-то писалось. Если убрать из процесса человеческое внимание, вы не ускорите проект - вы просто зациклите галюцинирование.
На проект все равно придется тратить внимание. Вопрос не в том, как убрать человека из контура, а в том, куда именно направить внимание и в какой форме его вписать в жизненный цикл разработки, чтобы получить максимальную отдачу. Например, в виде DSL-языков, в форме md-файлов или json-файлов, блок-схем, в виде ревью или архитектурных документов.
- Не заменять ревью, а удешевлять его через стандарты, скилы, субагентов, экономию контекста
- Не строить зацикленные цепочки агентов, а ограничивать зоны их ответственности
- Не пытаться автоматизировать мышление целиком, а освобождать внимание человека от рутины
- Не держать требования в текстовой форме, а выносить логику в строгие синтаксисы и контракты
- Не надеяться на память чата, а собирать контекст в версионируемые артефакты, схемы и спецификации
🔥23👍11❤6💯1🤝1
Агенты постепенно мимикрируют под программистов. Текущие костыли - временные. Скоро процесс внешне перестанет отличаться от работы с людьми: у каждого инструмента появятся агентные аналоги и взаимозаменяемость. А человек пока скачет вокруг с бубном, пытаясь найти свое органичное место в этой системе.
😁12🤷♂10😢4👍3❤2👎1
AI loop (например Ralph) - это порочный круг, на каждой операции ниоткуда не добавляются новых знаний. Нужно стараться, чтоб AI выдавал результат за один раз. А на каждый следующий цикл можно заходить, если есть новые вводные, иначе все это деградирует и сжигает деньги и ваше время. Вот что я хотел на самом деле написать в том посте, который неправильно поняли. Просто хочу высказаться более точно. Если нужен оригинальный текст, он сохранен тут: https://github.com/tshemsedinov/feed?tab=readme-ov-file#ai-infinite-loop-code-review--tasks--coding-2026-03-12
Проблема не в самом цикле, а в том, что вы не хотите тратить внимание и добавлять новой информации на каждом новом шаге. Модель начинает усиливать собственные ошибки и шум.
Проблема - это пустой цикл.
Если на каждой итерации не появляются новые вводные, принятие решений, ограничения и требования, новый контекст, то система просто пережевывает собственный вывод.
Поэтому:
- первый проход должен стремиться дать максимально полный результат
- каждый следующий проход должен добавлять обратную связь
- если новых данных нет - итерация бессмысленна, ошибки закрепляются
Проблема не в самом цикле, а в том, что вы не хотите тратить внимание и добавлять новой информации на каждом новом шаге. Модель начинает усиливать собственные ошибки и шум.
Проблема - это пустой цикл.
Если на каждой итерации не появляются новые вводные, принятие решений, ограничения и требования, новый контекст, то система просто пережевывает собственный вывод.
Поэтому:
- первый проход должен стремиться дать максимально полный результат
- каждый следующий проход должен добавлять обратную связь
- если новых данных нет - итерация бессмысленна, ошибки закрепляются
👍16❤2🔥1