LINUX.ORG.RU

новый веб-фреймверк


0

2

Здравствуйте, мы с моим коллегой разрабатываем новый веб-фреймверк. Он не будет зависеть от языка или сервера. Вот вам пример

<html><head><title>Заголовок</title></head>
<body>
<?python
import somemodule
result = somemodule.do()
print result
?>
<div>текст</div>
<?python
print 123
?>
</body></html>

Фреймверк не ограничен каким-то конкретным языком, вполне допустимы и такие конструкции:

<?perl
print "<table>",(map{("<tr><td>",$_,"</td><td>",$ENV{$_},"</td></tr>")}keys %ENV),"</table>";
?>

Фреймворк поддерживает не только интерпретируемые, но и компилируемые языки:

<?c

char str[]="Hello world";

char *upcase=malloc(sizeof(str));
int i=0;
for(;i<sizeof(str);i++){
upcase[i]=str[i]>='a' && str[i]<='z'?str[i]-'a'+'A':str[i];
}
puts(upcase);
free(upcase);

?>

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

http://plasmon.rghost.ru/47517081/image.png -> http://rghost.ru/47517085/image.png

Мы приглашаем всех неравнодушные принять участие в обсуждении и развитии проекта

Ответ на: комментарий от vurdalak

Как в варинат а моделе, если у нас она активная и модная.
А контроллеры не толстые.

anonymous
()
Ответ на: комментарий от PolarFox

Это не шаблонизатор, ведь данные с клиента он будет получать (и применять) сам

nogaemz
() автор топика
Ответ на: комментарий от enemysystems

Классы чего? Классы на php? Или классы на JS (которых нет, но есть всякие кофескрипты)? Или классы чего-то абстрактного, что скомпиляется в обе платформы? SQL - это сложно само по себе. А редактировать мелкие вещи проще в одном месте, а не размазывая их по всему проекту

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Есть 1 проект, фишкой которого является 1 файл. Создал папку лого - фигачим туда, нет - фигвам - STDOIT. Там есть много ништяков, но коли надо что-то по-более-вот вам линк на лицуху (ничего плохого, просто думаю монетизаци).

helios ★★★★★
()
Ответ на: комментарий от nogaemz

подгрузку новых постов надо будет реализовать через AJAX

Не нужно.

по мере скроллинга

Тем более.

логику валидации надо будет сначала писать на клиенте

Зачем?

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

А как от этого избавляет фреймворк?

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

enemysystems
()
Ответ на: комментарий от vurdalak

Не согласен, где же аналитику держать? В контроллере положено делать верификацию и изменение модели. Вот хранить-считать в ней сумму/разницу - это хороший вопрос, но контроллер тут совершенно непричем. Задача контроллера только скормить данные моделе, а дальше все, он свое дело сделал. И вот тут встает вопрос - а что такое, эта самая сумма чисел? Это что-то в терминах бизнес-логики, или просто более красивое представление для пользователя. Приведу простой пример, допустим у меня есть ряд чисел 4, 9, 4, 6, 3, 5, 4, 2, 8, 0, 1, 3, 7, 0, 3, 8, 6, 8, 4, 5, 5, 7, 2, 2, 8, 0, 0, 6, 6, 6 - что вы можете сказать о этих числах? С точки зрения шаблонизатора я просто вставил эти данные в страницу. Но вот к примеру, если я возьму какой-то модный модуль Google Charts и скормлю эти числа ему (код страницы практически не изменится, только числа будут внутри вызова функции), так с точки зрения пользователя все полностью преобразится - будет красивый и понятный график. График тут играет роль инструмента аналитики, только анализ производится уже в голове пользователя. А анализ может быть и сложнее, с применением огромного количества данных. Я уже не говорю, если этот график надо будет построить из большого количества данных, а потом обеспечить выборку, дабы можно было хоть сразу все осмотреть, хоть конкретный элемент - это задача уровня Google Maps. И я уже не говорю, что если мне взбредет идея отказаться от Google Charts и генерить картинки самостоятельно. Все это - представление. Причем, только для браузера (ну зачем мобильному телефону показывать километровые отчеты?), а раз так, то в моделе им делать нечего

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

На PHP. И объясни необходимость проверки чего-то там на стороне клиента.
JS вообще нужен только для фич вроде выбрать/снять все галочки - чисто дополнительные удобства. Остальное только мешает.

enemysystems
()
Ответ на: комментарий от enemysystems

Если вы никогда не сталкивались с многократным вводом пароля из-за малейших ошибок в формах, то явно не вам следует рассуждать о нужности или ненужности тех или иных функций. Если форма отправляется на сервер, а потом говорит что я что-то не так ввел, а теперь должен ее с нуля заполнять опять - это признак очень плохого сайта. Часто значения заполняют уже на сервере - это еще хуже. Поэтому проверять форму надо еще на клиенте. Про ненужность AJAX вообще промолчу, оставайтесь в 1993 году и дальше.

nogaemz
() автор топика
Ответ на: комментарий от vurdalak

С моделью MVC я знаком очень хорошо, но к сожалению, в сознании большинства MVC - это что угодно, представление в контроллерах, правка данных во вью, модель вообще что угодно. Я бы мог покопипастить книжки, но зачем? На всякий случай, я говорю о классическом MVC, который не имеет к вебу никакого отношения. Укажите на мои ошибки, если их видите, не троллинга ради, а взаимопонимания для.

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Я же писал выше, что задача - минимизировать затраты на создание и поддержку сайта.

Вы собираетесь из html вызывать gcc, какая тут может быть минимизация?

Ну вот сами скажите, вам проще прописать ссылку на файл, а потом не забыв названия, создать еще и этот файл?

Лол. Джависты дружно ржут над вами. Да и я то же. Как-то толсто.

Или проще сделать некую директиву в файле, после которой прописать нужное, выкинув из головы ненужные сущности вроде файлов и их имен?

Я хотел Вам примерчик накалякать: файлик, с несколькими ЯП. Но меня затошнило уже на 3х. Вы хоть представляете себе что за зоопарк будет? И какую нагрузку он будет нести на сервер ? пр минимизацию я вообще молчу, ей тут даже не пахнет.Вам бы, с другом, школу бы сначала закончить...

Или вы любите переключать окошки редактора, выискивая нужный файл и сохраняя/восстанавливая контекст в своей голове?

Страуструп негодует, Sun Microsystems вместе с людями из Oracle просто застрелились. Парень, ты это, чего? Разделение чего-то большого на менее объемные модули логично, понятно и эффективно.

Лично мне это делать сложно

Все правильно делаешь, даешь однофайловые проекты на 100500строк на кубейсике ! Интересно, табы расставлять тебе тоже сложно?
Не, народ, это явно вброс. Это жесть, расходимся, посоны.

comp00 ★★★★
()
Ответ на: комментарий от nogaemz

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

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Вот простой пример из моей работы: визуализация звука. На входе у нас PCM, его мы в лучшем случае, можем изобразить кривой линией на экране. Зато мы можем сделать FFT и получить новое представление. К примеру, можем потом посчитать спектр и отобразить его красивой спектрограммой. Ни контроллер, ни модель знать об этом ничего не будут - это просто прдставление данных, но само по себе FFT, да и последующий подсчет спектра - штуки достаточно затратные

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Ни контроллер, ни модель знать об этом ничего не будут

Почему это? У тебя данные идут прямо на представление, минуя обработку?

это просто прдставление данных

Это не представление, а исходник. Его нужно обработать в контроллере и выдать.

vurdalak ★★★★★
()
Ответ на: комментарий от comp00

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

Откуда и через что оно запускается, из темплейтера, прекомпилятора или через стодесятую утилиту сборки - задача фреймворка, который как раз и должен избавлять пользователя от размышлений откуда же оно запускается.

Джависты может и ржут, а мне вот надоело иметь в эклипсе по 100 вкладок, когда на этой самой джаве пишу, мне проще наделать кучу анонимных классов в виде замыканий (если их можно так назвать, т.е. new InterfacenameName(){mycodeHere();}), код не расползается по куче мест. Джависты пусть смеются дальше, а мне работать надо и делать работающие продукты.

Большие проекты делать не надо, километры кода я могу наделать сейчас на любом языке, получить кучу ошибок и проблем. Вместо этого надо писать маленькие, но емкие модули, которые бы полностью покрывали все потребности.

nogaemz
() автор топика
Ответ на: комментарий от vurdalak

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

Определения:

Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами.

Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции.

Так где и как процессить звук, если охота отобразить его в виде спектрограммы?

А вот и ваш случай:

Начинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате код моделей по факту является средством получения данных из СУБД, а контроллер представляет собой типичный модуль, наполненный бизнес-логикой, или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который Pádraic Brady, известный в кругах сообщества Zend Framework, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers)

Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в вид. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Так где и как процессить звук, если охота отобразить его в виде спектрограммы?

Я уже ответил.

А вот и ваш случай

Поздравляю, ты нашел одну из точек зрения на модель MVC. Даю тебе квест: убей 24 морлока, собери 5 костей некромантов и найди остальные точки зрения. Затем иди к Мастеру-с-дерева и отдай ему все артефакты, а он взамен даст тебе навык «программирование» 1 уровня.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

Как только пользователь будет вводить звук с клавиатуры, сразу код для определения спектра переведу в контроллер, как вы и советуете.

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Если форма отправляется на сервер, а потом говорит что я что-то не так ввел, а теперь должен ее с нуля заполнять опять - это признак очень плохого сайта.

Естественно. Сайт должен содержание формы запомнить.
Много ли ты видишь JS/AJAX вот здесь вот, на этом форуме? А если еще переключишься на нормальную тему (black)?

enemysystems
()
Ответ на: комментарий от nogaemz

GCC запускается 1 раз, при модификации кода, как это делает мейк,

Вау, это как? Я теперь что то вообще смысл затеи не пойму. Ты хочешь создать винегрет .html, затем «скомпилировать его». в результате чего о тебя появятся куча бинарников, которые и будут запускаться при апдейте странички? Не взлетит. На вопрос почему, я отвечу вопросом Зачем. Зачем оно надо? То что потери, по сравнению с java-апплетами будут, это 100%.с Что такого может сделать код C/C++ для веба, что не сможет java? И еще тебе не нравится лишний исходник не то что для лишнего ЯП, но и для лишнего класса, а тут ты собираешься держать кучу бинарников. Как-то парадоксально, тебе не кажется?

, а мне вот надоело иметь в эклипсе по 100 вкладок,

Хм... Лично у меня 10 вкладок это предел. При том что проекты бывают и из 20классов, и из 50. И я не брезгую под enum отдельный файл. И если вдруг мне надо перейти к какому то классу, я юзаю линки в IDE, а не просматриваю все древо. Зато мой код понятен и читабельный, в отличие от html-ного файла с зондами в виде вставок из других ЯП.

мне проще наделать кучу анонимных классов в виде замыканий (если их можно так назвать, т.е. new InterfacenameName(){mycodeHere();}), код не расползается по куче мест.

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

Большие проекты делать не надо

what?

километры кода я могу наделать сейчас на любом языке, получить кучу ошибок и проблем

если не изменишь свой подход к программированию, то да.

Вместо этого надо писать маленькие, но емкие модули, которые бы полностью покрывали все потребности

Ты опять себе противоречишь. Хотя бы по тому, что то, что ты предлагаешь, скорее макросы, чем модули. Модулями они бы были, если имели свойства модульности: самостоятельность, взаимозаменяемость, возможность использования в нескольких проектах. А кусок кода с областью видимости в один файл это никак не модуль.

comp00 ★★★★
()
Ответ на: комментарий от nogaemz

GCC запускается 1 раз, при модификации кода, как это делает
мейк, нагрузка на сервер минимальная.

есть такая штука:
critcl
http://equi4.com/starkit/critcl.html
http://andreas-kupries.github.io/critcl/

и по сути делает уже описанное
и даже сервер есть с использованием critcl
ну да, тут должны быть классические крокодиловы слезы
о трудоустройстве, моде молодых и прогрессивном быстродействии ))

Вроде еще стырили это на пистон, не ?
Ну а жабкин код и так быстрее Cи как обычно ))

bedcasus
()

Толсто, даже для пятницы.

ТС, почитай про MVC, например, в Django.

unfo ★★★★★
()
Ответ на: комментарий от nogaemz

В худшем случае будет как везде.

не хотелось бы троллить, но чёрт побери...
ребята, давайте сначала сделайте как везде, а потом ПОПРОБУЕТЕ улучшить
да и где это везде?

q11q11 ★★★★★
()

только мне одному кажется что это тред будет в стиле codeunity.ru

q11q11 ★★★★★
()
Ответ на: комментарий от enemysystems

Вот прямо здесь: хочешь формочку открыть - JS, хочешь отправить пост без текста - JS пишет «введите сообщение»

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

хочешь формочку открыть - JS

Можно и без этого, по ссылке пройти. Дополнительная фича для удобства.

хочешь отправить пост без текста - JS пишет «введите сообщение»

Это не много.

enemysystems
()
Ответ на: комментарий от comp00

Вы не понимаете весь профит от затеи. Я пишу код, а что дальше - я не знаю. Может быть он скомпилируется, может быть будет в рантайме работать, может быть прилетит волшебник и заколдует его. Я не знаю. Более того, я знать этого не хочу - это не моя работа, это работа фреймверка.

К примеру, взять play framework который на жабе - правим классы, жмем F5, все обновляется. Как оно там внутри - не наше дело. Аналогично и здесь. И в какое количество бинарников оно сгенерируется - меня совсем не волнует. Главное, дабы оно деплоилось клавишей F5 в браузере и не тормозило.

Код на С/С++ как вы его написали (я не знаю такого языка), может очень быстро делать разную математику и разные веселые алгоритмы, реализация которых на других языках... Будет явно подтормаживать.

Если говорить о смешивании кода - вам от него никогда не уйти. Никогда. Посмотрите опять же на play - нужно мне формочку отправить, а куда я ее буду отправлять? Или я хардкожу путь «к скрипту», что равносильно забиванию гвоздей микроскопом, или я, как и предполагают авторы, смешиваю код. Пусть не совсем так как здесь описано, но смешиваю. От этого не уйти в принципе.

Спорить про «модуль - один файл» не буду, есть множество систем, где именно такой подход к созданию расширений. Или вы считаете, что FreeSwitch писали быдлокодеры, которые тоже должны изменить свой подход к программированию?

nogaemz
() автор топика
Ответ на: комментарий от bedcasus

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

nogaemz
() автор топика
Ответ на: комментарий от q11q11

Видимо как и в других фреймверках. Вть к примеру SQL зачастую это простые обертки на SQL с маленьким количеством сахарка. Иногда обертки большие и очень сладкие, когда про SQL никто ни сном, ни духом, существуют только объекты, чъя сериализация/десериализация покрыта тайной. Или взять скажем NOSQL-inmem базы, где можно творить беспредел, недоступный остальным, но нужно платить за это памятью

nogaemz
() автор топика
Ответ на: комментарий от enemysystems

Это «не много» - только одна формочка, когда их будет под сотню, будет уже много. Но главное, каждый такой обработчик можно просто забыть - это источник ошибки. Если тут можно совершить ошибку, т.е. система тебе это позволяет, то ошибка будет совершена рано или поздно

nogaemz
() автор топика

Народ, это же замечательно. С одной стороны, парочка идиотов будет занята чем-то своим и не станет вредить. С другой стороны, можно не бояться появления очередного говноподелия — потому что они это не напишут никогда.

Miguel ★★★★★
()
Ответ на: комментарий от nogaemz

оно и есть модуль сервера, а сам сервер у нас на торнадо, пока по тестам все просто летает

интересно, а как вы свои 10 строк тестируете?

drBatty ★★
()
Ответ на: комментарий от nogaemz

Потому что проще править 1 файл, а не 500 мелких.

хм. Пойду-ка я спать. А то лошади зелёные в глазах, а на ЛОРе так вообще что-то непонятное.

Надеюсь, как проснусь, тему снесут.

drBatty ★★
()
Ответ на: комментарий от nogaemz

Ха ха, ну не я же изобретаю тут лисапеты и не ведая истории
нехватки ресурсов ?))
За все надо чем-то платить ...
И даже за отсуствие чувства юмора ))

bedcasus
()
Ответ на: комментарий от nogaemz

Вы не ответили на вопрос: зачем нужна кросс-язычность на таком уровне? Зачем мне используя Ваш фреймворк писать на С, если я могу куда с лучшей производительностью написать на js, например? Про С++ я вообще молчу: без ООП и шаблонов он не нужен. Хорошо бы было дать ответ, зачем давать такую возможность. Ориентироваться на людей не знающих языки, ориентированные на веб, дать возможность ляпать странички? Но зачем? если он знает С++, он освоит Java на уровне апплета за несколько часов. На худший случай есть php в конце концов. Или Вы хотите используя С, прямо из веба получить доступ к системному API ? Это будет мега дыра, да еще и тормознутая. В общем, мне не понятна цель данного фреймворка. Просто сделать, что бы было — не нужно. Зачем нужен фреймворк, если им никто не будет пользоваться?

comp00 ★★★★
()

да не слушайте вы этих зануд готовьте статью для хабра, там вас ждет успех

anonymous
()
Ответ на: комментарий от comp00

Хорошо, только зайдем немного в прошлое. Зачем был создан пхп, если было уже до него множество языков на любой вкус? Зачем была создана жаба, которая призвана работать якобы везде, а на практике этого не делает?

Главное - это не столько язык программирования, главное - это окружение. Хотел ты в недалеком прошлом подергать телефонный вибратор - изволь учить j2me, так как вендор предоставил SDK, заточенный под конкретный язык, только там есть доступ к нужному окружению. Захотел делать окошки, да все кроссплатформенно, как у богатых людей - учи кресты, так как на жабе это хоть тоже можно, но чтото не так красиво как на кути (на вендоров можно было уже не смотреть и использовать более удобные средства). А захотел отправить формочку на сайт - тебе нужен урленкодер, пачка лапши для доступа к гуи-элементам, а когда сформируешь запрос - чем-то его отправить, к примеру апачевыми поделиями, хотя можно было все это задекларировать в простом коде на хтмл. Или скажем пхп, в нем нет ничего полезного вообще, зато есть встроенный шаблонизатор, парсер урленкода и мультипарта, т.е удобная работа с новым окружением - вебом.

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

Вы отлично пишите на жс - это хорошо, а я этим похвастать не могу, зато я быстро пишу на си и питоне. Зачем загонять человека в рамки пхп, как это предлагаете вы? И не нужно учить никакие апплеты. ООП, если что, тоже никто не отменял.

nogaemz
() автор топика

А тем временем казус в своем профиле обнаружит пополнение игнорирующих, дискуссия - это хорошо, но срать тут не надо

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Какой ошибки? Нормальный движок должен содержание формы запомнить. И если он ее не принимает, вывести форму с тем же содержанием. И делается это просто.
JS — только для дополнительных удобств.

enemysystems
()
Ответ на: комментарий от enemysystems

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

nogaemz
() автор топика
Ответ на: комментарий от nogaemz

Да ради Бога ...
Вот когда сделаете поддержку пистона 2.6, 2.7, 3.x, perl,
набора версий php, и это все не будет течь и падать ... некторое время, то, возможно, будет меньше иронии у меня к обильной писанине.

bedcasus
()

Покрутить пока нечего

А чего пришёл тогда?

Мы приглашаем всех неравнодушные принять участие в обсуждении и развитии проекта

Работать надо, а не обсуждать.

Wizard_ ★★★★★
()
Ответ на: комментарий от soomrack

Вот сколько времени вы тут потратили на споры? А ведь мог уже бы и альфу выкатить.

Сам понял, что сказал? Как он мог выкатить альфу, если этой альфы не только нет, но и не будет никогда? И зачем она нужна, эта альфа?

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.