Как стать автором
Обновить
40
0
Роман Сохарев @greabock

Разработчик

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

Реализуем на Rust пул потоков с балансировкой нагрузки, пользуясь только стандартной библиотекой

Уровень сложностиСложный
Время на прочтение14 мин
Количество просмотров4.7K
image

В программировании «пулом потоков» (thread pool) называется паттерн проектирования, обеспечивающий конкурентное выполнение компьютерной программы. Эта модель также может именоваться «worker crew» (рабочая бригада) или «replicated workers» (самовоспроизводящиеся задачи). Пул держит наготове множество потоков, ожидающих, пока владеющая им программа не выделит ему в конкурентное выполнение ряд задач
— по Википедии


Репозиторий: github.com/arindas/sangfroid

Этот пост написан в основном под впечатлением от лекции Роба Пайка "Конкурентность – это не параллелизм".

image
Читать дальше →
Всего голосов 15: ↑14 и ↓1+21
Комментарии1

Идиоматическая обработка ошибок в Rust

Время на прочтение7 мин
Количество просмотров4.7K

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


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

Поскольку в Rust не предусмотрены исключения, любая функция обязана возвращать либо значение, либо "панику". Когда функция паникует, процесс сразу же завершается и предоставляет вызывающей стороне конкретную обратную связь. Чисто технически можно отлавливать случаи паники в Rust при помощи catch_unwind, но постоянно так делать не рекомендуется. Вместо этого в Rust предлагается перечисление Result; пользуясь им, разработчик вынужден обрабатывать все ошибки сам.

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

image
Читать дальше →
Всего голосов 19: ↑16 и ↓3+17
Комментарии6

Release of Chipmunk v.3

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров781

We released the new version of Chipmunk, software for viewing/analyzing log files. V.3 is wholly reworked with an accent to performance and rethought considering usability. Below short list of the most important changes and a general description.

Read more
Всего голосов 1: ↑1 и ↓0+1
Комментарии2

Rust 1.73.0: новый формат сообщений о панике, изменение в работе с локальными данными потока

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.3K

Команда Rust рада сообщить о новой версии языка — 1.73.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.


Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.73.0 вам достаточно выполнить команду:


rustup update stable

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


Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать дальше →
Всего голосов 18: ↑17 и ↓1+19
Комментарии2

Алгебраические Типы Данных

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6K

Что же такое Алгебраические Типы Данных(Algebraic Data Types(ADT))? Обычно определение состоит из терминов теории типов и обязательно с примером на Haskell. Но на практике всё не так сложно.

Читать далее
Всего голосов 15: ↑12 и ↓3+11
Комментарии15

Ржавое наследование 2. Славянский проброс Get/Set

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.4K

Вторая статья по теме, развивающая мои теоретические выкладки про наследование реализаций из первой части. В этой части пойдет речь о доступе к данным через цепочку вложенных структур. Все также никакой лишней нагрузки в виде: Rc, RefCell, и тд, только no_std и немного nightly в конце. Но чтобы понимать происходящее требуется изучить первую статью: ссыль, хотя и будет предоставлена совсем минимальная вводная.

Продать душу дьяволу
Всего голосов 14: ↑14 и ↓0+14
Комментарии4

Работа с единицами системы СИ на JavaScript

Время на прочтение2 мин
Количество просмотров3K

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

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

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

Одна из таких библиотек - KotUniL, разработанная изначально на Котлине. 

Сразу же после её появления библиотеки автору посыпались запросы по переносу её на JavaScript. Некоторое время назад в рамках обеспечения мультиплатформенности библиотеки разработан вариант библиотеки для JavaScript.

Читать далее
Всего голосов 9: ↑4 и ↓5+2
Комментарии0

Выбор города в интернет-магазине: 90+ моментов, которые стоит учесть при проектировании

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров3.4K

Функция выбора города есть в подавляющем большинстве интернет-магазинов. Почему? Потому что от города могут зависеть условия доставки, цены, ассортимент каталога товаров и многое другое.

Казалось бы — что здесь сложного? Проверил, правильно ли сайт определил город. Если нет — выбрал нужный. И всё. Но на деле при проектировании этого процесса и интерфейса есть много тонкостей, на которые стоит обратить внимание.

В этой статье — чек-лист из 90+ гайдлайнов на основе анализа топ-100 интернет-магазинов РФ по выручке за 2022г.

Читать далее
Всего голосов 5: ↑4 и ↓1+4
Комментарии2

Теорема Байеса для чайников

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров66K

Теорема (формула) Байеса позволяет выяснить вероятность события при условии, что произошло связанное с ним другое событие.

Теорема позволяет рассчитать вероятность события, если причину и следствие поменять местами. Например, мы знаем распространенность симптома среди больных и здоровых. Значит, мы можем вычислить вероятность заболевания от наличия симптома.

Читать далее
Всего голосов 20: ↑19 и ↓1+22
Комментарии35

Краткая история NLP — Natural Language Processing

Время на прочтение6 мин
Количество просмотров3.6K

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

Читать далее
Рейтинг0
Комментарии8

Жарим TOAST в PostgreSQL

Время на прочтение12 мин
Количество просмотров25K

У нас не подгорит!

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

Читать далее
Всего голосов 58: ↑58 и ↓0+58
Комментарии15

Кавычки при вложенных цитатах

Время на прочтение6 мин
Количество просмотров11K

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

Читать далее
Всего голосов 24: ↑20 и ↓4+23
Комментарии30

Распределенные Workflow на PHP. Часть 2

Время на прочтение11 мин
Количество просмотров14K

В первой, теоретической, части статьи мы разобрали зачем нужны Workflow, где они применяются и какие способы их реализации существуют. Наша компания занимается разработкой энтерпрайз-софта — для нас это больная тема. Поэтому мы давно искали инструмент, который позволит легко вписывать новые шаги в любую схему, не ломая существующую бизнес-логику. Нашли и на его основе сделали свою новую разработку. Теперь давайте перейдём к более практической части и разберем, на что способен Temporal PHP SDK.

Меня зовут Антон Титов. Я более 15 лет занимаюсь коммерческой разработкой. Являюсь соавтором Spiral Framework, RoadRunner и Cycle ORM. Основной стек: PHP и Golang.

Читать далее
Всего голосов 23: ↑22 и ↓1+27
Комментарии10

Используем клиентский процессор по максимуму. Часть 1: Rust + WebAssembly

Время на прочтение19 мин
Количество просмотров11K

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

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

Прирост производительности при использовании всех техник оптимизации по сравнению с реализацией на чистом JS может составлять ~1000%: от 8–9 до 100–110 фпс. Это можно проверить на интерактивном онлайн-демо, позволяющем также поиграться с числом потоков, способом вычислений и формой фрактала.
Читать дальше →
Всего голосов 64: ↑64 и ↓0+64
Комментарии9

Анатомия каналов в Go

Время на прочтение34 мин
Количество просмотров178K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Anatomy of Channels in Go" автора Uday Hiwarale.


Что такое каналы?


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


Создание канала


Go для создания канала предоставляет ключевое слово chan. Канал может передавать данные только одного типа, данные других типов через это канал передавать невозможно.

Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии7

Как правильно верстать в 2022 году. Часть 1

Время на прочтение11 мин
Количество просмотров91K

Меня зовут Николай, я Frontend-разработчик IT-компании Relog. Хочу рассказать о самых распространённых ошибках в вёрстке современных проектов.

Дело в том, что лишь малая часть современных фронтендеров обращает внимание на работу с HTML и CSS, предпочитая готовые решения, вроде UI-библиотек и систем сеток. Но эти решения неидеальные и приходится дописывать обёртки вокруг них, видоизменять код, переписывать стили и совершать прочие действия для соответствия требованиям проекта. Тут-то и начинаются проблемы: вёрстка местами становится избыточной, стили переназначются через important и с каждым релизом проект всё сложней поддерживать. Я уже не говорю об удобстве использования и доступности. Об этом думают вообще в последнюю очередь.

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

Читать далее
Всего голосов 41: ↑39 и ↓2+44
Комментарии42

Как получить инвестиции на первый проект… и доделать его

Время на прочтение5 мин
Количество просмотров19K

Вы придумали гениальную идею игры или даже подготовили прототип и теперь задаетесь вопросом: “Где взять деньги на реализацию?” Разберемся с возможными способами и подводными камнями с сооснователем студии Uniday Games Алиной Ситбаталовой на примере проекта «Puzzle Squad», который она делает со своей командой.

Читать далее
Всего голосов 8: ↑7 и ↓1+6
Комментарии0

Kubernetes в миниатюре для локального запуска: k0s, MicroK8s, kind, k3s и Minikube

Время на прочтение12 мин
Количество просмотров38K

Тех, кто работал с Kubernetes, вряд ли удивит ситуация, когда внезапно пришла идея по автоматизации, унификации, преобразованию чего-либо в кластере, но так, чтобы не волноваться за конечный результат. Когда возникает потребность в какой-то песочнице, чтобы провести тестирование, проверить гипотезу «на коленке», не используя рабочий Kubernetes-кластер.

В таких случаях приходят на помощь «мини-кластеры». Их можно запустить на рабочем ПК, «поиграться» с примитивами, построить новую структуру, а после завершения эксперимента — безвозвратно удалить (ведь это уже отработанный материал!).

Отвечая на эту потребность, разработчики со всего мира пришли со своими решениями для быстрого запуска облегчённого варианта Kubernetes. Все они по-разному организованы и, конечно, обладают разными возможностями. Чем пользоваться, зависит от нужд и предпочтений. Чтобы получше разобраться в них или вообще понять, с чего стоит начать, предлагаем результаты нашего беглого знакомства с некоторыми популярными решениями. Благо, все они достаточно хорошо документированы (как на сайтах, так и в CLI), что существенно ускоряет первое погружение и взаимодействие с ними. В конце статьи будет сводная таблица с основными особенностями решений.

Читать далее
Всего голосов 41: ↑40 и ↓1+49
Комментарии28

Отказоустойчивое взаимодействие с внешними сервисами

Время на прочтение9 мин
Количество просмотров14K

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

О чем статья:

•  Синхронное и асинхронное взаимодействие; 

•  Зависимость доступности от использования синхронного взаимодействия;

•  Способы избавления от синхронного взаимодействия;

•  Избавление от синхронного взаимодействия с внешними сервисами в PHP.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии2

Real-time мониторинг тормозящих запросов PostgreSQL своими руками за полчаса

Время на прочтение4 мин
Количество просмотров16K

В моей практике не раз были ситуации, когда хотелось посмотреть, какие именно запросы долго тупили в базе в определённый (конкретный) момент времени. А может, запросы не тупили, но каких-то запросов было слишком много.


Ключевое слово — в конкретный момент времени. Например, база непонятно от чего напряглась на 5 минут, потом всё само рассосалось, и очень хочется знать, почему. Отчёты за сутки, присылаемые dba на основе pg_stats_statements, не всегда проясняют ситуацию. Другие графики и логи могут помочь. Но всё же хочется не гадать на кофейной гуще, а конкретно посмотреть, что такому-то запросу в такое-то время было плохо, или его было много.


Можно, конечно, подключить системы а ля okmeter, но okmeter стоит денег. Да ещё и отсылает запросы в чужое облако — что, понятно, не в каждой организации можно считать безопасным.


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

Читать дальше →
Всего голосов 10: ↑9 и ↓1+11
Комментарии8

Информация

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