Ivan Grishaev's blog
Writing on programming, education, books and negotiations.
Зачем OpenAPI?
Видео с митапа о Postgres
Copilot и документация
Шкала ООП
Не люблю регулярки
Сишные строки
Приглашаю на митап
Можешь поправить
Пробел в урлах
О переменных среды
Лучший язык
AI и новички
Ring JDK Adapter
Python Software Foundation
Почтовые рассылки
PG2 release 0.1.18
Пагинация
О событиях с Линуксом
Механическая работа
Задача с датами
Микросервисы
Last in Clojure
Подробней о last
Deed: a fast encoding and decoding library for Clojure
Мышление лямбдами
Файлы Yaml
Проблема XY (2)
Не было времени
Баг в AWS
Переход в айти
Zen of Python
Как наполнить базу сгенерированными джейсонами
Помешательство
И ещё об AWS SDK
SDK, работа над ошибками
SOLID
Паттерны
Clojure AntiPatterns: the with-retry macro
PG2 release 0.1.15
Перекладывание
Excel и CSV
Загрузка в Амазоне
Список через запятую
Датомик
Кража дизайна
Синтаксис Лиспа
Контекст
Перезагрузка айфона
Бумеры и зумеры
Репозиторий функций
Концепция
SOLID (2)
SOLID (1)
Замеры
PG2 release 0.1.12
Soft delete
AWS, история четвертая. Когда null не совсем null
PG2 release 0.1.11: HugSQL support
PG2 release 0.1.9: arrays
DSL
Бинарный дамп
PG2 release 0.1.6: rich JSON capabilities
PG2 release 0.1.5: Migrations
Сервисы
AWS, история третья. Разрывы
AWS, история вторая. Афина прекрасная
AWS, история первая. Внезапный мегабайт
Амазон
PG2 release 0.1.4: HoneySQL API and shortcuts
PG2 release 0.1.3: Next.JDBC-compatible API
PG2 release 0.1.2: more performance, benchmarks, part 3
Gzip
Вложенность
PG2 benchmarks, part 2
PG2 early announce and benchmarks, part 1
Бесчеловечность Java
Java
Data-Driven Development is a Lie
PG docs, part 8. HoneySQL
PG docs, part 7. COPY IN/FROM
Языки диаграмм
PG docs, part 6. SSL
SQL
With-http: a Clojure library for testing HTTP
Warn
PG docs, part 5. Notifications
PG docs, part 4. Arrays
PG docs, part 3
PG docs, part 2
PG docs, part 1
Node.js
Как в X
Avoid code you cannot debug
Строки по 80
Гигиена в Git
SQL и DISTINCT ON
Логи SQL (2)
Логи SQL
Задачник по Паскалю
PG: Postgres-related libraries for Clojure
Свое
Уровень
Clojure + GraalVM framework for AWS Lambda
Эта удивительная Clojure: что на ней разрабатывают, чем она отличается от других языков и подходит ли для входа в программирование
The Mask library for Clojure
The DynamoDB library for Clojure
Баш-скрипты
Возня с файлами (2)
Обновления
Коротко об lndir
Деджаваскриптизиция (4)
Деджаваскриптизиция (3)
REPL, Cider, Emacs (часть 4/4)
Деджаваскриптизиция (2)
Деджаваскриптизиция
REPL, Cider, Emacs (часть 3/4)
Zippo: additions to the standard clojure.zip package.
Деформация
REPL, Cider, Emacs (часть 2/4)
REPL, Cider, Emacs (часть 1/4)
Teleward: a CAPTCHA bot for Telegram in Clojure + GraalVM
Не смотрю и не слушаю
Страсть к делу
Возня с файлами
Bogus: a simple GUI debugger for Clojure
The Pact library for Clojure
Advent of Code
FAANG не предлагать
Не смешивать языки
Стратегия
Crontab и отправка почты
Introducing Farseer: the JSON RPC server, the client and utilities
Сага о DRY и зависимостях
Clojure Zippers
Configuration in Clojure
Exceptions in Clojure
Systems in Clojure
Абстрактный слой
Цвета ячеек в таблицах
Make makefiles
Большой-большой проект
Разбор статьи из журнала «Код»
Что думаю о Swagger
Dictionary-like Specs in Clojure
Никогда
Тесты в Clojure (второй фрагмент)
Тесты в Clojure (фрагмент главы)
Системы в Clojure
Плохие проекты
Конфигурация
Изменяемость в Clojure
Исключения в Clojure
UI-тесты в браузере
Clojure.spec
Отвлеченное
Введение в веб-разработку на Clojure. Часть I
Питон и ненависть
Хватит выгорать
Код картинкой
I will never let monads be in a Clojure project
User-Agent parser for Clojure
Clojure extended: Java interop book
Remus: a new RSS/Atom feed parser for Clojure
Проверка русской орфографии в Emacs
Зачем нужна Кложа
Ответы на вопросы читателей Хекслета
Environ variables are not for configuring software
Емакс и парное программирование
Почему я против объектов. Часть вторая, техническая
Почему я против объектов. Часть первая, философская
On Clojure arguments
Шестнадцатая встреча
Пятнадцатая встреча
Четырнадцатая встреча
Тринадцатая встреча
Двенадцатая встреча
Без ORM. Вдогонку
Одиннадцатая встреча
Книга ClojureScript Unraveled
Десятая встреча
Девятая встреча
Восьмая встреча
Порефакторили в седьмой раз
Доклады с шестой встречи глубокого рефакторинга
Размышления о Питоне
Комментарии к статье о Лиспе
Полезные практики
Доклады с пятой встречи любителей рефакторить
Картофельный мап
Map как замена циклу
Записи докладов с четвертой встречи любителей рефакторить
Что значит код как данные
О техзадании
Что такое RAML и как он помогает проекту
Третья встреча любителей глобоко порефакторить
Хейтер, как и было сказано
Назначьте на капс контрол
Совы и лентяи
Я не понимаю ООП
Шок, травмы, читать до конца!
Недостатки питона
10 уроков на Хекслете
Девять уроков на Хеслете
Курс по Питону продолжается
Второй урок на Хекслете
Первый урок на Хекслете
Починил даты
Лекция для студентов
Питон-комьюнити в Датаарте
Мой кот лучше всех разбирается в программировании --
Уж сколько раз твердили миру
Отступы
Множественное наследование - злейшее зло
py2exe
Тестовые задания программистам
Настройка ПХП
Фибонначи на Питоне
Десятый осел
Гуманный Питон
О Ноде.js
Накручивание голосований на Друпал.ру
Работа с Яндекс.Диском из 1С
Красота в Питоне: чистка строк
Джанго: тестовый сервер или боевой?
Драйверы торгового оборудования
1С и JSON: сериализация ссылок
Прием смс
1С и JSON в продакшене
1С и JSON: работа над ошибками
JSON-сериализация в 1С
Степень схожести строк (коэффициент Танимото)
Работа с DBF в Питоне
Мысли о Друпале
Победителя определяет скорость
Работаем с Твиттером
Создание файлов Excel
Запись непойманных исключений в файл
Работа с файлами mailbox
Рассылка смс в Питоне