Змея / Говнокод #17792 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
def _message_handler_thread(self):
        self._nick_change_failed = []
        while self.running:
            msg = self._message_queue.get(True)
            text = msg.get_data()
            conn = msg.get_connection()
            args = text.replace("\r", "").replace("\n", "").split(" ")
            command = args[0].upper()
            command_args = args[1:]
            if command == "NICK":
                if len(command_args) < 1:
                    self._send_not_enough_parameters(conn, command)
                else:
                    ident = self._clients[conn].identifier if self._clients[conn].identifier else None
                    if not self._set_nick(conn, command_args[0], ident):
                        self._nick_change_failed.append(conn)
            elif command == "USER":
                if conn in self._clients:
                    if len(command_args) < 2:
                        self._send_not_enough_parameters(conn, command)
                    else:
                        ''''
                        self._send_lusers(conn)
                        self._clients[conn].real_name = command_args[:]
                        self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
                                                               command_args[0] + "@" + self.name
                        '''
                        self._set_nick(conn, command_args[0], command_args[1])
                        self._send_motd(conn)
                else:  # Another way to identify is USER command.
                    if len(command_args) < 2:
                        self._send_not_enough_parameters(conn, command)
                    elif conn in self._nick_change_failed:
                        self._nick_change_failed.remove(conn)
                    else:
                        if self._set_nick(conn, command_args[0], command_args[1]):
                            self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
                                command_args[0] + "@" + self.name
                            self._send_motd(conn)
            elif command == "PRIVMSG" or command == "NOTICE":
                if len(command_args) < 2:
                    self._send_not_enough_parameters(conn, command)
                else:
                    message_text = command_args[1] if not command_args[1][0] == ":" else \
                        text.replace("\r\n", "")[text.index(":")+1:]
                    src = self._clients[conn].get_identifier()
                    dest = command_args[0]
                    if not dest.startswith("#"):
                        for clnt in self._clients.values():
                            if clnt.nick == dest:
                                clnt.connection.send(
                                    ":%s %s %s :%s" % (src, command, dest, message_text)
                                )
                                break
                        else:
                            self._send_no_user(conn, dest)
                    else:
                        for chan in self._channels:
                            if chan.name == dest:
                                self._channel_broadcast(conn, chan, ":%s %s %s :%s" %
                                            (src, command, dest, message_text))
                                break
                        else:
                            self._send_no_user(conn, dest)
            elif command == "JOIN":
                if len(command_args) < 1:
                    self._send_not_enough_parameters(conn, command)
                elif not all(c in ALLOWED_CHANNEL for c in command_args[0]) and len(command_args[0]):
                    self._send_no_channel(conn, command_args[0])
                else:
                    for chan in self._channels:
                        if chan.name == command_args[0]:
                            chan.users += 1
                            self._clients[conn].channels.append(chan)
                            self._send_to_related(conn, ":%s JOIN %s" % (self._clients[conn].get_identifier(),
                                                                         chan.name), True)
                            self._send_topic(conn, chan)
                            self._send_names(conn, chan)
                    else:
                        chan = Channel(command_args[0], 1)
                        chan.users = 1  # We have a user, because we have created it!
                        self._channels.append(chan)
                        self._clients[conn].channels.append(chan)
                        self._clients[conn].send(":%s JOIN %s" % (self._clients[conn].get_identifier(),
                                                   command_args[0]))
            elif command == "PART":
                if len(command_args) < 1:
                    self._send_not_enough_parameters(conn, command)
                else:
                    for chan in self._channels:
                        if chan.name == command_args[0]:

                            self._send_to_related(conn, ":%s PART %s" % (self._clients[conn].get_identifier(),
                                                                         command_args[0]))
                            self._clients[conn].channels.remove(chan)
                            chan.users -= 1
                            break
...

Я писал сервер для IRC...
Больше говнокода: https://github.com/SopaXorzTaker/irc-server/

Запостил: GoUseGitHub GoUseGitHub, (Updated )

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

    • ..., то ли дело "PHP"
      А в сравнении с чем питон уродлив и по каким причинам?
      Ответить
      • c большинством языков и их конвенциями. ява, шарп, да и даже php, несмотря на уебищные :: и $ местами гораздо приятнее. ПЕП8 можно заменить одной строчкой "ЭКОНОМЬ СУКА СИМВОЛЫ, БАЙТЫ И НА ЖЕНЩИНАХ", глазом сложно отлавливать блоки кода.
        Ответить
        • Он нихера не экономит байты и символы. На квадропробелах вместо табов вся экономия теряется.
          Ответить
      • Питон уродлив в сравнении с сишарпом, джавой и всякими груви. Он нечитабелен из-за отсутствия кёрли брэкетс и присутствия надобности следить за пробелами. У него говнейшая конвенция, сравнимая по уродству только с ПХП.
        При взгляде на питоний код, глаза сначала собираются в кучу, а потом разбегаются (в ужасе, при виде андерскорсов, мелкобуквенности и визуального отсутствия блоков).
        Ответить
        • > У него говнейшая конвенция, сравнимая по уродству только с ПХП.

          Чо с PSR-то не так? Переводы строк после списка аргументов?
          Ответить
            • psr-1/4.2
              насколько понимаю, это специально сделано так, чтобы старые библиотеки пока не ебались с переписыванием всего.
              Ответить
        • > говнейшая конвенция
          Зато она хотя бы есть, в отличие от некоторых языков.

          > надобности следить за пробелами
          Ты так говоришь, как-будто на других языках не надо...
          Ответить
          • >Ты так говоришь, как-будто на других языках не надо
            Надо. Но на перечисленных мной, ничего не отвалится из-за непоставленного пробела.
            И вообще, для меня, отделять блоки кода пробелами – нечитабельный вариант. То ли дело няшные скобки.
            Ответить
            • > ничего не отвалится из-за непоставленного пробела

              Ну вот из многолетней практики могу сказать, что ни разу ничего не отваливалось из-за пробела. Разве что в случаях, когда я набирал небольшую прогу целиком прямо в интерпретаторе, и то всего пару раз. В шарпе и жабе таких проблем, конечно, нет - в основном по причине отсутствия интерпретатора.

              Питон - говно, но уж точно не из-за пробелов.
              Ответить
              • >Питон - говно, но уж точно не из-за пробелов.
                А какой язык(и) в вашем персональном топе на сей момент?
                Ответить
                • Всё говно (tm)

                  Golang внезапно взлетел, хотя недостатков там более чем (женерики? нетривиальные структуры данных в стандартной либе?). Но он уж точно лучше пистона для всяческого системного программирования, ибо

                  1. Типизация, натив, мгновенная компиляция.
                  2. Опупенный инструментарий из коробки (gofmt, godoc, go get, профилировщик и т.п.).
                  3. Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
                  4. СОПРОГРАММЫ, ПАРАЛЛЕЛИЗМ, ПИРФОМАНС.
                  5. Весьма приличная стандартная библиотека.
                  Ответить
                  • >женерики
                    Женерики там выглядят как уёбищная кодогенерация, ну по сути их отсутствие.

                    А так мне тоже нравится.
                    >на выходе один переносимый бинарь.
                    > Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
                    Жутко пухлый по двум вышеописанным причинам. Такшта третий я бы внёс в спорные - никто статическую линковку не отменял.

                    В остальном го мне тоже доставляет, тем более надеюсь они его будут развивать. Ну и js, хоть какой он не уродский, хоть как его не любят, но другого у нас нету.
                    Ответить
                    • Из спорных моментов ещё - src/pkg/bin неймспейсы и GOPATH. Не очевидно, как это дело интегрировать в большие репы с обилием других языков программирования.
                      Ответить
            • >отделять блоки кода только пробелами
              Фикс.
              Хотя, для условий и циклов с одной инструкцией – и пробел сойдёт. Но уж никак не для методов и многострочных тел циклов. Это только на мой слепошарый взгляд, конечно же.
              Ответить
              • Откуда то в памяти всплыло "аа язык говно больше 200 параметров в метод передать нельзя". Нормальные люди в питоне не пишут циклов. Ну или они как правило коротки. У питона есть все инструменты чтобы не писать вложенные простыни.
                Ответить
                • > язык говно больше 200 параметров в метод передать нельзя
                  Помню, было обсуждение Array из JS (на ГК? там? не помню, где). Мужик хотел запилить автогенерацией массив и не смог пихнуть в конструктор не то 32К, не то 64К аргументов.
                  Ответить
              • То что программист продуцирует поток мысли - это его проблемы а не языка. Хорошо конечно когда скобочки помогают чтению 6х вложенной херотени, но от этого тот код внезапно нормальным не становится.
                Ответить
            • >отделять блоки кода пробелами – нечитабельный вариант. То ли дело няшные скобки.
              А потом берутся всякие
              if(blah){ return 1;
              }
              else
              {
              return hui+1;}
              Ответить
              • Но тут можно автоматом выправить, в отличие от питона, который можно исправить только, если переписать код на C++ (заодно и пирфоманс будет). Или свернуть в однострочник для пущей непонятности и малого размера, как делают с JS.
                Ответить
                • Я имею в виду, что пробелы необходимы что в питоне, что в сишечке, если, конечно, пишется не заведомо говнокод.
                  Ответить
                      • Лол. Скобок хочется. Кудрявых.
                        Лучше на груви покодить, короче. Или на котлине каком-нибудь.
                        Ответить
                      • Так-то в питоне и табами отбивать можно, только если где-нибудь в середине кода по ошибке отобьешь пробелами - часы увлекательной отладки гарантированы.
                        Ответить
                    • Но если для хорошего стиля пробелы нужны и в питоне, и в си, то зачем писать еще и скобочки?
                      Ответить
        • > в ужасе, при виде андерскорсов, мелкобуквенности

          Какие мы нежные.

          Мелкобуквенность много где ещё используется - GNU, stl, boost, linux вообще целиком используют этот стиль именований. Я подозреваю, что он родился из Lisp-стиля путём замены тире на подчёркивания (my-cool-thing -> my_cool_thing). Ибо гнушники знатные любители всяческих лиспов.
          В гномьих либах вроде Glib, GTK, GIO, etc. используется тот же стиль именований, что и в пистоне.

          Мне лично вообще индиффирентно, как называть: like_this, LikeThis, Like_this, likeThis, ... Главное - чтобы в проекте было как можно меньше вариаций.
          Ответить
          • Я думаю, что из ФОРТРАНА, там же как-бы не было строчных букв, так что ни верблюжий стиль, ни паскалевский не получился бы. А дефисы писать тоже не получилось бы изза того, что они бы интерпретировались как минус.
            Ответить
            • С фортраном вообще странная история. Писать там можно как угодно, просто компилятор по дефолту маппит все имена в нижний регистр, при этом люди чаще всего пишут всё в верхнем регистре.
              Ну и кэйс-инсенситив не означает, что нельзя писать в верблюже-паскальем стиле 🙂 В паскале же тоже кейс-инсенситив.
              Ответить
          • Некоторые типа тру бородатые кодеры используют и венгерскую нотацию, но мне-то пофиг.
            То, что питон и его стиль именования уродлив – это только моё ничтожное мнение, которое должно волновать кого-то настолько же, насколько меня задевают андерскоры и лоуверкэйс: бугуртить можно сколько угодно, но менять свои предпочтения или лезть со своими в язык – как-то неправильно что ли.
            Ответить
        • > нечитабелен из-за отсутствия кёрли брэкетс
          Фан фэкт: блоком считается именно отступ пробелами, а { ограничители блока } появились в сишке для того, чтобы из неё можно было вычистить все пробельные символы и переносы на новую строку. Таким образом исходник становится короче и на перфоленту можно уместить больше кода.
          Хотя мне тоже неудобно без фигурных скобочек.
          Ответить
        • Я вынужден ответить кратко
          На Ваши глупые слова
          Вам невдомек — они осадком
          На сердце лягут навсегда
          Как вы могли сказать такое
          Сравнить Поэта и помои?
          Как могут быть мои стихи
          Похожи на обжектив си?
          Вот был хотя бы он французский
          Сей безалаберный язык —
          Еще б задумался на миг
          Вы видно пили без закуски
          И посему — с глаз сгиньте прочь -
          Не в силах Вам, мой друг, помочь
                                                                               А.С.Пушкин из могилы
          Ответить
          • Снова
                буржуйская
                    бестия
            Ругает
                отступы
                    бестолку!
            Как будто
                не обязательно
                    это больше нигде?
            Красного
                кода работник
                    строго следует отступам,
            Только
                лентяй неученный
                    строки кидает ворохом!
            Нечего
                блокам путаться
                    как паукам в бороде!
            Ответить
            • ехал():
                  [отступ через отступ()]:
                      видит(отступ(отступ(отступ))
                  сунул = [отступ в отступ()][отступ]
              
              отступ():
                  отступ(отступ(отступ))
              Ответить
                • > Не хватает закрывающей скобки.
                  Опыт лиспера не пропьешь!
                  Ответить
                  • Кстати, это да, вырабатывается. Меня просто в выворачивает, когда в книжках с математическими формулами замечаю, что забыли скобку. Как можно быть таким невнимательным.
                    Ответить
            • Как ты посмел,
                            буржуин 
                                    проклятый
              Породией 
                      мнить 
                           свою грязь?
              Рабочему классу 
                              бумажкой 
                                       мятой
              Тыкать в лицо 
                             решил, 
                                    мразь?
              
              Тешиться
                       хватит 
                               слов 	
                                    проституцией
              Довольно 
                      попыток 
                              смешных!
              Такие 
                    певцы 
                          мировой 
                                 революции
              В Советской стране
                                 не 
                                   нужны!
                                                                                           Маяковскый
              Ответить
              • Фу, как уродливо, без скобок вообще нихуя не понятно!
                Как ты посмел, {
                  буржуин {
                    проклятый
                  }
                }
                Породией {
                  мнить {
                    свою грязь?
                  }
                }
                Рабочему классу {
                  бумажкой {
                    мятой
                  }
                }
                Тыкать в лицо {
                  решил, {
                    мразь?
                  }
                }
                Тешиться {
                  хватит {
                    слов {
                      проституцией
                    }
                  }
                }
                Довольно {
                  попыток {
                    смешных!
                  }
                }
                Такие {
                  певцы {
                    мировой {
                      революции
                    }
                  }
                }
                В Советской стране {
                  не {
                    нужны!
                  }
                }
                Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8