1. Perl / Говнокод #10374

    −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
    #!/usr/bin/perl
    use strict;
    
    # немного настроек
    my $url = "http://govnokod.ru/comments";
    my $min_delay = 2*60;
    my $max_delay = 30*60;
    my $delay_slowdown = 2;
    
    # получение идентификатора последнего коммента
    sub get_last_comment_info {
        print STDERR "Checking for the new comments...\n";
        my @content = `curl "$url" 2>/dev/null`;
        my $s = join(' ', @content);
        if ($s =~ /<a href=".*?\/(\d+)#comment(\d+)"/) {
            print STDERR "Last comment id was $2 in the thread $1\n";
            return ("thread" => $1, "comment" => $2);
        }
        print "Can't get new comments\n";
        return ();
    }
    
    # отправка сообщения
    sub notify {
        my ($id) = @_;
        print STDERR "Sending notify about $id\n";
        `notify-send "Кто-то наложил в $id"`;
    }
    
    my $last_id = undef;
    my $delay = $min_delay;
    while (1) {
        # смотрим есть ли новый коммент
        if (my %r = get_last_comment_info()) {
            if (defined($last_id) && $r{"comment"} > $last_id) {
                $delay = $min_delay;
                notify($r{"thread"});
            }
            $last_id = $r{"comment"};
        }
        # спим
        print STDERR "Sleeping for $delay seconds...\n";
        sleep($delay);
        # пересчитываем задержку
        $delay = $delay * $delay_slowdown;
        $delay = $max_delay if ($delay > $max_delay);
    }

    Говноскрипт для мониторинга сточных вод.

    Запостил: bormand, 27 Мая 2012

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

    • Отмечу, уютный говнокодик не сильно блещет юзабилитью. Сам хочу написать какой-нибудь безумно-удобный парсер-обработчик, только лень.
      Ответить
      • Тут вот еще что неприятно - сток обычно весит в районе 100кб, т.к. в нем вшиты не только комментарии, но еще и исходники к ним. Не хочется создавать лишнюю нагрузку на серв. Вот если бы Страйко запилил простенькое API для получения комментов с нужной точки... Чтобы можно было дать запрос типа такого: http://govnokod.ru/comments?from=133890 и в ответ получить маленькую XMLку с комментами...
        Ответить
    • Даёшь юзабельный клиент с блекджеком и шл оповещениями о новых постах, комментариях и изменении рейтинга твоего говна и комментов!
      Ответить
      • и приложения для ведроида и яблофилов
        Ответить
      • И карму.
        Ответить
        • А кто здесь всем заведует-то? Кому на мозги капать?
          Или здесь http://govnokod.reformal.ru/ написать достаточно?
          Ответить
          • Страйко, но он почему-то не хочет имплементить фичи (времени наверное у него нет), в основном баги иногда фиксит.
            Ответить
            • Может команду собрать?
              Ответить
              • есть предложение сделать клон с азиатками и негритянками
                точнее доделать, у меня есть полуживой прототип - только диз не умею
                Ответить
                • Только геосайтытекст на белом фоне без разметки, только хардкор!
                  Ответить
                • Прототип в студию!
                  Ответить
                  • я еще сделаю ему ревизию на выходных. если все хорошо - выложу. может даже рабочую версию на халявхостинг какой-нить
                    Ответить
                    • Ввиду нынешнего бурления говн - с нетерпением джём (думаю, есть основания говорить не только за себя)
                      Ответить
                    • Лицензия?
                      Ответить
                      • free to use :P
                        вообще планирую по гнушной лицухе, но до вычистки говна сорцы не выложу )
                        Ответить
                        • На чём хоть движок? Рельсы? Джанго? Или снова Зенд?
                          Ответить
                          • не, дешево и попсово - kohanaframework.org (пхп)
                            Ответить
                            • Охтыж. Иногда возникает стойкое ощущение, что авторов велосипедовдвижков столько же, сколько и пхпшников. Надо будет ознакомиться хоть с документацией, вдруг что здравое в голову придёт.
                              Ответить
                              • замечу:

                                1.почему пхп?
                                несмотря на весь ужас языка (я про http://habrahabr.ru/post/142140/), это мейнстрим, он по умолчанию на любом хосте (даже фриварном) - в отличие от рельсорубинов и джангозмей, и дешевле обойдется. а многие ужасы языка нивелируются хорошим фреймворком и опытом.
                                я к тому, что не надо кричать "фууу, гребаный пхп!" - кричали и не раз.

                                2. почему Кохана?
                                + один из самых быстрых фреймворков (в отличие от того же Зенда) - при модели работы пхп (за один запрос пользователя нужно быстро поднять инфраструктуру, нет долгоживущих объектов), инициализируется только та функциональность, которая нужна, остальные фичи имеются ввиду и не трогаются, если не нужны
                                + поощряет ООП, и повторное использование написанных модулей
                                + достаточно простой при своей мощности (не нужно инициализировать кучу фабрик фабрик фабрик), зависимости объектов друг от друга минимальны. основные понятия не заумны и быстро понимаешь, что там к чему
                                + функциональность "из коробки" достаточна для большинства проектов, нет надобности писать свои велосипеды. Это и HMVC, и ORM, и обработка форм (я про валидаторы), и кеширование
                                + оригинальное понятие "каскадной файловой системы", позволяющее без особой потери производительности менять\дополнять функциональность системных классов

                                есть, конечно, и минусы:
                                - дока слабовата, и часто приходится изучать исходники, чтобы понять, как правильно обращаться со встроенными классами для достижения нужной функциональности
                                - есть баги\недоделки\особенности (особенно грешен родной ORM), что вначале достаточно мешает, но со временем собственный набор костылей в виде самописных модулей, хелперов и расширений решает почти все проблемы. Дальше вполне можно начать новый проект с собственного "хелловорлда" и относительно быстро сделать рабочий проект.
                                Ответить
                              • дак любой похапешник стремится сделать если не свою CMS, то уж фрамеворк обязательно
                                Ответить
                                • Просто потому, что без CMS/фреймворка на ЭТОМ писать просто невозможно. А с ними (даже самопальными) уже веселее.
                                  Ответить
                                  • да нет, не всегда. не все так печально. это, как я заметил, стадия эволюции кода:
                                    1а. линейное полотно кода
                                    1б. циклы вместо ветвлений.
                                    1в. функции и процедуры
                                    1г. отдельные подключаемые файлы

                                    2а. структуры
                                    2б. ооп, классы.
                                    2в. паттерны, продвинутое ооп.

                                    3а. библиотеки кода.
                                    3б. неймспейсы или их эмуляция.
                                    3в. продвинутое управление библиотекой, вроде автозагрузчиков классов итдитп.

                                    -длинная эволюция библиотечного кода-

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

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

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

                                    7. только хардвар, только хардкор. и где, блеать, джава-процессоры??
                                    Ответить
                                    • Статью видел в английском варианте, поскольку хабры не читаю. С большей частью безусловно согласен. Пхп славен всем этим, плюс, чёртово обилие ошибочек и уязвимостей.
                                      Я не думаю, что выбор технологии будет предметом холиворов. Уютненький говнокодик же не поливают настолько.

                                      > где, блеать, джава-процессоры??
                                      Их не видно, но они есть.

                                      P.S. Совсем забыл. В PHP есть некоторый плюс - техники поиска уязвимостей уже отработаны.
                                      Ответить
                                      • > техники поиска уязвимостей уже отработаны
                                        что не мешает уязвимостям нишеваться из одного места в другое. излюбленное место гнездования - свежевысранные фичи.
                                        Ответить
                    • Собственно, выходные прошли. Насколько жив прототип?
                      Ответить
                      • обнаружилась куча неудобностей. выходные провел за допилом, но еще далеко не все.
                        не волнуйтесь, как закончу - обязательно пролинкую
                        Ответить
    • print STDERR можно заменить на warn
      $min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
      ну это мелочи, в целом-то вроде не говно.
      ЗЫ: и вообще зачем цикл с засыпанием делать? не проще ли в крон запихнуть?
      Ответить
      • > print STDERR можно заменить на warn
        Спасибо, буду знать.

        > $min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
        Согласен.

        > не проще ли в крон запихнуть?
        Не проще ;) Скрипт адаптируется к частоте постов на ГК, и не дрючит сервер каждую минуту, если никто ничего не пишет...
        Ответить

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