Обновить
0
@bontaread⁠-⁠only

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

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

Глобальный упадок качества ПО: как катастрофа стала нормой

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

Утечка оперативной памяти в Apple Calculator достигает 32 ГБ.

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

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

Мы урегулировали программные катастрофы такой степени, что утечка 32 ГБ в калькуляторе уже не удивляет. И дело не в ИИ. Кризис с качеством ПО начался за несколько лет до появления ChatGPT. ИИ лишь стал дополнительным инструментом в руках некомпетентных людей.

Читать далее

В чём процессорная сила, брат?

Время на прочтение9 мин
Охват и читатели12K

Долгое время, начиная, фактически, с 80-х годов 20-го века и до нынешнего момента, архитектура x86 доминировала на рынке десктопных, а потом и серверных решений и ноутбуков. Для многих жителей планеты Земля слова «компьютер» и «компьютер на базе процессора x86» стали синонимами. Но в последние годы позиции архитектуры x86 перестали выглядеть столь незыблемыми. Виной тому несколько причин: недооценка компанией Intel и в итоге проигрыш мобильного рынка процессоров компании ARM; скукоживание рынка десктопных решений опять-таки по причине роста мобильных устройств; потеря технологического лидерства Intel в разработке самых передовых нанометров, где пальму первенства захватила компания TSMC; недостаточная гибкость бизнес-модели компании Intel, являющейся классической Integrated Device Manufacturing компанией во времена, когда сложность разработки растёт и требует всё большего разделения труда. В итоге, на горизонте у архитектуры x86 появились конкуренты, бросающие ей вызов. В первую очередь это архитектуры Arm и RISC-V. Но несмотря на все сложности текущего положения архитектуры x86, есть важнейший фактор, который ещё долго будет мешать конкурентам скинуть её с трона серверного и десктопного рынков. Этот фактор – колоссальная по объёму программная экосистема, разработанная за десятилетия существования x86. В данной статье хотелось бы кратко осветить вопрос, почему переход с одной процессорной платформы на другую столь болезнен, почему нельзя просто взять и перекомпилировать весь необходимый софт на новую архитектуру и где нас ожидают подвохи и подводные камни.

Читать далее

Как malloc() и free() управляют памятью в C

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели44K

Привет, Хабр!

Сегодня рассмотрим, почему free() не всегда освобождает память, как работает malloc(), когда glibc действительно возвращает память в ОС, и как избежать фрагментации хипа. А так же напишем кастомный аллокатор.

Читать далее

Собеседование в Яндекс: театр абсурда :/

Время на прочтение14 мин
Охват и читатели721K

Привет, Хабр!

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

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

Как вы думаете, что делают рекрутеры, когда видят "Alexandr, NOT OPEN FOR WORK"? Правильно, пишут "Алексей, рассматриваете вариант работать в X?" Я обычно игнорирую это, но тут мне предложили попытать счастья с Яндекс.Лавкой, и я не смог пройти мимо - интересно было, смогу ли я устроиться куда-нибудь, когда введут великий российский файерволл. К тому же за последние 3 года я проходил только два интервью, и мне показалось, что я не в теме, что нынче требуется индустрии. Блин, я оказался и вправду не в теме. И вы, скорей всего, тоже - об этом и статья.

Читать далее

Когнитивная разгрузка с ИИ: взлет интеллекта или деградация?

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели6.7K

Системы искусственного интеллекта — от поисковых движков до больших языковых моделей, таких как ChatGPT, — всё чаще выступают в роли “плагинов” для нашего мозга. Мы полагаемся на них в запоминании фактов, планировании расписания, написании писем и даже генерировании идей. Эта “когнитивная разгрузка” (то есть передача умственных задач внешним средствам) вызывает важный вопрос: ведёт ли наша растущая зависимость от ИИ к ослаблению нашего собственного интеллекта — снижению навыков памяти, критического мышления и решения проблем — или же, наоборот, усиливает его, высвобождая ресурсы для более глубоких процессов? Опасения о том, что “ИИ делает нас глупее”, идут рука об руку с оптимистичными прогнозами о том, что ИИ “усиливает” человеческий разум. В этом обзоре мы рассмотрим эмпирические данные и мнения экспертов по обеим сторонам вопроса, а также сравним современную ИИ-революцию с прошлыми технологическими изменениями (письменность, калькуляторы, интернет), которые подобным же образом влияли на наше мышление.

Читать далее

Транзакционная память: история и развитие

Время на прочтение14 мин
Охват и читатели49K

Определение


Параллельное программирование сложно. При использовании систем с общей памятью не обойтись без синхронизации доступа параллельных процессов/потоков к общему ресурсу (памяти). Для этого используются:
  • блокировки (mutex);
  • алгоритмы без блокировки (lockless, lock-free);
  • транзакционная память.


Транзакционная память — технология синхронизации конкурентных потоков. Она упрощает параллельное программирование, выделяя группы инструкций в атомарные транзакции. Конкурентные потоки работают параллельно1, пока не начинают модифицировать один и тот же участок памяти. К примеру, операции добавления узлов в красно-чёрное дерево (анимация в заголовке) способны работать параллельно в нескольких потоках.
Скрытый текст
/* Move item from one list to another */
int move(list *from, list *to) {
    __transaction_atomic {
        node *n = pop(from);
        push(to, n);
    }
}

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

Почему я провалю ваше техническое собеседование

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели137K

Считается, что собеседования предназначены для выбора подходящих кандидатов на должность. Соответственно, технические собеседования, предположительно, нужны для оценки кандидатов на технические роли.

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

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

Так думаю не только я: несколько лет назад Университет штата Северная Каролина совместно с компанией Microsoft пришли к таким же выводам: «Собеседования в технологическом секторе оценивают уровень стресса, а не навыки разработки ПО».

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

«Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference»

Время на прочтение14 мин
Охват и читатели52K
Не так давно Скотт Майерс (англ. Scott Meyers) — эксперт по языку программирования C++, автор многих известных книг — опубликовал статью, описывающую подробности использования rvalue ссылок в C++11.
На Хабре эта тема еще не поднималась, и как мне кажется, статья будет интересна сообществу.
Оригинал статьи: «Universal References in C++11—Scott Meyers»

«Универсальные» ссылки в C++11


T&& не всегда означает “Rvalue Reference”

Автор: Scott Meyers

Возможно, наиболее важным нововведением в C++11 являются rvalue ссылки. Они служат тем фундаментом, на котором строятся «семантика переноса (англ. move semantics)» и «perfect forwarding». (Вы можете ознакомится с основами данных механизмов в обзоре Thomas’а Becker’а).

Синтаксически rvalue ссылки объявляются также, как и «нормальные» ссылки (теперь называемые lvalue ссылками), за исключением того, что вы используете два амперсанда вместо одного. Таким образом, эта функция принимает параметр типа rvalue-reference-to-Widget:
void f(Widget&& param);

Учитывая, что rvalue ссылки объявляются с помощью “&&”, было бы разумно предположить, что присутствие “&&” в объявлении типа указывает на rvalue ссылку. Но это не так:
Widget&& var1 = someWidget;         // здесь “&&” означает rvalue ссылку

auto&& var2 = var1;                 // здесь “&&” НЕ означает rvalue ссылку

template<typename T>
void f(std::vector<T>&& param);     // здесь “&&” означает rvalue ссылку

template<typename T>
void f(T&& param);                  // здесь “&&” НЕ означает rvalue ссылку
Читать дальше →

Идеальная передача и универсальные ссылки в C++

Время на прочтение9 мин
Охват и читатели177K
Недавно на isocpp.org была опубликована ссылка на статью Eli Bendersky «Perfect forwarding and universal references in C++». В этой небольшой статье есть простой ответ на простой вопрос — для решения каких задач и как нужно использовать rvalue-ссылки.
Узнать этот ответ

Хронология блокировок VPN в России 2019-2024. Куда мы пришли за 5 лет и что можно с этим сделать

Время на прочтение7 мин
Охват и читатели167K

В этой статье мы постарались собрать все знаковые события связанные с блокировками VPN в России с 2019 года по сегодняшний день и расскажем о ситуации прямо сейчас, а также постараемся дать рекомендации по выбору характеристик VPN в 2024–2025 году.

*Сразу хотим отметить, что здесь не будет списка заблокированных в России VPN‑сервисов, так как очень сложно отслеживать такие данные с поправкой на разные регионы, а учитывая что ситуация с блокировками меняется каждый день, эти данные могут быть совершенно неактуальны даже на момент публикации статьи.

Читать далее

std::move vs. std::forward

Время на прочтение8 мин
Охват и читатели64K

Несмотря на то, что материалов на тему move-семантики и идеальной передачи в Интернете предостаточно, вопросов типа «что я должен здесь использовать: move или forward?» не становится меньше или мне просто «везет» на них. Поэтому и решено было написать эту статью. Предполагается, что читатель хотя бы немного знаком с rvalue-ссылками, move-семантикой и идеальной передачей.

Читать далее

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

Время на прочтение65 мин
Охват и читатели107K

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

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

Прикоснуться к сокровищнице языка С++

OpenConnect: недетектируемый VPN, который вам понравится

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

Я уже написал здесь много статей на тему прокси-протоколов и прокси-клиентов, которые очень сложно детектировать и заблокировать, и которые используют пользователи в Китае, Иране, Ираке, Туркменистане, и теперь вот в России (мы здесь в отличной компании, правда?). Но довольно часто мне в комментариях писали, мол, это все отлично, но мне нужен именно VPN для целей именно VPN - доступа в частные локальные сети, либо для соединения клиентов между собой, и желательно так, чтобы его не заблокировали обезьяны с гранатой. Поэтому сегодня мы поговорим именно о VPN.

Классические OpenVPN, Wireguard и IPSec отметаем сразу - их уже давно умеют блокировать и блокировали не раз. Модифицированный Wireguard от проекта Amnezia под названием AmneziaWG — отличная задумка, но есть одно но...

Читать далее

BASHUI

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели24K

BASHUI - это BASH + UI, а не то что вы подумали.

Начиная работать над sshto я решил не переизобретать велосипед, вернее не переизобретать велосипед целиком а только некоторые его части и в качестве "рамы с педалями" использовал dialog. Это значительно ускорило разработку, но идея написать свой UI на баше с блекджеком и всем остальным ни на секунду не покидала мой воспалённый мозг. Звёзды сошлись, и я решил воплотить этот проект в жизнь(в bash). Втречайте BASHUI!

нажми на кнопку

Основные принципы C++: Правила выражений и операторов

Время на прочтение5 мин
Охват и читатели22K
Бобра!

Что ж, мы плавно выходим на старт второго потока группы «Разработчик С++» и разбираем интересные материалы, которые накопились у преподавателя в свободное от работы и преподавания время. Сегодня рассмотрим (а потом и продолжим) серию материалов, где разбираются отдельные пункты С++ Core Guidelines.

Поехали.

В C++ Core Guidelines много правил, посвященных выражениям и операторам. Если быть точным, то более 50 правил посвящено объявлениям, выражениям, операторам и арифметическим выражениям.



*перевод
Информативные названия

Оптимальная длина переменных

  • Не должны быть слишком длинными (maximimNumberOfPointsInModernOlympics.) или слишком короткими (например, x, x1)
  • Длинные названия сложно печатать, короткие названия недостаточно информативны..
  • Дебажить программы с названиями от 8 до 20 символов гораздо проще
  • Гайдлайны не заставляют вас срочно менять названия переменных на имена из 9-15 или 10-16 символов. Но если вы найдете в своем коде более короткие названия, убедитесь, что они достаточно информативны.

Слишком длинные: numberOfPeopleOnTheUsOlympicTeam; numberOfSeatsInTheStadium; maximumNumberOfPointsInModernOlympics
Слишком короткие: n; np; ntmn; ns; nslsd; m; mp; max; points
В самый раз: numTeamMembers, teamMembersCount

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

Наблюдения программиста в возрасте

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

Multithreading

Время на прочтение77 мин
Охват и читатели308K

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

Читать далее

Почему ИИ в F.E.A.R. по-прежнему остается лучшим в шутерах от первого лица

Время на прочтение4 мин
Охват и читатели58K

Тени на стене подсказывают мне, что они наступают. Их двое, оба со штурмовыми винтовками, качающимися у бедер. Если потороплюсь, то точно смогу снять их за раз. Я выглядываю из укрытия, когда они сворачивают за угол, и пускаю в ход свое оружие, прибивая первого врага к стене 10-миллиметровыми стальными снарядами. Однако при звуке выстрелов второй противник отступает, прячется в укрытие и вызывает подкрепление по рации.

Этот эпизод многое говорит о внимании к деталям в F.E.A.R. — игре 12-летней давности с искусственным интеллектом, которому могут позавидовать многие современные шутеры. Его армия солдат-клонов выглядит умнее любых врагов, с которыми я сталкивался в FPS впоследствии, и остается такой и по сей день.

Читать далее

Почему линукс использует swap-файл

Время на прочтение8 мин
Охват и читатели114K

Жажда тюнинга может завести в неведомые дебри. И, пожалуй, едва ли не самая частая неправильная оптимизация - отключение swap-файла. Если прикинуть частоту, с которой эта ошибка встречается, то, наверное, она входит в негласный top-10 (а может и top-5) самых распространенных, самых бесполезных и самых вредных оптимизаций - потому что swap-файл это одна из самых интересных, сложно понимаемых и недооцененных  сущностей в подсистеме управления виртуальной памятью.

Читать далее

В защиту swap'а [в Linux]: распространенные заблуждения

Время на прочтение14 мин
Охват и читатели189K
Прим. перев.: Эта увлекательная статья, в подробностях раскрывающая предназначение swap в Linux и отвечающая на распространённое заблуждение на этот счёт, написана Chris Down — SRE из Facebook, который, в частности, занимается разработкой новых метрик в ядре, помогающих анализировать нагрузку на оперативную память. И начинает он своё повествование с лаконичного TL;DR…

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

Информация

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