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

    +5

    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
    function make_json($array){
    
        $json = '{';
        $pairs = array();
    
        foreach($array as $key=>$val){
            if (!is_numeric($val)) { $val = "'{$val}'"; }
            $pairs[] = "{$key}: $val";
        }
    
        $json .= implode(', ', $pairs);
        $json .= '}';
    
        return $json;
    
    }

    Запостил: dm_fomenok, 08 Августа 2016

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

    • показать все, что скрытоКакой багор )))
      Ответить
    • показать все, что скрытоВ переводе с санскрита PHP означает "язык для тупорылых любителей квадратноколёсных велосипедов"
      Ответить
    • показать все, что скрыто- "Почему не json_encode" - насмехаясь скажет крутой суперпрограммист
      - "Кодировка, в старых версиях" - ответ бывалого)))
      Ответить
      • Да и json_encode появился только в 5.2. У меня есть код, который использует библиотеки 2008 года. Там таких костылей много.
        Ответить
    • Вы смеетесь над пхп, а в божественной сишачке такое делает каждый второй. Потому что ценители божественной сишачки не могут в нормальный код, да и удобных библиотек не завезли.
      Ответить
      • Я тоже похожее делал (только с экранированием строк, конечно). Ибо json_encode в сишку не завезли.
        Ответить
      • > да и удобных библиотек не завезли

        Удобные библиотеки завезли, не завезли удобного способа их подключать.
        Ответить
        • Можно пример удобной библиотеки для няшной? То, что я видел, удобным не показалось. Хотя меня в целом от няшной воротит, не могу представить, как там что-то может быть удобным.
          Ответить
          • показать все, что скрытоУдобных - нету, ибо сишка далеко не самый удобный язык. С владением, контекстами, строками, трансляцией кодов ошибок придётся поебаться... Но адекватных для решения задачи - полно.

            Жопа начинается, когда системы сборки либы и твоего проекта не совпадают... Вроде и либа есть, а поюзать - хуй.
            Ответить
        • показать все, что скрыто)по сравнению с ПХП обычный сишный Makefile и инклудгарды это просто магия и волшебство
          Ответить
          • показать все, что скрыто> обычный сишный Makefile
            Их нынче только для hello world юзают, не переживай...

            > инклудгарды
            А в чём там магия? После первого втыкания куска текста тупо взводится переменная и второй раз этот кусок уже не втыкается. Если имена этих переменных не повторяются - никаких проблем с гардами нету.
            Ответить
            • показать все, что скрытоВоткнул тебе кусок хуя за щеку, проверь.
              Ответить
            • показать все, что скрыто>>Их нынче только для hello world юзают, не переживай...
              Да ну ладно) Их много где юзают. Просто вместе с autoconf всякими.
              Короче в сишечке реализовать модульность можно, но вручную, с бубном, но можно же.

              >>А в чём там магия?
              Да я не в том смысле что это магия, а в том что это бесконечно прекрасно.

              Потому что у пыховцев до сих пор нет красивого способа переиспользования кода за пределами фреймворка
              Ответить
              • > вместе с autoconf всякими
                Это называется "используют autoconf", и не вместе, а вместо. То что система сборки генерирует мейкфайлы - это детали реализации.
                Ответить
                • показать все, что скрытокакая науй разница?

                  важно что ./configure && make работает
                  и пофиг кто писал мейк файл -- программист или скрипт
                  Ответить
                  • Ты какую-то дичь задвигаешь. Ты говоришь, что мейкфайлы волшебны, но в чем заключается их волшебность, если их никто непосредственно не использует, не пишет их и даже не заглядывает в сгенерированное?
                    Ответить
                    • показать все, что скрытоВолшебность заключается в том, что с помощью них можно подключать либы и переиспользовать код. Попиши немного на пхп, попробуй создать либу, не привязанную к конкретному фреймворку и ты поймешь
                      Ответить
                      • С помощью мейкфалов нельзя подключать либы. Тебе ниже объяснили, почему -l<libname> недостаточно.
                        Ответить
                        • показать все, что скрытоС помощью мейкфалов можно описывать зависимости между юнитами. Это уже очень много.

                          Тебе ниже уже объяснили что проблема не решаема нигде.
                          Ответить
                          • > Тебе ниже уже объяснили что проблема не решаема нигде.

                            Что значит не решаема нигде? В любом пистоне/раби/жабе можно в setup/гемфайле/pom.xml написать, какие библиотеки каких версий тебе нужны, и всё будет автоматом загружаться и устанавливаться. Написал пару строк в конфиге — можешь юзать либу. В go вообще можно тупо импорт написать, сборщик последнюю версию скачает из интернета.

                            С сишкой в 99.9% случаев нужно будет вендорить и писать собственный билд под каждую зависимость.
                            Ответить
                            • показать все, что скрыто>>В любом пистоне/раби/жабе мо

                              А теперь прокрути на три сообщения ниже и почитай про psycopg в питоне и про jar hell в джаве с кучей разных juit в classpath.
                              Ответить
                              • > А теперь прокрути на три сообщения ниже

                                То, что софт становится трудно переносить, если вдруг приходиться вляпаться в сишку, не означает, что 99% остальных либ не работает как надо.
                                Ответить
                          • показать все, что скрыто> С помощью мейкфалов можно описывать зависимости между юнитами.
                            Но не нужно. Сначала все сорцы конпелируют, а потом скопом линкуют - зависимостей нет.
                            Ответить
                • показать все, что скрытоНагенерировал мейкфайлов тебе за щеку, проверь.
                  Ответить
              • > у пыховцев до сих пор нет красивого способа

                phar, composer?
                Ответить
                • тсс, он не знает об этом, не выдавай секрет шпиену
                  Ответить
          • показать все, что скрытоЗасунул волшебную палочку тебе в анус, проверь.
            Ответить
          • Мейкфайлы - кал.
            Ответить
        • показать все, что скрытоОбъясни пожалуйста в чем проблема поставить у пакета депенденси на libудобная-библиотека-devel

          Потом сделать #include<libудобнаябиблиотека.h>
          и потом передать сборщинку -lудобнаябиблиотека
          ?
          Ответить
          • показать все, что скрыто> в чем проблема
            В винде.

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

              В таком случае никакой ЯП не решает приведенных тобою проблем.
              Ответить
              • Во многих языках (петон, раби, раст, ноджс) есть пакетный менеджер, позволяющий притащить нужные зависимости независимо от дистрибутива. А в го просто все зависимости с собой таскают в папке vendor.
                Ответить
                • показать все, что скрытону давай-ка поставь мне клиента Postgres к питону)) А особенно поставь мне его на винде)

                  А потом расскажи как он "поставит в независимо от дистрибутива".
                  Ответить
                  • показать все, что скрытоНу правильно, питонцы ниасилили python-only драйвера к СУБД (в отличие от той же жабы, где половина дров - прямо на жабе), вот пусть и страдают с нативщиной.
                    Ответить
                    • показать все, что скрытоО, жаба! Отличный пример!

                      Мавен, градл, зависимости, никакого нативного кода.

                      А знаешь что бывает когда у тебя три либы зависят от трех разных junit?

                      У тебя в класс пасе оказывает три разных junit. Догадываешься что потом бывает?
                      Ответить
                      • показать все, что скрыто> класс пасе
                        Класс пас - говно. Как и любая другая идея о path (path, library path, inclede path и т.п.).
                        Ответить
                      • > У тебя в класс пасе оказывает три разных junit

                        Не оказывается. maven/gradle и прочие смотрят весь граф зависимостей и выбирают одну версию каждой либы. Если у тебя в classpath оказалось три разных версии — ССЗБ.
                        Ответить
                  • > поставь мне клиента Postgres к питону

                    У проблем с установкой на венду postgres-клиента питона и какого-нибудь lxml одинаковый источник — отсутсвие возможности нормально переиспользовать сишные библиотеки, на которых основаны змеиные реализации.
                    Ответить
                    • показать все, что скрытоИнтересно, если тот же драйвер для постгри переписать на питон без нативщины, насколько сильно это скажется на производительности?

                      Скорее всего не сильно.
                      Ответить
                      • показать все, что скрытои потом менять каждый раз когда новая версия выходит?
                        Ответить
                      • > если тот же драйвер для постгри переписать на питон без нативщины

                        Переписали уже и не раз:
                        http://python.projects.pgfoundry.org/
                        https://pypi.python.org/pypi/pg8000

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

                        Зато в теории в пистоне можно более удобную асинхронную версию драйвера написать.
                        Ответить
                        • показать все, что скрыто> более удобную асинхронную версию
                          Ну психопг2 вроде как умеет несколько параллельных запросов по одному сокету (что подразумевает неблокирующие запросы). Так что на нём тоже можно асинхронную версию слепить.
                          Ответить
                    • показать все, что скрытоНу то-есть мы признаем что модули питона точно так же зависят от системных библиотек, как и "модули" сей, правда?
                      Ответить
                      • показать все, что скрытоКто ж им мешал не паразитировать на сишной либе, а самим сокет открывать? Протокол вроде не закрытый. Но скриптушки такие скриптушки...
                        Ответить
          • В том, что в твоей федорочке libудобная-библиотека-devel может привезти инклуды в одно место, а в моей убунточке libудобная-библиотека-dev - в совсем другое. И оба этих места могут отсутствовать в дефолтных путях для поиска инклудов.
            Это конечно не проблема, потому что есть системы сборки, которые сами все найдут и в опции компилятора добавят, но ты об этом не сказал. Мне почему-то кажется, что ты на практике не делал сборку для чего-то крупнее хеловорлда.
            Ответить
            • показать все, что скрытоРовно для этого существует понятие "портирование" и autoconf, о котором было сказано выше.

              Мне почему-то кажется что ты на ЛОРе начитался что "сишечка говно" и повторяешь эту чушь как попугай
              Ответить
              • автоконф - тоже говно в общем-то
                Ответить
                • показать все, что скрыто> автоконф - тоже говно
                  Не просто говно, а говно, которое генерит говно на основе говна сгенерённого говном, генерящее говно на основе говна...

                  З.Ы. Но более переносимого говна, чем автоконф, походу, не существует.
                  Ответить
                  • Внезапно мне нравится как сделано у бздунов. Их система (bsd make) делает код переносимым между двумя версиями одной и той же ОС в отличие от автоконфа, зато Makefile выглядит примерно так (пишу по памяти, но смысл примерно передам):

                    PROG=pituh
                    LD_ARGS=-lPitushok
                    #include<bsd.prog.mk>


                    После чего make install все сама делает: и компилит с правильным include и линкует и маны инсталлирует.

                    Такая же есть для портов.

                    Разумеется, работает только на той ОС, для коей сделано: не переносимо даже между openbsd и freebsd
                    Ответить
                • > тоже говно в общем-то
                  Причём редкостное.
                  Ответить
            • показать все, что скрыто> федорочке
              > убунточке
              А в штабильном дебьяне вообще какое-нибудь говно 5 летней давности будет лежать вместо ожидаемой версии...
              Ответить
              • Да и в свежих дистрибутивах нужного часто нет. И если мелкую библиотеку можно таскать прямо с программой и статически линковаться, то с бустом такой фокус провернуть сложно.
                Ответить
            • > а в моей убунточке в совсем другое

              Более того, в разных релизах бубунточки пакеты могут называться по-разному или иметь разную структуру. Например, в новом релизе кто-нибудь может решить разбить один пакет на 2 или 3. Мы писали софт под определённый дистрибутив и платформу, и всё равно огребали кучу работы каждый раз при миграции на новый LTS.

              autoconf/cmake может помочь найти хедеры и собранные либы, но до этого их надо, очевидно, собрать и установить. Если пишешь какой-нибудь опенсорс, это норм, пакетные менеджеры разрулят.
              А если хочется герметичных и воспроизводимых сборок — только вендоринг и написание собственных билд-скриптов для каждой зависимости.
              Ответить
              • >Мы писали софт под определённый дистрибутив и платформу, и всё равно огребали кучу работы каждый раз при миграции на новый LTS.

                Расскажи поподробнее.
                Меня удивляет как в 201х можно написать софт непортируемый между убунтами.
                Ответить
                • Можно хотеть либу, которую дропнули например.
                  Ответить
                  • И что, много полезных либ дропают?
                    Всё-таки интересно услышать реальные примеры.
                    Ответить
                    • python 2.6
                      За примерами к Роману
                      Ответить
                      • ЫЫЫ. Так они ж на крестах писали, не?
                        Ответить
                        • Потому и зеленым.

                          Ну слушай, между LTSами вполне может случиться чото: например могут openssl заменить на libressl или хедеровые файлы могут переехать
                          Ответить
                          • >openssl заменить на libressl
                            sudo apt install openssl

                            Или какой толк от этой убунты? Проще тогда на слаке сидеть и в билд-скрипте херачить для каждой нужной либы
                            git clone https://gitlab.com/tsar/libPituh
                            cd libPituh && git reset --hard 10.0.500
                             ./configure && make && make install


                            >хедеровые файлы могут переехать
                            Тут да.
                            Ответить
                            • Билд скрипты (если ты про slack builds) не делают clone: там надо сначала руками скачать сырцы а потом запусить slack build: он скопелирует правильно, соберет tgz и его можно потом installpkg:)

                              Скачивают порты у BSD и всякие арчи/генты
                              Ответить
                              • Дык это же самые обычные скрипты, кто мешает туда первой строкой clone и checkout нужного коммита въебать?
                                Ответить
                                • Мне кажется что за разделением сырца и слакбилда есть какой-то смысл.

                                  Вишь, отдельно сырцы
                                  https://slackbuilds.org/repository/14.2/desktop/mcwm/

                                  Даже тут написано
                                  https://slackbuilds.org/howto/
                                  Next, download the source of the application

                                  Как ты думаешь -- почему?
                                  Ответить
                                  • Потому если вписать прямые ссылки, есть опасность что завтра M$ купит гитхаб и начнёт распространять модифицированные коды!
                                    Ответить
                                    • там sha-2 для этого вроде, нет?0
                                      Ответить
                                      • Ну если делать git reset --hard на тег или версию, то никакое sha не спасёт.
                                        Ответить
                                        • Попроси, чтобы тег подписали PHP PGP и проверяй подпись.
                                          Ответить
                                        • Я имел ввиду что скрипт знает sha того, кого скачивает.
                                          Если sha другое значит там что-то испортили.

                                          А если там наживую меняют код в этом таге -- тогда как-то не очень стабильно
                                          Ответить
                                    • > M$ купит гитхаб
                                      Или мимо пробежит телеграм.
                                      Ответить
                                      • гитхаб переберется на ажур и телеграм останется на амазоне и они не пересекутся
                                        Ответить

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