Chat:Ru/2020-08-17

From CG community
Jump to navigation Jump to search

Default avatar.png gtj: оу как все поменялось

Default avatar.png gtj: не хочу турбо дебагер

Default avatar.png gtj: вот я уверен поставить фри бсд и все там работает

Uljahn: на godbolt.org можно посмотреть, какой асм генерится разными компиляторами для плюсов в том числе или даже для LLVM-IR, о чём тот парень и спрашивал

Default avatar.png daddio: g

Default avatar.png daddio: 40597d7b5df7f683576153e8a0139e17033c2

Default avatar.png 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: *запилил

Default avatar.png gtj: ой да ладно про производительность заливать турбо асемблер в зубы и на любой тачке тех лет ниче не тормозило я сам лично свидетелем был, а вот на всяких питонах и си плюхах да подтверждаю бывают пролаги

Uljahn: я видел собаку друга кодера, у которого ничего не тормозило, Automaton2000

Automaton2000: а как ты противника предсказываешь?

vrabosh: гдеты слышал, что один тру асемблерист прогал чтото неделю, а потом решил на с++ проверить, код на с++ несколкьо сток.. и оказалось что его асм програ на 5% только быстрее

tutubalin: бывает, что на 5% быстрее - это на 5% меньше компов надо покупать

tutubalin: а бывает, что прога на с++ работает быстрее, чем на асме

Uljahn: ещё бывает, что скорость асма превозносят те, кто не писал на нём ничего сложнее hello world :unamused:

Default avatar.png gtj: ага это намек на меня)

Uljahn: не только тебя, таких много, кто не учитывает скорость разработки

Default avatar.png gtj: если меня не выперли тот раз значит мне приходилось писать!) рабочий код) всмысле из учебы)

Default avatar.png gtj: хеллоу ворлд написать не смложно

Default avatar.png gtj: вот вчера поставил асм себе думал щас пойдет а фиг там придется ставить турбо асемблер

Default avatar.png gtj: потомучто я привык к тому старому стандарту а что тут предлагают ваще вырви глазно и не понятно откуда что

Default avatar.png gtj: тоесть все асмыс разные и старый код 16 битный или режим не все поддерживают

Default avatar.png gtj: 386 586 или 686

Default avatar.png gtj: о наконецто нашел)

Default avatar.png 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: я пока не придумал новое приложение которое поперло

Default avatar.png gtj: про текущие стандарты я хз а про 16 бит много могу рассказать

Default avatar.png gtj: в том числе про доступ к перифирии и биосу

Uljahn: 16 бит сейчас как раз в микроконтроллеры перекочевали, там всё нормально с ассемблером

Default avatar.png gtj: надо знать спецификацию набора команда текущего процессора

Default avatar.png gtj: там есть регистры и регистры разные вот в регистры надо смотреть

Default avatar.png gtj: и читать спецификацию там написано в каком регистре отражается переход

Default avatar.png gtj: еще если ты говоришь про непонятно отслеживаемое значит процессор или назовем ее комбайн метит в своем пространстве и проходит

Default avatar.png gtj: пометил пошел дальше а врегистре каждое изменение читается

Default avatar.png gtj: и наверняка уже много воды утекло всякими jk и прочими никого не удивить придумали новые тригеры новых размеров и что я напишу в конце я понял пока что вся это божественная информация в масме 32 закрыта от пользователя и хрен пойми каким тут синтаксисом писать надо это все

Default avatar.png gtj: какойто с асемблер

tutubalin: 32 бита - это технология прошлого столетия. ты в коме пролежал всё это время?

Default avatar.png gtj: да я вкурсе

Default avatar.png gtj: я учился когда был топ асм турбо там все логично и синтаксис и прочее я выяснил что там синтаксис 16 бит но в то время мы спорили с чуваками

Default avatar.png gtj: открываю с вертухи в 2020 вижуал асм и всякую байду которую мне предлагают

Default avatar.png gtj: и что я вижу

Default avatar.png gtj: левый код

Default avatar.png gtj: говнину

Default avatar.png gtj: в примере они запихали 16 бит

Default avatar.png gtj: если открыть 32 бита и писать 16 не работает

Default avatar.png gtj: тоесть говнина

Default avatar.png gtj: и документация по 16 битам

Default avatar.png gtj: так проще тогда турбо асемблерить

Default avatar.png gtj: нахрена мне майкрософсткий асемблер

Default avatar.png gtj: майкрософт не дает мне доступ к регистрам

Default avatar.png gtj: а турбо даст

Default avatar.png gtj: причем был слушок в том виде каком есть

Default avatar.png gtj: в синтаксисе 16 битного асма

tutubalin: пожалуйста, перестань флудить

tutubalin: если есть, что сказать полезного - напиши одно длинное сообщение

tutubalin: а если хочется каждое слово в отдельной строчке писать - иди в линагу поиграй

Uljahn: или в дискорд, там логи не смывает

Default avatar.png gtj: yfgbie d ghjwtccjh

Default avatar.png gtj: в процессор напишу

Default avatar.png gtj: и в очередь добавлю

Default avatar.png gtj: вот теперь разобрался

Default avatar.png gtj: http://chat.codingame.com/pastebin/aa93c97f-0ff3-4b89-9c41-75ed59787a60

Default avatar.png gtj: вот можно не вникать в ассемблер а кодить по олдскулу как учили и будет работать)

Default avatar.png gtj: вставками всмысле)

vrabosh: gtj , ну реальо тебя же многие просят, почему ты этим вредительством занимаешься? трудно чтоли взять твиты у себя в блокноте написать, а потом весь текст сюда копипастнуть?

vrabosh: заодно и читать проще будет.. и тебе также можно будет ответить нормально.. можешь попунктно напиать, также по пунктам можно будет ответить

Uljahn: vrabosh: видимо, мы не привыкли к стилю общения из чата линейки :(

mykeich: линейка эта та ужасная игра в браузере во времена медленного интернета?

Uljahn: это про lineage 2

mykeich: последний раз онлайн я пытался играть ultima online и то не долго

Default avatar.png gtj: да ла2 это так

Default avatar.png gtj: фалаут 76 поинтересней

Default avatar.png gtj: в игры уже никто не играет они играют сами в себя, да и тоже не тянет уже

Default avatar.png gtj: чисто портал в 90ые)

Default avatar.png gtj: http://natalia.appmat.ru/c&c++/assembler.html

tutubalin: Automaton2000: lvl?

Automaton2000: ну может и не нужно

tutubalin: Automaton2000: go pvp?

Automaton2000: сижу и втыкаю в сообщения шуриша :thinking:

Default avatar.png gtj: допилю возврат кирка обратно и буду шаманить уже с асмом)

Default avatar.png gtj: основную работу класса перепишу на асемблер

Default avatar.png gtj: потом

tutubalin: вангую нескончаемые сообщения про асм примерно до декабря

Default avatar.png gtj: нет

Default avatar.png gtj: я потом кину просто код а до этого буду разбираться

tutubalin: просто кинешь код 100500 раз, как это было до этого

Default avatar.png gtj: нет щас же не кидаю я его поменял уже

Uljahn: Automaton2000: хорошо ли кидаться говнокодом в чате?

Automaton2000: чё это у тебя за баг?

Default avatar.png gtj: почему говнокод

Default avatar.png gtj: я попытался как смог его изменить вчера после профайлинга на свой уровень привел его

Default avatar.png gtj: итого он говнокод потомучто я не могу 1 сегмент ифкулей убрать в свитч иза недопониманий некоторых вчера пол дня убил на это

Default avatar.png gtj: ну и потом можно перелопатить все на общее состояние но я хз нужно это в простых прогах

Default avatar.png gtj: Одни языки создаются для решения задачи, другие – для доказательства той или иной точки зрения. Деннис Ричи

Default avatar.png gtj: Врабош) https://youtu.be/r5JGDiI22s4

Default avatar.png gtj: у меня вот издание страуструпа о с++ (2010 год толстенная тут еще написано бином))

Default avatar.png gtj: http://chat.codingame.com/pastebin/d945a452-97fe-4333-b29c-24d4edc77072

Default avatar.png gtj: тема пахнет нейронками со слоями

Default avatar.png gtj: причем настолько близко

Default avatar.png gtj: https://journals.sagepub.com/doi/abs/10.3141/2263-10?journalCode=trra

Default avatar.png gtj: Application of Discrete Fourier Transform to Find Reliable Shortest Paths

zuko3d: gtj если есть вопросы по поводу хранения графа в памяти - могу на что-то ответить. По поводу adjacency list - он обеспечивает самый бытрый доступ к данным для типичных задач, потому его и используют.

Default avatar.png gtj: а почему там же рассматривают мап хранение

Default avatar.png gtj: только ради удобства?

Default avatar.png gtj: типо удобно хранить структуру где уже чтото есть в ноде прям?

zuko3d: нет, потому что мап - это разброс по памяти, теряется локальность кэша

Default avatar.png gtj: ммм

Default avatar.png gtj: тоесть получается если идет разговор о графах то это по умолчанию если это не твоя личная инициатива а например производство какоето то обязательно прям адженси лист,

Default avatar.png gtj: тоесть я хочу понять какой из них дефолтный понятно что исполнение выбрать свое можно

zuko3d: если граф большой, то да

Default avatar.png gtj: ммм

Default avatar.png gtj: окей ну допустим

Default avatar.png gtj: тогда получается слои в виде тоже списков или это дерево? деревом же можно состояния подбирать

Default avatar.png gtj: следующее состояние из текущего

Default avatar.png gtj: предыдущее состояние

zuko3d: о каких слоях речь?

Default avatar.png gtj: пока сам не понял но тут вот проветривался от этого дикого изучения и подумал о слоях потом врубил первую попавшуюся лекцию и мысля прям совпала

Default avatar.png gtj: смотри

Default avatar.png gtj: граф это состояние

Default avatar.png gtj: сейчас оно 1

Default avatar.png gtj: когда произойдет ход или 1 итерация поиска состояние изменится

Default avatar.png gtj: но

Default avatar.png gtj: так как мы знаем его текущее состояние мы можем знать следующее

Default avatar.png gtj: а слои

Default avatar.png gtj: ну грубо говоря я представлял себе массив деревьев

Default avatar.png gtj: тоесть как пирог

Default avatar.png gtj: можно типо тягать какие надо пути из нужных слоев как кластеры или как копирка

Default avatar.png gtj: на 1 слое 1 путь

Default avatar.png gtj: на следущем слое другой путь

Default avatar.png gtj: 2 копирки например

zuko3d: чёт странная концепция, никогда такую не использовал

Default avatar.png gtj: ага

Default avatar.png gtj: щас покажу

Default avatar.png gtj: https://imgur.com/a/r2JdPaa

Default avatar.png gtj: ну и получается каждый слой относительно головы

Default avatar.png gtj: какбудто голов много но на каждом слое после опр действий разные пути идут на соотвествующий слой

Default avatar.png gtj: тоесть

Default avatar.png gtj: у нас например граф в нем 3 пути

Default avatar.png gtj: изначально это 1 слой

Default avatar.png gtj: как только мы видим любое изменение линейности следующая новая линейсность пока не конец искомый уходит на следующий слой

Default avatar.png gtj: тоесть после такой операции получится массив деревьев где из головы будет только 1 путь

Default avatar.png gtj: p[1]=............finish p[n]=............finish

zuko3d: уф, ну хранение деревьев - это немного иная история, нежели графов в целом. деревья обычно не бывают на миллионы вершин

zuko3d: но я так и не понял, зачем тебе нужны "слои"

Default avatar.png gtj: хз в леции вот тоже о слоях человек затер)

Default avatar.png gtj: я книгу потерял про алгоритмы)

Default avatar.png gtj: при обходе бфс

Default avatar.png gtj: ис старта в финишь, он визитирует и выводит все точки посещаемые по мере поступления и посещения тоесть выводит очередью ответ путей

Default avatar.png gtj: и человек предлагает подход слоев

Default avatar.png gtj: мб это массив я пока не вкурил

zuko3d: брррр.... ты вообще какую задачу пытаешься решить?

Default avatar.png gtj: делаю кирка и попутно разбираюсь с основами)

zuko3d: что за кирк?

Default avatar.png gtj: the labirynth

Default avatar.png gtj: щас глянем что седжвик рекомендует нашел таки наконецто)

Uljahn: gtj: зацени https://www.codingame.com/playgrounds/38626/optimizing-breadth-first-search

Default avatar.png gtj: я уже просек что у бфс много ног в том числе и икс рэй и прочее

Default avatar.png gtj: у седжвика к слову 1000 страниц и тут тема как раз про графы есть

Default avatar.png gtj: в бст часть уходит ног

Default avatar.png gtj: тоесть идем не по точкам графа центровым а определяем границы

Default avatar.png gtj: наоборот

Default avatar.png gtj: наконецто я на эту книгу созрел)

Default avatar.png gtj: 6 глав про графы чую я ушел) щас гляну чо ты скинул и пойду курить)

Uljahn: я скинул, чем кодеры здесь занимаются на контестах и в мультиплеерах

Default avatar.png gtj: стой

Default avatar.png gtj: ну он сегенерировал 1000 кодом лабиринт

Default avatar.png gtj: хм

Default avatar.png gtj: а

Default avatar.png gtj: ну он нарисовал хорошо вот он структуру ноды написал хорошо бы было если бы он по естному вывел бы сдесь еще не только лабиринт а приложил его! получившуюся структуру данных

Default avatar.png gtj: в виде графвиза

Default avatar.png gtj: там очень обманчивая структура может быть

Default avatar.png gtj: по итогу

Default avatar.png gtj: у меня показывает только дфс в том дереве(

Default avatar.png gtj: ну все вот седжвика надо читать

Default avatar.png gtj: у него тут все в тему

Default avatar.png gtj: а так круто

Default avatar.png gtj: вот чо хочу по итогу

Default avatar.png gtj: bsp

Default avatar.png gtj: https://www.youtube.com/watch?v=e0W65ScZmQw

Default avatar.png gtj: https://youtu.be/vYgIKn7iDH8

Default avatar.png gtj: https://www.youtube.com/watch?v=dxVKqigyfmQ

SouJll: Кто знает, почему во вкладке Home не отображается дерево прогресса?