Pull to refresh
0
0

Пользователь

Send message

GraphQL на Rust

Reading time 18 min
Views 12K

В этой статье я покажу как создать GraphQL сервер, используя Rust и его экосистему; будут приведены примеры реализации наиболее часто встречающихся задач при разработке GraphQL API. В итоге API трёх микросервисов будут объединены в единую точку доступа с помощью Apollo Server и Apollo Federation. Это позволит клиентам запрашивать данные одновременно из нескольких источников без необходимости знать какие данные приходят из какого сервиса.

Читать далее
Total votes 27: ↑26 and ↓1 +25
Comments 41

Логическая репликация в PostgreSQL. Репликационные идентификаторы и популярные ошибки

Reading time 42 min
Views 43K
image

Начиная с 10 версии, перенести данные с одной базы PostgreSQL на другую несложно, с обновлением, без обновления — неважно. Об этом немало сказано и сказанное сводится к следующему: на мастере, 10 версии и выше, устанавливаем параметр конфигурации wal_level="logical". В pg_hba.conf добавляем такую строку:

host    db_name    postgres    192.168.1.3/32     trust

Затем рестартуем на мастере postgres и выполняем на реплике из-под пользователя postgres:

pg_dumpall --database=postgres --host=192.168.1.2 --no-password --globals-only --no-privileges | psql
pg_dump --dbname db_name --host=192.168.1.2 --no-password --create --schema-only | psql

Теперь подключаемся на мастере пользователем postgres к базе db_name и создаём публикацию:

CREATE PUBLICATION db_pub FOR ALL TABLES;

а на реплике создаём подписку:

CREATE SUBSCRIPTION db_sub CONNECTION 'host=192.168.1.2 dbname=db_name' PUBLICATION db_pub;

По завершении репликации переключаем приложение или балансировщик на новую базу.

Теперь вы знаете постгрес (и с какой стороны доить слонеску) и можете идти устраиваться ДБА.
Для любознательных есть пара небольших деталей под катом.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Comments 5

МЭМСы. Как устроены современные датчики?

Reading time 9 min
Views 46K
Микроэлектромеханические системы (МЭМС) — устройства, объединяющие в себе микроэлектронные и микромеханические компоненты. Сейчас довольно трудно встретить системы в которых не используются датчики, выполненные по данной технологии. Но как устроены современные датчики и какие преобразователи используются для работы с ними? Постараемся детально разобраться в этом вопросе, основываясь на работе современных МЭМС-акселерометров.

Читать дальше →
Total votes 64: ↑63 and ↓1 +62
Comments 19

Пишем telegram бота на языке R (часть 1): Создаём бота, и отправляем с его помощью сообщения в telegram

Reading time 12 min
Views 16K

Аудитория telegram ежедневно растёт с геометрической прогрессией, этому способствует удобство мессенджера, наличие каналов, чатов, и конечно возможность создавать ботов.


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


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


Я планирую написать серию статей, о том, как на языке R работать с telegram bot API, и писать ботов под свои нужды.



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

Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Comments 2

Великолепная семерка: технари, ставшие выдающимися литераторами

Reading time 7 min
Views 13K


Деление на «физиков и лириков» — это классика противопоставлений. Считается, что ты «по умолчанию» либо Ньютон, либо Пушкин. Однако, поизучав биографии многих выдающихся писателей, мы можем без труда найти тех, кто соединяет в себе Есенина и Шелдона Купера. Более того, таланты в одной сфере способствовали развитию в другой.

Если фраза «талантливый человек талантлив во всем» — это про вас, то заявляйтесь на наш конкурс «ТехноТекст-2020». Ну а если вы еще сомневаетесь, посмотрите на истории ниже. В свое время великие писатели-технари тоже стояли перед непростым выбором…
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Comments 34

Расчеты переходных процессов в электрических сетях

Reading time 8 min
Views 7.6K
Энергетика – обширная сфера деятельности, и расчеты в ней производятся разные: расчет рентабельности строительства новых станций, расчет перенапряжений, расчет оставшегося времени до конца рабочего дня в пятницу вечером. Все эти темы в одной статье не уместить, поэтому сконцентрируюсь на той, которой занимался в течение последних лет, – расчеты переходных процессов в электрических сетях. Кому интересно, что это такое и как оно происходит в современном мире, – прошу под кат.

Оглавление


  • Зачем вообще что-то рассчитывать в энергетике?
  • Переходные процессы – это…
  • Переходные процессы и режим реального времени
  • Нельзя просто так взять и рассчитать переходный процесс
  • Куда и как запустить модель?
  • Управление по управлению всеми управлениями
  • Все уже сделано до нас
  • Заключение
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Comments 22

450 бесплатных курсов от Лиги Плюща

Reading time 19 min
Views 68K
image


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

Я сейчас решаю задачу, как из огромной массы жизненно важного контента выбрать тот, который стоит попробовать в первую очередь, как «разметить данные», чтобы нейросеточка у подрастающего поколения обучилась более эффективно. (ontol.org, «Выгорание», «Удаленка», телеграм-канал).

Предлагаю вашему вниманию полную подборку всех бесплатных курсов от Лиги Плюща.

Лига плюща (The Ivy League) — ассоциация восьми частных американских университетов, расположенных в семи штатах на северо-востоке США. В состав лиги входят: Брауновский университет (Brown University), Гарвардский университет (Harvard University), Дартмутский колледж (Dartmouth College), Йельский университет (Yale University), Колумбийский университет (Columbia University), Корнеллский университет (Cornell University), Пенсильванский университет (University of Pennsylvania), Принстонский университет (Princeton University).

Эти университеты выпустили около 500 онлайн-курсов, 450 из которых сейчас доступны.

Оглавление


Computer Science (37)
Data Science (18)
Программирование (8)
Гуманитарные науки (80)
Бизнес (72)
Art & Design (20)
Наука (32)
Социальные науки (74)
Здоровье и медицина (32)
Инженерия (15)
Образование и преподавание (21)
Математика (14)
Личностное развитие (7)

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

Пять лет Rust

Reading time 13 min
Views 31K

В этом бардаке, который сейчас происходит в мире, легко забыть, что прошло уже пять лет с выпуска 1.0 в 2015 году! Rust за эти пять лет сильно изменился, так что мы хотели бы вспомнить о работе всех участников сообщества, начиная с момента стабилизации языка.


Напомним, если кто забыл: Rust — это язык программирования общего назначения, который обладает средствами, позволяющими строить надёжное и эффективное программное обеспечение. Rust может быть использован в любой области: от ядра вашей операционной системы до вашего следующего web-приложения. Этот язык полностью построен участниками открытого многоликого сообщества, в основном волонтёрами, кто щедро делился своим временем и знаниями для того, чтобы помочь сделать Rust таким, какой он есть сейчас.

Читать дальше →
Total votes 84: ↑83 and ↓1 +82
Comments 52

Rust для Java разработчиков

Reading time 15 min
Views 15K

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

Читать дальше →
Total votes 39: ↑38 and ↓1 +37
Comments 36

Шесть советов об использовании PostgreSQL в функциональных тестах

Reading time 5 min
Views 15K

В 2018-м году, работая в Akvelon Inc., я собеседовал одного человека. Перед интервью мне дали на проверку его тестовое задание: небольшое web-приложение по типу записной книжки или todo-списка – React\TypeScript, C# на бэке и MS SQL Server в качестве персистентного хранилища. Приложение было модное: с обилием unit-тестов на mock’ах, упакованное в docker-образ – видно, что человек старался. И у этого решения был всего один недостаток – оно не работало. Совсем. Падало при попытке сохранить новую строку в базу данных.



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


Первая из них – ложная уверенность от модульных тестов. Даже 100% покрытие кода тестами не гарантирует, что в нём нет ошибок.


И вторая – отсутствие функциональных тестов. Если ваше приложение работает с СУБД, то вы обязательно должны покрыть эту часть кода реальными тестами с реальной базой данных. И здесь есть очень важное условие: проверять нужно именно на той версии СУБД, которая работает у вас в production’е. Думаю, очень многие разработчики под Oracle, прогоняющие свои тесты на H2\HSQLDB, сталкивались с ситуацией, когда тесты проходят, а production не работает (boolean, group by и другие чудеса).


Сейчас я работаю в основном с PostgreSQL и мигрирую наши микросервисы с 10-й версии на 11-ую. В процессе миграции (и разработки вообще) я столкнулся с несколькими нюансами, о которых хотелось бы рассказать.

Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 12

Язык R для пользователей Excel (бесплатный видео курс)

Reading time 6 min
Views 33K

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


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


Если всю работу с данными в компании, в котороый вы работаете принято по-прежнему вести в Excel, то предлагаю вам познакомится с более современным, и при этом совершенно бесплатным инструментом анализа данных.


Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Comments 2

Микросервисы на Java: практическое руководство

Reading time 29 min
Views 87K

Вы можете использовать это руководство, чтобы понять что такое Java микросервисы, как вы будете их разрабатывать и создавать. А также получить обзор библиотек для разработки Java микросервисов.


Примечание: Статья ~ 7000 слов, вероятно, не стоит читать ее на мобильном устройстве. Добавьте ее в закладки и вернитесь позже.


Содержание


Читать дальше →
Total votes 17: ↑12 and ↓5 +7
Comments 7

Почему будущее не за Python

Reading time 6 min
Views 33K
Хотя, безусловно, этот язык программирования будет востребован ещё много лет.



Сообществу программистов понадобились десятилетия, чтобы по достоинству оценить Python. С начала 2010-х годов он переживает бум — и в итоге превосходит C++, C#, Java и JavaScript по популярности.

Но до каких пор эта тенденция будет сохраняться? Когда Python в конечном итоге будет заменён другими языками и почему это неизбежно произойдёт?
Читать дальше →
Total votes 47: ↑25 and ↓22 +3
Comments 85

Вопросы к собеседованию Java-backend, Java core (60 вопросов)

Reading time 17 min
Views 241K
image

Добрый день! Представляю вашему вниманию список вопросов к собеседованию Java Backend, которые я оформлял на протяжении около 2х лет.

Вопросы разбиты по темам: core, collections, concurrency, io, exceptions, которые задают основные направления хода технического собеседования. Звездочками отмечен субъективный (с точки зрения автора) уровень сложности вопроса, в сноске спойлера — краткий ответ на вопрос. Ответ представляет для интервьювера правильное направления развития мысли кандидата.
Читать далее
Total votes 31: ↑23 and ↓8 +15
Comments 76

DBA: находим бесполезные индексы

Reading time 12 min
Views 18K
Регулярно сталкиваюсь с ситуацией, когда многие разработчики искренне полагают, что индекс в PostgreSQL — это такой швейцарский нож, который универсально помогает с любой проблемой производительности запроса. Достаточно добавить какой-нибудь новый индекс на таблицу или включить поле куда-нибудь в уже существующий, а дальше (магия-магия!) все запросы будут эффективно таким индексом пользоваться.

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

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

Доработки происходят итеративно силами множества распределенных команд, которые бывают разнесены не только в пространстве, но и во времени. И тогда, не зная всей истории развития проекта или особенностей прикладного распределения данных в его БД, можно легко «напортачить» с индексами. Но соображения и проверочные запросы под катом позволяют заранее предсказывать и обнаруживать часть проблем:

  • неиспользуемые индексы
  • префиксные «клоны»
  • timestamp «в середине»
  • индексируемый boolean
  • массивы в индексе
  • NULL-мусор
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Comments 6

На пути к функциональной СУБД и NoSQL ERP: хранение остатков и расчет себестоимости

Reading time 10 min
Views 4.6K
Привет, Хабр!

Продолжаем исследовать применимость принципов функционального программирования при проектировании ERP. В предыдущей статье мы рассказали зачем это нужно, заложили основы архитектуры, и продемонстрировали построение простых сверток на примере оборотной ведомости. По сути, предлагается подход event sourcing, но за счет разделения БД на иммутабельную и мутабельную часть, мы получаем в одной системе комбинацию преимуществ map / reduce-хранилища и in-memory СУБД, что решает как проблему производительности, так и проблему масштабируемости. В этой статье я расскажу (и покажу прототип на TypeScript и рантайме Deno), как в такой системе хранить регистры мгновенных остатков и рассчитывать себестоимость. Для тех, кто не читал 1-ю статью — краткое резюме:

1. Журнал документов. ERP, построенная на базе РСУБД представляет собой огромный мутабельный стейт с конкурентным доступом, поэтому не масштабируется, слабо-аудируема, и ненадежна в эксплуатации (допускает рассогласование данных). В функциональной ERP все данные организованы в виде хронологически-упорядоченного журнала иммутабельных первичных документов, и в ней нет ничего кроме этих документов. Связи разрешаются от новых документов к старым по полному ID (и никогда наоборот), а все остальные данные (остатки, регистры, сопоставления) являются вычисляемыми свертками, то есть кэшируемыми результами работы чистых функций на потоке документов. Отсутствие стейта + аудируемость функций дает нам повышенную надежность (блокчейн на эту схему прекрасно ложится), а бонусом мы получаем упрощение схемы хранения + адаптивный кэш вместо жесткого (организованного на базе таблиц).
Читать дальше →
Total votes 14: ↑11 and ↓3 +8
Comments 88

Очереди сообщений в PostgreSQL с использованием PgQ

Reading time 4 min
Views 27K


Очереди сообщений используются для выполнения: отложенных операций, взаимодействия сервисов между собой, «batch processing» и т.д. Для организации подобных очередей существуют специализированные решения, такие как: RabbitMQ, ActiveMQ, ZeroMQ и тд, но часто бывает, что в них нет большой необходимости, а их установка и поддержка причинит больше боли и страданий, чем принесет пользы. Допустим, у вас есть сервис, при регистрации в котором пользователю отправляется email для подтверждения, и, если вы используете Postgres, то вам повезло — в Postgres, почти из коробки, есть расширение PgQ, которое сделает всю грязную работу за вас.

В этой статье я расскажу об организации очередей сообщений (задач) в PostgreSQL с использованием расширения PgQ. Эта статья будет полезна, если вы еще не использовали PgQ или используете самописные очереди поверх Postgres.

Зачем вообще нужен PgQ, если можно просто создать табличку и записывать туда задачи? Казалось бы, можно, но вам придется учесть паралельный доступ к задачам, возможные ошибки (что будет, если процесс обрабатывающий задачу, упадет?), а также производительность (PgQ очень быстрый, а самописные решения, как правило, нет, особенно если транзакция в базе не закрывается во время всего выполнения задачи), но самое главное, почему на мой взгляд надо использовать PgQ, это то, что PgQ уже написан и работает, а самописное решение еще надо написать (UPD: про то, почему не стоит использовать самописные очереди, можно почитать, например, тут).
(UPD: т.к. PgQ работает поверх Postgres, все прелести транзакций можно использовать и в нем)

Но у PgQ есть один огромный минус — отсутствие документации, этот недостаток я и пытаюсь компенсировать этой статьей.
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Comments 34

DBA: вычищаем клон-записи из таблицы без PK

Reading time 3 min
Views 5.2K
Случаются ситуации, когда в таблицу без первичного ключа или какого-то другого уникального индекса по недосмотру попадают полные клоны уже существующих записей.



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

Как избавить базу от ненужных клонов?
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 11

7 бесплатных курсов для архитекторов решений от Microsoft

Reading time 4 min
Views 32K
Привет, Хабр! Сегодня мы на экваторе серии подборок классных бесплатных курсов от Microsoft. В этой части у нас самые крутые курсы для архитекторов решений. Все они на русском, приступить к ним можно уже сейчас, а по окончании вы получите бейдж. Присоединяйтесь!

Новая серия статей


Следующая серия статей, начало 2020 года


Эта серия статей, 2019 год


Читать дальше →
Total votes 21: ↑18 and ↓3 +15
Comments 5

Строим домашний CI/CD при помощи GitHub Actions и Python

Reading time 12 min
Views 58K

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

Читать дальше →
Total votes 33: ↑32 and ↓1 +31
Comments 15

Information

Rating
Does not participate
Location
Бердск, Новосибирская обл., Россия
Date of birth
Registered
Activity