1. PHP / Говнокод #23353

    +4

    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
    // ...
    if (isset($_GET["download"])) {
    	include "./download.inc.php";
    } elseif (isset($_GET["table"])) {
    	include "./table.inc.php";
    } elseif (isset($_GET["schema"])) {
    	include "./schema.inc.php";
    } elseif (isset($_GET["dump"])) {
    	include "./dump.inc.php";
    } elseif (isset($_GET["privileges"])) {
    	include "./privileges.inc.php";
    } elseif (isset($_GET["sql"])) {
    	include "./sql.inc.php";
    } elseif (isset($_GET["edit"])) {
    	include "./edit.inc.php";
    } elseif (isset($_GET["create"])) {
    	include "./create.inc.php";
    } elseif (isset($_GET["indexes"])) {
    	include "./indexes.inc.php";
    } elseif (isset($_GET["database"])) {
    	include "./database.inc.php";
    } elseif (isset($_GET["scheme"])) {
    	include "./scheme.inc.php";
    } elseif (isset($_GET["call"])) {
    	include "./call.inc.php";
    } elseif (isset($_GET["foreign"])) {
    	include "./foreign.inc.php";
    } elseif (isset($_GET["view"])) {
    	include "./view.inc.php";
    } elseif (isset($_GET["event"])) {
    	include "./event.inc.php";
    } elseif (isset($_GET["procedure"])) {
    	include "./procedure.inc.php";
    } elseif (isset($_GET["sequence"])) {
    	include "./sequence.inc.php";
    } elseif (isset($_GET["type"])) {
    	include "./type.inc.php";
    } elseif (isset($_GET["trigger"])) {
    	include "./trigger.inc.php";
    } elseif (isset($_GET["user"])) {
    	include "./user.inc.php";
    } elseif (isset($_GET["processlist"])) {
    	include "./processlist.inc.php";
    } elseif (isset($_GET["select"])) {
    	include "./select.inc.php";
    } elseif (isset($_GET["variables"])) {
    	include "./variables.inc.php";
    } elseif (isset($_GET["script"])) {
    	include "./script.inc.php";
    } else {
    	include "./db.inc.php";
    }
    // ...

    https://github.com/vrana/adminer/blob/master/adminer/index.php
    p.s хотя сама штука полезная, пару раз выручала

    Запостил: alex228, 22 Сентября 2017

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

    • Классика.
      Ответить
    • The reason for composing the code like this is that the includes are inlined when creating a single file version of Adminer. Thus it's not possible to compose the code e.g. like this:

      foreach (array("download", "table", ...) as $command) {
        if (isset($_GET[$command])) {
          include "./$command.inc.php";
          break;
        }
      }

      That wouldn't work with inlining the includes.
      Ответить
      • А безусловно заинклудить всё подряд в шапке помешало желание преждевременно пооптимизировать и нежелание писать функции?
        Ответить
        • It's not about premature optimization. It's about knowingly structuring the code in a way that might seem weird to support inlining when creating a single file version.
          Ответить
          • I'm just curious, how did you even manage to find this godforsaken crappy web-site? How is the weather in MTV, btw?
            Ответить
          • IMHO, following changes will make code structure cleaner:
            - wrap body of each .inc.php file into nice function;
            - include all .inc.php files unconditionally, just like bootstrap.inc.php and tmp.inc.php.

            This will not do any harm to single file version. And performance loss will be negligible.
            Ответить
          • Maybe in this case it is better to use closures?
            Ответить
        • So there is a hacky regex-based "compiler" that builds a specific one-filer from the configuration
          https://github.com/vrana/adminer/blob/master/compile.php#L366
          It can't evaluate loops and relies heavily on the structure of this file.
          Ответить
      • R U trying to tell us you write crappy code because your tools are also crappy?

        haha! You just made my day
        Ответить
      • С каких пор говнокод стал англоязычным?
        Ответить
    • compile.php достойно отдельного говнокода. Дали обезьяне ПХАР, но нет, не хочу ПХАР, хочу говноинклюды инлайнить. И самоя красота - минификатор ПХП. Минификатор! ПХП! Блять! Это же охуеть какая оптимизация, теперь шаблонизатор будет считывать на пару килобайт пробелов меньше. Ради этого стоило нагородить пиздец из регулярок, кодогенерации, эвала и call_user_func_array_suka_ebanaya().
      После такого внезапно начинаешь любить крестошаблоны.
      Ответить
      • > error_reporting(6135); // errors and warnings
        E_ALL & ~E_NOTICE?
        Ответить
        • > E_ALL & ~E_NOTICE
          17 байт
          > 6135
          4 байта
          Оптимизация же. Меньше размер файла и не нужно вычислять значение в рантайме
          Ответить
        • The meaning of E_ALL changed over time. Also, Adminer used to support PHP versions where some of the constants were not even available (E_STRICT).
          Ответить
          • Jakub, Adminer is great application, without a doubt. But it really can be improved
            Ответить
      • > начинаешь любить крестошаблоны
        Я тоже после такого начал, но как их выучить?
        Я уже спрашивал, никто не ответил, как выучить С++?
        Ответить
        • > как выучить С++?

          Зачем выучивать C++? Просто пиши программы на нём.
          Ответить
          • Блин, я так не пробовал. Точняк.
            Ответить
          • А чо писать, если работаешь на другом языке?
            Может книжку посоветуешь?\'"
            Ответить
            • Scott Meyers, Effective C++.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • > Почему никто не советует Страуструпа?
                  Советую почитать Страус Трупа, очень интересный роман, неожиданный начало, неожиданный середина, неожиданный повороты сюжета, неожиданный концовка...
                  Ответить
                • > Почему никто не советует Страуструпа? Я его читал и мне нравилось.

                  Потому что он очень уныло пишет, скучно. Я его прочитал (версию для C++03, свежую уже не читал), но мейерс мне кажется гораздо более практичным и интересным стартом.

                  Ну и за код, набранный пропорциональным шрифтом, нужно давать по лысине.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • А как он обосновал такой шрифт?
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Так и до программирования в ворде можно докатиться...

                          А с другой стороны - ну да, в общем-то и похуй на ширину символов (если нет тарасоформатирования), нормально читается.
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                          • показать все, что скрытоvanished
                            Ответить
                          • > ну да

                            Ну нет. Похожие вещи должны выглядеть похоже. Очень сложно сделать нормальное форматирование для некоторых вещей, если ширина символов варьируется. В каком-нибудь хаскеле часто пишут
                            myFunctionName
                              :: (SomeConstraintOn a) -- Пожалуй, единственное преимущество :: для указания типа
                              => SomethingWith a
                              -> SomethingElseWith a
                            В пропорциональных шрифтах ширина ::, =>, -> разная, и такая сигнатура будет выглядеть как говно.

                            В плюсцах, например, тоже можно форматировать код
                            int f(SomeReallyLongType a,
                                  SomeOtherLongType b);
                            Удачи с угадыванием числа пробелов во второй строчке для пропорционального шрифта.

                            Короче пропорциональный шрифт для кода ещё хуже, чем табы.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                              • > смешать
                                Вот как раз смешанный стиль indent with tabs, align with spaces смотрится нормально. А выравнивание чистыми табами выглядит уёбищно при другом размере табов.
                                Ответить
                              • > "а если не мешать?"

                                Если не смешивать, ты ограничен исключительно убогим форматированием кода. Если смешивать, нужно очень много дисциплины, чтобы отформатировать код правильно.

                                Если ты хочешь нормальное, произвольное форматирование, предыдущий пример (допустим, это всё вложенно) тебе придётся форматировать как-то так (␉ — таб, . — пробел)
                                ␉␉int f(SomeReallyLongType a,
                                ␉␉......SomeOtherLongType b);
                                Т.е. нужно думать, где какие символы нужно вставлять, чтобы код нормально выглядел при любой ширине таба. Делать такое руками — идиотизм и напрасная трата времени. Умный форматтер мог бы это делать, но как правило, такой код форматируется вручную ушлёпками, которые считают себя невероятно умными оптимизаторами и тычут табы как попало, но при этом не задумываются о последствиях. В итоге весь такой код выглядит как говно при ширине таба, отличной от ширина таба автора.
                                Ответить
                          • показать все, что скрытоvanished
                            Ответить
                            • При этом листинг надо правильно раскрасить иначе не взлетит.
                              Ответить
                      • > При этом листинг надо правильно раскрасить
                        Кстати, да. Если в питоне отказались от скобок, потому что все равно есть отступы - так почему бы не пойти дальше? Если комментарии и ключевые слова подсвечиваются разным цветом, почему бы не отличать одно от другого просто по цвету?

                        Основной цикл программы
                        void while(int int)
                        {
                        bool true = true; Флажок прерывания
                        while (true)
                        {
                        printf(Число: %i, int + 1);
                        ...
                        }
                        }
                        Ответить
            • Начни песать олимпиады или хакатоны на нем. Ничто так не помогает в изучении нового языка.
              Правда шаблоны ты врядли там будешь создавать
              Ответить
              • > Правда шаблоны ты врядли там будешь создавать
                Ты так говоришь, как-будто в среднестатистическом проекте (не либе) кто-то пишет сложные шаблоны.
                Ответить
            • показать все, что скрытоvanished
              Ответить
        • Если выучишь, то разлюбишь.

          Лучше любить неизвестное
          Ответить
        • >>как выучить С++?
          http://cppstudio.com/wp-content/images/books/osvoy_samost_cpp.png
          Ответить
      • Adminer was created when there was no support for PHAR and it still supports such PHP versions. Also, Adminer users are quite happy that they don't need to download (and also upload to their servers) 1.2 MB of code and they can use only e.g. 196 kB compiled version. One of the use cases for Adminer is to upload it to the server, do what you need and then delete it so the size (and also the number of files) is important.

        It's quite funny to read your rants when it's obvious you don't know the context for conscious design decisions.
        Ответить
        • It is insane to do anything on production database.
          The only correct approach is to deploy so called "migration script" to staging and then (in case of success) to production.

          People who really use web interface to hack data on production servers should be cast to pit.

          It is pretty clear of anyone outside of PHP world.
          Ответить
        • Yes, you're right. But can just refactor it and it will be even smaller and more beautiful inside
          Ответить

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