января 30, 2011 | Published in Development Processes, Управление Версиями
Цикл статей ПРО GIT:
Введение
Ветки (бранчи)
1. Что есть Git
Git — это мощная и популярная система контроля версий. Git отслеживает изменения в коде програм и позволяет откатывать изменения назад в случае, если они привели к каким-либо ошибкам. Кроме того Git позволяет заниматься разработкой кода коллективно, используя, например, удаленный общий репозиторий, и когда каждый разработчик создает собственную ветку в которой работает, пока не выполнит определенную работу, а затем подмешивает изменения к общему репозиторию. Ранее при разработке ПО разработчикам приходилось делать откаты назад, для этого создавалась копия папки с исходными кодами. Git делает эту работу за вас, но вместо тупого копирования, он делает «снимки» () по которым можно восстановить оригинальный код после того, как в нем были произведены нежелаемые изменения.
2. Установка Git
2.1 Зависимости Git
Для нормальной работы с Git у вас должны быть установлены следующие библиотеки: curl, openssl и zlib
2.2. Установка Git из исходников:
Для установки GIT из исходников на операционные системы семейства UNIX, вам следует для начала скачать исходники, распаковать архив и выполнить следующие команды в консоли для установки:
$ make prefix=/usr all
или
$ make prefix=/usr install
2.3. Установка Git на Linux
Для установки Git на Ubuntu следует просто выполнить в консоли команду:
$ apt-get install git-core
2.4. Установка Git на OS X
Чтобы установить Git на OS X следует в консоли выполнить следущую команду:
$ sudo port install git-core
2.5. Установка Git на Windows
Для установки Git на Windows просто скачайте установочные файлы (http://code.google.com/p/msysgit/downloads/list) и выполните из них установку.
Read the rest of this entry »
января 28, 2011 | Published in Ruby, Основы
Ruby и ObjectSpace
В Ruby существует такой магический модуль как ObjectSpace. Он содержит весьма интересные, но редко применяемые методы, о которых и пойдет речь в этой статье.
Метод ObjectSpace.each_object
ObjectSpace.each_object это наверное самый полезный и самый используемый метод из всех методов, которые содержатся в ObjectSpace. Могущество этого метода заключается в том, что он позволяет в реальном времени редактировать объекты, причем это можно делать не с каким-либо определенным объектом, а со всем множеством экземпляров определенного класса.
class Blog
attr_accessor :blog, :link, :author
def initialize (blog, link, author)
@blog = blog
@link = link
@author = author
end
def self.find_blog_by_author_name(aname)
blog = false
ObjectSpace.each_object(Blog) do |b|
b.author == aname ? blog = b : blog
end
return blog
end
end
rubydev = Blog.new('RubyDev', 'http://rubydev.ru', 'Vladimir Melnik')
rubyinside = Blog.new('RubyInside', 'http://rubyinside.com', 'Peter Cooper')
ykblog = Blog.new('Yehuda\'s blog', 'http://yehudakatz.com', 'Yehuda Katz' )
fblog = Blog.find_blog_by_author_name('Vladimir Melnik')
Теперь в переменной fblog у нас содержится та ссылка на тот же объект, что и в переменной rubydev. Read the rest of this entry »
января 25, 2011 | Published in Ruby, Основы
Еще раньше хотел написать эту статью, но забывал об этой своей идее. Сегодня вспомнил благодаря письму, пришедшему мне на email в котором меня попросили написать о том, что такое Символ в Ruby, где он используется и т.д. В общем пишу…
В интернетах наталкивался на несколько объяснений о том, что собой являют символы в Ruby. Все они начинали так: «Символ в Ruby — это экземпляр класса Symbol»… Ну да, символ — экземпляр класса Symbol, однако что нам это дает?
Из-за того, что в статьях посвященных символам все описывается туманно, или как в серьезных научных трудах, написанных одними бородатыми дядьками для других, не менее бородатых, дядек и процветает массовое непонимание этой концепции.
Чтобы понять, что есть вещь, необходимо понять, для чего эта вещь необходима. Чтобы писать меньше слов, я решил немножко визуализировать то, что хочу сказать, для этого я подготовил небольшой графический материал:
Как видно из примера было создано два массива состоящих из хэшей. Единственное отличие между ними, это то, что в хэшах составляющих первый массив в качестве ключей используются строки, а во втором — символы. Мы также видим, что в первом случае было создано 4объекта — ключа, а во втором только два. Но почему так?
Read the rest of this entry »
января 23, 2011 | Published in BDD, Тестирование
Внимание: Это первый мой перевод посвященный теме тестирования и я только становлюсь на стезю изучения данной темы, поэтому перевод может быть несколько неадекватен. Я очень прошу извенить меня за неточности и незнание устоявшейся русскоязычной терминологии касательно тестирования и работы с RSpec в частности. Я также прошу поправлять меня в комментариях, я буду очень благодарен более опытным программистам читающим мой блог за помощь.
RSpec один из моих любимых инструментов. Я без преувеличений влюбился в эту фантастическую библиотеку для BDD тестирования, особенно во вторую версию. Используя RSpec, я понял, что эта библиотека учит меня тому, как правильно писать тесты. Изучая RSpec DSL , его синтаксис и структуру примеров spec’ов (далее по тексту просто спеки) вы фактически изучаете лучшую методику написания тестов. RSpec, несмотря на множество встроенных условий проверки, содержит еще и DSL для объявления ваших собственных проверок, которые заточены по ваши личные, специфичные нужды. Возможно все это звучит несколько запутывающе, однако все достаточно просто, так просто, что в это сложно поверить, пока сам не попробуешь.
Основы
В RSpec проверки (matchers) ничто иное как методы доступные в контексте примера. Вы используете их, чтобы убедиться в том, что результат работы тестируемого кода соответствует переданому ожиданию (проверке, условию при котором тест возвратит значение true, что свидетельствует, что данная проверка пройдена успешно и код работает так, как мы того ожидали). Существует множество проверок, которые уже входят в состав RSpec. В примере ниже показано использование одной из таких проверок respond_to:
describe String do
it { should respond_to(:gsub) }
end
Read the rest of this entry »
января 16, 2011 | Published in Ruby, Основы
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Я не смог понять смысла и отношения оригинального названия статьи Aggregates, поэтому назвал статью просто «Методы inject, min и max».
Это последняя статья в цикле статей о модуле Enumerable и методах, которые он в себе содержит и которые позволяют очень удобно работать с коллекциями. В этой статье мы поговорим о методах, которые не возвращают новую коллекцию, а возвращают лишь один объект. Read the rest of this entry »
января 16, 2011 | Published in Ruby, Основы
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Модуль Enumerable предлагает программисту несколько методов для создания новых коллекций из уже существующих выполняя блок кода для каждого элемента родительской коллекции.
Метод map
Это самый простой и часто используемый метод модуля Enumerable. Этот метод создает оригинальную коллекцию применяя переданный блок кода к каждому элементу внутри и возвращает массив результатов:
['joshua', 'gabriel', 'jacob'].map{|name| name.capitalize} #=> ["Joshua", "Gabriel", "Jacob"]
['joshua', 'gabriel', 'jacob'].map(&:capitalize) #=> ["Joshua", "Gabriel", "Jacob"]
Метод map нуждается в блоке кода, который вы можете передать непосредственно как блок или использовать технику с унарным амперсандом, о которой мы уже говорили во второй статье из цикла Магия модуля Enumerable. Read the rest of this entry »
января 16, 2011 | Published in Ruby, Основы
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Наиболее мощная часть модуля Enumerable — это набор методов, который направлен на помощь вам при фильтрации огромных коллекций для получения более малких коллекции содержащих те элементы, которые вам необходимы.
Метод entries (или to_a)
Не смотря на то, что я пишу об этом методе в статье о методах для фильтрации коллекции,метод entries ничего не фильтрует. Если вы примените этот метод для массива, то вы ничего не заметите. entries возвращает список элементов в коллекции, а для массива будет возвращен собственно сам массив. Вы навеняка сталкивались с этим методом посредствам его псевдонима — метода to_a. Однако, в случае работы с более сложными коллекциями, как, например, наш класс Team, метод entiries будет иметь больший смысл. Ниже представлен класс Team, с которым мы будем работать:
class Team
include Enumerable
attr_accessor :members
def initialize
@members = []
end
def each &block
@members.each{|member| block.call(member)}
end
end
Давайте поэкспериментируем с методом entries:
team = Team.new
team.members = ['joshua', 'gabriel', 'jacob']
team #=> #
team.entries #=> ["joshua", "gabriel", "jacob"]
Вы видите, что team является коллекцией, но при этом не является массивом, однако благодаря методу entries мы получаем представление коллекции в виде массива — списка участников. Честно говоря, все это не очень полезно, но хорошо знать, что такой метод существует и знать как он работает.
Read the rest of this entry »
января 15, 2011 | Published in Ruby, Основы
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Самые основные методы модуля Enumerable это те, которые дают простой ответ да или нет. Существует три таких условных метода: all? , any? и include?. каждый из этих методов предоставляют вам информацию о коллекции с которой вы работаете.
Начнем изучение их работы на основе следущего кода:
class Team
include Enumerable
attr_accessor :members
def initialize
@members = []
end
def each &block
@members.each{|member| block.call(member)}
end
end
Read the rest of this entry »
января 15, 2011 | Published in Ruby, Основы
Эта статья является свободным переводом оригинальной статьи на английском языке. Оригинал статьи на английском: . И является второй статьей в цикла «Магия модуля Enumerable».
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Read the rest of this entry »
января 10, 2011 | Published in Ruby, Основы
Статьи из цикла Магия модуля Enumerable:
1.Основы
2. Унарный оператор амперсанд “&”
3. Условные операторы
4. Фильтры
5. Создание новых коллекций
6. Методы inject, min и max
Вы вероятно уже знакомы с модулем Enumerable в Ruby, даже если вы видите это название в первый раз. Этот модуль добавляет некоторые методы для массивов, например map, inject, select и т.д. Вы наверняка думаете (Как и я ранее долгое время думал), что эти методы являются методами, подмешиваемыми только к массивам, однако это не так.
Read the rest of this entry »