Как стать автором
Обновить
1
0
Максим Кот @maydjin

Пишем софтецкий

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

«Привет, мир»: разбираем каждый шаг хэш-алгоритма SHA-256

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

SHA-2 (Secure Hash Algorithm), в семейство которого входит SHA-256, — это один самых известных и часто используемых алгоритмов хэширования. В тексте подробно покажем каждый шаг работы этого алгоритма на реальном примере. SHA-2 отличается безопасностью (его тяжелее взломать, чем SHA-1) и скоростью.
Читать дальше →
Всего голосов 26: ↑23 и ↓3+26
Комментарии6

Поговорим про перформанс-анализ

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


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


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

Всего голосов 56: ↑56 и ↓0+56
Комментарии7

Реализация epoll, часть 2

Время на прочтение7 мин
Количество просмотров4.8K
Публикуя перевод первой статьи из цикла материалов о реализации epoll, мы провели опрос, посвящённый целесообразности перевода продолжения цикла. Более 90% участников опроса высказались за перевод остальных статей. Поэтому сегодня мы публикуем перевод второго материала из этого цикла.


Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии4

Памятка для пострадавшего от слезоточивого газа/перцового баллона

Время на прочтение22 мин
Количество просмотров149K
Началась эта история еще в докоронавирусное время, еще тогда когда в моем LAB66 была всего пара тысяч подписчиков и работал бот-автоответчик. И вот в этот бот как-то постучался русскоговорящий парень из Чили и задал вопрос про слезоточивый газ. Про то, как жить вообще, когда по улицам ездят автомобили и распыляют «просроченный слезоточивый газ из Бразилии». Тогда я клятвенно пообещал вопросом этим заняться. Прошло… а прошло всего лишь полгода (хотя из-за обилия событий в 2020 кажется, что прошло 20 лет :) и я решил наконец написать парню ответ. Извини за задержку, Sergio из Чили, я был занят коронавирусом… Читай ответ под катом!


Всякое в жизни бывает, а вдруг да и пригодится...
Всего голосов 103: ↑100 и ↓3+136
Комментарии116

Архитектурные методы: что это и зачем они нужны

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

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


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


Читать дальше →
Всего голосов 7: ↑6 и ↓1+8
Комментарии2

Джон Рейнарц и его легендарный радиоприёмник

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

27 ноября 1923 года американские радиолюбители Джон Рейнарц (John L. Reinartz, 1QP) и Фред Шнелль (Fred H. Schnell, 1MO) провели двустороннюю трансатлантическую радиосвязь с радиолюбителем из Франции Леоном Делоем (Leon Deloy, F8AB) на длине волны около 100 м. Это событие оказало огромное влияние на развитие мирового радиолюбительского движения и радиосвязи на коротких волнах. Одним из решающих факторов, повлиявшим на успех, оказалась доработка Шнеллем и Рейнарцем схемы регенеративного радиоприёмника Армстронга. Доработки оказались настолько удачными, что для конструкций подобных приёмников фамилии «Шнелль» и «Рейнарц» стали именами нарицательными.
Читать дальше →
Всего голосов 45: ↑45 и ↓0+45
Комментарии26

Museria — децентрализованное хранилище музыки

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

Собрался я однажды написать приложение, чтобы отбирать музыку для себя и слушать дома/на улице/тренировках и.т.д. И чтобы все это работало в потоке, с минимальным моим участием. Придумал архитектуру, набросал прототип и в итоге столкнулся с одной “небольшой проблемой”.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии28

Видео лекций Computer Science клуба

Время на прочтение1 мин
Количество просмотров5.1K
Computer Science клуб — это открытые лекции по компьютерным наукам в Санкт-Петербургском отделении Математического института РАН. Филиалы CS клуба действуют в Новосибирске и Казани.

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

image

Все курсы открыты для посещения, вход свободный, регистрация не нужна.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии3

Книга «Совершенный алгоритм. Жадные алгоритмы и динамическое программирование»

Время на прочтение6 мин
Количество просмотров7.7K
image Привет, Хаброжители! В новой книге Тим Рафгарден рассказывает о жадных алгоритмах (задача планирования, минимальные остовные деревья, кластеризация, коды Хаффмана) и динамическом программировании (задача о рюкзаке, выравнивание последовательностей, кратчайшие пути, оптимальные деревья поиска). В данном посте представлен отрывок «Разработка жадного алгоритма»

Жадные алгоритмы, по всей видимости, хорошо подходят для задачи планирования работ, минимизируя взвешенную сумму сроков завершения. Выход имеет итеративную структуру, где работы обрабатываются по одной. Почему бы не использовать жадный алгоритм, который итеративно решает, какая работа будет следующей?
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии0

Измеряем на коленке пропускную способность памяти

Время на прочтение9 мин
Количество просмотров19K
Несколько недель назад в разговоре за обедом коллега пожаловался на какой-то медленный процесс. Он подсчитал количество сгенерированных байт, количество циклов обработки, и в конечном счёте, объём оперативной памяти. Коллега заявил, что современный GPU с пропускной способностью памяти более 500 ГБ/с съел бы его задачу и не подавился.

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



Я знаю, как писать код, который активно использует кэш. Знаю примерые цифры задержки. Но этого недостаточно, чтобы сходу оценить пропускную способность памяти.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии21

Примитивно-рекурсивные функции и функция Аккермана

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

Функция Аккермана — одна из самых знаменитых функций в Computer Science. С ней связан как минимум один фундаментальный результат и как минимум один просто важный. Фундаментальный результат, говоря аккуратно и непонятно, таков: существует всюду определённая вычислимая функция, не являющаяся примитивно-рекурсивной. Важный результат заключается в том, что лес непересекающихся множеств (также известный как disjoint set union) работает очень быстро.


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


Из текста ниже вы узнаете, что такое примитивно-рекурсивные функции и как выяснить, что функция Аккермана к таковым не относится. И, конечно, этот текст убедит вас в том, что это невероятно красивая конструкция и невероятно красивое рассуждение!

Читать дальше →
Всего голосов 28: ↑27 и ↓1+43
Комментарии12

Проклятие второго месяца

Время на прочтение3 мин
Количество просмотров14K
У организационных изменений две ключевые проблемы – начать и не бросить. Причем, как ни странно, не бросить – сложнее, чем начать.

Начать сложно, если изменения запланированы большие. Решается эта проблема просто – надо начать понемногу, кусками. Для знатоков напомню – это называется agile, а еще – fail fast, fail cheap. Сделал шажок, оценил, либо выкинул, либо оставил, и делаешь следующий. Людям с более серьезным образованием скажу, что это – банальный цикл Деминга, а не модная хипстерская выдумка.

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

По моим наблюдениям, «бросание» почти всегда случается на второй месяц.
Читать дальше →
Всего голосов 34: ↑29 и ↓5+33
Комментарии8

Как работает криптография на основе эллиптических кривых в TLS 1.3

Время на прочтение23 мин
Количество просмотров31K
image

Пара предупреждений читателю:

Для того, чтобы (насколько это возможно) упростить процесс объяснения и сжать объем публикации, стоит сразу же сделать ключевую оговорку — все, что мы пишем, касаемо практической стороны рассматриваемой проблематики, корректно для протокола TLS версии 1.3. Это значит, что хотя ваш ECDSA сертификат и будет, при желании, работать с TLS 1.2, описание процесса хендшейка, наборов шифров и бенчмарков сделано на основании последней версии протокола TLS — 1.3. Как вы понимаете, это не относится к математическому описанию алгоритмов, лежащих в фундаменте современных криптографических систем.

Данный материал был написан не математиком и даже не инженером — хотя они и помогали проложить дорожку сквозь математические дебри. Огромная благодарность сотрудникам Qrator Labs.

(Elliptic Curve) Diffie-Hellman (Ephemeral)


Наследие Диффи — Хеллмана в XXI веке

Естественным образом, данная тема начинается не с Уитфилда Диффи и не с Мартина Хеллмана. Алан Тьюринг и Клод Шеннон сделали огромный вклад в теорию алгоритмов и теорию информации, равно как и в область криптоанализа. Диффи и Хеллман, в свою очередь, официально признаются авторами идеи криптографии с публичным ключом (также называемой асимметричной) — хотя теперь известно, что в Великобритании были также достигнуты серьезные результаты в этой области. Однако они оставались засекреченными длительное время — что делает двух джентльменов, упомянутых в подзаголовке, первопроходцами.

В чем именно?
Читать дальше →
Всего голосов 54: ↑53 и ↓1+52
Комментарии7

Введение в теорию множеств

Время на прочтение12 мин
Количество просмотров117K
image

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

Когда-то давным давно во всех академических дисциплинах было заложено фундаментальное убеждение — существует единственная бесконечность.

Но 1874 году довольно малоизвестный математик провёл серию революционных наблюдений, подвергавших сомнению это всеми принятое и глубоко укоренившееся убеждение. Георг Кантор в своей (теперь уже ставшей легендарной) публикации On a Property of the Collection of All Real Algebraic Numbers доказал, что множество вещественных чисел «более многочисленно», чем множество алгебраических чисел. Так он впервые показал, что существуют бесконечные множества разных размеров (не волнуйтесь — для прояснения этого мы вскоре подробно изучим его статью).
Читать дальше →
Всего голосов 38: ↑31 и ↓7+24
Комментарии27

Краткий путеводитель по математике для иностранцев

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


О чем это


А как можно на четвёртом десятке и с аверсией к алгебре наверстать требуемый материал первых курсов университета?

Безумству храбрых поем мы песню!

Целевой аудиторией Путеводителя являются те, кто внезапно заинтересовался математикой или чувствует потребность повысить свою профессиональную эффективность, но по какой-либо причине не имеет возможности отдать несколько лет своей жизни академическому образованию. Если у вас возникла потребность разобраться, но фундаментальных знаний катастрофически не хватает, и вы чувствуете себя иностранцем в стране математики, где говорят на непонятном языке, попробуйте пройти этот путь в качестве туриста. Весь маршрут представляет собой обзорную экскурсию и рассчитан на несколько дней, максимум две недели. Для сравнения: полный академический курс составляет около пяти лет. Конечной целью предлагаемого маршрута является знакомство с принципами одного узкоспециального раздела — эллиптической криптографии. Однако до конца идти не обязательно, если этот раздел лежит вне сферы ваших интересов или вы столкнулись с серьезными трудностями или опасностями. Но, раз уж вы взяли в руки Путеводитель, всё же постарайтесь дойти хотя бы до конца раздела «Язык формул».


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


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

Читать дальше →
Всего голосов 83: ↑78 и ↓5+73
Комментарии35

Шпаргалка по аббревиатурам C++ и не только. Часть 2: «и не только»

Время на прочтение17 мин
Количество просмотров12K
Это вторая и последняя часть моей шпаргалки по аббревиатурам, которые стоит знать C++ разработчику. С++ здесь упомянут только потому, что шпаргалку я составил в первую очередь для себя, а я как раз-таки C++ разработчик.

На самом деле в этой части собраны понятия, область применения которых не ограничена C++. Так что подборка может быть интересна более широкой аудитории.


Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии3

Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++

Время на прочтение20 мин
Количество просмотров56K
Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».

Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.


Читать дальше →
Всего голосов 52: ↑52 и ↓0+52
Комментарии29

Оптимизация портфеля облигаций с применением библиотеки ALGLIB

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

Статья, ввиду наличия в ней не малого объема математики, кому-то может показаться усложненной. Но если уж Вы решили заняться инвестициями, то нужно быть готовым к тому, что в финансовой реальности часто встречается математика и еще значительно сложнее.

Исходные коды программы и пример портфеля для оптимизации выложены на GitHub.

UPDATE: Как и обещал, сделал простой веб-сервис, делающий возможности программы доступными всем без копирования и компиляции кода.
ссылка
Инструкция по использованию там же.
Если что-то не будет работать или нужно что-то подправить — пишите в комментарии.

Итак, имеем задачу сформировать эффективный портфель облигаций.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Комментарии17

Производительность сетевых приложений Linux. Введение

Время на прочтение9 мин
Количество просмотров14K
Веб-приложения ныне используются повсеместно, а среди всех транспортных протоколов львиную долю занимает HTTP. Изучая нюансы разработки веб-приложений, большинство уделяет очень мало внимания операционной системе, где эти приложения реально запускаются. Разделение разработки (Dev) и эксплуатации (Ops) лишь ухудшало ситуацию. Но с распространением культуры DevOps разработчики начинают нести ответственность за запуск своих приложений в облаке, поэтому для них очень полезно досконально познакомиться с бэкендом операционной системы. Это особенно полезно, если вы пытаетесь развернуть систему для тысяч или десятков тысяч одновременных подключений.

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

Я пишу эту серию статей в ответ на вопросы молодых разработчиков, которые хотят стать хорошо информированными системными архитекторами. Невозможно чётко понять методы оптимизации приложений Linux, не погрузившись в основы, как они работают на уровне операционной системы. Хотя есть много типов приложений, в этом цикле я хочу исследовать сетевые приложения, а не десктопные, такие как браузер или текстовый редактор. Этот материал рассчитан на разработчиков и архитекторов, которые хотят понять, как работают программы Linux или Unix и как их структурировать для высокой производительности.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии3

Network tools, или с чего начать пентестеру?

Время на прочтение9 мин
Количество просмотров43K
Toolkit начинающего пентестера: представляем краткий дайджест главных инструментов, которые пригодятся при пентесте внутренней сети. Эти инструменты уже активно используются широким кругом специалистов, поэтому знать об их возможностях и владеть в совершенстве будет полезно каждому.


Читать дальше →
Всего голосов 40: ↑37 и ↓3+34
Комментарии6
1
23 ...

Информация

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