Internalization, I18n, localization
Апрель 2, 2010
Существует два вида интернализации (т.е. перевода) рельсоприложений:
- Перевод заголовков, названий полей и всего статического, что имеется в виде. Для этих целей удобно использовать I18n, который включен в рельсы начиная с версии 2.2 (Мувик в тему!)
- Перевод данных из базы, для которого на данный момент нету встроенного решения может осуществляться несколькими путями.
К примеру у нас имеется таблица страниц с названием и контентом (title, content). Вот стратегии которые предлагает нам AWDWR(3ed):- Иметь различные таблицы для различных языков
| pages_en | pages_ru | - В таблице иметь дополнительный столбец с указанием локали, таким образом делать несколько записей каждого из продуктов с различными локалями
| id | title | content | locale |
| 1 | заголовок | контент | ru |
| 2 | smth | text | en | - В таблице иметь дополнительные столбцы с каждым из полей в различных локалях
| id | title_en | title_ru | content_en | content_ru | - То, что называется четвертой нормальной формой
Подробнее здесь
Кстати я в итоге и воспользовался этим способом, а плагин translatable_columns помог мне в этом. Уиии!
- Иметь различные таблицы для различных языков
PS
Локализацией оказывается называется интернализация времени, дат и всего чего с этим связано.
Ruby Version Manager, Gems, Bundler, ruby 1.8.7, 1.9.1
Март 30, 2010
Сегодня поставил на обе машины (стационарник и макбук) RVM (ruby version manager). Данная штука позволяет держать несколько версий руби, с их гемами и рельсами, что крайне удобно.
К примеру, я поставил 2 версии руби: 1.8.7 для продакшн разработки с рельсами 2.3.5, а также 1.9.1 для изучения и проб с рельсами версии 3.0.0 beta.
В качестве напоминалки сюда публикну пару команд, что же я сделал:
1. Первоначально я поставил RVM:
- http://rvm.beginrescueend.com/rvm/install/ – пища для размышлений
- mkdir -p ~/.rvm/src/ && cd ~/.rvm/src && rm -rf ./rvm/ && git clone –depth 1 git://github.com/wayneeseguin/rvm.git && cd rvm && ./install
- действовать по тому, что оно пишет при инсталле
- открываем консоль заново
2. Поставил 2 версии руби командами:
- rvm install 1.9.1
- rvm install 1.8.7
- переключаться между ними можно командой rvm 1.8.7 или rvm 1.9.1
- поставить какую-то версию по дефолту можно командой rvm 1.9.1 –default далее »
Взаимоотношение моделей в Rails, часть вторая
Февраль 22, 2010

Первая часть тут, а мы продолжаем, мвахахаха! Нам еще бы разобраться где ставить belongs_to, что выбрать has_many :through или has_and_belongs_to_many, как реализуются полиморфные ассоциации, ну и наконец, не забыть про вложенные (nested) ассоциативные связи. Поехали!
2.7 Где ставить belongs_to, а где has_one
Если ты, дорогой читатель, создаешь связь один-к-одному, то тебе понадобится добавить belongs_to в одну модель, а has_one в другую. Но как узнать в какую модель что добавлять?
Различие заключается лишь в том, где находится внешний индексный ключик (он находится в таблице класса, в котором объявляется belongs_to связь). Связь has_one говорит о том что ты имеешь нечто из множества, а не наоборот. К примеру, куда больший смысл в фразе: «у заказчика есть счет», чем «счет обладает заказчиком (как владелецем)». Посему и связь будет выглядеть вот так: далее »
Взаимоотношения моделей в Rails
Февраль 16, 2010

Данный гайд по связям/взаимоотношениям/ассоциациям я честно спер с ресурса rubyonrails.org, приложил некоторые усилия для перевода и оформления, так что меня пинать за недобросовестность нечего! Лучше читайте кусок полезной теории, пригодится 100%.
Это руководство поведает об особенностях ассоциативных связей в Active Record. Использовав данное руководству по назначению, можешь научится следующим полезностям:
- определение связей между моделями Active Record;
- понимание какие типы связей необходимо использовать в вашей задаче;
- использование доп. методов, которые дают ассоциативные связи.
В данной статье мы рассмотрим первую и частично вторую полезность, тут рассматриваем сухую теорию и не применяем ее на практике, ну разве что для простенькой иллюстрации. Кстати об иллюстрациях, под катом даже картинки есть. далее »
Прикручиваем оповещение с блога в твиттер
Февраль 13, 2010
Мой любезный читатель, посмотри, что у меня есть для тебя! Твиттер. Данная система микроблогинга довольно известна и распространена зарубежом, но не у нас, в России.
Что интересного для заграничничников дает этот сервис? Можно обмениваться сообщениями длиной в 140 символов, а ля чятик
Ограничение в длине сообщения связаны с тем, что твитить (т.е. посылать сообщения на твиттер) пользователь мог и может и будет мочь смс-кой. У нас операторы не предоставляют такой возможности, но тем не менее полно клиентов и плагинов для броузеров, для смартфонов и коммуников, которые восполняют дыру в на�?ем сердце от несправедливости великолепной четверки оббирателей.
Что же интересного для нас, господа, в этом сервисе? Я считаю интересным факт, что сервис написан на Ruby on Rails, что свободно предоставляет api для взаимодействия с ним, и что можно использовать его в качестве системы отслеживания новостей. �? плюс ко всему этому, можно моментально ответить автору; такого при использовании обычной rss-читалки добиться было нельзя. �?нтерактивность, блин! далее »
Mass Assignment в RoR.
Февраль 4, 2010

Mass Assignment (массовое назначение) является причиной уязвимостей сайтов на rails с момента появления фреймворка на свет. О�?ибка программиста, как зачастую это бывает, сводится к отсутствию проверки входных параметров.
Для примера создадим простенькое приложение
$ rails massVul $ cd massVul/ $ script/generate scaffold user name:string admin:boolean
Таким образом мы создадим основу для приложения с пользователями, в которой можно указать имя в поле name, а также есть поле admin, которое легко использовать при разграничении прав пользователей. К примеру запросом, является ли этот пользователь администратором, и если да, то позволяются ему определенные действия. Конечно, мы не настолько глупы чтобы позволять обычным пользователям ставить галочку, поэтому мы правим на�? вид и удаляем все что связано с галочкой admin. далее »
Простой задачник на RoR
Январь 31, 2010
Различных хау-ту�?ек на тему создания блога уже по-моему предостаточно. Поэтому я ре�?ил вам предложить написать несложный задачник используя Ruby on rails. Плюс хочу в данной теме опробовать удобства SlideShare и все иллюстрации запихнул в презента�?ку. По ходу процесса буду обращаться именно к ней обзывая слайд, который нужно взглянуть.
�?так, что же должен уметь на�? задачник? Создавать/просматривать/редактировать/удалять записи с задачами, отображать время создания задачи и время ее окончания. Вот мои версии рубей и рельс.
$ rails -v Rails 2.3.5 $ ruby -v ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]
Для начала нам необходимо установить дополнительные генераторы кода от Райана Бейтса, это не обязательно, они отличаются незначительно, но в целом генераторы Райана мне нравятся боль�?е, они симпатичнее и соответствуют правилу DRY (не повторяй код дважды). Далее мы создаем приложение, переходим в папку с приложением и генерируем layout, чтобы симпатичнее смотрелось приложение в целом.
После этого необходимо создать основу на�?его приложения scaffold. Назовем его todolist, у него будет 4 поля:
- задача (текстового типа)
- статус (выполнено или невыполнено, поэтому булевый тип)
- создано_в (дата-время)
- окончено_в (дата-время)
Даль�?е подсвеченные исходнички и интересная презента�?ка, скорее жми: далее »
Тренд �?паргалок и не только
Январь 13, 2010
Дорогой мой дневничок, сегодня произо�?ла со мной печальная история, настолько печальная, что печали моей было уделено аж 30 секунд размы�?лений на тему жизни, вселенной и вообще. Как ты понимае�?ь, я получил второй эпохальный неуд на экзамене за 5 лет студенческой жизни. Конечно, сам виноват, конечно понимаю, но так бы хотелось уже не заботить свой мозг забиванием туда всякого хлама и покончить с сессией, сидеть под банановой пальмой в комнате, ку�?ать выращенную на ней кукурузу и ближай�?ие пару дней ощущать всецелое упокоение моего тела, созерцающего гигабайты аниме.
Но так уж вы�?ло! Я даже, пожалуй, согла�?усь, что просмотр аниме и есть забивка мозга всяким хламом, а ученье – свет, но иногда хочется. А знае�?ь, дорогой дневничок, студент к пятому курсу настолько обленяется, что я уже и не помню, когда сдавал экзамен не обложив�?ись книжками и конспектами в 3х вариантах. �? выходит так, что пик активности и изобретательности студента в создании новых и воссоздании забытых старых способов использования �?паргалок как раз приходится на млад�?ие курсы.

Воксели, и с чем их едят.
Январь 10, 2010
Некоторое время назад на всем известном ресурсе увидел статью про Voxelstein. Прочел и уж очень заинтересовался технологией вокселей. Тому, кто впервые с ними сталкивается, кажется, что прекрасней технологии для создания реалистичных разру�?ений в играх просто не существует! Но покопав�?ись в гугле на предмет вокселей, выяснил, что технологии не мень�?е 15 лет и либо я такой отсталый, либо технология себя не оправдала. Оказалось, все намного прозаичнее и об этом ниже.
Что же такое воксель? Википедия дает ответ следующий: volume pixel = voxel, объемный пиксель, представляет собой параллелепипед. Как и в случае с пикселом, сами по себе воксели не содержат информации о своих координатах в пространстве— она вычисляется на основе их позиции относительно других вокселов (то есть их позиции в структуре, образующей объемный объект.
![]()
Мастер Фу и консультант по методологии
Ноябрь 6, 2009
Когда Мастер Фу и его ученик Ньюби посещали святые места, по вечерам Мастер Фу имел обыкновение выступать перед неофитами Unix тех городов и сел, где они останавливались на ночлег.
Однажды среди тех, кто собрался его послу�?ать, оказался консультант по методологии.
«Если при доводке вы не профилируете регулярно ва�? код в поисках узких мест, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, в котором нет рыбы», – сказал Мастер Фу.
«Не верно ли тогда и то, – сказал консультант по методологии, – что если вы не замеряете постоянно ва�?у производительность при управлении ресурсами, то вы уподобляетесь рыбаку, который закидывает сеть в озеро, котором нет рыбы».
«Однажды я встретил рыбака, который только что уронил сеть в озеро, по которому плавает его лодка, – сказал Мастер Фу. – Он долго �?арил по дну лодки, пытаясь найти ее».
«Но если он уронил свою сеть в озеро, – сказал консультант по методологии, – то почему он искал ее в лодке?»
«Потому, что он не умел плавать», – ответил Мастер Фу.
Услы�?ав это, консультант достиг просветления.
