Хай!
У меня скопился уже достаточно большой опыт разработки интернет-проектов и теперь я хочу несколько систематизировать свои знания, возможно это будет полезно и вам.
Тут я рассмотрю исключтельно технологии для быстрой разработки интернет-проектов - фреймворки и движки. Вы можете возмутиться и сказать что это медленно, небезопасно и не гибко. Угу, это конечно не чистый Java со Spring’ом или EJB и не чистый .NET со своей бадягой. И это будет работать не так быстро как на чисто этих технологиях. Но эти технологии мы оставим для крупных компаний, короый хотят писать свои мега масштабные Enterprise проекты годами. Я же предпочитаю делать не большие проекты и делать их быстро. Итак, что мы рассмотрим: Grails, Ruby on Rails, Cakephp, Drupal, Wordpress.
Начнем с простейшего. Это движок блога с возможностью кастомизации с помощью готовых или самописных плагинов. Движок очень простой правда не очень быстрый. Зато в нем уже интегрировано куча полезностей, так что сделать блог, форум или сайт новостей на нем очень просто. Как вы можете заметить - мой блог построен именно на Wordpress. Правда эта ботва не годится для более менее больших проектом, и кастомизировать его запарно, если нужны какие-нибуть мега фичи на сайте. Вобщем подойдет для небольшого новостного сайта. (
Опять движок, но уже посерьезнее чем Wordpress. Движок не очень простой в освоении, но если понять как и что там делается, то можно с быстрой скоростью херачить неплохие сайтосы под практически любые нужны. Существует очень много расширений (модулей, плагинов) для Drupal’а, которые свободно доступны в сети. Правда за все удобства приходится платить скоростью работы этой хрени и достаточно долгим вниканием в эту технологию (именно на уровне кода). Так же использование этого движка ставит под сомнению всю безопасность сайта, особенно если используется много сторонних расширений. Но вобщем движок очень неплохой и удобный, правда мне он кажется тяжеловесным немного
()
Это революционный фреймворк, который дал старт новой эре разработки интернет-проектов. Очень многие фреймворки родились именно после успеха Ruby on Rails (в том числе Cakephp и Grails). MVC, ORM - да. Все очень удобно и по “папски”
Правда сам язык Ruby немного некрасивый ИМХО (и не только ИМХО), есть в этом языке Ruby что-то такое Perl-Brainfuck’овое
Возможно именно поэтому этот фреймворк не так популярен среди разработчиков, и не так уж много на нем реально хороших проектов, хотя они есть это несомненно! Лично я щупал этот фреймворк на деле как в домашних условиях так и в некоторых компаниях где я работал, но видимо незнание (и нежелание) языка Ruby сделало свое дело и я так и не написал на Ruby on Rails хотя бы один полноцельный проект. Мне кажется сейчас есть более качественные альтернативы это фреймворку такие как Cakephp и Grails, о которых ниже. ()
Cakephp - это отличный фреймворк для разработки веб-приложений. Поддерживает все лучшие паттерны проектирования веб в том числе MVC. Так же есть и ORM - куда же без него! Изучается достаточно быстро (правда с пользователями придется немного повозиться, не очень понятная хрень в кейке
). После изучение фреймворка можно разрабатывать любой сложности и уровня веб-проекты. Легковесный и в то же время очень мощный Framework. Очень хорошая документация и активный Community. Вобщем на данный момент это мой любимый фреймворк, на котором я сейчас веду активную разработку нескольких своих проектов. ()
Как много хороших воспоминаний у меня с этим фреймворком! Если честно, то это самый удобный фреймворк для разработки веб-приложений, с которым я когда-либо работал. Все очень логично, просто и эффективно. Изучается очень быстро, активный Community при поддержке Intel. Используется язык Groovy, но для тех, кто знаком с Java это не вызовет никаких осложнений, т.к. Groovy это почти та же Java, только немного упнощенная по синтаксису. Groovy - это скриптовая Java, на выходе работы Groovy мы получаем работающий Java код. Правда то что в итоге получается Java код и WAR’ка, то это ставит некоторый ограничения на деплоймент проекта, т.е. на сервере нужно как минимум Application Server (Tomcat, JBoss, …), Java и Groovy. Зато это все работает быстро (Java же!). Прелестный фреймворк. ()
ИМХО итог. Ruby on Rails немного тяжеловат в изучении и отстает по удобству некоторым своим последователям. Wordpress хорош для небольших новостных сайтов. Drupal тяжеловат и сложен в изучении, неплох для сайтов средней нагрузки. Cakephp lightweight framework и легок в изучении, лучший выбор для сайтов любого уровня сложности. Grails - отлично подходит как для небольших проектов так и для Enterprise веб-проектов, где нужна кластеризация, возможно и ESB (Enterprise Service Bus), т.к. технологии Java дают легкий доступ ко всему мировому Enterprise опыту.
–
Вот и все.
![]()
Привет!
Седня некоторое время втыкал на работе такую особенность работы Tomcat’а, когда на нем задеплоина аппликуха со сгенеренным CXF клиентом для веб-сервиса.
Прикол в том, что когда генеришь клиента, то нужно указывать параметр wsdlLocation (можно и без него, но это плохая практика использоватть дефолтовое значение). Этот параметр говорит сгенеренному клиентскому классу, где лежит WSDL’ка, по которой сгенерен код. Так вот, просто использовать WEB-INF/wsdl/SomeWebService.wsdl не прокатило, я так же пробывал file:/WEB-INF/…, file:WEB-INF/…, /WEB-INF/.. - ничего не помогало. Я уже подумал, что это мэджик и такого не может быть и указал абсолютный путь типа file:/C:/Tomcat/webapps/SomeApp/WEB-INF/wsdl/…. - заработало! Но ведь это абсолютный путь, что не есть хорошо!
В итоге я выяснил, что на томкате путь нужно писать относительно места исполняемого скрипта томката! т.е. Tomcat/bin. В Итоге получилось так: wsdlLocation=../webapps/SomeApp/WEB-INF/wsdl/…
Вот такая небольшая заметка, чтобы запомнить ее и больше не попадаться на одну и ту же удочку дважды ![]()
Итак! Задача на математику-программирование от моего друга Тохина
“выщитывать ленейную оболочку полигона” - ога!
Дается полигон любой и параметром задается н-угольник как его линейная оболочка, то есть кол-во углов нового полигона (точки в координатах X;Y), в который должен быть вписан старый, причем углы нового должны быть и углами старого.
Например, дается первый полигон, передается массивом скажем массив из 20 точек, и еще тебе дается параметр, в скольки-угольник вписать твой полигон, скажем 13, => ты создаешь новый полигон так, чтоб его 13 углов (точек) были взяты из 20 старого и при этом старый должен быть вписан в новый.
Нужно будет как-нибуть решить на досуге
Решаем!
![]()
Привет!
Седня у меня по дороге домой с работы возникла мысль о том, как движется программист по ступенькам языков программирования. Итог - график:
Зеленая линия показывает уровень поддержки языка, и трендовое восхождение вверх - на самом деле на графике не отражено изменения высокоуровневости на длительный период, т.к. там линия тренда идет под бОльшим углом, т.е. через некоторое время программист превращается в архитектора и мыслит высоким уровнем (UML, BPM, …).
Голубая линия показывает уровень поддержки усталости от IT, чем она выше, тем больше устал программист от своей работы
Т.е. в конце концов ему это все надоедает и он перестает работать на кого-то в IT - занимается другим дело, в частности может быть управленческие обязанности, трейдинг или свои проекты. Но в конце жизни (это не показано на графике), он все же устанавливает значение усталости от IT где-то чуть ниже середины (50), т.к. он уже работает себе в удовольствие.
Что-то типа того, быстрая мысль, поэтому не очень внятная.
![]()
Как реализовать динамические мета тэги keywords и description для любой страницы.
Сейчас я пишу небольшой проектик на Cakephp 1.2 и у меня возник вопрос, как мне генерировать мета тэги для разных страниц свои, чтобы оптимизировать сайт под поисковые запросы. Я нашел несколько статей, описывающих как это сделать, и в итоге я поступил так:
1) Нужно сделать Helper класс, например, MetaHelper. И поместить в него следующий код:
<?php
class MetaHelper extends AppHelper {
var $keywords = 'TODO Default keywords';
var $description = 'TODO Default description';
function afterRender() {
$view = ClassRegistry::getObject('view');
$view->set('keywords_for_layout', $this->keywords);
$view->set('description_for_layout', $this->description);
}
function setKeywords($s) {
if (!empty($s)) {
$this->keywords = $s;
}
}
function setDescription($s) {
if (!empty($s)) {
$this->description = $s;
}
}
}
?>
2) Добавить этот хелпер в AppController.
3) В layout’е в <head> прописать:
<meta name="description" content="<? echo $description_for_layout ?>" />
<meta name="keywords" content="<? echo $keywords_for_layout ?>" />
Итог: Все очень просто. На самом деле этот подход можно использовать для установки любых других значений layout’а не доступных напрямую из view’хи.
Вот и все.