1. Куча / Говнокод #26032

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    1419 guest
    234 j123123
    222 LispGovno
    202 wvxvw
    188 Говногость
    161 gost
    160 Lure Of Chaos
    158 Stertor
    155 bormand
    128 kyzi007
    123 pedarok
    120 qbasic
    116 Elvenfighter
    115 someone
    113 3.14159265
    102 dm_fomenok
    101 roman-kashitsyn
    100 eldachello
    94 Dummy00001
    93 TarasB
    88 Vasiliy
    86 cmepmop
    85 Dr_Stertor
    84 syoma
    73 7ion
    72 laMer007
    69 d_fomenok
    61 хуита
    60 Мартин
    60 BEPETEHO
    60 3_14dar
    58 AliceGoth
    58 CHayT
    56 Fai
    56 kegdan
    55 uiopqwertyasd
    55 munin
    54 HaskellGovno
    51 bugmenot
    51 Abbath
    51 vistefan
    50 nethak
    49 makc3d
    49 Fike
    48 inkanus-gray
    47 telnet
    47 Govnocoder#0xFF
    47 3_dar
    44 codemonkey
    44 OlegUP
    43 RaZeR
    42 Sulik78
    41 CPPGovno
    41 alexoy
    41 DrFreez
    41 varg242
    40 danilissimus
    39 taburetka
    39 KitKat
    38 dwinner
    38 absolut
    38 striker
    37 raorn
    37 jQuery
    37 inho
    35 psina-from-ua
    35 rat4
    35 1kasper
    35 brainstorm
    35 Stallman
    34 ursus
    34 KirAmp
    33 evg_ever
    33 invision70
    33 Lokich
    33 Xom94ok
    32 1_and_0
    32 istem
    32 volter9

    Запостил: OCETuHCKuu_nemyx, 17 Ноября 2019

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

    • Что это за рейтинг? И кто все эти хурозвозлар?
      Ответить
      • Это видимо то, у кого сколько говнокодов. Только вот у меня их уже 235.
        Ответить
        • Странно. Проебалось где-то.
          Ответить
          • А что там может проебаться? Тупо запускаешь цикл https://govnokod.ru/user/1 .. сколькотамвсегопользователей и вытаскиваешь цифру из <a href="https://govnokod.ru/user/1/codes">Его говнокоды (1419)</a>
            Ответить
          • Или у тебя другая методика?
            Ответить
    • хорошо что я не топ говнарей
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • 1024-- вроде в луа не шарил.
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • показать все, что скрытоvanished
            Ответить
            • А хули там шарить то? Язык учится за 15 минут.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • learnxinyminutes.com/docs/ru-ru/lua-ru/

                  Основное дерьмо учится за 15 минут. Главное осознать метатаблицы.
                  Ответить
                  • И то что именованные и нумерованные массивы таблицы лучше не смешивать.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Да там просто с длиной какая-то хуйня начинается. Поэтому, имхо, лучше считать что есть отдельные массивы и хешмапы. И никогда их не смешивать между собой.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Массив и ассоциативный массив можно смешивать в «PHP». Более того, $massiv[5] и $massiv['5'] будут ссылаться на один и тот же элемент.

                            А в жопоскрипте можно смешивать ассоциативный массив и поля объекта. Более того, obj.coq и obj['coq'] ссылаются на один и тот же элемент.

                            Главное не перепутать, где что с чем перемешано.
                            Ответить
                        • Да. До разрыва будет считаться длина. Соответственно ipairs будет некорректно работать. По этому я за pairs.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Ну так правильно, считается с tonumber(1) индекса до разрыва. Сtроковые и другие индексы никогда не будут считатся #. По этому я за pairs.
                              Ответить
                            • И я помню что мне однажды нужно было постоянно считать подобные таблы. По этому я перегружал # __len
                              Помнитя в 5.1 нельзя перегрузить len по этому я там извращался - добавлял новый элемент n в каждую новую таблицу и при добавлении туда любой хуйни - вызывал я метода который n=n+1 просто.
                              Ответить
                              • 5.1 хотя я не помню что я творил когда table.remove делал. Или table.gnu = nil.
                                Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
          • Я читал мануал по Lua, какую-то тестовую питушню делал. Может, на ГК пару кусков кода оставил когда-то давно, когда Сёма ещё считал себя русским.
            Потом я увидел Ваше "давненько я не брал в руки шашек" и код с sequence и какой-то монадической питушнёй, решил посмотреть в сторону хаскеля. После заражения функциональной питушанкой оказалось, что нормальную программу нельзя написать без map и forEach, а в Lua их вроде бы нет, и вообще какая-то процедурных сишных питухов с жсовскими слабодинамическими ворециями. Lua стал забываться. Теперь я помню только, что там есть таблицы {}, интересная находка в виде разницы между точкой и двоеточием, а также разделение данных и метаданных у таблиц, что позволяет без специальных знаний тонкостей языка создать хороший ассоциативный массив, которому, в отличие от жс, ничего не угрожает.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Я сегодня после долгого перерыва покодил на "JavaScript". Так непривычно с этими "=>" и "forEach".
                Ответить
                • "=>" не нужен. Он не работает в IE7 на Windows XP.
                  Ответить
                • показать все, что скрытоvanished
                  Ответить
                • А есщо налаживал связку nginx + gunicorn + flask + python + mysql + phpmyadmin + ещё куча хуеты. Весь день потратил на прыщепердолинг с питонячими модулями.
                  Именно, блять, поэтому я за "PHP".
                  Ответить
                  • Кстати, кто говорил, что в "MySQL" нет транзакций? Всё там есть.
                    Ответить
                  • > python
                    > phpmyadmin
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Это же запуск скрипта на каждый запрос, как в "PHP"? Поэтому я и взял гуникорн.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Кстати, в «PHP» при запуске через FastCGI происходят забавные вещи:

                          1. Поскольку сам процесс «PHP» висит в памяти, контекст расширений не очищается. Именно поэтому работает расширение «memcache».

                          2. Из-за архитектуры самого интерпретатора «PHP» его контекст всё равно очищается после каждого запроса (это каждый петух знает).
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • При запуске через mod_php точно такое же поведение, как через FastCGI. Я проверял.
                              Ответить
                            • Вообще можно через сосноль запустить отдельный процесс «PHP», дать ему бесконечный лимит времени на выполнение, а из него открыть сокет:
                              https://www.php.net/manual/ru/function.socket-accept.php

                              Но так почему-то не делают.
                              Ответить
                        • Да? А я видел использование uwsgi именно как в "PHP". На каждый запрос вызывается твой скрипт. То есть http://site.com/index.py вызовет скрипт index.py, и в переменных окружения у тебя будут данные о запросе.
                          Ответить
                          • Там хитрая хуйня. Она в любом режиме работы одинаково выглядит, как ты описал. Даже если мультитред, то эти глобальные переменные эмулируются через тредлокалы. Но скрипт при этом может невозбранно болтаться в памяти, в отличие от пхп.
                            Ответить
                            • Так я не понял, когда я работаю через flask, я могу сохранять глобальные пельменные, и на следующем запросе их использовать. Так? Смогу ли я так с uwsgi?
                              Ответить
                              • В общем случае не можешь, разве что какие-то лёгкие кеши.

                                Т.к. следующий запрос может уйти в соседний процесс uwsgi. Или текущий процесс uwsgi ребутнётся для профилактики.

                                В общем, это больше для разогрева кода чем для хранения данных.
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • Пиздец, ты как-то сложно объясняешь. Я вижу 2 способа работы.
                              Начнём с того, что мне похуй по какому протоколу общается nginx с кем-либо. И мне похуй на каком языке писать.
                              1) Я могу написать программу, которая 1 раз запускается, слушает сокет (в нашем случае от nginx), и отвечает на запросы. Может делать это в несколько потоков, и сохранять данные в глобальные массивы (в случае C++, например). Если программа крешнется, то её кто-то должен перезапустить.
                              2) Я могу написать программу, которая запускается на каждый запрос, в которую по stdin или как-то ещё получает дынные, и высирает ответ в stdout. У неё нет шансов сохранить стейт в памяти (то самое, что каждый петух знает). Это классическая схема для PHP.


                              И вы мне, блять, не можете ответить к чему относится gunicorn, и к чему uwsgi.

                              Или где я не прав?
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • > с той лишь разницей, что сохранить ты ничего не можешь

                                  Почему? Я могу запустить 1 поток, и он будет жить вечно, пока тачка не отключится.
                                  Ответить
                                • > но сам процесс интерпретатора никуда не денется из памяти

                                  Меня не должно это ебать. Это уже внутрення оптимизация. Для меня это выглядит так, что мой "index.php" или "index.py" кто-то запускает извне.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                  • > index.py кто-то запускает извне

                                    Не совсем так. Кто-то извне зовёт функцию в твоём index.py. При этом он может это сделать как на чистом инстансе твоего скрипта, так и на поюзанном. Или даже исполнить несколько запросов на одном инстансе скрипта параллельно, если включены треды.
                                    Ответить
                                    • Видимо есть разные способы. Я сталкивался с использованием как с пхп.

                                      Вспомнил. Плагин "cgi" называется.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • Единственный способ изъебнуться именно в «PHP» — это использовать расширение. Например, «memcache».

                                          Я тебя удивлю, но единственная функция «PHP» для «FastCGI» — это fastcgi_finish_request. Она отправляет страницу клиенту, рвёт с ним соединение, но продолжает выполнять скрипт. Дальше клиент может хоть закрыть вкладку, скрипт будет выполняться молча, не отправляя ничего клиенту.

                                          Гипотетически эта функция предназначена для выполнения тяжёлой задачи типа работы с базой данных. О результатах клиент может узнать, только сделав следующий запрос.
                                          Ответить
                                        • >> кроме появления взможрости делать http auth

                                          А для HTTP Auth, если не путаю, состояние хранится не в памяти, а в файликах в /tmp (надо проверить).

                                          Процессов может быть запущено несколько. Каким именно процессом будет обработан следующий запрос, зависит от фазы луны. Полагаться на то, что следующий запрос будет обработан тем же самым процессом, нельзя, поэтому память процесса для аутентификации мы использовать не можем. Для аутентификации нужно общее хранилище, которое шарится между всеми процессами.
                                          Ответить
                                        • > Возможно, ты использовал PHP как CGI, и у тебя сложилось превратное представление: якобы PHP может работать только как CGI.

                                          "Новый Говнокод" запускается не как CGI, а через свою еботню:
                                          https://github.com/wiistriker/govnokod.ru/issues/52
                                          Ответить
                                          • #!/usr/bin/env php
                                            <?php
                                            
                                            // if you don't want to setup permissions the proper way, just uncomment the following PHP line
                                            // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
                                            //umask(0000);
                                            
                                            set_time_limit(0);
                                            
                                            require_once __DIR__.'/bootstrap.php.cache';
                                            require_once __DIR__.'/AppKernel.php';
                                            
                                            use Symfony\Bundle\FrameworkBundle\Console\Application;
                                            use Symfony\Component\Console\Input\ArgvInput;
                                            
                                            $input = new ArgvInput();
                                            $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
                                            $debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';
                                            
                                            $kernel = new AppKernel($env, $debug);
                                            $application = new Application($kernel);
                                            $application->run($input);


                                            И как это всё работает? «Конардо» не поймёт такой код. В «AppKernel.php» тоже какая-то бесполезная херня вроде перечисления классов.
                                            Ответить
                                            • composer install:
                                              Loading composer repositories with package information
                                              Updating dependencies (including require-dev)
                                              
                                              Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 24 bytes) in phar...


                                              Полутора гигов компостеру не хватило, чтобы установить зависимости. Какой багор )))
                                              Ответить
                                              • Пиздец, дожили, блядь. Ёбанная эпоха победившей идеологии «Электрона».
                                                Ответить
                                                • Причём полтора гига — это лимит, который по дефолту устанавливает сам «Composer»:
                                                  https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors

                                                  Если стереть файл «composer.json» и ставить пакеты по одному командой «composer require», то всё работает.
                                                  Ответить
                                                  • Нет, всё не ставится. Чем больше пакетов уже́ установлено, тем больше системные требования. Похоже на алгоритм маляра Шлемиля.

                                                    В распакованном виде все пакеты, включая «Symfony», не наберут и сотню мегабайт. Для чего компостеру несколько гигов оперативки? Чтобы майнить биткоины?
                                                    Ответить
                                                • А там ведь по сути нужно сделать всего две операции:
                                                  1. Скачать пакеты.
                                                  2. Распаковать пакеты.

                                                  То же самое можно сделать с гораздо меньшими системными требованиями, запуская «wget» и «unzip» из sh-файла.
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • Причём все эти пакеты почему-то потребовались «Говнокоду» — по сути простенькому коллективному блогу с комментариями. Мне казалось, что это не rocket science.
                                                      Ответить
                                                      • В «NGK» нет никаких «пакетов». Именно поэтому я за «Борманда».
                                                        Ответить
                                                      • Рискну предположить, что он пытается построить граф зависимостей, и тот банально не влезает в память:)

                                                        Предел памяти установлен у самого интерпретатора, чтобы не вызвать подкачку из вторичной памяти (это медленно) либо же чтобы не вызвать OOMKiller в случае отсутствия подкачки.

                                                        Граф можно было бы обрабатывать по частям, реализовав нечто типа оверлеев, но странно делать это вручную при наличии виртуальной памяти.

                                                        С другой стороны, сам граф можно было бы разбить на несколько и тем самым понизить потребление памяти.

                                                        А в самом переиспользовании сторонних пакетов я не вижу ничего дурного.
                                                        Ответить
                                                        • Я ещё могу понять, почему долго думают менеджеры пакетов, у которых репозиторий глобальный (cpan, pip, gem, pear, opam, cabal) — там нужно дважды подумать перед установкой нового пакета, чтобы не сломать установленный софт.

                                                          Но «Composer» ставит пакеты локально, в чистую директорию. Требуемые версии указаны в файле «composer.json». Тут даже нечего ломать несовместимой версией.
                                                          Ответить
                                                          • Вы хотите сказать, что он не строит дерево зависимостей, а просто ставит пакеты по плоскому списку, как это делается в случае .lock файла?
                                                            Ответить
                                                            • Строит. Но именно «Composer» почему-то иногда обламывается, даже когда хочешь поставить один пакет в пустую директорию.

                                                              У других менеджеров пакетов на такую фигню не нарывался.
                                                              Ответить
                                                        • Кстати, выдержка из списка пакетов:
                                                          gedmon/doctrine-extensions
                                                          stof/doctrine-extensions-bundle
                                                          sonata-project/doctrine-orm-admin-bundle
                                                          liip/doctrine-cache-bundle

                                                          Это всё растёт, как снежный ком. Я это понимаю так: в ORM «Doctrine» обнаружился фатальный недостаток, поэтому необходимо подпереть его очередным костылём.
                                                          Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                              • Кстати, в этом коде кавычки одинарные, а не двойные. Значит, он уже́ оптимизирован.
                                                Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                              • Емнип, они оба реализуют WSGI API. Которое уже используется фласком, джангой и прочей хуйнёй для обработки запросов. Можешь и сам функцию написать без фреймворков.

                                Т.е. питоньему скрипту вообще насрать что там в качестве транспорта - http, fastcgi или какой-нибудь mod_python. Ему просто зовут функцию с нужными параметрами и окружением. А свежее это состояние скрипта или нет - зависит от реализации, настроек и погоды на луне.

                                guest, всё правильно?
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • И НЕ даёт гарантии, что ты запустишься в чистом окружении (которую таки даёт PHP)...
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • Я не на столько туп, и не завязывался, а планировать использовать как кеш. Я прекрасно понимаю, что если запустится несколько инстансов, то у них не будет общей памяти.
                                        Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                          • Ну почему???
                                            Использование глобальных переменных в питоне - сайдэффект?
                                            Ответить
                                            • Не в питоне, а в конкретном окружении.

                                              Вы всегда пишите свои программы под какой-то API, верно?

                                              API предоставляет вам функционал, и определяет для него семантику. Иными словами, вам могут даваться (или не даваться) определенные гарантии.

                                              Если вы используете api wsgi (а так поступают обычно Flask и Django), то такое API не дает гарантий, что каждый запрос исполнится в том же самом процессе.

                                              Если авторы сервера приложений (gunicorn, uwsgi) решат по какой-то причине очищать глобальный стейт после каждого запроса, то они будут полностью правы (они НЕ нарушат спецификации), а ваш кеш сломается
                                              Ответить
              • Хм, а мне казалось, что там какая-то нелогичная питушня и функциональщина уровня "автор читал учебник по хаскелю, но надышался краской и сделал как в сишке".
                Какие-то оторванные блоки родом из структурного программирования, которые можно переиспользовать и передавать в недо-ФВП, обычные функции/методы, у которых другой тип, и хрен их куда передашь и хрен ссылку на них получишь и т.п. Зато map отзывается на 100500 алиасов.
                Как будто функциональщину туда затащили решением суда, и был вариант либо выучить хаскель за 21 час и сделать так же, либо отправляться на виселицу.

                То ли дело JS, где передача функции в ФВП выглядит естественно, и вообще не надо тужиться и думать, чтобы её передать.
                Ответить
            • показать все, что скрытоvanished
              Ответить
              • Я узнаю его по длине комментария.
                Ответить
              • Не факт. Чтение ГК меня утомляет. Я разве что могу изредка заходить и бугуртить в комментах, а не читать все комментарии и отвечать на них как раньше.
                Ответить
                • Жаль.
                  Ответить
                  • Ничего, тут же Пи вроде заходил и Борманд вроде как здесь. С ними ГК не пропадёт.
                    Ответить
                    • Все так говорят. В итоге все исчезают надолго.
                      Ответить
                      • Но потом всё равно всплывают*, хоть и ненадолго. Даже если явно прощались пару раз.

                        ____________________
                        * Всё же это ГК
                        Ответить
              • Кстати, «PHP» допускает такой код:
                <?php
                
                ${1024} = 9000;
                
                ${1024}--;
                
                echo ${1024};


                https://ideone.com/CBggWm
                Ответить
            • А ты как нашёл этот комментарий? Поискал, где тебя упоминали, или перечитывал все?
              Ответить
              • Просто открыл ГК, почитал комментарии на первой странице и в стоке.
                Ответить

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