Pull to refresh
48
0
Valentin Nechayev @netch80

Программист (backend/сети)

Send message

Хитрые бактерии и антибиотики

Reading time13 min
Views31K

Аптека в Африке, сейчас пациент получит одну таблетку доксициклина

Бактерии — мастера генетических рекомбинаций. У них очень короткий цикл жизни, большое потомство, миллиарды попыток на мутации и очень короткая петля обратной связи. Одного этого достаточно, чтобы если не забрутфорсить, то найти решение проблемы алгоритмами группы Монте-Карло.

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

Поэтому антибиотики уже через 15 минут после появления начали резко создавать эволюционное давление.

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

В общем, там есть пара суперинтересных историй про то, насколько бактерии хитрые и продуманные. Пора бы в этом разобраться. Сегодня мы это делаем с экспертом — Денисом Кузьминым, к.б.н., директором физтех-школы биологической и медицинской физики МФТИ.
Читать дальше →

Как я вошёл в клуб бага 323

Level of difficultyMedium
Reading time12 min
Views31K

Это история о баге, который бы заставил вас рвать на себе волосы. Из-за такого бага вы можете подумать: «Но это невозможно, должно быть, компилятор сломался, других вариантов нет!»

А баг компилятора — это серьёзно: за двенадцать лет программирования на C++ я обнаружил (и написал отчёт) всего... об одном. И могу сказать, что перед отправкой отчёта о баге GCC, я максимально тщательно протестировал и проверил его, чтобы не выглядеть идиотом.

Впрочем, ладно, вот моя история.

Читать далее

Жуткий сценарий использования ChatGPT

Reading time2 min
Views140K

Вчера у меня в ленте на фейсбуке (жаль что в закрытом посте) проявился еще один аспект ChatGPT, жуть которого я не вполне осознавал. Представьте, что ваш менеджер присылает вам емейл: "я вот тут сгенерил с помощью ChatGPT код на языке описания аппаратуры SystemVerilog, который реализует мою идею, ты его поправь немного и в продакшн, а то нас сроки поджимают".

Почему это жутко? Потому что в обсуждаемом посте ChatGPT сгенерил так называемый несинтезируемый код. Это означает: код вроде и есть, и после массажирования даже будет компилироваться в симуляторе, но вот чип из него сделать нельзя. Никак, вообще никак. Для решения этой задачи нужно написать совсем другой код, у которого не будет ни одной строчки общего с тем, что прислал менеджер.

То есть менеджер думает, что вместе с ChatGPT сделал за вас 90% работы, а на самом деле.

Читать далее

Выйди и зайди правильно

Reading time8 min
Views55K

Управлять программистами в ИТ-компании – дело особое. Не сказать, что сильно сложное. Совру, если назову простым. Особое.

Книжек, статей, курсов создано великое множество. Что-то помогает, у кого-то получилось. Собственно, промахнуться с оценкой сложно – отрасль ведь не просто существует, но и весьма активно развивается. Даже в нашей деревне. Значит, как-то, кое-как, с горем пополам, но управление программистами не только возможно, но и получается.

Однако, кризисы случаются. Бывает, что затяжные – например, какая-нибудь серьёзная деревенская компания не может ни найти, ни воспитать приличного руководителя программистов. Благо, сейчас это не великая проблема – бизнес вполне себе растёт лишь потому, что растёт рынок, и заполнить его некому. Поэтому за начальника сойдёт и табуретка. Но – лишь до поры, до времени.

Регулярно ИТ-бизнес думает-думает, решает-решает, плюнет, да и снова попробует старый добрый метод: нанять успешного руководителя из другой сферы. Производство, строительство, торговля – ну суть. Оттуда много кандидатов, у них подтверждённый опыт, зачастую – MBA, и они такие прям чёткие всегда! Знают, чего хотят, на что способны, чего им нужно.

Мне этих руководителей всегда искренне жаль – я знаю, что их ждёт, каков будет их путь, почему они в итоге уволятся. Я не семи пядей во лбу, просто в течение многих лет наблюдал их в обеих сферах – ИТ и той, из которой они пришли, где добились успеха. Могу плюс/минус сопоставить контексты, работающий инструментарий, важные и второстепенные личностные качества.

Много раз пытался объяснить, помочь – и начинающим руководителям-варягам, и тем, кто их тащит в ИТ. Никто, разумеется, не слушал. Ну да я уже привык, поэтому сижу себе помалкиваю.

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

Попросил меня. Я предложил формат статьи – и моё мнение услышит, и ваше. В конце концов, вполне возможно, я не прав, как это обычно случается (если верить вашим комментариям).

Итак, погнали. Буду писать, как бы лично обращаясь к Ирине.

Читать далее

Художники против нейросетей: справедливый протест или неолуддизм?

Reading time14 min
Views45K

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

Пока соцсети продолжали заполняться терабайтами изображений, сгенерированных Midjourney и её «коллегами», в декабре 2022 года в международном сообществе цифровых художников началась акция протеста в стиле киберпанк: художники на этой и на других платформах массово возмутились распространением изображений, созданных нейросетями.
Читать дальше →

Приёмы неблокирующего программирования: полные барьеры памяти

Reading time9 min
Views9.8K

В первых двух статьях цикла мы рассмотрели четыре способа упорядочить доступ к памяти: load-acquire и store-release операции в первой части, барьеры чтения и записи в память — во второй. Теперь пришла очередь познакомиться с полными барьерами памяти, их влиянием на производительность, и примерами использования полных барьеров в ядре Linux.


Рассмотренные ранее примитивы ограничивают возможный порядок исполнения операций с памятью четырьмя различными способами:


  • Load-acquire операции выполняются перед последующими чтениями и записями.
  • Store-release операции выполняются после предыдущих чтений и записей.
  • Барьеры чтения разделяют предыдущие и последующие чтения из памяти.
  • Барьеры записи разделяют предыдущие и последующие записи в память.

Внимательный читатель заметил, что одна из возможных комбинаций в этом списке отсутствует:

Чтение выполняется... Запись выполняется...
… после чтения smp_load_acquire(), smp_rmb() smp_load_acquire(), smp_store_release()
… после записи ??? smp_store_release(), smp_wmb()
Оказывается, обеспечить глобальный порядок записей и последующих чтений из памяти гораздо сложнее. Процессоры вынуждены прилагать отдельные усилия для этого. Сохранение такого порядка стоит недёшево и требует явных инструкций. Чтобы понять причину этих особенностей, нам придётся спуститься на уровнь ниже и присмотреться к тому, как процессоры работают с памятью.
Читать дальше →

Введение в неблокирующие алгоритмы

Reading time8 min
Views25K

Неблокирующие алгоритмы широко применяются в ядре Linux когда традиционные примитивы блокировки либо не могут быть использованы, либо недостаточно быстры. Эта тема многим интересна и время от времени всплывает на LWN. Из недавнего — вот эта июльская статья, которая собственно и сподвигла меня написать свою серию. Ещё чаще разговор заходит про механизм read-copy-update (RCU — руководство 2007 года всё ещё актуально), подсчёт ссылок, и способы сделать более понятные, высокоуровные API ко всему этому разнообразию. Ну а сейчас вас ждёт погружение в идеи, стоящие за неблокирующими алгоритмами, а также их использованием в ядре.


Знание низкоуровневой модели памяти в целом считается продвинутым уровнем понимания, которого страшатся даже опытные программисты-ядерщики. Словами нашего редактора (из его июльской статьи): «Понять модель памяти можно лишь правильно повёрнутым мозгом». Говорят, что моделью памяти Linux (и файлом memory-barriers.txt в частности) можно пугать детей. Порой для достижения эффекта достаточно всего лишь рявкнуть “acquire” или “release”.


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

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

Сотрудникам нужны личные кабинеты

Level of difficultyEasy
Reading time13 min
Views30K

Во времена «до» мы просто каждый день ходили в офис. Это даже не обсуждалось: «работа из дома» казалась нереализуемой на практике. Чтобы «пойти на работу», нужно было выйти из дома. А потом случилась пандемия.

Теперь, когда она закончилась, даже трёхдневка в офисе вызывает так много споров, что дело доходит до вмешательства профсоюзов
Читать дальше →

Тестирование SSD на надёжность: 3dnews vs JEDEC vs здравый смысл. Где правда, брат?

Reading time13 min
Views53K


Всем известно легендарное тестирование SSD на надёжность от 3dnews (публикация от 2018.01), по результатам которого некоторые бюджетные накопители превзошли заявленный производителем ресурс в десятки раз.

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

Узнать истинный ресурс бюджетных накопителей

S3-FIFO: новый эффективный алгоритм вытеснения из кэша на основе очередей FIFO

Level of difficultyMedium
Reading time18 min
Views9.3K
В этой статье я расскажу о простом и масштабируемом (Simple, Scalable) алгоритме вытеснения данных из кэша на основе трёх статических (Static) очередей FIFO (S3-FIFO). После проверки на 6594 трассировках кэшей 14 компаний мы показали, что S3-FIFO имеет меньшую частоту промахов, чем 12 лучших алгоритмов, разработанных в прошлые десятилетия. Более того, эффективность S3-FIFO устойчива — он имеет наименьший средний показатель промахов для 10 из 14 датасетов. Использование очередей FIFO позволяет S3-FIFO достичь хорошей масштабируемости с пропускной способностью в шесть раз больше по сравнению с оптимизированным LRU в cachelib на 16 потоках.

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

Иллюстрация работы S3-FIFO (с использованием порогового значения перехода из маленького в основной кэш, равного 1)
Читать дальше →

Мы сами себя обманули с Биткоином 2

Level of difficultyMedium
Reading time8 min
Views26K

Откупили крипту на платформе, которая не по нраву США? Теперь вы наркодиллер и торговец оружием.

Нет никакой децентрализации, все еще хуже чем в обычном банковском секторе.

Криптовалюту уже задушили, а люди до сих пор с пеной у рта доказывают, что это "свободное будущее". Все на словах только хорошо, а на практике не работает.

На примере РФ, я по фактам расписал как с помощью блокчейновской инфраструктуры можно закрыть всю страну полностью.

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

Это продолжение статьи "Мы сами себя обманули с Биткоином". Для понимания, о чем я буду писать, желательно прочитать ее.

Прочитав все 550 комментариев я полностью убедился в своей правоте - Биткоин не работает. Спасибо всем, кто писал критические комментарии. 

Читать далее

Мы сами себя обманули с Биткоином

Level of difficultyMedium
Reading time4 min
Views90K

Вы идете в продуктовый магазин, хотите купить бутылку молока. Бутылка стоит 601$, транзакция идет 5 часов, и стоимость бутылки за эти 5 часов прыгает от 500 до 700.

Как вам такое будущее? А ведь именно это и продвигают бешеные криптоманы.

Сразу хочу сказать, я за криптовалюту, я сам работаю в этом секторе.

Я хочу написать о наболевшем:

в мире крипты люди несут какой-то тотальный бред, инвестируют во все попало, блогеры/инфлюенсеры являются большим авторитетом чем технологические гики.

На вершине этого стоит Биткоин, который вообще там, не потому что он самый удобный или правильный, а потому что он просто первый. И ничего более.

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

Читать далее

DreamBerd — идеальный язык программирования

Reading time12 min
Views27K

DreamBerd - идеальный язык программирования. Вот его фичи!

Когда вы закончите знакомиться со всеми фичами, ознакомьтесь с примерами.

Восклицательные знаки!

Будьте смелее! Заканчивайте каждое утверждение восклицательным знаком!

print("Hello world")!

Если вы чувствуете себя особенно смелым, вы можете использовать еще больше!!!

print("Hello world")!!!

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

print("Hello world")?

Возможно, вам интересно, что Dreambird использует для оператора "не", который в большинстве других языков является восклицательным знаком. Это просто - вместо оператора 'не' используется точка с запятой.

if (;false) {

   print("Hello world")!

}

Читать далее

Неопределённое поведение в C/C++ и приёмы против лома

Reading time16 min
Views11K

Некоторое время назад в Интернете ходила статья о неопределённом поведении, просто бесившая коренную аудиторию Rust. Завсегдатаи С и C++ в ответ только бурчали, что кто-то просто не понимает Всех Тонкостей и Нюансов Их Светлейшего Языка. Как обычно, пришло время и мне постараться изо всех сил и вставить мои пять копеек в эту застарелую дискуссию.

Готовьтесь поговорить об Основной Проблеме языков C и C++, а также о Принципе Лома.

Читать далее

Подводные камни C++. Решаем загадки неопределённого поведения, ч. 2

Reading time9 min
Views8.8K

Мы продолжаем цикл статей, посвящённых теме undefined behavior. Ранее мы исследовали предпосылки неопределённого поведения в C++, предоставили формальные определения и рассмотрели несколько примеров. Сегодня углубимся в проблему: сосредоточимся на случаях UB при многопоточности и неправильном использовании move-семантики.

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

Читать далее

Подводные камни С++. Решаем загадки неопределённого поведения, ч. 1

Reading time11 min
Views17K

Изучение и понимание неопределённого поведения — важный шаг для разработчика C++, поскольку undefined behavior бывает источником серьёзных ошибок и проблем в программах. UB может проявляться в разных аспектах языка, включая операции с памятью, многопоточность, арифметические вычисления, работу с указателями и так далее.

Под катом мы погрузимся в мир неопределённого поведения в C++ и рассмотрим некоторые примеры ситуаций, в которых оно может возникать.

P.S.: Часть приведённых в статье примеров вдохновлены материалами, которые можно посмотреть в разделе «Полезные ссылки».

Читать далее

Первые новинки C++26: итоги летней встречи ISO

Reading time11 min
Views27K

На недавней встрече комитет C++ активно взялся за C++26. Уже есть первые новинки, которые нас будут ждать в готовящемся стандарте C++:

  • улучшенный static_assert,
  • переменная _,
  • оптимизация и улучшение для std::to_string,
  • Hazard Pointer,
  • Read-Copy-Update (так же известное как RCU),
  • native_handle(),
  • целая вереница классов *function*,
  • множество доработок по constexpr,
  • std::submdspan,
  • и прочие приятные мелочи.

Рассмотрим новинки на примерах

Я люблю питон, и вот почему он меня бесит

Level of difficultyEasy
Reading time18 min
Views60K

Вас приветствует ваш зануда!

Если вы следите за моей ленивой активностью, то заметили бы, что у меня много от чего пригорает. Вот, например:
- У меня пригорает от низкосортных статей на потоке: Питон против Безумного Макса, или как я посты на Хабре замораживал
- У меня пригорает от Django: Окей, Джанго, у меня к тебе несколько вопросов
- И от Яндекса тоже: Собеседование в Яндекс: театр абсурда :/
- И от рекрутеров: Я единственный из 1400, или самый крутой рекрутинг, что я проходил

Посмотришь так - я уже давно должен был сгореть. Но я, аки феникс, возрождаюсь, и сегодня у меня горит от, внезапно, Питона, на котором я пишу больше десяти лет. Если вам интересно, что же, по моему мнению, с ним не так - то прошу под кат.

Это что же получается, kesn опять открыл postman и сломал вёрстку на сайте? Поразительно, никогда такого не было, и вот опять! В принципе, тут можно писать текст любой длины (похоже, у них на бэкенде не Char(255), а Text). Они проверяют длину только на фронтенде, а бэкенд принимает строку любой длины. И это, блин, забавно) Вообще мой девиз - 'кто ищет, тот всегда найдёт', поэтому я ищу постоянно. Кстати, на Хабре скоро выйдет статья про программирование глазами Погромиста, там в том числе про уязвимости на сайтах будет - поэтому если не хотите пропустить, то подписывайтесь на меня в телеге: @blog_pogromista

Как «эффективный менеджмент» создаёт катастрофы: изучаем причины техногенных аварий. Часть 1

Level of difficultyEasy
Reading time17 min
Views78K

Когда в бизнес приходят «эффективные менеджеры», стоит ждать беды. С программами урезания расходов, подкручиваниями KPI и прочими странными решениями бизнес может в краткой перспективе получить даже какую‑то выгоду для себя, но довольно быстро сталкивается с проблемами: сложно продать или просто угробить курицу, несущую золотые яйца, и ожидать, что золотые яйца продолжат появляться.

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

Конечно, крушение ИТ‑компании, логистического оператора или юридической консалтинговой фирмы не будут так же эффектны или так же опасны, но вряд ли от этого собственники и адекватные руководители захотят наступления своих критических рисков и краха всего бизнеса.

Погрузиться в бездны катастроф

Механические клавиатуры 2023. Продолжение

Reading time29 min
Views38K

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

Читать далее

Information

Rating
7,150-th
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity