Pull to refresh
15
0.3
Artem Ukrainskiy @Ukrainskiy

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

Send message

Самые быстрые мьютексы

Level of difficultyEasy
Reading time8 min
Views6.6K

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее
Total votes 25: ↑23 and ↓2+27
Comments7

Массивы и слайсы в Go — для собеседований

Level of difficultyEasy
Reading time6 min
Views2.1K

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

Здесь собраны несколько базовых вопросов встретившихся в последнюю сессию поисков работы :) вдруг поможет кому-то кто только вникает в язык - а кто-то, может, дополнит или поправит...

Ух, понеслись!
Total votes 8: ↑7 and ↓1+11
Comments15

Некоторые малоизвестные фичи, фокусы и причуды языка C

Reading time19 min
Views25K

В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).

Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan() не может устанавливать errno, поскольку в определённых ситуациях поведёт себя как strtod()» не слишком интересны.

ВНИМАНИЕ: сам факт попадания тех или иных вещей в эту подборку  не означает автоматически, что я рекомендую или, наоборот, не рекомендую ими пользоваться! Некоторые из приведённых примеров никогда не должны просачиваться за пределы списков наподобие этого, тогда как другие примеры невероятно полезны! Уверен, что могу положиться на ваш здравый смысл, дорогие читатели.

Читать далее
Total votes 76: ↑75 and ↓1+94
Comments45

Новый нечёткий поиск и автодополнение в Manticore Search

Level of difficultyEasy
Reading time6 min
Views787

Краткое содержание


Мы рады представить две новые важные функции в Manticore Search: нечёткий поиск и автокорректировка запросов (или "автодополнение"). Эти функции улучшают возможности поиска, предлагая более удобный для пользователя опыт.

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

Как написать ТЗ на простую программу (калькулятор)

Level of difficultyEasy
Reading time11 min
Views11K

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

Возьмём калькулятор, который будет выполнять базовые арифметические операции (+, -, *, /).

Работу можно построить в 2 этапа:

Читать далее
Total votes 25: ↑20 and ↓5+20
Comments113

Принцип SOLID в языке Go

Reading time14 min
Views38K

Приветствую вас, хабровчане, решил поделиться с сообществом переводом довольно часто (по личным наблюдениям) упоминаемого поста SOLID Go Design из блога Dave Cheney, который выполнял для собственных нужд, но кто-то говорил, что нужно делиться. Возможно для кого-то это окажется полезным.


SOLID дизайн Go


Этот пост на основе текста из основного доклада GolangUK прошедшего 18-ого Августа 2016.
Запись выступления доступна в YouTube.

Читать дальше →
Total votes 31: ↑24 and ↓7+17
Comments63

Чек-лист: что нужно было делать до того, как запускать микросервисы в prod

Reading time9 min
Views51K

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


К сожалению, некоторые невысокие программисты всерьёз полагают, что Dockerfile с какой-нибудь вообще любой командой внутри — это уже сам по себе микросервис и его можно деплоить хоть сейчас. Докеры крутятся, лавешка мутится. Такой подход оборачивается проблемами начиная с падения производительности, невозможностью отладки и отказами обслуживания и заканчивая кошмарным сном под названием Data Inconsistency.


Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.


English version is also available.

Читать дальше →
Total votes 138: ↑135 and ↓3+132
Comments71

std::execution принят в C++26 — пора знакомиться

Level of difficultyMedium
Reading time8 min
Views16K

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

В конце июня стандартный комитет одобрил включение std::execution (P2300) в C++26. Это пропозал, который призван решить вышеуказанные проблемы. Давайте разбираться!

Читать далее
Total votes 27: ↑24 and ↓3+27
Comments28

Подробно про JWT

Level of difficultyMedium
Reading time6 min
Views13K

О чем эта статья: мы разберемся, что такое JSON Web Token, как он устроен и для чего используется, рассмотрим такие приемы, как «black-list токенов» и «контроль версий» токенов. Для наглядности, в конце будут блок-схемы клиент-серверных запросов с пояснениями.

Для кого эта статья: для тех, кто хочет детально понять что такое JWT, а так же для тех, кто просто ищет схему реализации.

Читать далее
Total votes 22: ↑20 and ↓2+20
Comments17

Просто выберите Postgres

Level of difficultyMedium
Reading time6 min
Views26K

Отчасти это действенный совет, отчасти — вопрос к читателям.

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

Читать далее
Total votes 43: ↑38 and ↓5+41
Comments84

Вот скажи мне, микросервис, в чем сила

Level of difficultyEasy
Reading time8 min
Views11K
Сила в количестве — ответил бы микросервис.

Вооружимся Visual Studio, .NET, Docker и прочими средствами и посмотрим так ли это.
Но с чего же начать? Для начала надо бы выбрать какую-то прикладную задачу, над реализацией которой и проводить эксперименты. Хотелось бы задачу не совсем оторванную от реальности и в то же время чтобы можно было реализовать за разумное время.
Я, не особо утруждая себя размышлениями, решил поэкспериментировать с задачей поиска товаров как на онлайн магазинах электроники. Такие, знаете, где в каждом разделе у товаров разные характеристики. К примеру, в разделе “Ноутбуки” там поиск по: ЦПУ, ОЗУ, ПЗУ и т.п. А в соседнем разделе, например, “Стиральные машины” там поиск по количеству оборотов и кг загрузки.


В чём сила, брат
Total votes 21: ↑19 and ↓2+21
Comments29

Семантический поиск (homemade)

Level of difficultyMedium
Reading time127 min
Views2.3K

Основой семантического поиска может являться ML задача Sentence Similarity, а если быть еще конкретнее, то это Semantic Textual Similarity. Модели, обученные под эту задачу, способны оценивать насколько близки предложения по своему смыслу. Всё, что нам дальше остается, так это засунуть модель в некоторую поисковую систему...

Но тут давайте по порядку
Total votes 9: ↑9 and ↓0+14
Comments1

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

Level of difficultyEasy
Reading time10 min
Views47K

Недавно в комментариях к тексту про построение личной базы знаний на Хабре читатель отметил, что в таких статьях не хватает примеров работы с техническими данными. Давайте это исправим. Мы спросили у инженеров YADRO и технарей из сообщества «Цеттелькастен и Персональные базы знаний», как и для чего они ведут свои заметки.  Герои статьи используют Obsidian и Emacs, а также личные Telegram-каналы, чтобы изучать новые языки программирования, проходить технические собеседования и вести рабочие записи.

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

Читать далее
Total votes 45: ↑42 and ↓3+55
Comments37

4 тысячи заметок?! Как я веду личную базу знаний в Obsidian

Reading time6 min
Views55K

В моей базе знаний 4 000 заметок.

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

Читать далее
Total votes 53: ↑46 and ↓7+51
Comments108

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

Reading time65 min
Views28K

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

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

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

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

Reading time29 min
Views15K

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

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

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

Reading time18 min
Views39K

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

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

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

Читать далее
Total votes 112: ↑112 and ↓0+138
Comments70

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

Level of difficultyMedium
Reading time17 min
Views12K

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

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

Читать далее
Total votes 70: ↑66 and ↓4+73
Comments9

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

Level of difficultyEasy
Reading time11 min
Views6.7K

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

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

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

Reading time13 min
Views10K

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

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

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

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

Information

Rating
2,085-th
Registered
Activity