Archive for мая, 2011

Sinatra vs Rails

мая 28, 2011  |  Published in Sinatra

Несколько мнений из интернетов:

- Sinatra — фреймворк для разработки простых веб приложений.
- Sinatra — простой фреймворк для прототипирования.
- Sinatra — отличный фреймворк, на котором построено несколько серьезных проектов.

Из этих трех мнений истинным является лишь последнее. Sinatra — действительно простой фреймворк, в котором гораздо меньше «волшебства» чем в Rails, однако который позволяет создавать приложения не менее сложные чем с использованием Rails.

Я, как и многие другие люди, считаю, что Rails не подходит для разработки CMS и склоняюсь в сторону Sinatra когда речь заходит о CMS, а тем более о движке блога, который является самым простым CRUD-приложением. Rails избыточен для таких разработок и больше подходит для того, что называют модным словом «стартапы».

Самое большие отличия Sinatra от Rails заключается в том, что в Sinatra нет restful resources и нет MVC. Но все это можно легко реализовать самостоятельно.

Sinatra минималистичный фреймворк, который представляет Programmer-way, вместо навязываемого Rails-way. В Sinatra вы можете создавать любую структуру приложения.

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

Думаю, стоит начать писать о Sinatra, например, рассмотреть работу какой-нибудь CMS на базе Sinatra (предложения пишите в комментарии). Но это произойдет, скорей всего, уже после моей сессии и поступления на 5 курс, т.е. во второй половине лета.

Tags:

RubyDev Ruby Tutorial #7 >Исключительные ситуации в Ruby и их обработка

мая 23, 2011  |  Published in Ruby, Основы

Исключительные ситуации (exceptions) — это ошибки возникшие в вашем коде и которые также представлены в виде специальных объектов. Лично у меня самой популярной ошибкой, благодаря тому, что яне владею слепым набором, является NoMethodError или NameError:

Array.hello
#NoMethodError: undefined method `hello' for Array:Class
#from (irb):3
#from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'

hello
#NameError: undefined local variable or method `hello' for main:Object
#from (irb):4
#from /home/vladimir/.rvm/rubies/ruby-1.9.2-p0/bin/irb:17:in `<main>'

Ниже приведен иерархический список всех стандартных исключительных ситуаций в Ruby:

Read the rest of this entry »

Tags: ,

Шорткат для RSS’ца

мая 22, 2011  |  Published in Новости

Как думаете, стоит ли странслировать в RSS сокращенную версию постом или лучше продолжать транслировать полные версии?

Просьба всем подписчикам и «отписчикам» ответить, от этого зависит то, какой будет RSS лента блога.

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

 

UPD: Будем считать, что голосование окончено и итогом тому есть то, что большинство читателей проголосовало за полную версию, поэтому остается полная версия постов в RSS. Возможно удастся найти какой-нибудь плагин для WP, или это я реализую в том блоге что пишу на Rails, чтобы пользователь мог выбирать полную или сокращенную версию постов.

Tags:

RDR3T > Логи и Уведомления в Rails 3, ч. 2: Уведомления

мая 22, 2011  |  Published in Ruby on Rails, Ruby on Rails 3, Тестирование

Rails 3 снабжен очень мощной системой уведомлений о происходящем внутри приложения. Давайте на примере простого приложения рассмотрим то, что есть уведомления и как с ними работать.

Мною было создано простое приложение с одной моделью и контроллером:

$ rails g scaffold User name:string email:string login:string

Именно на примере такого простого приложения мы и рассмотрим уведомления. Давайте запустим наше приложение:

После запуска приложения мы увидим в консоли следущее:

$ rails s
=> Booting WEBrick
=> Rails 3.0.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-05-22 11:48:04] INFO  WEBrick 1.3.1
[2011-05-22 11:48:04] INFO  ruby 1.9.2 (2010-08-18) [i686-linux]
[2011-05-22 11:48:04] INFO  WEBrick::HTTPServer#start: pid=3670 port=3000

Это означает, что приложение загружено в память и что сервер приложения был запущен, однако само приложение ничего не выполняет. При переходе на http://localhost:3000/ мы также ничего нового в консоли не убидим, поскольку мы перешли на статическую страницу приветствия, которая нам была отдана нашим сервером, по умолчанию, а не приложением. Однако, когда мы перейдем по адресу http://localhost:3000/users/ то есть приложение выполнит экшен index в контроллере UsersController, то в консоли мы увидим следущее:

Started GET «/users» for 127.0.0.1 at 2011-05-22 11:52:59 +0300
Processing by UsersController#index as HTML
User Load (0.8ms)  SELECT «users».* FROM «users»
Rendered users/index.html.erb within layouts/application (4.4ms)
Completed 200 OK in 158ms (Views: 11.4ms | ActiveRecord: 0.8ms)

Это называется записью логфайла, которая создается на основе уведомлений (Rails Notifications). Если интересно, то файлы логов можно найти в ../log/ в нашем случае это development.log по названию окружения в котором мы работаем. Файл логов содержит абсолютно то же, что было напечатано в консоли.

Если мы перейдем по ссылке создания нового пользователя, то в лог-файле и в консоли появится еще одно сообщение логера:

Started GET «/users/new» for 127.0.0.1 at 2011-05-22 14:20:03 +0300
Processing by UsersController#new as HTML
Rendered users/_form.html.erb (87.8ms)
Rendered users/new.html.erb within layouts/application (107.4ms)
Completed 200 OK in 431ms (Views: 153.4ms | ActiveRecord: 0.0ms)
Read the rest of this entry »

Tags: , , , , , ,

RDR3T > Логи и Уведомления в Rails 3, ч. 1: Логи

мая 22, 2011  |  Published in Ruby, Ruby on Rails, Ruby on Rails 3, Тестирование

Rails 3 снабжен очень мощной системой уведомлений о происходящем внутри приложения на основе которой строятся логи приложения. Не смотря на то, что уведомления первичны, мы начнем с лог файлов.

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

Все логи хранятся в папке ../log/ ваше приложения и записываются в файлы с именем окружения (development, test и production) и расширением *.log. Зачем логи нужны? По логам можно определить что делало приложение в определенный момент времени или увидить ошибки и попытки взлома приложения.

Rails, по умолчанию использует из Ruby StdLib. Давайте сначала расмотрим работу конкретно с этим логером вне контекста Rails.
Read the rest of this entry »

Tags: , , , , , ,

CoffeeScript: касивый способ писать JavaScript код

мая 22, 2011  |  Published in ClientSide, JavaScript

Я программировал на JavaScript много лет и за это время наплодио много кода. Даже сейчас с моим большим опытом я продолжаю бороться за красоту JavaScript. В этом посте я хочу исследовать почему писать крассивый JavaScript код сложно и как эти сложности исправить с помощью CoffeeScript — маленького языка компилируемого в JavaScript.

Что есть красивый код?
Описание того, что есть красивый код субъективно, по этому я хочу предоставить вам несколько тезисов касательно того, что я подразумеваю под крассивым кодом:

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

Таким образом, красивый код это совмещение лаконичности, функциональности и читабельности кода, как по моему.

Read the rest of this entry »

Изучаем JavaScript, ч. 4: Объекты: Объектно-Ориентированный JavaScript

мая 18, 2011  |  Published in ClientSide, JavaScript

javascriptJavaScript — объектно-ориентированный язык программирования в котором почти все является объектами. Основным отличием «объектно-ориентированности» JavaScript от, например, Ruby является то, что JavaScript является class-free языком программирования, то есть в JavaScript отсутствует концепция классов. Если в Ruby объект является экземпляром класса, то в JavaScript объект является просто объектом, а передача свойств происходит через прототипы и функции — конструкторы.

Давайте для начала разберемся с тем, что такое объект в JavaScript. Объект — это просто коллекция свойств. Если свойство объекта ссылается на функцию, то оно называется методом. Простой пример:

myObj = new Object();
myObj.property = "Value.";
myObj['second_property'] = 12;
myObj.third_property = function () { alert(this.property); };

alert(myObj.second_property); //12
alert(myObj.property); //Value.
myObj.third_property(); //Value.

Read the rest of this entry »

Tags:

Изучаем JavaScript, ч. 3: Функции: Тонкие моменты при работе с функциями в JavaScript

мая 18, 2011  |  Published in ClientSide, JavaScript

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

function funcName(){};

funcName = function(){};

funcName = new Function();

На самом деле отличия есть, они достаточно незаметны, но знать их необходимо.

function funcName(){} — декларация (объявление) функции;

funcName = function(){} — присвоение переменной выражения — функции;

funcName = new Function(); — конструирование функции.
Read the rest of this entry »

Tags: ,

Изучаем JavaScript, ч. 2: Функции: Подбираемся ближе к функциям JavaScript

мая 16, 2011  |  Published in ClientSide, JavaScript

В прошлой части мы познакомились с функциями в JavaScript, а в этой мы рассмотрим их более подробно опираясь на уже имеющиеся из прошой части RubyDev JavaScript учебника.

Область видимости и контекст выполнения

Для начала поговорим об области видимости переменных в JavaScript. Обычно работу с перемеными описывают в первую очередь и отдельно от функций, однако в нашем случае такой порядок более уместен, поскольку функция — это объект, то есть значение, которое может быть присвоено переменной и доступ к которому может быть произведен через переменную (имя функции и есть переменная). Кроме того, при работе с переменными имеется множество подводных камней, которые составляют проблемы для изучения JavaScript.

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

function helloFunction(){
  var hello = "Hello!";
  alert(hello);
}

helloFunction();//Hello!

alert(hello);//Переменной hello в текущем пространстве вызова alert не существует!

Read the rest of this entry »

Tags: ,

RubyDev Ruby Tutorial #6 > Регулярные выражения (Regular Expressions — RegExp) в Ruby

мая 15, 2011  |  Published in Ruby, Основы

1. регулярные выражения (Regular Expressions — RegExp) — что это?
Регулярные выражения — это очень мощная концепция, суть которой состоит в создании некоторого  шаблона строки, по которому можно производить поиск, проверку, замену, редактирование, разбиение и т.д. строки или ее подстроки.

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

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

Метасимвол — это символ или несколько символов используемые в шаблоне для определения какой-либо вещи.

В Ruby регулярное выражение является объектом класса Regexp и позволяет любые операции над собой, которые позволяет любой другой объект. Пример самого простого регулярного выражения:

//.class #=> Regexp

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

%r{regexp here} и Regexp.new(«»)
Read the rest of this entry »

Tags: , ,