Search
Write a publication
Pull to refresh
46
0
Константин Львов @klvov

программист, программист СУБД, веб-разработчик

Send message

Зачем ЯОП? Зачем Racket?

Reading time15 min
Views16K
Это продолжение статьи «Зачем Racket? Зачем Lisp?», которую я написал примерно через год после того, как открыл для себя Racket. Будучи новичком, я не мог понять дифирамбов, которые со всех сторон сыпались в адрес Lisp. Я не знал, что и думать. Как понимать, что Lisp в конце концов вызовет «глубокое просветление». Окей, как скажешь, бро.

У меня был простой вопрос: какая польза? В прошлой статье я попытался ответить на него и обобщил причины, почему кто-то захочет изучить Lisp или, в частности, Racket.

Я составил список из девяти особенностей языка, наиболее ценных для меня как новичка в Racket. Например, особенность № 5 — «создание новых языков программирования». Этот метод также называется языково-ориентированным программированием, или ЯОП.
Читать дальше →

Четвертый уровень мульти-вселенной Макса Тегмарка

Reading time4 min
Views45K
Почти 10 лет назад я прочитал статью Макса Тегмарка, гениального физика и философа, и нашел в ней ответы на многие вопросы, которые мучали меня всю жизнь. Статья потрясающая, месяца два я ходил под впечатлением от нее. К сожалению, это лонгрид, к тому же на английском. Поэтому я решил даже не перевести ее – перевод все равно оказался бы слишком длинным для Хабр, но хотя бы изложить основную идею в том порядке, как мне это кажется логичным, и убрав излишние детали (да простит меня Макс!)

Читать дальше →

Дзен Эрланга [и Эликсира — прим. переводчика]

Reading time25 min
Views7.1K

Введение от переводчика


В данной статье речь идёт об Erlang, но всё сказанное в равной степени применимо и к Elixir — функциональному языку, работающему поверх той же виртуальной машины BEAM. Он появился в 2012 году и сейчас активно развивается. Elixir получил более привычный большинству синтаксис плюс обширные возможности метапрограммирования, сохранив преимущества Erlang.


Ещё от переводчика

Статья от 2016 года, но речь в ней идёт о базовых концепциях, которые не устаревают.


Ссылки на понятия и комментарии от меня (переводчика) расположены в квадратных скобках [] и снабжены указателем "прим. переводчика".


Если вы найдёте какие-то части перевода недостаточно корректными, особенно в плане терминов, или столкнётесь с любыми другими ошибками — дайте мне, пожалуйста, знать, с удовольствием исправлю.


Отдельное спасибо Яну Гравшину за помощь в вычитке и редактуре текста.


Это свободная расшифровка (или долгий парафраз?) моей презентации на организованной Genetec конференции ConnectDev'16.


001


Я полагаю, что большинство присутствующих здесь людей никогда не программировало на Эрланге. Возможно, вы слышали о нём, или вам знакомо название. Поэтому моё выступление затронет только высокоуровневые концепции Эрланга, причём таким образом, чтобы оказаться полезным в ваших рабочих или побочных проектах даже если вы никогда не сталкиваетесь с этим языком.

Читать дальше →

Игры меняют мир: как Hellblade привлёк внимание к проблемам людей с психическими заболеваниями

Reading time7 min
Views30K

Мы привыкли относиться к играм несерьёзно. Если кино, литература и телевидение ассоциируются с чем-то солидным, то интерактивные развлечения пренебрежительно называют «видеоиграми». Большинство по-прежнему видит в этом виде искусства только Operation. Впрочем, это не мешает игровой индустрии зарабатывать миллиарды долларов: так GTA V за пять лет заработал больше денег, чем оригинальная Star Wars за сорок лет. Игры распространяются всё шире, а за этим экстенсивным ростом происходит нечто более важное. Почти через 50 лет после первой компьютерной игры разработчики начали использовать уникальное качество игр — интерактивность — чтобы мы лучше чувствовали других людей. И лучший пример этому — Hellblade: Senua's Sacrifice.

Всегда ли Node.js будет медленнее, чем Golang?

Reading time6 min
Views35K
Возникает такое ощущение, что буквально каждую неделю появляется новый «веб-фреймворк» для Node.js, который называют чем-то таким, что работает быстрее, чем всё, что было до него. Всем известно, что Express — это медленно, но способен ли очередной фреймворк по-настоящему улучшить производительность подсистемы ввода-вывода Node.js? Единственное, что он может — это устранить чрезмерную нагрузку на систему, создаваемую Express. Об улучшении чего-то фундаментального речи не идёт. Собственно говоря, для того, чтобы кардинальным образом улучшить ситуацию, нужно работать на более глубоком уровне, а не добавлять новые абстракции поверх Node.js.

image

Что нужно для того, чтобы на платформе Node.js можно было бы создавать серверные приложения, работающие гораздо быстрее чем всё то, что есть сегодня?
Читать дальше →

Чек-лист: что нужно было делать до того, как запускать микросервисы в prod

Reading time9 min
Views52K

Эта статья содержит краткую выжимку из моего собственного опыта и опыта моих коллег, с которыми мне днями и ночами доводилось разгребать инциденты. И многих инцидентов не возникло бы никогда, если бы всеми любимые микросервисы были написаны хотя бы немного аккуратнее.


К сожалению, некоторые невысокие программисты всерьёз полагают, что Dockerfile с какой-нибудь вообще любой командой внутри — это уже сам по себе микросервис и его можно деплоить хоть сейчас. Докеры крутятся, лавешка мутится. Такой подход оборачивается проблемами начиная с падения производительности, невозможностью отладки и отказами обслуживания и заканчивая кошмарным сном под названием Data Inconsistency.


Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.


English version is also available.

Читать дальше →

256 строчек голого C++: пишем трассировщик лучей с нуля за несколько часов

Reading time8 min
Views150K
Публикую очередную главу из моего курса лекций по компьютерной графике (вот тут можно читать оригинал на русском, хотя английская версия новее). На сей раз тема разговора — отрисовка сцен при помощи трассировки лучей. Как обычно, я стараюсь избегать сторонних библиотек, так как это заставляет студентов заглянуть под капот.

Подобных проектов в интернете уже море, но практически все они показывают законченные программы, в которых разобраться крайне непросто. Вот, например, очень известная программа рендеринга, влезающая на визитку. Очень впечатляющий результат, однако разобраться в этом коде очень непросто. Моей целью является не показать как я могу, а детально рассказать, как подобное воспроизвести. Более того, мне кажется, что конкретно эта лекция полезна даже не столь как учебный материал по комьпютерной графике, но скорее как пособие по программированию. Я последовательно покажу, как прийти к конечному результату, начиная с самого нуля: как разложить сложную задачу на элементарно решаемые этапы.

Внимание: просто рассматривать мой код, равно как и просто читать эту статью с чашкой чая в руке, смысла не имеет. Эта статья рассчитана на то, что вы возьмётесь за клавиатуру и напишете ваш собственный движок. Он наверняка будет лучше моего. Ну или просто смените язык программирования!

Итак, сегодня я покажу, как отрисовывать подобные картинки:


Читать дальше →

Всегда ли нужны Docker, микросервисы и реактивное программирование?

Reading time15 min
Views51K


Автор: Денис Цыплаков, Solution Architect, DataArt

В DataArt я работаю по двум направлениям. В первом помогаю людям чинить системы, сломанные тем или иным образом и по самым разным причинам. Во втором помогаю проектировать новые системы так, чтобы они в будущем сломаны не были или, если говорить реалистичнее, чтобы сломать их было сложнее.

Если вы не делаете что-то принципиально новое, например, первый в мире интернет-поисковик или искусственный интеллект для управления запуском ядерных ракет, создать дизайн хорошей системы довольно просто. Достаточно учесть все требования, посмотреть на дизайн похожих систем и сделать примерно так же, не совершив при этом грубых ошибок. Звучит как чрезмерное упрощение вопроса, но давайте вспомним, что на дворе 2019 год, и «типовые рецепты» дизайна систем есть практически для всего. Бизнес может подкидывать сложные технические задачи — скажем, обработать миллион разнородных PDF-файлов и вынуть из них таблицы с данными о расходах — но вот архитектура систем редко отличается большой оригинальностью. Главное тут — не ошибиться с определением того, какую именно систему мы строим, и не промахнуться с выбором технологий.

В последнем пункте регулярно возникают типичные ошибки, о некоторых из них я расскажу в статье.
Читать дальше →

Аппликативные парсеры на Haskell

Reading time13 min
Views17K


Мотивация


Когда я только начинала осваивать Haskell, меня очень раздражало повсеместное использование сложных абстракций вместо каких-то конкретных решений. Мне казалось, что гораздо лучше всегда следовать принципу KISS и писать велосипеды с использованием элементарных конструкций языка, чем разбираться во всех этих классах типов, чтобы где-то в итоге написать одну якобы удобную конструкцию.


Мне не хватало хорошего примера, где бы окупались усилия, потраченные на освоение "матчасти". Для меня одним из самых удачных таких примеров оказались парсеры. Теперь я довольно часто рассказываю про них, когда у меня спрашивают, для каких распространённых задач можно красиво использовать Haskell.


Я хочу предложить начинающим тоже пройти этот путь и создать с нуля небольшую базу функций для удобной реализации парсеров, а затем использовать её для написания собственного парсера, код которого будет практически дословно повторять грамматику, по которой осуществляется разбор.


Надеюсь, кому-то это поможет перебороть страх абстракций и научит уместно их использовать (да, я всё ещё считаю, что иногда бывает эффективней написать велосипед).

Читать дальше →

Изменение схемы таблиц PostgreSQL без долгих блокировок. Лекция Яндекса

Reading time10 min
Views25K
Если одновременно выполняется много операций по изменению схемы БД, сервис не может корректно работать на запись. Разработчик Владимир Колясинский объяснил, какие операции в PostgreSQL требуют длительных блокировок и как команда Яндекс.Коннекта обеспечивает почти стопроцентную доступность сервиса на запись во время выполнения подобных операций. Кроме того, вы узнаете о библиотеке для Django, которая призвана автоматизировать часть описанных процессов.


У нас большие нагрузки, тысячи RPS, и простой в несколько минут, не говоря о большем времени, недопустим. Нужно, чтобы миграции происходили незаметно для пользователя. А с такими нагрузками уже не получится встать в четыре часа ночи, что-то накатить, когда нет нагрузки, и снова лечь спать — потому что нагрузка идет круглые сутки.

Максимально вырожденная игра на общение

Reading time5 min
Views81K


Сразу скажу, эта штука просто офигенна для небольшой вечеринки, и сделать её можно прямо прочитав пост. Я крайне удивлён, что такая штука до сих пор не продавалась в России. И, кажется, знаю, почему.

Потому что она настолько тривиальна, что это сложно представить.

Но давайте начнём с начала. Итак, настольные игры нужны для общения. Как повод встретиться с друзьями (а для этого многим реально нужен повод — ведь соцсети уверенно разделяют людей). Люди обмениваются тёплыми словами, — ну, стоит, в общем, положительный транзакционный обмен с нулевой суммой.

Задача — найти максимально вырожденную игру, которая работает только на общение. Сначала я думал, что встретил её в Южной Африке на обучении — мы играли в классическую «две правды и ложь».

Но, оказывается, можно ещё проще. И с совершенно убойным результатом.
Читать дальше →

Лучшие доклады JPoint 2018: Java/JVM и её перформанс, Kotlin, Spring, Docker

Reading time11 min
Views20K

Мы уже выложили на YouTube видеозаписи докладов JPoint 2018 и специально для хаба Java на Хабре сделали традиционную подборку самых лучших из них по мнению посетителей конференции.


Как обычно, наверху «младшие» доклады, в конце — с самым высоким рейтингом. Конечно, это не значит, что один доклад намного хуже другого: если изменить методику расчета, места могут легко поменяться. В реальности, мы её и изменили, теперь используется «soft quorum» вариант рейтинга, учитывающий количество присутствовавших на докладе участников. Этот подход имеет свои минусы (например, на кейноут приходит больше людей, чем на обычный доклад, просто потому что у аудитории нет выбора), но в целом даёт более качественную картину произошедшего.


Под катом — и видеозаписи лучших докладов, и ссылки на их презентации, и короткие описания, и ссылка на полный плейлист.


Читать дальше →

Релиз Node.js 10.5: мультипоточность из коробки

Reading time3 min
Views33K


На прошлой неделе состоялся релиз Node.js версии 10.5.0, содержащий нововведение, чью значимость трудно переоценить, – поддержку многопоточности в виде модуля worker_threads. Сразу оговорюсь API находится в экспериментальной стадии и поэтому может измениться, но уже сейчас можно составить первое впечатление и получить представление о заложенных в его основу принципах и технологиях. А если у вас есть желание, то и поучаствовать в финализации интерфейса, написании кода или исправлении багов (список issues).

Читать дальше →

Comedy. Акторы в Node.JS для гибкого масштабирования

Reading time14 min
Views17K

Привет, хабравчане! В этой статье я познакомлю вас с фреймворком Comedy — реализацией акторов в Node.JS. Акторы позволяют масштабировать отдельные модули вашего Node.JS приложения без изменения кода.

Читать дальше →

node.js serverside — работа над ошибками. Часть 1

Reading time7 min
Views7.8K
Добрый день.

Эта статья ориентирована на разработчиков, имеющих представление о node.js.

Недавно готовил материал по фактам, которые полезно знать разработчикам под node.js в нашей конторе. Проекты, над которыми мы работаем — это API сервисы, использующие модуль node.js express в качестве веб-сервера. Материал основан на реальных случаях, в которых код работал неправильно или логика в нём была тщательно скрыта, или он провоцировал ошибки при расширении. На основе этого материала был проведён семинар по повышению квалификации сотрудников.

Вот, решил поделиться. Пока только первая часть, это около 30%. Если будет интересно, последует продолжение!

Я старался предоставить возможность быстрого ознакомления, поэтому примеры, рассуждения и комментарии спрятал в спойлерах. Если утверждения очевидны, «воду» можно пропустить. Хотя наши «грабли» в спойлерах тоже могут быть интересны.

Один коллега при проведении семинара задал мне вопрос, зачем об этом говорить, если всё и так есть в той или иной документации. Мой ответ был следующий. Несмотря на то, что посыл верен, всё действительно есть в документации, мы по-прежнему делаем досадные ошибки, связанные с непониманием или незнанием базовых вещей.

Приступим!

Виртуальная машина node.js



Однопоточность



В отличие от javavm, nodejs-vm является однопоточной**.



Источник
Читать дальше →

Принцип наименьшего действия. Часть 1

Reading time6 min
Views95K


Когда я впервые узнал об этом принципе, у меня возникло ощущение какой-то мистики. Такое впечатление, что природа таинственным образом перебирает все возможные пути движения системы и выбирает из них самый лучший.

Сегодня я хочу немного рассказать об одном из самых замечательных физических принципов – принципе наименьшего действия.
Читать дальше →

Больше всех пахала лошадь, но председателем колхоза так и не стала

Reading time9 min
Views46K


В последнее время в мобильном сообществе часто можно услышать про Flutter, React Native. Мне стало интересно понять профит от этих штук. И насколько они реально изменят жизнь при разработке приложений. В итоге было создано 4 (одинаковых с точки зрения выполняемых функции) приложения: нативное Android, нативное iOS, Flutter, React Native. В этой статье я описал то, что вынес из своего опыта и как реализуются схожие элементы приложений в рассматриваемых решениях.
Читать дальше →

Полезный обзор. 28 книг, которые повлияли на мое мышление, вдохновили или сделали лучше

Reading time7 min
Views158K


Я не люблю читать книжные рейтинги по двум причинам. Во-первых, чаще всего они представляют собой список книг, отобранных неведомым автором по неведомым критериям. Во-вторых, описания книг больше напоминают рекламные тексты издательств, которым сложно верить.

Из-за этого большинство подобных материалов мало полезны, несмотря на то, что могут содержать толковые книги. Мне давно хотелось написать полезный обзор, который не станет навязывать определенные материалы, а позволит читателю выбрать наиболее подходящие.
Читать дальше →

Мозг. Голографическая память. Биология квантовых вычислений

Reading time12 min
Views41K


Говорят, что чтобы правильно задать вопрос надо знать большую часть ответа. Основной вопрос, который обычно задают про мозг – это как он устроен и каковы принципы его работы? Вопрос хороший и вполне корректный. Но предположим, что нам удалось узнать «большую часть ответа». Допустим, что возникла теория, которая исключительно правдоподобно описывает работу мозга. Какой вопрос теперь будет «правильным»?
Читать дальше →

Древности: ZX Spectrum, программы на кассетах и высокая чёткость

Reading time7 min
Views48K
Я приезжаю на родину, вытаскиваю из закромов пыльные коробки с добром, разбираю и думаю вот о чём. Моя история разделена прогрессом на две части: цифровую и аналоговую. С аналоговой все просто: что не потеряно за дюжину переездов, вот оно, на месте: фотографии, дневники, письма. С цифровой сложнее. Самые ранние цифровые документы у меня датируются примерно 2001 годом. И то, практически все оттуда утеряно, лишь пара случайных фоток сохранились на болванках CD-R. Более-менее надежно переписка, логи чатов, фотографии и музыка начинают храниться с 2003 года. Именно с этого момента при покупке нового жесткого диска мне больше не надо было продавать старый.

Между тем первый персональный компьютер появился у меня в 1990 году. А примерно до 1996 года моим домашним компьютером был клон ZX Spectrum по имени АТМ Турбо. Потом долгое время был 386-й IBM PC. Из этого первого компьютерного десятилетия не сохранилось вообще ничего. Или так мне казалось, пока я, разбирая старые кассеты, не наткнулся на остатки коллекции спектрумовских программ. И стало мне интересно — а что там вообще? Прочитается ли? И главное, удастся ли что-нибудь вспомнить интересного про ту эпоху, которая все же была ну очень давно. Как будто и не со мной. В отличие от подборки софта 2002 года, сегодня — особый заплыв по волне моей памяти. Как если бы я отправлялся в город, где раньше бывал, но не потому, что он особо хорош или интересен.

Просто хочется убедиться, что мне не показалось, и я действительно там был.

Information

Rating
5,027-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity