← All posts tagged programming

SannySanoff
programming С++ продуктивность корутины позволяют писать в С++ красиво, без callback hell

но отнимают у тебя:

* call stacks

* local variables debug info

* compile time speed

* и (немного) уверенность (баги в конпеляторе, например даже вот в clang10).

речь идет об использовани корутин для async/await, см. для примера cppcoro: это либа то ли от автора драфта, то ли где-то рядом.
SannySanoff
programming Хипсторы изобрели микросервисы на ноде, только потому что например WebSphere на жабе медленно запускается каждый раз. Все остальные блага микросервисов они притянули за уши уже потом.
SannySanoff
programming интеллектуальное_гопничество spectrum.ieee.org

Cobol powers 95 percent of ATM swipes, 80 percent of in-person transactions and 43 percent of banking systems, according to Reuters.
Где теперь ваш монгодб, руби, петон и node js, хипстеры? Почему пенсионерам теперь приходится отрываться от своего домино, чтобы вы не просрали ваш гребаный мир?
SannySanoff
programming та фигня с петоном #2967071 не закончилась, я взял в руки numba и короче улучшил еще в 200 раз.

нумба как-то хитро уделывает векторные операции из numpy и особенно из pandas, так что теперь, всё на for loops переписывать?

метание: туда, сюда. Из цыклов к ndarray оттуда обратно к цыклам.

Нет шобы писать на kdb или на julia сразу, детский сад прямо (код не мой).
SannySanoff
programming Однако по долгу службы оптимизирую петон. Чужой код с numpy. Человек простой, местами голыми руками в цыклах проходится по массиву из numpy, чото там экспоненциально усредняет, затухает.

Карочи, если вытащить из numpy array число (скаляр), и потом его складывать с аккумулятором например, то получается тормоза, потому что вытаскивается np.float64 и вся петонья арифметика над скалярами дёргает в результате за numpy кишки.

А если массивчег вначале превратить в tolist(), то есть в детсадовские петоньи даблы, то всё работает в 10 раз быстрее, а точность в 9 знаке (чем пугают нас пугаторы) нам не очень-то и хотелось и изначально.

Вот такой вот этот петон. А до этого я и так прооптимизировал всё шо можно было с 45 секунд до двух.
SannySanoff
programming непонятно Бывает задашь вопрос на прог. форуме, ответит тебе чувак из той самой лавки, которая это написала, но ответит это невнимательно прочитав вопрос, и ответ звучит "смотри как устроен цыкл FOR в учебнике 1 класса". А вопрос-то был гораздо более высокого уровня. И если бы его кто-то ткнул носом в его ошибку, ему тогда было бы западло ответить более точно, потому он такую лажу ответил перед этим, стыдно ему наверно, и тред просто в офигении замолкает.
SannySanoff
programming profit kdb Написал мониторинг. Поставил, стало быть, prometheus. Штук десять разных систем льют в него данные.

А проблема в том, что я не люблю ихний pull, то есть когда он ходит сам за данными, а я ему отдаю по запросу. Потому что у меня там кластер, динамическое всё, кубернетезы, нужно использовать чужие костыли, service discovery всётакое, делать динамический список таргетов. Всё как завещали отцы.

Сделал я pushgateway, то есть как не рекомендовали отцы. И из скриптов туда заливаю данные, а потом сам прометеус их оттуда готовенькими всасует. А данные у меня разные есть, но как известно, данные данным рознь. Таковая система работает с данными типа "загрузка ЦПУ", но плохо работает с данными "запросов в секунду", потому что их хорошо агрегировать "запросов в минуту", "в час" итд. Прометеус это умеет, но в системе с пуш гейтвей не работает, потому что если я например буду каждую секунду в гейтвей заливать цифру "запросов-в-секунду", они не будут там накапливаться, а только последнее хранится. Потом раз в полминуты эти данные забираются уже прометеусом и сами понимаете. Это не синхронизируется в принципе. И не лечится. Так задизайнено. Keep it simple. Ну я приблизительно синхронизировал, порядок совпадает и ладненько. Всякие там jobs, instances как положено.

Потом пошел значит через API запросы гонять и рисовать стало быть graphviz граф на ПЕТОНЕ, в котором на дугах нарисовано к-во запросов в минуту час итд, а в квадратиках загрузка процов итп. Получилось пресимпатишно. НО.

1) куча запросов к прометеусу за данными — тормозит, сотня запросов к прометеусу на 1 отрисовку
2) pushgateway со своими нерешаемыми проблемами.

ДОЛГО ЛИ КОРОТКО

Короче, выкинул прометеус нафиг. Больше ничего не трогал. Оставил как есть все сенсоры на всех 10 сервисах, которые пушают мне свои цифры. И загрузку, и к-во запросов за отчетный период (раз в полминуты лью например).

Взял в руки kdb+. Написал парсер заливаемых данных (POST query). Написал табличку в памяти которая хранит всё что в нее кладут, без вопросов, для последних нескольких миллионов записей, подчищая.

Вместо 100 запросов за данными к прометеусу, теперь запускаю 1 раз весь отрисовочный код, собираю в коллекцию все запросы которые были сделаны (запросы структурно оставил те же самые, токо в kdb syntax перевел), а отдаю нули. Потом 1 раундтрип к кдб с массивом запросов. Потом второй проход снова запускаю отрисовочный код, на этот раз он реально рисует: запросы свои запрашивает, но никто никуда не ходит — все ответы уже на руках.

Результат:

Код отрисовки стал двухпроходной (к-во и структура кода не изменилось, 7 строк ПЕТОНА добавилось которые запускают 2 прохода).

Весь код на kdb+, заменивший прометеус, состоит из 8 (восемь!) строк: пять строк REST сервер беcпарольный, который принимает метрики. 3 строки второй сервер, запароленный, в нем собственно определение таблицы 1 строка, к нему приходят с отрисовочного кода запросы за данными, и две строки утильных функций с повторяющимся кодом для агрегации.

Код, отправляющий данные с сервисов, — без изменений.

8 строк на нормальном языке ваш прометеус, миллениалы.

Да, и алерты на кдб проще будет прикручивать: нормальный язык, а не конечно любопытный, но ограниченный язык запросов к прометейной базке.
SannySanoff
programming q продуктивность Я норкоман, я хочу научиться писать интерпретаторы (на самом деле хотя бы парсеры) языка k в Whitney-style, и написать конпелятор из k в julia, это будет реальная бомба. Ибо щас k похож на python+numpy, и в нем лупзы тормозят. А так будет натуральный jit с цлангом, шаблонами (жулиа тайп-базед диспатч) и шлюхами. Улёт, не так ли?
SannySanoff
programming q вброс Дофига пишут софта "который делает kdb+ по перфомансу".
Clickhouse, LocustDB, QuestDB, всякие columnar движки к postgres, тысячи их.

Только нафига они, если там в них нету APL-like language, а писать простыни SQL ... да я бы и писал, если бы он был хоть выразительный (как oracle/postgres, correlated subqueries, неодномерные типы итп), а то кроме select ..where.. ничего и не предлагается по большому счёту.

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

(1) для ниши анализа numerical big data
SannySanoff
жизнь programming продуктивность Собрал себе девайс на Ryzen 3900x (как писал раньше, 3950х не досталось).
Карту Radeon туда воткнул.

Погонял: венду, clear linux, ubuntu 19.10.

Clear Linux сырой, и какой-то атипичный. В /etc/environment (грубо говоря) лежат CFLAGS которые портят мой билд, например. Кучи дефолтных файлов нету или хрен найдешь (например sysctl.conf), ставится всё чересчур неприятно, половины софта нету. Хотя по бенчмаркам на AMD — он самый быстрый. Ну, наверное.

С++ билд моего проекта ускоряется до 12 потоков, далее 24 он остается таким же. НО на это влияет, естественно, самый большой С++ файл, который компилится один, в конце списка, но может и не он 8). Как в cmake переордерить — яхез, ну и нафиг.

AMD для линукса по ощущениям лучше, чем NVIDIA, т.к. последняя где-то по ощущениям течет (открытая сессия через несколько часов чуток тормозит в отрисовке — субъективно, с Radeon такого нету). Всякие webgl вертятся на ура.

Предыдущий основной девайс — Lenovo + Intel 8550H. По ощущениям разница весьма заметна.

Вердикт: ничо так, всё не зря.
SannySanoff
C++ programming Я перевел свой проект на асинхронные корутины, с асинхронных promises/futures/callbacks (всяких .then)

Теперь можно потихоньку выкидывать шаред пойнтеры КОЕ ГДЕ, а вместо них старое доброе RAII, потому что код по структуре теперь как синхронный, и не нужно ничего передавать в continuations, референсы каунтить итп.

Процентов на 15 медленнее стало, разве. Но шаред пойнтеры тормозят все 30.

Цифры приблизительные.
SannySanoff
programming политота тоталитаризм интеллектуальное_гопничество Становлюсь старее и наблюдаю хождение людей по кругу.

Вот язык Go, в котором чуваки типа анализируют всё хорошее и выкидывают всё плохое — я например заглянул в их документ "Summary of Go Generics Discussions" — там ссылки от Ады до Хаскеля, т.е. чуваки в курсах. Я внутренне симпатизирую этому языку, хотя еще не писал. Не проникся духом этого языка и, стало быть, могу критиковать, навлекая на себя гнев "ты сначала это, а потом уже!" Ну, поэтому я еще и читаю что бог пошлет, например "Go's features of last resort". Там ссылки на несколько статей. Все статьи гуглибельны по названию.

Вот одна статья "Exception Handling Considered Harmful", в которой пишут, что эксепшны
— это плохо, потому что неочевидный для читателя control flow и полу-мутировавший глобальный стейт, прерванный на середине исключением, что 99% С++ кода не являются exception-safe и прочая ересь. Очевидно же, человек заучился, щас расскажу почему.

Вторая статья под первой называется "A theory of modern Go" там чувак рассказывает школьникам, что мутабельный стейт это плохо, говорит, что нужно передавать в функцию всё параметрами, а глобалы это оцтой, потому что из плохой сигнатуры функции не видно как данные ходят, и где они прячутся.

То есть они что-то знают, но еще не увязывают это всё.

Вероятно, они не в курсе, что уже давно уже не кошерно перемежать чистый код и код с сайд-эффектами. Что нужно сначала думать, а потом в файлы писать и глобалы менять. Тогда и эксепшны зайдут вполне норм, и в Go тоже, потому что эксепшны в pure functions это есть гут. У меня вот чистого кода на плюсцах 80%, и RAII в полный рост, а они меня записали в 99% exception unsafe, и на go я теперь писать не буду, потому что "if err\n { return err; }" увеличит мой код в 2 раза. Мне обидно, но я понимаю теперь, что это просто школьники ходят по кругу, и что это просто очередные миллениалы изобретают очередной велосипед под задачи перемешанного кода.

Теперь Саша Коэн наехал ( businessinsider.com ) на Цукерберга, что тот заменил свободу для всех слова свободой пропаганды для определенных лиц. Цукерберг оправдывается и строит из себя школьника, изобретающего как ему распорядиться той силой, которую он себе неожиданно построил — послушайте только его речи — он в самом пути деланного хождения по граблям. То есть он сначала строил, а теперь только думает как распорядиться. Типа он школьник, и не читал философских трудов где всё расписано, как обустроить хорошо. Многие верят. Они вынуждены ходить кругами под Цукербрином, и впереди цифровая диктатура, потому что сами они ничего не читали, не знают, и знать не хотят. Поэтому и будут жить при диктатуре, полагая что это демократия.

Скучно тут.