Pull to refresh
12
0
Artem Ukrainskiy @Ukrainskiy

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

Send message

Тысяча и одна библиотека С++

Reading time65 min
Views17K

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

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++
Total votes 74: ↑73 and ↓1+84
Comments23

Как извлечь пользу из статической типизации

Reading time29 min
Views15K

Эта статья о том, как извлечь максимум пользы из статической системы типов при дизайне вашего кода. Статья пытается быть language agnostic (получается не всегда), примеры на Java и взяты из жизни.

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

Создание процессора с нуля для чайников

Reading time18 min
Views29K

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

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

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

Читать далее
Total votes 101: ↑101 and ↓0+124
Comments67

Как я создал архиватор из задачки с техсобеса: сжатие файлов с помощью RLE

Level of difficultyMedium
Reading time17 min
Views9.2K

Привет, меня зовут Рома. Я работаю в KTS на позиции Python backend-разработчика. 

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

Читать далее
Total votes 57: ↑53 and ↓4+59
Comments9

PHP функции и способы их применения

Level of difficultyEasy
Reading time11 min
Views4.1K

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

Читать далее
Total votes 24: ↑23 and ↓1+27
Comments31

У меня нет конструктора, но я должен инициализироваться

Reading time13 min
Views9.8K

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

Главная ошибка была в том, что ты в это вообще ввязался — в этом никаких сомнений.

Ещё когда я впервые взялся проходить курс по C++ несколько лет назад, меня учили, что, если я не предоставлю собственного конструктора, то компилятор сам подберёт ему замену — своего рода конструкторы, действующие по умолчанию. Я решил подробнее в этом разобраться, особенно меня волновали случаи, которые выглядят примерно так:

Читать далее
Total votes 15: ↑13 and ↓2+21
Comments16

Дом, милый дом: нюансы работы с ClickHouse. Часть 2, репликация

Level of difficultyMedium
Reading time12 min
Views4.5K

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

Давайте разбираться!
Total votes 8: ↑8 and ↓0+9
Comments1

Графовые сети в рекомендательных системах

Reading time10 min
Views3.5K

Всем привет! Меня зовут Александр Тришин, я работаю DS в команде персональных рекомендаций Wildberries и занимаюсь графовыми нейросетями.

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

В этой публикации я расскажу вам о LightGCN и не только. Вспомним, что такое сверточные графовые сети, их основные компоненты и принципы работы: подробно разберем модель на user-item графе, после перейдём к item-item графу. Затем познакомимся с моделью LightGCN: рассмотрим архитектуру, процесс обучения, недостатки (медленная сходимость и смещение в популярное) и варианты их устранения. А в конце посмотрим, как это всё применять на практике: обучим сетку на датасете Movielens-25m, замерим метрики, столкнёмся с проблемами LightGCN и вместе их решим! Ноутбук прилагается 🤓

Читать далее
Total votes 12: ↑9 and ↓3+8
Comments0

Запросы двойной надежности

Level of difficultyMedium
Reading time9 min
Views5.4K

Отправляем запрос на 20 000 000 евро, на перестановку 900 ордеров на бирже. Что может пойти не так? 

Сегодня я расскажу, как не терять пару миллиардов клиентских денег, когда уж очень нужно что-то массово сделать на бирже. Этот текст про неявную и, казалось бы, незаметную проблему, которая ждет нас в недрах работы с любыми запросами, которые могут исполниться не до конца – в частности, с HTTP-запросами. Удивительно, как мало об этой проблеме думают и насколько мало инструментов для её решения. 

Задача была такова – реализовать массовое управления биржевыми ордерами, причём не только в рамках одной биржи, а в целом по всей планете. И чтобы оно точно отработало. 

В повествовании будут клиенты, серверы и котики. С котиками всегда интереснее.

Читать далее
Total votes 22: ↑19 and ↓3+21
Comments18

Go vs PHP: делимся материалами Lamoda Tech
PHP/Go
Meetup

Reading time2 min
Views5.5K

Потребность в Golang-разработчиках растет с каждым годом, и наша компания не исключение. Мы постоянно ищем специалистов, а особенно рады тем, кто знает два языка — и Go, и PHP. И готовы переучивать со старой доброй «пыхи» и растить новых гоферов.

Две недели назад мы собрались в Lamoda Home, чтобы выяснить, существуют ли преимущества Go перед PHP. Серьезный спор проходил сразу на двух площадках: в зале и в трансляции митапа. Сегодня делимся материалами мероприятия. Ищите себя на фото, если были в этот день с нами!

Читать далее
Total votes 11: ↑6 and ↓5+2
Comments5

Руководство по межпроцессному взаимодействию (IPC) в Linux — Часть 1

Level of difficultyMedium
Reading time15 min
Views4.5K

Представляю вашему вниманию перевод работы A guide to inter-process communication in Linux. Объём данной работы большой, поэтому перевод будет выполнен в виде нескольких отдельных статей:

Читать далее
Total votes 10: ↑10 and ↓0+12
Comments2

«Hello, World!» от мира сжатия данных. Канонический алгоритм Хаффмана

Level of difficultyEasy
Reading time7 min
Views5.3K

На данную тему была написана не одна сотня статей, но во всех, что видел, для построения двоичного дерева поиска использовались структуры по типу приоритетной очереди, хотя достаточно отсортировать массив частот в порядке убывания и отбрасывать последние две буквы с самыми маленькими частотами из алфавита, объединяя их в новую "псевдо-букву", но можно даже обойтись без постройки бинарного дерева поиска, чтобы сжать данные. В этой статье хотел представить реализацию данного алгоритма на языке C++.

Читать далее
Total votes 6: ↑5 and ↓1+4
Comments18

Сбросить балласт. Аккуратное отключение лишних фич

Level of difficultyEasy
Reading time7 min
Views8.2K


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

Что тут говорить, если самая простая программа сегодня весит под 100 МБ, как целая операционная система со всем софтом несколько десятилетий назад. Кто-то говорит, что причиной этого является закон Мура и рост производительности процессоров в геометрической прогрессии. В связи с этим даже интересно, каким был бы софт при замедлении CPU в двадцать раз.

Но есть выход из сложившейся ситуации: аккуратное отключение лишних функций в раздувшемся софте.
Читать дальше →
Total votes 25: ↑25 and ↓0+36
Comments5

Поиск без границ: путь к векторному поиску в Uzum Market

Level of difficultyMedium
Reading time11 min
Views1.9K

Привет, с вами снова Даша и Uzum Market. В прошлый раз мы глубоко погрузились в пайплайн работы поиска нашего маркетплейса, и я обещала вам вернуться с новостями о его улучшении. Так вот, время пришло, и сегодня мы поговорим про наш опыт внедрения векторного поиска!

Читать далее
Total votes 10: ↑10 and ↓0+13
Comments5

«Физика для программистов» — как физтехи применяют её в приложениях. Дифракция. Интеграл Френеля

Level of difficultyMedium
Reading time4 min
Views5.3K

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

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

Моделируем флюиды, огонь и дым в режиме реального времени

Reading time15 min
Views4.5K

Замечания о математике, алгоритмах и методах, применяемых при компьютерной симуляции флюидов (например, огня и дыма) в режиме реального времени.

Исходный код к этой статье выложен на GitHub.

Огонь как явление очень интересен с точки зрения компьютерной графики. Раньше огонь было принято имитировать. Например, в фильме «Властелин колец» Питера Джексона для изображения огня использовались спрайты с огромным количеством дыма (на тот момент симуляция флюидов обходилась слишком дорого, даже при бюджете блокбастера). Когда требовалось моделировать огонь в режиме реального времени, например, в видеоиграх, использовались почти исключительно нефизические подходы.

Читать далее
Total votes 32: ↑30 and ↓2+38
Comments4

Геймдев, про который мы забыли: как работали 2D-игры на кнопочных телефонах нулевых

Level of difficultyMedium
Reading time11 min
Views14K
image

Друзья! А вы помните, какими были мобильные игры в 2000-х годах? Помните, как разработчики умудрялись уместить целые миры в устройство с небольшим дисплеем, аппаратной клавиатурой, весьма слабым железом и парой сотен килобайт памяти? Но задумывались ли вы, как в своё время работали эти сами игры «под капотом»? В сегодняшней статье-ретроспективе предлагаю вспомнить мобильный геймдев нулевых и узнать, как же работали 2D Java-игры, какие API были доступны и что из себя представлял средний телефон тех лет! Интересно? Тогда добро пожаловать под кат!
Читать дальше →
Total votes 67: ↑64 and ↓3+76
Comments62

Как работает физика в играх

Level of difficultyMedium
Reading time17 min
Views19K

В мире видеоигр игровая физика играет важную роль, определяя реалистичность и взаимодействие игрового мира с игроком. Что же происходит под капотом? Какие алгоритмы и подходы используются в современных движках? И что же значит «застрять в текстурах»? (спойлер: чушь полнейшая)

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

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

PHP/FI 1. Personal Home Page Tools/Forms Interpreter

Level of difficultyMedium
Reading time17 min
Views4.4K

История зарождения PHP

История PHP начинается не с полноценного языка программирования, а с набора CGI-скриптов на C, известного как PHP/FI 1. В этой статье мы возвращаемся к истокам PHP, рассматривая его первую версию, её компиляцию и функциональность.

Читать далее
Total votes 22: ↑22 and ↓0+26
Comments8

Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling

Level of difficultyMedium
Reading time13 min
Views10K

Веб-разработка часто требует реализации механизмов обновления контента на странице в реальном времени. Существуют различные сценарии, где это необходимо, например, отображение прогресса выполнения тяжелых задач на бекенде, обновление каких-либо часто меняющихся данных, будь то курсы валют или мониторинг какой-то активности, чаты, различные уведомления. Эти сценарии объединяет одна общая особенность: источник события необходимости обновления данных находится не на клиентской стороне, поэтому мы хотим получать события с бекенда. В данной статье мы рассмотрим четыре популярных подхода к реализации этой функциональности: WebSocket, Server-Sent Events (SSE), Long Polling и Short Polling.
Мы проанализируем каждый метод, выявим их плюсы, минусы и сложность реализации.

Читать далее
Total votes 17: ↑15 and ↓2+18
Comments11
1

Information

Rating
5,407-th
Registered
Activity