Обновить
6
0
Иван GiB$ON@gibson_dev

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

Отправить сообщение

Логическая репликация из PostgreSQL в Erlang

Время на прочтение5 мин
Охват и читатели7.4K

Довольно типичная схема при разработке системы, когда основная логика обработки сосредоточена в приложении (в нашем случае Erlang), а данные для работы этого приложения (настройки, профили пользователей и т. д.) в базе данных (PostgreSQL). Приложение Erlang кэширует настройки в ETS для ускорения обработки и снижения нагрузки на БД путём отказа от постоянных запросов. При этом изменение этих данных происходит через отдельный (возможно, внешний) сервис.


В таких ситуациях встаёт задача поддержания закэшированных данных в актуальном состоянии. Есть разные подходы для решения этой задачи. Один из них — это логическая репликация PostgreSQL. О нем и пойдёт речь ниже.

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

Как я несколько лет боролся с прокрастинацией и победил: полное практическое руководство

Время на прочтение8 мин
Охват и читатели377K

Постоянно откладываешь дела на потом и не видишь в этом проблемы? Мне это знакомо. Расскажу как не повторить моих ошибок и почему пора это прекращать. Не откладывай эту статью на потом!

Начать читать

Управление вентиляцией: собираем, интегрируем, экономим

Время на прочтение11 мин
Охват и читатели41K

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

А такой системой надо умно управлять. Об этом сегодня и поговорим.

Читать далее

Руководство по Node.js, часть 9: работа с файловой системой

Время на прочтение11 мин
Охват и читатели159K
Сегодня, в девятой части перевода руководства по Node.js, мы поговорим о работе с файлами. В частности, речь пойдёт о модулях fs и path — о файловых дескрипторах, о путях к файлам, о получении информации о файлах, об их чтении и записи, о работе с директориями.



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

Эксплойтинг браузера Chrome, часть 1: введение в V8 и внутреннее устройство JavaScript

Время на прочтение29 мин
Охват и читатели27K


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

Работая дверями в Интернет, браузеры в то же время создают существенные угрозы целостности персональных вычислительных устройств. Почти ежедневно мы слышим новости наподобие "баг Google Chrome активно используется как Zero-Day" или "Google подтвердила четвёртый эксплойт Zero-Day Chrome за 2022 год". На самом деле, эксплойты браузеров не представляют собой ничего нового, их находят уже долгие годы, начиная с первого эксплойта для удалённого исполнения кода, задокументированного как CVE-1999-0280. Первым потенциально публичным раскрытием браузерного эксплойта, используемого в реальных условиях, стал эксплойт Aurora браузера Internet Explorer, который атаковал Google в декабре 2010 года.
Читать дальше →

Отладка микроконтроллера через Type-C кабель

Время на прочтение4 мин
Охват и читатели10K

Как избавиться от дополнительных разъемов на печатной плате IoT-устройств при наличии разъема Type-C?

Этим вопросом мы задались, когда в своих разработках начали переход с micro-USB на 24pin Type-C. В этой статье я постараюсь описать наш опыт использования Type-C, расскажу о распиновке разъемов Type-C для устройств с ESP32, STM32, Миландра, RISC-V или ARM, а также о том, что внутри кабеля Type-C и как его выбрать.

Читать далее

Почему набор инструкций AVX 512 полезен для RPCS3?

Время на прочтение14 мин
Охват и читатели7.8K

Часто приходится слышать, что важность отличий между наборами инструкций на современных компьютерах преувеличена и, в самом деле, сложно не согласиться с таким наблюдением. Поскольку стандартная программа на 90 % состоит из простейших инструкций для АЛУ, загрузки и сохранения, а также инструкций ветвления, а также с учётом, что на таком базовом уровне разбежки между различными наборами команд очень невелики, такой вывод просто напрашивается.

Но RPCS3, эмулятор приставки Sony PlayStation-3 - не просто обычная программа. Даже если вам не доводилось работать с самим эмулятором, вам наверняка приводили RPCS3 в пример как образец потребительского ПО, в котором используются сильные стороны AVX-512. В этой статье я расскажу, почему именно новые инструкции и возможности, введённые в семействе AVX-512, так полезны для эмуляции PS3. В некоторых ситуациях использование 512-разрядных инструкций может положительно сказываться на RPCS3, но в этом посте будет рассказано, почему новые инструкции полезны и для 128-разрядных, и для 256-разрядных конфигураций.

Читать далее

Нагрузочное тестирование в 1С:ERP

Время на прочтение15 мин
Охват и читатели19K

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

Читать далее

Приручаем многопоточность в Node.js (часть 5/5: автомасштабирование под нагрузку)

Время на прочтение19 мин
Охват и читатели9.1K

В прошлых частях цикла мы:

- рассмотрели базовые концепты работы с многопоточностью в JavaScript на примере среды Node.js;

- научились формировать общую очередь и каналы обмена данными и сигналами, чтобы более эффективно управлять загрузкой потоков;

- использовали разделяемую память и Atomics-операции как самое быстрое средство обмена большими блоками данных;

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

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

В данном случае эффективность - это не про максимально возможную скорость обработки каждой отдельной задачи, а про сбалансированное использование аппаратных ресурсов с учетом тех ограничений, на которые мы готовы пойти. Особенно актуально это для различных "облачных" размещений, где оплата идет за фактически потребленные CPU и RAM.

Читать далее

Приручаем многопоточность в Node.js (часть 3/5: разделяемая память, атомарные операции и блокировки)

Время на прочтение12 мин
Охват и читатели1K

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

Но тут возникает две проблемы:

1. как эффективно доставить данные в обрабатывающий поток

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

В этом нам как раз и помогут два рассматриваемых в этой статье концепта работы с многопоточностью: разделяемая (shared) память и потокобезопасные (thread-safe, Atomics) операции над ней.

Читать далее

Российские хостеры с оплатой зарубежными картами

Время на прочтение5 мин
Охват и читатели8.4K

Всем привет! Меня зовут Леонид, я владелец сервиса Поиск VPS. Ранее я уже писал про оплату виртуальных серверов и других хостинговых услуг при помощи SWIFT и криптовалют, а также о российских хостерах, предоставляющих услуги за границей с возможностью оплаты картами, выпущенными в Российской Федерации. В данном материале я решил отобрать хостеров, которые предоставляют услуги в России и могут принять оплату картой, выпущенной за пределами РФ.

Читать далее

Как Discord прокачивает сетевые диски, сводя задержки к минимуму

Время на прочтение9 мин
Охват и читатели6.5K

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

Для предоставления такого колоссального объёма данных эксплуатируется набор кластеров NoSQL-баз данных (на основе ScyllaDB), и каждый из этих кластеров является источником истины для соответствующего множества данных. Поскольку Discord — это платформа для чатов в реальном времени, требуется, чтобы базы данных справлялись с плотным потоком запросов настолько быстро, насколько возможно.

Читать далее

Приручаем многопоточность в Node.js (часть 2/5: очередь, каналы и координатор)

Время на прочтение16 мин
Охват и читатели11K

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

Но вот неприятность: такой алгоритм очень неравномерно нагружает потоки и не полностью утилизирует их возможности - пока кто-то простаивает, другой уже копит очередь. Как это можно обойти?

Читать далее

Как устроены дисплеи. Подробный разбор

Уровень сложностиПростой
Время на прочтение61 мин
Охват и читатели108K

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

Основные характеристики — всякие яркости, HDRы, контрасты и цветовые охваты, что они значат и зачем нужно 120Гц, мы разобрали в предыдущей части.

Осторожно, трафик >

Способ снижения зрительного напряжения. Часть 1

Время на прочтение9 мин
Охват и читатели18K

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

UVA излучение >

Личный опыт: перезапуск тимлидства в растущей IT-компании. Часть 1

Время на прочтение6 мин
Охват и читатели4.7K

Я Саша Хрущев, технический директор IT-компании WINFOX. Рассказываю, как мы пересмотрели свой подход к тимлидству, с какими трудностями столкнулись в процессе и какие результаты это дало.

Читать далее

Эффективная FIFO-обработка для Node.js и Chrome

Время на прочтение9 мин
Охват и читатели10K

"По классике" FIFO-очередь для обработки некоторого потока задач обычно реализуется в виде связанного списка элементов. Но для JavaScript такой подход нехорош - он требует либо создания "обвязки" над элементом очереди в виде дополнительного объекта, содержащего ссылки на сам элемент и указатель на следующий, либо превращения элемента в объект и расширения его таким же указателем.

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

Но если внимательно посмотреть на эту схему, то можно заметить, что сами элементы очереди A, B, C линейно упорядочены. Так нельзя ли использовать в качестве очереди обычный массив с его .push() и .shift()?..

Насколько это будет эффективно, какие грабли встретятся на этом пути, и как их можно обойти - сегодня об этом.

Читать далее

Атакуем синезубого короля

Время на прочтение10 мин
Охват и читатели24K

Английское слово Bluetooth -- буквальный перевод прозвища короля викингов Харальда I Синезубого. Он правил на территории современных Дании и части Норвегии в X веке и вошел в историю как правитель, который объединил враждовавшие датские племена в единое королевство.

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

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

Но задумывался ли кто-то над тем:

Читать далее

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

Время на прочтение32 мин
Охват и читатели53K

Интро: почему я написал эту статью


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



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


Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.


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

Как мы отказались от JPEG, JSON, TCP и ускорили ВКонтакте в два раза

Время на прочтение24 мин
Охват и читатели175K

На протяжении всей жизни мне приходится экономить вычислительные и сетевые ресурсы: сначала были компьютеры с 300 кГц (кило — не гига!) и 32 Кбайт RAM, интернет по dial-up. Потом я решал олимпиадные задачки. Теперь имею дело с терабайтами трафика и 50 млрд событий в сутки. И хотя современные телефоны в 1 000 раз мощнее любого оборудования двадцатилетней давности, я до сих пор оптимизирую. Думал даже, что это со мной что-то не так. Но потом понял, что все постоянно что-нибудь оптимизируют. 

Эта статья в меньшей степени о том, почему нужно бороться за производительность, и в большей о том, на что сейчас стоит заменить устаревший стек из JPEG, JSON, gzip и TCP — и как это сделать. 

Спойлер: у нас есть решение и мы его не только показываем — ссылки на open source в конце статьи.

Читать далее

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность