• 19Jul

    когда то, давно, наверно года 4-5 назад, я сделал своему отцу сайт – доска объявлений, по специфике его работы. Писал я ее тогда на пхп.

    Проект заспамили порнушники, руки до нее реально не доходили, просто бывало по возможности делал там чтото, но это было очень редко и очень мало. Вобщем уже давненько хочу переделать его на движ джанго (питон)

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

    Думаю через пару недель такого факультативного режима выставлю первые результаты.

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 19Jul

    что мне надо от логов:
    1) конешно выводить точку запуска + время в каждом запускаемом логе + дополнительная инфа, как правило у разных проектов она разная.
    2) выводить не только сроку, но и более сложную структуру.
    3) разные функции для логов ( info, error, debug,trace) чтоб на внешнем серваке отказываться от определенных из них, причем делать этот без потери скорости.

    sub _log{
    my ($self,$type,$text,$cl) = @_;
    my @tt = localtime;
    my ($pack,$filename,$line) = caller(1);
    my ($topack,$tofile,$toline) = caller($cl) if($cl);
    $line = "($type)".POSIX::strftime("%d,%h %H:%M:%S",localtime)." $filename($line) ";
    if($cl){
    my ($topack,$tofile,$toline) = caller($cl) ;
    $line.= "{$tofile($toline)}";
    }
    # тут линию можно дополнить своими
    open my $fh,'>>'.MyProject::Conf::LOGFILE;
    print $fh $line.$text."\n";
    close $fh;
    }
    
    my $alog = MyProject::Conf::LOGS;
    my $clog = MyProject::Conf::CLOGS;
    
    no strict 'refs';
    
    foreach my $ll (@$alog){
    my $method = lc $ll;
    if(grep {$_ eq $ll} @$clog){
    *{$method} = sub{my $self = shift; $self->_log($ll,@_)};
    *{$method.'_dump'} = sub{my $self = shift; my $text = shift; my $data = shift; $self->_log($ll,$text.':'.Dumper($data),@_)}
    }else{
    *{$method} = sub{};
    *{$method.'_dump'} = sub{};
    }
    }
    

    немного по коду… MyProject::Conf::LOGFILE – тут просто лежит абсолютный путь к файлу логов.
    MyProject::Conf::LOGS – тут лежит массив имен всех доступных логов, я использую ['INFO','DEBUG','DERROR','TRACE']
    MyProject::Conf::CLOGS – массив логов которые необходимо выводить. Так я сделал потому, что не в се используемые логи необходимо выводить в данном запуске проекта.

    цикл идущий после no strict ‘refs’;

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

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 13Jul

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

    Бока в перле вылазят во время конкатенации. Тут умные дятьки пишут, что

    Конкатенация строки, имеющей флаг UTF-8, со строкой, у которой этот флаг снят, приводит к автоматическому преобразованию строки без флага. При этом Perl исходит из того, что строка в кодировке “latin-1″ или той кодировке, которая установлена с помощью прагмы “encoding”.

    другие умные дятьки ( гдето в пермонксах) , что
    use encoding ':utf8';
    зло. Ну как зло… вобщем я точно не помню, надо порыться в монксах, но помоему глюк с аплоадом картинок начинается.. при определении размера…

    Еще есть use utf8 , все скаляры в исходниках считать утфными. Сначало пользовался этой фишкой, а потом необходимость отпала.
    Вобщем закончелось все тем, что я написал “типокостыль”, для снятия со структуры утфного флага, потомучто XML::Simple вообще его везде растовляет, а для меня это критично.

    Вобщем собственно типс:

    sub _utf8_off_all{
    my $self = shift;
    my $ref = shift;
    my $rr = ref($ref);
    if($rr){
    if($rr eq 'ARRAY'){
    for(my $i=0;$i<@$ref;$i++){
    $ref->[$i] = $self->_utf8_off_all($ref->[$i])
    }
    }elsif($rr eq 'HASH'){
    foreach my $k (keys %$ref){
    if(Encode::is_utf8($k)){
    Encode::_utf8_off($k);
    }
    $ref->{$k} = $self->_utf8_off_all($ref->{$k});
    }
    }else{
    die 'UNKNOWN REF in encodeall';
    }
    }else{
    if(Encode::is_utf8($ref)){
    Encode::_utf8_off($ref);
    }
    }
    return $ref;
    }

    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 01Jul

    я даже и не вспомню, почему я решил назвать “tips” этот раздел, наверно гдето слыхал.

    О… только что прогулил, оказалось, что это “советы”. Хм.. советы конечно это круто, слишком круто для этого раздела. Просто прикольные вещички, до которых я сразу бы не догодался.

    может просто маленькие примерчики кода.

    Возможно, в последствии я их буду потихоньку отсортировывать, сведу в какието правила. Но пока просто типсы.

    Rating 3.00 out of 5
    [?]

    Tags:

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...