Archive for ноября, 2010

Маршрутизация внутри приложений на Ruby on Rails 3

ноября 22, 2010  |  Published in Ruby on Rails, Ruby on Rails 3

ruby on rails routingДанная статья написана в продолжение серии статей посвященным переходу на Ruby on Rails 3. Для тех же людей, которые только знакомятся с фреймворком Ruby on Rails, эта серия статей также может послужить не плохим руководством.

Другие статьи из этой серии:
Active Record запросы в Ruby on Rails 3

В Ruby on Rails 3 изменения коснулись не только ActiveRecord, но и маршрутизации. Для начала давайте определимся с терминологией: Маршрутизация или роутинг – это набор правил, которые определяют, к какому ресурсу получит доступ пользователь, перейдя по определенному адресу URL. Роут — одно правило маршрутизации (роутинга).

Read the rest of this entry »

Tags:

Что нового в Ruby 1.9?

ноября 20, 2010  |  Published in Ruby, Основы

Что нового в 1.9?В этой статье автор пытается раскрыть все наиболее значительные изменения в Ruby 1.9.

Изменения в самом Ruby:

— Rubygems и Rake теперь официально являются частями Ruby и поставляются с ним в комплекте.

— Некоторые непопулярные библиотеки были исключены из ядра, однако доступны в виде RubyGems: soap, jruby и т.д.

— Новый «основной» класс в иерархии классов: BasicObject:

1.8 => [Class, Module, Object, Kernel]
1.9 => [Class, Module, Object, Kernel, BasicObject]

BasicObject.instance_methods # => [:==, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]

Этот класс на столько основной, что для него даже не определен метод object_id.

Read the rest of this entry »

Tags: ,

Ruby и красивый код #3

ноября 20, 2010  |  Published in Ruby

ruby
Предыдущие статьи из рубрики:
Ruby и красивый код #1
Ruby и красивый код #2

Исходя из активности комментирования последнего поста Ruby и крассивый код #2 делаю вывод о том, что рубрика действительно интересна и стоет ее развивать. По сему представляю еще 2 задачи:

Задача #1
Дан массив целых чисел. Вывести напечатать номер последнего его элемента, который удовлетворяет двойному неравенству A[0] < A[i] < A[-1]. Если такого элемента не найдено, то напечатать «[ ]«.

Read the rest of this entry »

Tags: , ,

Ruby и красивый код #2

ноября 18, 2010  |  Published in Ruby, Основы

rubyЭто 2я статья из серии «Ruby и красивый код».
Ruby и красивый код #1

Задача №1 по высокоуровневому программированию (ФГОУ ДПО МЭТТ ГАИ)
Эта задача использовались автоматизированной системой тестирования при проведении контрольных работ по предметам: «Программирование на языке высокого уровня» и «Программное обеспечение компьютерных сетей» в 2006-2007 учебном году.

Задача: Дан целочисленный массив. Необходимо вывести вначале его элементы с четными индексами, а затем — с нечетными.

Решение #1

        arr = (1..9).to_a
        indexes, p, np  = [], [], [] 
        arr.each_index{|i| indexes << i}
        for i in indexes 
          if i % 2 == 0
            p << i
          else 
            np << i
          end
        end

        for i in p
          puts arr[i]
        end
        
        puts "---"
        
        for i in np
          puts arr[i]
        end
        
        

Решение #2

        arr = (1..9).to_a

        arr.each_with_index do |elem, index|
          puts elem if (index % 2) == 0
        end

        arr.each_with_index do |elem, index|
          puts elem if (index % 2) != 0
        end
   

Решение #3 - Немного измененное решение #2

arr = (1..9).to_a
n, np = [], []

arr.each_with_index do |elem, index|
  if (index % 2) == 0
    p << elem
  else
    np << elem
  end
end
        
puts p
  puts "---"
puts np

Первое решение задачи - решение человека, не знающего о существовании метода each_with_index (мое). Второе решение - решение моего друга, который значительно более опытный програмист чем я и который знает о существовании метода each_with_index (Максим, спасибо!). Третье решение - мое, его я создал для решения некоторых недостатков решения номер 2, а именно: вместо двух обходов по массиву теперь остался лишь один, кроме того значения под парными и непарными индексами не просто выводятся на экран, но и сохраняются в соответствующие масивы p и np для возможности их дальнейшего использования.

Выводы: Первое решение можно отнести к over engineering, так как в нем слишком много кода, что связано с малым опытом работы на языке Ruby. Второй метод наиболее лаконичный и читабельный, а третий найдет большее применение.

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

Обновление #1:
Вот придумал еще один интересный способ решения:

arr = (1..9).to_a
p, np  = [], [] 

arr.each_index do |i| 
  i%2 == 0 ? p << i : np << i
end

puts arr.values_at(*p)
puts arr.values_at(*np)

Обновление #2:
Максим предоставил еще более изящный вариант решения задачи:

arr = (1..9).to_a

even_indexes, odd_indexes = (0..(arr.size - 1)).partition  {|i| i % 2 == 0}

puts arr.values_at(*even_indexes)
puts arr.values_at(*odd_indexes)

Браво!

Tags: , ,

Для чего годится Radiant

ноября 3, 2010  |  Published in CMS, Radiant CMS

radiant cms logo Совсем недавно заинтересовался системами управления контентом сайта aka CMS написанными на Ruby on Rails. Безусловным лидером по количеству пользователей, темпам развития, количеству документации и т. д. Оказался движок, о котором я кратко уже упоминал — Radiant CMS.

Скажу сразу, что Radiant мне понравился, другой вопрос — буду ли я его использовать?

Radiant, по моему скромному мнению, нельзя назвать системой управленияя контентом, это скорей фреймворк веб приложений более высокого уровня, чем Ruby on Rails. Это объясняется тем, что Radiant сохраняет уровень абстрагирования непозволимый для CMS. В этом смысле у Radiant появляется аж одно преимущество и аж два недостатка:
Read the rest of this entry »

Tags: ,

RubyTree — библиотека для создания древовидных структур данных

ноября 1, 2010  |  Published in Ruby Gems

ruby treeRubyTree — это библиотека позволяющая создавать и управлять древовидными структурами данных основанными на узлах, где каждый узел является одновременно и значением, и ключем, для доступа к вложенным узлам. Одной из важных особенностей / функций RubyTree является возможность  импорта и экспорта в json формат.

Библиотека RubyTree будет интересна для тех, кто разрабатывает какие-либо научные приложения — каталоги, где необходима таксономия, либо приложения, что сейчас набирают популярность, для создания гениалогического дерева и т.д. Кстати, древовидная структура данных используется и во всеми нами любимой Википедии. Read the rest of this entry »

Tags: