Pull to refresh
259
-7
Антон Околелов @varanio

Go-тимлид, веду канал https://t.me/crossjoin

Send message

Плагин для анализа планов PostgreSQL в IDE JetBrains и его разработка

Level of difficultyMedium
Reading time11 min
Views6.4K

Для пользователей explain.tensor.ru - нашего сервиса визуализации PostgreSQL-планов, мы создали плагин "Explain PostgreSQL" для всех IDE от JetBrains, теперь есть возможность форматировать запросы и анализировать планы непосредственно в IDE.

Как использовать плагин и детали о его разработке читайте ниже.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments21

Экспортируем модули из Go-сервиса: сотворение директории pkg

Reading time6 min
Views7.7K

Чтобы поделиться кодом, нужно создать библиотеку и разместить её в самостоятельном репозитории. Но иногда возникает необходимость хранить библиотеку вместе с сервисом, который её использует, — это может быть полезно при разработке в open source, в процессе дробления монолита на микросервисы и при шеринге своим API. Среди Go-разработчиков существует мнение, что экспортируемые библиотеки стоит хранить в директории pkg.

Как оказалось, при экспорте библиотеки из сервиса может возникнуть множество нюансов. В этой статье мы разберём, как сделать внешнюю библиотеку максимально удобной как для сервиса, который её экспортирует, так и для импортёров.

Читать далее
Total votes 18: ↑16 and ↓2+14
Comments12

Четыре простых лайфхака при написании тестов на Go + testify

Reading time4 min
Views12K
Хотя язык программирования Go идёт в комплекте со встроенным тестовым фреймворком, мне сложно себе представить написание всего того количества тестов, что я написал, без testify. В этой заметке я расскажу про несколько маленьких неочевидных трюков, которым я научился в процессе.


Читать дальше →
Total votes 26: ↑25 and ↓1+24
Comments0

Как использовать PHP для создания микросервиса?

Reading time7 min
Views17K

В этой статье рассказывается, как использовать PHP для построения архитектуры микросервисов. Так как PHP идет в ногу со временем, он способен поддерживать микросервисные архитектуры для больших систем.

Читать далее
Total votes 14: ↑5 and ↓9-4
Comments11

Как проходят архитектурные секции собеседования в Яндексе: практика дизайна распределённых систем

Reading time25 min
Views124K
Привет, меня зовут Костя Кардаманов, я работаю в отделе технологий разработки Яндекса. Обычно такой же фразой я приветствую и кандидатов на собеседовании. А сегодня я хотел бы рассказать вам, как и зачем мы проводим интервью по дизайну систем с бэкенд-разработчиками. Сразу скажу: для фронтендеров, мобильных разработчиков и ML-инженеров подобный тип собеседований применим слабо, так что эти специальности мы здесь обсуждать не будем.

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

Что такое дизайн информационных систем


Основная цель любой IT-компании — производить сервисы, которые решают задачи пользователей. Мы должны уметь собирать элементы системы в единый механизм, который будет эффективно выполнять поставленную цель, и если первый тип собеседований нацелен в первую очередь на проверку необходимого минимума, то интервью про дизайн систем проверяет достаточность навыков кандидата в достижении конечной цели. Далекому от IT пользователю принципы и устройство систем могут казаться бесконечно сложными, но мы, их разработчики, должны иметь (не обязательно детальное) представление о принципах функционирования и роли каждого компонента.

Опытный читатель может сказать — в мире полно платных и бесплатных решений, из которых я могу собрать систему как из деталей конструктора, зачем мне понимать устройство этих деталей?
Читать дальше →
Total votes 94: ↑92 and ↓2+90
Comments37

Обзор Prisma ORM: как забыть об SQL и сосредоточиться на данных

Reading time14 min
Views20K


Это статья-обзор о Prisma ORM.

ORM (англ. Object-Relational Mapping — «объектно-реляционное отображение или преобразование») — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».

Работа с базами данных (моделирование данных, изменение схем, формирование запросов и т.п.) — одна из наиболее сложных задач, возникающих при разработке приложений. Prisma предлагает решение, позволяющее сосредоточиться на данных вместо SQL.

Что такое Prisma?


Как утверждают разработчики, Prisma представляет собой «открытую ORM нового поколения для Node.js и TypeScript», реализующую «новую парадигму объектно-реляционного отображения».

Поддерживаемые языки программирования:

  • JavaScript
  • TypeScript
  • Go (в разработке)
Читать дальше →
Total votes 39: ↑30 and ↓9+21
Comments5

Популярные задачи для собеседований бэкенд-разработчиков на Go и их решения

Reading time7 min
Views50K

Я живу в Ташкенте, и когда учился в университете — начал учить Python, чтобы писать ботов. Боты — это узбекский хлеб, у нас на них построено вообще все. Например, никто не делает приложения для заказа еды, все только в мессенджерах. 

Я учил язык по статьям из интернета — просто брал каркас и дальше дописывал, смотрел где что падает, постоянно решал задачи на leetcode. Писал я тогда ужасно, но что было, то было. Мне нравилось, но чем больше я углублялся, тем сильнее раздражали скорость выполнения, ограничения параллелизма и динамическая типизация.

Тогда я решил попробовать Go.

Читать далее
Total votes 45: ↑38 and ↓7+31
Comments17

Как дебажить переменные окружения в Linux

Reading time4 min
Views28K
Часто бывает так, что приходишь на машину и обнаруживаешь какой-то скрипт, запущенный под системным пользователем неделю назад. Кто его запустил? Где искать этот run.php? Или добавляешь запись в /etc/crontab, а скрипт там падает с ошибкой «command not found». Почему? И что делать? 

У меня есть ответы на эти вопросы.

Читать дальше →
Total votes 88: ↑86 and ↓2+84
Comments22

Модели дженериков и метапрограммирования: Go, Rust, Swift, D и другие

Reading time16 min
Views28K

В некоторых сферах программирования нормально хотеть написать такую структуру данных или алгоритм, которые могут работать с элементами разных типов. Например, список дженериков или алгоритм сортировки, которому нужна только функция сравнения. В разных языках предложены всевозможные способы решения этой задачи: от простого указания программистам на подходящие общие функции (С, Go) до таких мощных систем дженериков, что они стали полными по Тьюрингу (Rust, C++). В этой статье я расскажу о системах дженериков из разных языков и их реализации. Начну с решения задачи в языках без подобной системы (вроде С), а затем покажу, как постепенное добавление расширений приводит к системам из других языков.
Читать дальше →
Total votes 112: ↑110 and ↓2+108
Comments14

Hello, World! Глубокое погружение в Терминалы

Reading time24 min
Views86K


На написание данной статьи меня вдохновила статья об анализе Сишного printf. Однако, там был пропущен момент о том, какой путь проходят данные после того, как они попадают в терминальное устройство. В данной статье я хочу исправить этот недочет и проанализировать путь данных в терминале. Также мы разберемся, чем отличается Terminal от Shell, что такое Pseudoterminal, как работают эмуляторы терминалов и многое другое.

Читать дальше →
Total votes 110: ↑110 and ↓0+110
Comments44

«Не так важны инструменты, как умение мыслить о системах, которые они создают». Большое интервью с Мартином Клеппманом

Reading time22 min
Views13K


Мартин Клеппман (Martin Kleppman) – исследователь в Кембриджском университете, работающий над CRDT и формальной верификацией алгоритмов. Его книга «Designing Data-Intensive Applications», опубликованная в 2017 году, стала бестселлером в области хранения и обработки данных. 

Kevin Scott (CTO в Microsoft) однажды сказал: «Эта книга должна быть обязательной для инженеров-разработчиков. Это редкий ресурс, объединяющий теорию и практику, помогающий разработчикам глубже продумывать дизайн и реализацию инфраструктуры и систем обработки данных». Что-то похожее говорил и Jay Kreps — создатель Apache Kafka и CEO Confluent.

А прежде чем заняться академическими исследованиями, Мартин работал в индустрии и стал сооснователем двух успешных стартапов: Rapportive (купленный LinkedIn в 2012 году) и Go Test It (куплен RedGate).

Этот хабрапост – развернутое интервью с Мартином. Примерные темы обсуждения:

  • Переход от бизнеса к академическим исследованиям;
  • Предпосылки написания Designing Data-Intensive Applications;
  • Здравый смысл против искусственного ажиотажа и рекламы инструментов;
  • Ненужность теоремы CAP и другие ошибки индустрии;
  • Полезность децентрализации;
  • Блокчейны, Dat, IPFS, Filecoin, WebRTC;
  • Новые CRDT. Формальная верификация на Isabelle;
  • Дискуссия про event sourcing. Низкоуровневый подход. XA-транзакции; 
  • Apache Kafka, PostgreSQL, Memcached, Redis, Elasticsearch;
  • Использование всего этого в реальной жизни;
  • Порог входа в доклады Мартина и конференция Hydra.

Интервью провёл Вадим Цесько (@incubos) — ведущий разработчик в команде Платформы компании Одноклассники. Научные и инженерные интересы Вадима касаются распределённых систем и хранилищ данных, а также верификации программных систем.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments1

Алексей Савватеев и теория игр: «Какова вероятность, что в ближайшие пять лет будет скинута атомная бомба?»

Reading time9 min
Views46K
image

Расшифровка видеозаписи лекции.

Теория игр — дисциплина, которая прочно зависла между математикой и социальными науками. Одним канатом к математике, другим канатом — к социальным наукам, прочно прикреплена.

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

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

Некоторые сюжеты спорные. Модели могут быть разные, можете не соглашаться с моей моделью.

  • Теория игр в Талмуде.
  • Теория игр в русской классике.
  • Телеигра или задача о парковочных местах.
  • Люксембург в Евросоюзе.
  • Синдзо Абэ и Северная Корея
  • Парадокс Брайеса в Метрогородке (Москва)
  • Два парадокса Дональда Трампа
  • Рациональное безумие (снова Северная Корея)

(В конце поста — опрос про бомбу.)
Total votes 70: ↑62 and ↓8+54
Comments51

FAQ: что надо знать путешественнику-гику про прививки перед поездкой

Reading time11 min
Views33K
Мадагаскар закрывает границы!Вакцина — это способ показать иммунной системе сигнатуру угрозы, к которой за несколько циклов обучения будет выработан иммунный ответ.

Любая борьба организма с инфекционным заболеванием — это попытки распознать сигнатуру угрозы и выработать контрмеры. В общем случае этот процесс ведётся до полного результата, то есть до выздоровления. Однако могут быть инфекции, которые:

  • Убивают носителя быстрее, чем будет выработан иммунный ответ.
  • Меняются быстрее, чем иммунная система сможет «распознать» патогены.
  • Маскируются и прячутся в местах, где очень сложно получить доступ к патогену.

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

Давайте сначала разберёмся с ликбезом, потом перейдём к путешествиям и списку действий.

Почему путешествия опасны?


Предположим, вы летите в Африку. Там есть повышенный риск жёлтой лихорадки. Простая вакцина обойдётся вам примерно в 1 500 рублей вместе с приёмом терапевта и услугами процедурного кабинета, вакцина более высокого уровня — в 3 000 рублей. Вылечиться от жёлтой лихорадки специализированными медикаментами нельзя (то есть можно только поддерживать ресурсы организма, пока он сам не справится), заболеть легко, летальность — около 10%, основной вектор — комары. Побочных эффектов у вакцины почти нет. Стоит вакцинация того? Наверное, да. Но решать вам.
Читать дальше →
Total votes 113: ↑107 and ↓6+101
Comments96

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

Reading time4 min
Views309K

Так получилось, что я провожу довольно много собеседований на должность веб-программиста. Один из обязательных вопросов, который я задаю — это чем отличается INNER JOIN от LEFT JOIN.


Чаще всего ответ примерно такой: "inner join — это как бы пересечение множеств, т.е. остается только то, что есть в обеих таблицах, а left join — это когда левая таблица остается без изменений, а от правой добавляется пересечение множеств. Для всех остальных строк добавляется null". Еще, бывает, рисуют пересекающиеся круги.


Я так устал от этих ответов с пересечениями множеств и кругов, что даже перестал поправлять людей.


Дело в том, что этот ответ в общем случае неверен. Ну или, как минимум, не точен.

Читать дальше →
Total votes 179: ↑138 and ↓41+97
Comments225

Хабрарейтинг 2018: лучшие материалы за 2018 год

Reading time20 min
Views23K
Привет Хабр.

Данный пост является логическим завершением публикаций про жизненный цикл статьи на Хабре (первая и вторая части для тех кто интересуется технической стороной вопроса), в результате чего был сделан достаточно интересный инструмент для статистического анализа. Методика оказалась весьма полезной, и позволяет находить статьи по различным параметрам, например, статьи с самым высоким «качеством» (соотношением рейтинга к числу просмотров), самые «спорные» статьи, у которых больше всего полярных комментариев, самые комментируемые материалы, и пр.



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

Тех, кому интересно что получилось, прошу под кат.
Читать дальше →
Total votes 49: ↑46 and ↓3+43
Comments25

Как работать с async/await в циклах JavaScript

Reading time3 min
Views148K

Как запустить асинхронные циклы по порядку или параллельно в JavaScript?


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

Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments33

Восстановление когнитивных способностей 100 пациентов (перевод статьи Дейла Бредесена)

Reading time14 min
Views27K
image

Привет, Хабр! Представляю вашему вниманию перевод оригинальной статьи Дейла Бредесена, директора отдела нейродегенеративных заболеваний медицинского факультета Калифорнийского университета в Лос-Анджелесе (UCLA), автора «The End of Alzheimer's: The First Program to Prevent and Reverse Cognitive Decline» (Конец болезни Альцгеймера: первая программа предотвращения и восстановления когнитивных функций). Если у вас есть родственник или знакомый, страдающий болезнью Альцгеймера, то описанный здесь протокол, возможно, сможет помочь.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments20

GraphQL — API по-новому

Reading time26 min
Views44K
Что такое язык запросов GraphQL? Какие преимущества дает эта технология и с какими проблемами столкнутся разработчики при ее использовании? Как эффективно использовать GraphQL? Обо всем этом под катом.



В основе статьи — доклад вводного уровня Владимира Цукура (volodymyrtsukur) с конференции Joker 2017.
Total votes 40: ↑40 and ↓0+40
Comments22

Иди-ка ты сам на… или правила общения в команде

Reading time3 min
Views59K

Пост-ответ на статью "Иди-ка ты на !@# со своей "токсичностью"".


Если бы я последовал советам из этой статьи, мне достаточно было бы проявить эмоцию и сказать автору "Иди-ка ты сам на ..., ты ничего не понимаешь!".


Однако это не помогло бы донести мою мысль. Поэтому давайте разберем поподробнее.

Читать дальше →
Total votes 280: ↑230 and ↓50+180
Comments502

Проблемные личности среди разработчиков

Reading time22 min
Views103K


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

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

Но с такими возможностями часто приходит полное отсутствие уважения к участникам проекта других профессий. Это отсутствие уважения может оказаться настолько глубоким, что порождает в уме разработчика твёрдую уверенность, что он не только самый ценный участник программного проекта, но и необходим компании в целом. К сожалению, хотя лишь малое число разработчиков способны накапливать что-либо напоминающее богатство, многие ведут себя так, словно они следующие Марк Цукерберг, Билл Гейтс или Стив Джобс; хотя это очень далеко от истины. Это приводит к личностным проблемам, которые так же увлекательно наблюдать со стороны, как страшно созерцать в себе.
Читать дальше →
Total votes 93: ↑74 and ↓19+55
Comments179
1
23 ...

Information

Rating
Does not participate
Location
Praha, Hlavni Mesto Praha, Чехия
Works in
Date of birth
Registered
Activity

Specialization

Backend Developer, Fullstack Developer
Lead