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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    <script>
      var x = [];
      var y = [];
      x = [<?php foreach ($chart as $word => $f) echo "'$word', " ?>];
      y = [<?php foreach ($chart as $f) echo "$f, " ?>];
    </script>

    JS

    Запостил: Stefan, 25 Мая 2016

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

    • Попахивает, но не смертельно. Можно написать чуть красивее:
      <script>
        var x = ['<?=implode('\', \'', array_keys($chart))?>'];
        var y = [<?=implode(', ', $chart)?>];
      </script>

      Хотя этот вариант тоже с душком.

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

                            Что такое "компилируемый" язык? Что мешает иметь интерпретатор языка, у которого уже есть компилятор? Вы таки не видели интерпретатор сишечки? Как жить без ghci?
                            Ответить
                            • На самом деле - любой язык - это интерпретируемый язык. Только в одних случаях интерпретатор запинается на ворециях, а в других случаях - на кобенациях. А в целом и общем всё в этой жизни итерецируемо и копелируемо и зависит от какой-то скорости. Либо входящей, либо исходящей.
                              Ответить
                            • Это такой яп, большинство реализаций коего компиляторы а не интерпретпторы
                              Ответить
                            • есть даже интерпретатор крестов https://root.cern.ch/cling
                              Ответить
                        • Питоновский интерпретатор был разработан настолько, что мог вместить целого слона. Но некоторые полагали, что это шляпа.
                          Ответить
                          • тут кстати есть один питон-программист, который вместил в себя целую
                            Ответить
                    • Трудная ночь у интерпретатора.
                      Ответить
              • Она бы поместилась на маленький листик - в виде надписи "си не нужен"
                Ответить
                • дурачок, даже твой любимый питон написан на си
                  Ответить
                  • 1. Он не мой любимый, я им пользуюсь по инерции. Я раньше и на перле писал, и что?
                    2. Много ты питонов уже написал?
                    Ответить
                    • 1. Ну точнее из того что я знаю он мне пока подходит лучше всего. Но со средствами разработки на винде полный пиздец.
                      Ответить
                • Не так хуёв си, как его стандартная либа.
                  Ответить
                  • нормальная такая либа

                    всё что нужно программисту в новом, 1975м году
                    Ответить
                    • Надо, кстати, фрактал плохого дизайна на сишку портануть.
                      Ответить
                      • Не портанется. Стандартная либа хотя и куцынькая, но довольно консистентная
                        Ответить
                        • > куцая
                          Вот это как раз терпимо.

                          > консистентная
                          Ага... strncpy и strncat ахуенно согласованы - одна добавляет нолик, вторая - нет. С этими ноликами и n-функциями там вообще шалаш из костылей и изоленты... Ну и всякие strcat'ы возвращают бесполезный указатель на начало вместо няшного указателя на конец. Таймштамп можно сконвертить в локал и утц структуру, а обратно - только из локала...
                          Ответить
                          • Еще была какая-то история с направлением копирования в memcopy и трухвальцем.
                            Ответить
                            • Ну это про мемкопи и меммув. Если источник и приёмник пересекаются - мемкопи факапит буфер в половине случаев. Меммув норм работает, но про него мало кто знает, пока на баг не налетят...
                              Ответить
                              • торвальдс не на шутку пиздился, помню


                                --а они сами пидарасы что нарушили стандарт
                                --да? ты это скажешь юзерам, у которых софт упадет?
                                Ответить
                                • Ну и про результат memcmp неплохой срачик был.
                                  Ответить
                                • Было дело:
                                  http://avva.livejournal.com/2323823.html

                                  В роли пидарасов компания Adobe, у которой очередная версия Flash-плеера рухнула.
                                  Ответить
                                  • memcopy - копирует память, не проверяет пересечение
                                    memmove - копирует память, проверяет пересечение

                                    Только сишкомудак мог такое придумать.
                                    Ответить
                                    • ой ну ладно

                                      Ты угадай например чем StringBuilder от StringBuffer отличается (это джава)
                                      Ответить
                                      • Один из них устарел и его надо забыть. Но в сишке такая срань на каждом шагу.
                                        Ответить
                                  • Флеш неофициальный же, так что рухнуло все у прыщеблядков.
                                    Ответить
                                    • > Флеш неофициальный же

                                      Что?

                                      https://helpx.adobe.com/flash-player/kb/archived-flash-player-versions.html

                                      Flash Player Download Center • Mac OS X 10.6+ (Intel processor)
                                      • Windows XP, Windows Vista, Windows 7, Windows 8.1, Windows 10
                                      • Windows Server 2008
                                      • Red Hat 5.6+
                                      • Open SUSE 11.3+
                                      • Ubuntu 10.04+
                                      Flash Player 11.2.202.223 ̃• Solaris x86 and Sparc
                                      Flash Player 10.1.102.64 • Mac OS X 10.4+ (Power PC processor)
                                      Flash Player 11.1.102.55 • Windows 2000
                                      Flash Player 10.3.183.90 • Mac OS X 10.5
                                      Flash Player 9 • Mac OS X 10.1-10.3
                                      • Windows 98, Windows ME
                                      • Red Hat 3&4
                                      • Novell SUSE 9.x or 10.1
                                      Flash Player 7 • Mac Classic (9 and earlier)
                                      • Windows 95, Windows NT
                                      • Red Hat Enterprise Linux WS v.3 & Red Hat Linux 9
                                      • Sun Java Desktop System 1.0

                                      Даже для помойного ведра (< 4.4) есть официальный.
                                      Ответить
                                      • http://govnokod.ru/20078#comment329262 по твоей же ссылке прочти же.

                                        >помойного ведра (< 4.4)
                                        Ыыыыы :) Запомню.

                                        Ты тут http://govnokod.ru/20055#comment329122 совсем слился?
                                        Ответить
                                        • Посмотрел. Неофициальный Флеш — это Gnash и Lightspark, к которым нельзя серьёзно относиться, ибо они реализуют виртуальную машину не полностью. Тут же был оригинальный адобовский Флеш, который упал, когда в Федоре сменилась glibc.

                                          Разработчики из Adobe решили, что недокументированное поведение memcpy будет сохраняться во всех версиях glibc, поэтому использовали memcpy вместо memmove. Т. е. использовали UB на всю катушку.
                                          Ответить
                                          • Кто-то из вас плохо посмотрел.

                                            >29 сентября 2010 года. Пользователь "JCHuynh" открывает новый баг на сайте Федоры о том, что 64-битный флэш-плагин от Adobe перестал нормально проигрывать mp3-файлы, выдает все время какой-то треск вместо правильного звука. Adobe предоставляет два плагина для Линукса, но "официальный" 32-битный морально устарел и работает на 64-битных системах куда хуже "неофициального" 64-битного - этот последний как раз и начал барахлить.

                                            Вообще действительно, нахуй менять поведение чтобы получить уникальное в зависимости от платформы/положения звезд? Это же раздолье для УБ.
                                            Ответить
                                            • Виноват, статью читал давно, ссылку дал по памяти. Странно видеть термин «неофициальный» для несвободной программы с закрытыми исходниками. Вероятно, имелась в виду так называемая дебаг-версия или бета-версия, которая не рекомендуется для постоянного использования, а рекомендуется только для отладки swf-файлов.
                                              Ответить
                                              • У Адоба одно время был проект Square - переработка плеера для работы с 64-битными компутерами. (На самом деле вместо переработки они писали обертку которая бы позволяла запускать старый 32-битный плеер в 64-битной среде).

                                                Разница между официальными версиями и Square в том, что для официальных версий существует поддержка и пока официально не заявлено, что версия больше не поддерживается, для нее будут бекпортить критические патчи. (Поддержка заключается в том, что баги исправляют). Ну и любую поддерживаемую версию можно скачать (т.е. Адоб будет хостить ее по специальному адрессу). Square версий больше нигде не осталось на сколько я могу судить, проект продержался около полугода, после чего его закрыли.
                                                Ответить
                                • Подход порвальдса - это подход браузеров, в котором 100500 пересекающихся стандартов и хуй вместо кроссплатформенного форыча и модулей.
                                  Ответить
                              • Я не помню деталей, в одной из функций там направление копирование - UB, кажется.
                                Ответить
                          • А ещё там замечательные названия юникодных функций, произнося которые, можно случайно призвать дьявола ;)
                            Ответить
                            • об уникод многие сломали зуб

                              тот же питон
                              Ответить
                              • Зуб сломал рнр, в котором до сих пор типа данных "юникодная строка" нету. В питоне он хотя бы был.
                                Ответить
                                • в питончике 4 вида строк и это одна из самых страшных болей для перехода с 2 на 3
                                  Ответить
                                  • Щито? Ты ебаный нуб и нихуя не знаешь.
                                    Ответить
                                    • похоже что ты не знаешь даже своего питона

                                      Позволь мне процытироваць:

                                      Combining Python 3 str/bytes with Python 2 unicode/str
                                      So what happens when we somehow combine a Python 3 str/bytes with a Python 2 str/bytes/unicode? Let's think about it.

                                      The future module by Ed Schofield forbids py3bytes + py2unicode, but supports other combinations and upcasts them to their Python 3 version. So, for instance, py3str + py2unicode -> py3str. This is a consequence of the way it tries to make Python 2 string literals work a bit like they're Python 3 unicode literals. There is a big drawback to this approach; a Python 3 bytes is not fully compatible with APIs that expect a Python 2 str, and a library that tried to use this approach would suffer API breakage. See this issue for more information on that.

                                      I think since we have the magical power to change the interpreter, we can do better. We can make real Python 3 string literals exist in Python 2 using __future3__.

                                      I think we need these rules:

                                      py3str + py2unicode -> py3str
                                      py3str + py2str: UnicodeError
                                      py3bytes + py2unicode: TypeError
                                      py3bytes + py2str: TypeError


                                      http://blog.startifact.com/posts/the-call-of-python-28.html
                                      Ответить
                                      • Тебя наебали

                                        python 2: bytes, str | unicode
                                        python 3:   bytes    |   str
                                        Ответить
                                        • дальше-то что?
                                          у тебя существует несколько видов строк и совершенно нет никакого знания о том, какой тип строки ожидает функция
                                          Ответить
                                          • Что значит "нет никакого знания о том, какой тип строки ожидает функция"? Апидок для чего, блядь?
                                            Ответить
                                            • в апидоке у тебя не будет написано ожидает функция bytes или str (для второго пайтона) и конечно не будет никакого unicode в третьем (потому что там все str)

                                              развели зоопаркбля

                                              хорошо сделано в жабе и c# где все строки изначально были юникодные
                                              Ответить
                                              • Млядь, в обоих есть байтовые и юникодные строки, они по разному называются! Не позорься, анонимка!

                                                >в апидоке у тебя не будет написано ожидает функция bytes или str (для второго пайтона)
                                                Если это реально имеет значение то будет. Скорее всего. Лично помню баг где было не указано.

                                                >хорошо сделано в жабе и c# где все строки изначально были юникодные
                                                Хорошо, никто не спорит. В питоне байтовые литералы еще хранятся в кодировке файла .py. Поменял кодировку - программа сломалась.
                                                Ответить
                                              • > хорошо сделано в жабе и c# где все строки изначально были юникодные
                                                бггг скажи это жабьим проперти файлам
                                                Ответить
                                • В PHP отдельного типа данных нет, но можно пихать UTF-8 в большую часть функций. Есть специальные версии функций для UTF-8 (типа mb_strlen вместо strlen); есть функции, у которых кодировка указывается в аргументе (самый хитрый вариант — регулярки, к которых нужно дописывать суффикс «u», чтобы они догадались, что аргумент в UTF-8).
                                  Ответить
                                  • Взятие символа по индексу за O(длина)?
                                    Ответить
                                    • Ага. Квадратные скобочки, как у массива, действуют только для кодировок с фиксированным размером символа (в данный момент для восьмибитных). А для кодировок с переменным размером символа (к которым относится и UTF-8) для поиска n-го символа нужно пробежать все предыдущие. Вырезка произвольного фрагмента из строки становится по сложности такой же, как работа с регулярками.

                                      В PHP6 собирались разработать «широкие» строки, символ которых мог без труда вместить больше восьми битов (кажется, хотели перейти на UTF-16, как в Винде, у которой эмодзи и иероглифы занимают по два места), но PHP 6 так и не вышел. А вышедший PHP 7 — это на самом деле PHP 5.7.
                                      Ответить
                                      • Секунду, так для поиска символа по индексу вообще функции апи есть?
                                        Ответить
                                        • $stroka[5] — шестой символ строки (счёт идёт с нуля) в однобайтовой кодировке.

                                          substr($stroka, 5, 1) — то же самое (можно вырезать даже несколько символов сразу).

                                          mb_substr($stroka, 5, 1, 'UTF-8') — то же самое, но для многобайтовых кодировок. Причём поддерживается не только UTF-8, но и куча других: UTF-16 и UTF-32 (и с большим индейцем, и с маленьким), японские и китайские аналоги Юникода и прочие извращения:
                                          http://php.net/manual/ru/mbstring.encodings.php

                                          Возможно, некоторые функции PHP, выполняющие системные вызовы (типа файловых функций) пропустят не любую кодировку.
                                          Ответить
                                          • Так это надо 'utf8' во все вызовы пихать?

                                            >Возможно, некоторые функции PHP, выполняющие системные вызовы (типа файловых функций) пропустят не любую кодировку.
                                            Но они юникод хоть поддерживают?
                                            Ответить
                                            • > Так это надо 'utf8' во все вызовы пихать?

                                              Можно указать кодировку по умолчанию в ini-файле или вызовом специальной функции один раз.

                                              > Но они юникод хоть поддерживают?

                                              fopen создаёт файл с именем в локальной кодировке. Создать файл с юникодным именем мне не удалось. Ситуация примерно, как с zip-архивами.

                                              Спасает только то, что в типичном приложении на PHP такая возможность обычно не требуется, если только ты на PHP не пишешь панель управления сервером.
                                              Ответить
                                              • >Создать файл с юникодным именем мне не удалось.
                                                Ааааааааааа :))))))))))))))))))))))))))))) 2016 год )))))))))))

                                                А как же nagios?
                                                Ответить
                                                • http://stackoverflow.com/questions/1525830/how-do-i-use-filesystem-functions-in-php-using-utf-8-strings

                                                  PHP под Виндой обламывается. Но есть два костыля:
                                                  1. Расширение com_dotnet, через которое можно достучаться до объекта файловой системы.
                                                  2. Самопальное расширение, выполняющее эту задачу (последняя ссылка).

                                                  В Линуксе же можно надеяться, что строка в UTF-8 проканает.
                                                  Ответить
                                                  • >Язык с ВМ
                                                    >Платформозависимые КОСТЫЛИ
                                                    Ясно.
                                                    Ответить
                                                  • >Under Windows, PHP operates as a "non-Unicode aware program"
                                                    Пиздец. Впрочем, язык был узко заточен под веб.
                                                    Ответить
                                                    • В общем, если к директории ФС сервера имеет доступ только PHP, то это не проблема: можно кодировать имена файлов (транслит, base64, punycode, да хоть тупо набор цифр).

                                                      Проблема возникает, если одну директорию сервера используют сразу несколько программ, и они хотят видеть уникодовские имена файлов.
                                                      Ответить
                                                      • Пыхооправдания.
                                                        Ответить
                                                        • Мне даже кажется, что попытку реализовать поддержку Юникода в PHP6 провалили специально, чтобы программисты ушли с PHP.
                                                          Ответить
                                                      • если к директории ФС сервера имеет доступ только PHP обычно делают имя из хеша, а в базе хранят реальные имена.
                                                        Ответить
                                                • 2019-й год: PHP 7.1 умеет создавать файлы с юникодными именами, PHP 7.0 не умеет.
                                                  Ответить
                            • Хде там?
                              Ответить
                          • Да, говно и тяжкое наследие, но я говорил не об этом.
                            Вы не встретите в стандартной библиотеке функции htmlentities, правда?

                            На сях хуево и больно писать сложную логику, а после ЯПов со всякими лямбдами и мапами так и вовсе руки опускаются
                            Ответить
                            • Собсно, сегодня си не для этого используется.
                              Ответить
                              • вот да
                                слава богу уже ОЧЕНЬ ДАВНО си для этого не используется

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

                                  Применение "слябать на коленке сайт-визитку или запилить бложек на готовом движке и все это за 3 копейки или вообще самому можно сделать" никто не отменял.
                                  Ответить
                            • Да, на сях хуёво и больно писать...

                              Поэтому почти в каждой уважающей себя проге или либе есть своя замена кучи штатных функций, свой тип для кодов ошибок, своё логирование и вообще своя атмосфера и свои правила...

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

                                им тоже не скучно
                                Ответить
                              • >не так уныло и однообразно
                                На рнр и жс тоже все не так уныло и однообразно. Сделать цикл с паузами - уже развлечение для ума.
                                Ответить
                          • Отношение к строкам в Си убивает напрочь всякое желание программировать.

                            Но то, что не связано со строками, вроде бы сделано хорошо.
                            Ответить
                            • а нефиг на плейнсях серьезно обрабатывать тексты

                              строковый литерал есть, копировать строку можно, форматировать вообще классно (ну правда, printf же всякие хорошие), что не так?
                              Ответить
                              • Ты на си часто писал? Или только лабы?

                                > копировать строку
                                Не забыв выделить под неё буфер. Strdup - не стандарт. И не дай бог тебе надо упихать в буфер фиксированной длины без переполнений....
                                Ответить
                                • >Не забыв выделить под неё буфер.
                                  Ну так это в си везде так.
                                  Ответить
                                • писал, правда работа со строками ограничивалась в основном printfом результатов

                                  так что не так-то?
                                  >>Не забыв выделить под неё буфер.
                                  ну да, и что? Обычно ты знаешь размер источника, не так-ли?
                                  Ответить
                          • gets() не принимает ограничение на размер буфера, и оттого совершенно бесполезен.
                            fgets(), внезапно, принимает.

                            Половина функций не реентерабельна.

                            Хотите получить содержимое каталога? В библиотеке C это невозможно, нужны платформо-зависимые функции.
                            Кстати, поскольку Lua написана на портируемом стандартном C, в стандартной библиотеке Lua тоже нельзя получить содержимое каталога (без вызова сторонних платформо-зависимых программ).
                            Ответить
                        • strtok(), anyone?
                          Ответить
                      • Я даже не могу сказать, что не так с C, потому что... Окей. Представьте себе, эмм, коробку с инструментами. Набор инструментов. Выглядит нормально, инструменты как инструменты.

                        Вы берёте отвёртку и не видите у неё крестовины. Окей, не очень полезно для вас, но может когда-нибудь понадобиться.

                        Вы опускаете руку в коробку ещё раз - и не находите там больше ничего.

                        Теперь представьте себе миллионы плотников, использующих такой вот набор инструментов и говорящих вам: «А что не так с этими инструментами? Я никогда не использовал ничего другого и они отлично работают!». И плотники показывают вам, построенные ими дома из деревьев, срубленных отвёрткой без крестовины. Вы стучитесь в дверь, из неё появляется пистолет и стреляет вам в ногу, и они орут на вас за то, что вы сломали их дверь.

                        Вот что не так с C.
                        Ответить
                        • Я даже не могу сказать, что не так с gost, потому что... Окей. Представьте себе, эмм, коробку с инструментами. Набор инструментов. Выглядит нормально, инструменты как инструменты.

                          Вы берёте отвёртку и не видите у неё крестовины. Окей, не очень полезно для вас, но может когда-нибудь понадобиться.

                          Вы опускаете руку в коробку ещё раз - и не находите там больше ничего.

                          Теперь представьте себе миллионы плотников, использующих такой вот набор инструментов и говорящих вам: «А что не так с этими инструментами? Я никогда не использовал ничего другого и они отлично работают!». И плотники показывают вам, построенные ими дома из деревьев, срубленных отвёрткой без крестовины. Вы стучитесь в дверь, из неё появляется пистолет и стреляет вам в ногу, и они орут на вас за то, что вы сломали их дверь.

                          Вот что не так с gost.
                          Ответить
                        • Годно.
                          Ответить
                        • проиграл в голос.
                          Ответить
                      • Напитон не хочешь портануть?
                        Ответить
          • Хуита
            Ответить
    • Я тоже когда-то не знал о существовании json_encode :)
      Ответить

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