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

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

Send message

Больше разработчиков должны знать это о базах данных

Reading time19 min
Views44K
Прим. перев.: Jaana Dogan — опытный инженер из Google, которая в данный момент занимается вопросами наблюдаемости production-сервисов компании, написанных на Go. В этой статье, снискавшей большую популярность у англоязычной аудитории, она в 17 пунктах собрала важные технические детали, касающиеся СУБД (а иногда — распределённых систем в целом), которые полезно учитывать разработчикам крупных/требовательных приложений.



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

6 концепций, которые нужно освоить архитектору Angular-приложений

Reading time8 min
Views21K
Angular — один из самых масштабных из существующих веб-фреймворков. Он включает в себя множество встроенных возможностей. А это значит, что для полноценного освоения Angular нужно разобраться с изрядным количеством концепций.



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

Леммы о разрастании для регулярных и контекстно-свободных языков

Reading time12 min
Views13K

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


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


План такой: разбираемся, что такое регулярные языки и какова связь между регулярными выражениями и конечными автоматами, формулируем и доказываем лемму о разрастании для регулярных языков, используем её для доказательства нерегулярности нескольких языков. Затем похожий трюк проделываем с контекстно-свободными языками, по пути выясняя, как они связаны с регулярными языками и как обходить обнаруженные ограничения при помощи грамматик общего вида. Поехали!




КДПВ иллюстрирует процесс разрастания для КС-грамматик

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

23 непростых вопроса для JavaScript-собеседования

Reading time15 min
Views71K
Хотите подготовиться к собеседованию по JavaScript и ищете вопросы, на которых можно попрактиковаться? Если так — считайте, что ваши поиски окончены. Автор материала, перевод которого мы сегодня публикуем, говорит, что собрал более двух десятков вопросов по JavaScript, предназначенных для тех, кто хочет превратиться из джуниора в сеньора, для тех, кто стремится успешно пройти собеседование в сфере фронтенд-разработки и получить интересное предложение от работодателя.


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

Люди ушли общаться в интернет, но теперь снова мечтают об оффлайне. Что происходит?

Reading time15 min
Views11K

И речь не про коронавирус




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

Звучит нормально, но есть один забавный момент. Люди, которые почувствовали это желание, не хотят просто закрыть интернет и пойти на улицу; не хотят написать «новому человеку» в любом из миллиарда мессенджеров — они хотят новый цифровой сервис для того чтобы не общаться в цифровых сервисах.

Мы уже писали, как Константин Шубин и Павел Козлов ушли из «Яндекса», чтобы развивать стартап Random Coffee. Или как дизайнеры Елизавета Орешкина и Этери Санеблидзе создали The Breakfast — закрытый клуб для завтраков с незнакомцами. В то же время основательница Rusbase Мария Подлеснова рассказала о скором релизе своего Adele.io — дейтинга, который будет сводить людей не только для романтики. Параллельно большим релизам маленькие сообщества в сети, паблики и чатики в Телеграме заводят простые таблички в экселе и чатботы для рандомного распределения на пары.

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

Я попытался разобраться — откуда взялся такой запрос в мире переполненном социальными связями, и что вообще происходит с человеческим общением.
Читать дальше →

Монады как паттерн переиспользования кода

Reading time24 min
Views75K


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


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


Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.


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


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

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

Как научить телефон видеть красоту

Reading time10 min
Views17K
image

Недавно я читал книгу о математике и о красоте людей и задумался о том, что еще десятилетие назад представление о том, как понять, что такое красота человека были достаточно примитивными. Рассуждения о том, какое лицо считается красивым с точки зрения математики сводились к тому, что оно должно быть симметричным. Также со времен эпохи возрождения были попытки описать красивые лица при помощи соотношений между расстояниями в каких-то точках на лице и показать, например, что у красивых лиц какое-то отношение близко к золотому сечению. Подобные идеи о расположении точек сейчас используются как один из способов идентификации лиц (face landmarks search). Однако как показывает опыт, если не ограничивать набор признаков положением специфичных точек на лице, можно добиться лучших результатов в целом ряде задач, включая определение возраста, пола или даже сексуальной ориентации. Уже тут видно, что острым может стоять вопрос этики публикации результатов таких исследований.
Читать дальше →

DIY Корутины. Часть 1. Ленивые генераторы

Reading time18 min
Views12K

В мире JVM про корутины знают в большей степени благодаря языку Kotlin и Project Loom. Хорошего описания принципа работы котлиновских корутин я не видел, а код библиотеки kotlin-coroutines совершенно не понятен неподготовленному человеку. По моему опыту, большинство людей знает о корутинах только то, что это "облегченные потоки", и что в котлине они работают через умную генерацию байткода. Таким был и я до недавнего времени. И мне пришла в голову идея, что раз корутины могут быть реализованы в байткоде, то почему бы не реализовать их в java. Из этой идеи, впоследствии, появилась небольшая и достаточно простая библиотека, в устройстве которой, я надеюсь, может разобраться практически любой разработчик. Подробности под катом.


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

Мы шампиньоны

Reading time5 min
Views9.9K
Всё ещё имеем тактику, которой придерживаемся — второй раз подряд мы заканчиваем год на первом месте среди компаний. Какого-то рецепта или секретного ингредиента тут нет — есть ежедневная работа, которая даёт свои результаты. Как в спортзале, когда не халтуришь. 



Под катом — анализируем активность блога за последние 4 года.
Читать дальше →

5 вещей, которые я бы хотел знать, когда начинал использовать Angular

Reading time14 min
Views41K

Современный Angular — это мощный фреймворк с множеством возможностей, вместе с которыми приходят и сложные, на первый взгляд, концепции и механизмы. Особенно это заметно тем, кто только начал работу как во фронтэнде в принципе, так и с Angular в частности.


С этой же проблемой столкнулся и я, когда примерно два года назад пришел в Тинькофф на позицию Junior Frontend Developer и погрузился в мир Angular. Поэтому предлагаю вам короткий рассказ о пяти вещах, понимание которых очень облегчило бы мою работу на первых порах.


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

Многопоточность на Node.js. Event Loop

Reading time8 min
Views79K

Инфа будет полезна JS-разработчикам, которые хотят глубоко понимать суть работы с Node.js и Event Loop. Вы сможете осознанно и более гибко управлять потоком выполнения программы (web-сервера).


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


Как устроена Node.js. Возможности асинхрона


Давайте посмотрим на этот код: он отлично демонстрирует синхронность выполнения кода в Node.js. Делается запрос на GitHub, затем записываем данные в файл и выводим результат в консоли. Что понятно из этого синхронного кода?


image

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

Reactor, WebFlux, Kotlin Coroutines, или Асинхронность на простом примере

Reading time12 min
Views23K


Многие сервисы в современном мире, по большей части, «ничего не делают». Их задачи сводятся к запросам к другим базам/сервисам/кешам и агрегации всех этих данных по различным правилам и разнообразной бизнес-логике. Поэтому неудивительно, что появляются такие языки, как Golang, с удобной встроенной конкурентной системой, позволяющей легко организовывать неблокирующий код.


В JVM-мире всё немного сложнее. Есть огромное количество фреймворков и библиотек, блокирующих потоки при использовании. Так и сама stdlib может делать то же самое порой. Да и в Java нет аналогичного механизма, похожего на горутины в Golang.


Тем не менее, JVM активно развивается и появляются новые интересные возможности. Есть Kotlin с корутинами, которые по своему использованию очень похожи на горутины из Golang (хоть и реализованы совершенно по-другому). Есть JEP Loom, который в будущем привнесёт fibers в JVM. Один из самых популярных веб-фреймворков — Spring — не так давно добавил возможность создавать полностью неблокирующие сервисы на Webflux. А с недавним релизом Spring boot 2.2 интеграция с Kotlin стала ещё лучше.


Предлагаю на примере небольшого сервиса по переводу денег с одной карты на другую самим написать приложение на Spring boot 2.2 и Kotlin для интеграции с несколькими внешними сервисами.

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

Откуда в Java всплывают проблемы с кодировками и возможная причина падения марсианского зонда

Reading time7 min
Views62K
Планета Марс уже не первый год населена роботами. То тут, то там появляются беспилотные электрокары и летающие дроны, а в программах, написанных на Java, с завидной регулярностью всплывают проблемы с кодировками.

Хочу поделиться своими мыслями о том, почему это происходит.
Читать дальше →

Теория программирования: Вариантность

Reading time13 min
Views42K

Здравствуйте, меня зовут Дмитрий Карловский и я… хочу поведать вам о фундаментальной особенности систем типов, которую зачастую или вообще не понимают или понимают не правильно через призму реализации конкретного языка, который ввиду эволюционного развития имеет много атавизмов. Поэтому, даже если вы думаете, что знаете, что такое "вариантность", постарайтесь взглянуть на проблематику свежим взглядом. Начнём мы с самых основ, так что даже новичок всё поймёт. А продолжим без воды, чтобы даже профи было полезно для структурирования своих знаний. Примеры кода будут на псевдоязыке похожем на TypeScript. Потом будут разобраны подходы уже нескольких реальных языков. А если же вы разрабатываете свой язык, то данная статья поможет вам не наступить на чужие грабли.


а вдруг там лис?

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

Разница между асинхронной функцией и функцией, возвращающей промис

Reading time4 min
Views24K
Существует небольшая, но довольно важная разница между функцией, которая просто возвращает промис, и функцией, которая была объявлена с помощью ключевого слова async.

Взгляните на следующий фрагмент кода:
Читать дальше →

Игровая агрессия, или как кооператив превращается в кровавую баню и что делать, чтобы он этого не делал

Reading time53 min
Views29K


В прошлый раз мы остановились на том феномене, что игра, которая изначально задумывалась как кооператив (например, D&D или многопользовательская песочница типа Space Station 13), почему-то может использоваться игроками совершенно по другому назначению, становясь пространством насилия и травли. Сегодня, соответственно, будем разбираться в том, как устроена детская (и не только детская) агрессия, как работает формат песочницы, что делает агрессия в песочнице (и вообще в игре) и как можно ей управлять.

Физика эмоции


В дальнейшем изложении мы будем использовать гидродинамическую модель эмоции. Представим себе, что, например, гнев – это жидкость. Чем больше накапливается гнева, тем сильнее становится напор жидкости в трубе – отдельно взятом индивидууме. На выходе есть два вентиля. Один соответствует внутреннему тормозу – представлению, например, о том, что обижать других людей дурно, некрасиво, недостойно… Второй соответствует внешнему тормозу – страху перед наказанием или какими-то другими негативными последствиями. Что будет, если давление жидкости нарастает, а вентили (хотя бы какой-то один из них) намертво закручены?
Читать дальше →

Подготовка к Spring Professional Certification. Контейнер, IoC, бины

Reading time10 min
Views118K

Доброго времени суток, Хабр.


Сегодня я решил представить вам перевод цикла статей для подготовки к Spring Professional Certification.


Это перевод только первой статьи, если он зайдет аудитории, я продолжу выпуск переводов.  


Зачем я это делаю, ведь уже есть куча профильных материалов?
  1. Часто в них информация не структурирована, не собрана, или не актуальна
  2. Молодые разработчики могут не знать английский. Этот цикл можно использовать не только для сертификации, но и для самообучения/повторения материалов.
  3. Этими материалами можно пользоваться при подготовке к собеседованию, т.к. они выстроены в виде вопросов и ответов.
  4. Важное, и самое главное преимущество — этот QA сделан из вопросов из  официального Study Guide от Pivotal. 

  • Некоторые вопросы, которые казались мне лишними или которых не было в гиде я осознанно упустил.

Оглавление
  1. Внедрение зависимостей, контейнер, IoC, бины
  2. AOP (аспектно-ориентированное программирование)
  3. JDBC, транзакции, JPA, Spring Data
  4. Spring Boot
  5. Spring MVC
  6. Spring Security
  7. REST
  8. Тестирование

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

Мошенники и ЭЦП — всё очень плохо

Reading time5 min
Views238K

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

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

Как развивается умение общаться (с самого-самого начала) и что с ним делают игры на сторителлинг

Reading time37 min
Views24K
Одна из самых распространенных тем запросов, с которыми приходят к детским специалистам, это речь. Самая очевидная проблема — это когда ребенок не говорит. Вот ему год, а он молчит. Вот ему уже три, а он все равно молчит. А вот уже пять… Тут понятно, что что-то пошло не так. Есть менее очевидные проблемы, которые на самом деле тоже про речь. Например, ребенок плохо учится. Почему плохо учится? Оказывается, когда ему учительница задает вопрос, он в ответ двух слов связать не может. Или у ребенка почему-то нет друзей. И оказывается, что он просто не представляет, как со сверстниками вообще разговаривать. Ну и не разговаривает. И так далее.

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

Люди до ужаса нелогичны: нерациональное поведение в госзакупках

Reading time6 min
Views21K

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

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

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

Спойлер: думаете, от этого цена падает до минимума? Не дождётесь!
Читать дальше →

Information

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