- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 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);
}
P.S. Мобильный клиент - совершеннейше благое дело. Заходить под собой лень, под гостем непонятно, что я читал, что нет. Комментить не получится, да; хоть почитать, чего нового.
Или здесь http://govnokod.reformal.ru/ написать достаточно?
точнее доделать, у меня есть полуживой прототип - только диз не умею
вообще планирую по гнушной лицухе, но до вычистки говна сорцы не выложу )
1.почему пхп?
несмотря на весь ужас языка (я про http://habrahabr.ru/post/142140/), это мейнстрим, он по умолчанию на любом хосте (даже фриварном) - в отличие от рельсорубинов и джангозмей, и дешевле обойдется. а многие ужасы языка нивелируются хорошим фреймворком и опытом.
я к тому, что не надо кричать "фууу, гребаный пхп!" - кричали и не раз.
2. почему Кохана?
+ один из самых быстрых фреймворков (в отличие от того же Зенда) - при модели работы пхп (за один запрос пользователя нужно быстро поднять инфраструктуру, нет долгоживущих объектов), инициализируется только та функциональность, которая нужна, остальные фичи имеются ввиду и не трогаются, если не нужны
+ поощряет ООП, и повторное использование написанных модулей
+ достаточно простой при своей мощности (не нужно инициализировать кучу фабрик фабрик фабрик), зависимости объектов друг от друга минимальны. основные понятия не заумны и быстро понимаешь, что там к чему
+ функциональность "из коробки" достаточна для большинства проектов, нет надобности писать свои велосипеды. Это и HMVC, и ORM, и обработка форм (я про валидаторы), и кеширование
+ оригинальное понятие "каскадной файловой системы", позволяющее без особой потери производительности менять\дополнять функциональность системных классов
есть, конечно, и минусы:
- дока слабовата, и часто приходится изучать исходники, чтобы понять, как правильно обращаться со встроенными классами для достижения нужной функциональности
- есть баги\недоделки\особенности (особенно грешен родной ORM), что вначале достаточно мешает, но со временем собственный набор костылей в виде самописных модулей, хелперов и расширений решает почти все проблемы. Дальше вполне можно начать новый проект с собственного "хелловорлда" и относительно быстро сделать рабочий проект.
1а. линейное полотно кода
1б. циклы вместо ветвлений.
1в. функции и процедуры
1г. отдельные подключаемые файлы
2а. структуры
2б. ооп, классы.
2в. паттерны, продвинутое ооп.
3а. библиотеки кода.
3б. неймспейсы или их эмуляция.
3в. продвинутое управление библиотекой, вроде автозагрузчиков классов итдитп.
-длинная эволюция библиотечного кода-
4. фреймворк: ядро и системные классы.
коренное отличие, что фреймворк не подключается, а диктует правила игры. как правило, агрессивен к инакомыслящему коду.
а код неотделим от фреймворка, и уже логическая связь неочевидна без понимания правил игры фреймворка. одиночки могут осилить, но только тыря или форкая код. пишут все, но грамотных фреймворков однозначная цифра, остальное говно похоронено под тяжестью себя.
5. цмс. т.е. отдельное приложение, исключительно со своими шлюхами. при кажущейся простоте это тонны вылизанного кода. в одиночку под силу супергероям, и то, сука плавает в собственном говне годичной давности. цмс хороших для энд-юзера чуть более, чем одна. цмс с хорошим кодом и архитектурой - миф.
6. ОСь. практически недостижимый уровень. мегатонны хитровыебанного по всем показателям кода. в одиночку недостижим, только командой отличных спецов. время разработки - десяток лет. код трудночитаем даже разрабам, но, сука, оптимизирован.
7. только хардвар, только хардкор. и где, блеать, джава-процессоры??
Я не думаю, что выбор технологии будет предметом холиворов. Уютненький говнокодик же не поливают настолько.
> где, блеать, джава-процессоры??
Их не видно, но они есть.
P.S. Совсем забыл. В PHP есть некоторый плюс - техники поиска уязвимостей уже отработаны.
что не мешает уязвимостям нишеваться из одного места в другое. излюбленное место гнездования - свежевысранные фичи.
не волнуйтесь, как закончу - обязательно пролинкую
$min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
ну это мелочи, в целом-то вроде не говно.
ЗЫ: и вообще зачем цикл с засыпанием делать? не проще ли в крон запихнуть?
Спасибо, буду знать.
> $min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
Согласен.
> не проще ли в крон запихнуть?
Не проще ;) Скрипт адаптируется к частоте постов на ГК, и не дрючит сервер каждую минуту, если никто ничего не пишет...