- 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);
}
eth0 28.05.2012 15:26 # +1
bormand 28.05.2012 16:01 # +1
roman-kashitsyn 28.05.2012 17:19 # +4
bormand 28.05.2012 17:25 # 0
JavaGovno 28.05.2012 20:07 # −1
3.14159265 28.05.2012 20:44 # 0
JavaGovno 28.05.2012 20:06 # 0
guest8 28.05.2019 17:27 # −999
vistefan 28.05.2012 17:05 # 0
roman-kashitsyn 28.05.2012 17:18 # +3
bormand 28.05.2012 17:24 # +2
roman-kashitsyn 28.05.2012 17:40 # +2
eth0 28.05.2012 20:34 # +2
P.S. Мобильный клиент - совершеннейше благое дело. Заходить под собой лень, под гостем непонятно, что я читал, что нет. Комментить не получится, да; хоть почитать, чего нового.
guest8 28.05.2019 17:28 # −999
bormand 28.05.2012 17:25 # +1
vistefan 28.05.2012 18:54 # −2
Или здесь http://govnokod.reformal.ru/ написать достаточно?
roman-kashitsyn 28.05.2012 18:59 # 0
vistefan 28.05.2012 19:03 # 0
Lure Of Chaos 29.05.2012 00:46 # +2
точнее доделать, у меня есть полуживой прототип - только диз не умею
eth0 29.05.2012 07:22 # +3
guest 29.05.2012 07:50 # 0
vistefan 29.05.2012 09:10 # 0
vistefan 29.05.2012 09:11 # +1
vistefan 29.05.2012 09:46 # +1
Lure Of Chaos 30.05.2012 18:14 # +2
vistefan 30.05.2012 20:22 # 0
eth0 31.05.2012 15:25 # 0
Lure Of Chaos 04.06.2012 12:54 # 0
вообще планирую по гнушной лицухе, но до вычистки говна сорцы не выложу )
roman-kashitsyn 04.06.2012 13:19 # 0
Lure Of Chaos 04.06.2012 14:16 # 0
eth0 04.06.2012 18:17 # 0
Lure Of Chaos 04.06.2012 19:20 # 0
1.почему пхп?
несмотря на весь ужас языка (я про http://habrahabr.ru/post/142140/), это мейнстрим, он по умолчанию на любом хосте (даже фриварном) - в отличие от рельсорубинов и джангозмей, и дешевле обойдется. а многие ужасы языка нивелируются хорошим фреймворком и опытом.
я к тому, что не надо кричать "фууу, гребаный пхп!" - кричали и не раз.
2. почему Кохана?
+ один из самых быстрых фреймворков (в отличие от того же Зенда) - при модели работы пхп (за один запрос пользователя нужно быстро поднять инфраструктуру, нет долгоживущих объектов), инициализируется только та функциональность, которая нужна, остальные фичи имеются ввиду и не трогаются, если не нужны
+ поощряет ООП, и повторное использование написанных модулей
+ достаточно простой при своей мощности (не нужно инициализировать кучу фабрик фабрик фабрик), зависимости объектов друг от друга минимальны. основные понятия не заумны и быстро понимаешь, что там к чему
+ функциональность "из коробки" достаточна для большинства проектов, нет надобности писать свои велосипеды. Это и HMVC, и ORM, и обработка форм (я про валидаторы), и кеширование
+ оригинальное понятие "каскадной файловой системы", позволяющее без особой потери производительности менять\дополнять функциональность системных классов
есть, конечно, и минусы:
- дока слабовата, и часто приходится изучать исходники, чтобы понять, как правильно обращаться со встроенными классами для достижения нужной функциональности
- есть баги\недоделки\особенности (особенно грешен родной ORM), что вначале достаточно мешает, но со временем собственный набор костылей в виде самописных модулей, хелперов и расширений решает почти все проблемы. Дальше вполне можно начать новый проект с собственного "хелловорлда" и относительно быстро сделать рабочий проект.
guest8 28.05.2019 17:28 # −999
ReallyBugMeNot 04.06.2012 19:43 # 0
bormand 04.06.2012 19:52 # 0
Lure Of Chaos 04.06.2012 22:20 # +2
1а. линейное полотно кода
1б. циклы вместо ветвлений.
1в. функции и процедуры
1г. отдельные подключаемые файлы
2а. структуры
2б. ооп, классы.
2в. паттерны, продвинутое ооп.
3а. библиотеки кода.
3б. неймспейсы или их эмуляция.
3в. продвинутое управление библиотекой, вроде автозагрузчиков классов итдитп.
-длинная эволюция библиотечного кода-
4. фреймворк: ядро и системные классы.
коренное отличие, что фреймворк не подключается, а диктует правила игры. как правило, агрессивен к инакомыслящему коду.
а код неотделим от фреймворка, и уже логическая связь неочевидна без понимания правил игры фреймворка. одиночки могут осилить, но только тыря или форкая код. пишут все, но грамотных фреймворков однозначная цифра, остальное говно похоронено под тяжестью себя.
5. цмс. т.е. отдельное приложение, исключительно со своими шлюхами. при кажущейся простоте это тонны вылизанного кода. в одиночку под силу супергероям, и то, сука плавает в собственном говне годичной давности. цмс хороших для энд-юзера чуть более, чем одна. цмс с хорошим кодом и архитектурой - миф.
6. ОСь. практически недостижимый уровень. мегатонны хитровыебанного по всем показателям кода. в одиночку недостижим, только командой отличных спецов. время разработки - десяток лет. код трудночитаем даже разрабам, но, сука, оптимизирован.
7. только хардвар, только хардкор. и где, блеать, джава-процессоры??
eth0 05.06.2012 13:07 # 0
Я не думаю, что выбор технологии будет предметом холиворов. Уютненький говнокодик же не поливают настолько.
> где, блеать, джава-процессоры??
Их не видно, но они есть.
P.S. Совсем забыл. В PHP есть некоторый плюс - техники поиска уязвимостей уже отработаны.
Lure Of Chaos 05.06.2012 14:03 # 0
что не мешает уязвимостям нишеваться из одного места в другое. излюбленное место гнездования - свежевысранные фичи.
vistefan 04.06.2012 12:44 # 0
Lure Of Chaos 04.06.2012 12:52 # 0
не волнуйтесь, как закончу - обязательно пролинкую
vistefan 04.06.2012 15:04 # 0
Мистер Хэнки 29.08.2012 05:59 # +1
$min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
ну это мелочи, в целом-то вроде не говно.
ЗЫ: и вообще зачем цикл с засыпанием делать? не проще ли в крон запихнуть?
bormand 29.08.2012 08:58 # 0
Спасибо, буду знать.
> $min_delay, $max_delay, etc на $MIN_DELAY, $MAX_DELAY раз уж это константы
Согласен.
> не проще ли в крон запихнуть?
Не проще ;) Скрипт адаптируется к частоте постов на ГК, и не дрючит сервер каждую минуту, если никто ничего не пишет...