?

Log in

No account? Create an account
Трогательный путеводитель по Ruby's Journal
 
[Most Recent Entries] [Calendar View] [Friends]

Below are the 14 most recent journal entries recorded in Трогательный путеводитель по Ruby's LiveJournal:

Friday, April 10th, 2009
6:47 am
[zverok_kha]
3.3 Если я ещё недостаточно дал тебе почувствовать себя ребёнком

Оригинал: 3.3. If I Haven't Treated You Like a Child Enough Already

Я тобой горжусь. Кто угодно может подтвердить, что я тобой хвастаюсь. Что кругом треплюсь о прекрасном анониме где-то там, который всё скроллит и читает, скроллит и читает. «Эти дети, — говорю я. — Чувак, у этих детей есть сердце. Я никогда...» И не могу даже закончить фразу, и она тонет во всхлипах.

И моё сердце светится ярко-красным под плёнчатой полупрозрачной кожей, и приходится впрыснуть 10 кубиков ЯваСкрипта, чтобы я пришёл в себя. (Я хорошо реагирую на токсины в крови.) Man, that stuff will kick the peaches right out your gills! (прим.перев: )

Ну, ладно. Ты хорошо держался. Но теперь я стану злобной училккой. Теперь я потребую хороших оценок. До сих пор тебе ничего не приходилось делать, кроме как двигать глазами. Хотя, безусловно, ты уже читал вслух раньше — теперь нужно, чтобы ты ещё и понимал, что читаешь, Смочккисс.

Назови вслух все части речи, использованные здесь:

5.times { print "Odelay!" }

Можно прикрыть этот параграф, пока называешь, потому что твои глаза наверняка захотят подсмотреть ответ. У нас здесь число 5, за которым следует метод .times. Дальше крабья клешня открывает блок. У метода ядра print нет точки, а за ним следует строка "Odelay!". И закрывает блок вторая крабья клешня.

Назови вслух все части речи, использованные здесь:

exit unless "restaurant".include? "aura"

Как и print, exit — это метод ядра. Если ты уделил хоть немножко внимания здоровенному списку ключевых слов, ты знаешь, что unless — просто ключевое слово. К строке "restaurant" прилип метод include?. И, наконец, строка "aura".

Назови вслух все части речи, использованные здесь:

['toast', 'cheese', 'wine']. each { |food| print( food.capitalize ) }

Гусеница поглощает изысканные деликатесы. Пример начинается с массива. В массиве лежат строки 'toast', 'cheese' и 'wine'. За массивом следует метод each.

Внутри блока: аргумент блока food скатывается по желобку в блок. Метод capitalize превращает первую букву аргумента (который стал переменной food) в прописную (прим. перев.: по-английски это так и называется capitalize). Строка с прописной буквы передаётся в метод ядра print.

Ещё раз пересмотри примеры. Убедись, что узнаёшь все использованные части речи. Они все выглядят по-разному, правда? Глубоко вдохни, помассируй виски. Теперь давай разрежем лягушку, достойную кода.

Saturday, January 17th, 2009
4:09 pm
[zverok_kha]
3.2 - части речи (окончание)

окончание перевода главы 3.2. начало, продолжение

Блоки

Любой код, окруженный фигурными скобками — это блок.

Например, 2.times { print "Да, однажды я использовал хрустящий бекон в примере, но никогда больше!" }.

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

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

Фигурные скобки можно заменить словами do и end — так красивее, если блок занимает больше одной строки.

 loop do
   print "Намного лучше." 
   print "Ах. Простор!" 
   print "От этих крабьих клешней спина разламывалась." 
 end

Аргументы блоков

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

Например, |x|, |x,y|, и |up, down, all_around|.

Аргументы блока используются в его начале.

{ |x,y| x + y }

В этом примере, |x,y| — аргументы. После аргументов идет немножко когда. Выражение x + y складывает аргументы.

Мне нравится думать, что вертикальные черточки похожи на туннель — похоже, что это желоб, по которому переменные соскальзывают вниз (x раскорячился, а y держит ноги вместе). Этот желоб — способ сообщения между блоком и миром вокруг него.

Через этот желоб (или туннель) переменные передаются в блок.

(— У меня нет жены. Нет детей. Не останется наследства. Единственное, что мир запомнит обо мне — хрустящий бекон.
— М-да.)

Диапазон

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

(1..3) — диапазон, представляющий числа от 1 до 3.

('a'..'z') — диапазон, представляющий строчные буквы английского алфавита.

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

Обычно используют две точки. Если добавить третью, последнее значение будет исключено из диапазона.

(0...5) — диапазон чисел от 0 до 4.

Когда видишь третью точку — представь себе чуть-чуть приоткрытый аккордеон. Достаточно для того, чтобы одна нотка прозвучала. Эта нотка — и есть последнее значение. Пусть его поглотит небо.

Массивы

Массив — это список, окруженный квадратными скобками и разделенный запятыми.

[1, 2, 3] — массив чисел.

['coat', 'mittens', 'snowboard'] — массив строк.

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

Жила-была гусеница с запятыми вместо ног. Поэтому ей приходилось делать паузу после каждого шага. Другие гусеницы очень уважали ее и сделали своим главарем. О, она был еще и филантроп! Она был известна тем, что делилась свежими листьями с менее удачливыми гусеницами.

В общем, массив — это набор каких-то штук, только он еще и сохраняет порядок, в котором лежат эти штуки.

Хеши

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

Например, {'a' => 'aardvark', 'b' => 'badger'}.

В этот раз фигурные скобки — это как маленькие книжки. Видишь, они похожи на маленькие сильно открытые книжки? Они обозначают открытие и закрытие нашего словаря.

Представь себе словарь с определением на каждой странице. Запятые — это уголки страниц, которые мы переворачиваем, чтобы увидеть следующее определение. Одно на каждой странице: слово, а за ним стрелочка указывает на определение.

{
 'имя' => 'Петр',
 'профессия' => 'дрессировщик львов',
 'большая любовь' => 'фланель'
}

Я не сравниваю хеши со словарями, потому что определения можно хранить только в словаре. В предыдущем примере, я храню личную информацию о Петре, дрессировщике львов, влюбленном во фланель. Хеши похожи на словари, потому что в них очень легко что-нибудь найти.

В отличие от массивов, элементы в хеше хранятся без какого-то определенного порядка. (прим.перев.: для Руби 1.9 это уже неверно — хеши в нем сохраняют порядок элементов)


(1: — Меня начинает тяготить этот комикс. Он тут везде будет вставляться?
— Как орешки?
2: (молчат)
3: — Может быть, если мы будем молчать, все это исчезнет?)

Регулярные выражения

Регулярное выражение (или «регексп», «regexp», «regular expression») — набор символов, окруженный слешами.

Например, /ruby/, /[0-9]+/ и /^\d{3}-\d{3}-\d{4}/.

Регулярные выражения используются для поиска слов или фрагментов текста. Слеши по обе стороны — это штырьки.

Представь себе маленькое слово со штырьками с каждой стороны и держи его над книгой. Проводишь словом над книгой, и когда оно оказывается над соответствующим словом, оно мигает. Ты прикрепляешь регулярное выражение к книге, как раз над совпадением, и оно сияет буквами совпавшего слова.

Хм, ну и когда ты втыкаешь штырьки в книгу, бумага чихает: «рег-експ»!

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

Операторы

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

  ** !  ~  *  /  %  +  -  &  
  << >> |  ^  >  >= <  <= <=>
  || != =~ !~ && += -= == ===
  .. ... not and or

Ключевые слова

В Руби есть несколько встроенных слов, насыщенных значением. Эти слова нельзя использовать как переменные или изменить их значение в своих интересах. Некоторые мы уже обсуждали. Они в домике, дружище. Только тронь их — и тут же получишь официальную синтаксическую ошибку.

  alias   and     BEGIN   begin   break   case    class   def     defined 
  do      else    elsif   END     end     ensure  false   for     if 
  in      module  next    nil     not     or      redo    rescue  retry 
  return  self    super   then    true    undef   unless  until   when 
  while   yield

Ну и ладненько. Это и есть знаменитые части языка Руби. В следующих главах мы нальем достаточно киселя, чтобы склеить эти части в хитрые кусочки (трогательного) кода.

Рекомендую просмотреть части речи еще раз. Улови общий вид. Я тебя проверю в следующем разделе.


(1: — Ты заметил, что этак книгу вообще написана лунатиком?
— Угу.
2: — Серьезно, он слишком гиперактивный. Если мы поддержим этот безумный темп, он быстро сгорит.
3: — Сгорит? Он собирается выстрелить себе в голову, как только ему исполнится 30!)

Tuesday, September 25th, 2007
6:54 pm
[zverok_kha]
3.2 - части речи (продолжение)
продолжение перевода главы 3.2. начало здесь.

Методы

Если переменные и константы — существительные, то методы — это глаголы. Методы обычно прикрепляются к переменной или константе с помощью точки. Вы уже видели, как работают методы.

front_door.open
В этом коде, open - это метод. Это действие, глагол. Иногда встречаются несколько действий, объединенных в цепочку.

front_door.open.close
Мы сказали компьютеру открыть дверь и тут же закрыть ее.

front_door.is_open?
Это тоже действие. Мы сказали компьютеру проверить, открыта ли дверь. Можно назвать этот метод Door.test_to_see_if_its_open, но is_open? короче и настолько же верно. И вопросительные, и восклицательные знаки можно использовать в именах методов.

Аргументы метода

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

Аргументы методов прилепляются к концу метода. Аргументы обычно окружены скобками и разделены запятыми.

front_door.paint( 3, :red )
Этот код покрасит дверь тремя слоями красной краски.

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

Как лодка может тянуть несколько камер, так и методы с аргументами тоже могут склеиваться в цепочки.

front_door.paint( 3, :red ).dry( 30 ).close()
Этот код красит дверь тремя слоями красной краски, сушит ее 30 минут, потом закрывает. Хотя у последнего метода нет аргументов, все равно можно поставить скобки. Таскать за собой пустую покрышку бессмысленно, так что скобки обычно отбрасывают.

Некоторые методы (например, print) - это базовые методы, методы ядра. Они используются в Ruby очень часто. Поскольку они такие распространенные, точка здесь не используется.

print "Смотри-ка, никакой точки."
Методы класса

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

Door::new( :oak )
As seen above, the new class method is most often used to create things. In the above example, we’re asking Ruby to make a new oak door for us. Of course, Ruby has to have an understanding of how to make a door—as well as a wealth of timber, lumberjacks, and those long, wiggily, two-man saws.

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

Все усыпано хрустящим беконом
(- Хрустящий бекон! - Хрустящий бекон! - Хрустящий бекон! - Хрустящий бекон! - Хрустящий бекон!)

Глобальные переменные

Переменные, которые начинаются со знака доллара - глобальные.

Например, $x, $1, $chunky и $CHunKY_bACOn.

Большинство переменных - по природе своей временные. Некоторые части вашей программы - вроде как домики. Вы заходите, и там есть свои переменные. В одном домике dad (отцом) может быть Арчи, бродячий торговец и сборщик скелетов. В другом доме, dad может оказаться Питером, укротителем львов и любителем фланели. В каждом домике свой dad.

Глобальные же переменные гарантируют, что значение переменной одинаковое для всех домиков. Знак доллара тут очень уместен. В каждом американском доме уважают знак доллара. Он сводит нас с ума. Постучите в любую американскую дверь и предложите им денег. Уверен, что реакция будет совсем не та, что если бы вы предложили им Питера, укротителя львов и любителя фланели.

Глобальные переменные могут использоваться в любом месте вашей программы. Они всегда в поле зрения.

Переменные экземпляра

Переменные, начинающиеся с символа "at" ("собака" по-русски) - это переменные экземпляра.

Например, @x, @y, или @only_the_chunkiest_cut_of_bacon_I_have_ever_seen. (к слову, название последней переменной можно читать как @самый_хрустящий кусочек_бекона_из_всех_что_я_видел - прим.перев.)

Эти переменные обычно используют, чтобы определить свойство чего-нибудь. Например, можно указать для Ruby ширину front_door (входной двери), установив переменную @width внутри front_door. Переменные экземпляра используются в Ruby для указания характеристик отдельных объектов.

Можно считать, что символ "at" - сокращение от "attribute" ("свойство").

Переменные класса

Переменные, которые начинаются с двойной "собаки" - переменные класса.

Например, @@x, @@y или @@i_will_take_your_chunky_bacon_and_raise_you_two ("я беру хрустящий бекон и повышаю вас обоих в должности").

Переменные класса тоже используются для определения свойств, но свойств не отдельного объекта, а множества похожих объектов. Если переменные экземпляра определяют свойства для единственной front_door, то переменные класса - для всего, что является Door (дверью).

"Двойное at" можно читать как "attribute all" ("свойство всех"). Ну, или можно представлять себе "AT-AT" из "Звездных Войн", по управлением Ruby ("All Terrain Armored Transport" - "Бронированный вездеход" с четырьмя ногами - прим.перев.)

Дааа! Хрустящий бекон достигнут!
(— Уррра! Уж не знаю, что такое "хрустящий бекон", но мы это сделали! — Мы в книге!)
Friday, May 25th, 2007
9:52 pm
[zverok_kha]
3.2 - Части речи

Оригинал: 3.2. The Parts of Speech

Как белая полоса на спине у скунса или длинная фата у невесты, у многих частей речи в Руби есть очевидные признаки. Пунктуация и заглавные буквы помогают смотреть на код и распознавать его инстинктивно. Сознание будет вскрикивать: "Во, знакомая штука!" И при общении с другими рубистами вы станете демонстрировать чудеса понимания.

Сосредоточьтесь на том, как выглядят все эти части речи. Тонкости объясняются в следующих главах, а пока - вот вам краткое описание каждой части, которое даже не обязательно понимать. К концу главы вы будете легко распознавать каждый кусок Руби-программы.

Переменные

Любое обычное слово, начинающееся с маленькой буквы - это переменная Руби. Переменные могут состоять из букв, цифр и подчеркиваний.

Например, x, y, banana2 или phone_a_quail.

Имена - это вроде кличек. Помнишь, как тебя называли Петей-Вонючкой? Люди кричали "Топай сюда, Петя-Вонючка!" И все вокруг чудом понимали, что Петя-Вонючка - это ты.

Переменные позволяют давать клички тому, что постоянно используется. Например, представьте, что вы - директор приюта. Приюта для мальчиков. И каждый раз, когда Папаша Уорбакс приходит прикупить себе ребеночка, мы сдираем с него сто двадцать один доллар восемь центов за плюшевого мишку, который скрашивал мальчику жизнь в печальные времена и оберегал от ночных кошмаров.

teddy_bear_fee = 121.08

Позже, когда вы будете выбивать ему чек на кассовом аппарате (очень мощном кассовом аппарате, на котором даже запускается Ruby!), нужно будет сложить все цены:

total = orphan_fee + teddy_bear_fee + gratuity
#(сумма = цена сиротки + цена плюшевого мишки + чаевые)

Клички переменных очень помогают. А в подпольном мире торговли детьми, я уверен, приемлема любая помощь.

(- Чувак, у него очень странные примеры.
- Тсссс. 121,08 - отличная цена за плюшевого мишку.)

Числа

Самый простой тип чисел - целое (integer), набор цифр, перед которым может стоять плюс или минус.

Например, 1, 23 или -10000.

Запятые в числах использовть нельзя, зато можно подчеркивания. Так что для пущей читаемости можно отделить тысячи подчеркиваниями.

population = 12_000_000_000

Десятичные дроби в Ruby называются float (по-русски часто говорят "число с плавающей точкой", но это уж очень длинно, так что мы будем говорить "дробные" - прим.перев.). Дробные числа записываются как числа с десятичными разрядами, или в научной нотации.

Например, 3.14, -808.08 и 12.043e-04.

Строки

Строки - это набор любых символов (цифер, букв, знаков пунктуации), окруженный кавычками. Исползуются и одинарные, и двойные кавычки.

Например, "sealab", '2021' или "Эти комиксы ужасно смешные".

Когда вы заключаете символы в кавычки, они хранятся вместе, как одна строка.

Представьте себе журналиста, который собирает и записывает фигню, изрекаемую знаменитостями. "Я стала мудрее. - говорит Аврил Лавин. - Теперь я знаю, что такое бизнес - что нужно делать и как это работает".

avril_quote = "I'm a lot wiser. Now I know
what the business is like -- what you have
to do and how to work it."

Точно так же, как раньше мы сохранили число в переменной teddy_bear_fee, теперь мы сохранили набор символов (строку) в переменной avril_quote. Журналист отсылает эту цитату наборщикам, которые как раз используеют Ruby для печати.

print oprah_quote
print avril_quote
print ashlee_simpson_debacle


(- А ну-ка, скажи что-нибудь громко! Может быть, он использует это в примерах!
- Что сказать-то? Может, "хрустящий бекон"?)

Символы

Символы - это слова, выглядящие как переменные. Они тоже состоят из цифр, букв и подчеркиваний. Но начинаются с двоеточия.

Например, :a, :b или :ponce_de_leon.

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

Можно сказать, что символы компьютеру легче переварить. Они как активированный уголь. А двоеточие - это пузырьки в желудке компьютера, когда он проглатывает симол. Ах. Полегчало.


(- Хрустящий бекон!!
- Хрустящий бекон!!)

Константы

Константы - такие же слова, как переменные, но начинаются с большой буквы. Если переменные - это существительные Ruby, то константы - имена собственные.

Например, Time, Array или Bunny_Lake_is_Missing.

В английском имена собственные пишутся с большой буквы. Empire State Building. Нельзя просто так передвинуть Empire State Building. Нельзя даже решить, пусть Empire State Building будет чем-нибудь другим. Вот что такое имена собственные. Они указывают на нечто особенное, и, как правило, не изменяются.

Соответственно, константы не могут быть изменены после того как их значение установлено.

EmpireStateBuilding = "350 5th Avenue, NYC, NY"

Если мы попытаемся изменить константу, Ruby возмутится. Такие вещи - дурной тон.


(- Ну, давай же! Хрустящий бекон!
- Хрустящий. - Бекон.)

(продолжение главы следует)

Sunday, May 20th, 2007
7:45 am
[zverok_kha]
3.1 Язык - ЗНАЧИТ язык

Оригинал: 3.1. Language and I MEAN Language


(1. - "Ruby легко читать."
- Эммм... Это моя реплика.
2. - Слушай, это что, заказуха? Типа рекламный буклет или каталог товаров?
3. - Наши карьеры рухнули.)

Несвоевременное примечание переводчика: чтение этой главы, особенно примеры, демонстрирующие естественность Ruby, требуют некоторого знания английского языка. Программирование вообще требует некоторого знания английского языка. Поэтому для тех куски, в которых why демонстрирует перевод с Ruby на "человеческий" я даю и английский вариант - для сравнения с Ruby, и русский - для уточнения смысла.


Убеждения не позволяют мне называть Ruby компьютерным языком. Это бы предполагало, что язык оперирует с понятиями компьютера. Что он создан для компьютера, в первую и главную очередь. А значит мы, программисты - иностранцы, ищущие пристанища в вотчине компьютера. Это язык компьютера и мы переводим его миру.

Но как ты назовешь язык, когда ты сам начинаешь мыслить на нем? Когда используешь слова и идиомы языка для самовыражения. Послушай-ка, компьютер ведь не может этого делать. Разве ж это компьютерный язык? Он наш, наш собственный родной язык!

Мы больше не можем считать этот язык компьютерным. Это программистояз. Это язык наших мыслей.

Прочти вслух:

5.times { print "Odelay!" }

В английском знаки пунктуации (точки, скобки, запятые) - это паузы. Пунктуация уточняет смысл слов, поясняет мысль автора фразы. Фразу выше можно прочитать так: "Five times print 'Odelay!'" ("Пять раз напечатай 'Odelay!'")

Именно это и делает маленькая Ruby-программа. Испанское восклицание Бека появится на экране пять раз. (Бек - звезда альтернативного рока, "Odelay", название одного из его альбомов - испано-мексиканское сленговое восклицание, эквивалентно американскому "Cool" - прим.перев.)

Прочти вслух:

exit unless "restaurant".include? "aura"

Здесь выполняется простая проверка. Программа выйдет (exit, закончит выполнение) если не (unless) выполнится условие: слово "restaurant" содержит (include) слово "aura". Еще раз, по-английски: "Exit unless the word restaurant includes the word aura" (и еще раз, по-русски: "Выйти, если слово 'restaurant' не содержит слова 'aura'")

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

Прочти вслух:

['toast', 'cheese', 'wine'].each { |food| print food.capitalize }

Хотя этот кусочек кода читается тяжелее и меньше похож на обычную фразу, чем примеры выше, я все же прошу попробовать его прочитать. В некоторых случаях Ruby читается как английский, а в других - как сокращенный английский. Переводя на полноценный английский, это можно прочитать вот так: "With the words ‘toast’, ‘cheese’, and ‘wine’: take each food and print it capitalized" ("Со словами ‘toast’, ‘cheese’, ‘wine’ сделать: взять каждый предмет и напечатать его с большой буквы")

Компьютер исполнительно выведет: "Toast", "Cheese" и "Wine".

Теперь вам наверное интересно, как эти слова объединяются. Смочкиссс хочет знать, что эти точки и скобочки значат. Ниже описаны разные части речи.

Все, что вам пока стоит знать - Ruby построен из предложений. Они не совсем похожи на английские. Каждое предложение - короткий набор слов и знаков пунктуации, выражающий единую мысль. Из этих предложений можно составлять книги. Можно составлять страницы. Можно составлять целые романы. Романы, которые могут читать люди - но и компьютер тоже.

6:50 am
[zverok_kha]
3. Быстрая (и по возможности безболезненная) прогулка по Ruby (с комиксовыми лисами)

Оригинал: A Quick (and Hopefully Painless) Ride Through Ruby (with Cartoon Foxes)



(1. - Невероятно. И ради этого я встал в 8 утра.
- Кому ты рассказываешь?
2. - К тому же... Я до сих пор не видел чека. Они сказали, что заплатят по окончании книги.
- Я получил 50% вперед.
3. - Вот так номер!!
- Я те говорю. Тебе стоит на на них наехать.)

Вот такая парочка. Минутку, у меня астма разыгралась - сейчас найду ингалятор и вернусь.


(1. - Че это за рамки? По-моему, мы по уши в дерьме!
- и ног нет.
2. - НИ ХРЕНА СЕБЕ!!! Черт!! Где мои ноги?!
- Фотошопом отрезало.
3. - Чегооо?? А если Фотошоп заглючит?
- Молись, чтобы это оказалась OS X.)

Для чтения этой главы советую запастись тряпочкой: придется чем-нибудь утирать лицо от слез умиления.

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

Sunday, May 13th, 2007
12:23 pm
[zverok_kha]
врезка! (ко второй главе)

Оригинал: What I’m Going to Do With the Massive Proceeds from this Book

Что я намерен делать с неимоверными прибылями от этой книги.

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

Чтобы не прекращать написание "(Трогательного) Путеводителя", я решил выделить эту колонку как отдельное место, где я мог бы изливать свои пустые и напрасные мечты.

Сегодня был в итальянском ресторане "Granado’s", и когда расплачивался, заметил (под стеклом) бутылочку бальзамического уксуса за 150 баксов. Маленькую бутылочку. В ладонь поместится. Двадцатидвухлетней выдержки. (бальзамический уксус - изысканный виноградный уксус, процесс приготовления предполагает выдержку не менее 12 лет - прим.перев.)

Я много думал об этой бутылочке. Она - частый элемент моих навязчивых фантазий. В одной из них, я захожу в ресторан, швыряю пачку денег на прилавок и серьезно говорю кассиру: "Давай-ка! Мне нужно приготовить важный салат!"

Есть еще другая фантазия, в которой я разбрасываю зелень. Такая крестьянская пища не подходит к моему новому уксусу. Нет, теперь слава и аристократичность меня окончательно испортили. Моей новой зеленью будут денежки. Холодные тяжелые денежки, миссис Наличка.

Вскоре я уже плачу сотни баксов за кусочек сыра Мизитра (элитный критский сыр - прим.перев.)

И тут мое воображение окончательно вышло из-под контроля. Я обдумывал покупки греческих урн, автоколонн, авиалиний, пирамид, костей диновазров. Случайно увидел по телевизору города, сметённые ветром, и записал в список покупок: Ураган.

Но теперь я вижу более глобальную цель. Прикиньте: что если я накоплю, столько бабла, что монетные дворы не будут успевать печатать банкноты? Тогда всем вокруг придется использовать деньги из "Монополии" в качестве валюты. Придется наловчиться играть в "Монополию", чтоб не помереть с голоду. Вот это будут напряженные игры. Папа попадает на клетку "банк Сент-Джеймс", дети рыдают. К тому же, тем кто любит использовать поле "Бесплатная стоянка", чтобы накопить бабла, придется тяжело.

Придется отдать доложное фальшивым деньгам. Подделки - это круто. Их так легко прибрать к рукам. Ррраз - и ты неимоверно богат. Когда я был маленьким, мы с пацанами построили маленькую Тихуану во дворе; сделали собственные песо и сомбреро и всякое такое прочее!

Один пацан стал продавать горячие тамале по два песо. Два песо! Он вообще знал, что это игрушечные деньги? Что было у него в голове? Кто его позвал в игру? Он знал, что мы, вообще-то, не в Тихуане? Может, он сам был из Тихуаны! Может, это были настоящие песо! Давайте-ка сделаем еще настоящих песо!

Кажется, у нас даже была таверна, где можно было упиться колой. Это было совершенно непохоже на кучку пацанов, слоняющихся и бормочущих невнятные глупости.

Tuesday, May 8th, 2007
5:11 pm
[zverok_kha]
2.4. Как начинаются книги

Оригинал: 2.4. How Books Start

Теперь вот что. Если вы хоть раз читали книгу, вы должны знать, что ни одна книга не случается без тесного сотрудничества. Да, сотрудничества. Может, вы этого и не знали. "Сотрудничество" означает - ты и я работаем вместе, чтобы сделать это чтение незабываемым.

Мы начали книгу и вместе прошли через Введение. Эта общность, это сотрудничество, проведет нас через книгу, и я стану проводником. А вы будете кивать или качать головой, показывая, насколько продвинулись.

Я Питер Пен, держащий тебя за руку. Давай, Венди! Направо за второй звездой, затем прямо до самого утра.

Есть проблемка. У меня не очень-то получается ладить с людьми. И я не люблю держаться за руки.

Кто угодно вам подтвердит. На Церемонии Открытия Этой Книги (мероприятие на стадионе, с ресторанной едой), я вдруг обнаружил, что сэндвичи с огурцом готовили без салфеток. Ну и, конечно, масло смешалось с огурцами неправильно... (сэндвичи с огурцом - классические "сэндвичи к чаю"; при приготовлении кусочки свеженарезанного огурца положено промокать полотенцем или салфеткой, чтобы сэндвич не оказался слишком "мокрым" - прим.перев.) Несмотря на это, я устроил такую сцену! Направил прожекторы на рекламные грузовики, а потом разбил эти прожекторы на кусочки. Мой громкий маниакальный смех разносился в ночи. Было круто.

Правда, поскольку с людьми я не очень-то, на Церемонию Открытия Этой Книги я никого и не приглашал. Так что она никого не напрягла. Я проделал все скрытно, и никто вообще ничего не заметил.

В общем, вы поняли - "сотрудничество" в этой книге не подразумевает никакого сотрудничества. Я не могу ни с кем сотрудничать. Нее, в этой книге "сотрудничество" означате мультяшных лис. Вот так-то - в этой книге полчища мультяшных лис.

Ну а я буду считать, что вам удастся сотрудничать с ними.

4:17 pm
[zverok_kha]
2.3. Восход красного солнца

Оригинал: 2.3. The Red Sun Rises

Вы, наверное, спросите: почему я изменил отношение к Ruby? Коротко говоря, мы поладили.

Бывает, например, Некто встречается тебе в колледже, и он ужасно похож на человека, который в детстве тыкал тебе карандашом в лицо. Сразу, импульсивно, понимаешь, что этот новый Некто - недруг. Морщишься от его прически. Вешаешь трубку в кульминационных местах его анекдотов. Прыгаешь на палке-кузнечике как раз там, где он пытается пройти (pogo stick, у нас известный как "Кузнечик" - вот такая ножная прыгалка - прим.перев.).

Через шесть месяцев как-то случается так, что ты и Некто сидите возле фонтана, и очень здорово трепетесь. И его физиономия не так уж похожа на того врага из детства. Ты встретил Хорошего Близнеца. Вы поладили.

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

И все-же, кое-какую мотивацию я вам предоставлю. Ну, Смочкиссс, вот тебе три причины изучить и использовать Ruby.

  1. Здоровье разума.

    Витамин R. Проникает прямо в мозг. Ruby научит вас выражать идеи через компьютер. Вы будете писать сказки для машины.

    Творческие способности, чуваки. Дедукция. Здравый смысл. Понимающее кивание. Этот язык поможет улучшит подключение вашего сознания к остальному миру. Я заметил, что многие опытные пользователи Ruby рассуждают яснее и объективнее (вместо тенденциозности и грубости.)

  2. Какой-то человек с какого-то острова.

    Ruby родился в Японии. Это чудно. Япония не очень-то знаменита производством софта. И коль скоро языки программирования на большую часть состоят из английских слов, кто мог ожидать появления языка из Японии?

    И тем не менее, вот он, Ruby. Юкихиро Матцумото создал Ruby вопреки всем противоречиям, 24 февраля 1993-го. Последние десять лет он добивался признания языка во всем мире. Он победил, он достоин, и всякое такое. Поддержите разнообразие. Давайте раскачаем Землю хоть немножко.
  3. Бесплатно.

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

    Думаете, мы станем продавать вам пылесосы, или горящие путевки, или поддельных Моне? Думаете, какая-нибудь полуторачасовая презентация, после которой владелец компании выходит и заставляет вас заключить эту сделку?

    Неа. Бесплатно.

С этим, начнем. Можете хватать маркер, и подчеркивать каждое пленительное слово, начиная с этого предложения. Думаю, мне хватит лака для волос и легких денег, чтобы продержаться до последней страницы.

Wednesday, May 2nd, 2007
6:23 pm
[zverok_kha]
2.2. История одной собаки

Оригинал: 2.2. The Dog Story
Начальный перевод выполнен Майком Клишиным где-то здесь

Вот вам немножко трогательности для начала.

Как-то раз я шел по оживленной улице, из тех, на которых куча автомобильных салонов (кстати, незадолго до того моя свадьба обломалась), и встретил ничейного пса. Лохматого такого черного пса с зеленовато-красными глазами. Я сам был какой-то ничейный, поэтому взял и отвязал связку воздушных шариков с продававшейся рядом тачки и привязал их к песьему ошейнику. И тогда я решил, пусть он будет моим псом. Назвал его Бигало.

Мы с Бигало порешили купить ему жратвы, а потом забраться в мою берлогу, где можно было бы сидеть в кресле и слушать "Gorky's Zygotic Mynci" (уэльская музыкальная группа. - прим.перев.). И надо было купить еще одно кресло для Бигало.

Но Бигало нифига не признал во мне хозяина. Через пять минут тупая собака свернула не туда, куда я, и больше я его не видел. Так он стал дважды потерянной собакой. Больше не нужно было покупать собачью жратву и дополнительное кресло. У меня была собака всего 5 минут.

Глупая неверная собака. Я сидел на скамейке и бросал шишки в трех бронзовых овец, переходящих мост. А потом рыдал несколько часов. Слезы просто ручьем лились. Ну вот такая трогательная история для начала.

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

Прошло не так много времени, и я нашел своего собственного Бигало. Я распечатал несколько статей о Ruby. Я нашел их в Сети, почитал в поезде пять минут и забил. Не впечатляет.

Сидел и смотрел в окно, за которым граффити и стальные поверхности перемешивались словно в огромном миксере. "Мир слишком большой для маленького языка. - подумал я. - У малыша просто никаких шансов. Ни ног, чтобы стоять. Ни рук, чтобы грести."

Ну, а я-то, собственно, кем был? Одинокий маленький чувачок в ненадежном маленьком поезде (у меня еще и не все молочные зубы выпали), один из многих миллиардов людей на голубом камешке. Чем я круче Ruby? Кто знает, может сегодня же вечером я подавлюсь собственным мобильником и помру. Why помер, Ruby живет.

Надпись на надгробном камне:

Что это у него в трахее? Опа, да это ж Nokia!

Такова жизнь. Так я и уснул в подземке, тревожимый только звуками "Canon" Пачалбелла, которые издавал мой желудок (Canon in D major - наиболее известная композиция Йохана Пачалбелла, 1680, барокко. - прим.перев.).

5:41 pm
[zverok_kha]
2.1. Открывая книгу

Оригинал: 2.1. Opening This Book
Начальный перевод сделан Дмитрием Димандтом здесь

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

Вы наверное воскликнете: "Опа, у меня луковица в книге!" (Даже если вы не особо любите лук, думаю, вы можете оценить сложность поставки овоща внутри книги, заявленной как учебник программирования.)

И тут вы задаете себе вопрос: "Постойте. Я думал, это книга про Ruby, новый невероятный язык программирования из Японии. И хотя я вполне способен оценить сложность поставки овоща внутри книги, заявленной как учебник программирования... Почему луковица? И что я должен с ней сделать?"

Нет. Даже не пытайтесь понять. Вам ничего не придется делать с луковицей. Отложите луковицу в сторону и позвольте ей сделать что-нибудь с вами.

Буду откровенен. Я хочу, чтобы вы плакали. Рыдали. Тихо стонали. Эта книга - трогательный путеводитель по Ruby. Это значит, что код будет прекрасен до слез. Это значит, что вы услышите чарующие истории и шокирующую правду, и на следующее утро проснетесь с книгой в обнимку. Весь день будете прижимать ее к груди. Может быть, даже соорудите для "Трогательного путеводителя по Ruby" поясной чехол, чтобы никогда не расставаться со своим нежным другом.

Вы должны хоть раз заплакать. Ну или хотя бы пошмыгать носом. Если же нет -  луковица вам поможет.

5:25 pm
[zverok_kha]
2. Конничива, Ruby!
Оригинал: 2. Kon’nichi wa, Ruby



(подразделы будут в следующих записях)
5:19 pm
[zverok_kha]
1. Об этой книге
Оригинал: 1. About this Book



(1. - эльф и его ручная говядина!
2. - жираф, окруженный волшеееебниками!
3. - микроскопические канарейки!
- этот путеводитель - настоящий учебник жизни!)


(1. прямой эфир в 2012-м:
- благодаря "Трогательному Путеводителю" Why'а...
2. даже младенцы могут выучить Ruby! вот как это просто!
3. - class << self !)


(1. - я глубоко тронут этой странной книгой, "Трогательным путеводителем по Ruby" Why'а.
2. серьезно. внутри так хорошо.
3. словно все полости моего тела заполнены авокадо и майонезом.)


(1. - я маленький.
2. я попадаю в приключения!
3. все, теперь можете начинать читать!)
Friday, January 1st, 2010
4:58 pm
[zverok_kha]
Необходимые пояснения
1. Некоторая часть публикуемых материалов является переработкой вот этой попытки перевода.
2. Перевод производится методом "начать с начала и продолжать, пока не дойдешь до конца; потом остановиться".
3. Регулярность и гранулярность выкладывания переведенных кусков не гарантируется.
4. Комиксы переводятся без использования Фотошопа, просто текстом ниже самого комикса; если кто-либо имеет желание взять на себя труд редактирования картинок - welcome.
5. Критика приветствуется; предложения принять участие - только на условиях создания подстрочника (т.е. текстов, которых я потом буду долго и злобно редактировать).
Why's (Poignant) Guide to Ruby   About LiveJournal.com