Forwarded from Bortlog
Хороший пост с примером того как привильно делать свои велосипеды и какая за этим может стоять причина
https://www.cockroachlabs.com/blog/pebble-rocksdb-kv-store/
https://www.cockroachlabs.com/blog/pebble-rocksdb-kv-store/
Cockroachlabs
Introducing Pebble: A RocksDB-inspired key-value store written in Go
Today we’re introducing Pebble, a RocksDB-inspired and RocksDB compatible key-value store written in Go that brings greater stability to CockroachDB.
Forwarded from I hate overtime
Вряд ли на меня подписаны даже wannabe хаскелисты, но, возможно, кому-нибудь будет интересно: сегодня в 20.00 по мск будет вебинар про рантайм Хаскеля. Обещают внутрянку и GC. Оставлю тут ссылку на оригинальный твит
https://twitter.com/serokell/status/1306537892186132480?s=19
https://twitter.com/serokell/status/1306537892186132480?s=19
Twitter
Serokell
Learn how evaluation works in Haskell! Today, Maxim Koltsov will be giving an introduction to Haskell execution and garbage collection internals. Everybody is welcome to join! Join us at https://t.co/Ftj30YB1br, at 17.00 UTC. 👈
Forwarded from Anastasiia Sycheva
#senior #lead #python #remote
#вакансия
Кто нужен: Senior/Lead Python Developer
Формат работы: офис или удалёнка
Вилка: 220-350 т.р. на руки
Компания: https://sibedge.com/
Проект: простой в использовании инструмент бюджетирования для своевременной оплаты счетов, разбивая их на 4 гибких платежа, без процентов и дополнительных сборов (Австралия)
Что важно: Python, Django. AWS, английский язык
Контакты: @dreaming_unicorn
#вакансия
Кто нужен: Senior/Lead Python Developer
Формат работы: офис или удалёнка
Вилка: 220-350 т.р. на руки
Компания: https://sibedge.com/
Проект: простой в использовании инструмент бюджетирования для своевременной оплаты счетов, разбивая их на 4 гибких платежа, без процентов и дополнительных сборов (Австралия)
Что важно: Python, Django. AWS, английский язык
Контакты: @dreaming_unicorn
Forwarded from мне не нравится реальность (вафель 🧇💛)
Peeking inside a Rust enum
Прочитал я её недавно и... Нашёл в примерах незамеченный
@fasterthanlime как обычно написал отличную статью! Прочитал я её недавно и... Нашёл в примерах незамеченный
UB =) Автор уже поправил статью, так что читайте на здоровье!fasterthanli.me
Peeking inside a Rust enum
During a recent Rust Q&A Session on my twitch channel, someone asked a question that seemed simple: why are small string types, like SmartString or SmolStr, the same size as String, but small vec t...
Forwarded from Блог*
#prog #fsharp #article
13 (+2) способов реализовать черепашью графику на F#. Используемые техники не сильно привязаны к языку, так что прочитать стоит даже в том случае, если вы не пишете на F#.
Часть 1
Часть 2
Бонусная 3 часть
13 (+2) способов реализовать черепашью графику на F#. Используемые техники не сильно привязаны к языку, так что прочитать стоит даже в том случае, если вы не пишете на F#.
Часть 1
Часть 2
Бонусная 3 часть
Fsharpforfunandprofit
Thirteen ways of looking at a turtle
Examples of an API, dependency injection, a state monad, and more!
Forwarded from Блог*
matklad.github.io
Why Not Rust?
I've recently read an article criticizing Rust, and, while it made a bunch of good points, I didn't enjoy it --- it was an easy to argue with piece.
In general, I feel that I can't recommend an article criticizing Rust.
This is a shame --- confronting drawbacks…
In general, I feel that I can't recommend an article criticizing Rust.
This is a shame --- confronting drawbacks…
Forwarded from ITGram
What happens when you type google.com into your browser and press enter? — long-read Journey about system calls, network protocols and Internet internal. A great reading and a good interview question.
GitHub
GitHub - alex/what-happens-when: An attempt to answer the age old interview question "What happens when you type google.com into…
An attempt to answer the age old interview question "What happens when you type google.com into your browser and press enter?" - alex/what-happens-when
Forwarded from Блог*
#prog #rust
Библиотека для конвертации количества секунд в время в минутах, часах, днях (
compund_duration
Библиотека для конвертации количества секунд в время в минутах, часах, днях (
7259 -> 2h59s).compund_duration
Прослушал лекцию Брагилевского, говорит надо прочитать все чтобы стать хаскелистом
https://www.stephendiehl.com/posts.html
https://www.stephendiehl.com/posts.html
Stephendiehl
posts
Personal Blog
Forwarded from Lilu Maque
#rust #gateway #senior #удаленка
We are looking for a Senior Gateway Engineer for one of the top companies in the field of HFT.
We expect that the candidate will join the Trading Platform Team to work on exchange gateways for a new algorithmic trading platform.
We offer a chance to build complex solutions using cutting edge technologies and mature software engineering practices in the atmosphere of creativity and collaboration.
Responsibilities:
Given high-level business and technical requirements, discuss all the related details with trading/devops teams, design architecture of trading platform gateways for maximum reliability and performance;
Research and reverse-engineer exchange external APIs to find undocumented ways to achieve fastest communication;
Implement proposed solutions using modern technology stack;
Ensure quality, reliability and performance of developed solutions using automated (unit, integration, performance) and manual testing;
Document implemented modules;
Communicate with peer teams on integrations, deployment and support of implemented solutions;
Maintain and improve implemented connectors according to business needs and feedback.
Skills and Experience:
4+ years of relevant work experience;
Strong adherence to principles of effective software engineering - SOLID, TDD;
Understanding of computer systems and software architecture - Linux OS, networks, data structures and algorithms, parallel programming, distributed computing, performance optimization;
Extensive experience with Rust, or familiarity with Rust and experience in strong-typed language eg C++ / C# /Go;
Deep understanding of communication protocols - TCP, UDP, HTTP/REST, WebSocket;
Proven hands-on experience in exchange gateways development;
Self-motivated, with strong analytical and problem solving skills;
Strong communication skills (upper intermediate English);
Degree in Computer Science, a related field or equivalent professional experience.
Bonus Points:
Experience in the HFT or related areas;
Hacking skills are encouraged.
Отклик: @lilumaque
We are looking for a Senior Gateway Engineer for one of the top companies in the field of HFT.
We expect that the candidate will join the Trading Platform Team to work on exchange gateways for a new algorithmic trading platform.
We offer a chance to build complex solutions using cutting edge technologies and mature software engineering practices in the atmosphere of creativity and collaboration.
Responsibilities:
Given high-level business and technical requirements, discuss all the related details with trading/devops teams, design architecture of trading platform gateways for maximum reliability and performance;
Research and reverse-engineer exchange external APIs to find undocumented ways to achieve fastest communication;
Implement proposed solutions using modern technology stack;
Ensure quality, reliability and performance of developed solutions using automated (unit, integration, performance) and manual testing;
Document implemented modules;
Communicate with peer teams on integrations, deployment and support of implemented solutions;
Maintain and improve implemented connectors according to business needs and feedback.
Skills and Experience:
4+ years of relevant work experience;
Strong adherence to principles of effective software engineering - SOLID, TDD;
Understanding of computer systems and software architecture - Linux OS, networks, data structures and algorithms, parallel programming, distributed computing, performance optimization;
Extensive experience with Rust, or familiarity with Rust and experience in strong-typed language eg C++ / C# /Go;
Deep understanding of communication protocols - TCP, UDP, HTTP/REST, WebSocket;
Proven hands-on experience in exchange gateways development;
Self-motivated, with strong analytical and problem solving skills;
Strong communication skills (upper intermediate English);
Degree in Computer Science, a related field or equivalent professional experience.
Bonus Points:
Experience in the HFT or related areas;
Hacking skills are encouraged.
Отклик: @lilumaque
Forwarded from Profunctor Jobs
Backend Senior
Стэк: Java, JavaScript, Go
Денег: $50000-80000
Remote
Fintech startup (Boston)
Founders ex-Revolut, ex-Miro.
Seed round is closed. Series A in progress
Стэк: Java, JavaScript, Go
Денег: $50000-80000
Remote
Fintech startup (Boston)
Founders ex-Revolut, ex-Miro.
Seed round is closed. Series A in progress
Forwarded from Блог*
#prog #article
Почему эта статься называется "Regular-expression derivatives reexamined"? Это не оригинальная статья, а более современный пересказ оригинальной статьи Брзозовски (вот pdf, но читать не советую — это просто довольно грубый скан с бумаги, над нормальной перепечаткой которого никто не заморачивался). Идея производной от регулярного выражения оказалось достаточно плодотворной, чтобы её можно было обобщить до более продвинутых конструкций. Собственно, в этой статье от Мэтта Майта и прочих (pdf) вводится в рассмотрение производная от контекстно-свободных грамматик (CFG), заданных при помощи взаимно-рекурсивных определений, содержащих альтернативы, конкатенацию и звезду Клини, и на основе этого определения реализуется на Racket парсер (именно парсер, а не распознаватель) таких грамматик. Весь код в итоге занял около 30 строк, но для корректной работы полагался на ленивость, мемоизацию и вычисление неподвижных точек функций (есть также реализация на Haskell, но она выглядит так себе, в частности, там зачем-то есть вызов
Как показал себя этот парсер на практике? Паршиво: на разбор 31-строчного синтаксически корректного файла на Python у парсера ушло три минуты. Причина? Неконтролируемые взятия производной от грамматики приводят к тому, что ошмётки грамматики растут экспоненциально. Введение дополнительного шага обработки, названного авторами "сжатием" (compaction) и состоящей в преобразованиях грамматики, уменьшающей её размер, но сохраняющей поведение, привело к желаемому эффекту — повышению производительности. Тем не менее, производительность всё равно осталась достаточно низкой — на разбор того же 31-строчного файла теперь уходило две секунды. Многовато.
Так что же, парсинг с использованием производных (parsing with derivatives, PwD) является непрактичной игрушкой? Отнюдь, как было показано в статье Майкла Адамса. Сложность у этого алгоритма отнюдь не экспоненциальная, как считали авторы, а кубическая. Также оригинальная реализация была написана несколько неоптимально. Во-первых, вычисление неподвижных точек производилось при помощи многократного вызова одной и той же функции, что приводило в худшем случае к квадратичной сложности. Более умная реализация позволяет найти неподвижную точку за линейно время. Во-вторых, в правилах compaction были пропущены парочка правил переписывания грамматики, введение положительно сказалось на производительности. В-третьих, мемоизация в оригинальной реализации использовала хэш-таблицы (причём вложенные). Перемещение мемоизируемых данных из таблиц непосредственно в узлы грамматики положительно сказалось на производительности (надо отметить, что на практике в этих вложенных таблицах было не более одной записи. Хранение единственного значения, разумеется, снизило возможности мемоизации, но, как ни странно, на практике не сильно сказалось на производительности). Итого? Та же идея, но производительность выше на три порядка. Элегантность кода и краткость кода, впрочем, была потеряна.
Можно ли сделать лучше? В принципе, да. Последовательное взятие производной требует многократного прохода по одному и тому же графу, причём, как правило, обход с корня идёт по почти тому же самому пути. Для оптимизации работы над деревьями есть специальная структура данных, zipper (pdf), которая позволяет сфокусироваться на какой-то части дерева и иметь к ней быстрый доступ (кстати, сам автор, Huet, не считает себя изобретателем этой структуры данных, поскольку она переизобреталась неоднократно, статью же он написал главным образом ради того, чтобы идея была более известна). Встраивание зиппера в PwD позволяет повысить его производительность.
Почему эта статься называется "Regular-expression derivatives reexamined"? Это не оригинальная статья, а более современный пересказ оригинальной статьи Брзозовски (вот pdf, но читать не советую — это просто довольно грубый скан с бумаги, над нормальной перепечаткой которого никто не заморачивался). Идея производной от регулярного выражения оказалось достаточно плодотворной, чтобы её можно было обобщить до более продвинутых конструкций. Собственно, в этой статье от Мэтта Майта и прочих (pdf) вводится в рассмотрение производная от контекстно-свободных грамматик (CFG), заданных при помощи взаимно-рекурсивных определений, содержащих альтернативы, конкатенацию и звезду Клини, и на основе этого определения реализуется на Racket парсер (именно парсер, а не распознаватель) таких грамматик. Весь код в итоге занял около 30 строк, но для корректной работы полагался на ленивость, мемоизацию и вычисление неподвижных точек функций (есть также реализация на Haskell, но она выглядит так себе, в частности, там зачем-то есть вызов
unsafePerformIO).Как показал себя этот парсер на практике? Паршиво: на разбор 31-строчного синтаксически корректного файла на Python у парсера ушло три минуты. Причина? Неконтролируемые взятия производной от грамматики приводят к тому, что ошмётки грамматики растут экспоненциально. Введение дополнительного шага обработки, названного авторами "сжатием" (compaction) и состоящей в преобразованиях грамматики, уменьшающей её размер, но сохраняющей поведение, привело к желаемому эффекту — повышению производительности. Тем не менее, производительность всё равно осталась достаточно низкой — на разбор того же 31-строчного файла теперь уходило две секунды. Многовато.
Так что же, парсинг с использованием производных (parsing with derivatives, PwD) является непрактичной игрушкой? Отнюдь, как было показано в статье Майкла Адамса. Сложность у этого алгоритма отнюдь не экспоненциальная, как считали авторы, а кубическая. Также оригинальная реализация была написана несколько неоптимально. Во-первых, вычисление неподвижных точек производилось при помощи многократного вызова одной и той же функции, что приводило в худшем случае к квадратичной сложности. Более умная реализация позволяет найти неподвижную точку за линейно время. Во-вторых, в правилах compaction были пропущены парочка правил переписывания грамматики, введение положительно сказалось на производительности. В-третьих, мемоизация в оригинальной реализации использовала хэш-таблицы (причём вложенные). Перемещение мемоизируемых данных из таблиц непосредственно в узлы грамматики положительно сказалось на производительности (надо отметить, что на практике в этих вложенных таблицах было не более одной записи. Хранение единственного значения, разумеется, снизило возможности мемоизации, но, как ни странно, на практике не сильно сказалось на производительности). Итого? Та же идея, но производительность выше на три порядка. Элегантность кода и краткость кода, впрочем, была потеряна.
Можно ли сделать лучше? В принципе, да. Последовательное взятие производной требует многократного прохода по одному и тому же графу, причём, как правило, обход с корня идёт по почти тому же самому пути. Для оптимизации работы над деревьями есть специальная структура данных, zipper (pdf), которая позволяет сфокусироваться на какой-то части дерева и иметь к ней быстрый доступ (кстати, сам автор, Huet, не считает себя изобретателем этой структуры данных, поскольку она переизобреталась неоднократно, статью же он написал главным образом ради того, чтобы идея была более известна). Встраивание зиппера в PwD позволяет повысить его производительность.