1. Java / Говнокод #26435

    +2

    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
    package clojure.lang;
    
    import java.io.Serializable;
    import java.util.*;
    
    public abstract class APersistentVector extends AFn implements IPersistentVector, Iterable,
                                                                   List,
                                                                   RandomAccess, Comparable,
                                                                   Serializable, IHashEq {
    int _hash;
    int _hasheq;
    
    public String toString(){
    	return RT.printString(this);
    }
    
    public ISeq seq(){
    	if(count() > 0)
    		return new Seq(this, 0);
    	return null;
    }
    
    public ISeq rseq(){
    	if(count() > 0)
    		return new RSeq(this, count() - 1);
    	return null;
    }
    
    static boolean doEquals(IPersistentVector v, Object obj){
        if(obj instanceof IPersistentVector)
            {
            IPersistentVector ov = (IPersistentVector) obj;
            if(ov.count() != v.count())
                return false;
            for(int i = 0;i< v.count();i++)
                {
                if(!Util.equals(v.nth(i), ov.nth(i)))
                    return false;
                }
            return true;
            }
    	else if(obj instanceof List)
            {
    		Collection ma = (Collection) obj;
    		if(ma.size() != v.count() || ma.hashCode() != v.hashCode())
    			return false;
    		for(Iterator i1 = ((List) v).iterator(), i2 = ma.iterator();
    		    i1.hasNext();)
    			{
    			if(!Util.equals(i1.next(), i2.next()))
    				return false;
    			}
    		return true;
    		}
    	else
            {
    		if(!(obj instanceof Sequential))
    			return false;
    		ISeq ms = RT.seq(obj);
    		for(int i = 0; i < v.count(); i++, ms = ms.next())
    			{
    			if(ms == null || !Util.equals(v.nth(i), ms.first()))
    				return false;
    			}
    		if(ms != null)
    			return false;
    		}
    
    	return true;
    
    }

    Я решил попробовать Clojure: скачал Intellij Idea Comunity Edition поставил Cursive. Кодил значится, кодил, решил посмотре реализацию некоторых функци, начал шерстить по исходникам и дошел до джавовских исходников реализации кложура. Идея мне любезно предложила вместо декомпилированого кода скачать исходники и читать их. Я согласился и скачал, после чего увидел это. Исходное форматирование сохранено.
    Это пиздец, товарищи. Кложур как язык - очень хорош, вот прям очень. Но мне в голове не укладывается что вот эта патлатая курва https://github.com/richhickey создатель такого крутого языка, не умеет в форматирование кода. Весь репозиторий - тупо рандом. Как блять, можно делать реализацию языка и даже блять не сделать код стайл. Вы можете подумать, что это и есть код стайл. Но хер там плавал, местами есть привычное джавовское форматирование, местами куча закоментированного кода. Короче полный бардак. Вот, наслаждайтесь https://github.com/clojure/clojure

    На самом деле я не сильно то и разочарован. Да и вообще, я пытался смотреть видео с его докладами - меня просто тошнит от него. Тошнит точно так же, как от препода из универа, который вроде бы и шарит, вроде бы и что-то рассказывает, но без малейшего энтузиазма - просто поток текста, монотонный и неинтересный. У человека просто нету таланта/желания именно донести и поджечь интерес.
    За создание кложура я его уважаю. Мне просто непонятно, как человек который создал такой хороши язык, не имеет понятия код стайл. Ваши мисли?

    Запостил: Lorip1971, 11 Февраля 2020

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

    • https://github.com/clojure/clojure/commit/148a0c9aa83b12efaa43c72e5ee39baff0948f9a
      > vendor asm to sha 88a0aa8a79df7370cd178281bdf690ac2361c19a

      ASMURI=https://gitlab.ow2.org/asm/asm.git
      if [ -z ${1+x} ]
      then
        echo error: provide an asm git sha / ref
        echo recent asm tags:
        git ls-remote --refs --tags $ASMURI \
          | cut -f 3 -d / | tac | head -n 10
        exit 1
      fi


      какой менеджмент зависимостей )))
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Именно поэтому я за «пи-аш-пи».
          Ответить
        • приведи реальный пример, где пи-аш-пи хуже джавы
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • > когда надо чото рефакторить или делать find usage

              ctrl + shift + r, ctrl + shift + f

              > когда надо не выводить ошибки в браузер

              error_reporting(0);

              > когда надо многопоточность

              нет многопоточности - нет рейс кондишена!

              > когда надо профулироваться удобно

              ты просто не успел привыкнуть к «microtime(true)»‎
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • > Куда они будут выводиться, кстати?
                  Лол, никуда.
                  > Нет программы -- нет проблем. А фоновые задачи можно делать по крону.
                  Лол, так и делают.
                  > есть же "echo"
                  Воистину.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Именно поэтому я за «PHP».
                      Ответить
                      • На самом деле написать что-то рабочее, худо-бедно масштабируемое, без SQL-инъекций можно в том числе и на "PHP". Но для этого программист должен держать в голове некоторые нюансы.

                        * Нужно не забыть перепидорасить "php.ini", в частности установить правильный "error_reporting" и не забыть выключить "display_errors" на продакшоне. Есть еще куча всякой магии, меняющей, блять, поведение самого приложения, типа "request_order", "magic_quotes", "session.save_handler" и ещё куча всякого говна.
                        * Нужно повесить свой "error_handler", преобразующий классические пыхоошибки в исключения. Так достигается хоть какая-то ко-ко-ко-нсистентность в обработке ошибок, но не всех, об этом тоже нужно помнить.
                        * Руками установить ГЛОБАЛЬНО БЛЯТЬ все нужные расширения, композер в случае их отсутствия может только обосраться.
                        * Держать бутстрап приложения максимально легким. Да, дорогой джавист, тут парсить 640-килобайтные XML-конфиги - это моветон. Доводилось видеть, как чтение уебских конфигов становилось реально узким местом и такое говно "конпелировали" в "PHP" с дальнейшим помещением в "opcache". Выглядит экстравагантно, но работает действительно на порядок быстрее.
                        * Помнить, что нельзя сравнивать хеши паролей через "=="
                        * Не забыть установить мемкеш на локалхост. Наверняка захочется иметь быстрый компактный кеш, но шарить память между реквестами нельзя by design. (inb4: ололо, есть же шаред мемори)
                        * Настроить crontab с фоновыми задачами.
                        * Зареврайтить все урлы на index.php средствами веб-сервера.
                        * И помнить целый чемодан нюансов и исключений, коими изобилует практически каждая сраная функция

                        Итого получаем, что хороший "PHP"-разработчик - это такая нихуёвая зубрилка с солидным багажом знаний, применимых только в области укрощения взбесившегося шаблонизатора, а ведь все потраченные усилия человек мог направить в более полезное и широкоприменимое русло. Нахуй так жить?
                        Ответить
                        • Сможешь про кресты такое же написать?
                          Ответить
                        • >> Руками установить ГЛОБАЛЬНО БЛЯТЬ все нужные расширения

                          Это самый главный багор. Если у тебя несколько сайтов на одной машине, ты должен сначала вычислить объединение (в смысле теории множеств) расширений, требуемых каждому сайту, руками их поставить (через «PECL» ставится не всё) и прописать в «php.ini». В результате из-за одного сайта, требующего хитрое прожорливое расширение, у тебя интерпретатор будет прожорливым.
                          Ответить
                          • А еще сайты ВНЕЗАПНО могут потребовать разные мажорные версии одного и того же расширения, и тут Зеев предлагает нам только соснуть. Именно поэтому я за "Docker".
                            Ответить
                            • Да, тут уже выяснили, что расширение «pecl_http» имеет как минимум две мажорные версии (это было на момент обсуждения; теперь их уже три) с несовместимым интерфейсом. Причём в новой версии отсутствует часть функционала старой. И это не что-то сверхъестественное, это всего лишь расширение для работы с протоколом «HTTP».
                              Ответить
                        • «magic_quotes», к счастью, удалили в 5.4.

                          Часть параметров можно менять на лету вызовом функции ini_set. Они помечены в таблице как PHP_INI_ALL:
                          https://www.php.net/manual/en/ini.list.php

                          "error_reporting" и "display_errors" как раз относятся к таким динамически изменяемым.

                          Остальные параметры можно устанавливать только глобально в php.ini. Какой багор )))
                          Ответить
                          • > magic_quotes
                            Кстати, там новую "защиту" завезли, с мышиным обучением. https://wiki.php.net/pecl/mysqlnd_poc_plugins#sql_injection_protec tion_plugin_-_peclmysqlnd_sip
                            > The SQL injection protection plugin attempts to detect and block malicious SQL statements. It has two operational modes. In the learning mode it records all SQL statements and remembers them. The recorded statements are considered safe. Recoding shall be done in a safe environment, for example, in a test environment. In the operational mode the plugins verifies that all SQL statements match the lift of safe statements. All SQL statements that match are executed. The other ones are rejects. Execution is prevented.
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                            • Страшновато.

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

                              2. Как в рабочем режиме этот плагин отличит «хорошие» запросы от «плохих»?
                              Ответить
                            • Мне кажется, идея очень хорошая. Код дописывают не до уровня "я анскильный пхпушок, мне плевать на инъекции", а до уровня "ну кажись всё предусмотрел". Любой код ревью делается такими же питушками с ограниченной внимательностью на этапе компиляции (для динамической питушни), в рантайме сидит только админ, но он не читает логи. И тут дополнительная проверка входит в чат как раз кстати.

                              Системы такого уровня позволяют хоть немного заглянуть в будущее и отловить ошибки и атаки, которые ещё не изобрели.
                              Ответить
                            • Полнейшее и лютейшее говно, как и любая другая попытка применять «мышыное обучение» для блокировки чего-либо. Такая хуйня лишь обеспечивает недоступность сайта у нескольких процентов пользователей, а админу — 24/7 разгребания тикетов о ложных срабатываниях этого говна.

                              От «SQL-инъекций» прекрасно защитит какой-нибудь статический анализатор, который ругается на скармливание в «$connection->prepare()» любой динамически генерируемой строки (а всякие mysql_query(), разумеется, по-умолчанию идут нахуй).
                              Ответить
                              • Придётся изобрести софт с мышиным обучением, который будет разгребать это говно. А потом придётся изобретать софт с мышиным обучением, который будет разгребать разгребальщик этого говна.
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Программист - недетерминированная ненадёжная питушня, которая часто даёт сбои. Работает хуже, чем нешильдированная электроника в условиях сильных электромагнитных полей и радиации. Формализуемые алгоритмы следует исполнять на ЭВМ. Подвопроссную питушню следует анализировать статически автоматическим анализатором.
                                  Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • Приведи реальный пример страницы, из которой ИЕ делает хсс.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Спасибо. Загуглил.

                                      The script on this page will alert a string.  Assume 
                                      that string is a persistent injection (where quote 
                                      <br>
                                      characters are filtered so that normal XSS is not
                                      possible).  IE8's filters can be abused to enable XSS
                                      <br>
                                      by providing a "gratuitous GET parameter".  For example,
                                      try <b>
                                      http://0x.lv/simple.html?foo=<script></b>
                                      <p>
                                      
                                      <script>alert('<img src=x:x onerror=alert(0)//>')</script>


                                      http://p42.us/ie8xss/
                                      Ответить
                        • >> такое говно "конпелировали" в "PHP"

                          Единственная вменяемая структура данных — массив.
                          Ответить
                        • показать все, что скрытоvanished
                          Ответить
                        • > Помнить, что нельзя сравнивать хеши паролей через "=="
                          Почему?
                          Ответить
                      • показать все, что скрытоvanished
                        Ответить
                • показать все, что скрытоvanished
                  Ответить
              • показать все, что скрытоvanished
                Ответить
    • показать все, что скрытоvanished
      Ответить
    • Ну всё-таки немного заметно, что у него есть какое-то форматирование, только какое-то припизданутое и мешание табов с пробелами всё портит.
      Ответить
    • Говорят, кто в 2к20 не пишет бэкэнд на Java Script - в дурки лежит
      Ответить
      • В чёрном-пречёрном лесу на чёрной-пречёрной поляне стоял чёрный-пречёрный дом, а в нём — чёрный-пречёрный компьютер, подключенный к чёрному-пречёрному дизель-генератору. В этом доме чёрный-пречёрный мальчик однажды написал бэкэнд на «Java Script», и у него отвалилась жопа.

        Именно поэтому я за «PHP».
        Ответить

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