Chat:Ru/2020-08-17
gtj: вот я уверен поставить фри бсд и все там работает
Uljahn: на godbolt.org можно посмотреть, какой асм генерится разными компиляторами для плюсов в том числе или даже для LLVM-IR, о чём тот парень и спрашивал
daddio: 40597d7b5df7f683576153e8a0139e17033c2
daddio: 40597d7b5df7f683576153e8a0139e17033c2
tutubalin: Uljahn сломал комбуху :) я ждал, когда он полностью чат забьёт, чтобы зарепортить
vrabosh: что думаете про книги чистый код и совершенный код? стиот питонисту читать или лучше после того как с++ выучу?
vrabosh: хотя я наверно к с++ через год только возьмусь.. хочется питон идеально научится программить и дойти до уровня когда упрусь, что не хватает производительности.
tutubalin: есть и для питона подобные книги
Uljahn: PEP8 уже выучил?
amurushkin: я собирался читать их кажется. но пока не дошел
BorisZ: я читал какую-то из них, не то чистый, не то совершенный, которая постарее. До конца не дочитал - сложновато.
BorisZ: там примеры были на джаве, но ничего привязанного к языку там нет, там про общие идеи
BorisZ: но некоторые мысли запомнились, так что попробовать стоит, хотя бы по верхам пробежаться
Uljahn: полезно представлять, что такое цикломатическая сложность и другие меры сложности, какие методы управления сложностью существуют. Я, например, как не настоящий сварщик, стремлюсь "размазывать" сложность по коду, чтобы он легче воспринимался, чтобы не возникало зубодробительных конструкций с зашкаливающим показателем wtf/мин
Uljahn: питон, кстати, совсем не про производительности
vrabosh: а я всегда парюсь о поизводительности
vrabosh: даже в питоне)
vrabosh: если вижу, что простотой своей делаю лишнии операции, то не могу такой код писать
vrabosh: это с дестства пошло, потомучто всегда были компы тармазнутые, где даже фильм еле запускался.. и диск был 4гбайт..
Uljahn: можно, конечно, с numpy и scipy поковыряться, там всё довольно низкоуровневое
Uljahn: в случае питона не всегда понятно, где лишние операции - надо байткод смотреть
Uljahn: и профилировать всё подряд
Uljahn: чатик лагает :(
vrabosh: я логически поинмаю, что если делать класс, потом еще подкласс итд.. и это все часто через экземляр вызывать.. то это долго
vrabosh: хотя это может быть красиво
vrabosh: поэтому когда работаю с классами, то обработка тяжелая в самом начале кода.. а потом только работать с один экземляром.. как с функцией и перемеными по сути
gsomix: Я думаю, полезно выработать привычку бенчмаркать и профилировать перед тем, как заниматься оптимизацией. :)
gsomix: Чтобы не делать ненужную работу и осмысленно рассуждать о производительности кода.
Uljahn: +
gsomix: Но я тоже не настоящий сварщик.
gsomix: По поводу книг — я читал "Чистый код". Книга хорошая, но нужно с некоторым скептицизмом относиться к советам.
Uljahn: как и к любым советам
gsomix: Конечно. :)
Uljahn: хотя, PEP8 - тоже советы своего рода, но выучить его полезно
vrabosh: что такое бнчмаркать и профилировать?
Uljahn: измерять производительность
Uljahn: benchmark и profiling
vrabosh: а да, я регулярно проверяю.. темболее в юпитере это просто
Uljahn: ну, там надо понимать, как создать грамотный тест, чтобы тебе не намерило закешированные вычисления
Uljahn: в плюсах это проще, там нет такого количества промежуточных слоёв как в питоне
vrabosh: угу.. но я в целом смотрю, там где разница не в 10-30% а где может быть 100%+
vrabosh: допустим обьявлять каждый раз экзепляр или всетаки стоит подругому сделать.
vrabosh: допустим сделать так api.users.get(uid=1, field=[...])
vrabosh: или лучше так api('users.get', uid=1, field=[..])
vrabosh: где users.get это люмые атрибуты неизвестные, заранее не определенные
Uljahn: второй вариант странный, я бы не стал так делать
vrabosh: хотя первый вариант симпотней. но он долгий
BorisZ: vrabosh там где все крутится вокруг сетевых запросов - нет смысла париться о производительности кода
Uljahn: +
vrabosh: почему?
BorisZ: надо думать как количество запросов уменьшить если возможно
Uljahn: узким местом будеть ввод-вывод, т.е. задержки сети
BorisZ: они в сотни - тысячи раз дольше выполняются чем почти любые вычисления хоть в питоне хоть в чем
vrabosh: поэтому игры и делают куча серверов, потомучто не парятся наверно.. а моглибы все на одном хранить.. круто когда мир един
vrabosh: ну так ввод-вывод же асинхроно делается.. получил, отправил.. пускай лежит там в отправке
vrabosh: я когда на пхп писал, у меня проблема была это БД
Uljahn: кстати, профилирование как раз позволяет оценить, где у тебя в коде "бутылочное горлышко" (bottleneck), т.е. то самое узкое место
vrabosh: как сделать, чтобы даже тотже просто select .. where id=? был быстрый когда идет под 100-200 запросов
vrabosh: про узкое место кстати хорошаякнига "цель":)
BorisZ: все равно какая-то часть программы ждет ответа а потом что-то делает с ним, и это ждет будет в разы дольше
vrabosh: там про завод, как исправление уского горлышка может спаси весь завод от бонкротсва
BorisZ: к бд - надо индексы добавлять к таблицам по полям по которым выбор делается
vrabosh: пока до сети я не дошел.. это уже в другие месяца.. надо понять сначало как работает.. потом уже буду тоже проверять скорости
BorisZ: если баольшая таблица, если маленькая то может и не стоит
vrabosh: та я знаю как работать с БД, но БД как не крути самое медленное
vrabosh: хотя я только майсан использовал, может еслиб с другими поработал.. чтото придумал..
Uljahn: для бд надо вроде сначала определить требования по отказоустойчивости, целостности, масштабируемости и т.д., а то не предметный разговор
vrabosh: я старался делать простеньку таблицу, одну без связей. где where id=? юзера, и куча полей которые дают данные о юзере
vrabosh: если это экипировка то про экипировку, если магазин, то про вещи в магазине и сколкьо их итд..
vrabosh: чтобы инер джоины не делать..
vrabosh: т.е. гдето дублировал данные
vrabosh: чтобы быстрее было
vrabosh: допустим id_шмотки можно в dict засунуть предварительно, и потом когда от юзера айди_шкотки получаешь, то через списко все параметы видны, и не надо повторо лазить к БД или иннер делать
BorisZ: может иногда в этом есть смысл, но в среднем лучше к нормальной форме приводить, может не к 3 но где-то ближе
BorisZ: скорость можно улучшить если не передавать запросы в виде строки а сделать view или хранимую процедуру на каждый частый запрос
BorisZ: запрос в виде строки компилируется каждый раз движком если он не в кеше
BorisZ: а процедура уже скомпилированная лежит
vrabosh: хм. про это не знал. хотя я в бд не так много знаю. только индексы, как конфиги подправить.. и может еще что нить
vrabosh: ну и в пхп как я понял, так каждый рз коннект идет.. а в питоне может оно будет всегда соединение держать
Uljahn: есть подозрение, что в некоторых случаях быстрее будет работать с файлом как с numpy array через memmap как в статье https://habr.com/ru/company/ruvds/blog/490630/
vrabosh: ну поэтому монгоБД сделали.
vrabosh: я помню ЖЖ когда был, они это вроде сделали.. чтоб снизить нагрузки
BorisZ: vrabosh не факт что коннект всегда идет, может быть connection pool на уровне либы которая цепляется к базе или самой базы или прослойки
BorisZ: то есть куча готовых открытых коннектов, кто обращается с запросом - тому дают готовый коннект
735487: ну в php скорее всего факт. там каждый скрипт он умирает в конце выполнения
735487: но возможно как то можно заделать чтобы в memcache каком нибудь коннекты хранить. я не пробовал ниразу. никогда не было у меня еще проблемы чтобы это мешало
vrabosh: amurushkin , с какими ты нагрузами работал?
vrabosh: у меня просто было когда онлайн 200 чел в чате сидят, и каждый чтото делает ну и сам чат обновляется раз в 3сек
vrabosh: на серваке 4 ядра, 8гбайт.. там еще парралельно другие приложения можно под 50 людей добавить.
vrabosh: базы не большие правда под 100к, и раздел со шмотом под 10м+
735487: да это не большая нагрузка. не должно лагать если индексы нормально сделать
735487: а вот обновления чата лучше сделать через longpoll хотя бы. будет намного легче твоему серву
vrabosh: и апачь+нгинкс поччти нежрало ресурсов, а mysql под 200%+
vrabosh: возможно да, лучше через лонгполл если нагружаемый.. просто чегото привык к кэлбэку.. и думал это лучше
735487: а еще лучше event source
vrabosh: индексы я везде ставил там где идут запросы в where или group order
vrabosh: что за евент?
735487: у нас так чат построен. плюс возможность видеозвонков. правда на 1 серве сразу по 200 не общаются но нагрузок нет вообще критических
735487: а вот кстати смотри еще прикол. если у тебя много индексов и ты часто пишешь в базу то она тоже будет тормозить
735487: индексы помогают селектам но тормозят инсерты
735487: нужна золотая середина
vrabosh: хм. кароче надо еще и по БД книгу читать)
vrabosh: а насчет лонгпол надо подумать... т.к. там и отправлять сразу можно запросы пачкой в execute api засовывать
vrabosh: и принемать тоже пачкой
vrabosh: а логику просчитвает питон быстро
735487: https://ru.wikipedia.org/wiki/Server-sent_events
vrabosh: там просто архетиктуру продумать. вот как раз будет мне задача эксперементировать пока изучаю питон) буду и кэлбэк и лонгполл тестить..
735487: евентсурс он чуть круче чем лонгполл
vrabosh: сохраню на будущее
vrabosh: одно дело узнать все это про производительность, а потом еще придумать что сделать, чтобы людей было много)
vrabosh: весело быть соло программистом..
vrabosh: я первый год помню вообще нечего не зарабатывал на первой игре, пока не придумал новое приложение которое поперло
vrabosh: взаимофрейндинг)
vrabosh: тут чат-бота придумал, 200тыс людей собрал.. и вк через пару мес запретила рассылки делать)
mykeich: ни разу не заходил в вк
Uljahn: ни разу не смотрел Титаник
vrabosh: вы с какой параллельной вселеной?)
gsomix: Недавно отказался от соцсетей, только несколько чатов оставил.
gsomix: И гитхаб. :)
Uljahn: пазл недели с брейнфаком похож на приквел к экспертным правилам Code of the Rings
tutubalin: запили DP для CofR
tutubalin: но пока на питоне и не очеень оптимально. очень долго работает
tutubalin: *запилил
gtj: ой да ладно про производительность заливать турбо асемблер в зубы и на любой тачке тех лет ниче не тормозило я сам лично свидетелем был, а вот на всяких питонах и си плюхах да подтверждаю бывают пролаги
Uljahn: я видел собаку друга кодера, у которого ничего не тормозило, Automaton2000
Automaton2000: а как ты противника предсказываешь?
vrabosh: гдеты слышал, что один тру асемблерист прогал чтото неделю, а потом решил на с++ проверить, код на с++ несколкьо сток.. и оказалось что его асм програ на 5% только быстрее
tutubalin: бывает, что на 5% быстрее - это на 5% меньше компов надо покупать
tutubalin: а бывает, что прога на с++ работает быстрее, чем на асме
Uljahn: ещё бывает, что скорость асма превозносят те, кто не писал на нём ничего сложнее hello world :unamused:
Uljahn: не только тебя, таких много, кто не учитывает скорость разработки
gtj: если меня не выперли тот раз значит мне приходилось писать!) рабочий код) всмысле из учебы)
gtj: хеллоу ворлд написать не смложно
gtj: вот вчера поставил асм себе думал щас пойдет а фиг там придется ставить турбо асемблер
gtj: потомучто я привык к тому старому стандарту а что тут предлагают ваще вырви глазно и не понятно откуда что
gtj: тоесть все асмыс разные и старый код 16 битный или режим не все поддерживают
gtj: http://chat.codingame.com/pastebin/2c8c40ca-d061-4fe4-b108-205dd9e9d24b
vrabosh: tutubalin , ну да, для майнеров каких нить 5% это экономия 5% денег.
Uljahn: http://chat.codingame.com/pastebin/b5bfe309-80e4-4ef6-b293-c3bbbd8fb1e5
Uljahn: Automaton2000: почему скукожилось моё письмо в спортлото? раскукожь обратно!
Automaton2000: я пока не придумал новое приложение которое поперло
gtj: про текущие стандарты я хз а про 16 бит много могу рассказать
gtj: в том числе про доступ к перифирии и биосу
Uljahn: 16 бит сейчас как раз в микроконтроллеры перекочевали, там всё нормально с ассемблером
gtj: надо знать спецификацию набора команда текущего процессора
gtj: там есть регистры и регистры разные вот в регистры надо смотреть
gtj: и читать спецификацию там написано в каком регистре отражается переход
gtj: еще если ты говоришь про непонятно отслеживаемое значит процессор или назовем ее комбайн метит в своем пространстве и проходит
gtj: пометил пошел дальше а врегистре каждое изменение читается
gtj: и наверняка уже много воды утекло всякими jk и прочими никого не удивить придумали новые тригеры новых размеров и что я напишу в конце я понял пока что вся это божественная информация в масме 32 закрыта от пользователя и хрен пойми каким тут синтаксисом писать надо это все
tutubalin: 32 бита - это технология прошлого столетия. ты в коме пролежал всё это время?
gtj: я учился когда был топ асм турбо там все логично и синтаксис и прочее я выяснил что там синтаксис 16 бит но в то время мы спорили с чуваками
gtj: открываю с вертухи в 2020 вижуал асм и всякую байду которую мне предлагают
gtj: в примере они запихали 16 бит
gtj: если открыть 32 бита и писать 16 не работает
gtj: и документация по 16 битам
gtj: так проще тогда турбо асемблерить
gtj: нахрена мне майкрософсткий асемблер
gtj: майкрософт не дает мне доступ к регистрам
gtj: причем был слушок в том виде каком есть
gtj: в синтаксисе 16 битного асма
tutubalin: пожалуйста, перестань флудить
tutubalin: если есть, что сказать полезного - напиши одно длинное сообщение
tutubalin: а если хочется каждое слово в отдельной строчке писать - иди в линагу поиграй
Uljahn: или в дискорд, там логи не смывает
gtj: http://chat.codingame.com/pastebin/aa93c97f-0ff3-4b89-9c41-75ed59787a60
gtj: вот можно не вникать в ассемблер а кодить по олдскулу как учили и будет работать)
vrabosh: gtj , ну реальо тебя же многие просят, почему ты этим вредительством занимаешься? трудно чтоли взять твиты у себя в блокноте написать, а потом весь текст сюда копипастнуть?
vrabosh: заодно и читать проще будет.. и тебе также можно будет ответить нормально.. можешь попунктно напиать, также по пунктам можно будет ответить
Uljahn: vrabosh: видимо, мы не привыкли к стилю общения из чата линейки :(
mykeich: линейка эта та ужасная игра в браузере во времена медленного интернета?
Uljahn: это про lineage 2
mykeich: последний раз онлайн я пытался играть ultima online и то не долго
gtj: в игры уже никто не играет они играют сами в себя, да и тоже не тянет уже
gtj: http://natalia.appmat.ru/c&c++/assembler.html
tutubalin: Automaton2000: lvl?
Automaton2000: ну может и не нужно
tutubalin: Automaton2000: go pvp?
Automaton2000: сижу и втыкаю в сообщения шуриша :thinking:
gtj: допилю возврат кирка обратно и буду шаманить уже с асмом)
gtj: основную работу класса перепишу на асемблер
tutubalin: вангую нескончаемые сообщения про асм примерно до декабря
gtj: я потом кину просто код а до этого буду разбираться
tutubalin: просто кинешь код 100500 раз, как это было до этого
gtj: нет щас же не кидаю я его поменял уже
Uljahn: Automaton2000: хорошо ли кидаться говнокодом в чате?
Automaton2000: чё это у тебя за баг?
gtj: я попытался как смог его изменить вчера после профайлинга на свой уровень привел его
gtj: итого он говнокод потомучто я не могу 1 сегмент ифкулей убрать в свитч иза недопониманий некоторых вчера пол дня убил на это
gtj: ну и потом можно перелопатить все на общее состояние но я хз нужно это в простых прогах
gtj: Одни языки создаются для решения задачи, другие – для доказательства той или иной точки зрения. Деннис Ричи
gtj: Врабош) https://youtu.be/r5JGDiI22s4
gtj: у меня вот издание страуструпа о с++ (2010 год толстенная тут еще написано бином))
gtj: http://chat.codingame.com/pastebin/d945a452-97fe-4333-b29c-24d4edc77072
gtj: тема пахнет нейронками со слоями
gtj: https://journals.sagepub.com/doi/abs/10.3141/2263-10?journalCode=trra
gtj: Application of Discrete Fourier Transform to Find Reliable Shortest Paths
zuko3d: gtj если есть вопросы по поводу хранения графа в памяти - могу на что-то ответить. По поводу adjacency list - он обеспечивает самый бытрый доступ к данным для типичных задач, потому его и используют.
gtj: а почему там же рассматривают мап хранение
gtj: типо удобно хранить структуру где уже чтото есть в ноде прям?
zuko3d: нет, потому что мап - это разброс по памяти, теряется локальность кэша
gtj: тоесть получается если идет разговор о графах то это по умолчанию если это не твоя личная инициатива а например производство какоето то обязательно прям адженси лист,
gtj: тоесть я хочу понять какой из них дефолтный понятно что исполнение выбрать свое можно
zuko3d: если граф большой, то да
gtj: тогда получается слои в виде тоже списков или это дерево? деревом же можно состояния подбирать
gtj: следующее состояние из текущего
zuko3d: о каких слоях речь?
gtj: пока сам не понял но тут вот проветривался от этого дикого изучения и подумал о слоях потом врубил первую попавшуюся лекцию и мысля прям совпала
gtj: когда произойдет ход или 1 итерация поиска состояние изменится
gtj: так как мы знаем его текущее состояние мы можем знать следующее
gtj: ну грубо говоря я представлял себе массив деревьев
gtj: можно типо тягать какие надо пути из нужных слоев как кластеры или как копирка
gtj: на следущем слое другой путь
zuko3d: чёт странная концепция, никогда такую не использовал
gtj: https://imgur.com/a/r2JdPaa
gtj: ну и получается каждый слой относительно головы
gtj: какбудто голов много но на каждом слое после опр действий разные пути идут на соотвествующий слой
gtj: у нас например граф в нем 3 пути
gtj: как только мы видим любое изменение линейности следующая новая линейсность пока не конец искомый уходит на следующий слой
gtj: тоесть после такой операции получится массив деревьев где из головы будет только 1 путь
gtj: p[1]=............finish p[n]=............finish
zuko3d: уф, ну хранение деревьев - это немного иная история, нежели графов в целом. деревья обычно не бывают на миллионы вершин
zuko3d: но я так и не понял, зачем тебе нужны "слои"
gtj: хз в леции вот тоже о слоях человек затер)
gtj: я книгу потерял про алгоритмы)
gtj: ис старта в финишь, он визитирует и выводит все точки посещаемые по мере поступления и посещения тоесть выводит очередью ответ путей
gtj: и человек предлагает подход слоев
gtj: мб это массив я пока не вкурил
zuko3d: брррр.... ты вообще какую задачу пытаешься решить?
gtj: делаю кирка и попутно разбираюсь с основами)
zuko3d: что за кирк?
gtj: щас глянем что седжвик рекомендует нашел таки наконецто)
Uljahn: gtj: зацени https://www.codingame.com/playgrounds/38626/optimizing-breadth-first-search
gtj: я уже просек что у бфс много ног в том числе и икс рэй и прочее
gtj: у седжвика к слову 1000 страниц и тут тема как раз про графы есть
gtj: тоесть идем не по точкам графа центровым а определяем границы
gtj: наконецто я на эту книгу созрел)
gtj: 6 глав про графы чую я ушел) щас гляну чо ты скинул и пойду курить)
Uljahn: я скинул, чем кодеры здесь занимаются на контестах и в мультиплеерах
gtj: ну он сегенерировал 1000 кодом лабиринт
gtj: ну он нарисовал хорошо вот он структуру ноды написал хорошо бы было если бы он по естному вывел бы сдесь еще не только лабиринт а приложил его! получившуюся структуру данных
gtj: там очень обманчивая структура может быть
gtj: у меня показывает только дфс в том дереве(
gtj: ну все вот седжвика надо читать
gtj: https://www.youtube.com/watch?v=e0W65ScZmQw
gtj: https://youtu.be/vYgIKn7iDH8
gtj: https://www.youtube.com/watch?v=dxVKqigyfmQ
SouJll: Кто знает, почему во вкладке Home не отображается дерево прогресса?