Pull to refresh
-3
0

Software Engineer

Send message

Hono vs. H3 vs. HatTip vs. Elysia — современные замены Express для сервера (или без сервера)

Level of difficulty Medium
Reading time 8 min
Views 2K

H3 отмечает, что Express.js - старый и малоразвивающийся фреймворк, являющийся не оптимальным выбором для новых проектов из-за потенциальных проблем безопасности и утечек памяти, что, к слову, касается и Koa.

В нашей статье мы сделаем акцент на фреймворках, поддерживающих запуск service workers на серверной стороне и современный стандарт Fetch API, поскольку это позволяет им работать в бессерверных и Edge-окружениях, таких как Cloudflare Workers. Это, к слову, и причина, почему Fastify не будет рассматриваться в нашей статье, несмотря на эксперимент fastify-edge, который продолжался два года (кстати, была написана интересная статья о переходе от Node к средам рабочих процессов, с которой я рекомендую ознакомиться).

Worker Runtimes воплощают первоначальное обещание NodeJS: использование одного языка и возможность обмена кодом между клиентом и сервером. Однако на практике это не осуществилось, и API Node и браузеров пошли по разным путям. Worker Runtimes вновь объединяют эти возможности. Больше информации здесь.

Hono, H3, HatTip и Elysia - это современные фреймворки HTTP-серверов, также известные как промежуточные программы веб-сервера нового поколения. Они работают везде, на любом JS-рантайме, включая бессерверные и Edge-среды выполнения. Это означает, что они могут быть использованы не только на серверах Node.js. Кроме того, все они поддерживают TypeScript.

Далее мы поговорим о каждом их них по отдельности и сравним некоторые различия.

Все они поддерживают Web Fetch API (объекты Request/Response), но здесь я покажу их API, наиболее похожие на Express, чтобы было проще ориентироваться.

Читать далее
Total votes 7: ↑7 and ↓0 +7
Comments 1

Как графы знаний и LLM могут друг другу помочь

Level of difficulty Medium
Reading time 4 min
Views 3.1K

Предобученные языковые модели генерируют качественный текст, сравнимый по качеству с человеческим (иногда даже превосходящий его). Но некоторые проблемы остаются даже у лучших LLM — сеть не понимает, что говорит. Может получаться хоть и виртуозный с точки зрения грамматики и лексики, но всё-таки неверный по смыслу результат. 

Читать далее
Total votes 14: ↑14 and ↓0 +14
Comments 3

Градиентный бустинг. Реализация с нуля на Python и разбор особенностей его модификаций (XGBoost, CatBoost, LightGBM)

Level of difficulty Hard
Reading time 28 min
Views 5.3K

На сегодняшний день градиентный бустинг (gradient boosting machine) является одним из основных production-решений при работе с табличными, неоднородными данными, поскольку обладает высокой производительностью и точностью, а если быть точнее, то его модификации, речь о которых пойдёт чуть позже.

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

Читать далее
Total votes 20: ↑20 and ↓0 +20
Comments 7

Локальные нейросети. Аналог ChatGPT-3.5 на домашнем ПК: OpenChat 7B превосходящая 70B, DeepSeek для кода уровня ChatGPT

Reading time 8 min
Views 75K

Есть много локальных аналогов ChatGPT, но им не хватает качества, даже 65B модели не могут конкурировать хотя бы с ChatGPT-3.5. И здесь я хочу рассказать про 2 открытые модели, которые всё-таки могут составить такую конкуренцию.

Речь пойдет о OpenChat 7B и DeepSeek Coder. Обе модели за счет размера быстры, можно запускать на CPU, можно запускать локально, можно частично ускорять на GPU (перенося часть слоев на GPU, на сколько хватит видеопамяти) и для такого типа моделей есть графический удобный интерфейс.

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

UPD: Добавлена информация для запуска на Windows с ускорением на AMD.

Читать далее
Total votes 107: ↑105 and ↓2 +103
Comments 87

Как применять метод PCA для уменьшения размерности данных

Level of difficulty Medium
Reading time 9 min
Views 8.9K

Одной из ключевых задач при работе с данными является уменьшение размерности данных, чтобы улучшить их интерпретируемость, ускорить алгоритмы обучения машин и, в конечном итоге, повысить качество решений. Сегодня мы поговорим о методе, который считается одним из наиболее мощных инструментов в арсенале данных разработчиков — методе главных компонент, или PCA (Principal Component Analysis).

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

Масштабирование SSR-приложений

Reading time 8 min
Views 4K

Привет! Меня зовут Олег Драпеза, я работаю техлидом в Тинькофф в команде Coretech Frontend. Мой основной проект — SSR мета-фреймворк tramvai, на котором работают несколько десятков фронтовых приложений Тинькофф.

Сегодня хочется поговорить про масштабирование SSR-приложений. С SSR есть две проблемы: React и Node.js. Они же — сильные стороны подхода, потому что предоставляют отличный DX, общий код и хорошие возможности для поддержки frontend-разработчиками. Разберемся, с какими сложностями мы можем столкнуться при использовании React и Node.js и как с ними быть. 

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

Имплементируем WebSocket протокол на Go

Reading time 9 min
Views 22K

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

Или узнать с какой простотой Go стал одним из самых популярных языков программирования для написания сетевых приложений.

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

Почему мьютексы в Rust реализованы именно так

Reading time 17 min
Views 13K

Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так:

  • Они не хотят, чтобы мьютекс содержал данные, только блокировку.
  • Они не хотят управлять «защитным» значением, разблокирующим мьютекс при сбросе, в частности, они просто хотят вызывать операцию unlock, потому что им кажется, что это более явное действие.

Такие изменения превратили бы Rust mutex API в эквивалент C/Posix mutex API. Однажды я даже видел, как один разработчик пытался использовать Mutex<()> и разные хитрости, чтобы его имитировать.

Однако у такого стремления есть проблема: эти два аспекта Mutex неразрывно связаны друг с другом, а также с гарантиями безопасности Rust в целом — изменение одного из них или обоих откроет возможности для возникновения незаметных багов и повреждений из-за гонок данных.

Использование API мьютексов в стиле C, состоящего из набора косвенно защищаемых данных и из функций lock и unlock было бы опрометчивым в Rust, потому что это позволяет безопасному коду легко вносить ошибки, нарушающие безопасность памяти и вызывающие гонки данных.

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

В этом посте я разберу типичный C mutex API, сравню его с типичным Rust mutex API, и расскажу о том, что произойдёт, если мы изменим Rust API так, чтобы он напоминал C.
Читать дальше →
Total votes 60: ↑60 and ↓0 +60
Comments 26

Настоящая* перегрузка операторов в JavaScript

Reading time 5 min
Views 7.7K

Одна из активно реквестируемых фич в JavaScript и TypeScript — перегрузка операторов. Без инфиксной записи, к примеру, получаются очень громоздкими вычисления с векторами или множествами. Тем не менее, используя сильное колдунство некоторые знания о том, как сейчас работают операторы в JavaScript, мы можем реализовать все самостоятельно.

Проникнуться черной магией
Total votes 15: ↑13 and ↓2 +11
Comments 5

Турель из Portal своими руками

Reading time 9 min
Views 24K

А вы играли в Portal? Даже если нет, сборка личной автоматической турели с детекцией движения и оригинальным голосовым сопровождением наверняка окажется как минимум любопытной, ведь такая диковина может не просто украсить интерьер, но и стать, к примеру, отличным подарком для детей.
Читать дальше →
Total votes 89: ↑88 and ↓1 +87
Comments 21

Ищем простые числа до триллиона за тридцать минут

Reading time 21 min
Views 22K
image

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

Сегодня я хотел бы поделиться с вами различными вариантами реализации поиска простых чисел на языке C#, начиная с классических алгоритмов — решета Эратосфена, Сундарама и Аткина, и кончая различными оптимизациями (сегментация, факторизация). Особый упор я делал на простоту: самый быстрый из алгоритмов, который мне удалось получить, содержит 120 строк кода и ищет простые числа до триллиона меньше, чем за 30 минут, а до миллиарда — меньше, чем за секунду (это далеко от производительности лучших из существующих библиотек по поиску простых чисел, но эти библиотеки обычно содержат свыше 4000 строк кода).
В заключение мы применим самую быструю реализацию для поиска максимального расстояния между двумя соседними простыми числами до триллиона. Прежде чем заходить под кат, я предлагаю вам попытаться угадать ответ. Для сравнения, для простых чисел до 100 максимальное растояние равно 8 (между соседними простыми числами 89 и 97), а до тысячи — 20 (между 887 и 907).

Весь исходный код можно найти на гитхабе.
Читать дальше →
Total votes 37: ↑37 and ↓0 +37
Comments 14

15 игр, которые прокачивают логику, алгоритмы, ассемблер и силу земли

Reading time 8 min
Views 101K


Есть «Super Mario», признанная классика видео игр. Есть «Doom», который запускают на чайниках и тестах на беременность. Есть супер-популярные по статистике twitch.tv игры («League of Legends», «GTA V», «Fortnite», «Apex Legends») которые стримят пятая часть всех стриммеров.

А есть игры, на которые очень мало обзоров, но они супер крутые — игры про алгоритмы. Игры, в которых можно кодить на ретро-компьютере; игры, которые надо взламывать; игры, где можно программировать контроллеры или поведение персонажей; игры, где можно создавать свою игру внутри игры.

Под катом подборка классных игр про алгоритмы за последние 10 лет. Если что-то упустила — буду рада дополнениям.

Еще я создала канал в Telegram: GameDEVils, буду делиться там клевыми материалами (про геймдизайн, разработку и историю игр).
Читать дальше →
Total votes 98: ↑93 and ↓5 +88
Comments 98

Ещё 20+ игр, которые прокачивают логику, алгоритмы и радуют умный мозг [по следам комментариев на Habr]

Reading time 9 min
Views 116K
image

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

Еще я веду канал в Telegram: GameDEVils, делюсь там клевыми материалами (про геймдизайн, разработку и историю игр).
Читать дальше →
Total votes 83: ↑82 and ↓1 +81
Comments 59

Хватит совать в детей интерфероны

Reading time 9 min
Views 118K
Интерфероны? Да в задницу их!


Это, как многие думают, концентрат иммунитета. Коротко — нет.

Что происходит:

  1. Ребёнка с симптомами ОРВИ приводят к педиатру.
  2. Педиатр прописывает витамин С, разбавленный сахар и интерферон в форме ректального суппозитория. Если витамин С и дорогой сахар в целом безопасны, то вот с интерфероном это далеко не так.
  3. Уровень интерферона в крови — это сложнейшая система, дающая сигнал к запуску процесса иммунного ответа, связующее звено врождённого и приобретённого иммунитета, но добавление интерферона в организм не означает, что иммунитет будет «сильнее». Упрощая, интерфероны тормозят работу заражённых клеток и дают другим клеткам вокруг поражённой вирусом сигнал, что произошло вторжение, останавливают деление вируса внутри клетки и стимулируют работу Т- и В-лимфоцитов. Так же они способны влиять на деление клеток, что важно при онкологии, например.

Изначально этот класс белков случайно открыли в 1957 году вирусологи Алик Айзекс и Жан Линдеман. У них возникла проблема с мышами, которые не заболевали при введении вируса. Как выяснилось позже, причина была в том, что эти мыши уже болели другой вирусной инфекцией, что приводило к выбросу белков ранее неизвестного класса — интерферонов. Поначалу казалось, что наконец найдено универсальное решение против вирусных болезней, но, как обычно, дальнейшие исследования выявили множество ограничений. Например, при введении серьёзных дозировок интерферона альфа можно получить жёсткую депрессию, биполярное расстройство и другие ментальные нарушения вплоть до бреда и галлюцинаций.

Поэтому сегодня я попробую объяснить, почему этот класс препаратов вовсе не добрые капельки от гриппа, а серьёзное лечение с кучей побочных эффектов. Ну и бесполезность введения его в нос и per rectum тоже затронем.
Читать дальше →
Total votes 196: ↑188 and ↓8 +180
Comments 231

Как компьютеры рисуют странные формы: метаболы, marching squares, электрические поля

Reading time 15 min
Views 7.2K

Пару месяцев назад я наткнулся на очень красивые анимации. В основе этих анимаций лежат несколько простых окружностей, но выделяет их то, насколько органично они сливаются друг с другом. Мне стало любопытно, как это работает, и моё исследование оказалось гораздо интереснее, чем я ожидал. Выяснилось, что соединяющиеся друг с другом круглые объекты называются метаболами (metaballs) и с ними связано множество математических и вычислительных понятий. Если вы в чём-то похожи на меня, то посмотрев на эти анимации, вы бы сразу задались вопросом, как подойти к решению такой задачи. Допустим, нам поручили разобраться с тем, как генерировать метаболы. Как сформулировать эту задачу? Что означает возможность органичного слияния окружностей? Как компьютер рендерит нечто подобное на экране? Всё это очень сложные вопросы.

В этой статье мы совершим путешествие и узнаем, как люди решают эту задачу. Базовый алгоритм, играющий неотъемлемую роль в генерации таких анимаций, называется marching squares. Он используется во многих сферах графики, а также медицинской визуализации. Но каким бы полезным ни был алгоритм, самым важным в нашем путешествии будет то, насколько изящен этот подход при решении подобной задачи. Есть истинная красота в том, что мы берём расплывчатую задачу и преобразуем её в конкретный решаемый вид. Главная цель этой статьи — дать вам ощущение радости при исследовании смены точек зрения, превращающих подобные сложные задачи в решаемые.
Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Comments 7

Рекомендательные системы: проблемы и методы решения. Часть 1

Reading time 14 min
Views 23K

Привет! Я хочу рассказать вам о рекомендательных алгоритмах. Мы в Prequel создаем фильтры и эффекты для редактирования фото и видео. Создаем давно, и постепенно этих эффектов стало очень много. А с ними и пользовательского контента. Мы захотели помочь с выбором из этого многообразия, для чего нам и понадобилась система рекомендаций. Если масштабы вашей системы такие, что пользователям сложно в ней ориентироваться, возможно, что рекомендации могут помочь и вам.

Задуманный систем оказался слишком объемным для одной статьи, поэтому мы разбили его на две части. Перед вами первая, она посвящена постановке задачи и базовым методам решения. В этой части мы разберем коллаборативные модели от матричного разложения (на примере ALS) до neural collaborative filtering. Кроме того, будет небольшой обзор метрик и техник борьбы с проблемой холодного старта.

Читать далее
Total votes 9: ↑9 and ↓0 +9
Comments 4

Анатомия рекомендательных систем. Часть первая

Reading time 14 min
Views 74K
Я работаю дата-саентистом в компании CleverDATA. Мы занимаемся проектами в области машинного обучения, и один из наиболее частых запросов на разработку основанных на машинном обучении маркетинговых решений — это разработка рекомендательных моделей.

В данной статье я расскажу о рекомендательных системах, постараюсь дать максимально полный обзор существующих подходов и на пальцах объясню принципы работы алгоритмов. Часть материала базируется на неплохом курсе по рекомендательным системам лаборатории MovieLens (которая большинству знакома по одноименному датасету для тестирования рекомендаций), остальное – из личного опыта. Статья состоит из двух частей. В первой описана постановка задачи и дан обзор простых (но популярных) алгоритмов рекомендаций. Во второй статье я расскажу о более продвинутых методах и некоторых практических аспектах реализации.

Источник
Читать дальше →
Total votes 55: ↑50 and ↓5 +45
Comments 15

Использование потоков WebAssembly из C, C++ и Rust

Reading time 12 min
Views 9K


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

В этой статье вы узнаете, как использовать потоки WebAssembly для переноса многопоточных приложений, написанных на языках C, C++ и Rust, в веб-среду.
Читать дальше →
Total votes 38: ↑38 and ↓0 +38
Comments 20

В поисках упорядоченного множества в Python: разбираемся с теорией и выбираем лучшую реализацию

Reading time 6 min
Views 13K


Множество (Set) — структура данных, которая позволяет достаточно быстро (в зависимости от реализации) применить операции add, erase и is_in_set. Но иногда этого не достаточно: например, невозможно перебрать все элементы в порядке возрастания, получить следующий / предыдущий по величине или быстро узнать, сколько элементов меньше данного есть в множестве. В таких случаях приходится использовать Упорядоченное множество (ordered_set). О том, как оно работает, и какие реализации есть для питона — далее.

Читать дальше →
Total votes 31: ↑27 and ↓4 +23
Comments 1

Information

Rating
Does not participate
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity