Archive for декабря, 2011

RDRubyTutorial: Случайные числа в Ruby

декабря 28, 2011  |  Published in Ruby, Основы

В этой статье из цикла RubyDev Ruby Tutorial мы рассмотрим способы генерации случайного числа в Ruby 1.8.x и Ruby 1.9.x. Генерация случайного числа — достаточно тривиальная задача, особенно для Ruby однако некоторые новички даже здесь сталкиваются с проблемами. Кроме того, не все программисты знают о нововведениях в Ruby 1.9 связанных с генерацией случайных чисел.

Самым простым способом получить случайное число в Ruby является использование метода rand.

puts rand() #0.7063893161805139
puts rand() #0.5829631459496872
puts rand() #0.7625800525759028

Получение случайных чисел с плавающей точкой редко бывает полезным, чаще всего необходимо целове число.

puts rand(3) #0
puts rand(3) #1
puts rand(3) #1
puts rand(10) #3
puts rand(10) #7
puts rand(10) #8

Если методу rand передать в качестве аргумента целое число, то rand будет генерировать случайные числа в диапазоне от 0 до n-1.
Read the rest of this entry »

Tags: ,

Работа с MongoDB: Подробнее о языке запросов ч.1

декабря 28, 2011  |  Published in MongoDB, Базы данных

mongoDBВ этой статье мы подробнее рассмотрим ранее описанные метод .find() и объекта запроса.

Методы .find() и .findOne() используются соответственно для поиска всех документов и поиска первого документа, что соответствуют запросу.

 


db.posts.find()
/*
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4e"), "title" : "Title for post # 1", "content" : "Content for post # 1" }
{ "_id" : ObjectId("4ef64c526e06ee4cec3dab4f"), "title" : "Title for post # 2", "content" : "Content for post # 2" }
...
{ "_id" : ObjectId("4ef714746dca6d809b6f4cdd"), "title" : "Title #9", "content" : "Content #9" }
{ "_id" : ObjectId("4ef714746dca6d809b6f4cde"), "title" : "Title #10", "content" : "Content #10" }
*/

db.posts.find().count() //20

Read the rest of this entry »

Tags: , ,

Работа с MongoDB: Структура БД и основы языка запросов

декабря 25, 2011  |  Published in MongoDB, Базы данных

mongoDBРаботая с MongoDB у нас имеется базовый объект — db, который представляет собой саму базу данных, точнее является ссылкой на одну из имеющихся баз данных (по умолчанию, запуская консоль это база данных с именем test). Далелее идут коллекции документов, использую dot-нотацию получаем доступ к коллекции следующим образом:

> db.collection_name

Коллекции представляют собой наборы документов или вложенных коллекций. Обратиться к документу можно используя различные запросы.
Read the rest of this entry »

Tags: , , ,

Работа с RestClient

декабря 24, 2011  |  Published in HTTP & REST

В этой статье я расскажу о работе с RestClient — замечательной библиотекой (gem’ом) написанной на Ruby.

RestClient — это библиотека для взаимодействия с REST-сервисами. RestClient был разработан Адамом Виггинсом (Adam Wiggins) когда он счел Net::HTTP слишком низкоуровневым и многословным, а ActiveResource слишком «толстым» и избыточным. Сейчас разработкой RestClient занимается Жульен Кирч (Julien Kirch), который значительно доработал и улучшил то, что создал Адам Виггинс.

RestClient очень прост и удобен. По сути, все, что вы делаете с RestClient — это отправляется HTTP запросы RESTful серверу, например, к Twitter API или API какого-нибудь другого интересного проекта, или даже не API, а сайту, который поддерживает REST-архитектуру. Мы просто отправляем запрос и получаем ответ — вот чем занимается RestClient.
Read the rest of this entry »

Tags: , ,

Работа с MongoDB: Установка и краткое введение в работу с MongoDB

декабря 24, 2011  |  Published in MongoDB, Базы данных

mongoDBMongoDB — это документо-ориентированная база данных. Если в реляционных базах данных мы используем строки (записи) и таблицы, то для MongoDB можно провести параллель с документами и коллекциями.

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

MongoDB — очень популярное и достаточно стабильное решение, которое широко используется в production окружении там, где нужна высокая производительность и где не подходят или плохо подходят реляционные базы данных.

Read the rest of this entry »

Tags: ,

Заполнение базы данных тестовыми данными при помощи seed-fu

декабря 24, 2011  |  Published in Ruby on Rails, Тестирование

Я отношусь к тойкасте людей, что не воспринимают интеграционные тесты. Программа не может оценить внешний вид приложения так, как то может сделать человек. По этой причине я предпочитаю сам смотреть на то, как выглядит приложение. Для того, чтобы это изучение приложения было максимально приближена к реальности — необходимо заполнять базу тестовыми данными, кроме того, тестовые данные необходимы для тестирования производительности приложения на «реальных» данных. В Rails имеется встроенный механизм seed-ирования базы данных, однако он мне не очень нравится и в этой статье я рассказывать о нем не буду. Вместо встроенного функционала я предпочитаю использовать seed-fu — отличное решение поставляемое в виде совсем обыкновенного gem’а, которое делает заполнение БД тестовыми данными более удобным.
Read the rest of this entry »

Tags: , , ,

Замечательный JavaScript ч. 3: Работа с DOM и BOM

декабря 10, 2011  |  Published in ClientSide, JavaScript

BOM — Browser Object Model — объектная модель браузера
BOM — представляет собой древовидную структуру, иерархию объектов браузера. Во главе этой структуры стоит объект window и представляет он собой само окно браузера. window также является глобальным объектом, то есть внутри него расположена глобальная область видимости и любая глобальная функция или переменная является соответственно методом или свойством объекта window.

Наиболее интересными функциями и свойствами window являются следующие:

window.navigator — информация о браузере.

window.innerHeight, window.innerWidth — внутренняя высота и ширина браузера, то есть размер области, которая отображает сайт.

window.outerHeight, window.outerWidth — внешняя высота и ширина, то есть размер самого окна браузера.

window.load() — функция-обработчик события загрузки сайта.

window.location — объект предоставляет информацию об адресе страницы и методы для редиректа, обновления страницы и т.д.

screen — объект предоставляющий информацию о пользовательском дисплее.

screenLeft(screenX), screenTop(screenX) — положение верхнего левого угла окна браузера.

scrollY, scrollX — положения горизонтальной и вертикальной полос прокрутки.

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

DOM — Document Object Model — объектная модель документа.

DOM является структурой вложенной в BOM. DOM содержит дерево всех элементов страницы и методы для работы с ними. Самыми популярными методами являются:

document.getElementById() — позволяет получить элемент по его ID.

document.getElementsByClassName() — позволяет получить элементы по их классу.

document.getElementsByName() — позволяет получить элементы по их имени.

document.getElementsByTagName() — позволяет получить элементы по имени тега.

document.getElementsByTagNameNS() — позволяет получить элементы по их имени, которые содержатся в определенной области видимости (оптимизированная версия getElementsByTagName).

Прежде, чем мы продолжим знакомится с остальными методами и свойствами для работы с DOM давайте подробнее рассмотрим что это такое и из чего DOM состоит. DOM описывается сразу тремя спецификациями разработанными W3C (W3C Level 1 DOM, W3C Level 2 DOM, W3C Level 3 DOM), которые были разработаны в разное время и соответственно в разной степени поддерживаются браузерами. В этой статье мы в первую очередь будем обращать внимание на DOM Level 1 так как он поддерживается полностью (или почти полностью) всеми современными (и не очень современными) браузерами. Вообще каждый Leve l является наслоением над предыдущим и добавляет определение новых свойств и методов для работы с DOM.

DOM состоит из узлов (node). О типах узлов позже.

<div>
  <p>
    <a>link</a> some text
  </p>
</div>

Можно изобразить так:

Read the rest of this entry »

Tags: , , ,

Замечательный JavaScript ч.2: Хорошие практики

декабря 9, 2011  |  Published in ClientSide, JavaScript

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

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

Не правильно

if (true)
  alert(true);

Правильно

if (true){ alert(true); }

2. Всегда ставьте точку с запятой.
В JavaScript ставить точку с запятой в конце каждой строки является необязательным, однако, что произойдет если мы минифицируем код? — Правильно, код поломается.

Неправильно

function myFunction(a,b) {
  var sum = a + b
  alert(sum)
}

Правильно

function myFunction(a,b) {
  var sum = a + b;
  alert(sum);
}

3. Всегда используйте var для объявления переменных и избегайте глобальных переменных.
Если вы не используете var для объявления переменных, то такие переменные объявляются как глобальные переменные. Глобальные переменные несут различные опасности связанные с некорректной работой кода.

Read the rest of this entry »

Tags: ,

Замечательный JavaScript ч.1

декабря 4, 2011  |  Published in ClientSide, JavaScript

Сразу оговорюсь о том, что JavaScript не самый удобный язык программирования — в нем много чего сделано неправильно или недоделано, много простейших вещей отсутствует, много неочевидных моментов, например начать программировать на Ruby можно уже через день почитав созданные кропотливым трудом статьи на RubyDev, а для того, чтобы научиться программировать на JavaScript необходимо большее время. Под «научиться программировать» я не подразумеваю умение организовывать архитектуру и создавать большие приложения, но подразумеваю знание синтаксиса и философии языка.

Несмотря на множество недостатков JavaScript — чудесный язык программирования. Если бы не проблемы с кроссбраузерностью и нормальная поддержка браузеров современных стандартов (я о HTML5 JavaScript APIs) то удовольствие от программирования на JavaScript можно было бы сравнить с удовольствием программирования на Ruby.

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

Read the rest of this entry »

Tags: , , ,

Интервью с Антоном Весниным о компании Locum и хостинговых решениях для платформы Ruby on Rails

декабря 3, 2011  |  Published in Интервью

Сегодня в виртуальной студии RubyDev пройдет уникальное интервью. Уникальное оно потому, что мы будем говорить не о самой разработке, но о размещении проектов в интернете и о бизнесе построеном на предоставлении хостинговых услуг. Расскажет нам обо всем этом наш гость — Антон Веснин, который будет представлять компанию Locum и расскажет, почему хороший хостинг для Rails проектов не обзательно должен быть заграничным.

Добрый день, Антон. Представся пожалуйста, читателям RubyDev и расскажи немного о себе.

Меня зовут Антон Веснин. На данный момент являюсь техническим директором проекта Locum Hosting House. Помимо основной деятельности занимаюсь велоспортом.

Расскажи пожалуйста, что за компания такая Locum и какого рода услуги предоставляет?

Мы на рынке уже несколько лет. Началось все с того, что мы видели явный вакуум на рынке хостинга для современных технологий. Таких как ruby on rails или, например, django. Несмотря на то, что рынок услуг хостинга был и остается переполненным, обычно речь идет о стандартном PHP+MYSQL, чего достаточно далеко не всем.
На данный момент предоставляем услуги как хостинга, так  виртуальных выделенных серверов (VDS) и регистрации доменов. Для некоторых клиентов мы так же оказываем консалтинговые услуги в вопросах разработки на Ruby On Rails. Это позволяет делать нам огромный опыт работы с совершенно разными проектами в этой области. Не редко бывает так, что вначале у нас размещается какой-то стартап, а после вырастает и переезжает на выделенный сервер, предложенной нами конфигурации. Read the rest of this entry »