Pull to refresh
52
0.1
Valentin Nechayev @netch80

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

Send message

Когда байты были маленькими

Reading time7 min
Views17K

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

В публикации - три короткие "живые" истории. Первая про старое железо и 6-битные байты. Вторая про старый софт и Министерство Обороны. И третья про старые баги и новые айФоны.

Читать далее

Первый человек менеджмента: история Кароля Адамецкого

Reading time7 min
Views6.3K

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

К сожалению, все его разработки конца 19 — начала 20 века были известны в пределах Российской империи, и тогда по большому счёту не до менеджмента было. Поэтому первенство в открытии проектных диаграмм осталось за Гантом, а первые попытки описать менеджмент как современную дисциплину стали достижением Тэйлора. А Адамецкий вошёл в историю почти никому не известным гением. Дальше — просто его история, интересные находки и озарения.

Читать далее

Умножение матриц: эффективная реализация шаг за шагом

Reading time14 min
Views115K


Введение


Умножение матриц — это один из базовых алгоритмов, который широко применяется в различных численных методах, и в частности в алгоритмах машинного обучения. Многие реализации прямого и обратного распространения сигнала в сверточных слоях неронной сети базируются на этой операции. Так порой до 90-95% всего времени, затрачиваемого на машинное обучение, приходится именно на эту операцию. Почему так происходит? Ответ кроется в очень эффективной реализации этого алгоритма для процессоров, графических ускорителей (а в последнее время и специальных ускорителей матричного умножения). Матричное умножение — один из немногих алгоритмов, которые позволяет эффективно задействовать все вычислительные ресурсы современных процессоров и графических ускорителей. Поэтому не удивительно, что многие алгоритмы стараются свести к матричному умножению — дополнительная расходы, связанные с подготовкой данных, как правило с лихвой окупаются общим ускорением алгоритмов.

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

Процесс изложения будет вестись ввиде шагов с примерами по последовательному ускорению алгоритма. Я старался писать максимально упрощая задачу, но не более того. Надеюсь у меня получилось…
Читать дальше →

Насколько жарко — это слишком жарко? Жара + влажность становятся опасными быстрее, чем многие думают

Reading time6 min
Views65K

По мере изменения климата волны жары становятся все более интенсивными: они длятся дольше, идут чаще, а температуры всё выше. Сейчас одна такая волна проносится через Европу: в Испании и Португалии только за прошедшую неделю умерли 1100 человек. Люди просто оказались не готовы к температурам выше 35 ºС: у них в домах не было кондиционеров, а многие днем выходили и пытались работать как обычно. И получили огромные проблемы со здоровьем.

В целом по Европе за одно это лето счет идет уже на десятки тысяч. Этот год, по всей видимости, станет даже более смертоносным, чем печально известный 2003-й, когда в Европе от жары погибло 30 000 людей. Но тогда температура доходила до 37 ºС, сейчас — под тем же Парижем фиксируют уже до +42 ºС.

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

Попытаемся ответить.

Читать далее

Во что вам обойдется конкурентная обработка. Иерархия проблем

Reading time47 min
Views6.5K

Конкурентность сложно как следует наладить, как минимум, тем из нас, кому не повезло писать на языках, непосредственно открывающих нутро конкурентного аппаратного обеспечения: речь о потоках и разделяемой памяти. Не менее сложно организовать конкурентность так, чтобы она работала и правильно, и быстро. Все, что вы знаете об оптимизации однопоточного кода, зачастую вам не поможет. На микроуровне (отдельные инструкции) просто невозможно применить обычные правила, актуальные для μ-операций, цепочек зависимостей, пределов пропускной способности и т.д. При конкурентности правила другие.

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

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

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

Читать далее

«IBM Selectric»: цифровой механический компьютер для аналоговой секретарши

Reading time11 min
Views7.2K

23 июля 2021 года на «Хабре» прошло как-то спокойно, никто даже и не вспомнил, что в этот день во всем мире отмечали шестидесятилетие пишущей машинки «IBM Selectric І». Вдумчивый читатель спросит: а что, теперь надо отмечать юбилей каждой модели пишущей машинки, которая была выпущена за всю историю человечества? Сразу же отвечу: нет, всех не надо. А вот особо выдающихся — надо. Тем более, что «IBM Selectric І» — это не просто очередная пишущая машинка, а целый компьютер, который смогли создать и запустить в массовое производство в конце 1950-ых годов.

Читать далее

Значение и загадочная история происхождения слова «религия»: расследование

Reading time7 min
Views45K

Неожиданно для меня, происхождение слова «религия» оказалось настоящей загадкой. Сперва всё было как будто бы просто: Google выдал родословное древо слова religion по первому же запросу. Оказалось, что корнями «религия» уходит в латинский глагол religare.

Латинский глагол religare означает «связывать», «воссоединять». В русской Википедии написано, что religare используется в смысле восстановления разорванной связи между человеком и Богом, ощущении некой связи со всем бытием, имеющим системность и организованность.

Во-первых, объяснение про связь с богом ничего не объясняет — даже если бы это было так, то каким образом это превратилось в дальнейшем в «религию» в современном значении?

Во-вторых, там же написано, что «religio (лат.) – совестливость, добросовестность, благочестие» — всё бы ничего, только это перевод не с латыни, а с древнефранцузского.

Расследование того, откуда на самом возникло слово «религия» в современном значении, уводит более чем на две тысячи лет в прошлое и обнаруживает столкновение двух совершенно разных версий двух значимых древнеримских мыслителей — известного ритора Цицерона и известного богослова Лактанция.
Читать дальше →

Добываем исходный код VM/370

Reading time3 min
Views14K
Здравствуйте, уважаемые хабарчане!
Почти неделю назад я написал свой первый пост о VM/370. Первым комментарием к нему было совершенно справедливое замечание:
Весело, конечно, но «полотно» состоит в основном из выводов команд. Если честно, гораздо интереснее прочитать не только про саму установку системы, но и про её «кишки», как, что, да почему.
Исследовать исходники VM/370, к примеру.

Да, действительно, туториал по установке мягко говоря устаревшей ОС интересен только в общепознавательном плане как демонстрация ее возможностей. А вот описание принципов работы с цитатами из исходников — другое дело. Тем более, что исходники доступны. Проблема только в том, что подобное описание — дело серьезное.
Принципы работы VM/370 описаны в этом трехтомнике. Сам исходный код — сравнительно небольшой, «всего» двести тысяч строк на ассемблере — CP и примерно столько же — CMS. Но работа все равно предстоит капитальная.
В этой статье я не ставлю перед собой задачу даже начать цикл о внутренностях VM/370. Я только объясню как я извлек исходный код VM/370 в читабельном формате. В процессе извлечения я узнал кое-что интересное про работу с VM/370.
Читать дальше →

«Инопланетный артефакт» — диск Сабу возрастом более пяти тысяч лет. Что же это такое на самом деле?

Reading time7 min
Views134K

Автор Лысый Камрад (@LKamrad)

Диск Сабу (инвентарный номер JE 71295) можно увидеть в Каирском музее под стеклом витрины в комнате №43. Ему более пяти тысяч лет, и он найден в гробнице "принца Сабу", недалеко от ступенчатой пирамиды фараона Джосера, но сам артефакт, как минимум, на два-три века старше этой самой древней египетской пирамиды.

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

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

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

Внезапно: кавычки против мракобесия. Что бы это ни значило

Reading time6 min
Views29K
Есть на свете вещи действительно важные. Наверное, есть. Должны быть. Да по любому есть.
А есть на свете вещи «важные». Чувствуете разницу? «Важных» вещей полно на работе, в политике, в телевизоре и интернете. Сегодня поговорим только про работу.

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

Так исчезают вещи «важные», и появляются важные, Важные, ВАЖНЫЕ и СУПЕРВАЖНЫЕ!!! Я за то, чтобы такого не было. Всё должно быть адекватно реальности. Поэтому я, читая письма и слушая речи, всегда применяю к ним фильтр. Он уже автоматом срабатывает, как предустановленное сглаживание и размывание фона в камере смартфона.

Главный фильтр, конечно, кавычки.
Читать дальше →

Заговор против IE6

Reading time8 min
Views42K

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

Я не могу вспомнить то конкретное событие, из-за которого наша команда разработки начала строить планы убийства браузера за обедом в столовой Youtube. Возможно, в тот раз я случайно отправил в релиз CSS-стиль, где был указан селектор атрибута на нестандартном HTML-элементе. Любой здравомыслящий веб-разработчик предположил бы, что если браузер не может распознать элемент - он молча пропустит данное описание. Но со старыми версиями IE дело обстояло не так. В определенных условиях это приводило либо к внутренней рекурсии и падению браузера (если повезет), или даже к синему экрану смерти (если не повезет).

А может быть, в сотый раз кто-то из наших разработчиков использовал тег <img> без указания атрибута src. От новичков никто не требовал быть в курсе, что в старых версиях IE вместо пустого аттрибута src подставляется корневой путь ("/"). Это внезапно превращает тег <img> в <iframe>, загружая главную страницу и все связанные с ней ресурсы, что может привести к бесконечной рекурсии. Когда пустой тег <img> случайно просачивался на главную страницу - вся команда в экстренном режиме искала его, пока сервера не расплавились под нагрузкой.

В общем, не вдаваясь в подробности - это была настоящая жесть, и она была связана с IE6. Этот браузер сильно отравлял жизнь всей нашей команде разработки. По меньшей мере 1-2 недели из каждого мажорного релиза отводились на то, чтобы заставить новый UI работать под IE6. Несмотря на всю эту боль, нас заставляли поддерживать его ради пользователей, которые не могут обновиться или работают в компаниях, где обновление запрещено политиками безопасности. Пользователи IE6 на тот момент составляли примерно 18% от общего числа. Все понимали, что просто так прекратить его поддержку нельзя, но когда мы сидели в той столовой после нескольких бессонных ночей, на сопереживание тем несчастным пользователям просто не оставалось сил. Мы начали коллективно фантазировать о том, как отомстить IE6. Одна идея сразу привлекла всеобщее внимание: а что, если мы просто пригрозим прекратить поддержку? Как отреагируют пользователи? Они поднимут бунт против Youtube, начнут присылать нам письма с угрозами расправы (как это уже случалось раньше)? Или вдруг станут апологетами новых браузеров? Мы мечтали о том, как офисные работники по всему миру внезапно начнут придумывать причины, по которым обновление браузеров жизненно необходимо для бизнеса, а бабушки и дедушки возьмут своих технически прошаренных внуков в заложники, чтобы те "починили им ютубы". То, что началось как сеанс групповой психотерапии, стало превращаться в конкретный план действий, для реализации которого у нас были уникальные условия.

Читать далее

«Интернет в огне»: критическая уязвимость Log4Shell терроризирует онлайн-сервисы

Reading time3 min
Views47K


Критическая уязвимость в Java, в библиотеке log4j, которая используется в тысячах сервисов, начиная от Minecraft и заканчивая Apple Cloud, быстро превращается в серьезную угрозу для организаций по всему миру. Уязвимости подвержены сервера Apple, Valve, Microsoft и других.

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

Си должен умереть

Reading time21 min
Views113K

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее

Эмуляторы советских процессорных систем

Reading time6 min
Views22K

В этой статье я собрал обобщающую информацию по некоторым программным эмуляторам советских компьютерных систем - начиная от больших ЭВМ типа БЭСМ-6 и заканчивая микропроцессорными электронными играми.

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

Читать далее

IPv4 адреса: правовые аспекты дефицитного товара

Reading time16 min
Views11K

Несколько месяцев назад одна из крупнейших онлайн бирж IP-адресов выступила с заявлением, что в первом квартале 2021 года цены на адреса протокола IPv4 достигли исторического пика и превысили 32$ за адрес. Судя по всему, на данный момент цены продолжают расти, доходя до 60$ за адрес и выше.

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

Читать далее

Как LLVM оптимизирует функцию

Reading time10 min
Views10K
Оптимизирующий AOT-компилятор обычно структурирован так:

  1. фронтенд, преобразующий исходный код в промежуточное представление
  2. конвейер машинно-независимой оптимизации (IR): последовательность проходов, которые переписывают IR для устранения неэффективных участков и структур, которые не могут быть непосредственно преобразованы в машинный код. Иногда эту часть называют middle-end.
  3. Машинно-зависимый бэкенд для генерации ассемблерного кода или машинного кода.



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

О [[trivial_abi]] в Clang-е

Reading time9 min
Views3.9K
Наконец-то я написал пост про [[trivial_abi]]!

Это новая фирменная фича в транке Clang-а, новая по состоянию на февраль 2018. Это вендорское расширение языка C++, это не стандартный C++, она не поддерживается транком GCC, и нет активных предложений WG21 включить её в стандарт C++, насколько мне известно.



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

Как я «напрограммировал» себе скилл рисования диаграмм в скетч-стиле

Reading time5 min
Views27K

По работе мне часто приходится рисовать разные схемы, диаграммы процессов и графики, в том числе и те, которые потом используются в качестве иллюстраций для сайта, статей и презентаций. Всё бы ничего, но есть у диаграмм и графиков, сделанных в популярных онлайн-сервисах наподобие draw.io или lucidcharts одна беда — они выглядят как-то слишком уныло и «олдскульно», в духе «90-х». Всю эту инфографику хотелось бы сделать более заметной, привлекательной и душевной (и, желательно, без привлечения дизайнера).

Так у меня возникла идея создания инструмента для отрисовки диаграмм и графиков в стиле «нарисовано от руки». Об истории создания сервиса и «подводных камнях» я расскажу в этой заметке.

Читать далее

Да хватит уже писать эти регулярки

Reading time7 min
Views18K

Здравствуйте, меня зовут Дмитрий Карловский и раньше я тоже использовал Perl для разработки фронтенда. Только гляньте, каким лаконичным кодом можно распарсить, например, имейл:


/^(?:((?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}(?:\.(?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}){0,})|("(?:((?:(?:([\u{1}-\u{8}\u{b}\u{c}\u{e}-\u{1f}\u{21}\u{23}-\u{5b}\u{5d}-\u{7f}])|(\\[\u{1}-\u{9}\u{b}\u{c}\u{e}-\u{7f}]))){0,}))"))@(?:((?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}(?:\.(?:[\w!#\$%&'\*\+\/=\?\^`\{\|\}~-]){1,}){0,}))$/gsu

Тут, правда, закралось несколько ошибок. Ну ничего, пофиксим в следующем релизе!

Шутки в сторону

Три ужасные фичи программирования из прошлого

Reading time6 min
Views57K

Я верю в программистское клише о том, что большинство плохих фич имеет причины для существования. Ненавидимый многими оператор goto позволяет быстро и удобно выбраться из глубоко вложенной структуры, если пользоваться им с умом. Определённая степень нестрогости типов позволяет им быть более изящными. Указатели памяти могут заставить вас возненавидеть свою жизнь, но они были критически важны в те годы, когда компьютерное «железо» было слабее современного умного термостата. Список можно продолжать.

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

Information

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