Глупо, вообще-то. А код у вас тоже в БД? Но если хочется разнообразия в сексе, то и Django несложно приучить таскать шаблоны хоть из БД, хоть из zip-архивов, хоть из виндовского реестра. :D
Нет. Данные из БД извлекаются быстрее, чем из файловой системы. По крайней мере на PHP ;) (Perl в пример не берём, сейчас не знаю, а года три назад извлечение данных через DBI было в 9(девять!) раз медленнее, чем через mysql_connect+mysql_query)
>Но если хочется разнообразия в сексе, то и Django несложно приучить таскать шаблоны хоть из БД
Так и запишем - в Django извлекать шаблоны из БД - затрахаешься.
> Так и запишем - в Django извлекать шаблоны из БД - затрахаешься.
Ох уж мне эти записыватели. Ваш ПХП, наверно, читает и выполняет ваши желания прямо из моска, раз написать функцию load_template_source(template_name) из десяти строчек - это уже "затрахаешься"? А таскать можно хоть через джанговский ОРМ. Тогда и редактировать можно будет из джанговской автоматической админки, и права доступа на них раздавать какие надо.
15 страниц епть
работники блин, когда работать будете?
сколько можно лясы чесать. ну нравится людям пхп они и мануал наизусть выучили. чо им теперь переучиваться?
давайте я вам еще тем подкину:
- windows лучше чем linux
- freebsd гумно
- kde4 умоет macosx aqua
> Так в том-то и дело, что тут идёт борьба за каждую строку, каждый символ ;)
Ну итить. Не надо слова про 10 строчек понимать буквально. Можно, наверно, и в 2-3 уложиться.
Или идёшь на http://code.djangoproject.com/newticket, заполняешь заявку, и если твоя функция окажется полезной, её с удовольствием включат в основное дерево.
Не позорься, мальчег Ацелер. Этот эдитор на яваскрипте. Реализация серверной части уже есть в двух вариантах для руби. Так что спи спокойно. Питон тоже есть в наличии.
Да, насчет авто-адмнки правда. Нету под рельсы. Я за две недели сделал себе эту хрень. Ниже приведу пример сценария добавления новостей. Вот весь код контроллера:
class Admin::NewsController < AdminBaseController
before_filter :authorize
layout "admin"
# script definition
@@script_definition = {
:model => :news,
:list_columns => %w( id title text ),
:list_paginate => {
:order => 'id desc'
},
:obligatory_fields => %w( title text ),
:form_fields => %w( title hot fixed text ),
:fields => {
'id' => {
:title => "Id",
},
'title' => {
:title => "Название",
:tag => 'text_field',
},
'hot' => {
:title => "Горячая",
:tag => 'check_box',
},
'fixed' => {
:title => "Фиксировать",
:tag => 'check_box',
},
'text' => {
:title => "Текст",
:tag => 'fckeditor_text_field',
:list_filter => 'cut',
}
}
}
end
Как видите, используется и fckeditor и сам код записан чисто в декларативном стиле. Тоесть просто описана форма и формат вывода списка новостей. У меня похожая вещь есть и для php, но в отличие от него, на РОР-е не пришлось писать SQL-запросов.
> class Admin::NewsController < AdminBaseController
before_filter :authorize
layout "admin"
# script definition
То же самое и за то же время можно делать в php. Уже много лет.
Например, с помощью связки DB_Table+HTML_Quickform+DB_Datagrid.
Такой же декларативный стиль, такой же простой и даже более изящный
стиль. Теперь подобные вкусности наконец-то появились и для ruby.
Ну, и вопрос напрашивается внновь и вновь: в чём новизна и в чём выгода?
>15 страниц епть >работники блин, когда работать будете? >сколько можно лясы чесать. ну нравится людям пхп они и мануал наизусть выучили. чо им теперь переучиваться?
> Например, с помощью связки DB_Table+HTML_Quickform+DB_Datagrid.
Слушай, харош брехать. Если ты имеешь ввиду классы из Пииира, то с того говна, что ты перечислил ничего не можно задействовать на практике. Я когда-то пытался, потом блеванул и просто доделал нужную функциональность в собственных классах.
Потом хотя бы не врал насчет "Такой же декларативный стиль, такой же простой и даже более изящный", потому что в пхп для создания ассоциативных массивов используется array и код уже будет длиннее.
Ты вообще читал, что я написал выше? Там написано, что такое же я сделал для пхп раньше, но мне пришлось ипаться с sql-ем, что уже не есть хорошо.
Дело в том, что я пошел в этом деле очень много раз против религии :). Например вынес вещи, которые относятся к модели в script_definition (который сам по себе находится в контроллере) :). Боюсь, что запинают :)
> Если ты имеешь ввиду классы из Пииира, то с того говна, что ты перечислил ничего не можно задействовать на практике.
Не торопись показывать всем свою некомпетентность. Я не буду спорить.
Проще один раз показать, чем много рассказывать. Итак, сравниваем.
Твой код на ruby:
class Admin::NewsController < AdminBaseController
before_filter :authorize
layout "admin"
# script definition
@@script_definition = {
:model => :news,
:list_columns => %w( id title text ),
:list_paginate => {
:order => 'id desc'
},
:obligatory_fields => %w( title text ),
:form_fields => %w( title hot fixed text ),
:fields => {
'id' => {
:title => "Id",
},
============================
Мой аналог на php:
class news extends DB_Table
{
var $col = array(
'id' => array(
'type' => 'integer',
'require' => true,
'qf_label' => 'ID',
'qf_type' => 'hidden',
),
'title' => array(
'type' => 'varchar',
'size' => 255,
'qf_label' => 'Title',
'qf_type' => 'text',
'qf_attrs' => array('size' => 80),
),
'hot' => array(
'type' => 'boolean',
'qf_label' => 'Hot',
),
'fixed' => array(
'type' => 'boolean',
'qf_label' => 'Fix',
),
'newstext' => array(
'type' => 'clob',
'qf_label' => 'Text',
'qf_type' => 'text',
'qf_attrs' => array(
'cols' => 80,
'rows' => 20,
'class' => 'fckeditor',
),
),
);
var $idx = array(
'id' => 'unique',
'title' => 'normal',
);
var $sql = array(
'all' => array(
'select' => '*',
'order' => 'id desc',
)
);
} // end of class news
Мои преимущества:
1) Из определения класса news я автоматически имею определение таблицы
БД, которая создаётся вместе с индексами на лету при первом обращении (create table).
2) У меня нет лишней сущности - твоего списка obligatory_fields.
Обязательность поля указывается непосредственно в его определении свойством 'required'.
3) Не знаю, возможно ли это в твоём коде, а у меня в определении поля
я могу вставить любое правило его проверки, в дополнение к автоматическим проверкам на тип переданного значения.
>> так вот, реальные проекты предполагают один срок сдачи - "вчера вечером".
>Реальные проекты предполагают сначала выяснение требований, оценку временных затрат и проектирование.
>PartyZan ** (*) (17.07.2006 15:21:44)
Молодец Партизан! - все правильно! Только _после_ "выяснение требований, оценку временных затрат и проектирование" наступает "срок сдачи - вчера вечером!". Welcome to real life :)
> Только _после_ "выяснение требований, оценку временных затрат и проектирование" наступает "срок сдачи - вчера вечером!". Welcome to real life :)
Странные какие-то у вас проекты... нет, конечно если сразу сказать "будет готово завтра" без оценки рисков, требований (хотя бы начальных) и существующих аналогов, то да, как раз так и получится
Не "вообще", конечно. Да и нет такого языка, который нравился бы программистам "вообще" :) Язык должен нравится коллективу, который работает над задачей.
> Тебе _лично_ - обязательно. Писать на нелюбимом языке - явно снижать производительность работы за счёт худшей эргономики :)
На основании личного опыта поддержки "проектов" писанных пыхпыхкодерами, могу утверждать, что наиболее частые ошибки в их "коде" -- ошибки в проектировании. Не хватает абстрактного мышления умельцам. Это к слову о пользе низкого порога вхождения.
ЗЫЖ. К примеру, что такое JOIN, не говоря уже о реляционной алгебре, 95% понятия не имеет.
> Молодец Партизан! - все правильно! Только _после_ "выяснение требований, оценку временных затрат и проектирование" наступает "срок сдачи - вчера вечером!". Welcome to real life :)
Если у ПМ-а часто срок сдачи "вчера вечером", то вам надо найти ПМ-а, который имеет понятие о проектировании и оценках сроков. И никакого отношения текущий ПМ (проедатель мозга) к риллайф не имеет. Гнать такого надо об стену.
В джанговском факе вот чего нашёл (цитата): "Стабилен ли Django? Да. World Online использует Django уже больше двух лет. Сайты, построенные на Django, выдержали наплывы трафика мощностью более миллиона запросов в час и несколько публикаций на Слешдоте. Да, Django вполне стабилен."
>Это к вопросу о сайте "с 2 лимонами пользователей в день", если кто ещё помнит, о чём речь шла. :)
вобще конечно сложно говорить о производительности ибо аля-википедия завсегда будет быстрее аля-гугли. но джанги правы, у нас (правда на черипухе) при 2х лямах в день тот сервак (dualxeon 2gb ram) показывал la где-то в районе 1-2 так что его еще грузить и грузить было. задача намного сложней чем у вики. если примерно, для пробегающего юзера по конкретным параметрам обновлять конкретные значения порядка 10 массивов. в питоне все летало. в пхп бы пришлось играть в игры с shared mem либо постоянно скидывать в мой-ексюель. в последнем случае, должен заметить, даже heap-таблицы с индексом на каждую возможную комбинацию ключей тормозят нипадецки
Ну и ты сгенеришь из этого кода только форму со всеми валидацями. В РоР такая же херня вообще без кода делаеться (только с SQL). А у товарща Криса, я так понимаю генрится полностью админка... Хотя я не видел как это выглядит не могу утверждать.
Нужно прикреплять к сущность картнику, файл картинки хранится в поле таблицы, нужно аплоадить его в той же форме. В rails это делаеться 1 строкой в контроллере 1 во view. Как с QuickForm? Ну или нужно поле с ajax автокомлитом. Тоже самое 1 строка в контроллере 1 во view...
> Зачем искать, если я их даже использовал. При их тормознутости верить в то, что на них можно что-то из области Википедии сбацать - это уже надо быть оголтелым фанатом :)
А зачем на zope/plone реализовывать проект а-ля Википедия (можно подумать, что каждый второй Ваш проект - из той же оперы по нагрузке)? Что есть Википедия - огромный сторадж неструктуризированной информации. Там бизнес-логики - ноль. И реализовывать это на zope/plone - это все равно, что стрелять из пушки по воробьям. zope играет на поле java app-систем. А на этом поле php даже очень нерядом не валялся.
Ну уже получше чем я видел в основном. Хотя опять из-за убогости ПыхПых пришлось добавлять внешний парсер. Хотя в CakePHP без этого обошлись... Но до ActiveRecord ещё далеко.
Ладно чё я загоняюсь, вроде забыл о ПХП как о страшном сне... Perl - нашё всё;)
Aceler, а как ты вообще можешь что-то делать, если такие глупые ляпы допускаешь? :) fckeditor у него на пыхпыхе, ооо на жабе, сроки сдачи вчера...писец
> Aceler, а как ты вообще можешь что-то делать, если такие глупые ляпы допускаешь? :) fckeditor у него на пыхпыхе, ооо на жабе, сроки сдачи вчера...писец
> 1) Из определения класса news я автоматически имею определение таблицы БД, которая создаётся вместе с индексами на лету при первом обращении (create table).
Это не преимущество, а особенность реализации. Я тоже могу сделать то-же самое, но предпочитаю таблицы добавлять через phpmyadmin.
> 2) У меня нет лишней сущности - твоего списка obligatory_fields. Обязательность поля указывается непосредственно в его определении свойством 'required'.
Такой вариант реализации был выбран не случайно. Я тоже мог всунуть это, как дополнительное поле. Но решил не пихать туда для своего же удобства. Собственно, посмотри, у меня это занимает одну строку и удобно редактируется в одном месте. Тебе же приходится лазить по всему файлу, чтобы указать обязательность.
> 3) Не знаю, возможно ли это в твоём коде, а у меня в определении поля я могу вставить любое правило его проверки, в дополнение к автоматическим проверкам на тип переданного значения.
По правилам ЛОР-а мне нужно было спиздеть и сказать, что да! Конечно могу и конечно такое есть. Но это не так. Пока-что я этого не сделал, что не мешает добавить необходимую мне функциональность. Собственно делается в течении пару-тройку минут.
Но ведь дело не в этом. Я могу тебе привести пример такого же кода, который я сделал на пхп и он только чуток будет отличаться от того, что привел ты. Я тебе про другое толкую. Мне на пхп пришлось писать в полтора раза больше кода.
Во-первых все SQL запросы ручками. Потом в синтаксисе нету многих приятных вещей. Речь идет не о том, что можно, а что нельзя. А о том СКОЛЬКО займет реализация того, что можно. Я ушел с пхп не потому что на нем нельзя, а потому что ДОЛЬШЕ. Потому что синтаксис БЕДНЫЙ. Потому что я уже просто УСТАЛ на нем программировать. Мне программирование на пхп не приносило УДОВОЛЬСТВИЕ. Руби для меня стал свежим глотком воздуха.
> Ну и ты сгенеришь из этого кода только форму со всеми валидацями. В РоР такая же херня вообще без кода делаеться (только с SQL). А у товарща Криса, я так понимаю генрится полностью админка...
По сути да, запись выше создает не только страницу с формой но и страницу с табличкой, со списком всех новостей, разбитых на страницы.
Где я такое писал? Я писал, что у него коннекторы на PHP, Perl, ColdFusion, ASP, JAVA и ASP.Net. Пока видел утверждение, что его можно _прикрутить_ к Ruby. Уговорил.
Не ошибается тот, кто ничего не делает. Вот ты, например, ничего не сделал. Где 4 форума? Где интернет-магазины? Где GroupWare системы? Пока видел только один форум.