1. Python / Говнокод #17181

    −122

    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
    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
    class OutSplitter(object):
        """ splitter """
        
        def __init__(self, out_splitter):
            self.__pipes=None
            if isinstance(out_splitter, OutSplitter):
                    self.__pipes = Set(out_splitter.pipes)
            elif out_splitter:
                if hasattr(out_splitter,"__iter__") : #
                    for pn in out_splitter:
                        self.add_pipe(pn)
                else:
                    self.add_pipe(out_splitter)
                       
        @property
        def pipes(self):
            return self.__pipes
        
        def add_pipe(self, pn):
            if isinstance(pn, basestring):
                if pn == 'stderr': x = sys.stderr
                elif pn == 'stdout': x = sys.stdout
                else: 
                    p = os.path.dirname(pn)
                    if p and not os.path.exists(p):
                        os.makedirs(p)
                    x = open(pn,'w+')
            else: x = pn
            
            if hasattr(x, 'write') and hasattr(x, 'flush'):
                if self.__pipes is None:
                    self.__pipes=Set()
                self.__pipes.add(x)
        
        def write(self,s):
            if self.__pipes:
                for p in self.__pipes:
                    p.write(s)
        
        def flush(self):
            if self.__pipes:
                for p in self.__pipes:
                    p.flush()
                    
    class CatalogsWalker(OutSplitter):
        
        def __init__(self,catalogs,out_splitter=None):
            OutSplitter.__init__(self,out_splitter)        
            self.__catalogs = catalogs
            self.__file_counter, self.__catalog_counter, self.__start_time, self.__speed = 0, 0, 0, 0
            
        def __iter__(self):
            self.__file_counter, self.__catalog_counter, self.__start_time, self.__speed = 0, 0, 0, 0
            self.__start_time=time.time()
            for catalog in self.__catalogs:
                for p,d,ns in os.walk(catalog): 
                    _ = d;
                    self.__catalog_counter+=1
                    for n in ns:
                        self.__file_counter+=1
                        self.__speed=self.__file_counter/(time.time()-self.__start_time)
                        self.fanny_indicator(self.__catalog_counter, self.__file_counter, self.__speed)
                        yield p,n
                        
        @property
        def catalog_counter(self):
            return self.__catalog_counter    
        
        @property
        def file_counter(self):
            return self.__file_counter
        
        @property
        def start_time(self):
            return self.__start_time
        
        @property
        def speed(self):
            return self.__speed    
        
        def fanny_indicator(self,p,n,s):
            if self.pipes:
                _result="\rcataloges:" + repr(p).rjust(8) + "\tfiles:" + repr(n).rjust(13) + "\tspeed: %12.3f"%s + " files/s"
                self.write(_result)
                self.flush()

    Catalogs walker - для обхода списка деревьев каталогов
    OutSplitter - для управления потоками вывода результатов работы
    Весь код сюдя не влез но идея понятно
    Что плохо с кодом? Любая критика приятна

    Запостил: apgurman, 26 Ноября 2014

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

    • Более подробное описание и весь код см здесь http://python.su/blogs/personal/127-poisk-dublikatov-fajlov-v-katalogah-i-poisk-nedostayuschih-fajlov-/
      Ответить
      • >http://python.su/
        Что хорошего в этой помойке? Кстати, там парсер ббкодов нормально заработал?
        Ответить
        • Это для тех, кто английский не понимает.

          Один такой долгое время читал маны по мускулю на mysql.ru в переводе отечественных быдловебкодеров
          Ответить
          • Нет, я не против русскоязычных ресурсов, я спрашивал за этот конкретный.
            Ответить
          • Нужно любить свой родной язык. И любить своих земляков-коллег. Одна из главных проблем России, это преклонение ее жителей перед всем иностранным. Хотя с удовольствием приму в дар ссылки на любые англоязычные ресурсы.
            Ответить
            • Блядь, откуда ты выполз, ватник.

              Я не преклоняюсь перед иностранным, но аналога, например, stackexchange/stackoverflow, где можно перевести вопрос на simple english и получить нормальный ответ, в рунете просто нет. И еще очень много чего нет.
              Ответить
              • Прочел ниже. А, ты за границей живешь? Пройдет. И это, не все здесь из России.
                Ответить
              • > в рунете просто нет
                Что-то мне намекает, что их нет и в дойчнете, и у французов нет, и у японцев с китайцами нет...
                Ответить
                • Ну, например, немецкая википедия на порядок качественней русской (российской?), но в общем да.
                  Ответить
              • >где можно перевести вопрос на simple english
                В смысле перевести, вбить в гугл и получить ссылку на SE. Как форум ресурс - говно.
                Ответить
        • Что хорошего? Ну например то, что это пока единственная "помойка", которую я нашел, чтобы опубликоваться целиком. Где еще можно послушать критику?
          Ответить
          • Не знаю где, но сам форум на меня произвел очень унылое впечатление.
            Ответить
            • славоник пиздит на рнр, но почему-то парсер ббкодов на их питоновском форуме в теге code уже какой год глотает пустые строки, а вот ни на одном бесплатном php двиге я такой хуйни не наблюдал.
              Ответить
    • вам сюда
      http://codereview.stackexchange.com/
      Ответить
      • Что-то я тоже не нашел там опубликованных целиком программок. Там тоже в основном только эпизоды. Попробую конечно, но скорее всего, там такие же умники пошлют еще куда-то.
        Ответить
    • Так напишет кто-нибудь что-нибудь конструктивное? или так и будут по кругу посылать?
      Ответить
      • 1. почему python 2?
        2. в чем смысл этого кода? В тулзе которая обходит папки и считает время? Вы пайтон изучаете?
        3. "fanny" -- вентиляторный? Или Каплан? Любить нужно русский язык, как Вы верно заметили, а вот английский программисту не плохо бы знать.
        4. Интерфейс у fanny невнятный и magic numbers внутри
        5. Вместо проверки на write и flush, лучше юзать ABCMeta. Это же как-бы API, считается что некто может разработать новый пайп (для писания в TCP сокет видимо, или в лог по syslog), так что утка тут не нужна.
        6. Вообще есть io.IOBase, так что всё выглядит немного велосипедом
        7. Зачем вокер наследник аутпутсплитера? Хождение по папкам -- частный случай писания в пайп? Тут классическая ошибка ООП проектирования: использование наследования для реюзания кода. По факту же нужда _ДЕЛЕГАЦИЯ_. Передавайте вокера (а еще точнее лист io.IOBaseов) в ваш вокер
        8. и фанни свой тоже сделайте ABCMeta, и назовите его Reporter, и сделайте у него нормальный интерфейс (например метод add_progress), чтоб не завязываться именно на текстовый аутпут. А если завтра нужно будет через Tk в GUI результат выводить? Пусть вокер получает Reporter, а реализация репортера (TextReporter) получает стрим (в нашем случае stdout какой-знить или файл).
        9. И следующий раз начинайте всё таки с бизнес-задачи, потому что не очень понятно зачем вообще всё это
        Ответить
        • 10. Если pipes делать не None а [], то не надо будет их проверять ифом
          Ответить
          • Ну вот здесь не соглашусь. pipes у меня Set.
            И иногда там наверху перед тем как делать кучу работы(например сортировки перед в каком-нибудь too_funny_print) я проверяю например if out_splitter.pipes is None:
            Какой смысл что-то там сортировать для вывода, если выводить некуда?
            В Вашем врианте эта проверка дороже, делать ее все же стоит. Но все равно спасибо и я еще подумаю на эту тему.
            Ответить
            • В пайтоне красота и простота кода важнее производительности.
              Если профилирование программы (с помощью cProfile например) не доказало что это сортировка занимает 80% времени и является боттлнеком, то лучше все таки писать меньше букв и не думать о цене сортировки
              Ответить
              • Если думать о том чтобы писать меньше букв то как минимум стоит забыть об OOП. Знаете сколько строчек добавилось когда я вынес funny_indicator наружу и убрал наследование от OutSplitter? А сколько я еще добавлю когда сделаю эту утилиту в стиле правильного ООП?

                Тем не менее я Вам, Анонимус, очень благодарен за очень конструктивную критику. И надеюсь что покритикуете еще когда я все перепишу "по уму"
                Ответить
                • ООП нужно для структурирования кода, легкости его понимания и модификации, а не ради производительности) Жертвовать красотой кода ради недоказанного (!!!) перформанс буста для простой (!!!) задачи на скриптовом (!!!!) языке не следует как мне кажется)
                  Ответить
                  • Вы не поняли, этот пост был про количество буковок которые нужно напечатать ради красоты и структуированности кода в ООП. Програмки на C намного короче программок на C++.

                    О производительности следующий пост
                    Ответить
                    • программки на С намного проще программок на С++
                      Ответить
                      • > программки на С намного проще программок на С++

                        Они сложнее, но сложности эти созданы на ровном месте.

                        Я уже всем сердцем ненавижу сишный клиент зукипера - течёт как сито и рейс-кондишены вылезают в самый неподходящий момент.
                        Ответить
                        • Все сетевики, ну может не все, но 90% пишут на C.
                          Ответить
                          • сетевики это что?
                            которые скс прокладывают?
                            Ответить
                            • Сетевые супермаркеты)
                              Ответить
                            • Сетевики Это например те кто пишет реализации TCP/UDP iptab
                              Ответить
                              • Ну ядра-то понятно, что на сишке в основном пишутся.
                                В мире кроме ядер очень много всего, связанного с сетями.
                                Ответить
                                • Сетевики Это например те кто пишет реализации стека сетевых протоколов, cетевые приспособы типа Firewall, iptsble, SDN, NFV, просто сетевые драйверы, сетевые фраймвоки Даже WEB серверы чаще пищут на С
                                  Ответить
                                  • Ты собрался писать драйвера tcp/ip или веб-сервера? У нас будет новый Царь?
                                    Ответить
                                • А что кстати кроме WEB серверов и другого что юзает sockets написано в user space и напрямую касается сети? Не думаю, что сейчас последует длинный список
                                  Ответить
                                  • а у меня впечатление, что веб-серверы чаще пишут на java
                                    что никак не мешает, если надо, запилить свой однонодовый веб-сервер на с++ с отличными показателями производительности ценой, скажем, 200 строк кода

                                    то, что ты перечислил, не имеет сложной бизнес-логики
                                    т.к. программы на сишке проще, чем на с++
                                    попробуй на сишке написать опенофис
                                    Ответить
                                    • На c++ ты(раз уж перешли на ты) напишешь неплохой сервер и даже может быть сравнимый с по производительности с си Но только благодаря тому что за этот сервер 98% работы будет делать ядро и sосkets epool threads написанные на си Ты скорее всего будешь использовать new который будет выделять память malloc(ом) тоже написанным на си. И поверь мне талогики не меньше чем опенофис.
                                      Опенофис не писал на си Но сложнейшую скада-систему с графикой и многопоточностью под еще под DOS!!! писал на asm 8086.
                                      Ответить
                                      • > Програмки на C намного короче программок на C++.
                                        причем тут то, какой процент работы берёт на себя ядро?
                                        речь о том, как решаются одинаковые бизнес-задачи на как бы разных языках, где с++ выступает в роли говна, а С в роли спасителя

                                        > и многопоточностью под еще под DOS на asm 8086
                                        напрашивается логичный вывод - программки на асм короче программок на С
                                        Ответить
                                        • Я уже писал, что я имел ввиду под тем что пишут "реальные сетевики")) реализации стека сетевых протоколов, cетевые приспособы типа Firewall, iptables, SDN, NFV, просто сетевые драйверы, сетевые фраймвоки Даже WEB серверы
                                          Ответить
                                        • Не конечно. И программки на с не короче чем на С++. Они короче программок написанных на с++ в строгом соответствии с ООП. И на С++ можно написать все что на си. Но вот поправить миллионы строк с++ кода не всегда получится так же просто как на cи. Пример: ты не всегда ведь явно вызываешь деструктор ? и конструктор не всегда. А теперь представь, что твоя програмка это 10 000 файлов это все один процесс в 5 000 лежит некий фукционал который ты хочешь заставить использовать другую хип Я не говорю уже про другую физическую память А хотябы другой хип менеджер. Так вот в си я это сделаю просто перелинковав по другому эти 5000 файлов а с++ ты это вообще не сделаешь не пререписав каждый класс да еще не добавив кучк других.
                                          Ответить
                                          • > твоя програмка это 10 000 файлов это все один процесс в 5 000 лежит некий фукционал
                                            охохо пошли реальные цифры из сишных проектов в 10к файлов на один процесс?

                                            кстати, каюсь
                                            ни разу не пришлось менять аллокатор
                                            почему-то на стандартном всё устраивало
                                            проблемы сетевиков?
                                            Ответить
                                            • > проблемы сетевиков?
                                              Если в линупсячем ядре захочется поменять настройки аллокации в какой-то подсистеме, нужно будет также пройтись по всем вызовам и подправить флажки.
                                              Ответить
                                              • Роман, Вы про что говорите. Здесь не про подсистему Здесь про часть одного процесса идет речь - спорее про подпрограмму, функцию, класс ....
                                                Ответить
                                            • Нет это не было связано с сетью. И это очень уж частный случай. Но факт есть факт.
                                              Ответить
                                        • В чем-то я с тобой соглашусь. Но сам подумая std:list это же библиотека? на си тебе прийдется писать свой лист да? но если он уже имеется у тебя ты считаешь код этой библиотеки кодом твоей программы? А если по честному все писать то по правилам ООП длиннее Заметь я не про с++ и си А про ООП и Функциональное программирование.
                                          Ответить
                                          • > Функциональное программирование

                                            процедурное?
                                            Ответить
                                          • почему-то все новички с сишным бекграундом сразу же начинают про ООП
                                            ООП - это нормально
                                            в любом хорошем сишном проекте есть ООП
                                            где сущности выделены в своих структурах со своими данными, где есть место абстракции и полиморфизму, даже виртуальным методам
                                            просто вместо сахарка это всё приходится делать руками, всё руками
                                            Ответить
                                            • defecate-plusplus, никто не говорит что ООП это плохо Я говорил что может читать и проще но кода писать больше. Может это даже не про ООП а про "правильный стиль ООП" Предлагаю оставить дискуссию на эту тему.
                                              Ответить
                                              • > но кода писать больше.
                                                Yes, you must write more code in class implementation (once). But you'll have less code when using that class (many times).
                                                Ответить
                                                • >> Yes, you must write more code in class implementation (once). But you'll have less code when using that class (many times).
                                                  В чем разница с написанием и использованием библиотек при процедурном программировании? Ну кроме субъективного мнения "так нагладнее и удобнее"
                                                  Ответить
                                              • >но кода писать больше
                                                Который по нормалу генерирует IDE.
                                                Ответить
                                      • >> и многопоточностью под еще под DOS!!! писал на asm 8086.

                                        Расскажите пожалуйста, что Вы подразумеваете под "многопоточностью" тут, и как это было реализовано? Через прерывания?
                                        Ответить
                                        • >> "Расскажите пожалуйста, что Вы подразумеваете под "многопоточностью" тут, и как это было реализовано? Через прерывания?"
                                          Анонимус, я Вас понимаю, и Вы правы. В современных понятиях это многопоточностью трудно назвать. Но тогда почти 25 лет назад под DOS мало кто использовал слово thread. Я и мое окружение его даже не знало. Называли мы это многопоточностью. И в какой-то мере оно так и было. В современных понятиях это больше multithreading или может быть "просто параллельное исполнение" или его эмуляция. Использовали и прерывания (по таймеру в том числе) и "шитый код". https://en.wikipedia.org/wiki/Threaded_code.
                                          Ответить
                                          • Ну я потому и спросил как это было сделано.

                                            Можно сделать кооперативную многозадачность на одном процессоре на одном процессе на одном потоке бесконечным евент-лупом (asyncio в пайтоне так работает). Можно сделать по таймеру с прерыванием, можно еще как-то)
                                            Ответить
                                            • Это все приколно пообсуждать. Просто границы между многозадачностью, многопоточностью, многосредовостью, просто параллелным выполнением кода относительны и сильно зависят от контекста. Сейчас нет времени это детально обсуждать. Мне тогда было чуть за 20 и многое виделось не так. А рыться в покрытых паутиной кодах и переопределять/переназывать нашу доморощенную многопоточность нет ни времени, ни желания .
                                              Ответить
                        • справедливости ради надо сказать что рейскондишены я встречал даже в джаве, хотя огромное количество информации в джаве посвящено мемори модел и синхронизации)

                          И течку памятью (ну точнее распухание кучи до OutOfMemory) я тоже встречал)

                          Так что виноват тут не си)
                          Ответить
                          • Чисто сишный прикол - сегфолт. Даже не зарепортишь. Жава хоть стектрейс высирает.
                            Ответить
                            • > Даже не зарепортишь.

                              Сегфолт прекрасно обрабатывается. Нужно только включить генерацию coredump-ов. Открываешь корку в дебаггере, смотришь состояния всех тредов.
                              Ответить
                              • Прости, это ты кому рассказываешь? Юзеру?
                                Ответить
                                • Ну например в ulimit это можно включить, это не сложно.
                                  Ответить
                                  • Что включить? Упала у юзера прога с сегфолтом, что ему прикажешь делать?
                                    Ответить
                                    • В джаве тоже дамп надо явно включать, а стек-трейс может быть сломан если это не дебаг версия
                                      Ответить
                                      • > а стек-трейс может быть сломан если это не дебаг версия
                                        >В джаве
                                        Как?
                                        Ответить
                                        • javac -help
                                          Usage: javac <options> <source files>
                                          where possible options include:
                                            -g                         Generate all debugging info
                                            -g:none                    Generate no debugging info
                                            -g:{lines,vars,source}     Generate only some debugging info


                                          В коммерческом софте именно так и делают. А еще и скрамблят гады, чтоб никто не расковырял.
                                          --------
                                          А еще может быть -XX:-OmitStackTraceInFastThrow
                                          Ответить
                                          • Опа. То есть, если софт с -g:none упадет с исключением, что вылезет?

                                            Кстати, софт на жаве же один хрен декомпилируется 1 в 1,если не обфусцировать?
                                            Ответить
                                            • class Foo {
                                                public static void main(String[] args) {
                                                        throw new RuntimeException("DDD");
                                                }
                                              }


                                              javac -g:none Foo.java
                                              java Foo
                                              Exception in thread "main" java.lang.RuntimeException: DDD
                                                      at Foo.main(Unknown Source)

                                              Unknown Source. Добавьте к этому обфускацию и будет x(Unknown Source). Очень удобно.
                                              ------
                                              не 1 в 1, но достаточно чтоб можно было прочитать и понять.
                                              Ответить
                                              • То есть, просто строчку не указывает?

                                                >не 1 в 1, но достаточно чтоб можно было прочитать и понять.
                                                А зачем тогда это делать?
                                                Ответить
                                                • 1) да
                                                  2) делать что? Обфусцировать код?

                                                  Чтоб враг не получил читаемый компилируемый исходник твоего продутка
                                                  Ответить
                                              • > обфускацию
                                                Обфускаторы же маппинг имен сохраняют в файлик. По крайней мере жабий ProGuard так делал.
                                                Ответить
                                                • Могут сохранить, да)

                                                  Но -g:none, один хрен, усложнит разбирательство
                                                  Ответить
                                    • > Упала у юзера прога с сегфолтом, что ему прикажешь делать?
                                      Отправить core dump разрабу (это можно даже на автомате замутить, в духе "отправить отчет об ошибке"). Жопа в том, что корка может весить несколько гигов и содержать какую-нибудь конфиденциальную инфу.
                                      Ответить
                                      • >> даже на автомате замутить
                                        dr.watson же))
                                        http://www.panoramafactory.com/drwtsn32.gif
                                        Ответить
                                      • >core dump
                                        Что это? Где его брать?
                                        Ответить
                                        • В винде реакция на exceptions прописана в реестре. Там по-умолчанию сидит дрватсон который шлет мессаджи разработчику, так что вообще ничего делать не надо. Студия ставит туда дебагер, кстати)

                                          В линухах у многих дистрибов включен дампинг через ulimits
                                          Ответить
                                          • > шлет мессаджи разработчику
                                            Винды, что ли? :)
                                            >ничего делать не надо.
                                            Ответить
                                            • Вики:

                                              Отчет об ошибке отправляется с помощью службы Windows Error Reporting на специальный сервер Microsoft, где все отчеты сортируются и хранятся в централизованной базе данных. Для того, чтобы получить доступ к отчетам для конкретного приложения, разработчику нужно зарегистрироваться на сервере Microsoft, после чего он получает возможность анализировать отчеты об ошибках.
                                              Ответить
                                              • Ога, и как много это делают?
                                                Ответить
                                                • сколько разработчиков или сколько пользователей репортит ошибки?
                                                  Ответить
                                                  • Вот тебе конкретная ситуация: упала у юзера программа с сегфолтом. Как это репортить?
                                                    Ответить
                                      • Селинукс так по умолчанию порывается отправить репорт, и не только о сегфолтах. Но ему чего-то в настройках не хватает (я один раз решил таки отправить), уже не помню, что ему не хватало. Или может где-то зарегистрироваться нужно было, вобщем, я забил :)
                                        Ответить
                            • кора же
                              ----
                              да и всякие seh есть: можно зарепортить же
                              Ответить
                      • Я бы не стал так говорить. Загляните в ядро там все на C. Все что касается "real-time" или чего-то системного и низкоуровневого никто не пишет в стиле ООП несмотря на то что это тоже очень объемно и сложно.
                        Ответить
                        • > Все что касается "real-time" или чего-то системного и низкоуровневого никто не пишет в стиле ООП несмотря на то что это тоже очень объемно и сложно.

                          Инфа 146%?
                          Пишут. Гораздо больше, чем вы можете себе представить.
                          Ответить
                          • Бывает и такое, но Вы же не станете спорить, что все же на порядок меньше?
                            Ответить
                            • > Вы же не станете спорить, что все же на порядок меньше?

                              Почему? Откуда инфа? Кто собирал статистику? У меня тут несколько миллионов строк кода на с++ под боком, многое так или иначе связано с сетью.

                              Так откуда инфа? Кто собирал статистику? Это по опенсорс проектам или по закрытым тоже?
                              Ответить
                              • Какой нибудь GUI-Network-Administrator который дергает даре не OS интерфейсы а Linux сетевые утилиты типа if ifconfig ты называешь "несколько миллионов строк кода на с++ под боком, многое так или иначе связано с сетью" ?
                                Ответить
                                • ага, примерно это он и имеет в виду

                                  а можно писать что-то другое, чем GUI-Network-Administrator, можно?
                                  Ответить
                                • > дергает даре не OS интерфейсы а Linux сетевые утилиты типа if ifconfig
                                  Потому что кому-то было влом делать публичное апи для нетлинка с фаерволом и роутером... Единственный документированный способ - дергать iptables/ip/ifconfig. У меня был депресняк, когда я это узнал... Пришлось клеить строки и exec'ом вызывать тулзы...
                                  Ответить
                                  • > Потому что кому-то было влом делать публичное апи для нетлинка

                                    Риальным сетевикам не до этого.
                                    Ответить
                                  • >>нетлинка
                                    но может быть нетфильтра, например?

                                    В остальном Вы правы: говняшка -- тут:
                                    http://www.netfilter.org/documentation/FAQ/netfilter-faq-4.html#ss4.5
                                    Ответить
                                    • > но может быть нетфильтра, например?
                                      man 7 netlink

                                      Емнип, все эти iptables/ip/ifconfig общаются с ядром именно через netlink. Но протоколы там не документированные, а в доке явно сказано - exec'айте iptables, а к netlink'у не лезьте, он не для вас... Понятно, что они оставляют себе пространство для манёвра. Но всё-равно как-то неприятно.
                                      Ответить
                                      • нетлинк-то как раз документирован) А вот конкретные подсистемы -- нет. В частности подсистема netfilter, в которой и работают иптаблес. Точнее даже не netfilter, а конкретно иптаблес
                                        Ответить
                                        • > А вот конкретные подсистемы -- нет.
                                          Ну да, это я и имел в виду.

                                          Ну ок, пусть эти ядерные протоколы будут деталью реализации... Но почему нельзя было вместе с тулзами приложить какой-нибудь libiptables - ума не приложу :(
                                          Ответить
                                          • Я жеж дал Вам ссылочку:

                                            4.5 Is there an C/C++ API for adding/removing rules?

                                            The answer unfortunately is: No.

                                            Now you might think 'but what about libiptc?'. As has been pointed out numerous times on the mailinglist(s), libiptc was _NEVER_ meant to be used as a public interface. We don't guarantee a stable interface, and it is planned to remove it in the next incarnation of linux packet filtering. libiptc is way too low-layer to be used reasonably anyway.

                                            We are well aware that there is a fundamental lack for such an API, and we are working on improving that situation. Until then, it is recommended to either use system() or open a pipe into stdin of iptables-restore. The latter will give you a way better performance.
                                            Ответить
                                            • > Я жеж дал Вам ссылочку:
                                              Да читал я ее тогда... Вот как раз о ней:
                                              >> Единственный документированный способ - дергать iptables/ip/ifconfig. У меня был депресняк, когда я это узнал...
                                              Ответить
                                              • Да, но как видите их это парит, они грустят и обещают исправить. Скажите спасибо что хоть консольная утилита специфицирована.

                                                Одно время линуксоиды смеялись над виндой где часто было только 2 способа сделать что-то: через гуи/mmc (тоесть никак не автоматизировано) или через Win32API, тоесть совсем низкоуровнево.
                                                Были правда COM и WMI, но почему-то не все про это знали.
                                                Потом MS понял что всё плохо, и теперь cmdlet (API для пауершелла) -- мастхев для любого MS продукта.

                                                Ну а линуксоиды говорили что у нас-то консоль ферст класс ситизен, так что у нас всегда будет возможность что-то автоматизировать посредством шелл скриптов. Ну вот иногда посредством ТОЛЬКО шелл скриптов.
                                                Ответить
                                                • Только шелл скрипты под питухом были и есть prayer-based parsing, в отличие от того же ПШ.
                                                  Ответить
                                                  • Какую ОС Вы называете питухом?
                                                    Ответить
                                                    • Часто, бродя по Интернету, натыкаюсь на очаги гитлерлинукс-пидарасов. Основными постулатами в их тусовках всегда является личный понт, полная безграмотность в предмете IT-бизнеса и предвзятость. Пучеглазые лузеры, обделавшиеся во всём и вся, вербуют дураковатых малолеток, которым объясняют, что предать Родину за Бога-Питуха - очень круто. Петушьём линуксоидов начали называть довольно давно именно за это - за подчёркнутую безграмотность при вопиющем фанатизме на пустом месте. Линуксоид - равнозначный термин с "шестёрка", "придурок", "лузер".
                                                      Ответить
                                                      • Точно такие же макаки есть у и Microsoft)

                                                        Разумеется есть хорошие лиунксоиды а есть идиоты которые орут "винда мастдай" на всех форумах. Сам линукс тут не виноват)
                                                        Ответить
                                                        • У майкрософт даже школьники говорят есть. Впрочем они везде
                                                          http://freelansim.ru/tasks/93023
                                                          > Написать новый шаблон для робочого интернет-магазина
                                                          Ответить
                                                          • >>робочого
                                                            Ну там же написано "Киев":) Товарищ україномовний видимо.
                                                            Кстати, там "Joomla" же, причем тут Microsoft?
                                                            Ответить
                                                            • > Кстати, там "Joomla" же, причем тут Microsoft?
                                                              Свой закас пропиарил.
                                                              Ответить
                                                        • Анонимус, часто ты видишь виндузятников, которые орут "линупс - хуйня"? Обычно это ответ на агрессию питухов.
                                                          Ответить
                                                          • Вот-вот, правду говорите.

                                                            Честно говоря, луниксоидам надо по-свойски разобраться с кулхацкерами, которые говорят "только линупс, венды - говно!" Тогда они отмоются от дурной славы пердоликов-сектантов, никто ни с кем не будет воевать, систему бросится дорабатывать толпа народа, допилит недопиленное, заставит M$ задуматься, из-за чего Windows 11 будет просто волшебной. В итоге все будут в плюсе, кроме маководов, у которых уже сейчас всё работает и стремиться в общем-то не к чему.
                                                            Ответить
                                                            • Прикольные у вас тут разговоры вокруг разбора моего говнокода. Linux - рулит, Windows - отстой. Продолжайте а я почитаю))
                                                              Ответить
                                                              • Это все приколно пообсуждать. Просто хочется, чтоб не завязываться именно благодаря тому что корка может быть нетфильтра, например сортировка занимает 80% времени это делать не надо думать, что веб-сервер и даже может быть сломан если это не всегда получил читаемый компилируемый исходник твоего продутка Делать -g:none упадет с исключением, что в одном месте.
                                                                Ответить
                                                                • Опять выходишь на связь?
                                                                  Ответить
                                                                • *trollface JS программист в Вас протестует, да?
                                                                  Ответить
                                                                  • JS программисту во вне не важно, под какой ОС писать (хотя, notepad++ под Windows).

                                                                    Меня просто очень сильно поразили продуманные и нерушимые аргументы apgurman'а. Отвечать "Windows - рулит, Linux - отстой" не хотелось - всё же обе ОС нужны и бывают полезны. И я выбрал самый адекватный ответ из возможных.

                                                                    И только потом я увидел http://joyreactor.cc/post/1679199
                                                                    Ответить
                                                                    • 1024--
                                                                      >> Меня просто очень сильно поразили продуманные и нерушимые аргументы apgurman'а.

                                                                      Вовсе и непродуманный и не нерушимый и уж точно не аргумент. Наоборот, я хотел подчеркнуть глупость споров на эту тему и просил их прекратить здесь. Тем более пост вообще не об этом
                                                                      Ответить
                                                            • >у которых уже сейчас всё работает и стремиться в общем-то не к чему.
                                                              Новый iDildo же вышел, в 2 раза больше предыдущего.
                                                              Ответить
                                                              • > в 2 раза больше
                                                                Прошу прощения, я-то наивно полагал, что они уже достигли идеала. А выходит, всегда есть куда расти. Буду знать.
                                                                Ответить
                                                            • На самом деле ничего не надо. Споры про линукс-вс-виндуос это такой феерически отстойно глупый проеб времени бессмысленный и беспощадный, что стыдно таким заниматься если тебе больше 17ти лет.
                                                              Ответить
                                                            • > итоге все будут в плюсе, кроме маководов, у которых уже сейчас всё работает
                                                              Браузер у них как был говном, так и остался.
                                                              Ответить
                                                          • Видал парочку) Причем это были вполне себе неплохие MCSEшники. Они любили ляпнуть какую-нибудь феерическую тупость типа "в линуксе все в консоли вручную делается, а у нас автоматически".

                                                            Так что бывает и такое, да) В целом же это чушь всё.
                                                            Ответить
                                                            • Вот я MCSE-шников не видел, а прыщеблядков, несущую хуйню в адрес винды, встречаю регулярно. И что, наверно, еще хуже - кое-где винду молча, реально дискриминируют, например, в питоне, который якобы кроссплатформенный, но на самом деле как дотнет наоборот.
                                                              Ответить
                                                              • Так не общайтесь с "прыщеблядков".
                                                                Не нужно ходить на ЛОР и дискутировать там с девятиклассниками в терминах "виндус сукс"
                                                                Ответить
                                                                • На лор и в /s/ можно, предположим, и не ходить, а с питоном что? И с прыщеговном, для которого бинарников под винду нет?
                                                                  Ответить
                                                                  • >>И с прыщеговном, для которого бинарников под винду нет?
                                                                    што?
                                                                    Ответить
                                                                    • Программками, которые хуй проссыш как под виндой запустить.
                                                                      Ответить
                                                                      • В мире вообще много гумна как-то:

                                                                        Программками, которые хуй проссыш как под виндой запустить.
                                                                        Программками, которые хуй проссыш как под досом запустить.
                                                                        Программками, которые хуй проссыш как под линуксом запустить.
                                                                        Программками, которые хуй проссыш как под опенбзд запустить.
                                                                        Программками, которые хуй проссыш как под нетбзд запустить.
                                                                        Программками, которые хуй проссыш как под фрибзд запустить.
                                                                        Программками, которые хуй проссыш как под МакосьКлассик запустить.
                                                                        Программками, которые хуй проссыш как под МакосьИкс запустить.
                                                                        Программками, которые хуй проссыш как под ОС/2 запустить.
                                                                        Программками, которые хуй проссыш как под OS/360 запустить.
                                                                        Программками, которые хуй проссыш как под TR-DOS запустить.
                                                                        Программками, которые хуй проссыш как под QNX запустить.
                                                                        Программками, которые хуй проссыш как под VMS запустить.
                                                                        Программками, которые хуй проссыш как под Solaris запустить.
                                                                        Ответить
                                                                        • Сравни количество юзеров винды и остального говна.
                                                                          Ответить
                                                              • > в питоне, который якобы кроссплатформенный

                                                                Питон — это же какая-то старая досовская программа, если я не ошибаюсь, так?
                                                                Ответить
                                                                • Ну да, он же в черненьком экранчике работает, значит досовская.

                                                                  Кстати, Вы даже не представляете под какие машины питон портировали:

                                                                  http://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Foton.jpg/220px-Foton.jpg
                                                                  Ответить
                                                                  • Да уж, кроссплатформенный. Только его было легко загнать в угол.
                                                                    Ответить
                                                        • >Точно такие же макаки есть у и Microsoft)
                                                          Зачем Вы разговариваете с Копипаста:Руслан_Карманов ?

                                                          Руслан Карманов — унылый быдлотролль, обливающий говном красноглазых в своем уютненьком бложике. Какое-то время был весьма популярным персонажем в /s/. В последнее время активно подражает Гоблину. Эталонное копирастическое быдло из международной палаты мер и весов.
                                                          Отличается зашкаливающей ненавистью к открытому ПО и линуксу.

                                                          Руслан Карманов — это не только фабрика лулзов, но и отец сомнительного мема — Бога Питуха, который был немедленно подхвачен /s/ тиреча.
                                                          Ответить
                                                          • Это написали обоссаные им прыщеблядки, а потом модер-пердолик залочил статью на 4 года. Батхерт незаметен.
                                                            Ответить
                                                            • >написали обоссаные им прыщеблядки, а потом модер-пердолик залочил статью на 4 года.
                                                              Хомячок Карманова?

                                                              >Батхерт незаметен.
                                                              Угу. Вижу как он незаметен, когда немножко питушиного гуру присрамили.
                                                              Ответить
                                                              • Хуячок. Лок статьи сам найдешь?

                                                                Кто его присрамил-то? Написали "Карман хуй" и залочили статью? Охуенно присрамили, да. Ну а сейчас он ударился в политику и скатился в УГ, а старый блог просрал.
                                                                Ответить
                                                            • Руслан, перелогиньтесь
                                                              Ответить
                                                              • Не руслан, просто перся с ТОНН прыщебаттхерта.
                                                                Ответить
                          • Типа account_get_username(conn_get_account(c) )? Ага. Главное, с типом параметра не напутать, а то сегфолт/блюскрин словишь.
                            Ответить
                        • Мне кажется не стоит сравнивать два языка в терминах "проще/сложнее", тем более что ООП не единственное отличие крестов от сей:)
                          Процедурный и ООП подходы имеют как минусы, так и плюсы.
                          Кроме того качественный процедурный подход имеет *некоторые* плюсы объектного: например Вы получаете handle какого-то объекта в памяти ядра (ну окей, какой-то структуры) и потом с этим хендлом везде ходите.
                          Виндовый API не стесняясь говорит про объекты в этом случае (там даже object manager есть) хотя это и чистый си.

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

                          Кроме того ООП помогает быстрее строить и поддерживать и изменять системы с огромным количеством не очень технических понятий: например интерпрайз. Сама мысль о том что код находится рядом с данными крайне полезна для инкапсуляции мелких вычислений типа user.findBoss().calculateSalary() итд. Код ядра ОЧЕНЬ далек от ентерпрайза, так что сравнивать его бессмыслено.
                          Другой такой пример это GUI фреймоврки, которые на ООП намного проще описываются (ибо паттерны bridge, wrapper итд)

                          Я не видел исходники QNX, так что про реал тайм мне говорить сложно. Обычный десктопный линух все же не реалтайм обычно.
                          Ответить
                          • Полностью согласен.
                            "real-time" в кавычках в смысле не реал-тайм, а в смысле "там где скорость действительно имеет значение".
                            QNX не написан объектно.
                            Современные коды на С действительно более выразительны и часто близки к некоторым правилам ООП и кстати очень читабельны.

                            Я знаю один случай, когда то, что можно было решить для С кода, никак не решалось для C++, ну если конечно его не переписать с нуля. Это я к тому, что чем выше уровень языка, тем проще(в смысле быстрее) на нем писать, проще потом читать написанное, но тажелее выразиться более точно и правильно.
                            Ответить
                            • какие прохладные истории начались
                              компилятор с++ не смог скомпилировать сишный код, потому что кто-то очень умный решил использовать с11?
                              Ответить
                              • Это длинная я и очень много нужно объяснять и писать чтобы было понятно Но поверь такое бывает. Хочешь завтра объясню У меня уже глубокая ночь
                                Ответить
              • А по поводу производительности... О ней, в нужных местах, все же стоит подумать.
                Мой первый набросок этой утилиты был в истинно python(овском) стиле Написал за час, но потом почти час ждал пока он(набросок) прошерстит 40GB фоток на внешней флешке. Для сравнения представленная для критики версия справлялась уже за единицы минут.
                Ответить
        • Спасибо, Анонимус

          Именно этого и хотелось.

          1 Он мне нужен для других проектов и поэтому уже под рукой.

          2 Смысл именно этого куска кода. иметь готовый класс, для обхода списка папок, без общего roota или просто папки, которая еще умеет выдавать данные, в первую очередь о том что она что-то там делает и как она быстро это делает в совокупности с остальным кодом. А осталпеpoisk-nedostayuschih-fajlov-/.

          3 Спасибо за замечание. Это просто опечатка. Не буду сравнивать мой и Ваш английский. Не благодарное это дело, тем более это же Вы нашли эту ошибку. Мы здесь больше про Python говорим.

          4 def funny_indicator(self, catalogs_cntr, files_cntr, speed_or_files_per_sec): Так было бы лучше?

          5 Я поизучаю этот вопрос.

          6 Это обертка к велосипеду. То что было "in top of my head" на момент когда я это быстро писал. Спасибо, это тоже тема для раздумий.

          7 Может Вы и правы, но это же особенный worker? Он же еще и funny_indicator? Думаю что здесь Вы больше правы, чем я.

          8 И здесь Вы правы. В оправдание могу только сказать, что изнвчально я хотел написать эту утилитку за 30 мин и уж точно не думал про GUI. Изначально это просто удобная утилита. Благодаря Вам в следующей версии подумаю.

          9 В моем первом комменте и в этом я указал ссылку на описание откуда это и зачем нужно. На этом ресурсе все это не влезает, а на том, куда ссылка, никого нет и никто ничего не обсуждает.
          Ответить
        • > "fanny" -- вентиляторный
          Всё гораааздо страшнее, анон... https://translate.google.com/#en/ru/fanny
          Ответить
          • > awkward

            Так вот от какого слова произошло название awk!
            Ответить
          • Когда на ГК будут жаловаться, его для надёжности разделят на funnycode и fannycode.
            На funnycode останутся олдфаги и интересные холивары, а на fannycode перенесут творения новостников и переводчиков Конардо и посты про модные гаджеты про даты в PHP и прочих языках.
            Ответить
            • Кстати, а какие темы нынче профильные на волан-де-сайте? Только программирование, только хардкор?
              Ответить
              • Программирование, серьёзные IT-темы, аудио-видео. Не совсем хардкор.
                Выпилены (на волан-де-сайт-2) космос, физика, научнопопулярная питушня, законы и железо.
                Ответить
                • > аудио-видео
                  Обсуждение музыки и аниме фильмов?

                  Кстати, а DIY куда попал?
                  Ответить
                  • > Обсуждение ...
                    Работа с ...

                    > DIY
                    Хм, недовыветрили его, оказывается. Стал непрофильным на вдс-1 (под названием "DIY или Сделай Сам"), имеет профильный аналог на вдс-2 ("DIY или Сделай сам" - букву "с" зачем-то уменьшили).
                    Ответить
              • >волан-де-сайте
                Эт что?
                Ответить
          • не ожидал, что мой "говнокод" станет популярен именно благодаря fanny. Теперь буду знать как именовать функции/переменные чтоб привлечь внимание "говнокодовцев".
            Господа-товариСЧи давайте конструктивнее. Вот Анонимус - молодец, заставил меня полностью переписать утилитку. Сейчас доперепишу и выложу, опять вам на радость, а мне на пользу.
            Ответить
            • > Господа-товариСЧи давайте конструктивнее
              ГК != stackoverflow. Сюда приходят поразвлечься, в основном... Ну иногда бывает и конструктив, когда совсем уж скучно.
              Ответить
              • Зато здесь не стыдно за свой "говнокод". Опять же "земляки" здесь - родные. Люблю я вас и скучаю по вашим "говнокодовским" под***кам ).
                Ответить
            • Ну как, допереписал?
              Ответить
          • Да еще, по "fanny" поводу, funny случай. Случай из моей реальной жизни "за бугром". Как-то я тут, в одном "забугорном" офисе, беседовал с одним "забугорным" коллегой и сказал что-то типа "as a fact", но очевидно, он услышал "ass fuck", что в общем и не удивительно, учитывая мое произношение. Только не надо думать, что вы все "говнокодовцы" отлично знаете английский и уж тем более правильно его произносите. Я когда "забугром" вижу "земляка" понимаю, что он "земляк", уже на расстоянии 50 метров, а уж когда он открывает рот, то сомнений точно не остается, даже если он просто говорит: "Hi!"
            Ответить
            • > отлично знаете английский
              Nobody says that we know english very well... For example I can estimate my knowledge like this:
              - fluent reading for technical books/atricles, much worse for other books (I know very few ajectives);
              - bad writing, but other people can understand me anyway;
              - basic listening (with moderate speed and good pronunciation);
              - shitty speaking (all "programmer's" words sounds like fucking mess).
              Ответить
              • Я к тому, что любой из вас в 3 .ночи набивая код, может написать вместо fUnny fAnny.
                Ответить
                • I don't blame you for this. But it was a very funny mistake :)
                  Ответить
                  • Да я и не парюсь особо. Просто хочется, чтоб росла другая ветка сообщений, а не эта.
                    Ответить
              • >ajectives
                You are fanny!
                Ответить
            • "за бугром", я так понимаю, в англоязычной стране?
              Ответить
        • fanny это не вентиляторный, это жопа, только не в смысле "все пропало", а именно часть тела, обычно используется если эта часть тела особенно выдающаяся.
          Ответить
        • Новая исправленная версия по мотивам данных замечаний см. http://govnokod.ru/17277
          Ответить
        • Испарвленная версия см. http://govnokod.ru/17278 и http://govnokod.ru/17277
          Ответить
      • Для начала, было бы неплохо рассказать,в чем идея модуля.
        Ответить
    • Ну, ок, вот это нубство:
      _result="\rcataloges:" + repr(p).rjust(8) + "\tfiles:" + repr(n).rjust(13) + "\tspeed: %12.3f"%s + " files/s"

      Хоть ничего плохого в этом нет, но просто не приятно от того, что в одном месте и конкатенация и форматирование. Почему нельзя было сделать:
      _result = "\rcatalogs: %s\tfiles: %s\tspeed: %12.3f files/s" \
          % (repr(p).rjust(8), repr(n).rjust(13), s)

      Херовые названия переменных. Если для локальных переменных, или переменных где одна буква о чем-то говорит (i, j, k - итерация, k, v - ключ-значение, n - число (итераций)), то что такое funny_indicator(self,p,n,s) не понятно.

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

      В суть написаного не вникал, но на вид это мог бы быть т.н. union-find структура. Set подразумевает много копирования. Но я не понял зачем вообще нужно копировать из одного такого же объекта в другой.
      Ответить
      • Set подразумевает уникальность элементов, в данном случае это структура данных, содержащая потоки вывода. Зачем в ней иметь 2 раза один и тот же поток? Поэтому Set.
        1 Не совсем понял "Set подразумевает много копирования." - какое копирование где и когда оно бывает в Set?
        2 "зачем вообще нужно копировать из одного такого же объекта в другой." а где у меня там есть копирование?
        Спасибо, что помогаете)
        Ответить
        • Но вопрос не о том изза каких свойств был выбран Set, а о том зачем вообще это копирование? Ну было у человека два OutSplitter, и были в них дубликаты, и что с того?

          Ну и такие проверки как hasattr для чего-то относительно простого, не требующего изворотов с метапрограммированием и т.д. - буэ.
          try:
              iter(out_splitter)
          except:
              self.add_pipe(out_splitter)
          else:
              for pn in out_splitter:
                  self.add_pipe(pn)

          Красивше будет (ну и, если честно, то __iter__ проверять недостаточно, например, итерация может быть реализована через __getitem__.

          > где копирование?
          self.__pipes = Set(out_splitter.pipes)

          Это создаст "неглубокую" копию из одного такого же объекта в другом.
          Ответить
      • По поводу "нубства" Кстати кто-нибудь скажет влет, какой из вариантов быстрее?
        Ответить
        • Можно подумать, это имеет тут хоть какое-то значение.

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

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