фух
короче, фотоальбом:
http://ldap.x0.org.ua/photo_album/10/2
http://ldap.x0.org.ua/photo/view/10/52
http://ldap.x0.org.ua/photo
значит есть в фотоальбом, но нужно не много подправить еще, потом видео стругать так же!!
в фотоальбоме:
1) может нужно где-то ссылки еще подправить или в логике со всем не много, там не работает еще" удалить фотографию" и т.д.
2) там есть приватные фотоальбомы и фотольбомы которые прицепленые к контенту (к темам), вот вывод и там и там надо подправить или не много изменить логике добавления... + в профиле показать те фотоальбомы которые пользователь содал
2,а) еще сделал так чтобы фотоальбом можно было прицепить к контенту (в темах, личные, блоги, группы) чтобы не от фонаря
3) ну соответсвенно все фотографии должны быть в фотоальбомах
ну это ладно короче...
я вот еще хотел сейчас сделать комментарии к каждой фотке или к видео файлу чтобы можно было можно было оставлять... но мне кажется что это много гемороя сейчас будет
но еще более еще поиск надо сделать, группы с конструктором анкетирвоание, типо, как соц. сеть... и в них же тоже фотольбомы и фотографии
короче, вопрос, а кто как думает что сюда нужно еще добавить? может кто-то посоветует что либо? что тут делать, может я не так что-то делаю?
ЗЫ: ну я прогармму написал эту, можно сказать уже написал, только возможно не тратил много времени на маленькие тонкости (наверное заметили) по этому идеально не получилось, сейчас хотел сделать внешние сладости (то что я планировал, фото видео) и тогда контент заваливать.... уже даже бот есть + документацию и на английский язык, тоже
====
кто пользуется фотогалереями?
я сделал чтобы по одной фотке можно было завивать в фотоальбом....
там нужно заливать каждую фотку? по отдельности?
или сразу чтобы выбрать в браузере каталог и оно все пойдет загружатся?
на хостингах картинок, везде по одной картинке закачивается
я хотел про другое вообще-то....
я так понял что если писать большую програму, то в любом случае нужно писать все в кучю...!
просто вся проблема программирвоания заключается в том чтобы написать красивую парадигму большой программы, ну вообщем ладно...
как сделать парадигму, если парадигмы фремворка и парадигмы-парадигмов не хватает?
===
я хотел спросить, потому что:
я сталкивался с готовыми программами и про это обсуждалось в списках рассылки:
другими словами: есть 20 модулей которые связываються между собой и все как один модуль!! чтобы изменит например 3-4, то нужно все переписать или многие модули переписать, т.к. получается что нужно все 20 переписать из этого следует: просто все переписать или сделать все в кучу...
т.е. если парадигма очень не удобная!!! если стараться все связывать между собой...
как правильно писать? или все равно?
вот например у меня есть модуль для комментариев, расчитано чтобы ставить комментарии в темах,
НО если я хочу сделать этот модуль почти похожим еще как минимум для 5 элементов (кроме тем), например комментарии в: фото, видео, приватные, группы, и блоги....
т.е. один и тот код нужно использовать минимум 7 раз даже один и тот же КОД и более-менее сложный (перебор и т.д.)
как лучше написать? старатся писать все в кучу? или писать один и тот же большой код 10 раз?кто как бы тут сделал?
или все равно?
в РСУБД есть реляционные (реляционная алгебра) и распределенные вычисления, например если будет реплицированна на несколько серверов, то вся система будет работать стабильно и выдерживать большие нагрузки
есть некоторые алгоритмы которые позволяют делать некоторые операции даже быстрее чем РСУБД (и даже на много быстрее, например релевантности не было на innodb, если я не ошибаюсь) ...
но как будет на практике никто не знает...
еще веб сервер будет статику отдавать на много быстрее чем динамику, смотря какой контент, подобная тема где-то была, например, сайт opennet.ru сделан на файлах, статьи на файлах
sub edit2 : Local : Args(0) { my ( $self, $c ) = @_; $c->forward( 'add', ['1'] );}sub delete_comment : Local : Args(2) { my ( $self, $c, @args ) = @_; $c->stash->{template} = 'edit_comment.tt'; if ( $args[0] =~ /^\d+$/ && $c->user_exists() ) { my $sql; if ( !$c->check_user_roles('moder_co') ) { $sql = 'AND created > ' . ( time - 86400 ) . ' AND id_un = ' . $c->user->{user}->{id}; } my $dbh = $c->model('DBI')->dbh; $dbh->do( qq{DELETE FROM comment WHERE id_cm = $args[0] $sql LIMIT 1}, undef ); } if ( $args[0] !~ /^\d+$/ || !$c->user_exists() ) { $c->response->redirect( $c->uri_for('/') ); } else { $c->response->redirect( $c->uri_for( '/view_content/' . $args[1] ) ); } $c->detach();}sub check_sql_comment : Privat { my ( $self, $c, $f, $edit, $edit0, $id_cm_sql, $id_co_sql ) = @_; # $edit0 - edit select comment my $method = $edit ? 'stash' : 'flash'; my $dbh = $c->model('DBI')->dbh; my $sql_comment = 'SELECT t1.id_co, t1.id_se, t1.id_un, t1.forbi_comm_co, t1.close_co, t1.hiden_co, t1.active_co, t2.active_se, t2.close_se, t2.id_un AS id_un_se, t3.email_sent ' . ( $edit0 ? ', t4.text_cm ' : '' ) . ' ' . ( $edit ? ', t4.id_cm, t4.created, t4.id_un AS id_un_cn' : '' ) . ' FROM content AS t1 LEFT JOIN section AS t2 ON t1.id_se = t2.id_se LEFT JOIN users AS t3 ON t1.id_un = t3.id ' . ( $edit ? ' LEFT JOIN comment AS t4 ON t1.id_co = t4.id_co AND t4.id_cm = ? ' : '' ) . ' WHERE t1.id_co = ? LIMIT 1'; my @sql; push @sql, $id_cm_sql ? $id_cm_sql : $c->request->params->{id_cm} if ($edit); push @sql, $id_co_sql ? $id_co_sql : $c->request->params->{id_co_comment}; my $sth = $dbh->prepare($sql_comment); $sth->execute(@sql); my $loop_data = $sth->fetchrow_hashref(); $sth->finish(); if ( !$loop_data->{id_co} ) { $c->$method->{error_no_id_co} = 1; $c->response->redirect( $c->uri_for( '/view_content/' . $c->request->params->{id_co_comment} ) ) if ( !$edit ); $c->detach(); } if ($edit) { if ( !$loop_data->{id_cm} ) { $c->stash->{error_no_cm} = 1; $c->detach(); } if ( $loop_data->{id_un_cn} != $c->user->{user}->{id} && !$c->check_user_roles('moder_co') ) { $c->stash->{error_no_id_un_cm} = 1; $c->detach(); } if ( $loop_data->{created} < time - 86400 && !$c->check_user_roles('moder_co') ) { $c->stash->{error_no_created} = 1; $c->detach(); } } if ( !$c->check_user_roles('moder_co') ) { $f->bad_fields_type('arrey'); $f->no_sql->zero_die( 'error_no_forbi_comm_co', $loop_data->{forbi_comm_co} == 1 && $loop_data->{id_un} != $c->user->{user}->{id} ); $f->no_sql->zero_die( 'error_no_hiden_co', $loop_data->{hiden_co} == 1 && $loop_data->{id_un} != $c->user->{user}->{id} ); $f->no_sql->zero_die( 'error_no_active_co', $loop_data->{active_co} != 1 && $loop_data->{id_un} != $c->user->{user}->{id} ); $f->no_sql->zero_die( 'error_no_active_se', $loop_data->{active_se} != 1 && $loop_data->{id_un_se} != $c->user->{user}->{id} ); $f->no_sql->zero_die( 'error_no_close_co', $loop_data->{close_co} == 1 ); $f->no_sql->zero_die( 'no_edit_no_un_cn', $loop_data->{id_un_cn} != $c->user->{user}->{id} ) if ($edit); } $f->no_sql->valid_id( 'error_no_id_co_comment', $c->request->params->{id_co_comment} ) if ( !$edit0 ); return $loop_data if ($loop_data);}=head1 AUTHORDmitriyemail: rtyug@ukr.net =head1 LICENSEThis library is free software. You can redistribute it and/or modifyit under the same terms as Perl itself.=cut1;
например, я не давно работал с одной программой где было все в куча нуписано на ORM, и разобратся все сложно
======
но вот я как раз читал где-то в списке рассылке, говорилось про недостатки DBIC, в том что все контроллеры должны быть не однородными!! т.е. в DBIC, можно крассиво написать код к 10 контроллерам, и может полуиться, так что нужно будет изменить программу! изменит 2 контроллера, а изменить не получиться, так как остальные 8 работать не будет, потому что они будут взаимосвязывающиеся ( все однородные ) и прейдется все 10 переписывать, вот лучше удалить все и написать заново…
я пожаловался и пришли они к выводу что надо все удалить, но там просто была программа не дописанная, правда...
=====
ну там есть много вариантов
http://search.cpan.org/~flora/Catalyst-Run...Type/Chained.pm
package MyApp::Controller::Greeting; use base qw/ Catalyst::Controller /; # this is the beginning of our chain sub hello : PathPart('hello') Chained('/') CaptureArgs(1) { my ( $self, $c, $integer ) = @_; $c->stash->{ message } = "Hello "; $c->stash->{ arg_sum } = $integer; } # this is our endpoint, because it has no :CaptureArgs sub world : PathPart('world') Chained('hello') Args(1) { my ( $self, $c, $integer ) = @_; $c->stash->{ message } .= "World!"; $c->stash->{ arg_sum } += $integer; $c->response->body( join "<br/>\n" => $c->stash->{ message }, $c->stash->{ arg_sum } ); }
вот я красиво диспатчизировал:
sub index_pages :Path('/last') : Args(1) { my ( $self, $c, $id) = @_; $c->stash->{template} = 'photo.tt'; $c->forward( 'last', [ $id, undef, undef, '1'] );}sub last : Local : Args(0) { my ( $self, $c, $id ) = @_; $c->stash->{template} = 'photo_album_privat.tt'; # if ( !$id_un || (!$c->user_exists() || $id_un != $c->user->{user}->{id}) && !$c->check_user_roles('moder_co') ) {# $c->stash( no_user_privat => 1, off_photo => 1, );# $c->detach();# } $c->forward( 'index', [ undef, undef, undef, '1'] ); }sub privat : Local { my ( $self, $c, $id_un, $id ) = @_; $c->stash->{template} = 'photo_album_privat.tt'; if ( !$id_un || (!$c->user_exists() || $id_un != $c->user->{user}->{id}) && !$c->check_user_roles('moder_co') ) { $c->stash( no_user_privat => 1, off_photo => 1, ); $c->detach(); } $c->forward( 'index', [$id, '1', $id_un] ); }sub index_pages :Path('/photo') : Args(1) { my ( $self, $c, $id, $privat, $id_un ) = @_; $c->stash->{template} = 'photo.tt'; $c->forward( 'index', [$id] );}sub index :Path : Args(0) { my ( $self, $c, $id, $privat, $id_un, $last ) = @_; $c->stash->{template} = 'photo.tt';
лучше сервер, ставишь PowerDNS который работает с MySQL, настраиваешь apache и чтобы он, тоже, хранил vhost в MySQL и все
или текстовые файлы обрабаытваешь (удалять/добавлять)
добавить А запись в Bind9 можно так:
sudo -u named perl -le 'open(F,...): print "host.name\t\t\tA\t192.168.1.1"; close F;' /path/to/zone.file && rndc reload
обновить serial еще надо желательно на единицу
ЗЫ bind9 может работать с MySQL
я выбрал на FS
есть pool connect
http://www.google.com.ua/#hl=uk&source=hp&q=pool+connect+php&btnG=%D0%9F%D0%BE%D1%88%D1%83%D0%BA+Google&meta=&aq=f&oq=pool+connect+php&fp=a0e5374bacaee8e0
http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html
http://www.google.com.ua/#hl=uk&q=pool+connect+perl&meta=&aq=&oq=&fp=a0e5374bacaee8e0
ЗЫ: еще не достаток, если будет на СУБД, то что если будет кластер серверов, то будет между ними большой левый трафик, чтобы отдать файл...
rtyug добавил 24.10.2009 в 10:59
были ли у кого-то проблемы кто отдавал статику через динамику?
http://www.google.com.ua/#hl=uk&q=nginx+antileech+&meta=&aq=f&oq=&fp=a0e5374bacaee8e0
нашел посмотрел
а можно ли сделать antileech для apache? или нужно будет все отадавать через динамику? (и картинки)
ради интереса:
были ли у кого-то проблемы кто отдавал статику через динамику? (в принципе если mod_perl, mod_php, или на Си написать же можно отдачу (только в CGI будет), то все равно будет?)
ЗЫ: по-моему, большой американский сервер картинок отдает через динамику, т.е. чтобы картинка появилась - нужно нажать (нажать на банер) и появиться картинка... хотя возможно там был самописный веб-сервер...
достаточно вот так:
$photo -> Write("photo.jpg");
он сам поймет что это jpg...?
если, да, ок, спасибо
rtyug добавил 22.10.2009 в 10:52
да, точно, я не обратил мнимание...
но нагрузка будет когда очень большое количество будет одновременно заливать... пока такого нету...
и размер файла можно ограничить не 2-40Мб, а 512кб-1Мб
видео когда конвертируется, то тоже нагрузка идет, но хорошо сжимается...
umask может стоять, где минимум определенные права можно поставить...