Как стать автором
Обновить
0
0

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

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

Про сортировку чисел и SIMD или как я обогнал STL в 16 раз

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

Cитуация, когда недостаток производительности пытаются покрыть новым железом, не редка. Важно понимать, однако, что железо, которое мы использовали и используем сегодня, содержит в себе множество механизмов, способных актуализировать наш код на года вперед. В моем понимании программист, умеющий грамотно оперировать этими механизмами(в частности в терминах бизнес процессов, требующих 'Здесь и Сейчас', терминах поиска золотой середины между Скоростью и Дизайном) - профессионал. В этой статье речь пойдет про довольно изъезженную и, казалось бы, понятную тему - тему сортировок, но с одним небольшим дополнением - SIMD. Эту тему я выбрал не случайно: в процессе решения довольно важной для индустрии задачи возникла следующая подзадача: есть входное множество целых чисел. Каждому множеству сопоставлено свое уникальное значение. При этом множества элементов, которые отличаются между собой только порядком следования элементов, а не их значениями, считаются одинаковыми и должны возвращать одно и тоже значение. Одно из решений - посортировать множества, а затем использовать результат как ключ в Хеш Таблице. Одно из важных ограничений - количество элементов в множестве не превышает 128 элементов. Под катом рассказываю о том, как сортировать такие множества быстро.

Читать далее

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

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

В этой статье рассмотрены все паттерны проектирования из "Банды четырёх" с примерами на языке программирования C#. Для самых терпеливых имеются дополнительные паттерны.

Это первая статья из серии "Сто паттернов для разработки корпоративных программ". Следующие статьи будут посвящены паттернам из книг Мартина Фаулера и Роберта Нистрема.

Читать далее

Пишем первое приложение в магазин OpenAI

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

Совсем недавно вышел магазин приложений от компании OpenAI, под названием GPTs.

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

Читать далее

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

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


Летом 2023 года известный специалист по безопасности Мэтью Грин написал в твиттере: «Проблема компьютерной безопасности будет решена на 80%, если мы просто уберём из продакшна все технологии, изображённые на этой диаграмме» (полная версия картинки под катом).

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

Аннотирование args и kwargs в Python

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

Когда я пытаюсь обойтись без *args и **kwargs в сигнатурах функций, это не всегда можно сделать, не вредя удобству использования API. Особенно — когда надо писать функции, которые обращаются к вспомогательным функциям с одинаковыми сигнатурами.

Типизация *args и **kwargs всегда меня расстраивала, так как их нельзя было заблаговременно снабдить точными аннотациями. Например, если и позиционные, и именованные аргументы функции могут содержать лишь значения одинаковых типов, можно было поступить так:

def foo(*args: int, **kwargs: bool) -> None:
    ...

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

Но нельзя было адекватно аннотировать *args и **kwargs в ситуации, когда значения, которые можно передавать в качестве позиционных и именованных аргументов, могут, в разных обстоятельствах, относиться к различным типам. В таких случаях приходилось прибегать к Any, что противоречило цели типизации аргументов функции.

Читать далее

Как сделать NeoVim самым удобным текстовым редактором: туториал по настройке

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

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

Почему именно NeoVim? Всё просто: этот текстовый редактор сохраняет совместимость с Vim, но также предлагает дополнительные возможности и улучшенный интерфейс. Он позволяет более эффективно работать с кодом, а главное — настраивать редактор под свои нужды.

Читать далее

Что нам недодали в C++

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

C++ последний десяток с лишним лет стремительно развивается. Тем не менее в наших кодовых базах все еще присутствуют многочисленные helper-файлы и классы, которые помогают восполнить пробелы в стандартной библиотеке языка. Как же так вышло, что там в этих ваших helper-файлах, и когда это закончится?

Читать далее

Я разработчик, а не компилятор

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

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

Что такое полиморфизм?

В чём разница между List и Set? Когда стоит использовать первое, а когда второе?

Где можно столкнуться со взаимной блокировкой (deadlock)?

В чём разница между строгой и слабой типизацией?

В основном вопросы были вполне закономерными. Лично мне не нравится вопрос про полиморфизм, ведь он настолько тесно связан с большинством объектно-ориентированных языков и наследованием, что многие люди, используя его (например, при переопределении или перегрузке метода), даже не думают «О! Это же полиморфизм в действии!». Вместо этого я бы задал вопрос «Что такое наследование, и где оно используется», потому что в большинстве объектно-ориентированных языков для него есть ключевое слово или паттерн. Но это уже мои личные предпочтения, и я вполне понимаю логику проводившей собеседование компании.

Читать далее

Mamba. От начала до конца

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

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

Читать далее

Погружение в мир адаптивной верстки с Flutter

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

Я Магин Максим, Flutter-разработчик агентства мобильной разработки Instadev. Поговорим о таком понятии как “адаптивная верстка”. Разберем, для чего она нужна, чем отличается от других видов верстки и какие подводные камни могут встретиться при использовании.

Каждый разработчик так или иначе сталкивался с вопросом - как сделать качественный UI, который будет хорошо себя показывать на различных устройствах. Даже среди смартфонов существует большое разнообразие размеров – одни шире, другие – длиннее. Понятное дело, что для каждого устройства уникальный код не напишешь. А что делать, если среди устройств необходимо учесть еще и планшеты, где действуют уже другие правила расположения и масштабирования элементов? Есть ли универсальное решение? Но обо всем по порядку.

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

Существует 4 основных подхода к верстке: фиксированный, резиновый, адаптивный и отзывчивый. Каждый из этих подходов имеет свои плюсы и минусы. Разберем их чуть подробнее.

Фиксированный подход

Его суть  заключается в том, чтобы задать жесткие размеры и расстояния для всех элементов, отображаемых на экране. Иными словами мы “фиксируем” положение каждого виджета на экране. Преимущество очевидно – мы всегда знаем величину того или иного используемого элемента. С другой стороны, если мы возьмем устройство, которое хоть немного отличается размером от того, на котором мы производим тесты, все наши расчеты оказываются неподходящими для него: в лучшем случае, может появиться больше пустого пространства или, наоборот, элементы сильно прижмутся друг к другу, в худшем – мы получим ошибку рендеринга. Это говорит нам о том, что в чистом виде данный подход лучше не использовать.

Читать далее

CodebaseGPT = ChatGPT для целого программного проекта

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

CodebaseGPT — это приложение, которое позволяет разработчикам "общаться" с полной кодовой базой программного проекта.

Главная особенность CodebaseGPT заключается в том, что он создает краткие описания каждого файла проекта и предоставляет эти описания LLM в первом системном промпте. Таким образом, модель имеет обобщенную информацию обо всем проекте в своем контексте на каждом этапе общения с пользователем.

Читать далее

О кастомных HTML-тегах по-человечески и как их использовать

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

Расскажу вам о том, как использовать чудо-юдо под названием «Кастомные HTML‑теги» понятно, но подробно.

Читать далее

Встать и Сделать. Личный опыт

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

Hello Habr!

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

Жизнь прекрасна, когда она осмыслена. Это - Основа, краеугольный камень, держащий свод. На практике эта красивая и умная фраза означает, что когда есть некая Цель, то к ее достижению ведут ДЕЛА, Дела и делишки. Что ни делается – всё подчинено ей одной-единственной. Мелкое на службе Главного.

Читать далее

Обнаружены шахматы для DOS… 1980 года

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

Шахматы для DOS... 1980 года! Вытащены с найденной в 2024 году системной дискеты 86-DOS (QDOS), при этом без особых проблем работают в MS-DOS 2.11, 3.31 на 86Box, MS-DOS Player, FreeDOS, DOSBox-X, NTVDM на современных ОС.

Читать далее

Пишем 2D игру на JavaScript и Canvas. Часть 2. Графика

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

Привет!

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

Читать далее

Импортозамещение которое мы потеряли: советские ЯП и их создатели (часть 2)

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

В комментах к предыдущей части некоторые читатели предложили рассказать о ещё нескольких ЯП, которые сыграли значительную роль для развития программирования в СССР. Автор не смеет игнорировать просьбы трудящихся. В этой части цикла поговорим об АЛМО, Эль-76 и Рапира и ЛЯПАС.

Читать далее

JavaScript однопоточный или многопоточный? Ставим точку

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

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

Читать далее

Как появился графический интерфейс пользователя: история в лицах, деталях, фактах и курсорах

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

Графический интерфейс пользователя, каким мы его знаем сегодня, возник в результате десятилетий исследований множества инженеров и ученых. Программа Sketchpad Айвена Сазерленда, созданная в 1962 году, считается первым графическим интерфейсом пользователя.

Дуглас Энгельбарт изобрел компьютерную мышь в 1964 году, чтобы преодолеть ограничения световых перьев. Конструкция мыши продолжала развиваться. Исследователи PARC разработали первые растровые окна и меню, которые реагировали на ввод данных мышью. Дэвид Кэнфилд Смит в 1975 году ввел термин «иконка» для описания графических символов, представляющих программы и данные. 

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

Читать далее

Компьютер с 1-битным процессором: что это за девайс и зачем он нужен

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

Совсем недавно японские разработчики представили одноплатник Naoto64, который не может практически ничего из того, на что способны современные устройства. Так, у него нет привычных выводов, он умеет лишь мигать светодиодами. А процессор у девайса однобитный. Несмотря на всё это, одноплатник быстро раскупили. Так что это за новинка? Подробности — под катом.

Читать далее

Мини-ПК начала 2024 года: 5 интересных моделей на все случаи жизни

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


Привет, Хабр! К сожалению, праздники уже прошли, так что наступил рабочий период. Ну а для работы нужны нормальные инструменты. Это, например, миниатюрные ПК, которые разрабатываются самыми разными производителями. В этом году уже появилось несколько интересных моделей, о которых стоит рассказать. Подробности — под катом.

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

Информация

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

Специализация

Software Developer
Linux
Python
Git