1. C# / Говнокод #20267

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Оффтоп
    
    Пишу либу для гуя в консоли. Столкнулся с проблемой медленного вывода в консоль на линуксе.
    На винде есть няшный WriteConsoleOutput, который может вывести буфер разом на консоль, в линупсе ничего подобного не нашел.
    Если использовать Console.WriteLine или libc-шный puts, все лагает неимоверно
    
    Есть идеи?

    Запостил: cykablyad, 24 Июня 2016

    Комментарии (168) RSS

    • PS на винде WriteConsoleOutput хуярит вывод вместе с атрибутами, а на пинусе приходится вставлять CSI
      Ответить
    • >гуя в консоли
      Нахуя? Давай тогда ещё консоль в гуях напишем.
      Ответить
    • ncurses
      Ответить
      • +1. Там тоже двойная буферизация же есть, ничего не моргает.
        Ответить
        • >двойная буферизация
          >консоль
          Што?
          Ответить
          • Копит символы в своём буфере, а потом пачкой быстро высирает в stdout, когда позовёшь refresh().
            Ответить
            • А от рефреша экран типает типа?
              Ответить
              • Типает это как? Нихуя не понял...

                Ну короче при такой схеме просто намного меньше говноэскейпов отправляется в терминал.
                Ответить
                • Типает это как графика без двойной буферизации. Никогда не писал игори на пасцале? :)
                  Ответить
              • З.Ы. Ну и думать меньше надо - ты можешь при каждом нажатии стрелки вниз обе панельки той же mc тупо заливать синим, потом обводить рамочкой, потом заполнять списком файлов, подсвечивать одну строчку под курсором и т.п.

                А после refresh'а в терминал отправится только две строчки: откуда курсор ушёл и куда он пришёл.

                Как-то так.

                Без буфера это будет либо моргать (если всё-всё-всё на несколько слоёв каждый раз заливать в терминал) либо превратится в адовую боль в жопе (если пытаться рисовать только обновлённые куски).
                Ответить
                • А, и ещё - с буфером ты работаешь более-менее нормальными функциями. А генерацию говноэскейпов curses полностью берёт на себя.
                  Ответить
                • >Без буфера это будет либо моргать
                  А в нортоне тоже делали двойную буферизацию? Или это очередные прыщепроблемы?
                  Ответить
                  • Не знаю, как в Нортон Коммандере, но в софте, основанном на Turbo Vision, например, вывод сразу в видеопамять (в досовской версии), т. е. в обход API операционной системы.

                    Как это решали в версии под Винду, не знаю, надо исходники ФАРа или клонов ДОС Навигатора смотреть.
                    Ответить
                    • Нортон и под виндой работает замечательно.
                      Ответить
                      • Через VDM, если есть. А пользователи 64-битной Винды соснули с проглотом. У них есть возможность пользоваться только медленным эмулятором.
                        Ответить
                    • Начиная с Win2k есть WriteConsoleOutput, который хуячит в консоль буфер целиком, что позволяет на изи делать джвойную буферизацию
                      Можно даже указать координаты вывода и высоту/ширину
                      А вот как справлялись до Win2k, понятия не имею. Особенно если учесть что в винду эскейпы не завезли
                      Ответить
                      • >>. Особенно если учесть что в винду эскейпы не завезли
                        win9x -- ansi.sys (command.com)
                        в гугл
                        Ответить
                        • ansi.sys для досовских программ. А как в винконсоли?
                          Ответить
                          • в 9x не было никакой "винкосносли"
                            был только comamnd.com 16ти битный

                            небось и ConsoleAPI NTвого не было
                            Ответить
                            • Винконсоли не было в Windows 3.x, а в 95/98/Me была. Это на ГК уже обсуждали.
                              Ответить
                              • и как она там запускалась?

                                я помню только 16ти битный command.com
                                Ответить
                                • Нормально всё запускалось. Под Виндой досовские прерывания латались VXD-драйверами, которые на некоторые функции устанавливали ловушки, переадресовывающие на WinAPI. Если из command.com запустить экзешник с заголовком NE или PE (хоть консольный, хоть гуёвый), то его запуск перехватывает Windows. Для пользователя запуск выглядел так же, как из под NT-шного cmd.exe. Был даже start.exe, который открывал новое окно или новую консоль.

                                  Я в каком-то ГК кидал экзешник из Windows 95 (ftp.exe или типа того) с PE-заголовком, в котором указана Subsystem: Text, а в секции импорта консольные функции.

                                  P.S. Вот этот файл:
                                  http://rgho.st/72WGFbLqF
                                  Ответить
                                  • а из subsystem:Text все отправлялось куда? не в command.com?

                                    conhostа же не было
                                    Ответить
                                    • Через какую прослойку было реализовано, не знаю. Надо дизассемблировать библиотеки.

                                      Но некоторые файлы от Windows NT работали (в Windows 95/98/Me не поддерживались многие функции с суффиксом W, поэтому работало не всё). По крайней мере, неюникодный FAR в Windows 95 работал нормально.

                                      Да, conhost'а не было, но кто-то открывал консоли.
                                      Ответить
                    • >>в видеопамять (в досовской версии), т. е. в обход API операционной системы.
                      ))было бы смешно работать через DOSовое прерывание

                      тогда TV программы даже на 486 тормозили
                      Ответить
      • Гуглил, но так ничего дельного и не нашел. Ладно, пойду гуглить дальше
        Ответить
        • что там гуглить? берешь ncurses, выводишь на экран все что надо, там даже окошки есть, в конце кадра делаешь refresh. Ничего не моргает.
          Ответить
          • окошки нахуй не упали, у меня свои есть
            не могу найти нормальные маны по нему
            Ответить
            • ну на википедии ссылки. Даже на русском есть - http://alexber220.narod.ru/ncurses/
              Ответить
              • narod.ru

                axaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxaxax axa
                Ответить
              • Бля, ну как можно постить код без подсветки синтаксиса?
                Ответить
          • ncurses вместо того, чтобы выводить псевдографику, выводит хуету
            а перепиливать половину кода для того, чтобы заставить это работать с ncurses, мне лень

            попробовал fputc. быстро пиздец. собственно рисуется тоже пиздец, хуй пойми что.

            P.S. нет, наебал, все еще нихуя не быстро
            Ответить
            • ты видимо не умеешь читать маны, или программировать не умеешь.

              Курсес именно для того и сделано, чтобы удобно выводить псевдографику. Ты небось налажал с локалью и у тебя потому нихуяч не работает
              Ответить
            • > ncurses вместо того, чтобы выводить псевдографику, выводит хуету

              Его надо уметь готовить. Копать тут:
              http://invisible-island.net/ncurses/man/curs_terminfo.3x.html
              http://invisible-island.net/ncurses/man/curs_initscr.3x.html
              http://invisible-island.net/ncurses/man/captoinfo.1m.html
              Ответить
    • > c#
      > линукс
      Ответить
      • В чем проблема?
        Ответить
        • выше уже спрашивали

          нагуя?
          Ответить
          • 1. афтырь больше ничего не знает
            2. сравнительно простое портирование существующей программы
            3. свидетель секты мигеля
            Ответить
            • 1. хуй там плавал
              2. да
              3. мигель пидор
              Ответить
            • Что-то мне намекает, что тормоза там совсем не в терминале...
              Ответить
          • Нахуя сшарп на линуксе или нахуя гуй в консоли?
            Ответить
            • нагуя хуй в консоли
              Ответить
              • > хуй в консоли
                _____________##_##_____________
                ____________######____________
                ___________#######____________
                __________########____________
                _________#########____________
                __________#######______________
                ___________#####________________
                ___________#####________________
                ___________#####________________
                ___________#####________________
                ___________#####________________
                __#####___#####____#####_____
                _#######__#####__########___
                #########_#####_#########__
                #########################_
                #########################_
                _#######################___
                ___#########_____#######_____
                ____#######________#####______
                ______####_______________________
                Ответить
              • наконсоль хуй в гуе
                Ответить
            • нахуя гуй в линуксовой консоли
              Ответить
              • как будто нет консольных линуксовых тулз с гуем (консольным)
                Ответить
                • Навскидку вспоминаются только mc, top'ы, minicom, aptitude да iptraf.

                  З.Ы. А, rtorrent ещё.
                  Ответить
                  • Ещё всякие редакторы и конфигуратор линуксового ядра...
                    Ответить
                    • Вот ещё список:
                      http://tdkare.ru/sysadmin/index.php/Консольный_Linux

                      P.S. Похоже, надо искать среди программ, использующих ncurses:
                      https://ru.wikipedia.org/wiki/Ncurses
                      Ответить
                  • less/vi is sort of gui.
                    Ответить
                • Консольный гуй называется туём (TUI — text user interface).
                  Ответить
                  • tui же не гуй, а интерфейс в общем, cli к нему тоже относится
                    так что это немного не то
                    Ответить
                    • TUI это то что ты делаешь.

                      CLI это шеллы и подобное.

                      GUI это тоже самое что и TUI, то только в графике и с картинками.
                      Ответить
              • Ну как же, нортон. На винде уже забыли, а на прыщах куча программ это говно еще юзает.
                Ответить
                • Говно на прыщах не юзают. На прыщах юзают мазь против прыщей, которые появляются, если вовремя говно не убирать.
                  Ответить
                  • с гуя?
                    Ответить
                  • >Говно на прыщах не юзают.
                    Прыщи из него и ссостоят, из этого прыщеговна.
                    Ответить
                    • Пока прыщавые гимназисты спорят с виндохолопами, CHayT взирает на них с сертифицированного юникса, где собрано лучшее из двух миров.
                      Ответить
                    • Прыщи состоят из гноя, а что такое прыщеговно, я не знаю.
                      Ответить
                • на финде фар у каждого второго компьютерщика

                  у тебя просто компьютерщиков знакомых нет, и сам ты user, потому и не знаешь
                  Ответить
                  • Может быть, сто́ит сделать замечание, что Миднайт Коммандер и ФАР — это не Нортон? Мы же Ворд не называем Блокнотом.
                    Ответить
                    • точнее говоря так: мы же виндуос NT не называем VMS?
                      Ответить
    • Где здесь C#?
      Ответить
      • Ты неправильно это делаешь
        Смотри как надо

        Где здесь C++, guest?!
        Ответить
    • echo ***
      Ответить
    • можно выводить не через stdoutt, а прямо в терминал (ключевые слова terinfo, ncurses)
      Ответить
    • > гуя в консоли. Столкнулся с проблемой медленного вывода
      Твоей программе лучше пойти напитон
      Ответить
    • Человек задал конкретный вопрос, а его обосрали с ног до головы:
      хуй в гуе
      гуй в хуе
      гуй в консоли
      консоль в гуе
      ... ну короче все кобенации
      Ответить
      • Специфика русскоязычных интернетов, хуле. Ну и во втором, кажись, комменте присоветовали ncurses, а уж потом начале ворецировать и кобенировать.
        Ответить
      • винда в говне...
        Ответить
    • показать все, что скрытоПрыщебляди соснули.
      Ответить
    • А на каком языке пишешь? Для Го есть termbox. Мы с его помощью почти все наши утилиты запилили. Всякие таблички рисовать относительно удобно.
      Ответить
      • сишарп
        для него такого не завезли, если не считать mono-curses (говно) и CursesSharp (не менее говно)
        К тому же обе не работают в винде нормально, если вообще работают. mono-curses не пробовал, CursesSharp не завелось
        Ответить
    • Спасибо всем, кто пнул в нужном направлении. Запилил, все работает, охуенно
      Ответить
      • в чем грабли были?

        раньше типично где-то кто-то что-то перемудрил с чарсетами и энкодингами в консоли. но нынче в линухе это не проблема потому что все utf-8.
        Ответить
        • 1. в линуксах ncurses лежит хуй знает где и хуй знает с каким именем (libncursesw.so.5.9), а поэтому нельзя просто сделать [DllImport("ncurses")] - либу не найдет (в отличие от libc, которую подхватывает на изи)
          2. addch не работает с юникодом, а add_wch имеет крайне ебанутую структуру символа, которую еще хуй где найдешь правильную (с этим проебался больше всего)
          3. printw внутри имеет какой-то буфер, который не особо-то большой по размеру. В результате длинные строки он не выводит полностью
          4. в линуксах консольные цвета трехбитные, а в винде - четырехбитные (обходится, но с еблей)
          к тому же в линуксах порядок BGR, а в винде RGB, и чтобы цвета таки были одинаковые, надо биты переставлять
          Ответить
          • Ты хотел написать программу для Линукса на языке на котором для линукса не пишут.
            В твоей программе ты хотел прилинковать библиотеку которую назвали и положили в то место, где линкер будет ее искать, но твои инструменты разработки не умеют с линкером работать.
            А потом взялся судить о консоли в Линуксе по одной утилите которая с этой консолью работает?
            Ответить
            • Аналогично прыщебляди по опыту с питоном визжат, что винда - говно. Она просто не такая как прыщи.
              Ответить
              • Поддержка Виндовса интересует только игроделов и всяких гуй-мастеров. И то, возможно, игроделов переманят всякие андоиды и ифуны.
                Хорошo Питон поддерживает что-то там в Виндовсе или нет - по большому счету никого не интересует: ничего серьезного или интересного для Виндовса все равно не разрабатывается не изза ТТХ а изза коммерческий непригодности.
                Ответить
                • На питоне не разрабатывается, это очевидно. А так под виндой очень много энтерпрайза. Есть целые слоупочные фирмы, которые на всем MS энтерпрайзе сидят (share point, windows search, reporting server, dynamics, вот это всё). Там огромные бабки крутятся. А еще там есть 1С)
                  Ответить
                  • То что есть, я не спорю. Вот, например, два самых больших в мире онлайн казино и т.п. шваль - 888 и Плейтек, обе израильские конторы, обе разрабатывают только МС инструментами. Денег там много, бесспорно. Но интересными эти "разработки" тяжело назвать.
                    О, еще есть, например, КулВижн, тоже израильская контора. Не знаю как сейчас, одно время была одним из самых больших поставщиков "взрослых видеочатов". Тоже 100% МС продукты.
                    Как правило МС продукты идут рука об руку с каким-то наебаловом, тупостью и уходом от налогов. По крайней мере из того, с чем я сталкивался.
                    Ответить
                    • >>По крайней мере из того, с чем я сталкивался.
                      ну да, с этого и надо было начинать)
                      Ответить
                • Бля, у меня монитор жыром запотел.
                  >ничего серьезного или интересного для Виндовса все равно не разрабатывается не изза ТТХ а изза коммерческий непригодности.
                  >90 десктопа - винда.
                  Ответить
                  • Бля, хуйня у меня монитор cтекломойным жыром запотел.
                    >ничего серьезного русня или интересного для Виндовса все равно не на бутылку разрабатывается не изза ТТХ а изза cтекломойный ко-ко-ко коммерческий непригодности.

                    >90 десктопа - винда, пидорахен у тебя же прыщи днище"
                    Ответить
              • Винда говно для __некоторых__ задач, но совершенно не по причине питона:)

                Некоторые вещи в винде сделаны очень круто, некоторые -- отстойно
                Ответить
            • > В твоей программе ты хотел прилинковать библиотеку которую назвали и положили в то место, где линкер будет ее искать, но твои инструменты разработки не умеют с линкером работать.

              Внимание, вопрос
              Почему libc линкуется нормально, а libncurses - нет?
              Ответить
              • > Почему libc линкуется нормально, а libncurses - нет?

                >> libncursesw.so.5.9
                >> [DllImport("ncurses")]

                http://www.mono-project.com/docs/advanced/pinvoke/#linux-shared-library-search-path

                Ну судя по доке, надо писать что-то вроде [DllImport("libncursesw.so.5")]

                Возможно, [DllImport("libc.so")] работает только потому, что стоит дев-версия соответствующего пакета. Вообще говоря, в линупсах не принято на прод-машины ставить неверсионированные версии либ.
                Ответить
                • >>> libncursesw.so.5.9
                  Ну все пришло именно к этому

                  >>> [DllImport("ncurses")]
                  Я разные кобенации пробовал

                  > [DllImport("libc.so")]
                  Работает и без .so

                  > работает только потому, что стоит дев-версия соответствующего пакета
                  Интересная тема
                  Ответить
                  • > libncursesw.so.5.9
                    Емнип, надо всё-таки libncursesw.so.5, чтобы на следующем обратно-совместимом апдейте curses'ов твоя прога не поломалась.
                    Ответить
          • > хуй знает с каким именем
            Ну можно подумать, что в виндовом SxS имена не "хуй знает какие" (там, емнип, вообще гуиды). А цель одна - side by side существование нескольких версий либы. Ну и проведение грани между совместимыми и несовместимыми версиями.

            З.Ы. libc, кстати, тоже libc.so.6 если чо.
            Ответить
            • Не надо с WinSxS сравнивать
              Хуйню, которая в нем лежит, разруливает только винда, но никак не линкер
              А всякие системные dll так вообще в System32 валяются
              Ответить
              • >>А всякие системные dll так вообще в System32 валяются
                который разный для 32 и 64 бит, гыгыгы
                Ответить
                • Предлагаешь все в одну папку хуярить?
                  Ответить
                  • ну луучше бы там тоже было side by side

                    тут уже смеялись на говнокоде что у мелкософт 64хбитные либы лежат в system32, а 32хбитные в wow64
                    Ответить
            • Там не гуиды, а имена компонентов:)

              Вообще CBS (а Side-by-side это часть CBS) это очень большая и сложная хрень, и плохо документированная.
              Ответить
        • После всей этой хуеты официально заявляю
          Консоль в винде - заебись, а линуксоиды, кукарекающие о хуевой консоли в винде - пидоры и идут напитон
          Ответить
          • TUI на линухах не распространено. либо CLI, либо GUI. гуи (X и предшественики оного) на *нихах старше чем винды.

            грабли с ncurses что ты понаступал это мелочи по сравнению с траханием в прошлом с terminfo vs termcap, vs кривые установки в этих самых terminfo/termcap, vs кривые терминалы. (и если понадобится на Solaris / HP-UX портировать - то еще потрахаешься.) вот именно из-за этого TUI на *нихах и не поднялись. (пока сидишь только на линухе - можешь расслабится.)
            Ответить
            • Надо сделать еще одну ОС с нормальной консолью
              Ответить
            • Да че Ñ‚Ñ‹ пиздишь то? Ты мц никогда не видел? Нкурсес алсо цветут и пахнут. Питух тупорылый сукаблядь не осилил просто ман почитать, потому что ангийского не знает, а Ñ‚Ñ‹ е у подпездываешь😣
              Ответить
              • и что кроме mc ты можешь назвать? ать два и обчёлся.
                Ответить
                • make menuconfig
                  Устаноыщики многих дистрибов
                  Много че
                  Ответить
                  • другими словами "dialog". ок - еще "htop". еще что-то?
                    Ответить
                    • irssi, networkmanager-tui, ncmpcpp, пачка редакторов, powertop, рогалики всякие
                      Ответить
                • http://govnokod.ru/20267#comment336355
                  Ответить
                • Emacs. С учётом количества лиспоговна, написанного для емакса, его можно посчитать не за одну программу, а за 100500 программ.
                  Ответить
                  • Но он же не только текстовый...
                    Ответить
                    • > не только текстовый

                      Вообще говоря, "ГУЙ" режим тоже текстовый чуть менее чем целиком.
                      Можно сказать, что emacs — это framework для написания текстовых приложений.
                      Ответить
                      • А разве там картинки нельзя выводить в гуёвом режиме?
                        Ответить
                        • Хм, действительно, можно картинки и даже PDF-ки, довольно удобно, но только в графическом режиме.

                          Например, мега-удобно редактировать graphviz-файлы: сохраняешь в одном окне, запускаешь M-x recompile, и в соседнем окне рефрешится картинка.
                          Вот этот плагин тоже доставляет
                          https://github.com/politza/pdf-tools

                          Но в основном, конечно, все стараются сделать текстовый интерфейс.
                          Ответить
                • Аська под прыщи.
                  Ответить
                  • Сходи уже в аптеку, купи салицилово-цинковую пасту что ли.
                    Ответить
                    • Прыщесобака, вот зачем ты придуриваешься, прыщесобака?
                      Ответить
          • винда сама по себе заебись, а линукс говно (как и линуксоиды)
            Ответить
          • > Консоль в винде - заебись
            Виндовую консоль уже можно полноценно юзать с другой машины (чтобы WriteConsoleOutputW транслировались, а не только stdout/stderr/stdin)? Или только RDP, только хардкор?
            Ответить
            • У меня сложилось впечатление, что Винду разрабатывали для того, чтобы юзать на локальной машине, а Линукс разрабатывали для того, чтобы юзать удалённо.

              Именно в этих ролях получается хорошо, а наоборот получается не очень.
              Ответить
              • Немного оффтопика - а чего винда делает со звуком во время переключения пользователя?

                К примеру, если я плейер включил и заблокировал машину. А другой юзер хочет поработать под своей учёткой.
                Ответить
                • Если память не изменяет, звук у другого пользователя будет слышен.
                  На экране блокировки точно слышен
                  Ответить
                  • Ну что и требовалось доказать, однопользовательская система :3
                    Ответить
                    • Нет, вру, не слышен
                      Создал сейчас акк и проверил
                      Слышен только на экране блокировки и до переключения на другого пользователя

                      Но покуда это винда, это 100% где-то настраивается в групповых политиках
                      Ответить
                      • > в групповых политиках

                        политота не нужна
                        Ответить
                      • >>политиках
                        все политики это просто красивые .adm файлы к реестру.
                        Ответить
                        • все конфигураторы это просто красивые обертки к конфигам.
                          Ответить
              • Да что ты говоришь? Винда (NT) разрабатывалась для корпоративных пользователей, отсюда неотключаемое RPC, которое дома нахуй не всралось.
                Ответить
                • Ты хочешь сказать, что ΝΤ и дома не нужна?
                  Ответить
                  • а линух разрабатывали для ххх, отсюда неотключаемое yyy, которое дома нахуй не всралось. => ххх и дома не нужна
                    Ответить
                  • Нет, я хочу сказать, что Netbios RPC и прочая карпаратывная хрень дома не нужна.
                    Ответить
                    • А если дома 2 компа, чем папки расшаривать?
                      Ответить
                      • RPC не нужен для этого, хватит SMB;) Видимо это пидар и хотел сказать.

                        Забавно что сраный нетворк браузинг и неймрезолвинг из нетбиоса уже тоже заменили на WSD (это SOAP бродкастовый) и вообще workgoups поменяли на "HomeGroup" в семерке.
                        Ответить
                      • Я ебу, пытался как-то папку расшарить, так оно полезло рекурсивно права менять. Час бы меняло.

                        Объективно - единственный плюс SMB в том что искаропки в винде есть как клиент так и сервер. Домашнему пользователю нахер не нужна привязка локальных учеток и тех с которыми по сети заходят.
                        Ответить
                    • пиздец, какой же ты неграмотный
                      RPC уже тыщу лет работает через 445 порт: это прямой SMB и RPC, никаких нетбиосов там со времен Win2K уже нету
                      Ответить
                      • Да мне похуй через что он работает, важно что 1) он там есть 2) дома он не нужен, а скорее вреден.
                        Ответить
              • Чтоб юзать на локальной машине, для этого уже есть TempleOS. Даже сеть не поддерживает.
                Ответить
                • Сеть не нужна. От нее пропаганда суицида, гомосятины, и вконтакте. Как то жили предки наши без сети, и были здоровее и чище
                  Ответить
                • Автор TempleOS опоздал. Операционки без поддержки сети были и до него.
                  Ответить
                  • Он сделал 64-битную, с поддержкой over4Gb питушни.
                    Ответить
                    • Только вот зачем... Никто кроме браузеров столько памяти и не тратит.
                      Ответить
            • Можно написать сервер, который будет патчить conhost, забирать оттуда консольный буфер и отдавать его клиенту
              Ответить
            • >RDP
              >хардкор?
              /0?
              Ответить
              • Да, RDP -- это скорее пиздец, а не хардкор.
                Ответить
                • Почему так больно?
                  Ответить
                • нормальный RDP. В тыщу раз лучше чем VNC, например.

                  Правда, глубоко интегрирован в OS (там своя WinSta0, своя Session итд)
                  Ответить
            • Из другово процессе можно. См AttachConsope
              Ответить
            • telnet можно)
              Ответить
          • Не напитон, а нахуй. Юникод в консоль под виндой питон тоже выводить не умеет.
            Ответить
      • Риально портанул вендосрань на прыщеговно?
        Ответить
    • На линуксе можно писать на C#?
      Ахуеть, ну давайте еще писать на BASH из под виндоуса
      Ответить

    Добавить комментарий