On the way to 10x engineering
603 subscribers
5 photos
1 file
29 links
Download Telegram
So You Think You Know Git

Ютуб подкинул шедевр, не могу не поделиться. Узнал новое - из того, что забрал себе:

git push --force-with-lease

как git --force, но только если никто не успел закомитить в ветку поверх твоего последнего изменения

git config --global rerere.enabled true

запомнить как разрешили merge conflict и всегда применять этот способ при повторении этого конфликта

git config --global branch.sort -committerdate

сортировать ветки в выводе команды git branch по времени изменений в них

git maintenance start

добавить в crontab регулярную подчистку репозитория, чтобы он работал быстрее

git config --global fetch.writeCommitGraph true

ускорять git log --graph за счёт кеширования графа на каждом fetch

Какие у вас самые полезные настройки гита?

@engineer10x
👍9🔥4
Синхронизация потоков

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

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

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

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

При таком подходе нет столпотворения читателей, пытающихся взять mutex или rwlock, им не нужно уходить спать в ядро, ожидая его освобождения, а latency может приближаться к пределу, ограниченному только скоростью синхронизации кешей между ядрами, особенно если удастся упаковать свои данные в L1 cache, как рекомендовалось выше.

@engineer10x
🔥16👍2
300

Тем временем эти скромные измышления читают уже более 300 человек. Спасибо!

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

@engineer10x
8🎉1
On the way to 10x engineering
О подходах к работе и бизнес-моделях в торговле Хозяин одной из успешных крупных американских торговых фирм создаёт и нагружает команды так, чтобы у них было значительно больше работы, чем ресурсов, а также чтобы ответственность пересекались с другими командами…
Ещё о бизнес-моделях

Одна успешная фирма постоянно подчёркивает свою продвинутую инженерную культуру.

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

Дальше их всячески выжимают и с ранних пор начинают придираться на performance review так, что на 100% без придирок пройти его практически невозможно. Человек начинает работать всё более интенсивно, но процентов 95 не смогут исправить все придирки и окажутся за бортом в среднем в течение пары лет. (Кстати, чтобы это понять заранее, полезно почитать отзывы на Glassdoor, начиная с самых плохих).

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

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

@engineer10x
👍6👎41
Как вы думаете - сколько в мире технических специалистов в торговле?
Final Results
3%
6%
17%
10к
9%
20к
18%
50к
18%
100к
6%
200к
7%
500к
16%
Сколько инженеров в HFT?

Когда-то, ещё в позапрошлой жизни, мне рассказывали, что технических людей в банках в России не так уж и много, мир тесен, и, в принципе, все друг друга знают.

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

Цифры примерно такие:

Singapore  370
Hong Kong  488
Australia  792
Europe    2714
USA       5432

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

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

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

@engineer10x
👍62
Кстати подписчик @tophel из Alpha Tech Lab ищет плюсовика - писать модули подключения к классическим биржам для торговли фьючерсами, желательно уже делавшего такое в прошлом. См. подробное описание вакансии внутри.

@engineer10x
4👍2
Biography of an HFT startup

Matt Hurd (https://meanderful.blogspot.com)

I started my HFT career at one of the larger American trading firms as a C++ jockey. On my first day, I was greeted by full panes of glass boasting glorious Sydney Harbour views which were modestly obscured by a hand-scrawled “< 2ms” on that glass. This was the main goal for the dozen of us in IT. That wasn’t my remit at the start though. First things first…

Early daze
One of the desk guys had an idea for trading tailor-made combinations on the Australian Stock Exchange (ASX). That is, equity option spreads and combinations, along with their associated hedges. He needed something that could handle a bunch of intricate auto-trading rules that could be integrated with the Orc front-end being used for ASX trading. It was the early 2000s, so I developed a quick resizing UI with VB6 for the Windows 2000 desktops. This involved C++, Boost, multi-threading with a Spirit parser for the Orc integration at the back end. Orc calculated the binomial or trinomial trees for the ASX-listed American options on demand. For my binomial pricing code, I used simple Haug VBA code that I had transliterated to C++.

However, Orc didn’t calculate solely on demand, rather it used simple memoization for pricing. If the parameters were the same, Orc remembered, rather than recalculated the price. Our Orc Trader had been too slow to beat Timber Hill’s custom platform or IMC’s exclusively-licensed Orc Liquidator, the fastest vendor system at the time. The stack seemed too lame to be latency competitive, no matter what tricks I could come up with. However, with a large price cache from the busy C++ threads diligently filling out a multi-dimensional cache of option prices by parameter proximity for easy interpolation, suddenly we could hit trades that were previously unhittable.

By changing an interest rate, or selecting another volatility curve adjustment in Orc Trader, my pricing cache got busy replenishing itself. This wasn’t an entirely original solution. I first heard about the idea of pre-caching option prices in an old article about either Hull or CRT some years prior. Just as a modern out-of-order microprocessor can speculate on the next thing that’s going to be required, so can you. Market prices are discrete after all. Remember, the fastest calculation is always the one you don’t have to do. A later lesson was it was hard, but not impossible, to beat zero latency. This strange corollary to this speculative lesson exists because the fastest message is the one you don’t have to send. This is perhaps even more significant.

In my view, the best architecture is no architecture. That is a little facetious, but an important system truth. Reification just becomes legacy without a sufficient lack of architecture. As premature optimization is the root of all good, it is best to not talk too loudly about computing myths as it is best for your competitors to stumble.

The Orc Trader hackery I concocted wasn’t a great solution, but it made a few people happy getting some trades that were previously out of reach. Indeed, there was a bit of fist pumping and mirth when they first got some types of trades they’d never seen before. Overall, it was only mildly successful. It grew to hundreds of manual rules monitoring trading potentials and seemed to pay for itself when someone bothered to turn it on. It was a fun build for me at least.

@engineer10x
🔥10👍4🙏2
О психологической совместимости

Оказывается (кто бы мог подумать!), входящие интерфейсы у людей бывают разные. Компании проводят психологические тренинги, чтобы научить этой разнице своих сотрудников и повысить эффективность работы команд.

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

Как именно разрезать по измерениям в принципе неважно, можно по MBTI, можно как-то ещё, главное наглядность и проговаривание ощущений в группе. Например, если разбить по измерению "экстраверт/интраверт", то первые будут "засорять эфир", а последние - в основном молчать. Причём это не зависит от пола - встречались и "забивающие эфир" женщины, и "стесняющиеся высказаться" молчаливые мужчины.

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

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

В общем, оказывается HR нужны не только для того, чтобы гладко увольнять :)

@engineer10x
👍10😁2
2024: итоги

@engineer10x открылся в начале этого года. За это время подписались (и остались) 426 подписчиков. Спасибо за ваш интерес!

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

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

Посты, которые заинтересовали вас:

1. Сколько инженеров в HFT? 👁 1.1k
2. Обратная сторона работы в HFT 👁 1k
3. Синхронизация потоков без регистрации и смс мьютексов 👁 1k

Посты, которые кажутся интересными мне:

1. Про дофамин от работы в режиме low latency 👁 783
2. Speculative triggering 👁 767
3. Hard skills for software HFT devs 👁 833
4. FPGA для программиста 👁 694

До встречи в новом году!

@engineer10x
🎄20🔥65👍2
Благодарные читатели внезапно предлагают завести платную подписку чтобы поддержать канал копеечкой.

Вы бы подписались?
Anonymous Poll
12%
Да, на Boosty
2%
Да, на Patreon
0%
Да, на что-то другое (напишу в комментариях)
41%
Нет
45%
10х инженеры должны мочь заработать самостоятельно!
😁9
Сколько (минимум) стоит прямое подключение к традиционной американской бирже для свежесозданной фирмы, чтобы она получила возможность запустить HFT стратегию?
Final Results
13%
<50k usd/y
18%
50k-150k usd/y
16%
150k-300k usd/y
20%
300k-500k usd/y
12%
500k-1m usd/y
22%
>1m usd/y
За что же биржи обычно берут деньги с бедных участников?

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

Market Data

Лицензии на доступ к рыночным данным многообразны и разноплановы. (Интересно, как именно биржи придумывают за что взять с участников денег и почему именно столько...)

Для героев нашего примера ежемесячная стоимость доступа к рыночным данным для торговых роботов (non-display device) будет такой:

* Non-Display Category A – Trading As a Principal: 1 приложение $589 - 4+ приложений $3,521
* Category B – Internal Order Processing: 1 приложение $2,357 - 4+ приложения $2,951
* Category C - Risk Management/Research and Analysis etc: 1 приложение $351 - 4+ приложений $589

Если наши герои захотят использовать рыночные данные CME для отправки заявок за пределы CME, то придётся раскошелиться ещё на Category A3 – Trading on Alternative Venue: 1 приложение $1,759 - 4+ приложений - $4,132 в месяц.

Плюс ещё есть комиссии за display devices, но для этой оценки ими можно пренебречь.

(Интересный побочный вопрос - кто владеет интеллектуальной собственностью на рыночные данные? Кажется по факту получается что биржа, поэтому за доступ к историческим данным или за предоставление сохранённых вами данных третьим лицам она выставит отдельный счёт).

Подключение

Прямое подключение к сети биржи достаточно дорогое удовольствие. Для HFT нужна самая быстрая физическая линия в сo-location - 10 Gb - это $12к в месяц.

Торговые роботы работают на железе в co-location, но трейдеры там сидеть не могут. Чтобы им зайти на торговые машины через интернет нужно настроить VPN, который стоит $500/m за каждые 0.5 Mbps.

Итого

Таким образом, если вдруг наши герои смогут зарабатывать торгуя только лишь одним приложением через одну физическую линию только лишь на CME, то придётся заплатить бирже за рыночные данные от $40k в год и за физическое подключение к сети от $150k в год, и это не считая стоимости электричества и аренды серверной стойки в co-location, а также остальных сопутствующих расходов.

@engineer10x
👍15🫡8🔥62🏆1
Выпекание современных процессоров и прочей микро наноэлектроники как вершина инженерного совершенства

Сегодня вашему вниманию предлагается великолепное видео, подробно рассказывающее о том, как на фабе готовятся процессоры:
https://youtu.be/watch?v=dX9CGRZwD-w

По огромному (размером в несколько футбольных полей) очень чистому цеху от станка к станку роботами развозятся "вафли" - диски из монокристаллического кремния толщиной 0.75мм и диаметром 300мм, собранные в стопки по 25 шт внутри специальных контейнеров (FOUP).

На диске диаметром 300мм изготавливается 230 одинаковых процессоров (или 952 чипов DIMM). Современный процессор собирается около 3х месяцев за 940 маленьких шагов, каждый из которых выполняется специально заточенным под это агрегатом.

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

Подробнее из ролика с 5:47:
A layer of insulating silicon dioxide is deposited  on top of the wafer and then a layer of light sensitive photoresist is spread across the top.  Next, using UV light and a stencil, a pattern is applied to the photoresist. Solvents then are used to remove the areas hit by the UV light, thus creating a patterned mask layer. Using the  mask, the revealed silicon dioxide is etched away down to the previous layer. Next the mask layer is  removed, and a layer of copper is added to cover the wafer and fill in the areas that were just etched away. Finally, the surface is ground down and leveled off to reveal the copper and insulator  patterns. And thus, a single layer is completed.


Самая современная технология фотолитографии - EUV lithography, её умеет делать только нидерландская компания ASML. Стабильная повторимая генерация излучения с длиной волны 13нм - очень непростая задача, как физически, так и технологически. Вот тут Jos Benschop - главный технолог ASML - объясняет, как это происходит.

Через 3 месяца покатушек по цеху, когда процессоры на вафле уже готовы, они проходят проверку качества на электронном микроскопе. Те, у которых больше сломанных ядер, отправляются в коробку для i3 и продаются подешевле, если дефектов нет - в коробку для i9, а те, что посередине - в i5 и i7.

Несмотря на большое количество компонентов и движущихся частей, фабы без остановки выпускают десятки миллионов процессоров в месяц. Производственное оборудование предназначено для работы десятки лет, но при этом спроектировно модульно с возможностями для расширения и установки обновлений. Программистам, привыкшим к "достаточно 70% качества, лишь бы сегодня!" такую предусмотрительность представить непросто :)

Вот где обитают настоящие 10х инженеры!

@engineer10x
🔥16👍61👨‍💻1
Пара ссылок вдогонку к предыдущему посту

1. Sam Zeloof выпек собственные микросхемы в своём гараже. 1200 транзисторов на одном кристалле, 4 слоя, по тех процессу от первых процессоров Интела. Сделать свой процессор в гараже это следующий уровень после "спроектировать свой процессор на FPGA".

Также интересный современный способ опубликовать резюме.

- Текст.
- Видео.

2. Литографы должны работать 24х7, но постоянно что-то разбалтывается или вырабатывается конечный ресурс у линз, лазеров итд. Как они построили поддержку, сотни датчиков и систему удалённого снятия метрик, систему замены запчастей, размещение складов около заказчиков и так далее.

- Организация работы литографов с минимальными простоями.

3. Focus: the ASML way. Книжка о том, как ASML управляет производством и поддержкой своих приборов.

- Интервью с автором

@engineer10x
👍4👾1