ты привел мясо для пипл хавает. phpbb вобще офигенная штука когда доступ к серверу получить нада. там помоему експлоет апдейтят в тот же день когда новая версия выходит.
>И свои и чужие вел, поэтому и удивляюсь, ибо не встречал еще ни одного человека (знающего что-то еще кроме php), который бы захотел использовать php по своей воле
Ну, на меня можешь посмотреть. 7 лет практики на Си++, 6 - PHP и Perl, по паре лет - Forth и ассемблер x86, около полутора лет - Java, около года - ассемблер PDP...
Что там ещё? А, года три qbasic, периодически JavaScript. Когда-то - Fortran. "Hello, world" ещё десятке на двух языков.
Как думаешь, с таким багажом можно оценивать языки более-менее объективно? :)
...
Так вот, сейчас 70% кода я пишу на PHP. Да, он далеко не идеален как язык. Но _программисту_ (т.е. человеку, пишущему _продукт_) качество языка фактор важный, но зачастую не первостепенный. Тут уже пару раз звучало слово _инфраструктура_.
А что до Ruby и Python... Приличные языки. Но место под солнцем завоёвывать им ещё _только предстоит_.
А там, как завоюют - так и поговорим. Ибо нормальному программисту освоить новый язык - это лишь месяц неторопливой работы. Освоить в совершенстве - год максимум.
> 2. Отладка кода на Ruby (особенно _такого_ когда, который нам показывали) занимает меньше времени?
Епстественно, друк. А на Питоне - ещё меньше. Во-первых, потому что язык способствует написанию безглючных программ, а во-вторых, ты вообще ipython/ipdb видел?
> Кстати да, только я боюсь что ПХПшники примут эти функции как великое откровение:) А в самом деле извратно он в ПХП сделаны:/
Найдите мой пост выше. Очень странно что вначале просят всё в одну строчку сделать, а потом начинается, то не так это не так. Видимо больше сказать нечего.
> я не использую компоновку публичных проектов для зарабатывания денег. я не работник.
Ну тогда о реальном применении языков в web разговаривать с тобой бессмыслено. О теоретическом "Ruby стройнее" - сколько угодно. Но тогда ты будешь противостоять Parser, а не PHP.
trac - очень приятная и уважаемая мною система. Но вот масштабы, всё же, несопоставимые :) Да и из другой области пример.
Я спросил про проект уровня Википедии на RoR или Питоне. Даже дополню условие (чтобы кто-нить не ляпнул в духе, "microsoft.com на RoR и попробуй опровергнуть") - ещё и с открытыми сорцами (мы же опенсорс-сообщество, нет?)
Trac - это только продукт. Можно посмотреть на проект уровня Википедии, написанный на нём? :) Мой сайт с пятью проектами на это звание не тянет... opensvn.csie.org - практически никогда не работает последнее время...
бла-бла-бла скоро ссылки в биореактор постить начну.
Собсвенно если перечитать тред, то видно, что идут одни нападки, что мол какой у класснык ror и питон, но при этом ничего толкового на них написанного показать не могут. Всё ответы, типа да мы щас за пол часа на коленке сбахаем. Так красноглазики орали когда MS о dotnet заявил, а как он вышел так сразу и поотваливались.
А вот строки из контекста вырывать не хорошо ;) я сказал "... по своей воле для написания чего-либо сложнее cms и гесты". Для любого языка есть своя ниша, свои плюсы и минусы, и выбирать инструмент стоит исходя из задачи, а не из собственных предпочтений, иначе это выглядит как: я умею пользоваться молотком - пойду закручу пару шурупов.
>Поставим перед собою цель, переписать lor на PHP =)
Ну... нормальный (не юноша бледный со взором горящий) программист (человек вообще) не должен пользоваться принципом "до основанья, а затем..."
Вот и в программировании - сайт легко может быть смесью своершенно разных кодовых блоков. Скажем, я свою систему когда-то начинал делать офлайновой на Форте. Потом она была офлайновая же на Перле. Потом переехала в онлайн. Потом Перл начал понемногу вытесняться ПХП. Но не меньше трёх лет она представляла из себя смесь Перла и ПХП (а кое-где Перл жив и сейчас, но в виде уже автономных модулей). Часть системы (рейтинги и топы - до 200тыс. хитов в сутки) сейчас вообще думал на Java переносить, пока не придумал более изящное решение на средствах HTTP-сервера.
a = [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]
или
return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]
А ПХП понадобиться доп переменная (как видно здесь мы не вводим не одной переменной локальной для функции). Правда в руби вводим:( т.к. есть грубый проектировачный просчёт - переменный в блоках становяться локальными в функции. Вот кстати рельный недостаток руби. Правда Матц в 2 обещал исправить.
Кстати, вот с сайта сравнение с smarty, если это называется уделывать smarty, то дальнейшие разговоры о том что ror и python крусе php можно не вести, одно красноглазие.
* Preprocessors, postprocessors and output filters. You can emulate a preprocessor in Cheetah by running your template definition through a filter program or function before Cheetah sees it. To emulate a postprocessor, run a .py template module through a filter program/function. To emulate a Smarty output filter, run the template output through a filter program/function. If you want to use ``cheetah compile'' or ``cheetah fill'' in a pipeline, use - as the input file name and --stdout to send the result to standard output. Note that Cheetah uses the term ``output filter'' differently than Smarty: Cheetah output filters (#filter) operate on placeholders, while Smarty output filters operate on the entire template output. There has been a proposed #sed directive that would operate on the entire output line by line, but it has not been implemented. * Variable modifiers. In some cases, Python has equivalent string methods (.strip, .capitalize, .replace(SEARCH, REPL)), but in other cases you must wrap the result in a function call or write a custom output filter (#filter). * Certain web-specific functions, which can be emulated with third-party functions. * The ability to ``plug in'' new directives in a modular way. Cheetah directives are tightly bound to the compiler. However, third-party functions can be freely imported and called from placeholders, and methods can be mixed in via #extends. Part of this is because Cheetah distinguishes between functions and directives, while Smarty treats them all as ``functions''. Cheetah's design does not allow functions to have flow control effect outside the function (e.g., #if and #for, which operate on template body lines), so directives like these cannot be encoded as functions. * Configuration variables read from an .ini-style file. The Cheetah.SettingsManager module can parse such a file, but you'd have to invoke it manually. (See the docstrings in the module for details.) In Smarty, this feature is used for multilingual applications. In Cheetah, the developers maintain that everybody has their own preferred way to do this (such as using Python's gettext module), and it's not worth blessing one particular strategy in Cheetah since it's easy enough to integrate third-party code around the template, or to add the resulting values to the searchList.
Features Cheetah has that Smarty lacks:
* Saving the compilation result in a Python (PHP) module for quick reading later. * Caching individual placeholders or portions of a template. Smarty caches only the entire template output as a unit.
> Ruby и в Python как-то придётся указать *куда* помещать результат. Или интересует класс задач, сбрасывающий данные в /dev/null?
Ну да в переменную напрмер или возвращать в функции...
> Я ведь предупреждал: "Учтите, за продолжение мастер-класса я намерен брать деньги." ;-)
Так и запишем о ORM в PHP не осведомлены;) Кстати наиболее близкое к этому можно посмотреть в CakePHP но всё равно намного кривее чем ActiveRecord из RoR'a
>В RoR, а особенно, в Django есть _прекрасные_ шаблоны
Хорошо :) Просто для оценки, насколько оно удобно (чтобы не копаться в том, что может оказаться неподходящим). Можно, для сравнения, кусочек шаблона, выполняющего такую функцию. На вход ему подаётся массив ассоциативных массивов, содержищих поля date (в unixtime), title (строка) и uri (строка). Нужно вывести средствами шаблона эти данные в виде списка дат в POSIX-strftime формате, заголовков со ссылками. Если дата - за последние сутки, то пишется только время, если больше - только число. Заголовки порезать до 60 символов. На Smarty такое пишется так:
Жду ответный пример в системе шаблонов Django или RoR :)
Надеюсь, также, что у них шаблоны имеют функции авторекомпиляции при смене даты модификации шаблона в формате юзера (скажем, у меня шаблон в БД, дата его модификации хранится в отдельной таблице)?
> можно написат
a = [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]
или
return [i for i in map(lambda x:x*x, [1,3,5,6,20]) if i > 10]
$var (1,3,5,6,20)
<html>
<table><tr>
^if(($v=$var.menu^2)>10){<td>$v</td>}
</tr>
</table>
</html>
> А код на PHP C и.т.д. в студию. (Размер входного массива может быть любым).
> Ruby:
> [1,3,5,6,20].map {|v| v*v}.select {|v| v > 10}
Пожалуйста:
array_filter(array_map(create_function('$v', 'return $v*$v;'), array(1,3,5,6,20,23)), create_function('$v', 'return $v>10;'));
Ваши комментарии в студию.