Зачем искать, если я их даже использовал. При их тормознутости верить в то, что на них можно что-то из области Википедии сбацать - это уже надо быть оголтелым фанатом :)
>ЗЫ. тут узнал, что на оутсорсинге труду php-шника оплачивается в районе 10-15$ в час, а zope/plone - в районе 50-70$
Начиная с php4.4 такие вещи вызвают notice (return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]), потому как так писать в корне не верно. Если хочешь продолжать писать такие извращения, флаг в руки.
ЗЫ И ещё кто то тут говорит про вменяемых программеров. Руки бы поотрывал.
А если понадобится поисковик вроде Гугла, то придётся в Си идти.. значит по твоей логике Си лучше для веб разработок, тк только на нём можно сделать аналог Гугла :) Или для чего ты там приводил примеры того, что на ПХП сделано, а на других нет :)
>>1. Как уже говорили с РоР можно не использовать CMS достаточно генераторов и энжинов
Битрикс - эт не ЦМС, это гораздо больше и серьёзнее, Руби скорее всего свалится под нагрузкой в 3 клиента из-за обилия всякой херни, которые собирает битрикс :)
> Муаха товарищь видимо не в курсе на чём написан fckeditor этож надо проявить такую некомпетентность:))
Товарищ проявляет некомпетентость только что. Сам редактор писан на JavaScript. А к серверной части он чем подключаться будет? Или здесь собрались любители /dev/null?
> А если понадобится поисковик вроде Гугла, то придётся в Си идти.. значит по твоей логике Си лучше для веб разработок, тк только на нём можно сделать аналог Гугла :) Или для чего ты там приводил примеры того, что на ПХП сделано, а на других нет :)
Причем тут идти писать? Я говорю о том, что это можно взять и использовать. Google тоже можно "взять". Но он будет рекламу свою вставлять.
>Для любого языка есть своя ниша, свои плюсы и минусы, и выбирать инструмент стоит исходя из задачи, а не из собственных предпочтений
С этим не спорю. Только добавлю. К задаче стоит добавить ещё целый спектр прочих условий. Включая пресловутую инфраструктуру :) Да и в требованиях заказчика язык может быть указан прямо :)
>А на чём www.google.com работает? А код посмотреть можно?
"gg:how google works" и перечитывать пока не надоест :) Можно начать с "wp:google" .. Код конечно никто не даст, но через гугл уже много кодеров прошло, да и в разделе job всё ясно и понятно что гугль на плюсах..
>Хороший программист пишет не на том, что ему нравится, а на том, что лучше подходит для решения задачи.
Чтобы писать на том, что лучше подходит, нужно быть не просто хорошим
программистом, а очень хорошо знать несколько языков, охватывающих все
известные области применения. Нереально.
> На вход ему подаётся массив ассоциативных массивов, содержищих поля
date (в unixtime), title (строка) и uri (строка). Нужно вывести
средствами шаблона эти данные в виде списка дат в POSIX-strftime
формате, заголовков со ссылками. Если дата - за последние сутки, то
пишется только время, если больше - только число. Заголовки порезать
до 60 символов.
Ну, раз пошла синтетика:
<ul>
$data.menu{
$data.date=^data:unix-timestrap($data.date)
<li>^if($date.date>^data:now[]-86400){
$data.date.hour ч $data.date.minute м
}{
$data.date.year^.$data.date.month^.$data.date.day
}
<a href="$data.uri">$data.title.left(60)</a>
</li>
}
</ul>
:P
> Товарищ проявляет некомпетентость только что. Сам редактор писан на JavaScript. А к серверной части он чем подключаться будет? Или здесь собрались любители /dev/null?
Ещё раз муахаха. Серверная часть есть для многих языков более-менее используемых в веб, в том числе для Питона и Руби.
Ну да, на пару строк разбить не помешает. Длинные имена функций, но
принцип тот же. По большому счёту разницы между ruby и php в данном
примере нет. Псевдокод выглядит примерно одинаково:
>Х.з. я тоже так думал. Спросил как-то в Talks - большинтсву такой код был абсолютно понятен (даже тем кто не знал питон)
Разница между "код понятен без знания языка" и "код легко воспринимается при знании языка" может быть просто огромной :)
Безусловно, приведённый код совершенно понятен для тех, кто Ruby не знает.
Но восприятие такого кода требует от мозга намного бОльших усилий, чем от разбитого на отдельные смысловые элементы.
Любой автономный модуль должен состоять не более чем из 7+/-2 токенов. При чём лучше "-" :) человеческое сознание просто не может оперировать одновременно более, чем 7+/-2 элементами.
Если код делится на элементы чётко и без синтаксического шума, то хорошо. Если деление на элементы усложняется, появляется шум, мозг может перестать воспринимать отдельные элементы самостоятельно. И ему придётся прибегнуть к более детальному разделению, посимвольному. Соответственно, автоматически падает зона охвата. Мы уже видим не программную конструкцию, а только один элемент. Потом, когда мы элемент распознали и вычленили, мы перейдём к следующему. В итоге, каждый раз, мозгу придётся заново "пересобирать" информацию. Приводя программистскую аналогию, мы переходим от выполнения компилированного кода к интерпретации. Что серьёзно снижает быстродействие :)
Поэтому, кстати, в сабжевой тройке наивысшая читаемость будет у Питона (хотя я тут как бы на стороне PHP выступаю :)), потом - у PHP и потом - Ruby.
Пока программист "читает по слогам" - Ruby ему будет нравится. А вот потом... Ну, тут уже от степени испорченности зависит :)
...
К сожалению, не могу оценить Parser, не знаю его (но полагаю, что его уровень будет как у PHP) и Haskell (кажется, он хорошо токенизируется, но токены его мне совершенно непривычны, так что не могу оценить правильность вывода, да и вообще, у меня мозги на императивном программировании закостенели).
Ну, я за краткостью не гнался :) (это реальный код JBForth, при чём может вызываться непосредственно из среды исполнения... например, когда я администрирую запущенный сервер MMORPG - прямо из программы-клиента :))
> Жду ответный пример в системе шаблонов Django или RoR
На Django:
<ul>
{{ for field in data }}
<li>
{{ field.date|my_format }}
<a href="{{ field.uri }}">{{ field.title|truncate:60 }}</a>
</li>
{{endfor}}
</ul>
Фильтр my_format пишется на нормальном питоне,
а не на каком-то постороннем недоязыке:
def format_date(date):
if (datetime.now() - date).days < 1:
reutrn date.strftime('%H:%M')
else:
return date.strftime('%Y-%m-%d')
Шаблоны smarty слишком много умеют, и провоцируют
разработчиков засовывать в них слишком много логики.
Как в нашем любимом недоязыке PHP. Напротив, в Django
вся логика пишется на питоне, а язык шаблонов там сделан
в духе здорового минимализма. Как результат, шаблоны
можно отдавать всяким дизайнерам-верстальщикам, которые
в Питоне ни бум-бум, и они при всём желании не смогут
ничего сломать.
>А что же тут его как пример проекта на RoR или Python толкают? :)
Нет, я к Руби и Питону не очень хорошо отношусь, так же как и к ПхП впринципе :) Просто там в пример приводились какие-то проекты, написанные на ПХП, но нет аналогов на Руби или Питоне.. Мне и непонравился этот странный показатель языкастости этого языка :) Ведь многим проектам в вебе нет аналогов на ПХП..
Ну, на самом деле реализация более чем простая, и тут спорить
бессмысленно, так как добавитьь её пара пустяков. Однако факт отсутствия
Ruby и Python в списке server-side языков говорит о другом ;)
О том, насколько часто их используют для таких задач... И действительно,
зачем в хомяке fckeditor? ;)
Конечно. Это же не шаблон, это язык. Сам себе шаблон :)
Обычно код на parser состоит из двух частей: функций и классов в фале auto.p, подключаемом автоматически, и шаблоне в файле *.html, в котором используются эти классы и функции. Синтаксис при этом получается одинаковый.
Можно работать и в стиле PHP: запихнуть все в переменные, а в шаблоне использовать только вывод этих переменных, или наоборот, запихнув все в функции, и смешать логику и внешний вид... или кому как нравится.
>Любой автономный модуль должен состоять не более чем из 7+/-2 токенов. >При чём лучше "-" :) человеческое сознание просто не может оперировать одновременно более, чем 7+/-2 элементами.
правило Миллера всего лишь правило Миллера, а не некий вселенский закон, которому бесприкословно подчиняется человеческое сознание. оно (сознание) всегда старается разбить поступающую информацию на небольшое кол-во элементов, на сколько удачно - это другой вопрос.
касательно восприятия:
я код на Ruby ни разу до этого в глаза не видел, но то, что написал CrazyPit абсолютно для меня понятно и не требует никаких обдумываний, да и читается (воспринимается) очень легко.
Засчитывается. Ещё один камушек на чашку ускорения изучения Django... Правда, для собственного любопытства пока только :)
>Фильтр my_format пишется на нормальном питоне, а не на каком-то постороннем недоязыке:
Ну, здрасьте... strftime в том примере как раз и есть фильтр, который передаёт строку и формат родной функции :)
Можно, конечно, и отдельный фильтр написать.
Пример-то был именно для демонстрации управления отображаемым контентом.
ибо если на каждое условие лепить своии модификаторы или фильтры, то неизбежно часть дизайна из шаблона переползёт в код. Вот и у тебя, кстати, формат даты в код переполз. Т.е. дизайнеру, меняя формат, придётся в Python-код лезть :)
> Вот и у тебя, кстати, формат даты в код переполз. Т.е. дизайнеру, меняя формат, придётся в Python-код лезть :)
Дизайнеру в код лезть не надо. Ему надо воспользоваться фильтром, который для него написали программисты. Фильтру можно передавать аргументы, если надо. Простой if-else в Djangoвский шаблон можно засунуть, но хитрые операции с данными должны находиться в отдельном коде. Или ваш язык шаблонов будет ничуть не лучше PHP.
>Сервер следит за файлами с шаблонами и сам их перезагружает, когда они изменяются.
У меня шаблоны не в файлах, а в БД.
Smarty работает с любыми источниками данных для шаблонов. Достаточно зарегистрировать две функции - вернуть шаблон по имени и вернуть дату шаблона по имени. Естественно, разнотипные шаблоны могут использоваться вместе. Скажем, у меня системные шаблоны все в файловой системе, а то, что дизайнер правит - в БД.