Разработка приложений под Ruby on Rails – Часть 2 (annotate)

Гем annotate весьма полезное средство для автоматического создания описаний. Узнал я об этом геме из замечательного туториала Хартла http://ruby.railstutorial.org/ruby-on-rails-tutorial-book. Использование его очень простое, достаточно добавить в Gemfile строки

group :development do
gem 'annotate', '~> 2.5.0'
end

выполнить

$ bundle install

И после этого можно при каждой  миграции вызывать

$ bundle exec annotate

В этом случае в файлах моделей будут писаться куски кода вроде такого (взято из того же Хартла):

# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime
# updated_at :datetime
#

class User < ActiveRecord::Base attr_accessible :name, :email end

Разработка приложений под Ruby on Rails – Часть 1

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

Начну с простого – со списка (пополняемого) gem’ов, которыми пользуюсь.

  1. capistrano (2.14.2): развёртывание приложений на удалённых серверах
  2. devise (2.2.3): система аутентификации пользователей (однако в дальнейшем я отказался от этой системы в пользу самописной системы аутентификации, о причинах расскажу позже)
  3. cancan (1.6.9): система авторизации пользователей
  4. omniauth (1.1.3): аутентификация пользователей через социальные сети и другие подобные внешние сервисы
  5. bootstrap (0.0.1): набор шаблонов для оформления страниц
  6. annotate (2.5.0): полезный гем для создания описания моделей.
  7. thin (1.5.0): сервер заменяющий WEBrick на этапе разработки
  8. bcrypt-ruby (3.0.1): гем, необходимый для функционирования самописной системы аутентификации

Beautifier для vim

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

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

:filetype

Если vim ответит что-то вроде

filetype detection:ON  plugin:ON  indent:ON

то значит, что всё хорошо и поддержка отступов включена. Если она не включена, то тогда надо искать плагины, которые умеют работать с данным типом файлов.

В том случае, когда всё хорошо, то достаточно в командном режиме набрать команду типа такой

gg=G

Здесь gg – это перейти к началу файла, = означает обрабатывать файл до точки остановки (да-да, как раз этот знак равенства и есть бьютифаер), G – означает двигаться до конца файла.

Разумеется, если понятно, как этот механизм работает, то можно создавать макросы, делать обработчики кусков кода и прочее.

Создание удалённых репозиториев с помощью git

Мне довольно часто приходится сохранять свои проекты на удалённом сервере. Раньше я пользовался svn, теперь перешёл на git. К сожалению, я постоянно забываю как их создавать, поэтому пишу эту небольшую памятку (надеюсь она пригодится и кому-нибудь ещё).

Пусть есть локальная машина с проектом в директории ~/myProject, и удалённый сервер (remote.server.com) , к которому есть доступ по ssh

1) Создать git репозиторий на удалённом сервере

remote.server.com> mkdir ~/git
remote.server.com> cd ~/git
remote.server.com> GIT_DIR=myProject.git git init

 
2) Создать git репозиторий у себя на локальной машине
> cd ~/myProject
> git init
> git add .
> git commit -m "First commit"

 
3) Добавить путь к удалённой машине

> git remote add remProject ssh://remove.server.com/home/{username}/git/myProject.git

Здесь, вместо {username} надо использовать имя пользователя на удалённой машине.

4) Теперь можно синхронизироваться

> git push remProject master

Моё первое знакомство с JMonkey Engine

После моего грандиозного фиаско с Архонтами Магии (http://www.arkoniak.com, а так же https://apps.facebook.com/archons_of_magic) я решил, что надо начать всё с начала, но учесть предыдущие ошибки.

 

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

 

Во-первых, это должен быть мультиплатформенный движок, чтобы у меня была возможность запускать конечный продукт как на андроиде, так и в виде web-приложения. После долгих раздумий, остановился на выборе между LibGdx и JMonkey Engine.

Плюсы и минусы вижу следующие:

LibGdx

  1. К плюсам можно отнести тот факт, что он нацелен на 2d и поэтому ближе мне с точки зрения разработки. Всё-таки в gimp и inkscape я более-менее рисовать научился, поэтому в принципе понимаю те задачи, которые передо мной стоят.
  2. К минусам можно отнести совершенно отвратительную фрагментарную документацию и тот факт, что многие вещи представлены в зачаточном виде. Нет движка для рендеринга фонтов (предлагается конвертировать имеющиеся ttf в png и затем уже использовать получающиеся картинки для построения предложений). Толком нету системы контейнеров, или по крайней мере я её не нашёл. Более того, у меня была возможность познакомиться  с качеством кода главного разработчика этой библиотеки на других его проектах и честно говоря впечатление у меня сложилось достаточно негативное. Да, идеи хорошие, но реализация в большинстве случаев хромает.

 

JMonkey Engine

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

 

Тут надо отметить, что одной из особенностей будущей игры является то, что в ней будет использована проволочная графика. Таким образом мне безразлично, делать в 2d или 3d – в конечном итоге всё равно всё сведётся к использованию вертексов и прочего.

 

Поэтому сейчас я активно пытаюсь поработать с JMonkey. И надо сказать, что первый опыт прошёл не очень удачно. Сразу же после установки программа при запуске вываливалась с ошибкой

“The JDK is missing and is required to run some NetBeans modules

Please use the –jdkhome command line option to specify a JDK installation or see http://wiki.netbeans.org/FaqRunningOnJre for more information.”
Честно скажу, так и не смог толком понять, в чём же ошибка. Необходимая JDK в системе установлена, но то ли какие-то переменные не настроены, то ли что ещё, но все танцы с бубном ни к чему не привели. Поэтому пошёл по пути, указанному в сообщении об ошибке. Скачал с официального сайта oracle необходимый JDK, установил его локально, а затем в файле  (<JMonkeyDir> – это путь, где установлен JMonkey Engine) <JMonkeyDir>/etc/jmonkeyplatform.conf прописал в переменной jdkhome путь к установленному JDK и всё заработало!