Pull to refresh
0
0
Send message

16-битная ОС на fasm + Cи. Часть 1

Reading time 6 min
Views 11K

Данная статья в большей степени является не руководством и не мануалом, а просто моими заметками. Идея этой статьи собрать множество особенностей и знаний в одно целое, надеюсь, она кому-то пригодится =)

Читать далее
Total votes 22: ↑22 and ↓0 +22
Comments 21

Теория инвестиций для начинающих, часть 1

Reading time 16 min
Views 69K
Эдвард Мэтью Ворд. Пузырь Компании Южных морей. 1847 г. Галерея Тейт, Лондон.

В какие ценные бумаги вкладывать деньги? Как накопить на пенсию? Кто такие ETF’ы и почему все с ними носятся? Зачем покупать акции, если рынок может упасть? Такие вопросы я слышу от студентов и коллег, когда читаю лекции о деривативах. В принципе, неудивительно. Деривативы — это что-то далёкое из мира больших банков, а личные инвестиции намного ближе к телу.

Можно было бы ответить коротко: «Покупайте индексные фонды, это хорошо!» К сожалению, такой ответ не объясняет, почему это хорошо. Если бы я услышал его 15 лет назад, когда ещё не интересовался финансами, то он не нашёл бы отклика в моём сердце. Пришлось прослушать не один курс лекций, чтобы осознать, какая экономическая теория стоит за этим советом, и начать применять его на практике.

Собственно, моя статья — не столько инвестиционный совет (хотя я и расскажу о личном опыте и даже посчитаю свою «альфу»), сколько обзорный курс по теории инвестиций. Полезно знать, какие модели придумали предыдущие поколения, и в каких терминах можно думать об инвестициях. Если из теории следует, что имеет смысл покупать индексные ETF’ы, чтобы копить на пенсию — так и быть, расскажу и об этом.

Не секрет, что в финансах много математики. Я постарался соблюсти баланс. Я считаю, что интуитивное понимание главных экономических идей важнее, чем конкретная формула. Даже если вы пропустите вообще все формулы, то вы всё равно поймёте суть и получите полезные знания. С другой стороны, если вы хотели бы размять мозги не ахти какой сложной математикой, то у вас будет такая возможность.
Читать дальше →
Total votes 31: ↑31 and ↓0 +31
Comments 18

Теория инвестиций для начинающих, часть 2

Reading time 22 min
Views 29K
Пауль де Вос. Бык, поверженный собаками. 1638–1640 гг. Музей Прадо, Мадрид.

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

  • как составить оптимальный с точки зрения риска и доходности портфель, не углубляясь в суровую математику (посмотреть на рыночную капитализацию активов);
  • как заработать что-то сверх безрисковой процентной ставки (взять на себя риск и на дистанции заработать премию за этот риск);
  • любой ли риск вознаграждается премией (нет, только систематический);
  • от чего зависит ожидаемая будущая доходность отдельной акции (главным образом, от ковариации со всем рынком);
  • сколько зарабатывали инвесторы в рынок акций США (порядка 7–9% в год сверх безрисковой ставки);
  • почему так много (возможно, люди не полностью рациональны и преувеличивают рискованность акций);
  • можно ли предсказать будущую доходность рынка акций (скорее всего, нет);
  • как осадить трейдера на коктейльной вечеринке (спросить, какой у него Шарп).
Читать дальше →
Total votes 30: ↑30 and ↓0 +30
Comments 18

Как бы я изучал Data Science, если бы начал пару лет назад, или Руководство по эффективному изучению науки о данных

Reading time 5 min
Views 29K
Когда я только начал своё путешествие к науке о данных, я потратил много времени на то, чтобы понять, с чего начать, что я должен узнать в первую очередь и какие ресурсы должен использовать. За последние два года я узнал несколько вещей, о которых хотел знать раньше, например о том, стоит ли сначала сосредоточиться на программировании или статистике, какие ресурсы я должен использовать для изучения новых навыков, как я должен подходить к изучению этих навыков и так далее. Таким образом, эта статья написана, чтобы дать направления и идеи для тех, кто изучает Data Science.

Приятного чтения!
Total votes 37: ↑36 and ↓1 +35
Comments 3

select / poll / epoll: практическая разница

Reading time 10 min
Views 69K
При проектировании высокопроизводительных сетевых приложения с неблокирующими сокетами важно решить, какой именно метод мониторинга сетевых событий мы будем использовать. Их есть несколько и каждый хорош и плох по-своему. Выбор правильного метода может быть критически важной вещью для архитектуры вашего приложения.

В этой статье мы рассмотрим:

  • select()
  • poll()
  • epoll()
  • libevent
Читать дальше →
Total votes 60: ↑55 and ↓5 +50
Comments 66

Математические бэкдоры в алгоритмах шифрования

Reading time 17 min
Views 24K

Мы привыкли полагаться на современные алгоритмы шифрования. Однако, действительно ли они так безопасно защищают наши данные? Давайте разберёмся с таким понятием как математический бэкдор, что он из себя представляет и как работает.

Читать далее
Total votes 54: ↑52 and ↓2 +50
Comments 49

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

Reading time 12 min
Views 6.1K
В скором времени у нас стартует новый поток продвинутого курса «Machine Learning Pro + Deep Learning», а сегодня мы делимся постом, в котором рассказывается о подходах к реставрации с помощью глубокого обучения. Реставрация изображений в разрезе глубокого обучения — это задача заполнения потерянных пикселей так, чтобы итоговое изображение выглядело реалистично и соответствовало оригинальному контексту. Некоторые приложения метода, такие как удаление нежелательных объектов и интерактивное редактирование изображений, показаны на кдпв. Приложений на самом деле так много, как вы только можете себе представить.
Приятного чтения!
Total votes 27: ↑26 and ↓1 +25
Comments 2

Вскрытие трафика в публичных сетях

Reading time 9 min
Views 66K


Эта статья о том, как стать кулхацкером (или по-английски Script Kiddie) — условным злоумышленником, который испытывает недостаток знаний в области программирования и использует существующее программное обеспечение, чтобы провести атаку на смартфоны и планшеты своих одноклассников.

Шучу. На самом деле передо мной стояла задача понять две вещи:

  1. Насколько опасно пользоваться публичным WiFi в 2020 году, в мире где господствуют браузеры и сайты с повсеместно победившими технологиями HTTPS (на основе TLS 1.1+) и HSTS
  2. Сможет ли человек моего уровня знаний (не самого высокого) “залезть” в чужой браузер и стащить ценные данные.

Спойлер
А в спойлере спойлер:
  1. Да, Опасно!
  2. Вполне сможет
Total votes 66: ↑64 and ↓2 +62
Comments 22

Работа с PEB и TEB

Reading time 6 min
Views 38K
PEB — структура процесса в windows, заполняется загрузчиком на этапе создания процесса, которая содержит информацию о окружении, загруженных модулях (LDR_DATA), базовой информации по текущему модулю и другие критичные данные необходимые для функционирования процесса. Многие системные api windows, получающие информацию о модулях (библиотеках) в процессе, вызывают ReadProcessMemory для считывания информации из PEB нужного процесса.
Читать дальше →
Total votes 28: ↑22 and ↓6 +16
Comments 4

Пишем шеллкод под Windows на ассемблере

Reading time 22 min
Views 17K
image

В этой статье я хочу показать и подробно объяснить пример создания шеллкода на ассемблере в ОС Windows 7 x86. Не смотря на солидный возраст данной темы, она остаётся актуальной и по сей день: это стартовая точка в написании своих шеллкодов, эксплуатации переполнений буферов, обфускации шеллкодов для сокрытия их от антивирусов, внедрения кода в исполняемый файл (PE Backdooring). В качестве примера я выбрал TCP bind shellcode, т.к. на мой взгляд — это лучший пример, потому что все остальные базовые шеллкоды имеют много общего с ним. Статья будет полезна для специалистов по информационной безопасности, пентестеров, начинающих реверс-инженеров и всем, кто желает разобраться в базовых принципах работы ОС Windows. Плюсом — улучшаются навыки программирования.
Читать дальше →
Total votes 27: ↑25 and ↓2 +23
Comments 20

В нативный код из уютного мира Java: путешествие туда и обратно (часть 2)

Reading time 20 min
Views 15K


Это вторая часть расшифровки доклада Ивана Углянского (dbg_nsk) с JPoint 2020, посвященного связи Java с нативным кодом. В прошлой части мы поговорили про традиционный способ связи — через Java Native Interface (JNI), рассмотрели специфичные ему проблемы и оценили производительность. Картина получилась удручающей, поэтому давайте разбираться, чем можно заменить JNI?

Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Comments 7

В нативный код из уютного мира Java: путешествие туда и обратно (часть 1)

Reading time 18 min
Views 28K


Java и другие управляемые языки просты и удобны во многих случаях, но иногда их возможностей недостаточно — например, если нужна библиотека, написанная только на C или C++. Иногда хочется позвать пару методов из системного API, или попытаться улучшить производительность для модуля — и тогда прямой путь в нативный код.


Но тут возникают подводные камни: написать нативный метод и вызвать библиотеку может быть и легко, но JVM начинает крашиться в случайных местах, производительность падает, сборщик мусора перестает справляться с работой, а в репозитории царствуют бесконечные C-шные файлы с буквами JNI. Что же могло пойти не так?


Иван Углянский (dbg_nsk) из Huawei разбирается со всем по порядку: что необычного в интеропе между Java и нативным кодом, как оно работало раньше и что нужно делать для их нормальной совместной работы (и можно ли это вообще сделать). Иван рассказывает, как избежать просадок производительности, внезапных OOM и размышляет на тему будущего — в контексте проектов Panama и Sulong.


Мы подготовили текстовую версию доклада о работе с нативами в Java. В первой части:


  • Зачем вообще работать с нативным кодом в Java.
  • С какими ошибками и проблемами придётся столкнуться при работе с нативами.

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


Далее — повествование от лица спикера.

Читать дальше →
Total votes 55: ↑55 and ↓0 +55
Comments 19

Ускорение в 14 000 раз или Победа компьютерной науки

Reading time 6 min
Views 17K
Как разработчику научного ПО мне приходится много программировать. И большинство людей из других научных областей склонны думать, что программирование — это «просто» набросать код и запустить его. У меня хорошие рабочие отношения со многими коллегами, в том числе из других стран… Физика, климатология, биология и т. д. Но когда дело доходит до разработки ПО, то складывается отчётливое впечатление, что они думают: «Эй, что тут может быть сложного?! Мы просто записываем несколько инструкций о том, что должен сделать компьютер, нажимаем кнопку „Выполнить” и готово — получаем ответ!»

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

Люди не понимают, что информатика учит вас теории вычислений, сложности алгоритмов, вычислимости (то есть можем ли мы действительно что-то вычислить? Слишком часто мы считаем само собой разумеющимся, что можем!) Информатика даёт знания, логику и методы анализа, помогающие написать код, который выполнится за минимальное количество времени или с минимальным использованием ресурсов.
Читать дальше →
Total votes 48: ↑47 and ↓1 +46
Comments 43

Зона доступа: 30 способов, которые позволят разблокировать любой смартфон. Часть 2

Reading time 14 min
Views 21K


По правде говоря, технические методы разблокировки мобильных устройств не являются самоцелью для компьютерного криминалиста. Его основная задача — получить доступ к данным, хранящимся в памяти. Поэтому, если исследователю удается извлечь информацию из устройства в обход установленного PIN-кода или графического пароля — необходимость в разблокировке обычно отпадает. С другой стороны, если эксперт все-таки извлекает данные на физическом или логическом уровнях, то он может получить информацию, которая поможет ему в дальнейшем разблокировать девайс. В этой статье Игорь Михайлов, специалист Лаборатории компьютерной криминалистики Group-IB, продолжает рассказывать о способах, которые позволяют экспертам-криминалистам обойти блокировку мобильного устройства. Первую часть можно посмотреть здесь.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Comments 4

Попробуем выдвинуть аргументы против Rust

Reading time 6 min
Views 24K
Недавно я прочитал статью c критикой Rust. Хотя в ней было много правильных вещей, она мне не понравилась — слишком многое там очень спорно. В целом, я вообще не могу рекомендовать к прочтению никакой статьи с критикой Rust. Это нехорошо, ведь важно обсуждать недостатки, а шельмование низкокачественной и неумелой критики, к сожалению, заставляет пропустить мимо внимания действительно хорошие аргументы.

Итак, попробую привести аргументы против Rust.
Читать дальше →
Total votes 54: ↑52 and ↓2 +50
Comments 78

Склеиваем несколько фотографий в одну длинную с помощью компьютерного зрения

Reading time 4 min
Views 24K
В предыдущих статьях был описан шеститочечный метод разворачивания этикеток и как мы тренировали нейронную сеть. В этой статье описано, как склеить фрагменты, сделанные из разных ракурсов, в одну длинную картинку.
Читать дальше →
Total votes 101: ↑101 and ↓0 +101
Comments 30

Моё разочарование в софте

Reading time 11 min
Views 388K

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


Я занимаюсь программированием уже 15 лет. Но в последнее время при разработке не принято думать об эффективности, простоте и совершенстве: вплоть до того, что мне становится грустно за свою карьеру и за IT-отрасль в целом.

Для примера, современные автомобили работают, скажем, на 98% от того, что физически позволяет нынешняя конструкция двигателя. Современная архитектура использует точно рассчитанное количество материала, чтобы выполнять свою функцию и оставаться в безопасности в данных условиях. Все самолёты сошлись к оптимальному размеру/форме/нагрузке и в основном выглядят одинаково.

Только в программном обеспечении считается нормальным, если программа работает на уровне 1% или даже 0,01% от возможной производительности. Ни у кого вроде нет возражений.
Total votes 505: ↑474 and ↓31 +443
Comments 2474

Deep Learning: как это работает? Часть 1

Reading time 3 min
Views 15K

В этой статье вы узнаете



-В чем суть глубокого обучения

-Для чего нужны функции активации

-Что такое FCNN

-Какие задачи может решать FCNN

-Каковы недостатки FCNN и с помощью чего с ними бороться

Читать дальше →
Total votes 17: ↑10 and ↓7 +3
Comments 3

Java-модель памяти (часть 2)

Reading time 4 min
Views 34K
Привет, Хабр! Представляю вашему вниманию перевод второй части статьи «Java Memory Model» автора Jakob Jenkov. Первая часть тут.

Аппаратная архитектура памяти


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

Вот упрощенная схема аппаратной архитектуры современного компьютера:

Современный компьютер часто имеет 2 или более процессоров. Некоторые из этих процессоров также могут иметь несколько ядер. На таких компьютерах возможно одновременное выполнение нескольких потоков. Каждый процессор (прим. переводчика — тут и далее под процессором автор вероятно подразумевает ядро процессора или одноядерный процессор) способен запускать один поток в любой момент времени. Это означает, что если ваше Java-приложение является многопоточным, то внутри вашей программы может быть запущен одновременно один поток на один процессор.

Каждый процессор содержит набор регистров, которые, по существу, находятся в его памяти. Он может выполнять операции над данными регистрах намного быстрее, чем в над данными, которые находятся в основной памяти компьютера (ОЗУ). Это связано с тем, что процессор может получить доступ к этим регистрам гораздо быстрее.
Читать дальше →
Total votes 13: ↑11 and ↓2 +9
Comments 5

Java-модель памяти (часть 1)

Reading time 5 min
Views 76K
Привет, Хабр! Представляю вашему вниманию перевод первой части статьи «Java Memory Model» автора Jakob Jenkov.

Прохожу обучение по Java и понадобилось изучить статью Java Memory Model. Перевёл её для лучшего понимания, ну а чтоб добро не пропадало решил поделиться с сообществом. Думаю, для новичков будет полезно, и если кому-то понравится, то переведу остальное.

Первоначальная Java-модель памяти была недостаточно хороша, поэтому она была пересмотрена в Java 1.5. Эта версия модели все ещё используется сегодня (Java 14+).
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Comments 7
1

Information

Rating
Does not participate
Registered
Activity