24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
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://rubykoans.com И вот еще https://rubymonk.com/ - Матц одобряет.
2. Какой gem посмотреть, чтобы понять, как писать код? Лучше всего посмотреть небольшие gem'ы вроде cancancan, devise, camping. А еще можешь полистать на гитхабе гемы с нарастающей популярностю. https://github.com/trending?l=ruby Там еще нет тысяч строк, и тебе будет легче понять.
3. Есть ли GUI для руби? Да. Есть обвязки к Qt, GTK, wxWidgets, Shoes, fxruby (одобренный).
4. Можно ли писать на руби мобильное ПО? Да. Для iOS есть RubyMotion терпимого качества, для Android - заброшенный разрабами, лагающий и падающий ruboto. Для WinPhone до сих пор ничего не завезли.
7. Хорошие практики по руби и рельсам? Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes. Почитайте еще Grimm A. - Objects on Rails Еще продвинутое чтиво - http://tutorials.jumpstartlab.com/
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, Lotus, Volt, Grape, отличная штука для DevOps - Chef и годные генераторы для бложиков - Jekyll, Middleman, но по сути в продакшене используются только рельсы.
18. Можно ли делать игры на Ruby? Можно, но не нужно. Гем Gosu.
20. Как и где искать работу? Легко и просто - http://rubyjobs.ru/ Не так просто - upwork. Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.
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. Не стесняемся постить свои репозитории, наши эксперты с радостью отревьювят вас.
Хорошим финалом будет деплой, это пожалуй самое болезненное, и ничего общего с деплоем на heroku, где тыц тыц и готово. Придется поковыряться со смежными вещами и узнать много нового, уже устоявшийся гем для таких дел - Capistrano.
Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой. Ну, а мы открываем очередной Ruby Thread.
Как правильно использовать сервис объекты? В одних гайдах пишут что это должны быть классы с одним статическим методом, которые не сохраняют собственное состояние. В других же приводят в пример классы со множеством методов и сохранением состояния.
>>603533 >классы с одним статическим методом, которые не сохраняют собственное состояние И что за классы без состояния? Для этого есть модули. >Как правильно использовать сервис объекты? Каком кверху. Ты не видишь, где лучше модуль использовать, а где класс?
>>603533 >сервис объекты >классы с одним статическим методом, которые не сохраняют собственное состояние Вообще, я хуею с ньюфагов. В других ЯП то, что ты описал называется ФУНКЦИЯ. Ого, да, слышал про такое? Может ты ещё про циклы не знаешь?
>>603557 Еще один, если бы ты имел коммерческий опыт разработки или читал бы исходники хоть одного гема, то имел бы понятие о то, что модули используются исключительно для: а) библиотек методов б) миксинов и концернов в) в качестве неймспейсов для других модулей и классов
В вышеприведенных ссылках приведены два паттерна, которые в среде руби разработчиков носят одно название, но носят несколько отличные функции, что вносит определенную путаницу. Сам я - в равной мере встречал их оба. Как можно было бы понять, если бы вы вообще имели понятие о подобных паттернах или проблемах в архитектуре средних и больших приложений, меня интересует не то, что стоит использовать для конкретного случая, а какая вариация данного паттерна встречается в среде других разработчиков. А все потому, что сам я использую обе вариации, и не знаю, как их лучше, и, соответственно, более понятно для других разработчиков, наименовать и разделять в структуре директорий рейлс проекта.
>>603733 а я слэк этот ваш скочал уже. вроде стильно, можно, молодежно. ща тестю что лучше. телеграм палит телефон, а слек мыло. но в телеграме memes. и можно добавлять не только картинку или файл, но и видосик даже песенку
Ребят, а вам не стыдно на этом писать? Я вот учу понемногу, но у меня один знакомый на плюсах пишет, второй на скале, они меня чморят за это. Сравнивают Руби с инвалидной коляской среди языков. Что им ответить?
>>603798 Можно в обычном двачестиле начать переводить стрелки вроде А ВОТ В ВАШЕМ ЯЗЫКЕ... Правда ирл это будет смотреться убого. Лучше скажи, что просто начинаешь учить погромирование с руби, а потом перекатишься на нормальные языки.
>>603802 >для веба выбор не велик Ты серьезно? В вебе самый богатый выбор. Можно сходу назвать десяток основных языков, а малоизвестных ещё больше. Мир не ограничивается руби и пхп.
>>603879 >одеск Ну окей, во фрилансе может и такая ситуация. Но что делать, если мне больше шестнадцати лет, а пилить фейсбуки для слабоумных заказчиков до конца жизни не хочется?
Вот не надо про слабоумных заказчиков, на фрилансе некоторые заказчики это такие же программисты которые не справляются с большим заказом для слабоумного заказчика.
>>603942 Конечно сумбурные и всё такое, но если их не будешь выполнять ты, то выполнит кто-то другой и получит за это ТВОИ деньги (но они не будут твоими, потому что ты их не заработал). Вот тут мы и подходим к большой беде этого мира — мы не отдельные существа, а социальные и в любом случае придётся взаимодействовать с другими людьми. И если у заказчика есть деньги чтобы платить тебе за выполнение его желания, то не такой уж он и глупый.
>>603798 Пошли нахуй, вот почему. Не знаю ни одного человека из около 15 знакомых из разных областей, кто говорил бы мне такое. Вот жс чморят иногда, да и то уже смирились давно.
>>604128 Блядь, как вы достали тупорылые малолетние пиздюки — вас бы даже в самой америке адекватные американцы палками с гвоздями забили за такую манеру речи.
>и нада руссссским духом пахнуть И что после того как ты написал это косноязычное выражение (которое непереводимо, точнее непереложимо на русский) ты стал пахнуть эльфом? Ты как был орком так и остался.
И я не запрещал тебе учить американский английский, идиот недоразвиты, что ты вообще забыл в разделе о программировании? Вам в /b/, сударь.
>>604120 Лол, где это? Он просто неудобный, а насчет "уровней" - в руби можно при большом желании вручную стартовать gc, а жс вообще что-нибудь умеет насчет памяти? То-то же.
>>604138 Да-да, все кто критикует косноязычность и неумение пользоваться родным языком — пидорашки, конечно. У самого-то небось жопа немытая и пивас в холодильнике с кальмарами?
>>603798 Знакомая ситуация. На прошлой работе было три отдела - основной (жава + скала), БД (самописная база на плюсах) и веб (пхп + руби). Очевидно, что веберов во всей компании читали унтерами и постоянно подъёбывали, причем между языками разницы не делали. Уволился откуда из за этого, теперь жалею, ибо платили там весьма и весьма неплохо, но это отношение как к недочеловеку бесило. Даже начальство в конфликте рубиста и плюсовика предпочитало плюсовика.
>>603798 >>604200 Ответить можно следующим образом: прокачать скилл и уйти из их конторы в более нормальный коллектив, вот и всё. Это как с соседями алкашами-перфораторщиками, помогает только переезд.
Лан, пацаны, давайте попробуем Telegram. Кто хочет слэк, кидайте В тредец фэйкомыльца, я поинвайтю, потому-что не нашёл как там без почты инвайтить.
В уютный чатик приглашаются вечновкатывающиеся куны 23+, желательно с опытом вкатывания не больше полу года, и мамкины 19летние синиоры, чтоб нас тралеть..
Пока особо тем не поднимаем, а посмотрим, сперва, сколько нас будет. В прошлом треде 4х насчитал.
>>604484 >Кто хочет слэк, кидайте В тредец фэйкомыльца В /wrk для этого сделали приложение на heroku, отсылаешь туда json и оно шлёт тебе инвайт. Может запилю, если будет время, ну или кто-нибудь из анонов сделает.
Сап. Вы тут собираетесь пилить свою конфу, в которой скорее всего будет малое число людей. Мы предлагаем вам идею получше - присоединиться к уже существующей нашей. У нас есть неплохой постоянный онлайн, который позволяет вести интересные дискуссии без потери ламповости. Сейчас в ней существуют каналы для следующих языков - Ruby, Clojure, JS, а также общий канал по разработке, канал по изучению английского языка, канал по поиску работы и общий канал для ламповых бесед. Вы сможете пообщаться с гуру, выслушать их истории успеха, помочь юным новичкам и много другое! Присоединяйтесь!
>>604570 > скорее всего будет малое число людей ну мы так и задумывали. я представляю нашу конфу, как начинающие рубисты общаются на тему вкачивания, что лучше читать, с чего начать, что учить сперва, а что можно потом. так-же, неплохо просто в конце дня отчитаться/похвастаться в конфу, что нового прочел/выучил/написал. это очень хорошо стимулирует процесс усвоения материала.
просто в прошлом треде оказалось, что на этой доске как минимум 4ро начинающих после 23 лет руби-куна. думаю вместе было б намного проще.
>>604579 Так и у нас мало! Я же отметил, что у нас ламповая атмосфера и небольшое число людей. А про >в конце дня отчитаться/похвастаться в конфу, что нового прочел/выучил/написал. это очень хорошо стимулирует процесс усвоения материала. попадание 10/10, именно так у нас всё и проходит.
>>604570 Если не хотите ждать инвайта - лучше пишите прямо в тред фейкомыльца (10minutemail и аналоги подходят), а кто-нибудь из модераторов будет инвайтить. У хохла-неймфага, судя по всему, какие-то проблемы с электричеством.
>>604827 Телеграмм сделан дуровым, дуров сделал ВК, в приличном обществе за такое предают анафеме. Плюс дуров ненавидит россию и русских (даже русских либерашек) и у него комплекс мессии или что-то такое. Кароч не, лучше слак. Хотя мне и слак не норм. Лучше джаббер, но все джаббер клиенты какое-то говно. Хорошего мессенджера и нет сегодня.
>>603732 https://github.com/bbatsov/ruby-style-guide#modules-vs-classes Если бы ты читал стайлгайды то имел бы понятие о том, что классы нужно использовать только когда тебе реально нужен инстанс. Другой вопрос в том, что, как правило, реально правильнее сделать класс у которого будет что хранить в инстансе. Ну и да, аппелировать к гемам не стоит. Например, под капотом рельс творится ад. В стандартных рубёвых библиотеках ещё и Израиль.
> В одних гайдах пишут что это должны быть классы с одним статическим методом, которые не сохраняют собственное состояние. В других же приводят в пример классы со множеством методов и сохранением состояния.
В первом случае это, наверное, правильно назвать хэлперами. В моём понимание сервисы это, всё же, второй вариант. нужны и те и те в зависимости от целей Меня смущает только вот это: > классы со множеством методов Сервисы тоже должны быть солидными, так что с этим надо осторожнее.
А вообще, чтобы из пустого в порожнее не переливать, скинь примеры гайдов - обсудим на примере.
>>604877 >Ну и да, аппелировать к гемам не стоит. >Например, под капотом рельс творится ад. >В стандартных рубёвых библиотеках ещё и Израиль. Меня всегда удивляют вот такие заявления. А с чем вы сравниваете? Где вы видели нормальные эталонные библиотеки вылизанные до совершенства?
PHP вот тоже ругают, что всё там плохо, просто ад, программировать на нём невозможно и при этом комьюнити растёт, и фейсбуки всякие пилят.
Вангую талонная библиотека написана на C в 1974 году в качестве докторской диссертации, её текст выставлен в палате мер и весов, фотографирование запрещено и пользователей ноль.
>>603732 >>604877 А. В глаза долблюсь. Сорри. Не заметил ссылки. Мне ближе первый и третий вариант. В первом пример более глобального сервиса по типу "менеджер". В третьем - всякие разновидности типа формобджектов и прочее. А вот второй выглядит странным. Для меня это выглядит примерно так: > 1. Пишем всё в контроллере > 2. Ой, толстые экшены, давайте часть функционала вынесем в приватные методы. > 3. Ой, толстый контроллер, давайте часть приватных методов унесём в хэлперы. В итоге, контроллер и его экшены худеют, но толку от этого никакого - грязь просто размазалась по хэлперам. + зачем-то оказывается часть приватной логике в паблике, хотя вряд ли будет где-то реиспользоваться. Название метода call это отдельная песнь. С тем же успехом можно было бы определить Proc. По сути получилось то же самое. замерить бы различие производительность проков от таких вот классов. В общем, мне не нравится совсем.
>>604883 Разве в этом вашем Ruby нельзя писать всю логику в модели, как и положено?
> Начинающие программисты (особенно в веб-программировании, где аббревиатура MVC стала популярна) очень часто трактуют архитектурную модель MVC как пассивную модель MVC. В этом случае модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате код моделей по факту является средством получения данных из СУБД, а контроллер представляет собой типичный модуль, наполненный бизнес-логикой, или скрипт в терминологии веб-программирования. В результате такого понимания MVC разработчики стали писать код, который Pádraic Brady, известный в кругах сообщества Zend Framework, охарактеризовал как ТТУК — «Толстые тупые уродливые контроллеры» (Fat Stupid Ugly Controllers)
> Но в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика. Следует отметить возможность модели инкапсулировать в себе другие модели. В свою очередь, контроллеры представляют собой лишь элементы системы, в чьи непосредственные обязанности входит приём данных из запроса и передача их другим элементам системы. Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами системы.
>>604886 Можно. Но в неопытных руках модели (а иногда и контроллеры) превращаются в монстров. Сервис-обджекты добавляют промежуточные слои асбтракции, благодаря чему код проще поддерживать. https://youtu.be/pq00HQR-56Y
>>604867 Ебать. Ты правда готов отказаться от продукта из-за того, что у тебя с создателем не сходятся взгляды на что-то? >>604869 Ты намекаешь на то, что есть чаты без ников или что? Какие?
>>604894 >Ебать. Ты правда готов отказаться от продукта из-за того, что у тебя с создателем не сходятся взгляды на что-то? Если очень сильно не сходятся, то конечно могу, я же человек, а не машина. Конечно если работодатель будет требовать использования телеграма, то я буду использовать. Но мне телеграм не нравится из-за того что его всюду форсят, как и вконтакт(фейсбук и прочие социальные отстойники) этот грёбаный. Ватсап этот вонючий ещё. В телеграме либерашки, в ватсапе ватники.
>>604877 Похоже на то. Только по факту - я редко вижу, чтобы кто-то использовал модули в таких целях. И если бы читал внимательнее, то я первым пунктом написал, что они используются как библиотеки методов. К примеру, те же сервис объекты, как модули - никто делать не будет. Делать инстансные переменные класса в модулях никто не будет.
>Сервисы тоже должны быть солидными, так что с этим надо осторожнее. Надо же их хоть именовать по-разному, иначе слишком много путаницы происходит.
Почитал про руби, потрогал курсы на codeschool, интересный конечно язык (особенно в плане восприятия кода, похоже на чтение книги или эссе какого-нибудь). Даже выучить захотелось, но я уже староват для этого дерьма и имею гуманитарный склад ума, да и веб-разработчиков думаю сейчас как говна, сомневаюсь, думаю с работой тяжко.
Посоны, 3 год работаю в своем мухосранске php, недавно даже перекочевал на сносную работу %% на 20-30% больше платят, чем в среднем по городу%, оче хочется перекатится на руби, какие подводные камни, как с работой в регоинах/столицах?
>>607100 >хочется перекатится на руби, какие подводные камни, как с работой в регоинах/столицах? Видел вакансии в Москве, Питере, Казани, Краснодаре, Екатеринбурге
Сап, программач В общем, заинтересовала тема highload проектов, но гугл толком ничего не выдает. Есть ли какие-нибудь гайды не уровня: "ну можно использовать такую штучку, чтобы производительности добиться", а действительно, наполненные примерами и описаниями, качественные гайды? Особенно будет здорово, если документация тем или иным образом касается Ruby on Rails/Ruby. И вообще пушка, если AWS Amazon.
Есть идея сделать новый ЯП на базе рубишной виртуальной машины, полностью совместимый, использующий тот же стек (гемы, bundler), но статически типизированный. Мои хотелки: обязательная (но опциональная на границе с руби-кодом) статическая типизация то же ООП (для совместимости) + классы типов функциональное программирование (паттерн матчинг, алгебраические типы, всё такое) null-safety (именно этого больше всего мне не хватает в руби, а не статическо типизации)
Есть идея сделать новый ЯП на базе рубишной виртуальной машины, полностью совместимый, использующий тот же стек (гемы, bundler), но статически типизированный. Мои хотелки: обязательная (но опциональная на границе с руби-кодом) статическая типизация то же ООП (для совместимости) + классы типов функциональное программирование (паттерн матчинг, алгебраические типы, всё такое) null-safety (именно этого больше всего мне не хватает в руби, а не статическо типизации) * обязательная проверка исключений (локально) через перевод их в алгебраический тип (естественно, если декорируем таким образом руби-код и не обрабатываем какое-то исключение, то runtime error, с этим ничего не поделаешь, такова природа руби. Впрочем, я открыт для предложений)
>>607261 Лол, я кажется понимаю всю эту движуху с Ruby 2.3 и 3. Подумайте сами котаны… … … в Half Life 3 в качестве скриптового движка будет руби, будум-тссс~
>>607261 А вообще, руби не должен быть статически типизированным, он потеряет большую часть своей силы. Даже в JRuby и Rubinius'е не могут запилить ObjectSpace.
Мне нравится именно идея другого языка, где мы можем ввести какие угодно ограничения в пределах его исходных файлов, но это не повлияет на руби-код
>>607263 Если в руби 3 удалят GIL и запилят JIT будет пушка. По скорости приблизится к питону и ноде. А вот статическая типизация это фигня какая-то, надеюсь будет очень опциональной.
>>607268 >Если в руби 3 удалят GIL и запилят JIT будет пушка. Есть JRuby, Rubinius >По скорости приблизится к питону и ноде. Руби итак сравним с питоном, где-то быстрее, где-то медленней А вот к ноде вряд ли. Тут недостаточно просто иметь JIT, тут нужен ОЧЕНЬ ХОРОШИЙ JIT, потому что V8 разрабатыват люди, делавшие Java VM и многое другое, они очень хорошо шарят в оптимизациях >А вот статическая типизация это фигня какая-то, надеюсь будет очень опциональной. Главное null-safety и exception-safety, статику нахуй в принципе
>потому что V8 разрабатыват люди, >делавшие Java VM и многое другое Няцумото и Ко1ти каялись что не могут в такие технологии, но приглашали людей знакомых и с V8. Надеюсь эти пиздоглазые таки смогут или найдут нужных людёв.
>>607276 >WebAssembly Да, это однозначно то, на что сейчас стоит ставки делать. Кто первый освоится в этой области, тот может захватить сходу хорошую долю рынка.
>>607276 Это при том что каждый второй велосипед тащит нативные расширения, которые даже не конпелируются под виндой? Лол. Скорее будут конпелять скалу в эту хуйню, как сейчас в джяваскрипт.
>>607353 Зачем тебе гемы, где вызывается системный апи, в браузере? Ты жаловался, что много гемов с нативными расширениями. Сказал, что у скалы с этим лучше. Что, скала реализует платформа-зависимые библиотеки без системных вызовов? В большинстве гемов нативные расширения не используют никаких функций, кроме стандартной библиотеки Си, ruby.h и иногда платформо-независимых сишных библиотек.
>>607366 > Что, скала реализует платформа-зависимые библиотеки без системных вызовов? А там такие есть? За всю жизнь видел только три нативные либы для жвм: opencv, ffmpeg и opengl.
> платформо-независимых Я тебе напомню: не конпелируются под виндой.
>>607377 > Кого ебут какие-томиллисекунды, которые исполняется код? Всех, например. Именно поэтому любой хайлоад написан как минимум на Java/Scala/C#, а то и на C/C++.
> синхронное говно > хорошо масштабируются Ну ты понял
>>607372 >А там такие есть? Нет библиотек - нет проблем! >не конпелируются под виндой. Никому в хуй не упёрлась твоя винда. Emscripten сделан POSIX-совместимым, думаю, с WA будет то же
>>607380 > Нет костылей - нет проблем! Вот именно, на жвм просто нет потребности в нативных костылях.
> >не конпелируются под виндой. > Никому в хуй не упёрлась твоя винда. Emscripten сделан POSIX-совместимым, думаю, с WA будет то же Будут весь линукс в жс-виртуалку впихивать? Ну надо же.
>>607379 >любой хайлоад написан как минимум на Java/Scala/C#, а то и на C/C++ Ты про числодробилки? Или ты собрался бизнес-логику на Си писать? >Ну ты понял Не понял. Какая разница, синхронное или несинхронное, если в разных процессах запущенно?
>>607382 >на жвм просто нет потребности в нативных костылях. Ага, создают окно в Windows без вызовов windows API, конечно >POSIX >весь линукс Понятно всё с тобой. Несите следующего
>>607384 > >любой хайлоад написан как минимум на Java/Scala/C#, а то и на C/C++ > Ты про числодробилки? Или ты собрался бизнес-логику на Си писать? Движок гугла это бизнес-логика или числодробилка?
> >Ну ты понял > Не понял. Какая разница, синхронное или несинхронное, если в разных процессах запущенно? Ладно, я понял, что ты толстишь
>>607387 >Движок гугла это бизнес-логика или числодробилка? Какого из сервисов? Поиск? Числодробилка, конечно. Это же машинное обучение. А бизнес-логика у них на питоне
>>607385 > >на жвм просто нет потребности в нативных костылях. > Ага, создают окно в Windows без вызовов windows API, конечно При чём тут апи, если мы говорили про библиотеки на си? Вызывать системное апи это задача JVM, а у программиста один на все системы класс для окон, файлов, сокетов и т.п.
>>607392 >Вызывать системное апи это задача JVM, а у программиста один на все системы класс для окон, файлов, сокетов и т.п. Ну значит такое не запустится в браузере, пока эти классы не будут адаптированы под браузерное API
И в руби, в том числе в нативных расширениях, то же самое. Раз уж мы заговорили про окошки, то вот пример на них. Пусть рубишное нативное расширение использует GTK. Так вот, чтобы оно работало в браузере, нужно написать адаптер под браузерное API для GTK.
Согласен, нет единого API в стандартной библиотеке языка, как в джаве. Но и там многие предпочитают использовать Qt/GTK/что-то ещё. Так что ничем джава не проще будет в портировании под WA
>>607395 GTK3 кстати в браузере воркает, и для QT вроде пилят. Чувак просто не понимает, что если будет возможность вставить язык, то и гемы подтянутся. А учитывая скорость которую может дать WA, могут написать гемы которые будут на руби и при этом будут компилироваться для браузера, без необходимости дрочиться с Си-кодом.
>>607393 Ты путаешь термины. По твоей логике, слово хайлоад к вебу вообще неприменимо (числодробилка же не торчит портами наружу? значит не веб).
Хайлоад - это когда приложение должно легко изменяться под нагрузку в два/пять/десять/сто раз больше текущей. То же масштабирование.
И я не понял твоего комментария >> Не понял. Какая разница, синхронное или несинхронное, если в разных процессах запущенно? >Ладно, я понял, что ты толстишь
В хайлоаде масштабирование на уровне процессов - это стандартная практика. Хотя бы потому, что сколько бы у тебя потоков не было, вычислительная мощность одного сервера всё равно ограничена (если это не кластеры, где особые требования к коду). Как шардятся БД? Запускаются на втором серваке. А это масштабирование на уровне процессов
>>607399 >А учитывая скорость которую может дать WA, могут написать гемы которые будут на руби и при этом будут компилироваться для браузера, без необходимости дрочиться с Си-кодом. Ну это уже сейчас идея рубиниуса - писать почти всё на руби. И статически типизированное подмножество руби в нём есть
Что то мне кажется после ВА фронт энд скатится в говно окончательно. Сейчас есть десятки фреймворков на жс, а будут сотни на все возможные языки. А использоваться будет все равно только жс.
>>607400 > Хайлоад - это когда приложение должно легко изменяться под нагрузку в два/пять/десять/сто раз больше текущей. То же масштабирование. Вот поэтому бекенд гугла или там твиттера хайлоад, а вся интранет-крудо-хуйня этих же компаний - нет.
> В хайлоаде масштабирование на уровне процессов - это стандартная практика. Как и асинхронная обработка соединений, так как иначе миллионы одновременных запросов сразу повесят сервер.
>>607409 >IronRuby Забавно, кстати, что в Руби взлетела его Java версия, а дотнетовую забросили, а в питоне наоборот - Jython неюзабельное говно, а вот IronPython вроде ещё жив. Да ещё и запилили Boo - статически типизированный питон под .NET
>>607410 >Как и асинхронная обработка соединений, так как иначе миллионы одновременных запросов сразу повесят сервер. Согласен. Но это вроде должно появиться в 5 рельсах, не? >Вот поэтому бекенд гугла или там твиттера хайлоад, а вся интранет-крудо-хуйня этих же компаний - нет. Ты совсем жирный? По-твоему веб-бекенду похуй на нагрузку? Просто там вопрос не в том, выполнится код за 5 или за 10 мс, а в масштабировании. Но эта задача всё же стоит.
Сам говоришь - один процесс рельс не умеет масштабироваться, и это плохо для хайлоада. Т.е. таки в вебе хайлоад тоже есть, с твоих же слов получается
>>607412 Кстати да. Идея писать всё на руби была как раз тем обоснована, чтобы легко было делать эксперименты, чтобы легко было разбираться в нём рубистам, не знакомым с Си (больше программистов - быстрее развитие)
>>607416 Но сейчас есть возможность писать все на питоне, жс и си/плюсы. И зачем ещё один язык? Опять все вернутся к тому, что один язык - одна задача.
>>607418 >Но сейчас есть возможность писать все на питоне, жс и си/плюсы. И зачем ещё один язык? Потому что питон и жс говно, а руби няша Ты ещё скажи, что Rust не нужен
>>607414 > >Как и асинхронная обработка соединений, так как иначе миллионы одновременных запросов сразу повесят сервер. > Согласен. Но это вроде должно появиться в 5 рельсах, не? Может, и появится но тормоза и GIL никуда не исчезнут, азаза
>>607429 >Ждите когда кристалл релизнут. >80% синтаксиса руби, статическая типизация, компиляция через LLVM. И ни одного фреймворка
Ещё его проблема в том, что он решает всего одну проблему руби - производительность, и то не очень, я полагаю (ведь сама модель данных не способствует скорости). null-safety, exception-safety, алгебраические типы данных, паттерн матчинг?
>>607434 >но тормоза и GIL никуда не исчезнут GIL никак не мешает асинхронности. Вон в V8 вообще всего один поток, а быстрее рубей намного
GIL очень хотят убрать даже в MRI, и уже сейчас можно использовать JRuby (production-ready) и Rubinius (пока не рискует никто в продакшен, но это дело времени, т.к. популярность он набирает оченьбыстро)
>>607436 >И ни одного фреймворка Опять же, то, о чем я писал выше: всё пока не будет чьих-то вложений. Будут деньги - будет кодобаза, иначе сдохнет.
>и то не очень, я полагаю https://github.com/kostya/benchmarks В некоторых 10x-300x прироста, где-то в стандартных раби-хуитках примерно равен (при том что язык ещё очень молодой).
Почему Python используется везде, а Ruby web-only? Модель данных, виртуальные машины в языках очень похожи
Я думаю, сыграла роль простота изучения. В том же data science надо, чтобы математик, аналитик за два дня изучили язык (что с руби никак не удастся) и по-быстрому начали писать машинное обучение, выводили графики и т.п.
А вот в вебе метапрограммирование, DSL руби дают возможность писать очень компактный код, что активно используется в рельсах. Внимание при разрабоке сконцентрировано на компактном участке кода, а не размазано по экрану как в питоне. Поэтому проекты на рельсах гораздо проще поддерживать, чем на питонофрейморках, даже если поддержкой занимаются студентики, вчера изучившие руби.
>>607444 Думаю всё банальнее, в те годы просто не было документации на английском и американского сообщества разработчиков. Во всей америке японский тогда знал только DHH, плюс толкьо у него была машина (потому что он гонщик) и он мог по конференциям ездить и рассказывать людям про рельсы и руби.
>>607477 Не, эти года не значат ничего, когда питон уже крутился где только можно про руби знало 3.5 нерда, и значительное комунити появилось только после рельс, т.е начиная с 2004.
>>607491 Так я и говорю про это. Значительное комьюнити появилось после появления документации на английском, которую лично перевёл DHH (во время гонок).
>>607568 >Руби популярнее питона, джавы Я прямо вижу, как Гугл и Майкрософт переносят весь серверный софт на РоР. Практика показывает, что у раби есть только гитхаб и куча хипстерских визиток/магазинов.
>>607589 Я прямо вижу, как Википедия и Фейсбук переносят весь серверный софт на РоР. Практика показывает, что у PHP есть только zend и куча быдло cms/вордпресов.
>>607629 Это все хорошо, но ситуация такова, что текущее решение - говно. Нужно переехать на новую платформу. Она запилина на Ruby on rails (конечно, надо многое дописать). Вот я сейчас гуглю на эту тему статью. Я поставил себе планку в 10 000 посещений в день, хотя такая активность раз в месяц будет, да и то вряд ли.
>>607648 Кроме конечно же гайдов типа: "а вот есть такая архитектура, а есть такая". Я их уже тонну сожрал. Мне желательно с какими-нибудь конкретными примерами.
>>607652 Вангую настройку кешей, БД и всяких воркеров. Сложности возникают когда нужно много матеши в реальном времени или просто максимально быстро, как в высокочастотном трейдинге.
>>607644 Рельсы на обычном сервере могут выплёвывать обычные странички за 100-200 мс. Это десяток запросов к БД (mysql), инстанциирование сотен AR-моделей, некоторый процессинг, генерация 100-200 КБ хтмл (slim). Никаких кэшей и оптимизаций. Это на одном ядре (один воркер). Т. е. на среднем серваке с каким-нибудь кор ай 7 можно сёрвить ~50 RPS на относительно тяжёлых страницах вообще не думая. Немного? Ну формально да, мало, но по большому счёту вполне достаточно для почти любых проектов. Если нагрузка более сильная, сначала обмазываемся кэшами, оптимизацией запросов, профилировщиком. Это позволит увеличить скорость как правило в 2-3 раза. Переезжаем на более дорогой сервер. Далее втыкаем дополнительные бэкэнд-сервера за балансировщиком нагрузки и ждём, пока перестанет держать БД. Если нагрузка на БД по чтению, то постепенно начинаем обмазываться репликацией. Далее ждём, пока БД перестанет держать по записи, так как репликация при записи не помогает. Предполагается, что на этом этапе у нас уже большая охуительно большая, десятки-сотни миллионов хитов в день аудитория, и мы гребём деньги лопатой, что позволяет выкинуть рельсы и начать переписывать проект на другую платформу и другую БД, более подходящие для 0.0001% выстреливших проектов, которые стали реально хайлоадом.
>>607673 >выкинуть рельсы и начать переписывать проект на другую платформу И всё равно это не нужно. Проблема-то в БД. А рельсы можно просто масштабировать на доп. процессы, если они что-то не тянут. >другую БД Тоже не нужно. Тут нужен пересмотр модели данных, возможно отказаться от консистентности части данных. Разве что часть данных можно на монгу перенести, но не все (ибо большая часть данных реляционной природы).
>>607681 Ну "масштабирование" тоже не волшебная палочка. Нужно проектировать систему с учётом возможного распределения по нескольким серверам изначально. И нагрузка внутри проекта разная бывает, может там не БД ботлнэк у них, я не знаю же.
Если речь идёт про 10к посетителей за сутки, тогда это всё не нужно просто.
Из стандартного стека веб-приложения убираем бекенд. Остаётся только фронтенд, который напрямую подключается к БД. Всю бизнес логику пишем на процедурах БД. Это, конечно, охуеть можно - писать приложение на PL/SQL. Поэтому создаём язык программирования, компилируемый в PL/SQL, и фреймфорк заточенный под работу с реляционными данными и отдачу их через веб-API.
>>607690 Ваннаби-хайлоад пацаны угорают по монге и эластиксёрчу. Кластеризуются из коробки. С реляционностью проблемы, но для современных примитивных веб-сервисов реляционность часто не нужна можно всё ЗАХУЯРИТЬ В ОДИН БОЛЬШОЙ ОБЪЕКТ. Биллинг и особо важные реляционные куски можно оставить на SQL (так делают, две бд, охуеть да, но уже считается нормальным).
>>607695 >так делают, две бд, охуеть да Я это и предложил двумя постами выше. >для современных примитивных веб-сервисов реляционность часто не нужна Я больше по энтерпрайз вебу, поэтому меня от >можно всё ЗАХУЯРИТЬ В ОДИН БОЛЬШОЙ ОБЪЕКТ воротит. У меня в приложениях всегда максимальная консистентность данных с валидациями на стороне БД
>>607695 Впрочем, да, я тупанул. Сам предложил монгу и сам утверждаю, что БД решит все проблемы масштабируемости данных.
В любом случае, тут от рельс ничего не зависит. Смена фреймворка косую архитектуру не исправит. При инконсистентных даных непродуманная модель данных убьет проект на хайлоаде
Этого всего не нужно. Есть один момент, который предполагает некоторые расчеты, но их можно вынести в бэкграунд, риал-тайм абсолютно не нужен.
>>607673 Основная проблематика проекта - пиковая активность, которая возникает довольно редко, но в ожидаемые промежутки времени. (Специфика проекта - конечный юзер много времени на сайте не проводит).
Оценить сейчас какая нагрузка будет - не могу, поэтому распишу в общих чертах конфигурацию проекта. Я, конечно, понимаю, что слишком ущербно опишу, так как точно по запросам ничего сказать не могу особенно для новой платформы.
Статичный элементы :
Ну тут все ясно - несколько изображений шаблона, пару банеров и карусель. Кеш/CDN решат эту проблем без проблем, как я понимаю. + Несколько статических страниц типа about, how to, и т.д.
Динамические элементы*:
Выдача контента на 3 страницах 1) Главная, 12 пикчей ~500x500px, 6 полей из одной таблицы и 1 из другой. Запросы уровня Select id, title, desc from `table` where home=1; Без всяких джойнов + ещё сортировка по заданному алгоритму. Кеш можно на 15 минут ставить.
2) Выдача первой категории - 9 постов, как в первом пункте. Примерно столько же полей; динамическая подгрузка следующих постов. + Поиск по конкретным параметрам. Параметров немного, но по запросам ничего конкретного сказать не могу, так как этого функционала в текущем решении нет. Тут для кеша не более 5 минут (частота обновления одного поля может быть высокая).
3) Выдача второй категории Опять же 9 постов, около 12 полей. Скорее всего из одной таблицы. Кеширование не более 5 минут.
4) Отображение публикации. Тут порядка 8 полей + коменты через vk, кнопка голосования. Планирую хранение голосов добавить в Redis, остальное все статичный контент. В общем-то на этой странице только количество голосов должно меняться очень часто.
5) Отображение публикации второго типа. Тут уже порядка 12 полей из разных таблиц, кешировать можно всю страницу, кроме двух блоков.
6) Авторизация. Планирую централизованное хранилище без выебонов. Стандартная RoR авторизация + социальные сети (возможно только соц. сети останутся). Кстати, туториал выгуглить так и не получилось.
7) Back-office, личный кабинет. По запросам совпадает с 2-3 категорией.
Архитектура примерно такая как на пике. Критические нагрузки ожидаются только в 4 пункте (голосование) и в 5 пункте (там будет проходить оплата через сторонние сервисы). В общем, хотелось бы обсудить подводные камни и получить грамотные советы.
Как при создании Руби могли допустить такую страшную ошибку: переменные экземпляра общие для всех методов экземпляра - собственных, полученных от классов-родителей, методов миксинов. Очень легко случайно использовать переменую, которая уже используется для других целей в одном из миксинов, например.
Почему нельзя было сделать переменные экземпляра специфичными для методов каждого класса и миксина? Взаимодействие тогда происходило бы через методы атрибута, что очень хорошо соответствует концепциям Руби.
Давайте думать, как нам изменить это дело так, чтобы не затронуть существующий код. который, возможно, завязан на разделение переменых экземпляра между классами иерархии и миксинами.
Я предлагаю не трогать их, а объявить устаревшими и постепенно переходить на новую версию с новым синтаксисом, например... Блять, перебрал все клавиши - всё уже занято в Рубях!
>>608200 Переменные экземпляра общие для всех методов, вызываемых на данном экземпляре. Это плохо, потому что методы могут быть из множества родительских классов или из множества миксинов, и есть вероятность случайного пересечения имён переменных экземпляра, используемых в разных методах.
Моя программа должна задавать пользователю вопросы и принимать решение на основе ответов, поступающих от него. Логика выглядит примерно как на картинке. Часть ответов нужно сохранять. Как можно реализовать хранение текущего состояния в объектно-ориентированном ЯП (Ruby)?
- Писать по классу на каждое состояние очень трудоемко, к тому же остаётся проблема сохранения ответов. - Один класс, являющийся конечным автоматом? Слишком громоздко, ведь в нём придётся иметь поля для совершенно непересекающихся ветвей. - Отдельные классы для каждой темы с логикой переходов - слишком запутанно
Сейчас решение принимается на основе нахождения в ответах пользователя определённых слов, но потом, вероятно, будет задействовано машинное обучение. Получается, нужно отделить логику переходов от хранения данных, специфичных для определённой темы.
>>608115 >Почему нельзя было сделать переменные экземпляра специфичными для методов каждого класса и миксина? Потому что если мне очень захочется, я всё равно их достану через instance_variable_get. А наркомания с @!var - попытка изобрести костыль, неявно подразумевающий интерфейсы, которых нет опять же из-за метапрограммирования.
>>608393 >Потому что если мне очень захочется, я всё равно их достану через instance_variable_get. Этому методу придётся принимать доп. параметр - класс, в пространстве которого мы ищем переменную экземпляра >костыль Для тебя соблюдения принципа инкапсуляции - это костыль? >интерфейсы, которых нет опять же из-за метапрограммирования. Руби для каждого метода храить хранящий его класс, сам попробуй method(:name).owner Поэтому не вижу никаких проблем для реализации того, о чём я говорю
>>608414 >Для тебя соблюдения принципа инкапсуляции - это костыль? Так соблюдай, кто тебе запрещает?
>Поэтому не вижу никаких проблем для реализации того, о чём я говорю Суть не в том, что такое невозможно, а просто бессмысленно - я удалю геттер в рантайме и приехали. Никакие интерфейсы не помогут. О какой инкапсуляции может идти речь, если метапрограммирование подразумевает изменение объекта извне? Какая-то защита от детей.
>>608449 >Так соблюдай, кто тебе запрещает? Да я бы с радостью не использовал переменные экземпляра, но других способов хранить данные в экземпляре нет. Тут в самом языке принцип нарушается. >я удалю геттер в рантайме и приехали И что? У тебя не будет доступа к соответствующему полю, методы, использующие этот геттер упадут с ошибкой NoMethodError. Но возможности для случайного доступа не будет, а это и есть соблюдение инкапсуляции. >О какой инкапсуляции может идти речь, если метапрограммирование подразумевает изменение объекта извне? А protected, private - это что по-твоему? Доступ через instance_variable_get никак случайным не назовёшь.
Я же не предлагаю отказаться от метапрограммирования. Я предложил, как можно реализовать instance_variable_get - с передачей доп. параметра.
Можно даже сделать через @!my_var доступ к тем же переменным, что и через @my_var, но ограниченный пространством текущего класса. Тогда предпочтительно будет использовать безопасный @!, а через @ можно будет осознанно получать переменные без ограничений. Это уже неслучайный доступ, потому что для него другой синтаксис (хоть и похожий).
Жаль, что не наоборот. Более простая запись должна обозначать более частоиспользуемую функцию, а значит более безопасную Сейчас уже никак не поменять, ибо куча существующего кода может зависеть от этого поведения. С send и public_send та же фигня
Двач пишу сайт ренты машин. Собственна такой вопрос. как правильно написать поиск по датам. Сейчас в очень простом реализовам по срествам 2ух полоей : дате начала и дате конца. Сейчас надо дописать такую фичу. мол машина сдаеться X конкретных дней в неделю(ну с пятницы по воскресение на пример) . И я вот думаю какой правильный путь написания этой фичи?
>>608522 >Нужен специальный, один символ вместо @ тогда уж. Я же сказал - всё уже занято в Руби. А этот хорош тем, что похож на @, который близок по смыслу, инабирать легче, чем @ с любым другим символом
>Алсо, иди патч к рубям пили и ПРОПОУЗАЛ. Я и хотел, но не так быстро. Сначала надо бы спросить на форуме, примут ли подобное изменение.
Я пытался реализовать в виде гема. Вместо синтаксиса использовал методы get :var и set :var, value. Но руби не сохраняет классы-владельцы методов в стектрейсе. Есть гем sender, но он только на 1.9.3 работает почему-то.
Думаю сначала реализовать как гем с нативным расширением (и с препроцессором исходников лол), отточить всё и потом уже идти на форум руби.
>>608524 Ну тебе надо установить взаимно однозначное соответствие между строкой (потому что её легко сохранить в бд) и словарём { monday: false, tuesday: true, ... }
Проще всего использовать модуль Marshal, но я не уверен, что это хорошая идея
А может в твоей БД есть битовые карты. Погугли. В Postgres вроде были
А я хотел бы, чтобы "юзерспейс" в рубишном ооп вообще очистили от дефолтного дерьма, пикрелейтед. Это касается и дефолтных методов объекта, и методов класса. Столько слов полезных занято. Из-за этой хуйни, например, мы пишем .includes(...) с буквой s при работе с AR.
Чтобы то ли какой-то специальный синтаксис для вызовов "системных" методов, то ли хуй знает что.
Или какое-то средство, позволяющее указать, какой именно метод мы вызываем в данный момент. Без еботы типа self.class.superclass.instance_method( :foo ).bind(self).call или плясок с alias.
Я, например, поражаюсь, как сотня расширений к рельсовому эктиврекорду умудряются срать в него тысячами своих методов и свойств и друг-друга не ломать.
>>608574 >А я хотел бы, чтобы "юзерспейс" в рубишном ооп вообще очистили от дефолтного дерьма, пикрелейтед На это уже завязано много кода, увы, не выйдет. >Чтобы то ли какой-то специальный синтаксис для вызовов "системных" методов Ну это совсем не Ruby-way. Тупо в модули убрать можно было бы лет 15 назад >Или какое-то средство, позволяющее указать, какой именно метод мы вызываем в данный момент. Без еботы типа self.class.superclass.instance_method( :foo ).bind(self).call или плясок с alias. Да, хорошая идея. Коррелирует с моей немного >Я, например, поражаюсь, как сотня расширений к рельсовому эктиврекорду умудряются срать в него тысячами своих методов и свойств и друг-друга не ломать. Да надо просто классы типов завезти в руби
Котаны, не подскажете что почитать чтобы писать более гибкий код (на руби и вообще), может какие-то гемы особенно стоит почитать? А то проблему-то злостного нарушения DRY я вижу, но чот не понимаю как решать.
>>609218 >@name = "Probe #{Probe.next_probe_id}" Ну кто так делает? Сделай отдельный метод: >@name = name >def name > @name ||= "Probe #{Probe.next_probe_id}" >end
>>609236 Ну бля, он не настолько поехал на хороших практиках, как я, значит.
Серьёзно, то до сих пор думаю, как лучше сделать. Простой вызов name в initialize обескураживает. Присвоение будет лишним, потому что сам name его выполняет. Про дублирование кода молчу.
Кажется придумал. Надо id присваивать в конструкторе, а name сделать зависимым от id. А то сейчас name выполняет две функции. А id вообще нигде не хранится, получается. http://pastebin.com/Yh4ebz0P
>>609227 >>609241 Сук бля, не могу. Счас лопну от злости. МУДАК, КОГДА ТЕБЕ ПОНАДОБИТСЯ КОД ВТОРОЙ РАЗ, ТОГДА И ВЫНЕСЕШЬ. Как же бесит читать лапшу вот таких вот "поехваших на хороших практиках".
>>609253 И вообще, избыток ХОРОШИХ практик не может быть плохим по определению. Ты либо объясняешь, почему моё предложение НЕ ХОРОШЕЕ, либо идёшь нахуй отсюда в тред к пхпшникам
>>609760 Всё уже тысячи раз обсуждалось, маня. Нет разницы, выполняется код 10 или 30 мс. Тем более разрыв между скоростью выполнения кода на руби и на "языках попроизводительнее" быстро уменьшается. А вот по скорости разработки Руби нет равных. Короче, уебывай, тебе тут не рады.
>>609771 > Нет разницы, выполняется код 10 или 30 мс. Для хелоуворлда нет, разумеется, но в реальных проектах разница есть, и особенно огромная разница - выполняется код 1000 мс или 50000 мс. Именно такой разницы достигает руби. > А вот по скорости разработки Руби нет равных. Что тут сказать, это манямирок руби-фанбоя. Ничего больше.
>>609777 >1000 мс или 50000 мс Какой же ты тупой. Выполнение кода бекенда - это процентов 10 от времени выполнения запроса в целом. Речь идёт о вебе. Я не предлагаю писать числодробилки на руби. >манямирок Манямирок - это где твой любимый, я полагаю, джаваскрипт является удобным языком
>>609781 > >1000 мс или 50000 мс > Какой же ты тупой. Выполнение кода бекенда - это процентов 10 от времени выполнения запроса в целом. Ну если писать гостевухи, то разумеется.
> >манямирок > Манямирок - это где твой любимый, я полагаю, джаваскрипт является удобным языком Мимо.
>>610041 Шрифт называется РАДУГА. DejaVu Sans mono какой-нибудь небось. Вообще сейчас на финде уже никто не кодит, это прошлый век. Ставь юбунту чувак. В танки на PS4 поиграешь.
>>610071 По первому: в рубимайне нажимаеш "ПОИСК СИМВОЛА", пишеш "SAVE". Немножко скроллишь. Тащемта, кому надо, те знают, что стафф касательно транзакций находится в модуле с соответствующим названием.
По второму ничего сказать не могу, но я бы в рубимайне воспользовался отладчиком, да выяснил бы за 1 минуту.
>>603266 (OP) Поясните за Ruby? Для чего его юзают какие-то крупные предприятия и корпорации? Т.е., если я его выучу и пойду на работу, что я на нём буду писать? И насколько он сложный в освоении?
>>610071 Там модуль есть в AR, называется CounterCache. А ассоциации has many и belongs to принимают опцию counter_cache, и если она есть, динамически создают коллбэки, которые дёргают методы с того модуля.
Я даже без отладчика смог это выяснить в рубимайне благодаря средствам навигации по коду.
>>610080 >Для чего его юзают какие-то крупные предприятия и корпорации? Для автоматизации, chef, там всякие. Ещё сайты говорят делают. >Т.е., если я его выучу и пойду на работу, что я на нём буду писать? Нетленку. >И насколько он сложный в освоении? Нужно два высших образования.
http://www.opennet.ru/opennews/art.shtml?num=43574 >Из связанных с Firefox событий также можно отметить анонс проекта Binaryen, в рамках которого подготовлен написанный на языке С++ компилятор для WebAssembly, универсального низкоуровневого промежуточного кода для выполнения в браузере приложений, скомпилированных из различных языков программирования. В состав Binaryen входит интерактивная оболочка для выполнения модулей на WebAssembly, компилятор asm.js в WebAssembly, декомпилятор WebAssembly в asm.js, LLVM-бэкенд для компиляции произвольного кода в WebAssembly и wasm.js, порт Binaryen на JavaScript. Началось котаны.
>>610110 Нет, ну уже существует множество фреймворков, позволяющих пилить фронт на практически любом языке. То что они никому не нужны - другой вопрос. А этот wa-дурачок просто о них не знает, вот и форсит.
>>610115 Я знаю и о новых трансляторах в нативный яваскрипт, которые были на последних рубицонфах. Это другая весч, тут будет единый бинарный формат экзекутабла — меньше дерьма будет литься по сетям в текстовом виде. Совсем страх потеряли cUrl'ы вы мои ненаглядные?
Всем суток времени доброго. Есть мленький опыт в Си и Обжектив-Си, работал чуть-чуть с ООП. Насколько перспективно начинать сейчас заниматься вебом, а именно ror (с упором в бэкэнд нежели фулстэк)?
>>610704 Про какие перспективы ты спрашиваешь? Не уйдёт ли завтра RoR в небытие? По идее не должен, пятая ветка весьма резонансная, много чего выкинули (правильно сделали), добавили приятных ништячков.
Но через лет 15 RoR наверное уйдёт, на его место придёт что-то другое, может даже не на руби.
Учить RoR определённо стоит, хотя бы потому что из него воровали идеи все кому не лень, а первоисточник всё равно лучше. Ruby приятный язык.
Просто помни, что надо учить не Ruby, RoR или Haskell, а программирование вообще, алгоритмику. Только так перспектива будут самая лучшая.
>>610767 Чувак у тебя с парсингом (синтаксическим разбором) проблемы и пониманием речи. >>610715 тебе написал идти сначала в пыху вникнуть, потому что считает что ты тупенький.
Если решил учить руби, то учи, никто тебя ругать не будет. Гораздо сложнее придумать себе интересный учебный проект. Другое дело, что Ruby,PHP,Scala != программирование.
>>610811 Ещё один баран не способный к пониманию написанного.
Знание синтаксиса языка не делат тебя программистом. Декомпозиция, паттерны, архитектура, стайлгайды, алгоритмика делают. Программировать как real programmer можно хоть на WYSIWYG черепашке.
>>610085 Анон, можно еще вопрос? Я вижу ты активно работаешь с е-комерс. Наверняка у тебя где-то есть нетривиальные ситуации. Может подскажешь хорошую практику. Мне вот нужно при создании сущностей обновлять счетчик суммы. Что-то типа payment belongs_to order условно. Каждый раз при условной payment я проверяю этот счетчик у order, если он достиг некоторого значения - то всё. И вот я проверяю и обновляю счетчик в транзакции с блокировкой - блокирую order FOR UPDATE, чтобы какой-нибудь параллельный процесс не получил уже "старое" значение счетчика и не создал одновременно лишний payment. Все ведь правильно делаю или перемудрил?
Тебе нужно использовать либо for update, да, для блокировки выбираемых строк, либо уровень изоляции транзакций serializable. Первый вариант - это пессимистичная блокировка. Вторая параллельная транзакция при попытке заблокировать строки будет ждать, пока первая завершится. Второй вариант - оптимистичная блокировка. В случае если вторая транзакция натолкнётся на строки, по которым попали select'ы первой транзакции (которая ещё в процессе), вторая транзакция вылетит.
Если строки в селектах не блокировать, то обе транзакции выполнят свои апдейты исходя из тех данных, что прочитали на момент выполнения, и апдейты могут друг-друга затереть. Да, про чтение данных в условиях параллельных апдейтов читаемых таблиц там тоже есть различия для разных уровней изоляции, но это к твоему кейсу не относится, так как апдейтишь ты другую таблицу.
Как вариант ещё можно в некоторых особых случаях замутить вспомогательный воркер-процесс, который в последовательном режиме делает важные апдейты, не беспокоясь о конкуррентности.
>>610940 В подробностях AR я ковырять не хочу, но предполагаю, что там используется основной принцип работы модулей в руби. При включении модуля в класс модуль не затирает методы класса и не добавляет их, а добавляет себя в цепочку наследования класса. Так что если модулей несколько с одним и тем же методом, мы таки можем вызвать все эти методы по цепочке.
Возможно, стоит ещё добавить, что рельсовый эктиврекорд собирает себя из десятков модулей. Сколько там методов в нём? 200? 400? Вот это всё добро разбито на кучу файлов. Это может быть не очевидно, наверное...
Пацаны у меня кайнд оф депрессия. Занимаюсь программированием грубо говоря с 10 лет(правда я дохуя раз забивал но не суть). сейчас работаю на фрилансе рубистом уже где то 6-7 месяцев, деньги платят . И вот в чем беда. я вроде бы и работаю и совсем не чувствую роста и чувствую и знаю что я обоссаный быдло кодер. Читаю вас и ахуеваю , стейт машины всякие сложные архиткетуры. Бля как стать нормальным рельсовиком?
>>611102 > сейчас работаю на фрилансе Дык вот же. Самый охрененный рост будет когда тебе есть у кого учиться и есть где ты это можешь применить. Можно, конечно, и самому начитаться всяких бестпрактисов. Но это всё равно не то.
>>611123 Просто не всё можно и нужно применять сразу. Часто вижу как джуниоры начинают применять новые фишки только чтобы их применить. Не задумываясь о том, нужно ли это. Даже если это нужно использовать, нужен кто-то, кто мог бы сказать тебе, правильно ли ты сделал. Как правило, в статьях примеры делают совсем на пальцах. Когда дело доходит до реальных задач возникают некоторые трудности.
>>611369 >Как обычно на дефолтном апворке или ещё где-то? >Где вы кроме апворка ищите работу? Ты уж определись с вопросом-то
>Были же в бородатые времени какие-то форумы по рубям где можно работу было найти или сорт оф зис. http://rubyjobs.ru Я особо не сидел там, но удалось однажды устроиться в фирму. Если мониторить круглосуточно, то, думаю, шансы стремятся к 100% при наличии хоть какого-то опыта. Всё таки рубисты до сих пор крайне востребованы даже в России
>>611369 Просто удаленная работа есть на hh.ru. Фриланс кроме апворка есть на toptal.com (они берут на себя поиск заказов и общение с клиентами, тебе остается только писать код).
>>611380 >Просто удаленная работа есть на hh.ru И в офисе тоже. Меня там сама нашла HR из местной фирмы, а я даже не знал, что у нас в городе на РоР кто-то разрабатывает. Ну я отказался, потому что фрилансер
>>611382 Ну хз, по мне постоянная удаленка (со свободным графиком) лучше фриланса - не надо постоянно искать заказы, не надо уметь общаться с заказчиком и заниматься прочей менеджерско-социоблядской хуитой, не имеющей никакого отношения к программированию. Просто пишешь код из дома и получаешь зарплату.
>>611386 >постоянная удаленка (со свободным графиком) лучше фриланса Ну я на апворке такие заказы и беру. Сейчас два параллельно, в одном нет и 10 часов в неделю, в другом до 20
>>611394 А я и не работаю на тех, кого бы устроило качество, которое могут дать за $3 в час. Понятно, что таких заказов меньшинство. Зато в последнем был единственный вопрос - какой последний паттерн проектирования вы узнали? Ну я рассказал про репозиторий, ROM и т.п. И меня единственного позвали на интервью, а там было >50 откликов.
>>611397 Во фрилансе нельзя просто так зарегистрироваться и сразу, за пару дней, с пустым портфолио и нулевым рейтингом, получить заказ. Поэтому он днище.
>>611538 В программировании нельзя просто так вкатиться и сразу, за пару дней, с пустым портфолио и нулевым рейтингом, получить работу. Поэтому оно днище.
>>611538 Тоже так думаю. Сначала всё равно придется воевать с ордой индусов. А на фуллтайм они просто не могут пройти даже, поэтому там конкуренция поменьше.
>>611557 >отчисления в пенсионный фонд Инвестиция в чужой бизнес, которую ты не можешь контролировать. Я лучше куплю акции каких-нибудь компаний, которые сам выберу >ДМС Оплачиваемый из твоей ЗП, независимо от того, насколько ты используешь эту страховку. Лучше лечиться в платных клиниках или самому выбрать ДМС >оплачиваемый отпуск Оплачиваемый, опять же, из твоей ЗП. Во фрилансе я сам выбираю, когда работать, а когда отдыхать
>>611583 Единственное, что ты контролируешь в этом случае - это продолжительность и частоту отпусков. В годных конторах даже это не проблема. Ну и где твой бог теперь? Пока ты тратишь заработанное, конторские отдыхают зарабатывая!
>>611578 > Я лучше куплю акции каких-нибудь компаний, которые сам выберу Пидорахи, когда покупали акции МММ и Хопера тоже так думали.
> Лучше лечиться в платных клиниках или самому выбрать ДМС Влажные мечты нищеброда. Весь твой доход уйдет в нуль при первом же лечении зубов, и будешь пару месяцев жрать доширак, если за это время не найдется хорошего заказа.
> Во фрилансе я сам выбираю, когда работать, а когда отдыхать Ни хера подобного. Во фрилансе ты как минимум раз в неделю будешь искать новые заказы, боясь пропустить выгодное предложение. Про такое слово, как отпуск придется забыть вообще.
Удаленка со свободным графиком предоставляет те же самые плюсы, что и фриланс (работа из дома), но полностью лишена его минусов. Ты просто пишешь код и гарантированно получаешь зарплату 2 раза в месяц.
Есть два стула. На одном рор дрочёный, на другом пхп + ларевел точёный. На какой сядите? Опыта в вебе вообще 0, хочу перекатиться из хеллоуворлдщика (пора бы уже, а то синтаксис уже и джавы, и обжа, и крестов, и питона освоил и даже ООП потрогал везде). Цель - вкатиться в фриланс/удалёнку
>>611596 >Во фрилансе ты как минимум раз в неделю будешь искать новые заказы Нет конечно, я же не индус >Пидорахи, когда покупали акции МММ и Хопера тоже так думали. Ну то пидорахи А пенсионные фонды ничем не лучше >>611589 >конторские отдыхают зарабатывая! Отдыхают, тратя уже заработанные деньги, которые им не доплатили. Ты вообще в конторе работал?
>>611623 >уже заработанные деньги, которые им не доплатили Охуеть, ну подели эти деньги на 11: пиздееец не доплатили пару копеек в месяц, ух блять, пойду сам заработаю лучше! Ты серьёзно щас? При равной зарплате на фрилансе ты проебываешь деньги, вася.
Пацаны недавно писал на счет поиска по дням недели.так я нифига и не понял как сделать это правильно. Сейчас подумал : Может оставить все как есть тоесть у модели я 2 поля дата начала и дата конца. но обновлять эти 2поля каждую неделю:?
Скажите, за сколько объективно можно научиться Ruby если с синтаксисом знаком и сделал 1-2 сайта на RoR? Что для этого задрачивать, алгоритмы на Ruby? И так же интересует вопрос намного ли дольше учиться если еще нужен и Coffeescript?
Хочу устроиться на работу, но там нужны знания Ruby и Coffeescript а я только на RoR сделал пару сайтов (bootstrap там прикрутил, gem install и все в таком духе).
>>612011 За пол года можно надрочиться. Учат в принципе алгоритмы (а не алгоритмы на руби), иначе бы задачка обменять значания двух переменных решалась бы простым: a, b = b, a
>>612036 Спасибо за ответ. Алгоритмы - понятно. На Ruby написал потому, что мне именно его нужно выучить а не абстрактные алгоритмы в вакууме. Имею ввиду реализацию на этом языке. А что по поводу второй части вопроса? Намного ли дольше придется учиться если еще нужен и Coffeescript? Или после освоения одного языка на должном уровне все последующие будут изучаться легко и играючи?
Если не сложно, аноны которые уже работают в этой сфере и на этом языке программирования - напишите пожалуйста список must have алгоритмов для изучения в первую очередь. Без чего невозможна работа в данной профессии (трудоустройство по данному направлению). Спасибо.
Конпиляю рубишку новую: > ruby-2.3.0 - #downloading ruby-2.3.0, this may take a while depending on your connection... > % Total % Received % Xferd Average Speed Time Time Time Current > Dload Upload Total Spent Left Speed > 100 13.5M 100 13.5M 0 0 737k 0 0:00:18 0:00:18 --:--:-- 960k > No checksum for downloaded archive, recording checksum in user configuration. > ruby-2.3.0 - #extracting ruby-2.3.0 to /home/user/.rvm/src/ruby-2.3.0.... > ruby-2.3.0 - #configuring........................................................... > ruby-2.3.0 - #post-configuration.. > ruby-2.3.0 - #compiling........|
>>612526 Я только установил 2.3.0, нет там его в стандартной поставке. Вообще подбешивает ставить новые версии руби, потом переключаться на другу, сохранять список гемов, и потом снова переключаться на новую версию и там ставить новый список гемов, может есть способ проще? Хмммм…
Ребята, хочу вкатится в няшный рубироид и не менее няшным чемоданчиком в гемами (рор). Насколько перспективно? Найду ли потом работу в ДС-2/на фрилансах-апворках?
>>612957 > Если в душе не гей-шлюха, то вряд ли. Там очень надо уметь продавать себя, конкурируя с индусами fixed Поэтому нормальные люди работают на удаленке.
А если сравнивать с пхп + ларавел/yii, насколько легче/сложнее и медленнее/быстрее вкатиться в руби+ рор без опыта разработки (но есть опыт Си и решения маленьких задачек типа факториала через рекурсию и прочей детской фигни)?
>>613121 >РабиПХП болото - это для тех, у кого не хватило мозгов на что то получше. Бред. На чем получше работает весь веб? Уж не говоря о том, что это самая быстроразвивающаяся отрасль IT.
А если сравнивать с пхп + ларавел/yii, насколько легче/сложнее и медленнее/быстрее вкатиться в руби+ рор без опыта разработки (но есть опыт Си и решения маленьких задачек типа факториала через рекурсию и прочей детской фигни)?
Я бампану свой вопрок, т.к по теме даже 1.5 анона не отписали.
>>613335 Оттого-то веб так быстро развивается, что одни макаки пишут, да. И новые технологии макаки пилят и горы статей по архитектуре приложений макаки написали. Голову лечи, эксперд.
>>613383 >пхп + ларавел/yii Я слышал, что в ПХП всё кроме Симфонии - страшный говнокод, а Симфония в разы сложнее Рельс. Ну и ПХП проще Руби лишь концептуально, там очень много нюансов, которые надо знать, чтобы не стрелять по ногам.
[code] C:\Development\CommunityEngine\CommunityEngine>bundle update Fetching gem metadata from https://rubygems.org/.............. Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies....................... Bundler could not find compatible versions for gem "rails": In Gemfile: rails (= 4.2.5) x64-mingw32
community_engine (~> 3.0.0) x64-mingw32 was resolved to 3.0.0, which depends on rails (~> 4.0.0) x64-mingw32 [/code]
Ещё можно в шапку добавить видеоуроки по рубям на rubyschool.us Там сто часов видео, где чувак обучает других программированию на руби с самого нуля до освоения рельсов. Как по мне, достаточно годный туториал.
>>613977 Попробуй найти нужную тебе функциональность на вендо_шарпе, ruby фактически linux/unix only. И это хорошо. Фильтрует вендоблядков головного мозга.
> Bundler could not find compatible versions for gem "rails": > In Gemfile: > rails (= 4.2.5) x64-mingw32 > community_engine (~> 3.0.0) x64-mingw32 was resolved to 3.0.0, which depends on > rails (~> 4.0.0) x64-mingw32
Проблема не в винде. А в том, что ты тупой прост)))
И вот вроде можно передать хэш с параметрами, но хотелось бы все таки контроллер держать чистым, да и я везде использую jbuilder вьюхи. Может сталкивался кто с проблемой?
PS: render :create, переменная с объектом - не подходят, пустым второй аргумент оставить нельзя.
>>613994 Ну разумеется, из-за того что руби тормозное дерьмо, каждый второй костыль для него пишут на си, и естественно кроссплатформенность рубидауны не осилили.
>>614066 > мартышки не осилили нормальные библиотеки, без костылей > вместо этого они жрут говно и высирают кривые говнокостыли на C, и подтверждая этим что сруби - кривое неполноценное говно > что-то там кукарекает на джаву Ясно
>>614073 > пакет на чистом C/C++, без линукс-онли-костылей конпелируется везде из исходников > пакет на джяве даже конпелировать не надо, а только поставить жвм
Блядь, вы заебали. Руби НОРМАЛЬНО работает под виндой. Если какой-то джем не собирается, значит это не популярное дерьмо, написанной криворукой макакой, а значит в проекте не нужно.
Успешно работал уже над несколькими проектами на рельсах под виндой. Размер средний и крупный.
Подскажите, как мигрировать существующие данные при изменении схемы БД? Просто писать в миграции соответствующие манипуляции? А если исключение посередине процесса? Оборачивать в транзакцию? Как убедиться, что данные мигрировали корректно. Есть практика написания автоматизированных тестов на это вместе с написанием самой миграции?
>>614506 Нет, заебали вы. Потому что нигде не написано, что гемы кому-то чем-то обязаны, а про то, что могут не работать под виндой - да в общем-то каждый тред об этом твердят, но до сих пор находятся такие как ты.
>>614561 Да. Прямо в миграции. И да - оборачиваешь в транзакции. Тесты здесь лишние. НО не используй для миграции данных свои модели. Может получиться так что рано или поздно ты вообще выпилишь модель и тогда миграция не будет проходить. И ещё: позаботься о том, чтобы у тебя не только мигрировались данные, но ещё и откатывались.
Ебать ну что за кид кодеры вы, под Видной тока в десятки добавили SSH до этого нужно было putty ебать, как вы на такой системе что то делаете, я когда на нем помогал одно нубу не мог понять как мне сделать ключи оказываться нужна еще программа... !!!
Винда сделалана для мамок и гаймеров лохов, но не как не для разработки, на нем может и можно что то делать тока без Баша (и как вы живете без zsh) ты будешь эта делать в 10 раз дольше и на серваке у вас тоже Винда? Как вы на нем что то делаете ?!
Короче не ебите мозги, ставти Линукс если очень крутые BSD, а если хипстеры то Мак и не выносите мозги!!
>>615042 Нахуй до сих пор тот D мусолят? Это же те же кресты, только с другого ракурса. Берите Rust, он активно развивается и привносит новые идеи, которые улучшая надёжность приложений.
И кстати, из не взлетевших си-подобных языков был Clay, который намного лучше D, и вот за него реально обидно.
Блять, хули в Руби даже нельзя определить, является функция чистой или нет? Предположим, я хочу написать оптимизирующий компилятор для подмножества Руби. Мне что блять, всю стандартную библиотеку изучать и составлять список чистых функций?!
Ну и хули мне тогда оптимизировать?! Вот ту поеботу что ли?
Ага, разбежались, RubyVM::InstructionSequence нельзя самостоятельно создать, ну там опкоды добавлять хуе-мое. Только из руби-исходника или существующео метода.
Охуеннае бля метапрограммирование в руби! Гомоиконность во все поля!
Идея заключается в том, чтобы писать на статически типизированном подмножестве Руби внутри обычных программ на динамическом Руби. Для этого нужно выделить сущности, которые в Руби могут быть типизированы до исполнения. Они будут объявляться как классы или модули. Проверка типов будет производиться при загрузке файла с кодом. Тогда же будет производиться компиляция с оптимизацией.
Но чтобы это было возможно, нужно иметь доступ к коду метода и возможность генерации байткода виртуальной машины. И если первое условие более-менее костыльно можно воплотить, то про возможность второго я ничего не нашёл.
Может кто знает, возможно такое в YARV, mruby, JRuby, Rubinius?
Аноны, простите за озеленение данного раздела такими вопросами, но:
def stock_picker(num) @num = num num = num[num.min..num.max] puts num end
stock_picker([17,3,6,9,15,8,6,1,10])
Нужно вывести диапазон с минимумом-максимумом в последовательности. Например 3,6,9,15 в выводе данного кода. Но это говно попутно выводит и все остальное 8,6,1,10 которое нахуй не нужно. Как и почему он это делает, и как сделать чтобы выводил только то, о чем я написал?
>>615828 Хотя это я тут обосрался и он выводит все то же что и на входе. Реквестирую способов выполнения задачи с пояснением что происходит и в какой момент.
>>615864 Который находится в конце последовательности. Блядь, я наверное просто нихуя не умею объяснять. Вот задание:
Реализуйте метод #stock_picker, который принимает массив цен, одна цена для каждого дня. Метод должен вернуть пару дней - оптимальный день для покупки и оптимальный день для продажи. Дни начинаются с 0.
stock_picker([17,3,6,9,15,8,6,1,10]) => [1,4] # for a profit of $15 - $3 == $12 Советы
Помните, что прежде чем продавать, надо купить Будьте внимательнее с пограничными случаями, когда наименьшая цена в последний день и когда наибольшая цена в первый день.
>>615887 Не собеседование а задание из codenamecrud.ru, но прочитав все по теме, нихуя не понимаю как делать. Все решения из сети кажутся ну пиздец громоздкими. Неужели нельзя в рубине как-то проще это сделать?
> принимает массив цен, одна цена для каждого дня > Дни начинаются с 0. Каждый день это индекс в массиве +1. Даже не просят назад перевести в календарные дни. > Метод должен вернуть пару дней - оптимальный день для > покупки и оптимальный день для продажи. Вернуть-то таки нужно два номера индекса в массиве. Но надо хитро дрочиться с диапозонами.
def stock_picker(days = []) profit = 0 choose = [] message = "Don't do it bro!" days.each_with_index do |buy, i| days.each_with_index do |sell, j| if(i < j && buy - sell > profit) choose[0] = i choose[1] = j message = " for a profit of $#{buy - sell}" end end end print choose.to_s if !choose.empty? print message end
>>615924 Ну, то есть не стесняться и хуярить вот эти вот все методы и классы по взрослому как в еба приложении что-ли? Я думал это задания так, для закрепления материала. Чему эта еба вообще учит?
Вот, кстати: codenamecrud.ru - форк theodinproject.com на русском языке, я его сначала нашел а потом уже оригинал, если кому интересно.
>>615931 >Чему эта еба вообще учит? Анализировать и понимать задание. Наверняка есть какой-то финансовый гем чтобы решать эту задачу, но тебя учат тому чтобы ты не пускал слюну, когда гема не найдётся.
>>615936 Понятно. Спасибо. Изучаю рельсы и попутно решил учить и сам руби, чтобы не пускать слюни как ты выразился.
Алсо еще вопрос: вот я прошел кодакадемию по руби, Rails Tutorial, прошел рельсы для зомбяк от кодошколы, прочел еба web development на rails 4, обмазываюсь скринкастами всякими на эту тему, захуярил интернет магазин по книжке и пару-тройку сайтов на хероке, которые даже работают (но там кроме гемов и бутстрапа нихуя нету). Могу ли я хоть на что-то претендовать в качестве жуниора по рельсам? Или нахуй пошлют? А на удаленке?
Кстати вот это: >>615918 как я (написал) понял не правильное решение задачи. Оно двигает не по алфавиту, а по всей таблице символов. Правильное намного более объемное.
>>615983 >строки в руби хранятся с переменной кодировкой, т.е. размер одного символа может быть 1 или 2 байта Если нам без разницы, как выглядит строка в зашифрованном виде, лишь бы расшифровывалась корректно, тогда можно просто привести строку к массиву байт.
>>615918 Ну кто так пишет?! Сделай ты это простыми функциями. Это не такой сложный алгоритм, что для его инициализации нужен целый класс http://ideone.com/Cqv1yQ
>>616049 Я ему решение принёс нормальное, и я у него ещё и охуел. Больше вообще не буду читать код в сообщениях таких долбоёбов, без подсветки и отступов
RUBY_SHAPKA VERSION = 1.0.6
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://rubykoans.com
И вот еще https://rubymonk.com/ - Матц одобряет.
2. Какой gem посмотреть, чтобы понять, как писать код?
Лучше всего посмотреть небольшие gem'ы вроде cancancan, devise, 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, Lotus, Volt, Grape, отличная штука для DevOps - Chef и годные генераторы для бложиков - 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/
Не так просто - upwork.
Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.
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
Прочитал? Теперь рефактори то, что уже написал. И не забывай покрывать тестами.
Хорошим финалом будет деплой, это пожалуй самое болезненное, и ничего общего с деплоем на heroku, где тыц тыц и готово. Придется поковыряться со смежными вещами и узнать много нового, уже устоявшийся гем для таких дел - Capistrano.
Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой.
Ну, а мы открываем очередной Ruby Thread.