Рубрика «ruby» - 35

Здравствуйте, я — разработчик программного обеспечения на Ruby / Rails и я комментирую свой (а с недавних пор ещё и чужой) код. Голос из зала, вероятно, крикнул бы «Привет, разработчик!»

Много лет назад мне казалось очевидным устоявшееся мнение профессионалов и гуру разработки, которое обычно выражается примерно так: «Если код требует комментария — это плохой код, его нужно переписать/отрефакторить/упростить/уменьшить». Т.е. привести его к виду, комментариев и пояснений не требующему. В целом, этот подход достаточно универсален и работает во многих случаях. Многие мои знакомые веб-разработчики никогда не комментируют свой код и считают это вполне нормальным явлением, даже если работают в команде. Вероятно, сказывается миф о простоте Ruby, такой простоте, которая делает код понятным даже постороннему. Однако, мой личный опыт и некоторые эпизоды командной разработки веб-приложений убедили меня в том, что существуют ситуации и причины уделять комментариям и документированию кода больше внимания и времени, чем обычно уделяет разработчик.
Читать полностью »

Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске:

image

Читать полностью »

Предупреждение: для аксакалов статья вряд ли будет полезна. А то и вовсе окажется вредна. Системным администраторам, использующим язык ruby для написания сценариев — строго рекомендуется.

Для парсинга аргументов коммандной строки я обычно использовал библиотеку GetOpt. Это достаточно неудобная библиотека и я был счастлив случайно наткнувшись на Docopt.

Начало.

Начать использовать ее достаточно просто: для того чтобы научить ваш скрипт парсить строку вывода сначала надо подключить библиотеку:

require 'docopt'

И после этого можно попробовать инициализировать переменную и присвоить ей соответствующее значение.

doc =<<EOF
Usage:
 #{__FILE__} add <opt1> <opt2> –input=<something> –verbose

<p>Option:
 -h –help           Показать это сообщение
 –cat               Дополнительная опция
 –input=<something> Входящий файл [default: my.txt]
EOF

Читать полностью »

— Ты все еще не бросил свое Ruby? – взволновано спросила Татьяна. – Ты же знаешь, что сейчас на программистов облавы чуть ли не каждый день? Сергей, ты действительно хочешь, чтобы тебя отправили в ЗАТО?

Сергей понуро молчал.

После Большой свободной революции и полной победы антикопирастов, ЗАТО – закрытые абстракто-творческие общества появились по всей стране.

image

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

Несмотря на предсказанный рост производительности, качество художественных произведений снизилось, поставив под угрозу интересы главной фигуры любого творческого процесса – ПОТРЕБИТЕЛЯ. После длительных дебатов в парламенте, правительство было вынуждено пойти на крайние меры – была введена система «мотивирующих воздействий». Если созданное произведение не набирало норму лайков – всей бригаде урезали паек, а систематический саботаж творческой выработки мог привести к переводу в лесорубы.

Читать полностью »

Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске:

Ruby

Читать полностью »

Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать полностью »

Правила для разработчиков от Sandi MetzВ январе этого года, Sandi Metz представила свои правила для разработчиков в эфире подкаста Ruby Rogues. Примерно в это же время, я и моя команда начали новый проект. Эта статья описывает тот опыт, что мы получили, применяя эти правила к своему новому проекту.

Правила

  1. Классы не могут содержать больше чем 100 строк кода.
  2. Методы не могут быть длиннее чем 5 строк кода.
  3. Нельзя передавать больше 4 параметров в метод. Значения хэша также считаются параметрами.
  4. Контроллеры могут инстанциировать только один объект. Следовательно, представление может знать только об одной инстанс переменной и должно только слать сообщения этому объекту (@object.collaborator.value не допустим).

Читать полностью »

Espresso Framework обзавёлся ещё одним полезным инструментом по имени Frontline.

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

По сути это фронтенд для Enginery. То есть можно делать всё что делает Enginery но в «визуальном режиме».

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

Подробности под катом.

Читать полностью »

в 16:14, , рубрики: activerecord, ruby, ruby on rails, метки: , ,

Сегодня я поделюсь своим набором не всегда очевидных функций и возможностей Active Record, с которыми я столкнулся в процессе разработки Ruby on Rails приложений или нашел в чужих блогах.

Читать полностью »

Многие Руби-разработчики игнорируют потоки (threads), хотя это очень полезный инструмент. В данной статье мы рассмотрим создание IO потоков в Руби и покажем как Руби справляется с потоками в которых происходит много вычислительных операций. Попробуем применить альтернативные имплементации Руби, а так же узнаем, каких результатов можно добиться при помощи модуля DRb. В конце статьи посмотрим, как эти принципы используются в различных серверах для аппликаций на Ruby on Rails.

IO потоки в Руби

Рассмотрим небольшой пример:

def call_remote(host)
  sleep 3 # симулируем долгий запрос к серверу
end

Если нам надо обратитьcя к двум серверам, например, чтобы очистить кэш, и мы дважды последовательно вызовем эту функцию:

call_remote 'host1/clear_caches'
call_remote 'host2/clear_caches'

то наша программа будет работать 6 секунд.

Мы можем ускорить исполнение программы, если будем использовать потоки, например, так:

threads = []

['host1', 'host2'].each do |host|
  threads << Thread.new do
    call_remote "#{host}/clear_caches"
  end
end

threads.each(&:join)

Мы создали два потока, в каждом потоке обратились к своему серверу и командами #join сказали, что главной программе (главному потоку) надо подождать их завершения. Теперь наша программа успешно выполняется в два раза быстрее, за 3 секунды.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js