Ответы пользователя по тегу Ruby
  • Как добавить динамический метод к классу через модуль?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    require "active_support/concern"
    
    module HasAbilities
      extend ActiveSupport::Concern
    
      class_methods do
        def has_ablilities(*args, **options)
          args.each do |name|
            define_method(:"#{name}") do |value|
              puts "i can make action: #{name}"
            end
          end
        end    
      end
    end
    Ответ написан
    Комментировать
  • Как правильно использовать http persistent connection в ruby?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    Попробуйте сначала организовать коннекшн пул, а потом в циклах брать свободный. Ну и thread быстрее чем форк. Смысл форка только если в внутри много трендов, а у вас максимум 10.
    Ответ написан
  • Есть ли смысл учить ruby в 2020 году?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    Учить нужно то, что нравится. Разработка это творческий процесс. Если заниматься тем, что не нравится, то и спецом не станешь, и в итоге хорошую зп не получишь. Руби это рельсы. Посмотрите курс по рельсам, попробуйте повторить. И так же с питоном джанго и пхп лаварелом. Что понравится больше, то и Ваше.

    Кроме того, в итоге то, с чего начать, не особо важно. В разработке с 70х годов ничего концептуально нового не придумали. Разницы на примере какой технологии учить концепции нет. Главное чтобы это нравилос и было желание по 12 часов в день в это погружаться, понимать почему так а не этак решаются конккретные задачи.
    При высоком уровне сеньорити даже с ООП парадигмы перейти на функциональную дело пары месяцев. Когда опытный разработчик пользуется новым инструментом, языком или библиотеккой, это нельзя считать обучением. Ты читаешь описание библиотеки или инструмента, смотришь какие проблемы решаются по новому и уже знаешь, что там будет. Просто смотришь соглашения инструмента и все.

    Есть еще один большой плюс руби. При знании английского на b1 открываются западные вакансии с ЗП х2-3 от российских. А руби конторы в основном это работа напрямую с западным закакзчиком и прямым общением. Я так за 7 лет общения по 1-2 часа в неделю прокачал английсккий со шкокльного a2 до b1. Никакие правила дополнительно не учил, на курсы не ходил.
    Ответ написан
    Комментировать
  • Есть ли приимущества у Ruby перед PHP?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    Работа должна приносить удовольствие. Почему бы не потратить часов 40 чтобы понять нравится оно вам больше чем php или нет? А что там умеет в итоге язык это дело десятое.

    Если говорить об отличиях, то у руби очень сложная внутренняя структура, которая позволяет писать невероятно выразительный код. Но, это все медленно работает и жрет кучу памяти. Только последние версии языка начали понемногу сокращать разрыв с тем же php или питоном
    Ответ написан
    Комментировать
  • Зарплата от количества опыта?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    А что мешает удаленно пособеседоваться чтобы определить свой уровень и стоимость? Примерные требования Вилка 60-120. Но на 120 нужно не только квалификация, но и софт скилы. Умение отвечать за задачу, работать в команде, общения с продукт овнером. Знать всякие скрамы и аджайлы.

    При устройстве в аутсорс компанию можно просить сверху 100-300 баксов за хороший уровень английского.

    Ну и все решает подача себя на собеседовании и требования каждой конретной компании. У меня есть 300 вопросов чтобы определить уровень кандидата согласно 8 возможным позициям, но такое не у всех. Попадаете в опыт интервьювера, производите хорошее впечатление и получаете оффер получше
    Ответ написан
    Комментировать
  • Можно в Ruby on Rails создать Model с источником данных в виде внешнего RESTful API?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    Есть специальный гем https://github.com/remiprev/her

    Встречал пару лет назад в проекте, довольно удобно. Но, там ребята заморочились и дописали немного кода, чтобы вообще не было разницы где у тебя данные и можно было стандартными конструкциями использовать и обычные модели и эти. Все отношения и много чего еще работало
    Ответ написан
    Комментировать
  • Self или @ для атрибута класса?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    Ваш простой вопрос не так прост, как кажется.

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

    В данном случае нет идеального решения, потому что в руби нельзя объявить приватный setter.

    Т.е. в следующем коде

    class Log_parse
      attr_accessor :dir
    
      def initialize
        self.dir = "" 
      end
    end


    руби не поймет, что вы из одного и того же класса вызываете сеттер. self считается объектом, а вызов через точку - вызовом публичного метода. Идеальный вариантом был бы случай, когда вы отдельно определяете отдельно публичные аксессоры, отдельно приватные и пользуетесь только аксессорами, но в руби так сделать нельзя (без костылей по крайней мере).

    В итоге совет следующий:
    В остальных методах класса использовать только аксессоры - публичные или приватные.
    В конструкторе уже возможны варианты. Если вы считаете, что объявление публичных аксессоров никак не навредит классу, лучше использовать аксессоры. Иначе - инстанс переменные.
    Ответ написан
  • Почему у меня есть доступ к атрибуту метода экзепляра?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    attr_reader :name не про задание прав чтения. Это просто короткая запись для объявления метода, все что он делает, это сам объявляет метод для чтения, аналог

    def name
      @name
    end


    attr_writer :name объявляет

    def name=(value)
      @name = value
    end


    attr_accessor :name объявит сразу оба метода. move у Вас это уже метод, который работает с внутренними данными, он инкапсулирует их. Поэтому он объявлен как метод.

    На самом деле в руби все методы, в руби извне нельзя прочитать атрибут без объявленых методов. move же похож на просто метод, привычный из других ЯП. Его задача скрыть внутреннюю амплементацию класса и предоставить интерфес для работы с ним
    Ответ написан
    2 комментария
  • Как юзать python скрипт из-под ruby?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    У руби есть много разных методов для запуска внешних скриптов, подробно описано тут - https://stackoverflow.com/questions/7212573/when-t...

    Но, нужно понимать, что запуск скрипта блокирует весь руби процесс, поэтому если скрипт работает несколько минут, то все остальные потоки будут заблокированы. Т.е Sidekiq и Puma работать не будут.

    Будет работать Resque но он жрет куча памяти.

    Возможно Вам нужно отказаться от руби в проекте, если он на начальном этапе. Или обернуть питоновский скрипт в веб сервер, например flask и дергать его по http
    Ответ написан
    Комментировать
  • Как перехватить исключение в блоке инициализации?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    он там не работает, потому что руби не заходит внутрь. У вас не совпадает количество аргументов. Можно сделать что-то типа такого

    def initialize(*args)
      if args.size == 3
         wagons, train_type, name = args
         #main logic here
      else
         #handle error
      end
    Ответ написан
    Комментировать
  • Возможно ли изучение Рельсов, без знаний Ruby?

    c3gdlk
    @c3gdlk
    Ментор в http://rubyboost.ru/
    В компании в которой я работаю еще 17 рельсовиков и все начинали именно с рейлс. Руби прекрасный язык, но в нем нет ничего сверхъестественного. Достаточно знать основы ООП и иметь неплохой опыт в любом другом интерпретируемом языке.

    Мой более подробный ответ к такому же вопросу Что нужно знать прежде чем учить ROR?
    Ответ написан
    Комментировать