Pull to refresh
4
Karma
0
Rating
Alexander Irbis @BlessMaster

Разработчик

  • Followers 10
  • Following 274
  • Posts
  • Comments

Соотношение «цена-прибыль» Шиллера и пузыри на рынке акций

Технологический Центр Дойче Банка corporate blog Popular science Finance in IT
Адриан Ханнеман. Два мальчика, выдувающие пузыри. ок. 1630 г. Музей искусств Нортона, Уэст-Палм-Бич.

Пару месяцев назад на Хабре вышла статья «На фондовом рынке США сформировался пузырь небывалых размеров». Согласно этой статье, «мультипликаторы находятся на исторических максимумах», так что «большой кризис неизбежен».

Один из мультипликаторов, на который ссылается статья — это известное соотношение «цена-прибыль» Шиллера. Честно говоря, я уже сбился со счёта, сколько раз за последние годы я читал апокалиптические прогнозы, основанные на индикаторе Шиллера. Чтобы выяснить, насколько можно верить этим прогнозам, я решил наконец-то почитать работы Шиллера и других исследователей. Оказалось, что недавно даже сам Шиллер написал, что такой прямолинейный взгляд на показатель «цена-прибыль» может быть весьма спорным.

В этой статье я расскажу, как устроен многострадальный индикатор Шиллера, почему сам Шиллер не вполне поддерживает всёпропальщицкие предсказания, есть ли статистическая связь между индикатором и долгосрочной доходностью рынка акций, и можно ли на ней заработать. Спойлер: скорее всего, философский камень инвестиций всё ещё не найден, а высокое соотношение «цена-прибыль» в первую очередь связано с низким процентными ставками.
Читать дальше →
Total votes 43: ↑43 and ↓0 +43
Views 14K
Comments 26

Как пересчитать электронную таблицу

Open source *Algorithms *Rust *Software
Translation
Предположим, я заказываю буррито для двоих друзей и хочу рассчитать общую стоимость заказа:



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



Округляем стоимость буррито El Farolito super vegi до 8 долларов, поэтому при доставке стоимостью 2 доллара общая сумма составит 20 долларов.
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Views 5.5K
Comments 6

Многомерные данные и оценка качества их визуализации

ОЭЗ «Иннополис» — дом IT-компаний и специалистов corporate blog Industrial Programming *Visual programming *
image

  • Многомерные данные — что они из себя представляют?
  • Зачем их визуализировать и что мы можем понять из визуализации?
  • Какими способами можно уменьшить размерность таким образом, чтобы сохранилась главная структура данных и какие свойства учитывать при проектировании?
Читать дальше →
Rating 0
Views 1.5K
Comments 1

Смарт контракты Ethereum: структурируем токены как акции

Payment systems *JavaScript *Billing systems *Solidity *
В настоящее время идет настоящая волна хайпа криптовалют и череда успешных ICO самых разнообразных проектов, в том числе имеющих весьма сомнительное или не имеющих вообще никакого отношения к децентрализации и другим базовым принципам блокчейн. В ходе ICO на продажу широкой публике выставляются некие виртуальные сущности – токены. Наполнение этих самых токенов какой-либо реальной «ценностью», как правило, уникально для каждого проекта. В рамках данной статьи я хочу рассмотреть структурирование токена как «акции», когда держатель этих токенов претендует на получение дивидендов от проекта, пропорционально имеющемуся у него проценту токенов от общей эмиссии. Это создает целый ряд правовых коллизий и неопределенностей, поэтому на сегодня нет ни одного крупного проекта, построенного по этой логичной и понятной для инвесторов модели, но юридические аспекты мы вынесем за скобки и остановимся лишь на технической реализации.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views 26K
Comments 9

Смарт контракты Ethereum: что делать при ошибке в смартконтракте или техники миграции

Solidity *
При написании смартконтрактов важно помнить, что после загрузки в блокчейн, они уже не могут быть изменены, а следовательно, не могут быть внесены какие-либо улучшения или исправлены какие-то найденные ошибки! Все мы знаем, что ошибки есть в любой программе, а вернувшись к написанному пару месяцев назад коду мы всегда найдем, что там можно улучшить. Как же быть? Единственно возможный вариант – это загрузить новый контракт с исправленным кодом. Но как же быть, если на базе имеющегося контракта уже выпущены токены? На помощь нам приходит миграция! За последний год я попробовал много разных техник ее реализации, проанализировал применяемые в других крупных блокчейн проектах и что-то поизобретал сам. Подробности под катом.

Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Views 9K
Comments 0

Как развитие алгоритмов сжатия остановилось 20 лет назад, или о новом конкурсе на 200 тысяч евро

Programming *Data compression *Machine learning *Popular science Artificial Intelligence

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

Пост набрал 206 «плюсов», вышел на 2 место топа недели и вызвал оживленную дискуссию, в которой мне больше всего понравился комментарий: «Коммерческого интереса эффективность по сжатию алгоритмов сжатия без потерь сегодня не представляет, в силу отсутствия принципиально более эффективных алгоритмов. Деньги сегодня — в сжатии аудио-видео. И там и алгоритмы другие. Тема сжатия без потерь удобна именно лёгкостью верификации алгоритма, и не слегка устарела. Лет на 20.» 

Поскольку я сам уже 20 лет в области сжатия видео, с ее бурным развитием мне спорить сложно. А вот что сжатие без потерь развиваться перестало… Хотя логика тут понятна каждому. Я до сих пор пользуюсь ZIP, все мои друзья пользуются ZIP с 1989 года — значит, ничего нового не появляется. Так ведь? Похоже рассуждают сторонники плоской земли. ))) Я не видел, знакомые не видели, и даже некоторые авторитеты утверждают, значит, это так! 

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

Развивались ли алгоритмы сжатия без потерь в последние 20 лет? Чем закончился прошлый конкурс и на сколько опередили baseline? Сколько денег получили русские таланты, а сколько зарубежные? И есть ли вообще жизнь на Марсе в сжатии без потерь? 

Кому интересно — добро пожаловать под кат! 
Читать дальше →
Total votes 259: ↑258 and ↓1 +257
Views 53K
Comments 120

Объяснение легковесных потоков в 200 строк на Rust

System Programming *Rust *
Translation

Объяснение легковесных потоков в 200 строк на Rust


Легковесные потоки (ligthweight threads, coroutines, корутины, green threads) являются очень мощным механизмом в современных языках программирования. В этой статье Carl Fredrik Samson попытался реализовать рантайм для легковесных потоков на Раст, попутно объясняя, как они устроены "под капотом".


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


Переводил для себя большей частью. Обо всех замечаниях пишите — оперативно исправлю. Старался переводить близко к тексту, но в некоторых местах переформулировал, чтобы читалось легче и было понятнее.
Читать дальше →
Total votes 25: ↑25 and ↓0 +25
Views 8.4K
Comments 8

Алгоритм Верхуффа для произвольной чётной системы счисления

Algorithms *Mathematics *
Sandbox
КДПВ Иногда возникает задача защитить строку-идентификатор от случайных ошибок, сделанных человеком. Например, номер платёжной карты. Для этого к строке добавляется вычисленная специальным образом контрольная цифра, и когда человек вводит этот номер, можно сделать первичную проверку на ошибки без обращения к базе данных. Самый простой вариант — добавить остаток от деления суммы всех цифр на 10, в таком случае искажение любой одной цифры (в том числе контрольной) будет легко обнаружить, и такая строка не пройдёт проверку. Но некоторые другие ошибки такая контрольная сумма пропустит, например, перестановку двух цифр местами, а это тоже довольно распространённая ошибка.
Читать дальше →
Total votes 41: ↑40 and ↓1 +39
Views 11K
Comments 15

Так ли токсичен синтаксис Rust?

Programming *System Programming *Industrial Programming *Rust *
fn main() {
  println!("Hello, Rust!");
  println!("... Goodbye!");
}

Синтаксис — это первое, на что обращают внимание разработчики, впервые столкнувшись с кодом на Rust. И сложно найти что-то другое, что вызывало бы больше негодования у новичков, и при этом такое, к чему совершенно спокойно относятся уже "понюхавшие пороха" Rust-программисты. Посмотрите, например, сколько эмоций вызывает синтаксис Rust у комментаторов одной из типичных новостей про Rust на OpenNET:

Читать дальше →
Total votes 152: ↑136 and ↓16 +120
Views 39K
Comments 737

Современные накопители очень быстры, но плохие API это не учитывают

VDSina.ru corporate blog API *Data storage *Data storages *Data storaging
Translation


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

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

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

Вот самые распространённые примеры таких заблуждений:

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

Однако если изучить спецификации современных NVMe-устройств, то мы увидим, что даже в потребительском классе это устройства с задержками, измеряемыми в единицах микросекунд, и пропускной способностью в несколько ГБ/с, поддерживающие несколько сотен тысяч произвольных IOPS. Так в чём же нестыковка?
Читать дальше →
Total votes 46: ↑42 and ↓4 +38
Views 13K
Comments 40

Возможно, вам не нужен Rust, чтобы ускорить ваш JS

High performance *JavaScript *Node.JS *
Translation

Несколько недель назад я обнаружил пост "Окисляем Source Maps с Rust и WebAssembly"
распространяющийся по Твиттеру и расказывающий о выигрыше в производительности от замены обычного JavaScript в библиотеке source-map на Rust, скомпилированный в WebAssembly.


Пост возбудил мой интерес не потому, что я большой фанат Rust или WASM, скорее потому что я всегда интересовался фичами языков и оптимизациями, которых не хватает Javascript для того чтобы достичь аналогичной производительности.


Так что я скачал библиотеку с GitHub и отправился в небольшое исследование производительности, которое я документирую здесь практически дословно.

Читать дальше →
Total votes 58: ↑54 and ↓4 +50
Views 24K
Comments 43

Пол Грэм «Как стать богатым» (глава из книги Hackers&Painters)

Studying in IT Start-up development IT career Reading room
Translation
Это эссе было впервые опубликовано в книге Hackers & Painters, и в онлайн появилось только в декабре 2005 года. Я решил воскресить его с веб-архива, потому что это одно из самых важных эссе в моей жизни, а я сейчас делаю коллекцию лонгридов, которые оказали влияние на мировоззрение: проект Ontol

image

С чего бы вы начали, если бы вдруг решили разбогатеть? Я думаю, что самым лучшим решением было бы запустить новую компанию — стартап, или присоединиться к уже существующему. Этот способ показывает себя эффективным в течение сотен лет. Само слово «стартап» возникло в шестидесятые годы прошлого века, но то, что происходило в то время, было очень похоже на авантюрные торговые путешествия, которые предпринимались в средние века.

Обычно понятие стартап связано с высокими технологиями. Настолько сильно, что выражение «технологический стартап» — почти тавтология. Как правило, это небольшая компания, которая взялась за решение сложной технической проблемы.

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

Тезис


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

Давайте порассуждаем. Предположим, что вы хороший хакер (в первоначальном, положительном смысле этого слова) 20-25 лет.
Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Views 9.5K
Comments 2

Теория звука. Что нужно знать о звуке, чтобы с ним работать. Опыт Яндекс.Музыки

Яндекс corporate blog Algorithms *Mathematics *
Звук, как и цвет, люди воспринимают по-разному. Например, то, что кажется слишком громким или некачественным одним, может быть нормальным для других.

Для работы над Яндекс.Музыкой нам всегда важно помнить о разных тонкостях, которые таит в себе звук. Что такое громкость, как она меняется и от чего зависит? Как работают звуковые фильтры? Какие бывают шумы? Как меняется звук? Как люди его воспринимают.



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

Поводом для этого поста можете считать то, что мы добавили в приложения Яндекс.Музыки возможность слушать треки в высоком качестве (320kbps). А можете не считать. Итак.
Читать дальше →
Total votes 83: ↑78 and ↓5 +73
Views 176K
Comments 52

Неопределённое поведение и теорема Ферма

Programming *C++ *Compilers *
В соответствии со стандартами C и C++, если выполнение программы приводит к переполнению знаковой целой переменной, или к любому из сотен других «неопределённых действий» (undefined behaviour, UB), то результат выполнения программы может быть любым: она может запостить на Твиттер непристойности, может отформатировать вам диск…
Увы, в действительности «пасхальные яйца», которые бы заставляли программу в случае UB делать что-то из ряда вон выходящее, не встречались со времён GCC 1.17 — та запускала nethack, когда встречала в коде программы неизвестные #pragma. Обычно же результат UB намного скучнее: компилятор просто оптимизирует код для тех случаев, когда UB не происходит, не придавая ни малейшего значения тому, что этот код будет делать в случае UB — ведь стандарт разрешает сделать в этом случае что угодно!
В качестве иллюстрации того, как изобилие UB в стандарте позволяет компилятору выполнять неочевидные оптимизации, Реймонд Чен приводит такой пример кода:

int table[4];
bool exists_in_table(int v)
{
    for (int i = 0; i <= 4; i++) {
        if (table[i] == v) return true;
    }
    return false;
}

В условии цикла мы ошиблись на единицу, поставив <= вместо <. В итоге exists_in_table() либо должна вернуть true на одной из первых четырёх итераций, либо она прочтёт table[4], что является UB, и в этом случае exists_in_table() может сделать всё что угодно — в том числе, вернуть true! В полном соответствии со стандартом, компилятор может соптимизировать код exists_in_table() до
int table[4];
bool exists_in_table(int v)
{
    return true;
}

Такие оптимизации иногда застают программистов врасплох.
Читать дальше →
Total votes 107: ↑104 and ↓3 +101
Views 48K
Comments 128

C++ быстрее и безопаснее Rust, Yandex сделала замеры

C++ *C *Rust *
🔥 Technotext 2020

Спойлер: C++ не быстрее и не медленнее и вообще смысл не в этом. Эта статья является продолжением славных традиций развенчания мифов крупных российских компаний о языке Rust. Предыдущая была "Go быстрее Rust, Mail.Ru Group сделала замеры".


Недавно я пытался заманить коллегу, сишника из соседнего отдела, на Тёмную сторону Rust. Но мой разговор с коллегой не задался. Потому что, цитата:


В 2019 году я был на конференции C++ CoreHard, слушал доклад Антона antoshkka Полухина о незаменимом C++. По словам Антона, Rust еще молодой, не очень быстрый и вообще не такой безопасный.

Антон Полухин является представителем России в ISO на международных заседаниях рабочей группы по стандартизации C++, автором нескольких принятых предложений к стандарту языка C++. Антон действительно крутой и авторитетный человек в вопросах по C++. Но доклад содержит несколько серьёзных фактических ошибок в отношении Rust. Давайте их разберём.

Total votes 230: ↑214 and ↓16 +198
Views 84K
Comments 1191

Как я сгенерировал на Python тысячу лиц для своей игры

Python *Game development *Image processing *Game design *
Translation
На определённом этапе разработки своей игры я осознал, что мне нужна система диалогов с лицами-аватарами.

Поэтому я решил создать генератор лиц на основе знаменитой игры Papers, Please.


Генератор лиц Dukope (из Papers, Please)

Сбор данных


Я скачал примерно 50 портретов с pixabay.com (все изображения имеют лицензию CC и не требуют указания авторства).

Затем я вырезал фон каждого изображения в Photoshop (просто выбрал всё инструментом выделения многоугольника и нажал на Delete). В дальнейшем я планировал воспользоваться эффектом cutout , чтобы скрыть все недочёты.


Изображения с удалённым фоном
Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Views 28K
Comments 3

Ловушки для хакера. Обнаруживаем взлом на раннем этапе с помощью Canarytokens

RUVDS.com corporate blog Information Security *Lifehacks for geeks
Honey Tokens (англ. — «медовые приметы/признаки/идентификаторы») одна из разновидностей идеи Honeypot, приманки для злоумышленников, позволяющей обнаружить факт взлома или опознать его источник. Когда атакующий уже проник в систему, он, скорее всего, выполнит действия, несвойственные обычному пользователю. Это можно использовать как способ обнаружения взлома. В статье мы рассмотрим, как легко сделать собственные триггеры для обнаружения взлома на раннем этапе. Такие ловушки полезно использовать системному администратору и даже обычному пользователю, переживающему о приватности своих данных.


До изобретения газоанализаторов шахтеры брали c собой в шахту канарейку. Из-за маленького организма и быстрого обмена веществ, птицы намного раньше реагировали на опасные газы в воздухе и предупреждали шахтеров.
Читать дальше →
Total votes 68: ↑68 and ↓0 +68
Views 21K
Comments 19

Фракталы в песках, или Больше трёх не собираться

Mathematics *Rust *
Мы поговорим о модели песчаной кучи. Песок (не настоящий, модельный), пересыпаясь, создаёт вот такие картинки:



Песчаные кучи можно складывать (это легко, если вы привыкли складывать всякие штуки) и вычитать (а вот это уже нетривиально).

А ещё можно использовать эту штуку в качестве Hello world вместо игры «Жизнь».
Читать дальше →
Total votes 70: ↑70 and ↓0 +70
Views 7.4K
Comments 7

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity