Сохранен 535
https://2ch.hk/pr/res/818850.html
Прошлые домены больше не функционируют, используйте адрес ARHIVACH.HK.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Ruby Thread

 автоперекат !!fuyn/Mm0/k 13/08/16 Суб 08:27:42 #1 №818850 
14710660631090.png
14710660631101.png
14710660631122.png
Предыдущий: http://arhivach.org/thread/186503/

Принимаются изменения в шапку треда в виде пулл-реквестов:
https://github.com/meoweg/2ch-pr-ruby

Как показывать код:
Быстро - https://pastebin.com
С исполнением - https://ideone.com
Требуется аккаунт GitHub - https://gist.github.com

Конференция
https://2chpr.slack.com/messages/ruby/
Получить приглашение: https://invite-me-to-2chpr.herokuapp.com/

FAQ:

1. C чего мне начать, чтобы стать рубистом?
Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby. А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.

Следующий уровень, продвинутые книги по руби:
Confident Ruby by Avdi Grimm
Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition
Ruby Under a Microscope для любителей залезть под капот.
Документация по стандартным библиотекам http://ruby-doc.org/
Можно пройти руби онлайн - http://tryruby.org/levels/1/challenges/0
И ещё раз онлайн: http://www.codewars.com/?language=ruby
Не веришь в свои силы? Прочитал уже книжек много и силы свои хочешь познать, сделай - http://rubykoans.com
И вот еще https://rubymonk.com/ - Матц одобряет.

2. Какой gem посмотреть, чтобы понять, как писать код?
Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
А еще можешь полистать на гитхабе гемы с нарастающей популярностю.
https://github.com/trending?l=ruby
Там еще нет тысяч строк, и тебе будет легче понять.

3. Есть ли GUI для руби?
Да. Есть обвязки к Qt, GTK, wxWidgets, Shoes, fxruby (одобренный).

4. Можно ли писать на руби мобильное ПО?
Да. Для iOS есть RubyMotion терпимого качества, для Android - лагающий и падающий, но всеми силами развивающийся ruboto. Для WinPhone до сих пор ничего не завезли.

5. Как установить разные версии рубей?
Легко и просто: https://github.com/sstephenson/rbenv
И это тоже, легко и просто: https://rvm.io

6. Что почитать по рельсам?
http://guides.rubyonrails.org
http://ruby.railstutorial.org
API: http://api.rubyonrails.org
Прекрасные туториалы в стиле for dummies - http://www.theodinproject.com/ruby-on-rails , а вот тут все тоже, но на русском http://codenamecrud.ru/
Классический вводный туториал, где делается с нуля клон твиттера, для новичков в rails самое то - https://www.railstutorial.org/book
Для дотошных читателей есть The Rails 4 Way.

7. Хорошие практики по руби и рельсам?
Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes.
Почитайте еще Grimm A. - Objects on Rails
Еще продвинутое чтиво - http://tutorials.jumpstartlab.com/

8. Ruby/Rails блоги, рассылки и твитторы
IRC каналы на FreeNode: #ruby, #ruby-core, #RubyOnRails, #rails (не очень активен).
Твитторы @rails, @dhh, @yukihiro_matz, @wycats, @tenderlove
Рассылки ruby-core, rails-core, rails-talk
Подкасты:
- http://rubyrogues.com
- http://ruby5.envylabs.com
Скринкасты:
- http://railscasts.com
- https://peepcode.com
- https://www.destroyallsoftware.com
- http://railsforzombies.com
Блоги:
- rubyflow.com - каждый день новости, новые библиотеки, обновления, все дела.
- rubysource.com - читаем интервью, хорошие практики, и безумные сравнения упоротого дибила-индуса на самом деле их пропускаем
- rubyinside.com - новости, туториалы.
- rubyweekly.com
- http://37signals.com/svn
- http://yehudakatz.com
- http://afreshcup.com


9. Я не могу в английский, что делать, анон?
Идти учить английский, без него тут делать нечего.

10. Есть ли у руби русское коммьюнити?
Нет. Вернее есть, но оно протухло и там полно людей у которых чсв высоко.
Яркий пример - [email protected]
А еще есть русская слак конфа - https://russiandevs.slack.com она общая, но есть очень активный руби канал.
Так же русская гугл группа, активная - https://groups.google.com/forum/#!forum/ror2ru
Еще вот - https://onrails.club/

11. Какие гемы стоит знать?
capybara, rack, rspec, devise, cancancan, simple_form, solr, sinatra, тысячи их.
Поиск гемов https://www.ruby-toolbox.com

12. Зачем нужны тесты и как их писать?
http://rusrails.ru/a-guide-to-testing-rails-applications
http://habrahabr.ru/post/163597/
Вместо этого можно прочитать классную книгу Everyday Rails Testing

13. Где можно задать глупые и не очень вопросы?
- здесь
- stackoverflow.com
- тематические slack-конфы
- а вообще, гугли, с вероятностью в 90% ответ на твой вопрос уже висит на stackoverflow.

14. Как фокнуть\сделать фичу\исправить баг, сложно ли это?
Нет, не сложно. На rubyflow появляется много новостей с реализацией новой библиотеки, вы можете сделать тесты, фичу для него, старые либы также обрастают багами, улучшайте их! пишите код.

15. В чём писать код?
Atom, Brackets, Sublime Text, TextMate, Vim, GNU Emacs. Для особо упоротых энтерпрайз-макак есть rubymine, плагины к эклипс и нетбинс.

16. Можно ли писать на руби с под windows?
Можно, но придется обрасти костылями в виде виртуальной машины, придется сходу разбираться с Vagrant и многим другим. Чем дальше ты продвигаешься, тем ближе становится ясно, что пора перекатываться на linux/mac

17. Руби язык одного фреймворка?
Есть еще Sinatra, Hanami (ранее Lotus), Volt, Grape, отличные штуки для DevOps - Chef, Puppet и годные генераторы для бложиков - Jekyll, Middleman, всё это активно используется в продакшене

18. Можно ли делать игры на Ruby?
Можно, но не нужно. Гем Gosu.

19. Ютуб каналы
Youtube driven development...
Вот тебе пара каналов, но никому не говори что учишься по видео.
https://www.youtube.com/channel/UCIQmhQxCvLHRr3Beku77tww/videos
https://www.youtube.com/channel/UCfWZwsP8trUy5uHJg8gcGIQ
https://www.youtube.com/channel/UCSI77lJlzlCFPLdV1RSAoYQ
https://www.youtube.com/channel/UCPIyDzf1vwWc8EQJGUX-vYw - тут на ру$$ком даже.

20. Как и где искать работу?
Легко и просто - http://rubyjobs.ru/
Не так просто - https://upwork.com/
Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.

TODO лист для ньюфагов:
И так, ты поставил руби, уже сгенерировал свой первый проект rails new pidaras
Начни уже с платинового пути, блог >> клон твиттера >> своя имейджборда >> свой гем >> дальше сам придумаешь.
Рекомендации:
1. Для блога, создать роли, Админ, Пользователь (можно использовать паттерн form object). Прикрутить лайки, комментарии.
2. По твиттеру, следуя гайду Хартла, пиши все то что он предлагает в качестве доп. заданий, например оповещение по нику (@eblan: привет)
3. По имиджборде: воссоздать по возможности полный функционал, в этом случае придется ознакомится с javascript/jquery/coffeescript, но тебе так или иначе придется. Еще хорошей фичей будет использование background job и крон тасков (sidekiq, whenever), чтобы заполнять свою борду тредами и постами с другой борды, можно использовать api двача, чтобы вытягивать треды и посты - https://github.com/ID25/api_2ch
4. Не стесняемся постить свои репозитории, наши эксперты с радостью отревьювят вас.

После этого тебе будут нужны паттерны, без них твой код превратится в говно. Один из часто используемых - Service Object.
https://netguru.co/blog/service-objects-in-rails-will-help - о сервисах
Еще паттернов - https://robots.thoughtbot.com/back-to-basics-solid

Но самый читаемый код, как и следовало ожидать, даёт функциональное программирование. Начни отсюда:
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-i/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-ii/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-iii/
http://www.sitepoint.com/functional-programming-pure-functions/
http://www.sitepoint.com/functional-programming-ruby-value-objects/
Только не переборщи. Руби - не функциональный язык, и иногда такой код может работать медленней.

Прочитал? Теперь рефактори то, что уже написал. И не забывай покрывать тестами.

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

Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой.
Ну, а мы открываем очередной Ruby Thread.
Аноним 13/08/16 Суб 12:01:52 #2 №818902 
>>818729
> Можешь. Надо или прописать домены в /etc/hosts, либо воспользоваться гемами Pow (вроде только для Mas OS) или Prax. Сам ими не пользовался, мне /etc/hosts хватает. На винде расположение этого файла гугли сам, если ты вдруг на винде.



Типа

127.0.1.1 example.com
127.0.1.1:1080 mailcatcher.example.com

?

Первая строка работает, вторая нет
Аноним 13/08/16 Суб 15:43:37 #3 №819020 
Анон, нужна помощь, не справляюсь с джойнами.
Есть модели: User, Company, Membership. Связь has_many :through. Плюс установлен гем rolify, и есть соответственно таблицы roles с полями name, resource_id, resource_type, и таблица users_roles с полями role_id и user_id.
У юзера устанавливается роль не глобально, а на конкретную компанию.
Задача - узнать, есть ли среди компаний юзера хотя бы одна, в которой второй юзер - админ.
Без джойнов - user.companies.any? { |c| user2.is_admin_of?(c) }, само собой не эффективно...
Аноним 13/08/16 Суб 16:25:19 #4 №819046 
>>819020
В plain SQL ебашь: роли, где юзер такой-то + еще джойн ролей где компания из первой таблицы и роль админ limit 1.
Аноним 13/08/16 Суб 16:48:04 #5 №819063 
>>819046
Мой мозг отказывается сразивать джойн 4 таблиц =/
Предыдцщий Аноним 13/08/16 Суб 22:09:35 #6 №819296 
https://2ch.hk/pr/res/794342.html
http://arhivach.org/thread/186503/
Аноним 13/08/16 Суб 22:11:26 #7 №819301 
14711154871070.jpg
>>819063
Держи.
Аноним 13/08/16 Суб 22:13:26 #8 №819303 
>>819063
Аа, я не так понял, позже напишу.
Аноним 14/08/16 Вск 00:37:37 #9 №819379 
>>819296
В прошлом было что-то интересно? А то я пропустил.
Аноним 14/08/16 Вск 03:13:48 #10 №819422 
>>818902
Порт убери. а потом в браузере добавляй
Аноним 14/08/16 Вск 07:22:55 #11 №819439 
Угадайте, по 7 строчкам кода какую книгу начал читать:

> https://ideone.com/eLPlkH (это тонкий намек для ОП)
Аноним 14/08/16 Вск 15:32:10 #12 №819670 
>>819063
>>819303
>>819303
Итак, тебе нужно:
SELECT COUNT(*) FROM roles r1
LEFT JOIN users_roles ur1 ON ur1.role_id = r1.id AND ur1.user_id = <user2_id>
LEFT JOIN roles r2 ON r2.resource_id = r1.resource_id AND r2.resource_type = 'Company'
LEFT JOIN users_roles ur2 ON ur2.role_id = r2.id AND ur2.user_id = <user1_id>
WHERE r1.name = 'admin' AND r1.resource_type = 'Company'
LIMIT 1

Подразумевая, что user1 - это твой исходный юзер, относительно которого идёт поиск, а user2 - один из предполагаемых админов в одной из его компаний. Вроде ничо не напутал, но сам не проверял.
Аноним 14/08/16 Вск 15:42:34 #13 №819683 
>>819670
Мощно, похоже на правду, в понедельник проверю. Единственный ньюанс - этот запрос подразумевает, что у всех юзеров есть какая-то роль в компании. В моем случае это так, но это вообще говоря не обязательное условие должно быть.
Аноним 14/08/16 Вск 18:51:42 #14 №819831 
>>819422
не пойдет, мне нужно получать доступ по 80 порту.
Аноним 14/08/16 Вск 20:30:02 #15 №819899 
>>819831
всмысле? если ты не укажишь айпишник ничего страшного не случиться. и доступ к 80 у тебя останиться. попробуй
Аноним 14/08/16 Вск 20:48:04 #16 №819914 
>>819899
Ты не врубаешь, мне нужно
mailcatcher.example.com -> example.com:1080
В 1 случае никаких портов не должно быть, эта ссылка для заказчика, и ему не нраицо.
Аноним 14/08/16 Вск 20:52:19 #17 №819916 
Сап рубаны. Есть модели Post и Category у них habtm но у таблицы CategoriesPosts нет модели. Как во вьюхе при создании поста можно было создать несколько записей в CategoriesPosts с создаваемым постом. Гугление не помогло, вот и пришел к вам.
Аноним 14/08/16 Вск 20:53:14 #18 №819917 
>>819916
запятую пропустил
быстрофикс
Аноним 14/08/16 Вск 21:02:03 #19 №819925 
>>819916
ты же как-то передаешь в контроллер айди категории, через вложенность роутов или скрытым полем в форме... Просто в экшене контроллера создавай объект из коллекции соответствующей категотории : Category.find(params[:category_id]).posts.new ...
Аноним 14/08/16 Вск 21:36:22 #20 №819953 
>>819925
Нет, не передаю. Мне нужна возможность добавлять много категорий при создании поста.
Аноним 14/08/16 Вск 22:13:47 #21 №819986 
>>819914
На сколько я помню ты в хостах ты в любом случае не можешь указать порт. значит пиши в хостах тупо домен как я и сказал. потом поднимай nginx и настраевай в режим реверс прокси с 80 на 1080
Аноним 14/08/16 Вск 22:16:52 #22 №819990 
>>819986
чувак, я же как раз запостил reverse proxy в первом посте, ниработает(
Аноним 14/08/16 Вск 22:38:01 #23 №820000 
>>819990
127.0.1.1 example.com
127.0.1.1 mailcatcher.example.com

такой у тебя должен получиться хостс. Теперь у тебя mailcatcher.example.com указывает на 127.0.0.1 80 . проверяешь все ли работает и можешь ли ты за аксесить это. потом пробуешь реверс прокси. так ты хотябы поймешь что имено неработает. вангую что ты либо писал порт в хосты либо мисс конфиг
Аноним OP !!fuyn/Mm0/k 15/08/16 Пнд 18:18:37 #24 №820514 
>>819439
>Угадайте, по 7 строчкам кода какую книгу начал читать
То ли Pragmatic Programmers Guide, то ли Eloquent Ruby. В какой-то из них почти в начале было это
>это тонкий намек для ОП
Что надо менять шапку, потому что новичкам такое не стоит знать? У меня нет времени думать над шапкой. Приму пулл реквесты:
https://github.com/meoweg/2ch-pr-ruby
Аноним OP !!fuyn/Mm0/k 15/08/16 Пнд 18:20:43 #25 №820517 
>>819916
>habtm
>нет модели
Нынче не принято так делать.
railstutorial Аноним 16/08/16 Втр 06:31:56 #26 №820809 
Что-то я очень медленно продвигаюсь по railstutorial'у. Как слоупок. Для того чтобы осилить главу уходит пару дней. А иногда больше. Или например нужно перерыв сделать между, т.к. мозг всячески противится. Это нормально? В данный момент добрался до 9-ой главы. Все вроде ясно и понятно в плане реализации, разобрался как что работает, но запомнить все фичи не удается. Вряд ли я смогу повторить это всё с нуля не заглядывая в туториал. А ещё тестами сильно нагружено. Тут тебе и rspec и capybara и cucumber. Ну охуеть вообще. Дайте советов мудрых или просто поддержите...
Аноним 16/08/16 Втр 15:16:31 #27 №821036 
>>820809
>cucumber
нинужна
>Вряд ли я смогу повторить это всё с нуля не заглядывая в туториал
это норма, напиши свой интернет-магазин, бложек и борду, все придет с опытом
Аноним 16/08/16 Втр 23:26:21 #28 №821397 
14713791815760.jpg
Привет.
Аноним 17/08/16 Срд 03:56:54 #29 №821475 
>>821036
А capybara?
Аноним 17/08/16 Срд 05:57:09 #30 №821484 
>>821397
Где пропадал?
Аноним 17/08/16 Срд 16:42:36 #31 №821783 
дайте какую-нибудь интересную задачку, а то чето скучно
Аноним 17/08/16 Срд 17:22:27 #32 №821825 
>>821783
Задача: написать модель, с рекурсивной полиморфной связью has_many :through
Один родитель может иметь много детей принадлежащих к той же или другой модели, каждый ребенок может иметь много родителей, принадлежащих к той же или другой модели.
Аноним 17/08/16 Срд 19:32:10 #33 №821909 
Привет всем, есть кто живой?
Можете скомпилировать бота из исходников?
https://github.com/top4ek/shizoid
Аноним 17/08/16 Срд 19:34:54 #34 №821913 
>>821825
говно без задач
sageАноним 17/08/16 Срд 21:30:21 #35 №821986 
>>821909
Я вообще не эксперт, но как его скомпилировать если руби интерпретируемый язык?
Аноним 17/08/16 Срд 21:31:17 #36 №821987 
>>821986
Сага опять не отклеивается
Аноним OP 18/08/16 Чтв 03:18:47 #37 №822155 
>>821909
Я мельком просмотрел, вроде бы вредоносного кода там нет. Но что там компилировать? Там нет расширений на Си. Просто инициализируй гем в этой директории (команда bundle gem).
Аноним 18/08/16 Чтв 07:51:44 #38 №822181 
10-ая глава у Хартла просто дичайшая дичь. Он походу хуярил сразу туториал на этом месте, без написания кода. Но не в этом суть, а в том что листинги в обратном порядке переведены. Пиздец просто. Ну и тестами разбавлено, до полного пиздеца.
Аноним 18/08/16 Чтв 08:20:23 #39 №822189 
>>822181
Неее, надо отдохнуть пару дней.
Вопрос Аноним 18/08/16 Чтв 08:39:12 #40 №822193 
Что чаще всего кодят на Rails?
- Веб-порталы.
- Блоговые платформы.
- Социальные сервисы.
- Интернет-мазазины.
- Добавить свой вариант.
Аноним 18/08/16 Чтв 10:57:17 #41 №822245 
>>822193
Примитивные круды.
Хартл ебаный Аноним 18/08/16 Чтв 11:03:44 #42 №822248 
Ну и где тут primary key, а где foreign key??? Почему их не расставили, чтобы сразу было понятно. Кто так моделирует данные вообще?
Аноним 18/08/16 Чтв 11:09:02 #43 №822251 
14715077420680.png
>>822248
Пик отклеился. Я так понимаю там реализовывается многие ко многим, но как-то все запутано и хуево объяснено что создается впечатление, что это какой-то ебаный костыль Хартл наговнокодил.
Аноним OP 18/08/16 Чтв 14:09:21 #44 №822383 
>>822248
>primary key
Обычно primary key, отличный от "id" используется только если существует БД, не соответствующая соглашениям рельс, а надо с ней работать
>foreign key
Используй на все belongs_to. Вот прям вообще без исключений. И делай поля NOT NULL, если есть соответствующая валидация в самих рельсах.
Аноним OP 18/08/16 Чтв 14:11:31 #45 №822385 
>>822251
Это не костыль, а has_many through. Many to many, да.
Аноним 18/08/16 Чтв 15:00:38 #46 №822435 
>>822383
>Используй на все belongs_to. Вот прям вообще без исключений. И делай поля NOT NULL, если есть соответствующая валидация в самих рельсах.
Прям таки без исключений? А полиморфные связи? А необязательные связи?
Аноним 18/08/16 Чтв 15:06:11 #47 №822441 
Анон, подскажи. Есть ситуация: связь has_many :through, пусть будет user, company, membership. Нужно настроить каскадное удаление, т.е. company has_many :memberships, dependent: :destroy
Но! Надо чтобы удаление было возможно только с одной стороны: если удаляется юзер, который принадлежит компании, удаление должно отменится. Ну я сначала вставил в модель membership коллбек before_destroy, который отменяет удаление без условий, а у компании поставил dependent: :delete_all, и все работало как надо. Но теперь у модель membership появились новые связи, которые тоже должны быть каскадно удалены, т.е. нужно изменить у компании dependent на :destroy. Тогда встает вопрос, как в модели membership определять, откуда пришло каскадное удаление, со стороны юзера или со стороны компании?
Аноним OP 18/08/16 Чтв 17:21:50 #48 №822572 
>>822435
>А полиморфные связи?
Вот тут надо уточнить. Хотелось бы иметь foreign key на полиморфную связь, но я не уверен, что в моей БД (Postgres) есть такая возможность.
>А необязательные связи?
Foreign key игнорируется, если в поле лежит NULL.
Аноним OP 18/08/16 Чтв 17:25:07 #49 №822574 
>>822441
Я не понял, что тебе нужно, но вот это меня смущает сильно:
>Тогда встает вопрос, как в модели membership определять, откуда пришло каскадное удаление, со стороны юзера или со стороны компании?
Зачем это определять в модели membership? Удаление настраивается на связи has_many, а не belongs_to.
Аноним 18/08/16 Чтв 17:41:40 #50 №822583 
>>822574
Надо разрешать ааскадное удаление, только если оно пришло со стороны компании, а если от юзера - делать откат транзакции
Аноним 18/08/16 Чтв 17:53:53 #51 №822594 
>>822572
Полиморфные ассоциации нарушают правила реляционных БД, поэтому ни в одной БД делать foreign key на полиморфную ассоциацию низзя.
Аноним 18/08/16 Чтв 17:55:18 #52 №822599 
Да, лучше полиморфные ассоциации вообще не юзать, это же хак.
Аноним 18/08/16 Чтв 21:37:17 #53 №822779 
>>822594
>>822599
Некоторые вещи в реляционной модели данных очень извратно реализуются. Впрочем, я полиморфные связи не помню уж когда в последний раз использовал, не так часто они и нужны.
>>822583
Тогда в Company делай
has_many :memberships, dependent: :destroy,
а в User без dependent
Аноним 18/08/16 Чтв 22:04:59 #54 №822796 
>>822779
>Тогда в Company делай has_many :memberships, dependent: :destroy, а в User без dependent
Это не то. Мне нужно, чтобы при удалении юзера membership тоже удалялся, только при соблюдении определенных условий. Т.е., если удаляем компанию - membership удаляется всегда, если удаляем юзера или membership напрямую - при несобллюдении условий транзакция откатывается. И удаление должно быть не напрямую из базы, а с выполнением всех каскадов и коллбеков
Аноним 18/08/16 Чтв 22:11:52 #55 №822798 
>>822796
Как-то так http://pastebin.com/EE00gXst
Как обернуть в транзакцию не знаю.
>И удаление должно быть не напрямую из базы, а с выполнением всех каскадов и коллбеков
Вызов #destroy_all на коллекции это обеспечивает
Аноним 18/08/16 Чтв 22:12:41 #56 №822799 
>>822796
А, before_destroy-callback, кажется, может отменять удаление при несоблюдении условия, если возвращает false
Аноним 18/08/16 Чтв 22:17:34 #57 №822804 DELETED
>>818850 (OP)
рубибогов конфа http://tmxc.ru/228774
Аноним 18/08/16 Чтв 22:28:10 #58 №822812 
>>822804
Забавный челик с днр, охуительные истории.
Аноним 18/08/16 Чтв 22:29:28 #59 №822813 
>>822799
Я так и хочу. Но нужно в этом коллбеке знать, откуда пришло каскадное удаление - от юзера или от компании. Если от компании, то все ок, а если от юзера - проверять условие, и возвращать false
Аноним 18/08/16 Чтв 22:30:40 #60 №822814 
>>822813
Так колбек в модели User.
Аноним 19/08/16 Птн 00:36:32 #61 №822863 
>>822155
Не получается запустить, так как не работает и не ставится гем pg_ext, короче, я крайне сомневаюсь, что это получится заставить работать на виндовс уж точно.

Поставил всё необходимое (включая руби DevKit) и гем собрался. Поставил всё необходимое, включая postgresql
всё необходимое вроде как в PATH - приложение не стартует всё равно (требует расширения pg_ext), но через gem install pg_ext оно не ставится - всё уприрается в этот модуль pg, который отвечает за взаимодействие с postgresql

Интересует вопрос поднятия этого бота под виндой.
Здесь есть те, кто мог бы это сделать или нет?
Аноним 19/08/16 Птн 01:25:44 #62 №822894 
>>822863


Не надоело? Шизик здесь только ты. Ты можешь перевести стрелки, но это ничего не изменит. Ты можешь сказать что мой пост сочится бугуртом, но это тоже ничего не изменит. Потому что все мы знаем, что это есть почерк тупорылого хуесоса-шизика. Ты не можешь в спор, не можешь в аргументы, не можешь в мэдскилзы, не можешь в пасты. Все твое оружие это мелкобуквенные йоба-высеры вроде: ололо у тебя баттхерт, карочи все кто против миня шизики. Ты уныл как Дима Билан в период беременности. Непрошибаемый тупой пидор, который даже не может толком обозначить свою позицию. Чего ты хочешь? Тебе нравится внимание? Нравится когда тебя кормят говном? Шизоид. Тебе никогда не избавиться от этого клейма. Кинул кирпичом в дегенерата.
Аноним OP 19/08/16 Птн 02:46:31 #63 №822904 
>>822863
pg_ext - это не гем. Это функция Postgres для включения расширений различных. Не знаю, как под виндой устанавливается Postgres, возможно, при установке или где-то в конфиге расширения нужно включить.

Далее тебе нужно будет создать конфиги config/database.yml и config.options.yml (на основе аналогичных файлов с расширением .example).

Потом создать пользователя в консоли Postgres
>CREATE ROLE shizoid WITH LOGIN CREATEDB PASSWORD 'shizoid';

Затем выполнить задачи
>rake db:create
>rake db:migrate

И запустить
>ruby app/main.rb

У меня всё заработало.
Аноним OP 19/08/16 Птн 02:54:38 #64 №822906 
14715644787230.png
>>822863
Ошибка не такая, как на скрине? Возможно, ошибка в геме pg. Тут есть на тему того, как исправить:
http://stackoverflow.com/questions/26617779/pg-pg-ext-load-error-in-rails
Объясните мне Аноним 19/08/16 Птн 12:07:29 #65 №823025 
Почему разработка веб-морд и погромирование на mvc-фреймворках интернет-магазинов и прочей веб-хуйни такое унылое и однообразное занятие. Скучно, нудно, однообразно. Просто пиздец. Авторизация, проверка сессий, круды, хэши, валидация, плюс немножко примитивной логики. Яхуею просто.
Накидайте Аноним 19/08/16 Птн 12:33:03 #66 №823041 
14715991835580.jpg
Список книг по Ruby и Rails с пометкой какие из них являются годнотой и какие наиболее актуальны. Дискас, кстати.
Аноним 19/08/16 Птн 14:58:40 #67 №823129 
скиньте гитхаб с двачом
Аноним 19/08/16 Птн 16:59:21 #68 №823228 
>>823041
> Накидайте
Накидал тебе за щеку, ленивый хуисос, принципиально нечитающий шапку.
Аноним 19/08/16 Птн 17:29:12 #69 №823268 DELETED
>>818850 (OP)
у нас появилась руби конфа http://tmxc.ru/436992
Аноним 19/08/16 Птн 21:40:31 #70 №823437 
>>818850 (OP)

Есть гем
https://rubygems.org/gems/ruby-agi
Нерабочий, автор вроде как уже забросил много лет назад
Нашел на гитхабе, вроде исправил,

Как нужно правильно поступать чтобы гем стал в репозитории стал рабочим, никогда такой хуйни не делал
Аноним 19/08/16 Птн 21:41:16 #71 №823438 
>>823437

То есть для самого себя я знаю как сделать его рабочим :3
Аноним OP 19/08/16 Птн 22:37:12 #72 №823467 
>>823437
Ты не можешь поместить гем на rubygems под тем же именем. Можешь написать автору, попросить сделать тебя владельцем гема. А можешь просто поместить под новым названием, скажем, ruby-agi2
Аноним OP 19/08/16 Птн 22:38:55 #73 №823468 
>>823437
Смотри ка, есть уже форк:
https://rubygems.org/gems/agi
Аноним 19/08/16 Птн 22:52:48 #74 №823478 
Какой же у нас топовый ОП (да).
Аноним 19/08/16 Птн 23:48:34 #75 №823523 
>>818850 (OP)
>20. Как и где искать работу?
>Легко и просто - http://rubyjobs.ru/
А че там нигде зп не указана? Специально что-ли?
Я вот не понимаю, зачем игра в прятки, контора размещая вакансию знает сколько она потратит на работника, бюджет уже спланирован, хули прятать-то не пойму.
Не могу найти Аноним 19/08/16 Птн 23:51:27 #76 №823525 
гем который бы давал что-то вроде sql-браузера. Хочу в ActiveAdmin дать возможность делать кастомные запросы и сохранять выгрузку. Вроде очевидный функционал, но не могу найти ничего подобного. С другой стороны он не такой уж тривиальный.
Аноним 19/08/16 Птн 23:56:03 #77 №823531 
>>823523
Вот и не пишут потому, чтоб не заглядывались. Не обидят. Всё на собеседовании обговаривается.
Аноним OP 19/08/16 Птн 23:56:26 #78 №823532 
>>823523
Иногда указывают, но редко. Ты какой уровень? Если миддл, то проси у русских от 90к, у забугорных от 120к
>>823525
ActiveAdmin же и есть что-то вроде sql-браузера.
Можешь сохранять параметры объекта Ransack, я бы так сделал без ActiveAdmin.
Аноним 19/08/16 Птн 23:59:45 #79 №823536 
>>823532
>ActiveAdmin же и есть что-то вроде sql-браузера.
Ну не совсем, ты не пользовался? Это как бы скорее крутой скафолдинг на основе доменной модели.

>Можешь сохранять параметры объекта Ransack, я бы так сделал без ActiveAdmin.
Я хочу выгрузку типа csv-делать. А ты запросы предлагаешь сохранять или я не понял?
Аноним OP 20/08/16 Суб 00:04:23 #80 №823540 
>>823536
>А ты запросы предлагаешь сохранять или я не понял?
Да. Не совсем верно тебя понял.

>Я хочу выгрузку типа csv-делать.
Ну элементарно
respond_to do |format|
format.csv { ... }
end

>Ну не совсем, ты не пользовался? Это как бы скорее крутой скафолдинг на основе доменной модели.
Я читал. Скаффолдинг - это скорее когда код генерируется. Здесь же более высокий уровень абстракции - специальный DSL. И предназначение его, как я понял - описывать требуемые типовые действия для различных данных. В том числе и фильтры, сортировки и прочее. Или я не прав?
Аноним 20/08/16 Суб 00:05:38 #81 №823541 
>>823532
>Иногда указывают, но редко. Ты какой уровень? Если миддл, то проси у русских от 90к, у забугорных от 120к
А как понять свой уровень? У меня опыт 3 года, я делал довольно серьезные вещи, но в конторе не было какого-то разделения и вообще всех этих корпоративных практик. Я реально не знаю сколько я сейчас адекватно стою на рынке.
Аноним 20/08/16 Суб 00:13:23 #82 №823554 
>>823540
>В том числе и фильтры, сортировки и прочее. Или я не прав?
Ну прав, да. Но по моему AA очень похож на продвинутый скафолдинг. Но не суть.

>respond_to do |format| format.csv { ... } end
Сначала нужно дать выполнить рандомный sql-запрос, потом показать табличку (с принудительной пагинацией если вдруг она огромная, желательно с возможностью сортировки), потом результат выгрузить в csv, а результат это не AR-модель, я даже что-то сейчас не знаю, какой там результат получится и можно ли к нему применить format-преспондер (хотя сгененрить csv тут самое простое из всего).
В идеале хотелось бы кусочек PhpMyAdmin.
Аноним OP 20/08/16 Суб 00:13:58 #83 №823556 
>>823541
>Я реально не знаю сколько я сейчас адекватно стою на рынке.
Я и сам не знал неделю назад. Просто сказал, что миддл, хочу 120к. В итоге тестовое выполнил, на работу взяли. Могу условие скинуть, попробуешь свои силы. Дай токс или скайп.
>А как понять свой уровень?
Я тут собирал контакты анона. В итоге сейчас с двоими чуваками пилим проект в портфолио. Можем обсудить.
Аноним OP 20/08/16 Суб 00:24:10 #84 №823563 
>>823554
Ну пройдёмся по пунктам

>Сначала нужно дать выполнить рандомный sql-запрос
У Ransack большие возможности.
>с принудительной пагинацией если вдруг она огромная
Kaminari
>желательно с возможностью сортировки
Ransack
>потом результат выгрузить в csv, а результат это не AR-модель
Это коллекция AR
>можно ли к нему применить format-преспондер
Почитай доки к CVS-респодеру, я не помню

>В идеале хотелось бы кусочек PhpMyAdmin.
Как получить 80% результата за 20% работы я описал. Ransack действительно мощная штука. Если нужно ещё больше возможностей, то я готового решения не знаю. Советую просто написать нужны варианты сложных запросов вручную.

И всё же мне казалось, что ActiveAdmin может почти любой запрос сгенерировать. Хотя бы глянь на этот пример:
http://activeadmin.info/docs/2-resource-customization.html#customizing-resource-retrieval
Она же идеально интегрирована с AR.
Аноним 20/08/16 Суб 00:24:23 #85 №823564 
>>823556
>В итоге тестовое выполнил, на работу взяли. Могу условие скинуть, попробуешь свои силы. Дай токс или скайп.
А расскажи как все проходило. Тебя пригласили, что спрашивали, дали тестовое прямо там выполнять или дома, дали ли интернет? Спрашивали ли про паттерны?
Можешь тестовое выложить или в скайп?
>пилим проект в портфолио. Можем обсудить.
Не секрет про что проект?
Аноним OP 20/08/16 Суб 00:27:57 #86 №823565 
>>823564
>Не секрет про что проект?
https://github.com/artiator
Пока мне сложно его описать как следует. Как захостим минимальную версию, я в треде презентую.

>А расскажи как все проходило. Тебя пригласили, что спрашивали, дали тестовое прямо там выполнять или дома, дали ли интернет? Спрашивали ли про паттерны?
Это удалёнка же. Дали тестовое, потом задавали по нему вопросы, мол, почему сделал так-то.

>Можешь тестовое выложить или в скайп?
Не уверен, что могу. Лучше в скайп.
Аноним 20/08/16 Суб 00:32:55 #87 №823570 
>>823563
Ну AA тащемта и юзает активно ransack https://github.com/activeadmin/activeadmin/blob/master/Gemfile#L20 для всех своих мега-фильтров, сортировок и поиска. Но все это завязано на конкретную модель. Если не ошибаюсь а очень даже могу, то рансак отталкивается от модели - `@q = Person.ransack(params[:q])`. А мне же нужен рандомный запрос. Но вообще нужно подумать.
Аноним OP 20/08/16 Суб 00:38:09 #88 №823574 
>>823570
>А мне же нужен рандомный запрос.
Не стоит рядовому пользователю давать такую возможность. Даже для админки оно избыточно.

Твоё приложение в любом случае должно реализовать твою модель данных. Иначе зачем оно нужно? Суть бекенда - быть посредником между БД и фронтом. К сожалению, на PL/SQL всю бизнес-логику не напишешь (хотя есть такие проекты, Firebase, например).
Аноним 20/08/16 Суб 00:39:44 #89 №823578 
>>823565
Ой, прикольный у вас проект. Не понял про что он, лол, но у вас там в ногу со временем - фронт с вебпаком (реакт?), апишка, микросервисы, докер, докер-компос. А масштабирование возможно? А сервис-дискавери будет (типа когда у вас сервисы на разных нодах в кластере и вы сами не знаете на каких)?
Аноним OP 20/08/16 Суб 00:43:11 #90 №823582 
>>823578
>фронт с вебпаком (реакт?)
Да
>апишка, микросервисы, докер, докер-компос
Да, всё это применяю впервые. Пробовал в рабочее время разобраться с докером, но очень медленно шло. Решил не разбазаривать деньги заказчика, а вернуться к этому, когда разберусь самостоятельно.
>А масштабирование возможно? А сервис-дискавери будет (типа когда у вас сервисы на разных нодах в кластере и вы сами не знаете на каких)?
Вот во всём этом и пытаюсь разобраться. Нужен был нетривиальный проект.
>Не понял про что он
Сбор новостей, их классификация по сентимент-анализу, метаданным и ещё чего-нибудь прикручу, генерация выходной ленты на основе входных с помощью объединений и фильтров.
Аноним 20/08/16 Суб 00:44:39 #91 №823585 
>>823574
Только чтение же. Захотели ребята статистику посчитать, например, какую-то. Что им делать, заказывать новую функцию в админку и платить за доработку. А это нужно один раз. Лезть на сервер в консоль тяжело или нет доступа и выгрузку из консоли получить тоже проблематично.
Аноним OP 20/08/16 Суб 00:46:11 #92 №823586 
>>823585
Тогда дай возможность выполнять произвольный SQL-запрос, но от специального пользователя, у котогоро права только на чтение. Уверен, что ActiveRecord можно настроить на использование нескольких адаптеров БД. В крайнем случае запили это в виде микросервиса.
Аноним 20/08/16 Суб 01:06:50 #93 №823596 
>>823582
А какие требования по времени и вовлеченности к контрибьюторам? Есть какие-то сформулированные задачи, чтобы можно было взять?

Анон, можешь скинуть свое тестовое на `some без_пробела pine` яндекс?
Аноним OP 20/08/16 Суб 01:16:08 #94 №823602 
>>823596
>А какие требования по времени и вовлеченности к контрибьюторам?
Делать хоть что-то.

>Есть какие-то сформулированные задачи, чтобы можно было взять?
Сейчас мы скорее разбираемся в технологиях, чем пишем готовый код. Можешь взять на себя архитектуру бекенда, потому что нынешний бекендер совсем новичок, и это приходится делать мне. Нужно выяснить, как будут выглядеть типовые сущности на бекенде - контроллеры и тесты контроллеров (модели и тесты моделей у меня итак достаточно чётко структурированы). Обеспечить соответствие JSON API спецификации http://jsonapi.org/ . Помогать бекендеру с моделью данных, ибо она будет очень нетривиальная.

Лучше нам с тобой связаться в скайпе или токсе.

>можешь скинуть свое тестовое на `some без_пробела pine` яндекс?
Ладно, держи так: http://pastebin.com/bdQM1FJS
Аноним 20/08/16 Суб 01:43:20 #95 №823614 
>>823602
И сколько они отвели на это задание времени?

Меня вот это пугает
>Покрытие тестами обязательно. Использовать VCR.
У меня покрытие (и разбор как работать с VCR) займет больше времени чем сам функционал.
Аноним OP 20/08/16 Суб 01:45:05 #96 №823615 
>>823614
>И сколько они отвели на это задание времени?
4 часа. Но я выполнил за 8. По этому поводу ничего не сказали.
Аноним 20/08/16 Суб 01:46:13 #97 №823616 
>>823615
Я бы тоже за 4 не сделал. Не знаю как на счет 8-ми.
Rails and Frontend Аноним 20/08/16 Суб 13:25:02 #98 №823808 
Что сейчас популярно на фронтенде в рельсовых проектах? Angular, React, Ember, Batman?
Аноним 20/08/16 Суб 14:38:01 #99 №823867 
Насколько современному рубисту требуется знание jQuery?
Аноним 20/08/16 Суб 14:40:03 #100 №823869 
>>823808
Ember < Jquery < Backbone < Angular < React.
Сделайте нормально Аноним 20/08/16 Суб 15:51:09 #101 №823897 
>C чего мне начать, чтобы стать рубистом?
Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby. А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.

>Следующий уровень, продвинутые книги по руби:
Confident Ruby by Avdi Grimm
Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition
Ruby Under a Microscope для любителей залезть под капот.

А в виде нормального списка нельзя было оформить?
Год Автор - Название
Аноним 20/08/16 Суб 15:53:53 #102 №823899 
>Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes.
Почитайте еще Grimm A. - Objects on Rails

Тоже самое. Все вразброс, никакой структуры.
Аноним 20/08/16 Суб 15:57:09 #103 №823902 
>>818850 (OP)
>Матц одобряет
Откуда мимокрокам знать что за Матц? Ни ссылок, нихуя. Яхуею с таких шапок. Хаос ебаный.
Аноним 20/08/16 Суб 15:59:51 #104 №823904 
>>823902
Matsumoto. Matz. Ссылку на хомяк или твитор не знаю.
Аноним 20/08/16 Суб 16:00:33 #105 №823905 
>>823902

Лучшая книжка по рубям написана как-раз таки Матцем. Как его можно не знать-то, лiл.
Аноним 20/08/16 Суб 16:07:53 #106 №823908 
Реквестирую список всех книг про Ruby и Rails, которые когда либо издавались в порядке издания. С указанием автора и издательства
Аноним OP 20/08/16 Суб 22:39:33 #107 №824219 
>>823897
>>823899
>>823902
Присылайте пулл-реквесты в шапку:
https://github.com/meoweg/2ch-pr-ruby
Аноним 21/08/16 Вск 00:04:00 #108 №824298 
14717270403350.png
>>824219
Мы что тут, в опенсоурс играться будет? Есть продукт - тред. Я хочу чтобы этот продукт отвечал заявленным фичам. Если он не отвечает то развод.
Аноним 21/08/16 Вск 11:06:08 #109 №824468 
>>824298
Этот тред - такой же продукт, как и ты - нахуй никому не нужный и за который никто не даст денег. "Продукт" блджад, охуеть че несешь. Спасибо должен сказать, что он вообще есть, игрок мамкин. Иди дальше играй.
Покормил.
Аноним 22/08/16 Пнд 10:54:50 #110 №824899 
14718524905590.png
14718524905601.png
>>823897
Аноним 22/08/16 Пнд 17:52:32 #111 №825155 
14718775525780.png
Привет, рубифаги, следующие 2 года хочу потратить на похожий язык. Я на распутье между Руби и Питоном, но я решил учить всё же последний. Переубедите или поддержите меня.
Аноним 22/08/16 Пнд 18:01:56 #112 №825161 
>>825155
Напиши что хочешь, языки немного разные
Аноним 22/08/16 Пнд 18:06:48 #113 №825164 
>>825155
Если цель только веб-разработка - руби, если нет - питон
Аноним 22/08/16 Пнд 18:20:51 #114 №825175 
14718792519570.png
>>824899
взял на заметку пару книжечек из твое списка.
Аноним 22/08/16 Пнд 18:26:45 #115 №825179 
>>825175
Насколько же нужно быть отбитым, чтобы для изучения языка читать десятки книг. Мимо-почти-сеньер, прочитал по рубям одну книжку по диагонали, даже не помню какую...
Аноним 22/08/16 Пнд 18:57:10 #116 №825192 
>>825155
Магия и соглашения, явное vs явное вместо неявного и немного больше кода.
Аноним 22/08/16 Пнд 18:58:40 #117 №825194 
>>825155
Ответ на твой вопрос:

Ruby vs. Python
http://learn.onemonth.com/ruby-vs-python

RAILS VS DJANGO: AN IN-DEPTH TECHNICAL COMPARISON
https://bernardopires.com/2014/03/rails-vs-django-an-in-depth-technical-comparison/
Аноним OP 22/08/16 Пнд 19:11:00 #118 №825197 
>>825155
>Я на распутье между Руби и Питоном
Питон учится за два дня, Руби за пару месяцев. Поэтому предлагаю компромис - пиши на обоих! Причём в одном приложении. Сейчас принято делить всё на микросервисы, взаимодействующие по HTTP. У меня вот тут в учебном проекте API на рельсах, а микросервисы на питоне: https://github.com/artiator
Аноним 22/08/16 Пнд 19:24:29 #119 №825206 
>>825179
>Мимо-почти-сеньер

А я Лев Толстой.
Аноним 22/08/16 Пнд 19:26:56 #120 №825208 
>>825197
2 дня? Дескрипторы, метаклассы, все возможности интроспекции, огромная стандатная библиотека? Ага. И пару месяцев на руби многовато, самое сложное в рубях - это горы синтаксического сахара, вроде возможности не ставить скобки, который в начале может ввести в ступор. Ну и у некоторых возникают проблемы с пониманием областей видимости, include, extend, и т.п.
Аноним OP 22/08/16 Пнд 20:03:00 #121 №825228 
>>825208
>метаклассы
Это не то, что нужно каждому разработчику. Анон же не указал, зачем ему Питон. Но судя по всему для веба.
>все возможности интроспекции
Их в питоне не так много. И опять же, часто используется только isinstance
>огромная стандатная библиотека
Ну это то, что приходит только с опытом. Я до сих пор при работе со стандартной библиотекой Руби редко не открываю документацию.
>Дескрипторы
Уточни, о чём речь?

>И пару месяцев на руби многовато
Ну фиг знает, в Питоне написать итератор можно на первый день изучения, и он из коробки ленивый будет. В Руби это всё таки несколько сложнее.
Аноним 22/08/16 Пнд 20:07:52 #122 №825236 
>>825208

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

Впрочем зачем это надо, будишь как тот недосеньер выше, не читать книги, но лезть в гугл за любым вопросом. Найдется все, думать нинужна.
Аноним OP 22/08/16 Пнд 20:14:26 #123 №825239 
>>825236
Речь не шла об изучении программирования с нуля.
>позднию интерполяцию строк
Впервые слышу такое понятие. Нормальному программисту итак очевидно, что данные надо считать тогда, когда они нужны (за редкими исключениями)
>необходимость в наличие private и protected методов в том виде, в каком они реализованы в руби
Особенность этой реализации объясняется в любой книге по Руби. Не знаю, что там можно не понять.
>Они даже не могут в разименование массива, чтобы передать в метод динамическое число переменных-аргументов.
Я не верю, что есть рубисты, которые пишут на Руби больше пары дней и не знают про такую возможность. Это, кажется, даже в tryruby есть
Аноним 22/08/16 Пнд 20:22:51 #124 №825247 
>>825228
>Это не то, что нужно каждому разработчику
Бывают весьма полезно даже в разработке прикладных приложений, про библиотеки молчу
>Уточни, о чём речь?
Классы, которые определяют специальные методы __get__, __set__ и __delete__, например в sqlalchemy столбцы таблиц мапятся с их помощью, их понимание лишним не будет.
>>825236
А ты сможешь пояснить за private и protected в руби? Лично я за два года работы испытывал необходимость в использовании protected методов всего один-два раза. Да и вообще, всем известно, что private и protected в руби - ненастоящие, и их использование не более чем соглашение, как и методы с подчеркиванием в питоне. Про разыменовывание массива - такая фича есть и в питоне, и в жс, да даже в си есть функции с переменным числом аргументов...
Аноним OP 22/08/16 Пнд 20:25:22 #125 №825251 
>>825247
>Да и вообще, всем известно, что private и protected в руби - ненастоящие, и их использование не более чем соглашение, как и методы с подчеркиванием в питоне.
Нет. Ты что, никогда не получал исключение private method called?

Просто protected ограничивает вызов любыми объектами того же класса или подкласса, а private разрешает вызов только из самого объекта (методы подкласса тоже могу вызывать).
Аноним 22/08/16 Пнд 20:27:47 #126 №825256 
>>825239
> Впервые слышу такое понятие. Нормальному программисту итак очевидно, что данные надо считать тогда, когда они нужны (за редкими исключениями)

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

> Особенность этой реализации объясняется в любой книге по Руби. Не знаю, что там можно не понять.

Мы говорим не о том КАК это работает, а о том ПОЧЕМУ это сделано так и ЗАЧЕМ это нужно. Вот, например, есть понятие итератора (не совсем верное, но все же) и все знают, что это за штука и когда её использовать. То есть, речь об юзкейсах и паттернах. За два месяца точно не разберешься, если ты не гений или же нет опыта в других языках, каком-нибудь там перле, например.

> Я не верю, что есть рубисты, которые пишут на Руби больше пары дней и не знают про такую возможность. Это, кажется, даже в tryruby есть

Кек, не верь. Вообще у меня есть подозрение, что рубистов которые понимают как передаются аргументы в руби — единицы. Ну или точнее тех, кто понял объяснение Матца в его книжке. Ну и рубистов которые за два месяца выучили как работает внутренний оператор === и помнят все его перегрузки в стандартной библиотеке тоже нет, ну или ты один такой уникум.
Аноним 22/08/16 Пнд 20:30:01 #127 №825259 
>>825251
Я знаю как работает private и protected. Про ненастоящие - я имею в виду, что при динамическом вызове через send эти ограничения игнорируются. Да, есть конечно public_send, но это не отменяет факта, что эти ограничение не абсолютны. Про instance_eval вообще молчу.
Аноним OP 22/08/16 Пнд 20:33:36 #128 №825264 
>>825256
Ладно, возможно, я слишком легко рассуждаю из-за опыта больше 2 лет в руби и 7 лет в программировании вообще.

>>825259
>при динамическом вызове через send эти ограничения игнорируются
Ну это неслучайный доступ. Плохо разве что то, что обычный send снимает ограничения, а не какой-нибудь private_send. Но можно написать refine, кторый будет убирать метод send. Так по крайней мере в своем коде ты не допустишь ошибку.

Мне в рефайнах не нравится то, что нет аналога модулей для лексической области видимости. Например, нельзя объединить несколько рефайнов и подключать как один. Но это исправят, я думаю.
Аноним 22/08/16 Пнд 20:37:12 #129 №825270 
>>825256
>Кек, не верь. Вообще у меня есть подозрение, что рубистов которые понимают как передаются аргументы в руби — единицы. Ну или точнее тех, кто понял объяснение Матца в его книжке. Ну и рубистов которые за два месяца выучили как работает внутренний оператор === и помнят все его перегрузки в стандартной библиотеке тоже нет, ну или ты один такой уникум.
Не все понимают как передаются аргументы в руби, потому что логика передачи этих самых аргументов местами весьма уебанская (я говорю о аргументах со значениями по умолчанию, идущих в начале списка, и о неочевидной записи аргументов, передающихся по имени без значения по умолчанию). Про оператор === - его перегружает всего десяток классов, а может и меньше, что там учить то? И вообще, его прямое использование не рекомендуется. Ты еще вспомни про оператор "flip-flop"...
Аноним OP 22/08/16 Пнд 20:42:16 #130 №825275 
>>825270
>я говорю о аргументах со значениями по умолчанию, идущих в начале списка
И что в этом уебанского? То, что в Питоне так делать нельзя? Так там нельзя по той причине (помимо идеологической), что это конфликтует с передачей аргументов по ключу. А в Руби такого кнфликта нет.

>неочевидной записи аргументов, передающихся по имени без значения по умолчанию
Ты про нововведение в 2.2 (или 2.3, не помню)?
>def foo(a:, b:, c:)
Весьма очевидно. Изоморфность между вызовом и объявлением функции.

>Про оператор === - его перегружает всего десяток классов, а может и меньше, что там учить то? И вообще, его прямое использование не рекомендуется.
Я думаю, с ним проблема в том, что он выглядит как бинарный оператор к двум ОДИНАКОВЫМ сущностям, а по факту является бинарным оператором между множеством и его элементом.
Аноним 22/08/16 Пнд 20:47:48 #131 №825283 
>>825275
>И что в этом уебанского?
То, что порядок сопоставления аргументов не интуитивен
>Ты про нововведение в 2.2 (или 2.3, не помню)?
Да. Опять же, на мой взгляд запись не интуитивна.
>Я думаю, с ним проблема в том, что он выглядит как бинарный оператор к двум ОДИНАКОВЫМ сущностям, а по факту является бинарным оператором между множеством и его элементом.
Ну те, кто пришли из php или js конечно могут наступить один раз на эти грабли, ничего страшного. В руби есть куда более неочевидные вещи (например 0 == true)
Аноним 22/08/16 Пнд 20:51:50 #132 №825290 
14718883101890.png
>>825283
>В руби есть куда более неочевидные вещи (например 0 == true)
Вот не надо тут этой хуйни
Аноним 22/08/16 Пнд 20:53:01 #133 №825294 
14718883821260.png
>>825290
Не тот скрин
Аноним 22/08/16 Пнд 20:54:56 #134 №825300 
>>825290
я имел в виду в логическом контексте (if, тернарник), разумеется. Нахуй кому надо напрямую сравнивать буль с нулем
Аноним 22/08/16 Пнд 20:55:15 #135 №825302 
>>825290

котик, а тебе же с пеленок было очевидно что остаток от деления вычисляемый для положительных и отрицательных чисел разный, да?)

> (7 / 3) == (-7 / 3)
Аноним OP 22/08/16 Пнд 20:56:35 #136 №825306 
>>825300
Ну и что в этом неочевидного? В if приводить к булевому типу надо? Надо. К сожалению, от этого не отделаешься. Что считать false? По имеет только сам false. Впрочем, давайте ещё nil считать - не слишком большое отступление, и юзкейзов много. А всё остальное true, как и положено языку со СТРОГОЙ типизацией.
Аноним OP 22/08/16 Пнд 20:57:28 #137 №825309 
>>825306
>По имеет
по идее
fix
Аноним 22/08/16 Пнд 20:59:46 #138 №825314 
>>825306
мне очень нравится как это реализовано в питоне - каждый класс может определить свое поведение в логическом контексте, 0 приводится к false как повелось исторически, пустой массив и словарь - тоже false, что не факт, что правильно, но зато - очень удобно
Аноним OP 22/08/16 Пнд 21:02:36 #139 №825320 
>>825314
Это неявное приведение, что плохо.
>0 приводится к false как повелось исторически
Да, тут Матц позволил себе отступления ради сохранения строгости.
>мне очень нравится как это реализовано в питоне - каждый класс может определить свое поведение в логическом контексте
Это ради того, чтобы не писать to_bool? Всё таки конструкция if имеет чётко определённое назначение - отличать false от true. Спасибо, что напомнил про такую возможность Питона, я че-то забыл про неё. Но вообще это нетипично для Питона, где "явное лучше неявного"
Аноним 22/08/16 Пнд 21:15:11 #140 №825330 
>>825306

> if приводить к булевому типу надо? Надо

Кстати булева типа как такового в руби нет. Есть TrueClass и FalseClass которые наследуются от Class, а не от абстрактного BooleanClass, что было бы логично.
Аноним 22/08/16 Пнд 21:19:41 #141 №825334 
>>825320
>Это ради того, чтобы не писать to_bool?
Не только. Еще это позволяет делать красивую запись, например: array || another_array
Аноним 22/08/16 Пнд 21:21:50 #142 №825335 
>>825334
array or another_array конечно, питон же
Аноним 22/08/16 Пнд 21:22:15 #143 №825337 
>>825334

> Не только. Еще это позволяет делать красивую запись, например: array || another_array

Эм, а причем здесь это. Есть понятие внутренних и внешних операторов. || это внутренний оператор для array и он перегружен, что позволяет строить _множество_ (а не массив) пересечения c аргументом перегруженного оператора. Если мы говорим о руби
Аноним 22/08/16 Пнд 21:27:25 #144 №825345 
>>825337
Речь о питоне, я поправил. И да, в руби нельзя перегружать логические операторы, а оператор для объединения множеств - |
Аноним OP 22/08/16 Пнд 21:29:24 #145 №825349 
>>825345
>И да, в руби нельзя перегружать логические операторы, а оператор для объединения множеств - |
Но его-то можно перегрузить. Так что единственное отличие между руби и питоном в обсуждаемом контексте - это разное поведение в if
Аноним 22/08/16 Пнд 21:31:09 #146 №825351 
>>825349
| - можно перегружать, || (or в питоне) - нельзя. Это совершенно разные операторы, так то
Аноним OP 22/08/16 Пнд 21:34:38 #147 №825357 
>>825334
>Еще это позволяет делать красивую запись, например: array || another_array
Да, этого не хватает. Но можно написать что-нибудь такое
class Array
def if_empty(other_array)
empty? ? other_array : self
end
end
Наверняка в каких-нибудь ActiveSupport или Powerpack есть такое

>>825351
Речь шла о том, что в Руби есть операторы, которые выглядят как логические и их можно переопределять.
Аноним 22/08/16 Пнд 21:35:58 #148 №825358 
>>825345
> нельзя перегружать логические операторы,

Да, ты прав || внешний оператор (т.е. его нельзя перегрузить внутри класса). Я кстати, чет задумался о разнице | и + в контексте массива в руби. Во втором случае (+) мы объединяем массив с включением повторений, а в первом фактически эмулируем работу объекта множества (class Set). Вот чет непонятно , нахера логику размазывать по двум классам, ведь объединение уникальных элементов это свойство для множества и для этой операции не нужен оператор в классе массива.
Аноним 22/08/16 Пнд 21:40:19 #149 №825361 
>>825358
Множества внутри устроены совсем иначе, чем массив, у них нет возможности доступа по индексу и многих других методов массива, но наверное работают быстрее (не проверял), и гарантируют отсутствие повторений не только во время использования операторов множеств
Аноним 23/08/16 Втр 18:22:37 #150 №825889 
>>825357
>Наверняка в каких-нибудь ActiveSupport или Powerpack есть такое
В эктивсаппорт для всех объектов определен метод presence, который возвращает сам объект, или nil, если объект пустой
Аноним 23/08/16 Втр 18:40:50 #151 №825909 
>>825179
Сеньёр ты за "выслугу лет", я так понимаю?
Аноним 23/08/16 Втр 18:54:18 #152 №825920 
>>825909
За какую такую выслугу лет? У меня стаж в сфере всего около двух лет. И да, официально я не серьёр, но, учитывая что два последних проекта на работе я запилил в одиночку, включая разработку архитектуры и фронтенд, считаю себя весьма крепким миддлом. Книги по языку - пустая трата времени, суммарно прочитал 3 книги по 3 языкам. Во многих книгах "по языку" существенная часть объема - либо вода, которую можно смело выкинуть, либо описание различных библиотек, стандартных и не очень, многие из которых в реальной работе нужны очень редко, а когда нужны - проще прочитать документацию. Эталон книги по языку для меня - K&R, ~180 страниц (не считая аппендикса по стандартной либе).
Аноним 23/08/16 Втр 18:58:40 #153 №825922 
>>825920
А какие книги по программированию ты вообще прочитал, крепкий мидол? Я вот вкотився в один проект с такими молодцами недавно, и в принципе всё работает у них даже, но технический долг там на пару лет накопился уже, а они даже ухом не моргают - просто не понимают в чем проблема. Делать одну фичу неделями для них походу норма.
Аноним 23/08/16 Втр 19:06:02 #154 №825925 
>>825922
Совершенный код, паттерны проектирования, что-то по алгоритмам от Кормена (маленькая книжка), маленькая книжка по дискретке, по SQL что-то короткое тоже прочитал. Ну и по языкам - по 1 книге по Си, питону, рубям. Вроде все.
Аноним 23/08/16 Втр 19:06:26 #155 №825926 
Зачем вы сидите в треде мёртвого языка?
Аноним 23/08/16 Втр 21:34:56 #156 №826029 
>>818850 (OP)
> 1. C чего мне начать, чтобы стать рубистом?
> Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи,
А почему не Матца того же?
Аноним OP 23/08/16 Втр 21:38:40 #157 №826031 
>>826029
>А почему не Матца того же?
Я перекатываю тред, но шапкой занимться у меня нет времени. Можешь прислать пулл реквест http://github.com/meoweg/2ch-pr-ruby
Аноним 23/08/16 Втр 21:40:46 #158 №826033 
>>826031
Я понимаю, что шапка перекатывается. Это вопрос, не претензия.
Аноним OP 23/08/16 Втр 21:45:34 #159 №826036 
>>826033
А я просто предлагаю, а то с момента появления репы никто ничего не сделал, а шапка действительно нуждается в доработке.
Аноним 23/08/16 Втр 21:59:16 #160 №826047 
Нужно post запрос в нескольких потоках сделать. Можно Thread заюзать? А то кто-то говорит, что Thread в рубях не стоит трогать.
Аноним OP 23/08/16 Втр 22:03:33 #161 №826049 
>>826047
Можно, это же стандартная библиотека. В Руби потоки не выполняются одновременно из-за Global Interpreter Lock, но когда какой-то поток находится в ожидании, например, как в твоём случае, при отправке TCP запроса, то управление передаётся другому потоку. Т.е. для твоих целей оно отлично подходит.

За многопоточностью без Global Interpreter Lock иди в JRuby или Rubinius (или руби 3, когда он выйдет).
Аноним 23/08/16 Втр 22:10:13 #162 №826055 
>>826049
Вот оно что. Спасибо
Аноним 24/08/16 Срд 19:54:52 #163 №826595 
Как организовать, так скажем, банч действий, которые можно встраивать в экшны?
Конкретно делаю смс-подтверждения, подтверждать нужно номер телефона при заполнении профиля, также при отправке бабла участнику системы.

Пока сделал отдельный контроллер со view (подтверждение как в сбербанке, лол). Но вот хуй знает, как придерживаться dry при этом.
Аноним 24/08/16 Срд 20:14:54 #164 №826613 
14720588946120.jpg
>>826595
Аноним 25/08/16 Чтв 03:10:35 #165 №826861 
14720838360810.jpg
Вчера был первый день на новой удалёнке. Нихуя не делал, потому что мне рассказывали про проект и готовили аккаунты в сервисах. Только RuboCop настроил. Такие дела.

Абу в курсе, что он сломал загрузку файлов в Firefox?
Аноним 25/08/16 Чтв 03:51:26 #166 №826877 
14720862866140.jpg
>>826861
Как устроился?
загрузка работает, просто вместо кнопки теперь кликать надо на поле над капчей.
Аноним 25/08/16 Чтв 03:56:04 #167 №826878 
14720865649320.jpg
>>826877
Нашёл вакансию на http://rubyjobs.ru , написал, выполнил тестовое, поговорил в скайпе, взяли.

У меня не работает
Аноним 25/08/16 Чтв 10:43:44 #168 №826955 
14721110242180.jpg
>>826861
Бро, а трудоустроили тебя с оформлением или как всегда?
Аноним 25/08/16 Чтв 11:32:45 #169 №826981 
>>826955
Боишься остаться без пенсии?
Аноним 25/08/16 Чтв 11:40:54 #170 №826992 
>>826981
Да нет, просто у меня пунктик по этому поводу.
Аноним 25/08/16 Чтв 13:48:18 #171 №827061 
14721220982660.jpg
>>826955
Я сам попросил неофициально.
Аноним 25/08/16 Чтв 14:13:41 #172 №827069 
14721236221070.jpg
>>827061
>сам попросил неофициально
Т.е. возможность официального трудоустройства была?
Аноним 25/08/16 Чтв 17:22:50 #173 №827147 
14721349702870.jpg
>>827069
Через ИП. А это от фриланса мало чем отличается, разве что будешь в налоговую раз в год ходить. Смотря почему тебе официалка так принципиальна.
Аноним 25/08/16 Чтв 17:50:40 #174 №827161 
14721366403710.png
>>827147
>>Через ИП
Яснопонятно.

> Смотря почему тебе официалка так принципиальна.
Соцпакет.

Аноним 25/08/16 Чтв 18:17:05 #175 №827167 
14721382259660.jpg
Аноны, что это за вакансия и что это за Александр? Звучит прикольно, я бы поработал даже бесплатно, просто ради комитов, опыта фриланса и английского. Может написать александру?
Аноним 25/08/16 Чтв 18:25:37 #176 №827169 
14721387374760.jpg
>>827167
Я бы пошел.
Аноним 25/08/16 Чтв 18:33:12 #177 №827178 
>>826613
Чет я все равно не пойму пока.
Создал этот самый сервис обжект.

Допустим, при обновлении профиля надо телефон подтверждать

@profile.assign_attributes(profile_params)
if @profile.valid?
confirm = SmsConfirmationService.new({user: current_user, phone: profile_params[:phone]})
confirm.confirm_phone
....
@profile.save
redirect_to dashboard_path, notice: 'Профиль обновлен'

Сервис берет тупо номер, юзера, генерирует код и шлет по смс, он обособленый.
Где нужно рендерить view с полем ввода кода? К тому же, я набросал партиалы, специфичные для каждой верификации - например, при переводе бабла рендерится поле ввода смс и инфа, кому идет перевод и сумма.

Что-то впервые такой затуп, помогите плиз.
Аноним 25/08/16 Чтв 18:38:29 #178 №827183 
>>827169
Давай подождем что напишут аноны, может весь двач уже этому александру отписал. Очевидно что он берет на одеске баксов 70 в час и ему похуй на эти 3. А мне чо, офис в котором меня вызывают раз в неделю 1с запустить, я заебался прокастинировать. Напишу вечером александру, а пока почитаю что-нибудь про руби лол.
Аноним 25/08/16 Чтв 19:01:22 #179 №827195 
>>827178
Профиль же наверняка имеет привязку к юзеру? Нахуй тогда эти сервис обжекты, повесь коллбек before_save в модели профиля, где будешь вызывать отправку смс.
По поводу вопроса где рисовать вьюху - я правильно понимаю, что логика следующая:
Юзер заполняет поля профиля, после этого ему нужно ввести код который пришел по смс, если код введен правильно - обновляем профиль.
Тогда есть 2 варианта:
1) после отправки смс, ты записываешь отправленный код в модель профиля, но остальные аттрибуты не записываешь. Рендеришь вьюху, куда надо вводить код, и в эту же вьюху пихаешь все аттрибуты профиля в качестве скрытых полей (не забудь добавить дополнительное поле с хэш суммой всех полей + некоторый код, неизвестный пользователю, чтобы защитить форму от кулхацкеров). Когда юзер ввел код, ты проверяешь его, и если он верен - записываешь все аттрибуты в профиль.
2) Заполняешь профиль введенными аттрибутами сразу, но используешь для этого "черновик" - простое булево поле, если тебе надо подтверждать только на создании, или отдельную модельку, которая будет сохранять неподтвержденные поля (видел гем для этого, но на самом деле достаточно модель с одним полем типа blob, где будешь хранить хэш всех аттрибутов). Потом рисуешь форму ввода кода, если код введен правильно - делаешь модельку уже не черновиком.
Аноним OP 25/08/16 Чтв 20:29:17 #180 №827224 
>>827167
>$3 в час
Нахуй и в пизду.
>>827183
>А мне чо, офис в котором меня вызывают раз в неделю 1с запустить, я заебался прокастинировать.
Впрочем, может три бакса в час всё же лучше этого. Вдруг и вправду опыта наберёшься.
Аноним 25/08/16 Чтв 20:31:55 #181 №827225 
https://github.com/orotti13/thread_watcher
Покритикуйте плиз.
Robocup 1 оффенс
Аноним 25/08/16 Чтв 20:43:33 #182 №827229 
>>827225
1) Для проверки на соответствие регексу есть замечатльный оператор =~
2) метод def get_body_of_thread можно написать куда красивее:
def get_body_of_thread(rel_link)
Net::HTTP.start('2ch.hk', use_ssl: true) do { |http| http.get(rel_link).body }
rescue
sleep 1
retry
end
Дальше даже не смотрел, все свалено в 1 файл, форматирование хромает, бида-бида
Аноним OP 25/08/16 Чтв 20:44:25 #183 №827230 
>>827225
Сложно читать, потому что код написан снизу вверх. По именам некоторых методов сложно понять их роль (get_type(source) - тип чего? источник чего?). Ещё из-за глобального состояния сложно разобраться, впрочем, это всего два примитива. Зачем потоки создаются в двух местах? В такой простой задаче это кажется переусложнением.

В остальном неплохо. Главное задачи уметь решать. А уж писать поддерживаемый код научишься, когда пару раз споткнёшься о своих же грабли.
Аноним OP 25/08/16 Чтв 20:47:03 #184 №827234 
>>827225
И да, не стесняйся использовать сторонние библиотеки. Просто добавь Gemfile с двумя строками:

source 'https://rubygems.org'
gem 'rest-client'

И не придётся мучаться со стандартным Net::HTTP. Ты не пишешь что-то такое, чтобы нужно было контролировать каждый байт запроса и ответа.
Аноним OP 25/08/16 Чтв 20:49:05 #185 №827236 
>>827234
Это к тому, что у тебя загрузка файла не совсем корректно идёт, если я не ошибаюсь. Если он придёт как multipart, то у тебя сохранится только часть файла.
Аноним 25/08/16 Чтв 21:48:06 #186 №827277 
Рубисты, сколько вы получаете? Где работаете?
Аноним 25/08/16 Чтв 22:03:53 #187 №827290 
>>827277
30к в мес при занятости около 4 часов день, фриланс
Аноним 25/08/16 Чтв 22:31:18 #188 №827304 
>>827290
шо так мало, ищи контору покручеЮ у меня под 80 штук за те же 20 часов в неделю.
Аноним 25/08/16 Чтв 22:45:24 #189 №827319 
>>827304
Да я нубас. На последнем собеседовании не смог ответить, что делает class_eval и назвал только из JOIN'ов sql INNER.

Вообще я себя странно ощущаю. Конторы, в которые я собеседуюсь, делятся для меня на PRO-уровень (boomstarter, например), где я сосу со своими знаниями и на дно, где не пишут тестов, предлагают мало денег и сами нихуя не знают.

На про не тяну, в дне неохота работать, лучше уж фрилансить. И самооценка падает из-за того, что крутые студии отшивают.
Аноним 25/08/16 Чтв 22:55:42 #190 №827336 
>>827319
>что делает class_eval
Совершенно бесполезное знание само по себе.
Аноним 25/08/16 Чтв 23:00:15 #191 №827342 
>>827277
Нискажу, а то в айти вайтут какие-нибудь раздолбаи, которые сначала будут портить жизнь своими вопросами, а потом выпиздят буквально, с помощью пиздежа тебя с работы.
Аноним 26/08/16 Птн 00:30:43 #192 №827415 
relation.average('approved_at - created_at')
выдает 0.
Пишу такой же SQL запрос - возвращает адекватное значение. втф?
Аноним 26/08/16 Птн 00:33:23 #193 №827417 
>>827415
Дык позырь че в консоли написано, что там выполняется-то.
Аноним 26/08/16 Птн 00:40:32 #194 №827424 
>>827417
Я запрос с консоли копировал лол. Оказывается там массив возвращается, если вручную запускать SQL... сука неудобно ебаный активрекорд, мне что теперь, вручную SQL писать изза такой хуйни
Аноним 26/08/16 Птн 00:54:29 #195 №827436 
>>827424
Охуеть открытие. AR вообще для нубов и простых запросов.
Аноним 26/08/16 Птн 05:48:48 #196 №827480 
>>827436
Sequel is life
Аноним 26/08/16 Птн 05:52:39 #197 №827481 
>>827480
Кто-то им вообще пользуется? Сколько раз слышу, но ни разу не видел проекта с ним, какое-то впечатление как от фингербокса.
Аноним 26/08/16 Птн 05:56:00 #198 №827482 
Ну, буржуи пользуются.
Аноним 26/08/16 Птн 08:36:33 #199 №827515 
>>827481
Я вот пользуюсь, у меня не было выбора.
Аноним 26/08/16 Птн 11:39:26 #200 №827603 
>>827481
Так возьми сам и воспользуйся! Нет, подожду пока кто-то за меня прожует и в рот положит. Если до сих пор не дошёл до этого, значит и не надо.
Аноним 27/08/16 Суб 00:33:33 #201 №828396 
14722472140160.jpg
>>818850 (OP)
Аноны, платина. Расскажите про свой опыт изучения руби. С отметки "ноль/понимаю основы программирования (циклы, if и т.п.)" и до уровня "работаю за еду/опыт". Интересно все : количество затраченного времени в день, энтузиазм, параллельная работа/учеба. Пикрандом
Аноним 27/08/16 Суб 00:55:11 #202 №828407 
>>828396
Слишком сложна, нинада учить. Лучше дотан включи.
Аноним 27/08/16 Суб 01:01:09 #203 №828412 
>>828396
Релькасты, кодкадеми и кодскулы, рубитапас и конфрикс.
Ушло примерно два года с нихуя до 2к в месяц.
Аноним 27/08/16 Суб 01:39:51 #204 №828438 
>>828412
шо за контора, буржуйская?
Аноним 27/08/16 Суб 02:10:28 #205 №828450 
>>828412
через какой промежуток времени начал работать?
Аноним 27/08/16 Суб 06:10:45 #206 №828509 
Блять опять проект в котором технического долга накопилось как грязи, в новые задачи каждый день появляются.
ХОЧУ ВСЕ ОТРЕФАКТОРИТЬ НО ВРЕМЕНИ НЕТ.
Из-за того что почти не писал сервис обжекты тесты ломаются на полчиха при изменении. Не делайте ак ребята, лучше выбейте у начальства время на нормальное проектирование, чистый rails way по dhh это пиздец и игнорирование хуй знает скольких лет опыта программирования.
Аноним 27/08/16 Суб 06:59:19 #207 №828511 
>>828509
Нахуй эти ваши сервис обжекты, нахуй тесты. У меня на последнем проекте, который я пилю один и в котором уже несколько десятков моделей и контроллеров - суммарный объем тестов не превышает нескольких сотен строк, при этом - за последние 2 месяца тестировщики в нем нашли всего 3 мелких бага, все работает как часы.
Аноним 27/08/16 Суб 07:59:45 #208 №828514 
>>828511
Ты диван. Твоя хуета начнет отсасывать при первой же попытке расширения, особенно если туда еще кто-то кроме тебя влезет. Ну а окончательный отсос произойдет, когда ты попытаешься это зарефакторить, а QA закидает тебя багами, потому что тесты были хуевые и недостаточные.

>>828509
А вот вам два вагона паттернов.
Аноним 27/08/16 Суб 08:21:52 #209 №828517 
>>828514
Моя хуета расширяется регулярно, и никаких проблем не возникает. Я выделил на проработку архитектуры достаточно времени, чтобы предусмотреть вероятные пути расширения заранее. Плюс все функциональные модули приложения слабо связаны между собой, поэтому при изменении достаточно протестировать только небольшой участок. В критичных местах я иногда все-таки пишу тесты, но редко.
По поводу "кто-то кроме тебя влезет" - я сочувствую этому "кому-то", т.к. я, к сожалению, пишу не ортодоксальный код. У меня туго с фантазией на имена переменных, поэтому в моем коде не редкость чейны из десятков методов, в том числе с кучей map, reduce, select. И битовая магия в моем проекте тоже в куче мест. Да, комментарии я тоже не пишу.
Аноним 27/08/16 Суб 09:23:19 #210 №828529 
>>828438
Нет, сижу в офисе в России.

>>828450
Примерно пол года. Начинал с принеси-подай за 25к.
Аноним 27/08/16 Суб 11:29:17 #211 №828572 
>>828529
B Poccии или в МСК/СПБ?
Аноним 27/08/16 Суб 13:27:47 #212 №828628 
>>828517
Не льсти себе, это не расширение называется, а костыляние, если у тебя встаёт "проблема" именования. Когда всё делается правильно - вопроса имён нет в принципе, просто называешь вещи своими именами.

>функциональные модули приложения слабо связаны между собой
Лол, это какие? Ты же сервисные объекты не юзаешь, а катишься по рейлс вэю.

И да, чтобы опровергнуть мои слова прогони reek и rubocop с дефолтными конфигами, и посмотрим как там оно архитектурненько выходит. Codeclimate покажет кто где срал.
Аноним 27/08/16 Суб 13:52:34 #213 №828640 
>>828628
С дефолтными конфигами:
reek - 132 варнингов, в основном ругается на отсутствие комментариев.
rubocop - 312 варнингов, опять же, хочет видеть комментарии, плюс еще в куче мест тыкает меня на отсутствие пробелов в хэшах (хочет видеть стиль { key: value }, а не {key: value}), и в длину строки (я же не бомж без фулл-хд)
Аноним 27/08/16 Суб 14:04:15 #214 №828648 
Ты не написал в скольки файлах всё это происходит. Теперь давай пример кода.
Аноним 27/08/16 Суб 14:19:46 #215 №828657 
>>828648
114 файлов (только папка app). Код под NDA, так что могу скинуть разве что некоторые абстрактные примеры:

Кодирование/декодирование временных промежутков:
range.reduce(0) { |a, i| i.in?(list) ? a | (1 << (i - 1)) : a }

(1..int_value.bit_length).select { |i| int_value & (1 << (i - 1)) != 0 }

Выборка значений из константной хэш-таблицы:
SOME_TABLE.values.map { |i| i.select { |k, _| k.in?(SOME_ARRAY) } }.flat_map(&:values).flat_map(&:values).map { |i| i[:some_field].to_s }.uniq

coffee, применение поисковых фильтров:
@search_filters.map((f) -> f.process()).reduce(((a, b) -> $.extend({}, a, b)))
Аноним 27/08/16 Суб 14:38:34 #216 №828672 
>>828657
О чем можно судить по одной строчке? Ясно короче.
Аноним 27/08/16 Суб 14:41:15 #217 №828674 
>>828672
Ты попросил примеры, я тебе скинул парочку абстрактных, других не могу, опенсорс не пишу.
Аноним 27/08/16 Суб 16:27:55 #218 №828751 
>>828657
Что за нечитаемый пиздец.
Аноним 27/08/16 Суб 16:35:57 #219 №828761 
>>828751
джоб секурити же
Аноним 27/08/16 Суб 17:36:22 #220 №828830 
Аноны, для того чтобы залить сайт на руби, нужно чтобы хостинг поддерживал ror?
Аноним 27/08/16 Суб 17:44:07 #221 №828839 
>>828830
обычной vps хватит
Аноним 27/08/16 Суб 17:48:36 #222 №828844 
>>828839
Конечно хватит, ведь на vps ты можешь поставить что угодно, и ror в том числе. Он определенно спрашивал про виртуальный хостинг, где ты так просто нихуя не поставишь. Таких хостингов с поддержкой ror почти нет
Аноним 27/08/16 Суб 18:04:47 #223 №828851 
14723102880020.jpg
Я про такое говно спрашивал.
Аноним 27/08/16 Суб 18:07:14 #224 №828855 
>>828851
Ну судя по всему это виртуальный хостинг, куда ror не поставишь. Ищи впс.
Холивар Вавилонская блудница 27/08/16 Суб 19:07:46 #225 №828913 
14723140661020.jpg
Что есть в руби, чего явно не хватает в Python?
Аноним 27/08/16 Суб 19:17:28 #226 №828923 
>>828913
private/protected методы. Ну и по мелочи, например: case-statement, литеральные регексы
Аноним 27/08/16 Суб 19:19:11 #227 №828925 
>>828913
блоки, DSL, возможность писать более функциональный код. Куча полезностей.
Аноним 27/08/16 Суб 19:24:24 #228 №828930 
>>828925
Кстати блоки можно считать лямбдами, поэтому даже использовать ключевое слово не надо, так что это не просто возможность, а гармонично вписанная фича, ФП в каждом each.
Аноним 27/08/16 Суб 19:24:46 #229 №828931 
>>828925
Что именно по DSL?
Аноним 27/08/16 Суб 19:25:54 #230 №828934 
>>828925
Блоки это просто замыкания, в питоне можно передавать в функцию ссылку на другую функцию с почти таким же результатом. DSL - что ты под этим подразумеваешь? Возможность вызывать функции без скобок, и заниматся самообманом, что ты пишешь ключевое слово а не имя функции? По поводу функционального кода - у питона тут возможностей не меньше, а даже больше, т.к. встроенные функции map, reduce и т.д. работают с любым количеством коллекций, + есть очень классные list и dict comprehensions
Аноним 27/08/16 Суб 19:28:54 #231 №828939 
>>828934
В руби удобнее, от и всё, в питоне дрочильня с отступами и строками.
Аноним 27/08/16 Суб 19:31:42 #232 №828942 
>>828939
Какая еще дрочильня с отступами? Если ты пишешь в IDE, отступы и там и там автоматически ставятся. Или ты пишешь в блокноте и хуй кладешь на форматирование кода?
Про строки вообще не понял, в питоне разве что интерполяция в строках менее удобная, но вроде как в следующей версии введут интерполяцию а-ля руби
Аноним 27/08/16 Суб 19:37:02 #233 №828945 
>>828913
Прост питон нипанятный какой-то, не юзер-френдли.
Аноним 27/08/16 Суб 19:38:49 #234 №828946 
>>828945
На вкус и цвет Python-на нет...
Аноним 27/08/16 Суб 19:40:09 #235 №828948 
>>828946
Не знаю какой вкус надо иметь, чтоб любить магические методы.
Аноним 27/08/16 Суб 19:40:40 #236 №828949 
>>828945
Толсто. В питоне наоборот меньше сущностей, меньше ключевых слов, меньше сахара, большинство не имеющих отношения к ядру вещей вынесено в стандартную библиотеку...
Аноним 27/08/16 Суб 19:42:08 #237 №828953 
>>828949
Сколько раз я ни пытался его как-то поучить, один хрен интуитивно непонятно ничего в отличие от рубей.
Аноним 27/08/16 Суб 19:46:30 #238 №828956 
>>818850 (OP)
Правильно я понимаю, что руби учат либо хипсторы, которые не хотят об петухон швариться, либо виабушные школостуденты, которые мечтают перекатиться в Нихонию?
Аноним 27/08/16 Суб 19:46:47 #239 №828957 
>>828948
это же сам сок - магические методы. Круче только перегрузка операторов в С++ . Даже в похапе были они введены
Аноним 27/08/16 Суб 19:48:45 #240 №828958 
>>828956
У меня тоже такое впечетления создалось. Правда в Python есть одна большая проблема - поддержка Python 2
Аноним 27/08/16 Суб 19:49:03 #241 №828959 
>>828957
И чем же перегрузка операторов в С++ круче?) У питона возможности перегрузки операторов не меньше
Аноним 27/08/16 Суб 19:49:47 #242 №828961 
https://wiki.theory.org/YourLanguageSucks
Аноним 27/08/16 Суб 19:52:55 #243 №828965 
>>828942
Не надо тут приплетать мол все пишут в IDE и IDE это единственно верный способ писать код.
Форматирование отступами это дно, и держится только на поддуве гуглом.
Аноним 27/08/16 Суб 19:57:30 #244 №828968 
>>828965
Более компактное дно, более читабельное, для некоторых людей
Аноним 27/08/16 Суб 20:00:54 #245 №828969 
>>828939
>>828942
Да всё с рубистами понятно.
В общем, суть такова: если ты до этого когда-то писал код и использовал привычные скобочковые языки (с брасиками), то лучше выбрать руби, т.к. он просто будет приятнее, естественнее смотреться. Если опыта нет, то можешь смело брать пайтон, т.к. его код не будет казаться тебе странным, а через некоторое время на другие языки иначе чем на говно ты смотреть не сможешь.
Аноним 27/08/16 Суб 20:10:43 #246 №828976 
>>828969
Чужь. Если у тебя не все в мозгу гибко - то Python тебе будет трудно учить. Я после питона начал CoffeeScript использовать, понравилось. Правда там можно нечайно поставить пробел и сильно пожалеть об этом - поэтому отказался в пользу Babel
Аноним 27/08/16 Суб 20:13:50 #247 №828978 
>>828957
>Даже в похапе
Т.е. это эталон для тебя?
Аноним 27/08/16 Суб 20:45:44 #248 №828996 
>>828978
Откуда ты взял? Ну сейчас PHP поприличне того, что было лет 10 назад
Аноним 27/08/16 Суб 20:56:02 #249 №829002 
>>828968
Более компактное когда вылезает за границы монитора/80-колонок?
Более компактной когда повсюду сектантский индент в 4 пробела, сдвигает логику в неведомы дали(а иногда таки надо больше двух уровней вложенности)?
Аноним 27/08/16 Суб 23:27:11 #250 №829088 
>>828913
gem install

и тока не нужно говорить о pip это ебучия х* если сравнивать с rubygem
Аноним 27/08/16 Суб 23:38:49 #251 №829092 
>>829088
Почему?
Аноним 27/08/16 Суб 23:52:55 #252 №829097 
>>829092
потому что если работал с ним и руби гем поймешь
Аноним 27/08/16 Суб 23:59:18 #253 №829101 
>>829097
Не похоже на аргумент
Аноним 28/08/16 Вск 11:01:18 #254 №829327 
>>829101
Похоже на опыт работы с тем и тем :)
Аноним 28/08/16 Вск 12:50:49 #255 №829386 
В railstutorial для редактирования профиля пользователя https://www.railstutorial.org/book/updating_and_deleting_users#sec-edit_form делают ссылку <%= link_to "Settings", edit_user_path(current_user) %> это будет что-то вроде /users/1/edit, я же хочу сделать то же самое только на специальной странице /settings (будет конечно же доступно только залогиненому пользователю) . Как это сделать ?
Аноним 28/08/16 Вск 13:04:48 #256 №829389 
>>829386
в роутах: resource :settings (не resourceS, а resource)
В SettingsController все операции с current_user
Аноним 28/08/16 Вск 19:35:09 #257 №829719 
Аноны, в моем приложении имеется чистая функция, которая производит довольно трудоемкие вычисления (с некоторыми комбинациями параметров выполнение на моем рабочем компе может занимать до нескольких секунд), и при этом может возвращать хэш забитый нулями, или большой хэш забитый кучей разнородных данных, или хэш забитый частично данными, частично нулями. Не могу определится, надо ли кэшировать вызов функции, и если да, как мне определять момент очистки хэша (чистить надо когда забьется приличное количество памяти, и это слабо коррелирует с количеством записей в кэше, т.к. он может быть забит тупо нулями наполовину)?
Аноним 28/08/16 Вск 20:34:45 #258 №829766 
>>829719

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

Простое решение: Использовать или адаптировать метод compact для твоего hash-объекта для сжатия данных (удаление ключей ссылающихся на nil, 0) после выхлопа метода описывающего функцию.
Аноним 28/08/16 Вск 20:40:15 #259 №829768 
>>829766
Результат, возвращаемый этой функцией используется, даже если там куча нулей и nilов, такие данные ожидаемы. Поэтому нельзя выпиливать из результата какие-либо данные. А вот первый вариант наверное самый правильный - но вот проблема с поиском объема кэша в памяти. Я что-то припоминаю, что в руби есть способ узнать, сколько места занимает в памяти объект, но во-первых я никак не могу вспомнить в каком модуле этот метод лежит, а во-вторых он наверняка не учитывает, все числовые значения и nil в руби всегда ссылаются на один и тот же объект...
Аноним 28/08/16 Вск 20:57:07 #260 №829796 
>>829768

А работу с подобной тяжелой функцией обязательно держать в теле программы?

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

Тогда не нужно думать сколько весит конкретный мемоизированный результат, достаточно знать что общая планка для микросервиса превышена, и пришла пора сбросить наименее актуальное на диск или в /dev/null.
Аноним 28/08/16 Вск 20:58:21 #261 №829798 
>>829796
интересный вариант, спасибо
Аноним 28/08/16 Вск 21:08:40 #262 №829813 
>>829798

Ну и та документация, что искал:

http://ruby-doc.org/stdlib-2.1.3/libdoc/objspace/rdoc/ObjectSpace.html

> require 'objspace'
> yoba = {1 => "12345", 2 => 43}
> puts ObjectSpace.memsize_of(yoba)

обрати, внимание, Матц негодует:

Generally, you SHOULD NOT use this library if you do not know about the MRI implementation. Mainly, this library is for (memory) profiler developers and MRI developers who need to know about MRI memory usage.
Аноним 29/08/16 Пнд 11:00:41 #263 №830152 
>>829719
>>829719
Перепиши на расте. Молодежно будет.
Аноним 29/08/16 Пнд 21:21:37 #264 №830712 
Кому нужны рубисты? Почему они выбирают руби? Почему не пхп или питон?
Аноним 29/08/16 Пнд 21:33:31 #265 №830732 
>>830712
Потому что именно ты задаешь этот вопрос. Они не приходят к тебе спрашивать почему не руби, например.
Аноним 29/08/16 Пнд 22:21:32 #266 №830822 
>>830712
Потому что от php глаза болят и гавно код ну его нах

Питон не охотот табить и говорить тока с лабарантами

У руби хороший красивый и пушистый
Аноним 29/08/16 Пнд 22:28:59 #267 №830830 
>>830822
Я имел ввиду тех, кому нужны рубисты. Почему они выбирают руби, а не другой язык? Что их мотивирует? Разве не проще нанять армию пхп/питон макак, которых как грязи и которые все с радостью сделают за еду, да еще отсосут в придачу?
Аноним 29/08/16 Пнд 23:03:35 #268 №830846 
>>830830
Потому что кто то думает, и начинают на Rails если для веба, или на чистом Руби если сервер, а потом обьем большой и нужно обновлять и продолжать писать.

Или к примеру давайте вот эту шнягу перепишем с php на что то на что а давайте Руби ну вот и пошло поехала

Очень многие разрабочики любят Руби и часто этот код попадает в продукцию

И еще не стоить забивать что тесты писать на руби очень удобна (видел когда С и С++ тестировали им)

И да в одной компании видел как из кода с порой фунции родился проект на руби и стал таким что потом на нем работала команда из 2 лидов и 8 - 10 девов
Аноним 29/08/16 Пнд 23:04:45 #269 №830849 
>>830830
И да не стоит забывать софт который уже работает на Руби
Аноним OP 30/08/16 Втр 02:20:40 #270 №830921 
>>830830
Потому что Rails - очень богатая экосистема. И да, в России рубистов мало. Однако и тут некоторые выбирают Rails, причём для весьма нестандартных задач. Я, например, сейчас работаю в российской конторе, которая пилит энтерпрайз приложения (c Oracle и Apache, да-да, всё это говно - требования заказчика, ибо у них своя серверная инфраструктура) для университетов и предприятий Германии. Тимлид говорит, сложно было продвинуть рельсы у них. Однако он всё равно не стал пилить это на Джаве какой-нибудь, потому что разработка на рельсах несравнимо эффективней. Питон тоже отстаёт по экосистеме. На Ноде постепенно появляются Rails-подобные фреймворки и библиотеки к ним, но пока что это поделки хипстеров, чем экосистема Рельс была 10 лет назад.

А вообще, ебашь микросервисы и учи докер. Тогда если вдруг появится задача, которая на Руби решается очень неэффективно (например, машинное обучение - из-за недостатка библиотек), то просто напишешь соответствующую часть на Питоне или Джаве. Также не надо сложный SPA фронт писать внутри рельсового приложения. Хоть и есть всякие ember-rails, react-rails, angular-rails, но они заметно хуже совместимы с быстроразвивающейся фронтенд-экосистемой, так что выноси в отдельное приложение. Впрочем, в большинстве задач это по-прежнему не нужно, Sprockets тебе с головой хватит.
Аноним 30/08/16 Втр 10:20:24 #271 №831033 
>>830921
>на Руби решается очень неэффективно (например, машинное обучение - из-за недостатка библиотек)

Ну это как посмотреть, есть много что нужно просто найти

В конце концов ты всегда можешь написать врапер повер C библеотике а там уже сделать все что хочешь

Хотя да в руби нет scikit learn и других крутых либов
Аноним 30/08/16 Втр 13:01:15 #272 №831140 
Почему все говорят, что руби умирает/умер/умрет? Действительно ли это так? Еще некоторые утверждают, что на руби пишут только хипстеры-старперы. Что вы думаете о этом?
Аноним 30/08/16 Втр 14:37:14 #273 №831233 
>>831140
>все говорят, что руби умирает/умер/умрет?

Кто все?

Языку 21 год с чего ему сейчас умирать?

Сходим посмотрим код https://github.com/ruby/ruby/commits/trunk тоже живой.

Не давно Matsumoto о ruby 3 говорил, так что живем

>что на руби пишут только хипстеры
А я говорю что все кто на php пишут гавно кодеры!

>старперы

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

а вобще читай тред
Аноним 30/08/16 Втр 14:39:45 #274 №831235 
>>831140
Еще кстати https://github.com/trending/developers/ruby
Аноним 30/08/16 Втр 15:53:09 #275 №831277 
Анон, нужен совет. В приложении планируется просто гора связей many-to-many. Для связующих таблиц иногда будут нужны дополнительные поля, иногда нет, но в целом мне больше по нраву определение has_many :through, поэтому в любом случае для каждой связи будет отдельная модель. Хочу заюзать сразу 2 антипаттерна: сделать для всех связей 1 таблицу с использованием single table inheritance и определением полиморфных ассоциаций для обеих сторон связи. Я готов смириться с тем, что контроль целостности на уровне БД пойдет по пизде (нет внешних ключей), поясните за другие подводные камни?
Аноним 30/08/16 Втр 16:54:40 #276 №831316 
>>831277
>single table inheritance и определением полиморфных ассоциаций
Выбери что-то одно. Для STI всё равно нужны дополнительные модели. Тогда в чём профит? Полиморфные же связи для таких целей не очень (их вообще лучше пореже использовать). И да, по пизде у тебя пойдёт при таком подходе и производительность БД. Так что не еби мозги. Если совсем невмоготу пустые модели держать, то используй has_and_belongs_to_many. Хуйню ты хочешь сделать, короче говоря.
Аноним 30/08/16 Втр 16:58:49 #277 №831319 
>>831316
Дополнительные модели нужны там, где будут дополнительные поля. А все связи без дополнительных полей будет обслуживать одна модель. Я не люблю has_and_belongs_to_many, т.к. хочу иметь возможность создавать связь в отдельном контроллере, и, если появятся дополнительные поля, как можно меньше перехуячивать пришлось)
Аноним 30/08/16 Втр 17:09:01 #278 №831323 
>>830921
>ебашь микросервисы и учи докер
Х А Й П
А
Й
П
Аноним 30/08/16 Втр 17:13:19 #279 №831325 
>>831319
Ну ебать, has_and_belongs_to_many он не любит, а одна таблица на все связи его ни капельки не смущает. Когда понадобится в какую-то связующую модель поля добавить, будешь мигрировать миллионы строк данных? У меня тут висит миграция на 36 часов, 18 милллионов строк блять. Вот как раз из-за того, что предыдущий программист был такой наркоман, что вместо создания ассоциаций сделал две независимые модели, а при пересчёте статистики на событие удалял все модели, связанные с этим событием.
Аноним 30/08/16 Втр 17:18:00 #280 №831327 
>>831325
Какая то медленная у тебя база. Или ты одновременно с заполнением полей еще и индексы хуячишь? Вообще, наверное ты прав, но меня очень разражают десятки моделей где нет нихуя кроме 2 связей и одной валидации на уникальность
Аноним 30/08/16 Втр 17:18:40 #281 №831329 
>>831327
На has_and_belongs_to_many не нужна модель. А вот на STI как раз нужны будут модели-пустышки.
Аноним 30/08/16 Втр 17:20:29 #282 №831331 
>>831327
Конечно у меня всё проиндексировано. Я ещё и foreign key на каждую ассоциацию в обязательном порядке делаю. А база у меня Amazon RDS дешёвая, видимо не тянет такую нагрузку единовременную. Приложение же корпоративное, там нагрузка очень мала.
Аноним 30/08/16 Втр 17:21:51 #283 №831332 
>>831329
Я не использую has_and_belongs_to_many, это мои личные тараканы. Для STI мне нужны будут модели только для связей с дополнительными полями. Т.е., у меня будет одна модель, условно Association, в которой две связи: belongs_to :left, polymorphic: true; belongs_to :right, polymorphic: true. И, если понадобятся где то дополнительные поля, то напишу миграцию на добавление этих полей, и создам унаследованную модель. Но это теория, я думаю ты прав что это бред.
Аноним 30/08/16 Втр 17:23:05 #284 №831334 
>>831331
"все проиндексировано" - а нахуя? И если тебе надо добавить поля в таблицу И заполнить их, очевидно нужно добавить индекс только после заполнения
Аноним 30/08/16 Втр 17:24:47 #285 №831336 
>>831332
Тут думать не надо. Ты протрезвей или отойди, смотря под чем ты, и прочитай ещё раз, что ты предложил.

>>831334
Потому что у меня регулярно обновления статистики происходят, а статистика на одно событие - это тысячи строк в пяти таблицах.
Аноним 30/08/16 Втр 17:32:27 #286 №831343 
>>831336
Я могу ошибаться, но даже при таком раскладе, если у тебя дешманский сервер куча индексов только замедляет приложение (все равно их в ОЗУ все нельзя удержать). Я вообще не создаю индексы (ну кроме индексов на ассоциации) пока не увижу что приложение тормозит. Был в моей практике случай, когда таблица, выборка по которой содержала просто чудовищный объем вычислений (если заинлайнить все созданные мной в БД процедуры, получилось бы пару тысяч строк форматированного SQL кода) показывала приемлемую производительность ВООБЩЕ без единого индекса.
Аноним 30/08/16 Втр 17:34:33 #287 №831344 
>>831343
Я более чем уверен, что на Amazon RDS нет проблем с ОЗУ. Индексы нужны потому что операций чтения много больше, чем записи.
Аноним 30/08/16 Втр 21:22:59 #288 №831501 
>>831233
>Не давно Matsumoto о ruby 3 говорил
А что если к тому времени, когда я закончу учить руби выйдет руби 3? Получится, что я зря учил?
Аноним 30/08/16 Втр 21:42:28 #289 №831529 
>>831501
С таким подходом тебе лучше пойти на стройку

Не чего не зря, поймешь разницу и все + с каждой новой версияй выходят новые плюшки что не учить не чего?
Аноним 30/08/16 Втр 22:03:44 #290 №831554 
>>831501
Да. Лучше учи Haskell. В этом году как раз вышла свежая 8-я версия, ее хватит надолго. Еще твои внуки пользоваться будут. Сейчас каждый школьник учит раби, а потом выходит новая версия и он не знает что с ней делать. На Haskell и конкуренция пониже, и зарплаты повыше, и сам язык понятнее. Если никогда не занимался программированием, то начинать лучше всего с Haskell. Работы полно, платят отлично. По книгам. Если есть хоть немного знаний программирования, читай это: http://www.ozon.ru/context/detail/id/30425643/ Если совсем новичок, пойдет эта книга: http://www.ozon.ru/context/detail/id/28346038/ Ну и куча онлайн-учебников. Вот, например: https://anton-k.github.io/ru-haskell-book/book/home.html Хороший учебник, всё расписано подробно. Сам по нему учился. Рекомендую.
Аноним 30/08/16 Втр 22:17:01 #291 №831574 
>>831501

ну пойдешь поддерживать какой-нибудь легаси код, где еще рельса три точка ноль крутится, и норм =)))
Аноним 30/08/16 Втр 22:20:59 #292 №831577 
>>831554
Неужели кто то еще ведется на эту толстоту?
Аноним 30/08/16 Втр 22:22:14 #293 №831579 
>>831577

Прав, в треде про буби нужна паста про эликсир, тогда будут вестись, инфа сто сорок восем процентов.
Аноним 30/08/16 Втр 22:25:53 #294 №831583 
>>831529
Я просто подумал, что это будет крупное обновление, которое несет в себе много изменений и мне придется чуть ли не новый язык учить.
Аноним 31/08/16 Срд 00:18:01 #295 №831657 
>>831583
Таких будт и много пока Руби 3 выйдет кучу всего появиться

Если сейчас rails 5 ты же не будешь ждать 6 тока чтоб не учить снова.

Вообще чем больше учешь тем лучше

>>831554
Жирно то как прям толсто, я сейчас живу в Европе был тут на конфе для хаскел, народу 20 человек у всех это хобби

В компаниях он нах не нужен, если учить то тока для себя (ps сам начинал тем летом)
Аноним 31/08/16 Срд 00:52:06 #296 №831668 
>>831657
>был тут на конфе
Ясное дело, ведь конфы это для социоблядков-бездельников. Настоящий Haskell-программисты в это время работали. Над своими личными или коммерческими проектами. Нет времени на петушиную социовозню.
Аноним 31/08/16 Срд 02:35:03 #297 №831707 
>>831668
>своими личными или коммерческими
вот кстати ни разу не встречал ни одного проекта, ну кроме вайпалки очкопетуха
Аноним 31/08/16 Срд 10:57:40 #298 №831816 
>>831668
лол какой у тебя стаж програмирования чтоб такую х нести? скажеи еще на highload одни мудаки и вообще это все пустое трата время
Аноним 31/08/16 Срд 13:21:39 #299 №831911 
Аноны, можете о какой асинхронщине рассказать из сервер фреймворков?
Аноним 31/08/16 Срд 13:26:14 #300 №831914 
>>831911
А тебе зачем?
Аноним 31/08/16 Срд 13:56:14 #301 №831929 
>>831914
for fun
Аноним 31/08/16 Срд 18:13:52 #302 №832123 
>>831911
А что рассказывать? Rails + ActionCable или Sinatra + EventMachine. Да или что угодно + EventMachine.

Вот поверх EventMachine что-то пишут:
https://github.com/postrank-labs/goliath

Вот заброшенная штука, но можешь код посмотреть:
https://github.com/raggi/async_sinatra

Puma, если нужен многопоточный веб-сервер.
Аноним 31/08/16 Срд 18:27:11 #303 №832134 DELETED
>>818850 (OP)
у нас появилась конфа http://gz9.ru/w3Ak
Аноним 31/08/16 Срд 19:01:35 #304 №832166 
>>832123
Ничего не скажу за ивентмашин, но какое блядь отношение имеют рельсы и actioncable к асирхронщине? И тем более причем тут пума?
Аноним 31/08/16 Срд 19:53:51 #305 №832207 
>>832134
Нахуй идите со своим говном. Пожаловался.
Аноним 31/08/16 Срд 19:56:42 #306 №832208 
>>832166
>какое блядь отношение имеют рельсы и actioncable к асирхронщине
В обсуждениях в вебе веб-сокеты и асинхронщина рядом идут почему-то.
Аноним 31/08/16 Срд 20:21:48 #307 №832229 
>>832208
Отправка сообщений по вебсокетам действительной асинхронная, но это не делает асинхронным само приложение, особенно работу с БД.
Аноним 31/08/16 Срд 21:02:41 #308 №832287 
14726665613110.png
Анон, помоги инвалиду выбрать язык и направление для фриланса. С чего стоит начинать? Какие основы нужно знать? В каком порядке учить?

Английский знаю

Аноним 31/08/16 Срд 21:04:07 #309 №832290 
>>832287
Извиняюсь, промахнулся.
Аноним 31/08/16 Срд 23:35:42 #310 №832479 
>>832287
Идешь в яндекс вбиваешь свой мухасранск и смотришь что ишиут из этого делаешь список потом смотрешь, перспекитвы

Думаю сегодня в вебе нужно тока HTML (jade) - CSS (в виде SASS) и JS больше не нужно, потому можешь python или ruby для сервака выучить и все будет норм
Аноним 31/08/16 Срд 23:37:31 #311 №832480 
>>831911
Ты скажи цель, для чего, так как тебе уже кинули и EV и Пуму страна что про стреды не сказали в Руби, скажи что хочешь сделать потом поговорим
Аноним 01/09/16 Чтв 11:08:31 #312 №832633 
>>832480
>страна что про стреды не сказали в Руби
Все знают, что за тредами надо в JRuby (production-ready) или Rubinius (есть примеры использования в production, но редко, в основном боятся, наверное).
Аноним 01/09/16 Чтв 12:15:13 #313 №832658 
>>832633
Если у тебя дошло до JRuby то можно подумать переписать этот кусок или закинуть его в Scala или еще в что (тот же EM), так что не думаю что он на такой стадии
Аноним 01/09/16 Чтв 18:34:30 #314 №832941 
>>832658
Переписать проще, чем сменить среду выполнения и заменить некоторые гемы?
Аноним 01/09/16 Чтв 22:26:44 #315 №833214 
14727580050110.png
Пацаны, что за хуйню пишут в Refactoring: Ruby edition

Есть пикрелейд, страница 124 Chapter 6 Composing Methods

Суть исследуемого вопроса в том,что параметры переданные в метод могут мутировать. Т.е. передал строку-переменную содержащую 'aaa', добавил в эту строку символ через сообщение << а в этом же методе, и уже _вне_ метода состояние строки будет 'aaaa'. А вот если в методе создал новый-объект строку на месте старой, то вне метода будет все тоже состояние 'aaa' для строки. Ну кто не понял, читайте книжку, суть не в этом.

Суть в том, что для решения проблемы, автор предлагает использовать операцию присваивания (см. картинку), тут и заключается подвох, ведь хуита точно также разрешает мутирование состояния для самого присваемого объекта. Смотри код http://ideone.com/5c2yrD

Выход, очевидно в использовании метода dup

http://ideone.com/t8M26F

Тут нужно сделать пометку, что в случае с циферками передаваемыми в метод (как у автора в примере все будет нормально), так как для примитивов работает своя магия передачи параметров. Хотя как это херота будет себя вести для бигнам, надо еще проверить, хм интересный вопрос.

Теперь собственно, вопрос есть ли нормальные книги по рефакторингу на рубях, или мне нужно за этим автором-чудаком каждое слово проверять?
Аноним 01/09/16 Чтв 22:46:22 #316 №833228 
>>833214
Да уж, пример очевидно уебанский. Может просто редактура пропустила ошибку (отсутствие dup)? Просто вряд ли ошибка по незнанию, даже новичок такую не допустит, а уж если человек книгу взялся писать, то тем более.
Аноним 02/09/16 Птн 05:15:56 #317 №833341 
>>833214
Причем тут вообще мутирование? Это как бы очевидно, что мутируемые объекты могут изменятся внутри функции, и если это поведение не желательно, нужно использовать dup или не мутирующие операции. Суть этого примера в другом: никогда не производить присваивание параметрам функции - это может сбить с толку человека, читающего функцию в будущем:
def some_method(arr)
# какой то код
arr = arr.join(', ')
# какой то код
# в этом месте arr - массив, или строка? Как узнать это, не читая весь код функции?
# какой то код
return arr
Аноним 02/09/16 Птн 05:52:04 #318 №833343 
14727847249680.png
>>833341

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

> The reason I don’t like this comes down to lack of clarity and to confusion between pass by value and pass by reference. Ruby uses pass by value exclu-
sively (see later), and this discussion is based on that usage.

И дальше книге рассматривается мутабельность параметра (cм. картинку).

Ну а то что, может быть изменена в жопе мира это совершенно другой паттерн рефакторинга и о нем речи нет. С таким же успехом можно завести локальную переменную, изменить ее и через 20 строк снова вспоминать что там хранится в этой локальной переменной. Один из путей рефакторинга кстати это паттерн Extract Method.
Аноним 02/09/16 Птн 05:58:55 #319 №833344 
>>833343

не говоря уже о том, что просто-напросто назвать переменную, что будет хранить строку как «arr» может только совсем уж конченный чудак.
Аноним 02/09/16 Птн 06:12:27 #320 №833345 
>>833343
Избегание присваивания параметру функции - это никакой не паттерн рефакторинга. Этого (присваивания) не должно вообще никогда происходить. А пример с arr натянутый, да.
Аноним 02/09/16 Птн 06:16:22 #321 №833346 
>>833345

> Избегание присваивания параметру функции - это никакой не паттерн рефакторинга.

Нет, это считается паттерном ->

https://sourcemaking.com/refactoring/remove-assignments-to-parameters

У тебя какие-то свои представления, что паттерн, а что нет.
Аноним 02/09/16 Птн 13:49:36 #322 №833506 
Как к вам вкатиться с нуля? В шапке ничего про это не нашел
Аноним 02/09/16 Птн 14:08:51 #323 №833516 
>>833506
https://www.codecademy.com/learn/ruby

После приходи
Аноним 02/09/16 Птн 18:11:13 #324 №833722 
>>833516
Сначала http://tryruby.org
Потом уже CodeAcademy
Аноним 02/09/16 Птн 21:44:00 #325 №833939 
>>833722
да и так можно
Аноним 03/09/16 Суб 13:45:28 #326 №834338 
Как мне сделать такое: пользователь входит через oauth, и если это происходит впервые то надо запросить у пользователя ввести дополнительные данные, при этом аккаунт должен быть ограниченным до заполнения этих самых данных — т.е. он не может ничего делать на сайте и его редиректит на страницу ввода этих самых данных.
Аноним 03/09/16 Суб 16:50:04 #327 №834497 
>>834338
before_filter в ApplicationController, который проверяет нужные тебе атрибуты модели User. Если не хватает, то redirect_to на нужную страницу, и возвращает false из метода, чтобы action и последующие коллбеки не вызывались.
Аноним 04/09/16 Вск 11:04:18 #328 №834986 
>>834497
Спасибо, разобрался.
Аноним 04/09/16 Вск 12:03:28 #329 №835001 
Здравствуй,анончик.
Я новичек,учу рельсы по thinkenitica(кажется так),там вся разработка идет на постгрес.
но при попытке сделать rake db:create:all мне выдает ошибку
FATAL: role "user" does not exist
гуглил на стэкофверлоу ,но там все говорят,что мол надо создать роль и прочее.
где мне создать роль? роль в системе ил роль в проекте?
Аноним 04/09/16 Вск 13:31:52 #330 №835058 
>>835001
роль в базе данных
sudo -u postgres createuser -s username
Аноним 04/09/16 Вск 14:02:40 #331 №835082 
>>835058
а можно где то ,кроме офф туториалов,найти инфу по потгрес и монго?
что бы на уровне обвчного разраба?
Аноним 04/09/16 Вск 14:04:43 #332 №835084 
>>835082
Полно туториалов
https://www.youtube.com/watch?v=xaWlS9HtWYw
Аноним 04/09/16 Вск 14:06:13 #333 №835085 
>>835084
Благодарю. Жаль на русском инфы мало,а то я конечно пишу-читаю на английском,но в с листингом все езе дерьмо.
Аноним 04/09/16 Вск 15:59:54 #334 №835142 
https://ideone.com/JpYZtC
Вопрос: почему 'z' не заменяется на 'a'?
Аноним 04/09/16 Вск 16:23:18 #335 №835174 
>>835142
ты делаешь присваивание локальной переменной
Аноним 04/09/16 Вск 16:25:08 #336 №835175 
>>835174
Ну это я понял. Как мне лучше поступить в данном случае?
Аноним 04/09/16 Вск 16:29:16 #337 №835183 
>>835174
Всё, я разобрался. Спасибо за указание ошибки!
Аноним 04/09/16 Вск 16:54:19 #338 №835226 
>>835175
abc = ('a'-'z').to_a.join
from = abc + abc.upcase
to = abc.from(1) + 'a' + abc.from(1).upcase + 'A'
your_string.tr(from, to)
Аноним 04/09/16 Вск 17:02:08 #339 №835243 
>>835226
тьфу, глупость сморозил. конечно же так:
your_string.tr('A-Ya-yZz', 'B-Zb-zAa')
Аноним 05/09/16 Пнд 06:29:34 #340 №835749 
Как ебучий Slack мокать? С VCR ниполучается
Аноним 05/09/16 Пнд 14:54:44 #341 №835921 
>>835749
А зачем? Ты готовую библиотеку для доступа к API используешь? Если да, то она уже протестирована, мокай вызовы к библиотеке.
Аноним 06/09/16 Втр 18:29:01 #342 №836650 
А зачем нужны гемсеты если есть бандлер?
Аноним OP 06/09/16 Втр 18:51:24 #343 №836656 
>>836650
Гемсеты и есть фича бандлера (или может в rubygems тоже что-то такое есть?). Но зачем нужны я не знаю. Не пользуюсь ими. Предполагаю, что нужно для того, чтобы ограничить команды оболочки, доступные вне директории проекта.
Аноним OP 06/09/16 Втр 18:52:16 #344 №836657 
>>836656
Не только команды оболочки, но и подключаемые через require библиотеки, конечно.
Аноним 07/09/16 Срд 16:42:02 #345 №837329 
подскажите, при создании структуры в руби, записывается как
a = Struct.new(:val1, :val2)
а затем можно обращаться к этим полям как
val1, val2
Это символы или что это вообще за хуйня?

Аноним 07/09/16 Срд 16:45:48 #346 №837332 
>>837329
Struct.new(:val1, :val2) - это то же самое, что:
Class.new do
def initialize(val1, val2)
@val1 = val1
@val2 = val2
end
end
Аноним 07/09/16 Срд 16:46:37 #347 №837334 
>>837332
а, ну и аксессоры еще создаются, да
Аноним 07/09/16 Срд 17:29:13 #348 №837388 
>>837332
о как! где вы только все это узнаете
Аноним OP 07/09/16 Срд 17:39:15 #349 №837400 
Написал resource pool для сессий Capybara, зацените:
http://pastebin.com/JzxcQSpV
Аноним 07/09/16 Срд 18:12:13 #350 №837421 
>>837334
можете еще про метод класса подсказать
class machine < Struct.new(expression)
def step
self.expression = expression.reduce
end
end
Не понял, почему при вызове метода мы пишем expression.reduce, а при изменении члена класса получаем доступ через self
Аноним 07/09/16 Срд 18:20:55 #351 №837431 
>>837421
если при присваивании опустить self - ты сделаешь присваивание локальной переменной, вот и весь секрет
Аноним 07/09/16 Срд 18:27:05 #352 №837437 
>>837431
охуеть, а типа expression.reduce это уже не у локальной?
что-то сложно! т.е. верно и так писать
self.expression = self.expression.reduce?
Аноним 07/09/16 Срд 18:38:24 #353 №837441 
>>837437
Верно и так писать, но если expression не может быть именем локальной переменной (а затенять локальными переменные видимые мтоды - не очень идея), то это избыточно
Выражение слева от знака '=' всегда выполняют присваивание локальной переменной, если объект, метод attr= которого мы вызываем, не указан явно.
Выражение справа от знака '=' - ищет указанное имя сначала в списке объявленных локальных переменных, если объект не указан явно, потом уже в списке видимых методов. Локальная переменная считается объявленной, если в коде метода до ее вызова ей было произведено присваивание (даже если присваивание фактически не было выполнено, например скрыто в не прошедшей проверку ветке if)
Аноним 07/09/16 Срд 19:05:37 #354 №837467 
>>837441
вроде понял, спасибо.
Аноним 07/09/16 Срд 19:51:42 #355 №837524 
>>835921
Замокал уже через omniauth-slack. Только так можно было форму автризации slack замокать.
Аноним 08/09/16 Чтв 18:24:47 #356 №838270 
Хочу написать скрипт, который выводит в консоль непрочитанные сообщения в вк. Какие-нибудь гемы посоветуете?
Аноним 08/09/16 Чтв 19:14:45 #357 №838304 
14733512855180.png
>>838270

>Какие-нибудь гемы посоветуете?

Смотри пикрелейд, но сорьки не могу вставить текстом, сосачик нервно реагирует на спам-слова.

Я бы прошелся по этим гемам и посмотрел, насколько там интерфейс подходит под твои хотелки.
Аноним 09/09/16 Птн 00:29:59 #358 №838654 
>>838270
Я пользуюсь https://rubygems.org/gems/vkontakte_api
Аноним 12/09/16 Пнд 11:43:17 #359 №840521 
Какие вообще годные есть http библиотеки ? Нужно что-то вроде request в ноде, который и json сам распарсит и куки в нем не через жопу ставятся.
Аноним 12/09/16 Пнд 11:54:32 #360 №840522 
Сап, рубибляди. Поясните мне, чем руби лучше питона.
И особливо - поясните мне за потоки. Я вот нихуя не понял - из-за GIL чтоли всегда выполняется только один поток, т.е к примеру на восьмиядерном процессоре прога будет работать в 8 раз медленнее чем могла бы? Или я чего-то не так понял?

Подумываю вкатиться.
Аноним 12/09/16 Пнд 16:23:04 #361 №840669 
>>840522
> Сап, рубибляди. Поясните мне, чем руби лучше питона.
Ничем. Укатывайся.
Аноним 12/09/16 Пнд 16:24:04 #362 №840670 
>>840669
Чего ты полыхнул? Я серьезно - неужели никто не пишет сразу на двух и не может их сравнить?
Аноним 12/09/16 Пнд 18:38:46 #363 №840727 
>>840670
Ты даже не понимаешь что такое GIL, если они начнут тебе объяснять тонкости и разницу, ты все равно нихуя не поймешь, а если бы понимал хоть что-то выше лаба1.pas, то такие тупые вопросы бы не задавал и сам нагуглил ОГРОМНЫЕ СТАТЬИ С ОТВЕТАМИ И СРАВНЕНИЯМИ НА ВСЕ ТУПЫЕ ВОПРОСЫ.

мимокрок
Аноним 12/09/16 Пнд 18:45:59 #364 №840733 
>>840727
А какие вопросы тут задавать? На умные - не ответят.
Я уже нагуглил статью на хабре, потому и спрашиваю.
Аноним 12/09/16 Пнд 18:49:02 #365 №840737 
>>840733
Спрашивать конкретно не пробовал?
Никто не хочет тебе писать очередную статью на тему "чем отвертка лучше отвертки", просто потому что "ты спросил" когда есть готовые статьи с кучей комментов и уточнений.

Че за даунская привычка. Чем черный лучше синего, мне сочинение на 7к знаков пожалуйста.
Аноним 12/09/16 Пнд 18:51:44 #366 №840740 
>>840737
Чего ты такой агрессивный, мань?
Во-первых - ты смешал в кучу 2 вопроса.
Во-вторых - по поводу сравнения, все сравнения питона и руби что я нашел - оче старые. А я хотел узнать актуальную ситуацию на питон 3.5 и 2.3.
Аноним 12/09/16 Пнд 19:01:25 #367 №840747 
>>840740
>задает тупейшие вопросы
>по первой ссылке гугла огромные статьи на wikivs 2016 года и на подробное сравнение 2014 года, с тех пор нихуя не поменялось
>почему ты такой агрессивный

Ну хуй знает. У мамы спросишь когда жепку тебе подотрет в очередной раз. Без обид, но какие вопросы, такие и ответы.
Аноним 12/09/16 Пнд 19:04:22 #368 №840753 
>>840747
Ты даун? Этот тред - чтобы задавать вопросы, не?
Или тебе двач остатки мозга выел?
Аноним 12/09/16 Пнд 22:50:58 #369 №840937 
>>840522
>И особливо - поясните мне за потоки. Я вот нихуя не понял - из-за GIL чтоли всегда выполняется только один поток, т.е к примеру на восьмиядерном процессоре прога будет работать в 8 раз медленнее чем могла бы?

Да.
Аноним 13/09/16 Втр 19:25:22 #370 №841401 
>>818850 (OP)
>Есть ли у руби русское коммьюнити?
>Нет. Вернее есть, но оно протухло и там полно людей у которых чсв высоко.
>>840747
>>840737
Какие то агрессивные петушки в этом вашем оу коммьюнити
Аноним 14/09/16 Срд 03:34:22 #371 №841599 
>>840522
>Поясните мне, чем руби лучше питона.
Принципиально ничем. Одно и то же.
По вкусу - синтаксисом.
По задачам - больше библиотек для веба.
>Я вот нихуя не понял - из-за GIL чтоли всегда выполняется только один поток
Потоки в руби нативные. Да, атомарные инструкции не могут выполняться одновременно. При ожидании одним потоком ввода-вывода модет выполняться другой поток. В JRuby и Rubinius GIL отсутствует.
>т.е к примеру на восьмиядерном процессоре прога будет работать в 8 раз медленнее чем могла бы? Или я чего-то не так понял?
На восьмиядерном процессоре программа будет выполняться на всех восьми ядрах, но GIL это не отменяет. Если потоки занимаются вводом-выводом, то все ядра будут задействованы полноценно. Если вычислениями/бизнес-логикой, то только одно.
>>840521
>Какие вообще годные есть http библиотеки?
RestClient, HTTParty
>Нужно что-то вроде request в ноде, который и json сам распарсит и куки в нем не через жопу ставятся.
Не знаю. Смотри тут:
https://www.ruby-toolbox.com/categories/http_clients
Аноним 15/09/16 Чтв 19:37:28 #372 №842522 
Есть две модели связанные отношениями has_one - belongs_to

Пусть будет пример с rusrails

http://rusrails.ru/active-record-associations#svyaz-has_one

Как сделать так, чтобы из Account можно было бы обращаться к атрибутам Supplier как к своим собстенным?

То есть Supplier содержит атрибут name
Я хочу, чтобы работало такое: account.name = 'name'

Аноним 16/09/16 Птн 04:03:22 #373 №842753 
>>842522

http://apidock.com/rails/Module/delegate
Аноним 17/09/16 Суб 18:25:22 #374 №843499 
>>842522
Делегаты, да, про них новичок может не знать. Но блять, рубисты что, уже методы написать не могут руками?

def account
supplier.account if supplier
end

def account=(value)
supplier.account = value if supplier
end

Надо ещё учесть, что присваивание и сохранение родительской модели не сохранит дочернюю модель, если не установлено has_one :supplier, autosave: true

На наличие supplier стоит проверять даже если есть валидация, ибо присваивание может произойти до валидации, и выкинет исключение. Можно, конечно, устанавливает это поле в after_initialize и after_find, но я не советую этого делать (как и использовать коллбеки AR в принципе). Но это уже дело вашего подхода.
Аноним 17/09/16 Суб 18:46:55 #375 №843506 
>>843499

> не советую этого делать (как и использовать коллбеки AR в принципе).

каллбеки поменял на Proxy паттерн ?
Аноним 17/09/16 Суб 19:05:29 #376 №843523 
>>843506
Я сейчас в поисках, на что их поменять. Впечатлился Ecto из Эликсира. Там все действия с моделью (даже валидации) реализуются как композиция простых методов. Принимает метод на вход неизменяемый инстанс модели, возвращает другой неизменяемый инстанс её.
Аноним 17/09/16 Суб 19:05:53 #377 №843524 
>>818850 (OP)
Стоит ли сейчас в 2016 году учить Ruby / Rails ? Есть большой опыт работы с Python / Django, Golang, JS.
Аноним 17/09/16 Суб 19:12:16 #378 №843530 
>>843506

> каллбеки поменял на Proxy паттерн

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

https://ideone.com/0eCEZu

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


Аноним 17/09/16 Суб 19:15:23 #379 №843533 
>>843524
>Есть большой опыт работы с Python / Django, Golang, JS.
Опыт коммерческий? Если нет, то хоть 10 технологий выучи, зарабатывать ты не начнёшь. Если да, то скорее всего тебе имеет смысл развиваться в своём направлении. Руби и Рельсы хороши для веба. Стоит, если очень нравится Руби и планируешь писать на нём лет пять минимум. Но как могут нравится Рельсы я не понимаю (впрочем, Django тоже то ещё удовольствие). Ну и экосистема рельс (сторонние библиотеки) богаче джанговской, конечно, работа эффективнее. За несколько лет коммерческой разработки это вложение может окупиться.
Аноним 17/09/16 Суб 20:19:30 #380 №843553 
>>843533
Да, опыт коммерческий конечно. Сдавал проекты как фулстэк разработчик, так и как бэк разраб
Аноним 17/09/16 Суб 20:38:19 #381 №843568 
>>818850 (OP)
аноны, рубисты!
говорят что хайп на руби прошел как когда то на пхп. что мол старые сайты еще поддерживаются, а новые пишутся на других языка (го). что скажете?
Аноним 17/09/16 Суб 20:39:25 #382 №843570 
>>843568
и прочитал это не на двощике, а в конфе, там американец и немец обсуждали веб
Аноним 17/09/16 Суб 21:31:36 #383 №843606 
>>843568
go это окашка по сравнению с японской тачкой руби. для бомжей сойдет, хипстеры моду и не на такую херню устраивали
Аноним 17/09/16 Суб 22:06:53 #384 №843630 
>>843606
Оно конечно говно, но разгоняется как нормальная машина, а не волочится по 10км/ч как крутая епонская тачила.
Аноним 18/09/16 Вск 10:14:06 #385 №843827 
>>843568
ты прав, все ускакали на эликсир
Аноним 18/09/16 Вск 19:12:15 #386 №844085 
смотрим https://www.twitch.tv/programming
Аноним 19/09/16 Пнд 00:07:31 #387 №844240 
>>843630
Ну где уж там волочится-то? Проектов, в которых такие-то скоростя нужны - по пальцам посчитать.
Аноним 19/09/16 Пнд 09:26:41 #388 №844346 
руби еще не умер?
Аноним 19/09/16 Пнд 12:39:27 #389 №844406 
>>844346
Да.
Аноним 20/09/16 Втр 08:03:59 #390 №844823 
Пожалуйста, щбновите шапку для рельс 5.0 Большая частьь ресурсов и подкастов идет для рельс 4+. И включите в шапку https://rubyplus.com/articles - там есть много статей, в том числе и по пятым рубям
Алсо к книгам по рельсам я бы добавил Learning Rails 5 и Agile web development with Rails 5.
Оп, не будь хуем, сделай up-to-date шапку
Аноним 20/09/16 Втр 19:38:06 #391 №845073 
>>844823
Гитхаб мазафакер, ду ю юз ыт?
Аноним 20/09/16 Втр 23:38:46 #392 №845190 
Парни, кто может купить и слить сюда ЭТУ ЗАМЕЧАТЕЛЬНУЮ КНИГУ ОТ THOUGHTBOT? (пусть она пока не написана до конца, но мне бы хватило только начала)

https://gumroad.com/l/write-yourself-a-roguelike
Аноним 21/09/16 Срд 06:06:23 #393 №845283 
>>818850 (OP)
а ведь когда то такой попсовый язык был...
учите го, господа
Аноним 21/09/16 Срд 07:47:09 #394 №845291 
14744332295640.png
>>845190

Но, зачем нужна книга? Садись и пиши, так интереснее, чем повторять за какими-то Васянами.
Аноним 21/09/16 Срд 09:47:20 #395 №845317 
>>845291
Ты тоже с первого для программирования начал сам писать что-то осмысленное?
Аноним 21/09/16 Срд 09:53:50 #396 №845321 
>>845317
А зачем тебе с первого дня программирования писать рогалики?
Аноним 21/09/16 Срд 10:39:52 #397 №845338 
>>845073
ноуп, айм карентли юзинг битбакет
алсо, фак ю бич соси кирпич
Аноним 21/09/16 Срд 11:27:52 #398 №845362 
>>845338
Ну и гтфо. Контрибьют о дай.
Аноним 21/09/16 Срд 14:53:58 #399 №845417 
>>845317

конечно, ведь копировать код из книжки в компутер — это самое унылое занятие в галактике. Зато придумывать велосипеды — весело. Хуйня на пикрелейтед, бтв родилась когда решил напрограммировать compositор, о котором вычитал в какой-то шибко умной книжке, потом чёт затянуло и генератор йоба-предметов перерос в отдельный проект.
Аноним !!fuyn/Mm0/k 21/09/16 Срд 16:34:23 #400 №845467 
Рубаны, это ваш ОПчик. Спасайте. Работаю фулл-тайм, но остался заказ на апворке, который ппц как надо сделать успешно, чтобы сохранить хорошие отношения с заказчиком. Работы не больше чем на 50 часов. 50к заплачу. Кому интересно - скайп krowpu, пишите.
Аноним !!fuyn/Mm0/k 21/09/16 Срд 16:37:38 #401 №845469 
>>844823
>Оп, не будь хуем, сделай up-to-date шапку
Сплю по шесть часов в сутки, работаю фулл-тайм, висит заказ с апворка ещё, который никак не могу сделать. Вообще не до шапки. Присылайте пулл-реквесты https://github.com/meoweg/2ch-pr-ruby
Аноним 21/09/16 Срд 20:01:19 #402 №845623 
Подскажите, как в консоли считать несколько чисел, которые находятся в одной строке?
Например: 1 5 8 7
Как их считать и записать в отдельные переменные?
Аноним 21/09/16 Срд 21:44:41 #403 №845719 
>>845190
>In Progress
>Not Yet Written
Книги-то почти нету, введение да полторы главы
Анон, иди лучше на roguebasin wiki, там есть целый раздел, посвященный программированию рогаликов, да ещё и бесплатно
Аноним 21/09/16 Срд 23:22:39 #404 №845790 
извините, но почему в 2к16 еще кто то учит руби, когда есть божественный Go?
Пик руби это 2008-2011 годы, даже пхп в 2к16 выглядит пиздатее
Аноним 21/09/16 Срд 23:32:07 #405 №845794 
>>845790
илюха ты заебал
Аноним 21/09/16 Срд 23:49:58 #406 №845811 
>>818850 (OP)
Аноны, это не совсем относится к руби, но так как я на нем пишу то спрошу тут.
Учусь в универе, где преподают ебанное с++ главным и просто си как второй яп. Помимо этого еще мимолетом делаем всякую хуйню на питоне и перле.
Так вот проблема в том, что с++ напрочь выбивает из головы руби и в итоге какая то каша. Руби бросать не хочется, но и по учебе проебываться нельзя никак. Было ли у вас такое и как сделать, чтобы и руби из памяти не вылетел и плюсы на уровне универских лаб знать?
Аноним 22/09/16 Чтв 04:07:25 #407 №845900 
>>845811
Занимайся плюсами и сишкой, учи алгоритмы. Руби всегда успеешь.
Аноним 22/09/16 Чтв 05:50:49 #408 №845904 
>>845623
s = '1 5 8 7'
numbers = s.split.map(&:to_i) #=> [1, 5, 8,7]
Аноним 22/09/16 Чтв 05:57:30 #409 №845905 
14745130505380.png
>>845623
Если формат строки постоянный (например, четыре числа через пробелы), то можно ещё так.
Аноним 22/09/16 Чтв 06:00:27 #410 №845906 
14745132277330.png
>>845623
Более удобный вариант - именованные группы в регекспах.

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

Вот удобный онлайн-инструмент для составления Руби-регекспов: http://rubular.com
Аноним 22/09/16 Чтв 11:51:56 #411 №846003 
>>845790
Какой к черту Го сравнил скритповый язык с системным иди на хуй даун
Аноним 22/09/16 Чтв 11:52:35 #412 №846004 
>>845790
извините, но почему в 2к16 еще кто то учит Go, когда есть божественный Rust ?!
Аноним 22/09/16 Чтв 14:00:28 #413 №846045 
>>846004
Русту пока рано до "божественного", а го уже вполне себе выстрелил и удачно, потому что используется повсеместно в проектах и стартапах.
Аноним 22/09/16 Чтв 14:20:05 #414 №846053 
>>846045
Жалко людей, которые в угоду бизнесу добровольно обрекают себя на умственную и профессиональную деградацию, вызываемую использованием Го.
Аноним 22/09/16 Чтв 14:59:57 #415 №846077 
>>846053
Ок. Пиши на Haskell после работы, копай Lisp. Кто тебе мешает ? Только вот в продакшене систем на этих языка очень мало. Golang тут офигенно помогает. У него тупой синтаксис, он осознанно тупой. Потому что всем заебало, то что у программиста на Scala например у каждого своя Scala. Там пишут так, что другой разраб не понимает. То же самое бывает и в Ruby. Я молчу про Lisp, где каждый закопается в своих макросах, и изобретает свой Lisp. Я знаю много языков. Мой опыт 11 лет разработки и я выбираю Golang. Потому что его синтаксис тупой и понятный. У него богатая стандартная библиотека, которая отлично справляется с текущими задачами. Пока ты не поймешь, что язык это всего лишь инструмент а не панацея, у тебя будут проблемы. Не важно на чем ты решил задачу. Важно чтобы она была решена качественно и в срок, и в дальнейшем с этим решением не было проблем по поддержке. Вот и все.
Аноним 22/09/16 Чтв 15:19:12 #416 №846083 
>>846077
Я хочу, чтобы решение задач приносило мне удовольствие, написание кода увлекало лаконичностью языка и мощностью его абстракций, поэтому этот язык не выберу никогда.
Ступай в Го-тред, хотя даже там этот язык и его адептов не перестают окунать в дерьмо.
Аноним 22/09/16 Чтв 15:25:28 #417 №846088 
>>846083
Инфантильный ребенок
Аноним 22/09/16 Чтв 15:49:45 #418 №846100 
>>846077

> Потому что всем заебало, то что у программиста на Scala например у каждого своя Scala.

Это вранье, кек. Ты вот пришел в тред, где концепция языка — иметь возможность решать задачу многими путями:

> Yukihiro Matsumoto: Ruby inherited the Perl philosophy of having more than one way to do the same thing. I inherited that philosophy from Larry Wall, who is my hero actually. I want to make Ruby users free. I want to give them the freedom to choose. People are different. People choose different criteria. But if there is a better way among many alternatives, I want to encourage that way by making it comfortable. So that's what I've tried to do. Maybe Python code is a bit more readable. Everyone can write the same style of Python code, so it can be easier to read, maybe. But the difference from one person to the next is so big, providing only one way is little help even if you're using Python, I think. I'd rather provide many ways if it's possible, but encourage or guide users to choose a better way if it's possible.

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

Тут врываешься такой, ты со своим обрубком вместо языка и говоришь такой, а давайте вы все пойдете нахуй и будете писать, так как мне нравится, потому что я так сказал. Нет. Сам иди.
Аноним 22/09/16 Чтв 16:08:16 #419 №846106 
>>846088
Сумрачный гений сириус-бизнеса?
Аноним 22/09/16 Чтв 16:32:53 #420 №846119 
>>846083
Ну и дальше играй в программирование.
Аноним 22/09/16 Чтв 16:34:37 #421 №846123 
>>846100
Ниши у Ruby и Golang разные. Но вот почему то все чаще я вижу как к живому проекту на Ruby / Rails все чаще дописывают какие-то части на Golang. Наверно потому что модный и лаконичный руби где-то не справляется и лажает на нагрузке. Все чаще на Ruby / Rails вакансии я вижу плюсом знание Golang. Почему же так ? Ведь Ruby такой хороший ?
Аноним 22/09/16 Чтв 16:55:01 #422 №846141 
>>846119
>Ну и дальше играй в программирование.
>Сказал любитель наследника Бэйсика.
Всё ясно. Иди доказывать нужность своего языка в другом месте.
Аноним 22/09/16 Чтв 19:21:03 #423 №846209 
>>845906
>>845905
Благодарю. Оказывается, регекспы - отличная штука
Аноним 23/09/16 Птн 03:08:21 #424 №846502 
как сделать класс чтобы считалось только внутри определенного диапазона?
банальный пример - аналоговые круглые часы, если от 2 часов дня вычесть 4 часа, то получилось 10 часов или если к 5 часам прибавить 10 то получилось 3 часа
Аноним 23/09/16 Птн 05:17:10 #425 №846514 
>>846502
используй операцию взятия остатка от деления после каждой операции. (any expression) % 12 - всегда даст тебе в результате число в диапазоне 0..11
Аноним 23/09/16 Птн 06:17:09 #426 №846518 
>>846514
ок а если нужно более нестандартное - класс Angle c диапазоном от -179 до 180
то есть прибавив 1 к 180 надо получить -179
Аноним 23/09/16 Птн 06:32:33 #427 №846519 
>>846518
А все, сам догадался.
Аноним 23/09/16 Птн 13:54:14 #428 №846634 
>>846519

http://pastebin.com/fFiWh8Se
Аноним 23/09/16 Птн 17:24:13 #429 №846764 
>>846634

выдалось пару часиков, оформил под миксин, если кому не лениво (наивный ага) можете озаботится оформлением и тестами и гемчик запилить.
Аноним 23/09/16 Птн 17:25:00 #430 №846765 
>>846764
вот я ниочень, нате линк https://ideone.com/NAjk1s
Аноним 23/09/16 Птн 23:52:28 #431 №847044 
Рубаны а где можно почитать про создание гемов, может есть какая-то небольшая книженция где все подробно расписано ? Конечно можно смотреть и готовые гемы но лучше ведь когда тебе все разжевывают почему лучше делать так а не так.
Аноним 24/09/16 Суб 05:17:27 #432 №847134 
>>847044
http://guides.rubygems.org
Для создания базовых файлов используй команду
>bundle gem your_gem_name
Аноним 24/09/16 Суб 16:37:16 #433 №847366 
Кто-нибудь разобрался с этим ActionCable'ом? У меня какая-то неописуемая проблема, уже заебался гугл терроризировать.
В общем запускаю, как по гайду, кейбл сервер в основом добавляя в конфиг приложения.
Всё вроде-бы ничего, но подключение не устанавливается, в консоль спамит 'Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)' и нихуя не происходит. Отправляю сообщения из консоли браузера, и хоть бы хны, только статус "101" приходит.
Запускаю отдельно кейбл сервер, руками подключаюсь - вроде как работает, а параллельно не хочет.
WTF? И что мне подкрутить чтобы эта ебала заработала?
Аноним 24/09/16 Суб 17:36:45 #434 №847408 
>>847134
Ну это все я смотрел уже. Хотелось бы чего-то более подробного. Например как лучше разбивать выносить функциональность в отдельные модули/классы и т.д.
Аноним 24/09/16 Суб 17:44:24 #435 №847412 
>>847408
Чтобы научиться программировать, нажмите Х.
Аноним 24/09/16 Суб 19:37:44 #436 №847452 
>>847412
Нажал 20 раз, теперь я синьор или тимлид ?
Аноним 24/09/16 Суб 20:16:55 #437 №847465 
Почаны, подскажите что написать на руби после прохождения Рельс Гид с его твитером? что писали вы? борды и таскменежеры не предлагайте плиз!
Аноним 24/09/16 Суб 20:30:23 #438 №847473 
>>847465

кодь все до чего руки доходят кек: сайтик погоды, бложик, кусочек форума; когда надоест рельсошлепство, то гемы пиши — какой-нибудь real_private_method регистратор, например, который работает как обычный прайват + кидает эксепшен если вызываешь его из дочернего класса. Cовсем туго с фантазией? :(
Аноним 24/09/16 Суб 20:34:04 #439 №847477 
>>847473
просто, когда я пишу какие то бесполезные вещи, то нет того азарата, и начинаешь забивать сразу, а когда что то годное есть, пусть даже знаний не хватает, то вхожу прям в раж, начинаю че то гуглить искать пытаться писать, вот так вот, а фантазия да, не особо
Аноним 24/09/16 Суб 22:27:22 #440 №847523 
>>847473
>который работает как обычный прайват + кидает эксепшен если вызываешь его из дочернего класса
Но ведь приват так и работает.
>>847408
>Например как лучше разбивать выносить функциональность в отдельные модули/классы и т.д.
А при чём тут руби и, тем более, гемы?
Читай Стива Макконнелла, Мартина Фаулера и т.д.
Аноним 24/09/16 Суб 22:28:06 #441 №847525 
>>847523
>который работает как обычный прайват + кидает эксепшен если вызываешь его из дочернего класса
>Но ведь приват так и работает.
А, не, туплю.
Аноним 28/09/16 Срд 19:51:22 #442 №848131 
tfw у рубистов так много работы, что нет времени писать в тред
Аноним 29/09/16 Чтв 09:51:03 #443 №848293 
на рутрекере появился курс на ангельском по пятмым рельсам - Udemy Rails 5 essential training
Вышла книга Agile web with rails 5 за 28 бачинских (от the Pragmatic bookshelf)
Алсо, жду от них Rails, Angular, Postgres, and Bootstrap, Second Edition. Скоро должна появиться бета
А после 25го октября должна выйти книга Rails ninjja от SitePoint
Такие дела
Бтв, курс и книгу можно в шапку
Аноним 29/09/16 Чтв 14:02:29 #444 №848325 
>>847366
По видосу от DHH у меня всё работало ок.
Буквально две-три недели назад делал.

https://www.youtube.com/watch?v=n0WUjGkDFS0
Аноним 29/09/16 Чтв 14:23:00 #445 №848329 
>>848318
Обратите внимание на нубовопрос, плиз.
Аноним 29/09/16 Чтв 16:33:31 #446 №848373 
Помогите отрефакторить
Есть 2 пользователя, у них проверяются очки (points). Если первый имеет 30, а второй - 20 - эти очки снимаются у этих пользователей и выполняется действие. Такие же варианты: 25 и 25, 20 и 30.

Я тупо сделал neccessary_points = [[30, 20], [25, 25], [30, 20]]
и делаю
`necessary_points.each do |pair|`
`if (user_points >= pair[0] and sibling_points >= pair[1])`
`user.points -= pair[0]`
`sibling.points -= pair[1]`

но как-то не очень выглядит, почему то кажется, что есть ЭЛЕГАНТНОЕ решение
Аноним 29/09/16 Чтв 16:42:20 #447 №848374 
>>848373
Почему больше-равно ставишь? Уж если конретные пары шатаешь, то и шатай конкретные пары, наркоман.
Аноним 29/09/16 Чтв 17:03:26 #448 №848379 
>>848374
Если у пользователя баллов больше или равно 30 и у его соседа больше или равно 20, то снять эти баллы и дать им конфетку. Что не так?
Аноним 29/09/16 Чтв 17:38:28 #449 №848391 
>>848379
Если сумма юзера и соседа = 50 и у одного из них больше 20. Как тебе?
Аноним 29/09/16 Чтв 22:33:20 #450 №848479 
>>848329
Это тебе в жс-тред. Явно в ангуляре сложность, а не в рельсах
Аноним 29/09/16 Чтв 22:37:43 #451 №848482 
>>848373
>почему то кажется, что есть ЭЛЕГАНТНОЕ решение
Да, например, перестать писать императивную парашу в форме двухсотстрочных if-else или case-when и выразить каждое действие как инстанс класса Action, конструктор которого принимает параметры (user_1_needed_points, user_2_needed_points), а метод #allowed_for?(user, sibling) говорит о возможности совершения действия, ну и конечно #call для выполнения
Аноним 30/09/16 Птн 03:57:11 #452 №848529 
>>848391
Значит у второго меньше 30.
Аноним 30/09/16 Птн 04:00:16 #453 №848530 
>>848482
>Action
Информативное название.
Аноним 30/09/16 Птн 14:44:14 #454 №848549 
>>848373

> Gays.each_slice(2) do |gay1, gay2|
> gay1 + gay2 if gay1.love_enough? && gay2.love_enought?
> end

Вот тебе, пример как можно сделать K R A C U V O

Аноним 30/09/16 Птн 15:50:06 #455 №848584 
>>848549
Готов поспорить, что метод love_enough? состоит из одной строчки, в которой вызывает приватный метод из одной строчки, который в свою очередь наверняка вызывает еще один приватный метод. Да, ты же делаешь короткие _переиспользуемые_ методы, которые в 99% нахуй нигде не нужны кроме 1 места.
Аноним 30/09/16 Птн 15:58:06 #456 №848589 
>>848549
И да, твое решение не работает. Почему ты не передаешь в метод love_enough? конкретного гея? Как метод определяет, кого любит гей? Или у тебя геи любят одновременно всех других геев?
Аноним 30/09/16 Птн 16:24:39 #457 №848597 
>>848584

> Да, ты же делаешь короткие _переиспользуемые_ методы, которые в 99% нахуй нигде не нужны кроме 1 места.

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

Если-таки появляется использовать код более чем в одном методе, это однозначный extract в отдельный метод. Инкапсуляция, бла-бла-бла

Иногда бывает нужно переадресовать сообщение из одного объекта в другой, это очевидный миксин Forwardable.

И наконец, даже если код будет использован в одном месте, но сам метод охуенно сложный, то логично разбить его на простые методы. Никто говно-код в 5-7 вложенных ифов и циклов читать не будет.

> Почему ты не передаешь в метод love_enough? конкретного гея?

Потому что в отличии от тебя умею читать, в >> №848373 Не указана явная зависимость рассчета любви от второго гомосексуала.

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

p.s. И раз уж на то пошло, то гораздо тупее городить абстрактные сущности ради порождения новых инстансов (енти actions), когда ничего не известно о задаче. Вот уж ирония, вынести метод в одну строчку религия не позволяет, но продумать иерархию классов которая таки будет нужна ровно один раз -- это запросто. кловуство, да и только.
Аноним 30/09/16 Птн 16:43:01 #458 №848602 
>>848597
>Если условние короткое
3 оператора - так то нихуя не длинное условие
>(енти actions)
Это другой анон писал. Мне по нраву вариант автора вопроса, с небольшими корректировками
Аноним 30/09/16 Птн 16:59:03 #459 №848609 
>>848602

> 3 оператора - так то нихуя не длинное условие

Только это не значит, что нужно полностью отказываться от однострочников

> Мне по нраву вариант автора вопроса, с небольшими корректировками

Ну так-то если не нравится замес кода в инстансы, то еще есть вариант выноса логики в класс-призрак (синглтон класс), т.е. типа class Users; self.castrate_both?(user1, user2) … end; end; Получится таки-тоже довольно милый и красиво оформленный внешний вызов, а логика таки окажется инкапсулированной.
Аноним 30/09/16 Птн 17:01:40 #460 №848610 
>>848609

> замес кода в инстансы

Речь конечно о синглтон-инстансах, в самих инстансах методы не хранятся. И таки не путай синглтон-инстанса с синглтоном-класса.
Аноним 02/10/16 Вск 13:57:53 #461 №849317 
Сап, аноны. Есть два селекта. Один - список стран, второй - список языков. Как сделать так что бы списки подгружались из модели(?), то есть динамически, что бы не прописывать в html. И второе, как сделать второй список зависимым от второго, то есть, что бы при выборе какой то страны были доступны только некоторые языки? Насколько я понял, нужно создать еще две модели, для стран и для языков?
шапку не читай, вопрос сразу задавай Аноним 04/10/16 Втр 08:45:32 #462 №850316 
Сап, котаны. Джава-макака хочет вкатиться в веб.
Что почитать по руби, чтобы сразу начать кодить?
Аноним 04/10/16 Втр 14:38:04 #463 №850430 
14755810842710.png
Сижу, разбираю исходники рельсы.

Как эти ублюдки ревью проходят? :(

Вот тут тернарный оператор разбит на несколько строк и это нихуя не читабельно. Напиши, блять, полную конструкцию if-then-else, чего строчки то жалеть. И это только один пример...
Аноним 04/10/16 Втр 18:13:55 #464 №850574 
Есть тут те, кто пользуется spree?
sageАноним 05/10/16 Срд 04:16:35 #465 №850867 
>>850430
читабельно все
Аноним 05/10/16 Срд 06:12:26 #466 №850879 
>>850430
>>850867
Я могу к индентации придраться, нужно было вевление дальше сдвинуть, чтобы визуально относилось к началу const_defined?.
Аноним 05/10/16 Срд 22:02:40 #467 №851275 
>>850430
Исходники рельс это метапрограммистский пиздец по большей части.
Аноним 05/10/16 Срд 22:28:43 #468 №851315 
>>851275

угу, метапрограммирования хватает.

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

Правда, видел статью где @dhh обсирают за это Concern, но не суть.

Вопрос, в стандарте написания кода, его просто нет.

Запускаешь рубокоп, 2 тысячи файлов, варнингов нету K R A C U V O.

Смотришь настройки рубокопа, а там практически все политики выключены. Включаешь, запускаешь, больше 50000 варнингов. ^_^ Какой bbatsov, какие гайды, вы о чем пацаны))) Пишу как хочу.

4.0 по codeclimate, grade A. Все норм.
Аноним 05/10/16 Срд 23:14:14 #469 №851343 
>>851315
Я пытался вот на днях найти в рельсах место, где инициализируется ActionView::Base (контекст вьюхи). Не нашел! Магия ебучая.
Аноним 06/10/16 Чтв 00:13:38 #470 №851367 
14757020186240.png
>>851343

Кароче сосач, опять ебет мозг со словом из спам-текста, вот тебе мой же ответ картинкой.

Если вдруг, будет нужен мой стек, то скажи, на пастебин какой-нить залью или глистом на гит.
Аноним 07/10/16 Птн 20:12:41 #471 №852420 
>>851367
А у вас не принято использовать IDE с Ctrl+ЛКМ? Или ctags для не IDE?
мимо-не-рубист
Аноним 07/10/16 Птн 21:11:48 #472 №852468 
>>852420

Я тебя не совсем понял,

Тут все хипсторы, каждый пишет как ему удобно. знаю людей что в атоме/сублмайме пишут. Я для навигации по файлам в rubymine пользуюсь такой кучей хоткеев:

jump to sourse, jump to declatarion, code back/forward, smart search, jump to navigation bar, jump to project bar

И хватает. Внутри файла идут другие клавиши для быстрой навигации между методами, атрибутами и прочими непонятными штуками.

Естественно, это только часть функционала которую дает иде, всякие закладки нахер не нужны, ну мне лично. Проще вынести в отдельную вкладку тайлового менеджера, окошко с кодом. А остальные мелочи и потнушечки типа rubymine rails diagram (штука для управления взаимоотношениями между моделями (отдельными файлами) через редактирование картинок для рельсы) вроде бы и есть, но пользуются довольно редко. Кода скучно.

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

У того анона вопрос в другом был. Есть огромный проект в котором __дохрена__ реалтаймовой магии. Настолько дохрена, что можно не найти где подружается инстанс класса или инстанс экземплера класса. Ну я ему и предложил, не можешь сходу разобраться, вызови экспепшен, или, еще лучше, поставь хук на исполнение кода в консольке когда инициализатор инстанса класса или синглтон класса загружаются (а это две разные точки). Тогда в консоле будет полное состояние программы, можно буквально сделать cd в любой объект, изучить его состояние, посмотреть call trace.

Ну как-то так у меня принято. Других хипсторов опрашивай отдельно.
Аноним 08/10/16 Суб 18:57:09 #473 №852978 
>>852468
Именно. Спасибо, анон, попробую. Глянул на код hanami - по сравнению с рельсами глаз радует ;(
Аноним 08/10/16 Суб 18:59:05 #474 №852981 
Кстати, как вам паттерн Flux/Redux? Попробовал на небольшом примере, вроде спасает от кучи головной боли. Из MVC Redux не сделаешь, но мне интересно получится ли использовать некоторые хорошие идеи оттуда, в особенности Immutable State всей программы.
Аноним 08/10/16 Суб 19:29:52 #475 №852994 
>>852981
>как вам паттерн Flux/Redux
На фронтенде нормально, хотя фактически просто переизобрели стейт машину и заставили ее меняет глобальный стейт.

>Immutable State
В руби не выйдет. Нету неизменяемых структур данных в стандартной библиотеке + банально многие гемы и сами рельсы лезут и повсюду меняют объекты и ожидают, что ты будешь делать так же. Если очень хочешь чего-то подобного, то смотри или на эликсир или если совсем по-хардкору и только для себя, то на хаскель.
Аноним 08/10/16 Суб 19:39:35 #476 №852999 
>>852981
Но на том же фронте redux добавляют в MVC, есть тот же ngRedux для ангуляра хотя многие ноют что он MVVM
Аноним 09/10/16 Вск 00:50:30 #477 №853140 

>>852999
ангуляр это жопа, помню по первой версии, вторую трогать даже не хочется
Аноним 10/10/16 Пнд 12:25:15 #478 №853862 
Рельсаны, возможно ли вкатиться в Ruby с базовыми знаниями С++(база, ООП, немножко многопоточности)?
Аноним 10/10/16 Пнд 15:08:39 #479 №853938 
Ищу помощника допилить новую имиджборду, которую я сделал на sinatra + rom-rb + react + docker. Сделал 60%, не хватает сил. Если ты лох, то просьба не писать. телега: @newimageboard
Аноним 10/10/16 Пнд 15:09:06 #480 №853940 
https://www.amazon.com/Learning-Rails-5-Outside/dp/1491926198/ref=sr_1_2?s=books&ie=UTF8&qid=1476101281&sr=1-2&keywords=Rails+5
https://www.amazon.com/Agile-Web-Development-Rails-5/dp/1680501712/ref=sr_1_1?s=books&ie=UTF8&qid=1476101281&sr=1-1&keywords=Rails+5
Где можно скачать эти книги? На рутрекере еще нет.
Аноним 10/10/16 Пнд 16:13:22 #481 №853968 
>>853940
А что тебе мешает купить их?
Аноним 10/10/16 Пнд 16:23:17 #482 №853973 
>>853968
Денег жалко, да и вообще ни разу не покупал книги всегда скачивал.
Аноним 10/10/16 Пнд 17:08:33 #483 №853990 
>>853973
Интересно что ты скажешь начальнику когда он тебе скажет ой а мне денег жалко платить за твой говно код
Аноним 10/10/16 Пнд 18:38:31 #484 №854034 
>>853938
мб сюда кинешь гитхуб
Аноним 10/10/16 Пнд 19:33:15 #485 №854080 
>>854034
деанон тгавля
ты заинтересован?
Аноним 11/10/16 Втр 00:55:02 #486 №854309 
>>818850 (OP)
так аноны. я чет не пойму. руби это же so 2010. зачем сейчас на нем писать ?
Аноним 11/10/16 Втр 11:01:19 #487 №854437 
>>854309
Что ты несешь анон? бросай это быстрее
Аноним 11/10/16 Втр 13:12:25 #488 №854546 
>>852994
>Immutable State
>В руби не выйдет. Нету неизменяемых структур данных в стандартной библиотеке
Object#freeze
>банально многие гемы и сами рельсы лезут и повсюду меняют объекты и ожидают, что ты будешь делать так же
Библиотеки работают со своими структурами данных, тебе их трогать не надо. Свои собственные структуры данных можешь писать иммутабельными.

Я активно использую мемоизацию, поэтому не вызываю freeze в конструкторах своих классов, вместо этого делаю freeze полей и не создают attr_writer'ов.
Аноним 11/10/16 Втр 13:13:26 #489 №854547 
>>854080
Или open source, или соси хуй.
Аноним 11/10/16 Втр 14:12:40 #490 №854584 
>>818850 (OP)
На гист.гитхаб не требуется аккаунт на гитхаб, исправьте шапку.
Аноним 11/10/16 Втр 15:58:20 #491 №854667 
В 2.4 в котором от силы парочка важных изменений пилят охуеть как долго. Сколько же это надо будет ждать 3ю версию если в ней обещают столько важных изменений ?
Аноним 11/10/16 Втр 21:56:04 #492 №854931 
>>818850 (OP)
>>818850 (OP)
Какие недостатки по сравнению с другими фреймворками есть в Руби он Рейлс?
Аноним 11/10/16 Втр 23:17:03 #493 №854991 
>>854667
Кстати да, я вот тоже инфы про дату выхода 3 версии не нашел.
Аноним 12/10/16 Срд 14:20:01 #494 №855248 
Сап. Начал учить JS год назад, но что бы найти работу нативного языка мало даже поработал 3 месяца стажером, понял что не мое, нужен десяток фреймворков, да и работа по JS в основном связана с версткой сайтов и как раз таки с фреймворками, которые каждый год меняются, то что учил год назад сегодня считается устаревшим. Недавно начал рассматривать возможности изучения других ЯП, и так как еще на стажировке прошел курс Learn Ruby Hard Way решил вкатиться в Ruby. Расскажите какие подводные? Версткой нужно заниматься? Я упорно не могу в верстку, если да, то начну питон учить. Какой порог вхождения? Сложнее чем с JS? Вроде у Ruby не так много фреймворков и не надо беспрерывно находиться в процессе изучения постоянно возникающих новых веяний?
Аноним 12/10/16 Срд 14:21:49 #495 №855250 
>>855248
и работу наверное сложнее найти?
Дистрибутив для RoR Аноним 12/10/16 Срд 15:32:10 #496 №855306 
Привет анон, пишу тебе с большой просьбой посоветовать дистрибутив линукса - хочу писать на рельсах. Ставил рельсы на винду (основная ос, плз не хейтите) - провал (знаю, предупреждали)! Сейчас поставил убунту - лагает, хотелось бы чтонибудь полегковеснее!
Аноним 12/10/16 Срд 15:48:18 #497 №855316 
14762764987300.png
Каково это осознавать, что Phoenix похоронит вашу парашу?
Аноним 12/10/16 Срд 17:27:15 #498 №855385 
14762824350860.jpg
>>855316
Почему столько ненависти именно в руби треде?

Может убьет и то лет через 5-7, а может и нет. Может в руби, а потом и в рельсы завезут новых фичь и новые язычки станут не нужны.
Аноним 12/10/16 Срд 17:34:22 #499 №855389 
>>855306
Можешь посмотреть легковесные версии убунты - lubuntu или xubuntu. Так же, я знаю людей, которые рекомендуют для разработки ставить fedora, только я хз как там легковесностью.
Аноним 12/10/16 Срд 18:04:25 #500 №855403 
Хм, а ведь V8 вышел 7 лет назад, такими темпати когда выйдет руби 3 все действительно пересядут на что-нибудь побыстрее.
Аноним 12/10/16 Срд 20:56:33 #501 №855506 
>>855316
Одна хипстерская параша похоронит другую хипстерскую парашу, найс.
Аноним 12/10/16 Срд 22:54:54 #502 №855597 
рубисты, расшифрусте что это хуита делает
def f(n)
_,a,b,c,d=->(a,b;c,d){c,a,d=[[b,d||0,a%b]]+(c||[]),a/b,1+(d||0)while(a>0);c.map{|a,c,d|[a,(c>b)?_[c,b]:c,d]}},0,->a{a==[a]?a.map{|a,c,d|b[a]b[c]b[d]}.reduce(:+):a},->(a,b){a==[*a]?a.map{|d|d.map{|_|c[_,b]}}:a+((a==b)?1:0)},n;d,a=b[c[_[d,a+2],a+2]]-1,(a+1)while(d>0);a
end
Аноним 13/10/16 Чтв 01:47:56 #503 №855709 
>>855385
>Почему столько ненависти именно в руби треде?
Потому что рубисты дохуя зарабатывают. Завидно
Аноним 13/10/16 Чтв 08:28:39 #504 №855771 
>>855709
Я java-разработчик смотрю на тебя с высока. Сижу на удаленке в мухосранске. 30 лвл. Зарплата 10k$. И да есть у нас один рубист в команде, который конечно может только в рельсу. ЗП у него 2k$
Аноним 13/10/16 Чтв 11:04:03 #505 №855803 
>>855771
Пили стори как дошел до жизни такой, если не обманываешь конечно. А то ворвался такой и унизил всех.
Аноним 13/10/16 Чтв 14:01:49 #506 №855882 
>>855803
Стаж 10 лет. Работаю на зарубеж конечно. Что тут еще, все просто.
Аноним 13/10/16 Чтв 14:34:17 #507 №855901 
>>855882
кул, мне еще интересно ты у тебя зп с каждым годом поднималась? Или в одно время резко? Или у тебя биз?
Аноним 14/10/16 Птн 09:49:08 #508 №856345 
>>855901
В норм европейских компаниях ЗП поднимается каждые 3 месяца
Аноним 14/10/16 Птн 15:04:28 #509 №856454 
Эй рельсаны, хелп.
Кароч разбираюсь с Action Cable. Типа отправляю пользователям оповещения о какой-либо хуйне. Как не отправлять оповещение пользователю, которое это действие делает? Типа если я написал сообщение, нахуй мне видеть оповещение о моем новом сообщении.
Аноним 15/10/16 Суб 03:56:16 #510 №856866 
Анон подскажи, потянет ли raspberry pi 3 рельсы хочу чтобы сервер там жил.
Аноним 15/10/16 Суб 12:13:39 #511 №856934 
>>856866
лучше на PHP7 или Golang. Ресурсов будет меньше жрать и быстрее
Аноним 15/10/16 Суб 13:57:29 #512 №856983 
>>854667
Пиздец и http/2 тоже не спешат завозить.
Аноним 15/10/16 Суб 23:28:00 #513 №857288 
>>856934
Ну давай трустори как руби проект на пхп или го поднять.
Аноним 16/10/16 Вск 17:47:12 #514 №857752 
>>857288
что такое руби проект?)
в чем проблема сделать такой же проект на пыхе или го?
Аноним 17/10/16 Пнд 04:09:16 #515 №858119 
>>856866
Потянет, скорости распбери вполне хватит, люди даже гитлаб там держат, который сам на рельсе если что и при этом они постарались его ещё много чем нагрузить.
Аноним 17/10/16 Пнд 18:20:01 #516 №858443 
>>855597
Выводит ноль.
Аноним 17/10/16 Пнд 22:42:49 #517 №858624 
Жаль, конечно. Годный фреймворк был когда-то.
Ну что, куда перекатываетесь? Пхп, го, а может феникс http://www.phoenixframework.org/?
Аноним 18/10/16 Втр 01:04:15 #518 №858748 
>>858624
да, в основном все в эликсир сьебали
Аноним 18/10/16 Втр 01:38:12 #519 №858776 
>>858624
И чем эта эрланговая параша отличается от рубишной параши? Какая у нее киллер-фича? Что этот феникс может сделать лучше чем рельсы и прочие фреймворки на сотнях других языков?
Аноним 18/10/16 Втр 10:14:22 #520 №858844 
>>858776
Тупые вопросы. А чем рубишная параша лучше?
Аноним 18/10/16 Втр 15:27:22 #521 №859064 
>>858776
Стартапы все чаще пишут на Фениксе. По производительности не скажу, но он набирает популярность как когда-то руби.
Тот же руби чем лучше пхп или питона? Просто на нем начали писать модные Стартапы, все закрутилось, начало развиваться... Именно тоже самое сейчас происходит с Фениксом.
Аноним 18/10/16 Втр 19:25:33 #522 №859170 
>>858776
Мне кажется из-за эранговской вм, которая позволяет держать кучу дешевых клиентов без ебли с коллбеками
Аноним 18/10/16 Втр 21:51:03 #523 №859241 
Вы ебанулись? Какой нахуй феникс? Все прогрессивные рубисты давно съебали на кложурец и кложурскрипт, не?
Аноним 19/10/16 Срд 11:28:15 #524 №859563 
>>856454
Да как хочешь.
От условного unless message.user_id == current_user.id, до отфильтровывания еще на сервере.
Аноним 19/10/16 Срд 16:58:39 #525 №859800 
>>859241
конечно же нет. можно скобкоебством позаниматься с недельку а потом дела надо делать
Аноним 19/10/16 Срд 19:38:46 #526 №859950 
>>859563
>>856454
where.not(id: x)
Аноним 19/10/16 Срд 20:35:34 #527 №860004 
>>859800
А в твиттерах и волмартах как будто не дела делают.
Аноним 19/10/16 Срд 22:01:43 #528 №860094 
>>860004
ой бля. в твиттере основной код на скала. ты не думай я писал на кложуре 2 года. больше не хочу
Аноним 20/10/16 Чтв 02:21:50 #529 №860331 
Перекат где?
Аноним 20/10/16 Чтв 03:10:27 #530 №860338 
>>859241
Главный рубист всея Хекслета, он же его же СТО рассказывал, что так и есть. Много кто из тусы перекатился именно в кложу.
Аноним 20/10/16 Чтв 12:32:32 #531 №860492 
>>860094
Почему не хочешь? Расскажи, интересно.

>>860338
Вот, я же говорю!
Аноним 20/10/16 Чтв 17:04:39 #532 №860726 
>>860331
ПЕРЕКАТЫВАЕМСЯ
https://2ch.hk/pr/res/860724.html
https://2ch.hk/pr/res/860724.html
https://2ch.hk/pr/res/860724.html
Аноним 23/10/16 Вск 21:13:09 #533 №862566 
>>859241
Элексирчик такой, вот какой)
Пока уебы вкатываются в реакт и прочую жс поебень, прошаренные поцаны щупают феникс, который по удобности, красоте кода такой же как руби, только лучше.
Аноним 27/10/16 Чтв 09:36:19 #534 №864379 
>>862566
> прошаренные поцаны щупают феникс

прошаренные пацаны на телеграм канале по эликсиру признали что феникс не готов к использованию. очень много багов. многие от него отказались. так что не надо давать ложную инфу. жосе там давно поехал головой.
Аноним 29/10/16 Суб 19:51:06 #535 №865899 
>>864379
В вакансиях на сеньоров по руби пишут что знание эликсира приветствуется.
comments powered by Disqus

Отзывы и предложения