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

    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
    Давным-давно( сегодня, неск. часов назад )
    В одной уютной-приуютной группке( https://vk.com/topic-30666517_29088463?post=448559 ), 
    Разумеется, даже нифига не в предназначенной для этого ветке, 
    Очередной "отче программирования, ментор и просто_великий_гуру"(тм), 
    Ну_так_уж_и_быть, соизволил искать себе паству, да всерьёз гитхабами мериться.
    
    https://github.com/AndreyMashukov?tab=repositories
    
    
    Посоны, я, кнчн., всё понимаю( аки пьос, Гы ), но.. 
    Разве "Это норма"(тм) всерьёз вываливать в репозитории дерьмо вида:
    
    Целый_распрекрасный_класс_для_сравнения_мать_их_двух_строчек_текста:
    https://github.com/AndreyMashukov/comparison
    В этой срани многие десятки папок и файлов разных расширений
    Даже какие-то говнотесты затолкнуты..
    И всё это для целого_мать_его_говнокласса( 180 строк )_что_сравнивает_ровно_две_ср.ных_строки !

    К сожалению, такие объёмы дерьма даже на Говонокод одним "заходом" не уместятся.

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

    п.с: не покидает ощущение, что лучше вообще быть без гитхаба, чем иметь такой - будто бы, есть вероятность даже не до нуля скатиться при поиске серьёзной работы и конторы, а, даже в "минус" уйти ( т.е с ним шансов даже меньше, чем вообще без него ).

    Запостил: sam, 07 Октября 2017

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

    • Глядя на его фотку, я бы побоялся его обсирать. Может вычеслить по айпи и дать пезды.

      А если серьёзно, то гитхаб имхо не для того чтобы пиписьками меряться, а хранить и делиться кодом. Бесят те, кто не выкладывают свой код только потому, чтобы не засирать свой говнопрофильчек непристойными проектами или великами.
      Ответить
      • И ещё меня пригорает от функции "Fork" на github. Вот нахуй она нужна? Чтобы тот кто зашёл в твой профиль увидел охуенно много репозиторий с дохуя звёздами и охуел какой ты крутой? В то время как ты даже ни одного коммита туда не сделал.
        Ответить
        • Не пользовался гитхабом - не пизди. Репозиторий форкают, чтобы разрабатывать проект в своем форке, и иногда отправлять пулреквесты в апстрим.
          Ответить
          • > В то время как ты даже ни одного коммита туда не сделал
            Ответить
            • > И ещё меня пригорает от функции "Fork" на github. Вот нахуй она нужна?
              Ответить
              • Да что ты прикопался?
                Объясни зачем форкать репу и не коммитить туда никогда? Я правда не понимаю, открой секрет. И таких 95% профилей что открываю.
                Ответить
                • Возможно, что просто ради бекапа. Фиг знает, что там автору проекта в голову придёт завтра. А тут твоя личная копия, которая никуда не денется.
                  Ответить
                • Што бы повыёбываться.

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



        Дык в том и прикол.
        Если речь о каком-то серьёзном проекте, под него обычн. даётся подписка о неразглашении.

        Если речь о каком-то серьёзном собственном общедоступном проекте( для чего гитхаб по субъективному и нужен ) - дык до него дорасти надо( т.к в противном случае, УЖЕ есть куча аналогов, зачастую, ощутимо лучших по реализации. Или, привет "не стоит плодить сущности без крайней на то необходимости"(С) ).

        Если речь о дерьме - дык его у себя на ПеКе можно локально хранить, но никак этим не хвастать и всерьёз заявлять о нев.ебенном_присутствии_на_гитхабе.

        В противном случае - имеем то, что имеем.
        Невообразимые объёмы говн в сети, на фоне которых тупо теряется та малая часть чего-то действительно крутого и годного.
        Невообразимые объёмы говн в головах благодаря таким_вот_знатокам_проги и тем, кто им поверил по необразованности( будучи совсем новичками ).
        Ответить
    • Ну, к слову, там не просто сравнение строк, а попытка запилить нечёткое сравнение почтовых адресов, хоть и хуёвая. Так то задача интересная.
      Ответить
    • Мне больше это нравится https://github.com/AndreyMashukov/throttler. Тут прекрасно вообще всё.
      Ответить
    • /**
      	 * Compare strings
      	 *
      	 * @param string $a First string
      	 * @param string $b Second string
      	 *
      	 * @retutn int Result of compare
      	 */

      Охуенная документация.
      Ответить
      • >>> У меня большая часть кода в тестах
        >> retutn
        Интересно, а у него есть тесты, тестирующие комментарии?
        Ответить
      • Есть php codesniffer, который проверяет присутствие и правильность phpdoc - это вынуждает написать хоть что-то, даже кеповсие комменты. Но судя по retutn - не в данном случае.
        Ответить
        • > вынуждает написать
          А он понимает, что не ко всем функциям нужна документация (к реализациям виртуальных методов, например)? Или вынуждает писать кэповские комменты всегда и везде?
          Ответить
          • ЕМНИП, он заставит тебя хотя бы {@inheritdoc} написать :3
            К слову, такие комменты в скриптушне, не позволяющей указать в сигнатуре принимаемые и возвращаемые типы, на самом деле не такие уж и кэповские.
            Ответить
            • Действительно, зачем интерпретатору уметь в типы, можно просто писать их в комментах. Хотя-бы аналог dialyzer есть?
              Ответить
              • Статические анализаторы есть, без них бы было вообще невозможно написать что-то сложнее ссаной цмски. Wait... Oh shi~
                Ответить
                • Интересно, через сколько лет пых таки доедет до сильной типизации?..
                  Ответить
                  • Не, ну что вы, в пхп теперь можно в сигнатурах типы объявлять. Хотя всё это напоминает какое-то прикладывание подорожника к отстреленной ноге.
                    https://ideone.com/izZjgO

                    Обратите внимание на первый нотис - указывается не строка неправильного вызова функции, а строка ее объявления.
                    Ответить
                    • > а строка ее объявления
                      Т.е. эта хрень просто добавляет в начало функции проверку и нотис?
                      Ответить
                      • Это было бы слишком просто и предсказуемо для взбесившегося шаблонизатора.
                        Да, будет проверка типа и автоприведение при необходимости...
                        ... НО только если в файле, в котором вызывается функция не прописан declare(strict_types=1);
                        ... НО это верно только для скалярных типов, для остальных при несоответствии типа всегда будет фатал еррор...
                        ... НО только до пхп7, поздние версии кидают исключение...
                        ... НО есть еще говнотип resource, мимо которого вся эта вакханалия прошла мимо...
                        Ответить
                        • > resource
                          Открытые файлы и т.п.?
                          Ответить
                          • Это такая фигня, которая похожа на объект... но не объект. Средствами языка её создать нельзя, можно только расширениями.

                            Да, обычно используется для дескрипторов открытых файлов.

                            http://php.net/manual/ru/language.types.resource.php

                            В отличие от нормальных объектов, для похапешника ресурсы — это чёрные ящики.
                            Ответить
                          • Грубо говоря, ссылка на любое неведомое сишкоблядство. Может инкапсулировать в себе любую произвольную структуру.
                            Ответить
                    • Сильная типизация != статическая. Сильная - это которая не кастит числа в строки автоматически, например. Пример сильной динамической типизации - питон. Пример слабой статической - говняшная сишка.
                      Ответить
                      • пример слабой динамической -- жопаскрипт
                        пример сильной статической -- Ocaml
                        Ответить
          • Ну, например, метод toString.
            Если не написать к нему комментарий (написать только тип возвращаемого значения), то он ругнется. Ты идешь и пишешь кеповский коммент "Convert to string". Это всё настраиваемое, конечно.
            Ответить
            • Можно написать не кэповский комментарий, а, к примеру, кратко описать формат, в котором представляется объект.

              Оффтоп: кмк, идея с toString() в жабе изначально кривовата, как всё в джаве. Почему бы не сделать что-то вроде appendTo(Appendable) / appendTo(StringBuilder) и всего одну функцию toString(), чтобы тыщи промежуточных строк не склеивать на каждый чих? Слишком похоже на C++, а C++ — это плохо?
              Ответить
              • Обычно там, где используется toString (логирование?), можно ничего не клеить и обойтись списком чанков.
                Ответить
                • > списком чанков
                  Но в жабе не сделать полиморфный список, примитивы типа чисел придётся конвертить в объекты или строки. Да и сами ноды списка надо аллоцировать. Поэтому подход со СтроителемСтрок, походу, самый эффективный.
                  Ответить
              • СтроительСтрок, походу, появился позже, чем метод кСтроке(). Вот и осталась навсегда эта схема.

                А вообще, сама идея одного метода для "преобразования в строку", имхо, порочна. В строку, которую можно будет потом распарсить в такой же объект? В строку, которую можно записать в лог? В строку, которую можно показать юзеру в интерфейсе (с локализацией)?
                Ответить
                • То ли дело ECMAScript!
                  Ответить
                • > В строку, которую можно будет потом распарсить в такой же объект?
                  Это можно вычеркнуть, ибо за такую сериализацию нужно бить.
                  > В строку, которую можно показать юзеру в интерфейсе (с локализацией)?
                  Тоже попахивает.

                  Остаются только логи или, возможно, конфиги внутренние.
                  Ответить
                  • > Это можно вычеркнуть
                    Но жабисты уже сделали пару (valueOf, toString), которая для некоторых типов работает именно как сериализация.

                    > Тоже попахивает.
                    Но в с# умудрились запихать это говно по-умолчанию.

                    О чем я и пытался сказать: абстрактное "преобразование в строку" для хуй-знает-какой-цели - это говно. Надо было сразу декларировать, что оно только для логов.
                    Ответить
                    • Согласен, но мне кажется, что
                      > Надо было сразу декларировать, что это только для логов.
                      подразумевается здравым смыслом. Никто в здравом уме не экспортирует какие-то внутренние структуры данных наружу или в персистентное хранилище напрямую. Первое изменение кода все эти toString/valueOf превратит в тыкву.
                      > Но в с# умудрились запихать это говно по-умолчанию.
                      В MS своя атмосфера.
                      Ответить
                      • > "Никто в здравом уме не"

                        Сразу прочиталось "повально все в практике". Смысл остального комментария не поменялся.
                        Ответить
                        • подумал что это мем и загуглил

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

                      Какой-то смысл он имеет только для датаклассов (тупых таких структур).
                      В C# и Kotlin вроде он выводит все поля для них.
                      Ответить
                • > СтроительСтрок, походу, появился позже, чем метод кСтроке()

                  Ну в первом релизе был StringBuffer, который тоже с первого раза сделать нормально не смогли. Фейл за фейлом...
                  Ответить
                  • > сделать нормально не смогли
                    Разве что перестарались с синхронизацией. В остальном же они одинаковые?
                    Ответить
                  • Самый забавный фейл, имхо, у них был с оператором сравнения у URL'ов, который лезет в интернет, чтобы порезольвить домены.
                    Ответить
                    • Оффтопик: операции с URL это вообще золотая жила
                      https://www.bleepingcomputer.com/news/security/iterm2-leaks-everything-you-hover-in-your-terminal-via-dns-requests/
                      Ответить
                      • Ну ещё бы http запрос кидали сразу, чтобы убедиться, что всё 200 ОК.
                        Ответить
                        • Лучше отправлять URL в Амеркомнадзор, чтобы убедиться, что они не ссылаются на контент, угрожающий американской демократии и стабильности.
                          Ответить
                      • Безопасность, HTTPS, VPN, LetsEncrypt и сливающееся плейнтекстом содержимое терминала. Модные тренды эпохи, ага.
                        Ответить
                        • А вот не тыкали бы в терминал мышкой - ничего бы не утекло.
                          Ответить
                          • У старых бородатых админов и мышек-то нет
                            Ответить
                        • Бо не надо никогда пароли юзать на боевых серверах.
                          Только приватные ключи, только хардкор. Причем внутрь файлов с ключом лазить вообще не надо.
                          Ответить
                          • Интересно, вот так кто-нибудь делает?
                            mount -o ro /dev/disk/by-uuid/[uuid] /home/[user]/.ssh
                            Ответить
                            • Медленнопост: можно ещё через overlayfs накладывать слой с отдельным authorized_keys, в который запрещена запись.
                              Ответить
                            • всмысли флешку c ключом?
                              Ответить
                              • Да. Если через overlayfs монтировать, можно даже получить ситуацию, когда попытка записать в $HOME/.ssh/authorized_keys запишет в нижний rw-слой, а файл будет подгружаться всё равно из верхнего ro-слоя.
                                Ответить
                                • <удалил хуйню>
                                  Ответить
                                  • Командой rm -rf /* ?
                                    Ответить
                                    • Да нет, я просто завёл шарманку на тему того что uid у файла будет хз какой, и что система не рабоатет если не синкать базу пользователей между машинами (ну там pam_ldap + openldap, Active Directory итд), а потом вспомнил что на флешке вообще fat32, что uid там нет, и что доступ к файлу ограничен тем как ты его прикрутишь, и тем что у домашней папки нет для всего мира ни x ни r, и туда нельзя попасть в любом случае
                                      Ответить
                                      • > на флешке fat32
                                        А вдруг у меня там ext2? Если это специальная флешка для ssh - вай нот?
                                        Ответить
                    • У Set<URL> получается интересная Big O notation на поиск.

                      Какой буквой обозначить время ответа DNS сервера?
                      Ответить
                      • Время ответа DNS сервера от количества URL'ов не зависит => это константа => сложность ровно такая же, как и для обычных типов.
                        Ответить
                        • И правда.

                          Чото я хуйню какую-тонаписал
                          Ответить
                        • Зависит от длины урла. Но т.к. длина ограничена, то всё равно O(1)
                          Ответить
                  • Они его сделали нормально, просто потокобезопасно. Как и все догенериковые коллекции же.

                    Зато теперь синхронизированный класс StringBuffer а обычный StringBuilder.
                    Очень логично же. Принцип наименьшего удивления
                    Ответить
    • # HTML 64.8%

      Да это же настоящее программирование на HTML!
      Ответить
    • Заебали со своими "composer"-ами, "build"-ами, "YAML"-ами, "grunt"-ами, пацкгагами. Дайте тупо код.
      Ответить
      • должен признать, что apt-get, npm, nuget - удобные штуки
        Ответить
        • Только вендоринг, только хардкор!
          Ответить
          • Только gcc src/* -o app && cp app /bin/app, только хардкор!
            Ответить
        • а еще sdt, yum, pacman, emerge, chocolate, и даже (извините) pear

          maven , graddle, brew, pod, дальше кто?
          Ответить
          • pip забыл! и gem! и snapd.

            а вообще первым был cpan. В 90-е все депенденсы вручную копировали (только apt-get был, и вероятно bsdшные порты) а cpan уже был
            Ответить
            • PECL, Composer, Bower, чо там у нормальных людей.
              Ответить
            • Есть ещё такая древняя штука
              https://www.gnu.org/software/stow/
              Но cpan, конечно, круче.
              Ответить
          • > дальше кто?

            nix, guix?
            Ответить
      • ЖИРаф CMS к вашим услугам. https://github.com/mpak2/mpak.su
        Ответить
    • > Also i'am like sport

      I am Groot.
      Ответить

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