Это копия, сохраненная 13 июля в 15:17.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
https://www.ruby-lang.org/en/news/2022/12/25/ruby-3-2-0-released/
ИЗУЧЕНИЕ ЯЗЫКА
Q: C чего мне начать, чтобы стать рубистом?
A: Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и те же вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby.
А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.
Q: Следующий уровень, продвинутые книги по руби:
A: Confident Ruby by Avdi Grimm | Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition | Ruby Under a Microscope
Q: Онлайн курсы чтобы попробовать/вкатиться:
A: https://ruby.github.io/TryRuby/ | https://rubymonk.com/
https://www.codewars.com/?language=ruby | http://rubykoans.com
Q: Какой gem посмотреть, чтобы понять, как писать код?
A: Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
Еще можешь полистать на гитхабе гемы с нарастающей популярностью (там еще нет тысяч строк, и тебе будет легче понять): https://github.com/trending?l=ruby
Q: Хорошие практики по руби и рельсам?
A: Обязательно стайлгайды (как оформлять код):
https://github.com/rubocop-hq/ruby-style-guide
https://github.com/JuanitoFatas/fast-ruby
https://github.com/rubocop-hq/rails-style-guide
Руководства "для чайников":
https://www.railstutorial.org/book [en]
https://www.theodinproject.com/tracks/1 [en] | http://codenamecrud.ru/ [ru]
Еженедельная рассылка с новостями из руби мирка:
https://rubyweekly.com
Прочая годнота:
https://github.com/markets/awesome-ruby
Q: Документация по стандартным библиотекам руби и рельс:
A: https://ruby-doc.org/ | https://api.rubyonrails.org
https://guides.rubyonrails.org
Q: Можно ли на руби писать нативные GUI, мобильные приложения, игры?
A: Да, но не стоит.
Q: Что ещё изучить?
A: Английский, git, linux. Паттерны. Один из часто используемых – Service Object.
https://www.sitepoint.com/7-design-patterns-to-refactor-mvc-components-in-rails
СРЕДА РАЗРАБОТКИ
Q: Как установить разные версии рубей?
A: https://rvm.io | https://github.com/rbenv/rbenv | https://github.com/asdf-vm/asdf
Q: Есть ли чат в Telegram?
A: @rubylang | @rubyschool | @rubyrush | @ruby_talks | @ruby_wdh
РАБОТА
https://hh.ru/search/vacancy?text=ruby
https://t.me/rubyjob
https://rubyjobs.dev/
https://www.upwork.com/
1200 $ в день. Это 150$ в час.
Это реальная зарплата.
Средняя зарплата айтишника во всем мире 135 тыс. долларов в год (средний уровень)
1200 в месяц - не деньги вовсе. Это заработок за пару дней должен быть минимум.
>не понимаю ваших претензий
Ты, наверное, даже конституцию не понимаешь, да?
>$1200 в месяц - это очень хорошая зарплата
6000-8000 за удаленку без ебли мозгов от недоразвитых - вот уже что-то уровня мрот айтишника, потому как должны быть миллионы долларов просто на консалтинге даже или на айти исследованиях рынка.
>> Ruby thread номер undefined method + for nil:NilClass (NoMethodError)
Soucka. Жизненно.
орнул
Это уже ит-консалтинг скорее.
Дежурно напоминаю: руби is dead.
По факту, марсиане - аутсорс галера, cредненькая зпшка, додики-сотрудниками, постящие свои нюдесы. общение с ними начинается с предложения нарушить свои трудовые догововора, аля "покажите ваш коммерческий код", что как бы намекает. Понтов выше крыши.
пруф ми вронг.
> постящие свои нюдесы
Жесть. Как раз хотел к ним апплаиться на след неделе, но после того как ты такое написал.....пожалуй сделаю это прямо сейчас. Go martians!
> Ты, наверное, даже конституцию не понимаешь, да?
Это шутка была, пчел. Когда кто-то типа учителя в рашке говорит "получаю 17 тыщ рублей", принято отвечать: "17 тысяч в день - это очень хорошая зарплата. Вот тут такое же, только наоборот.
> аля "покажите ваш коммерческий код"
Не храню, доступ к репозиторию забрали при увольнении. А какой ответ должен быть?
> аля "покажите ваш коммерческий код"
Не храню, доступ к репозиторию забрали при увольнении. А какой ответ должен быть?
Теперь понятно, это, безусловно, горькая правда, спора нет, 17 тыс руб, как и 1200$ - низкая зарплата, ты прав, конечно.
>По факту, марсиане - аутсорс галера, cредненькая зпшка, додики-сотрудниками, постящие свои нюдесы
Ну вот, и даже они предлагают 6-8 тыс $ за удаленку, я же говорю, это должен быть абсолютный мрот айтишника.
>Не храню, доступ к репозиторию забрали при увольнении. А какой ответ должен быть?
Поставь себя на место собеседующего, у него задача - убедиться что ты не вкатунишка с курсов, к которому придется приставлять личного ментора и ревьюить каждую запятую, он хочет увидеть что ты можешь и пишешь код, и что-то посложнее дефолтного скаффолда с каталогом залуп, а то что у тебя ни строчки кода не осталось и доступ забрали и показать нечего звучит максимально тухло, после такого аргумента не перезанимают.
>А какой ответ должен быть?
Говоришь, что ты подписал nda, но реализовывал такое-то, можешь показать кусок кода на гитхабе другого своего недопроекта.
Меня все знакомые отговаривают его учить, причём отговаривают агрессивно, будто промытые. Что за хуйня?
Можно ли установить Ruby base file, но не устанавливать MSYS2 development toolchain?
Мне кажется, что это избыточное говно - для меня, новичка изучающего Ruby.
Будут ли нужны эти компоненты, когда я начну изучать Ruby on Rails? Являются ли они необходимыми для этого фреймворка?
Поясните этот момент, аноны.
Ты неправильно ставишь вопрос.
Он должен звучать следующим образом:
"Стоит ли использовать Ruby в Windows?"
Ответом будет: "Нет, если ты не лютый мазохист. Если так нужна винда, ставь wsl, в нем линух, там уже работай с руби".
Ты ответил не по теме. Я спрашивал не это, так конкретно указано, что меня интересует
Тебе ж добра желают, болван. Нах ты нужен на рынке труда со своим шиндовс? Там за забором очередь из линуксоидов и кабану не нужно заставлять девопса усложнять пайплайны в компании из-за какого-то хуя, который хочет винду и не может сам свои проблемы с этим шиндовсом порешать.
Да вы заебали со своим рынком и вакансиями. У вас рабское мышление, что ли? Вы это учите только ради денег? Ебанулись?
Мне просто по кайфу, я не буду работать
Что ты собрался в шинде изучать? Обходные костыли и затычки чтобы юникс абстракции в руби интерпретаторе не протекали? Это тебе доставляет эстетическое удовольствие?
КОНКРЕТНЫЕ вопросы задавай своему наставнику на работке или чаджпт, а здесь люди попиздеть собираются о жизни и технологиях. И нас не ибет насколько твои вопросы чистоконкретные.
Чел, ты хуже бабы, реально. Я задал вопрос и увяз в куче ненужного мне говна, но ни одного ответа на поставленный вопрос не прозвучало. Дай угадаю - девушки у тебя нет, да?
Если будешь пытаться скомпилировать очередной руби пакет под винду, разработчик которого windows.h в жизни не видел, потому что на маке сидит, то девушки у тебя точно не будет.
Контекст беседы один: когда коту делать нехуй - он яица лижет и называет это ОКР. Ты настолько туп чтобы не понимать, что легко могут подсказать только по вопросам, которые встречаются в ежедневной практике? Но большинство работает с руби под никсами. Это тебе надо искать таких же вонаби ОКР как и ты.
Чел, больше не пиши. Ты реально тупой. Что вы вообще делаешь в этом треде, если даже не понимаешь смысла сообщений?
Подожду ответа адекватных анонов. Надеюсь, тут есть такие
пчел, тебе нужно оформить срыгос из треда, фастом
Я с годом опыта (чуть прикрутил) Ели выгрыз 1600 на удалёнке в ру язычной компании. Но ничего скоро буду получать миллионы, вот увидите
>промытые
Ты уже ответил. Думаешь кто-то что-то проверял, смотрел какая конкуренция или динамика по вакансиям и тд? Один сказал, миллион повторили . Так пхп хейтят, хотя большинство людей и не писали на нём сейчас на жс перешло
>ни одного ответа на поставленный вопрос не прозвучало
>Если так нужна винда, ставь wsl, в нем линух, там уже работай с руби
Это вполне конкретный ответ/решение твоих проблем. Как текущих, так и будущих.
Тебе люди правильно подсказывают что на чистой винде будет очень много ебли и работать все будет криво, а местави вообще работать не будет, причем инфу именно под винду ты так просто не нагуглишь, придется пердолиться по полной и самостоятельно.
И здесь тебе по твоим вопросам ничего не подскажут, потому что таких извращенцев как ты здесь не видели уже лет несколько.
Ну практического опыта полгода. 4 месяца стажировки за 300 долларов, пол года за 500. Я всё сложил и накрутил 2 месяца, вышел на 1600 долларов. на одной вакансии сказали, что дохуя прошу
Там мне будут писать, что зп джуна после вуза это 100к долларов в год
Руби - это не язык, на котором пишут из-за внешней динамики вроде настроений других разработчиков. Руби - это язык, на котором пишут, потому что по кайфу. Если ты умудрился в 2к23 отбиться от пропаганды питона и жс и как-то найти руби и начать его учить - скорее всего, у тебя были причины, и у тебя всё будет норм.
>>2599550
А хуй его знает, тут все на лунихе и маке. Можешь WSL установить. Но вроде бы стандартная поставка Rails на винде и без MSYS должна работать. Не уверен насчёт расширений, которые нужны будут для обработки картинок, например.
Пчел, тебя еще не заставляли вкатыаться в мобилки?))
Но вообще
> У меня ОКР и я очень тщательно отношусь к программам, которые устанавливаю в систему.
Тебе бы линукс попробовать, он таким нравится. И я сейчас даже почти не шучу. Начни с убунты, потом освоишься, потихоньку накатишь себе арч без декстопного окружения, или Qubes OS, где всякий хлам для разработки в одной виртуалке, а программы для чтения хентайной манги - в другой.
Хуй знает. Смотри по аутсорс-галерам (это когда в описании вакансии что-то типа "мы успешно помогаем нашим клиентам разработкой современного бла-бла-бла"), там обычно команды на каждом проекте небольшие, но фронтом/мобилкой другой чел занимается.
Если всё-таки попадёшь на фулл-стак - ещё не всё пропало, можно выкрутиться и обойтись без JS. Я несколько месяцев так протянул типа-фуллстаком, знал только основы HTML и на лету немного CSS подхватил (уже забыл всё).
Bootstrap и Tailwind помогают относительно без ебли относительно неплохие странички раскрашивать.
Для джуна на ру-контору на удаленке вполне норм. Не парься.
290, пчел
120к
https://asdf-vm.com/guide/getting-started.html
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.1
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
asdf plugin add ruby https://github.com/asdf-vm/asdf-ruby.git
asdf install ruby latest
asdf global ruby latest
Спасибо, но я просто rbenv с гита последний установил и он уже 3.2 руби подтянул нормально, начинаю вкат, отсасываю на этапе поиска работы и вешаюсь. Пока план такой.
>начинаю вкат, отсасываю на этапе поиска работы и вешаюсь. Пока план такой.
У меня такой же был. Сейчас не то чтобы в золотых горах купаюсь, но жизнь намного лучше стала, чем была до решения вкатиться. Так что хуй тебе, руби не одобряет суецыд
хотя рашка в 2к23 - это другой разговор, конечно, тут не знаю
> арч без декстопного окружения
Это как и зачем? Arch сильно сложен? Не понятно какие пакеты ставить, а какие нет. Знаю что есть установщик облегчающий накат Arch
WSL поставь. Я поставил и охуел как всё удобно.
> Arch сильно сложен?
Нет, при установке достаточно идти по вики (не так давно вообще графический установщик в стандартный образ добавили), а потом достаточно уметь гуглить.
Да он не то что сложен, гайды довольно понятные, и ты там ничего космического не делаешь. Даже гном в пару строчек устанавливается. Просто надо ебаться буквально с каждой мелочью, настраивать звук, ковыряться, как сделать неублюдочные шрифты и так далее, потом что-то может начать друг с другом конфликтовать - и вот тут уже нужно много энтузиазма.
>И ещё один вопрос - как обновлять версию Ruby в Windows?
>Возможно ли это?
В линуксе ты можешь накатить RVM и выбирать какую версию использовать из доступных (установленных), можно быстро переключиться между версиями, RVM вроде и под винду есть
>deel
>ОАЭ стремится сделать страну более привлекательной для мировых технологических компаний и стать ИТ-центром в регионе, отмечает агентство.
получается, в ОАЭ будет мекка айтишников, надо точно ехать туда снова, раз уж отсюда выгоняют
Я на ру карту не выводил у меня её и нет, но там не обязательно на неё, можно на бинанс в bnb выводить, я вот на revolut вывожу
> Английский знаю
> читать фулл тайм английскую книжку, начинает тошнить.
> Приходится задумываться над каждым словом.
хихикнул
Книги и на русском есть. В браузере сайты и статьи можно автоматически переводить
Чо ты хихикаешь?
По рзеузльаттам илссоевадний одонго анлигсйокго унвиертисета, не иеемт занчнеия, в каокм проякде рсапжоолены бкувы в солве. Галовне, чотбы преавя и пслонедяя бквуы блыи на мсете. осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы не чиаетм кдаужю бкуву по отдльенотси, а все солво цлиеком.
На английском так ты не сможешь.
У меня с глазами итак пиздец, вместо ручек и карандашей гора различных капель для глаз из за постоянного внимания на монитор. Хотелось бы книжки реальные. Ощутить так сказать классические бумажные буквы глазами.
>На английском так ты не сможешь.
Чел, это твоя проблема что ты переводишь слова
Ты же ру не переводишь, а у тебя сразу появляются ассоциации
Если у тебя с глазами проблемы, то зачем в айти вкатываться?
Нет, он устаревший. Есть русскоязычный аналог, не могу вспомнить название правда
Рельсы там не учил, а вот по руби +- всё неплохо. Рельсы лучше по доке учить я думаю
Просто отписываю тут в качестве бампа, ну и на случай если кто-то вбросит что еще стоит учить.
Теперь мой список обновился до этого:
This is the list of what I have learned:
ruby language basics +
rails install +
rails console basics +
rails MVC:
Controllers creation +
Models creation +
Views creation +
View refactoring (render partial) +
Forms creation +
Model relationships (has_many\belogns_to)
Validation +
Concerns (Modules) +
http basic auth +
Routing system +
Database Migrations +
Redirection +
ActiveRecord +
CRUD +
Helper file modules try +
Console scripts (rake tasks from /lib/tasks) [can be in use for cron, for example] +
env files implementation with additional env variables (dotenv-rails gem) +
cache system connection and use (redis with redis gem) +
queue functionality (rails jobs creation with resque job provider) +
Assets connection +
JS implementation (rails structure [from javascript folder]) +
Mailer + (DMARC local problem, but mailer works and mailer active job executes)
Additional gems\libs installation via bundler and gemfile +
Login\Registration functionality (devise gem lib) +
unit tests (RSpec based) +
Sessions and cookies +
websockets +
To learn/try:
Another web server out of puma (Nginx)
Another database out of sqlite (mariadb\mysql)
RBAC
Flash errors
Active storage
File upload
captcha
To read:
API quick look +
security aspects +
best practices +
Просто отписываю тут в качестве бампа, ну и на случай если кто-то вбросит что еще стоит учить.
Теперь мой список обновился до этого:
This is the list of what I have learned:
ruby language basics +
rails install +
rails console basics +
rails MVC:
Controllers creation +
Models creation +
Views creation +
View refactoring (render partial) +
Forms creation +
Model relationships (has_many\belogns_to)
Validation +
Concerns (Modules) +
http basic auth +
Routing system +
Database Migrations +
Redirection +
ActiveRecord +
CRUD +
Helper file modules try +
Console scripts (rake tasks from /lib/tasks) [can be in use for cron, for example] +
env files implementation with additional env variables (dotenv-rails gem) +
cache system connection and use (redis with redis gem) +
queue functionality (rails jobs creation with resque job provider) +
Assets connection +
JS implementation (rails structure [from javascript folder]) +
Mailer + (DMARC local problem, but mailer works and mailer active job executes)
Additional gems\libs installation via bundler and gemfile +
Login\Registration functionality (devise gem lib) +
unit tests (RSpec based) +
Sessions and cookies +
websockets +
To learn/try:
Another web server out of puma (Nginx)
Another database out of sqlite (mariadb\mysql)
RBAC
Flash errors
Active storage
File upload
captcha
To read:
API quick look +
security aspects +
best practices +
>Где ты это осваиваешь?
Я это не осваиваю, а знаю, я просто учу ruby on rails.
К примеру, я знаю, что такое вебсокеты и как они работают, знаю, как написать этот чат на иных языках и фреймворках, а вот как реализуются вебсокеты на рельсах - нет, поэтому мне достаточно было понять только эту часть - я почитал оф доки, посмотрел 2-3 видео и реализовал, и вот он работает, как и ожидалось
И я не учу всю документацию по фреймворку и все методы классов ActiveCable, а только то, что нужно было для реализации придуманной самому себе задачи, которая охватывает тему, надо будет больше - углублюсь сильнее, если будет такая задача стоять, буду знать, что и где смотреть, вот и все.
>>2608295
>Я тут самый успешный.
>Найс
Ну, спасибо, конечно, но фраза "я тут самый успешный" была написана с иронией и сарказмом, с самокритикой, очевидно, т.к. ничего действительно выдающегося там нет.
чтобы при ответе на твой комментарий или лайк прилетали
Только ActionCable или ещё есть варианты?
>фраза "я тут самый успешный" была написана с иронией
Без иронии, поставил убунту, сделал демку из хотваера, записал видео, это на голову выше например чела повыше, который ставит на винду mingw и тратит время на бестолковые размышления о необходимости девкита.
Руби отличный язык чтобы освоить кодинг, все концепции как на ладони, открыты и понятны, языки более низкого уровня накладывают ограничения, например, на джаве ты заебешься писать абстрактный код, на расте заебешься, на сишке в принципе не сможешь, а на руби - пиши любую дичь какая в голову приходит, практикуйся, в худшем случае у тебя будет минус пару гигабайт оперативы и лишняя секунда процессорного времени.
>Только ActionCable или ещё есть варианты?
Ну можешь api написать и по таймеру чекать уведомления в бд или в редисе каком-нибудь, брав по ajax ответы от api сервера, ну или activejob реализовать, чтобы уведомления собирал, только это не лучше вебсокетов для этой задачи, т.к. более нагруженнее.
>но язык мертв. Пруф ми вронг.
Ну вакансии то немного, но все же имеются, миллионы gem либ написано, и есть проекты, которые ruby используют, я вот учу его, т.к. мне надо для работы, внезапно.
>>2608931
>как латынь
Как латынь - это brainfuck, вот это точно без прикладного характера, но для особенных, ну или ассемблер, чтобы быть ближе к низкому уровню, к основам мироздания.
> была написана с иронией и сарказмом
Братишка не обесценивай себя. Я по жизни считаю так - ты учишься чему то, сделал чтото работающее и за это респект. Продолжай так же и у тебя все получится с руби и работой на нем.
Работу найти на руби проще, чем на любом другом языке
Пруф ми вронг
не искал работу дольше недели за свою карьеру
Ну что это? Short / long polling
Как Job будет собирать уведомления
А если Redis упал? Нужно же в БД всё хранить
Уведомления и статус прочитано или нет
Ну конечно. Что то не припомню чтобы в школах учили Руби. А вот какой нибудь Паскаль - да.
ЖЖ Артемия Лебедева уже нашел?
Спасибо, обязательно просмотрю.
руби учили в начале нулевых он тогда как раз выходил на плато своего хайпа, потом стрельнули рельсы и пошла пизда по кочкам, ну а дальше он сдох
Ну уже не вкатышь, но вкатиться на руби, где максимум 10 челов было на вакансию было куда проще, чем на питон, где вполне легко 100-200. Я так же уехал, но не в Грузию, а в Латвию. В чём проблема то?
Потому что на руби всего вакансий 20 на страну из них джуновских - две.
Имеет значение популярность у кабана, а не только у вкатуна. У вкатуна популярно всё, кроме 1с разве что.
А мне говорили руби комьюнити адекватное. Что то ты не похож на адекватного. Наверни ромашки чел.
>>2609815
Чел, ну теперь и в открытие жалобу катать?
Кабана -- нахуй. Сам будь кабаном
Хуяшки)
Заебали гундеть. Писать на том что по-кайфу, кабана слать нахуй
Самому кабаном становиться
нужно послать себя нахуй?
И 5 тыс+ вакансий в США, 64 в австралии и новой зеландии, 2 в России, даже в ОАЭ их больше.
>5 тыс+ вакансий
Т.е. я учу рельсы, потому что мне надо по работе, с чувством, что "вау, круто, неплохой язык", да и тут сравнивали ruby с латынью, все пишут, что вакансий почти нет, многих отговаривают учить. В это же время 5 тыс. вакансий на entry level, ну поделим их на 5 даже, чтобы исключить повторы от hr агенств, или на 10, все равно - это больше, чем "атомов в видимой вселенной".
Точно, давно вы все стали гражданми сша, чтобы работать на заокеанского барина? В россии вон 2 вакансии и грызите друг другу глотки
не смог осилить английский и даже что-то из курса айти, поэтому вынужден работать в иной сфере, но из зависти писать в тредах из раздела "программирование"?
У меня для тебя есть три строчки текста, которые, ты можешь осмыслить, в теории.
пьяный, чтоли?
>и чтобы официально
про аутстафинг, договор подряда, аутсорс ты не слышал, конечно, да? А знаешь почему? Потому что синдромвахтерное недобыдло побирается на своей безмозглости даже не умея считать спг или читать конституцию. Иди на хуй короче, исподтишковое быдло.
>У нас тут война с нато идет, долбоеб
я не знаю, с кем у тебя там война, с англосаксами из телевизора?
Иди воюй тогда или пролечись, ты чего доебался?
Сразу как только ты устроишься руби подсосом у американского барина, находясь в России в нынешние времена. аутсорс у него, когда все бодишопы съебались
лол
Ты там сам в манямирке и вообще не шаришь за айти работы, анон из треда выше писал про deel, к примеру, это называется аутстафинг.
ахахахаха
если работадатель заинтересован, он найдет способ оформить аутстафинг в тысяче других агенств, а еще llc часто оформлено не в сша, а в оаэ или в панамским офшорах, на кипре. Вся суть машинкодебила грязноручкожопного
Что ниже написано ты пропустил, да? Мелкобуквенный чмондель, защищающий свой манямирок
Там написано, что новые клиенты из рф не возможны в deel, а существующие остаются. Swift в банках не под санкциями работает. Есть тысячи иных компаний аутстафинга и офлайн работающих.
>Не тысячи, а 10-20 штук на всё СНГ
Во всем мире? Пару тысяч международных контор найдется, 10-20 штук подобных в одной только москве известных, типа менпауа.
Есть ли методы фреймворка для "взятия файла на лету" из-за предела веб папки вебсервера? Ну т.е. файл не доступен из вне, как это реализовано в Yii2?
>Есть ли методы фреймворка для "взятия файла на лету" из-за предела веб папки вебсервера? Ну т.е. файл не доступен из вне, как это реализовано в Yii2
Вот как это работает в yii2:
https://dev-tips.ru/blog/post/kak-v-yii2-vernut-kontent-v-vide-fayla-dlya-sohraneniya
Возможно ли такое на рельсах?
Учитывай, что линкедин это в основном поиск иностранных специалистов, ибо зачастую по странам все используют свои локальные сайты, по этому всё не так уж и плохо.
Вот сравнение с украиной. На линкедине 15, на сайте уже 50
50 вакух достаточно, смотри третий-четвёртый скрин, это лучше 300 вакансий на питоне но с конкуренцией в 300 человек на место
> но разве нет встроенной в фреймворк валидации файлов?
Читать сюда: https://github.com/igorkasyanchuk/active_storage_validations
>Читать сюда
1. Но там ActiveStorage, а это файлы в облаках и загрузка их куда-то на абстрактный амазон, а не в папку веб сервера с валидацией их, как я понял быстро посмотрев.
2. igorkasyanchuk - это всё же не фреймворк функционал, а сторонний gem lib, т.е. средствами фреймворка валидации файлов нет?
3. Есть ли генерация файлов на лету? Допустим, папка /var/www/railsapp/public открыта "из вне" всем желающим и все файлы внутри нее могут быть выкачаны. А я храню файл в /var/www/railsapp/protected - где нет прав на доступ всем остальным, кроме владельца файла (пользователя веб сервера). Если надо дать данные из файла для загрузки, то я на php беру данные file_get_contents(/var/www/railsapp/protected/myfile.pdf) и даю его на загрузку через sendFile() как на картинке. Для меня это выглядит более защищенная архитектура для файлов, может там что-то важное пользовательское, например, документы, а не аватарки.
Хранилище настраивается в конфигах, можно и локально на сервере.
Как видишь валидации нет, gem для этого и был создан
Можешь какой-нибудь Shrine посмотреть
Принял!
Не пизди, хули толку от вкатунов, если РАБоты для них нет? Наоборот надо их сюда звать, может кабаны оживят технологию
Хотя какая разница - скоро всех заменят
https://stackoverflow.com/questions/44370604/rails-file-download-via-send-file-is-slow-is-x-sendfile-or-similar-available-in
https://github.com/rack/rack/blob/main/lib/rack/sendfile.rb
получается, что если ты хранишь какие-то файлы за пределами открытой папки веб сервера, то надо либо делать прослойку с nginx\apache каким-нибудь, либо брать файл - писать его в public папку, а после показывать страницу с кнопкой "загрузить", и удалять его по ссылке через какое-то время, что все равно не безопасно нихрена, т.к. какое-то время файл будет доступен для всех подряд, если знать или перехватить ссылку.
И валидация файлов в рельсах говно.
>И валидация файлов в рельсах говно.
В ActiveStorage-то? То бишь из коробки? Ну да. Не знаю никого, кто бы им пользовался. Выше рекомендовали shrine - вполне недурный gem.
Помогите ньюфагу. Допустима ли практика возвращать из метода объект, чей класс меняется в зависимости от внутренней логики метода? Банальный пример:
class Error
attr_reader :details
def initialize(details)
@details = details
end
end
def div(a, b)
return Error.new("ошибка: деление на ноль") if b == 0
a / b
end
# вызываем метод:
result = div(foo, bar)
if result.is_a?(Error)
puts result.details
else
puts "результат операции: #{result}"
end
Как видно, тут результат выполнения метода div будет либо Integer, либо Error.
Понятно, что тут вместо этого можно возвращать Hash с полями result и error, но меня интересует исходный вопрос. Допустима ли такая реализация? Если нет, то почему?
Помогите ньюфагу. Допустима ли практика возвращать из метода объект, чей класс меняется в зависимости от внутренней логики метода? Банальный пример:
class Error
attr_reader :details
def initialize(details)
@details = details
end
end
def div(a, b)
return Error.new("ошибка: деление на ноль") if b == 0
a / b
end
# вызываем метод:
result = div(foo, bar)
if result.is_a?(Error)
puts result.details
else
puts "результат операции: #{result}"
end
Как видно, тут результат выполнения метода div будет либо Integer, либо Error.
Понятно, что тут вместо этого можно возвращать Hash с полями result и error, но меня интересует исходный вопрос. Допустима ли такая реализация? Если нет, то почему?
Как видишь технически да
Но зачем это? Ты пытаешься сделать Service object, который будет возвращать результат либо ошибку?
Класс Error должен наследоваться от одного из класса ошибок (там есть деление на ноль), и для этого есть rescue и прочее
Отправка файлов пользователю вообще довольно мутная тема, самый нормальный варик для этого (кроме облачного хранения) - писать в паблик и делать редирект, тогда доставкой файла будет заниматься веб-сервер, это самый эффективный способ. Рейлс конечно же умеет отправлять файлы самостоятельно, send_file читает из любого места доступного приложению, не только из паблика, так же рейлс может отдать поток через send_file_headers - https://apidock.com/rails/ActionController/Streaming/send_file_headers%21 с которым можно отправлять подготовленные куски данных, это всё работает через веб-сервер, так что в любом случае нужно учитывать специфику того что будет проксировать трафик на проде, это не заёбы рейлс а особенности веба.
>И валидация файлов в рельсах говно.
А что ты хочешь конкретно валидировать? Входящий файл для сервера это просто пара заголовков с названием и размером, да и сам контент, чтобы валидировать контент нужно проводить десериализацию, кто знает что у тебя там прилетело от пользователя, может pdf, csv, xlsx, или картинка, работать с этими форматами - слишком специфичная задача, а рельса и так очень жирный фреймворк, вполне разумно вынести такие вещи в отдельные гемы.
Есть мнение что rescue и вообще экспешоны - антипаттерн, и лучше возвращать структуры вроде { ok: result } или { error: ZeroDivisionError }.
Конкрето в Rails - возможно
Но обработка всё равно через rescue обычно идёт, а возвращается хеш или специальный класс
>А что ты хочешь конкретно валидировать?
1. допустимый размер файла в килобайтах
2. допустимые расширения файлов, например, только изображения (.jpg, .jpeg, .gif, .png)
3. допустимые mimetype, чтобы не загрузили файл с расширением .jpg, который по факту будет являться переименнованным zip файлом
4. В редких случаях формат имени файла, но это свой метод валидации будет написан тогда
>>2614301
>рельса и так очень жирный фреймворк, вполне разумно вынести такие вещи в отдельные гемы.
Ну в yii2 это все идет из коробки, все же загружать файлы - обычно частая задача для веба - аватарки, картинки блога, даже на дваче в тредах ты загружаешь файлы.
>>2614301
>так же рейлс может отдать поток через send_file_headers
Вот, это то, что я и хотел найти, спасибо
>send_file_headers
Надо учитывать что этот способ плохо совместим с защитой от дудоса и вообще хреново масштабируется, например клаудфлара на бесплатных тарифах отказывается обслуживать стриминг. ActiveStorage как раз абстракция, которая позволяет без гемора подключать к программе CDN.
Мне пока не нравится то, что это не реализовано в puma/rack, если я правильно понимаю, и для подобного функционала нужно дополнительно иметь nginx/apache веб сервер, т.е. это еще одна "прослойка", получается, что-то уровня "middle ware" или "third-party-software", если использовать rails.
Я просто исхожу из опыта разработки на yii2, где сразу используется nginx в качестве веб сервера. Если передавать файл для загрузки через x-sendfile, он загружается, как ожидается, без бубна с конфигами.
>этот способ плохо совместим с защитой от дудоса
Ну ддосить ссылку, которая будет всегда разной и видна только после авторизации с капчей - сложнее, там можно дополнительно собственную проверку написать уровня "что-то часто ты скачиваешь, надоел, иди остынь", все же это безопаснее, чем хранить файлы в public папке, если они важны.
Я просто учу rails и смотрю, как там и что устроено, пока вот смотрю валидацию файлов и какие методы для работы с ними имеются.
> Как видишь технически да
Ну вопрос, очевидно, был не в том, можно ли технически технически можно и не снимая свитер штаны срать, но - сам понимаешь...
> Класс Error должен наследоваться от одного из класса ошибок (там есть деление на ноль), и для этого есть rescue и прочее
Деление на ноль было только в качестве примера, офкос - как самая очевидная/понятная ситуация.
С ошибками разобрался с raise, но всё ещё остаётся вопрос, насколько что-то подобное возможно в общем случае. Например, если какой метод возвращает то String, то Regexp. В древних языках откуда я пришёл такое не допускается by design. Логика подсказывает, что и в Ruby так делать не надо, но интересно послушать мнение.
Создавать под каждый тип свою: квартира, машина, телефон или сделать через JSON конструктор?
Селект по полям JSON-а убивает производительность в ноль, JSONB побыстрее но всё равно в разы медленнее обычного столбца, что там с индексами тоже не понятно. Это удобная штука когда неизвестно что за структура будет храниться, какие-нибудь конфиги например, в случае каталога объявлений у нас все поля известны заранее, к тому же по ним будет сортировка и всякие ограничения, для такого JSON не подходит.
Значит нужна модель под каждое
Последний апдейт меньше месяца назад, не вводи людей в заблуждение.
К тому же всё еще самый удобный фреймворк для бекенда.
>ну мертвая же технология, очевидно, нах вы тред свой перекатываете лол
Можно писать любые посты в тредах о ruby с сажей тогда, чтобы общаться в тредах, кому это нужно или интересно, и не отвлекать других с мантрами "айти все"
А какая не мёртвая?
1366x768, 1:11
Все равно еще не доволен валидацией файлов, надо будет найти gem под это.
Попробуй ELM кста, для себя, на нем прикольно верстать
>>2596950 (OP)
Очень жаль вообще, что руби не имеет тайп хинтинга, мац пидарас, не понимает этого, помню пару лет назад прям по рельсам тек. Они и щас топ, и руби в целом лучший язык, но без тайпхинтинга он нахуй никому не всрался.
Увы пришлось писать собственные проекты на питоне.. и прочих языках. Руби фигня со своей динамикой, где откроешь проект через полгода и не поймешь где какие типы юзаются.
И да, не надо предлагать мне rbs\sorbet и прочее. Это говно.
И как бы типы выглядили? Как в Crystal? RBS конечно не то, но решение изящное, как CSS для HTML
Я про системный интерфейс гнума (диалог выбора файла). Сорри за оффтоп, но аж глаз задергался.
To follow progress, use 'tail -f /tmp/ruby-build.20230224195214.1290.log' or pass --verbose
Downloading ruby-3.2.1.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.2/ruby-3.2.1.tar.gz
Installing ruby-3.2.1...
Долго оно чет ставится уже 8 минут, че происходит?
wsl2 если че, раньше такого не было
перезапустил с --verbose
там какие-то сишные либы компилятся, хуй знает, наверно связано с тем, что я недавно весло апдейтил и апгрейдил.
То есть либо их никогда не увольняли, либо уволили и потом восстановили
active_resignation это уволили, но не восстановили
через left_joins получается какой-то треш
типа Employeeleft_joins(:active_resignation).where(active_resignation: { cancellation: nil })..
Пробовал разные варианты
---
Employees
has_one :active_resignation -> where Resignations.missing(:resignation_cancellation)
Resignations
has_one :resignation_cancellation
belongs_to :employee
ResignationCancellations
belongs_to :resignation
По-моему, ты зря разогнался создавать модели на каждый пук.
Employee has_many :stages
А у Stage типы:
Hired
Terminated
Resigned
Retired
Promoted
Demoted
Transferred
Suspended
Reinstated
Contract renewal
Performance review
Salary increase
Salary decrease
Leave of absence
Paid time off
Sick leave
Family and medical leave
Maternity/paternity leave
Training completed
Certification obtained
Discipline action
Grievance filed
Grievance resolved
Employee complaint
Employee feedback
Exit interview
м т.п.
По-моему, ты зря разогнался создавать модели на каждый пук.
Employee has_many :stages
А у Stage типы:
Hired
Terminated
Resigned
Retired
Promoted
Demoted
Transferred
Suspended
Reinstated
Contract renewal
Performance review
Salary increase
Salary decrease
Leave of absence
Paid time off
Sick leave
Family and medical leave
Maternity/paternity leave
Training completed
Certification obtained
Discipline action
Grievance filed
Grievance resolved
Employee complaint
Employee feedback
Exit interview
м т.п.
И тогда "неуволенные" - это те, у кого последний известный этап карьеры не в списке "завершающих" (Terminated, Resigned, Retired).
А можно вообще всю эту хуйню запихать в стейт машину внутрь модели и смотреть на ебала приходящих в команду разработчиков.
Нужно только для моего примера
и зачем ты нашел эту ссылку?
Там же еще не окончено обучение мое и половина кода надо будет "причесать".
Тише, чмондель, тише
хуй не сидит, а стоит
Что сделать? Или вы просто прывкли сами палки прописывать? Лично я по инерции ставлю } вместо | и это напрягает
Выглядит круто. Я вообще ещё ничего не изучал, просто читаю тред.
Сколько времени нужно вкатываться, чтобы делать такую годноту на Ruby? Заработок и вакансии не волнуют - чисто как хобби.
В Sublime text после открытия блока через do или { подставляется |variable|
Смотри по редактору, может сниппет какой сделать
do_something { _1 + _2 }
возьми и попробуй, расскажешь
В этой книжке просто идет перечисление стандартных методов. Это все есть в apidock
Мань, где тесты?
1 - MSYS2 base installation
2 - MSYS2 repository update
3 - MSYS2 and MINGW development toolchain
Просто чисто один интерпретатор и всё? Я только обучаюсь и не хочу засорять систему ненужными мне компонентами ОКР
Шиз, ты ебанулся?
да тут долбоёбы одни, разве не понятно по сообщениям?
Если ты про self в названиях методов, то с self - это методы класса, а без self - методы экземпляра класса.
хотите в 2005?
и связью has_many :events
events может создавать только пользователь с ролью admin, это как новости которые только админ может публиковать, а пользователи только смотреть и комментировать
Можно как то через условия has_many сделать или вообще как тут лучше написать? Может через STI добавить отдельную модель Admin и в ней указать связь has_many :events
Опять же получается лишнее поле в БД у простых пользователей
Да для начала подойдёт и офффициальный установщик руби для винды. Просто имей в виду, что на 99% работ от тебя ожидают как минимум базовых навыков в терминале луниха; по папочкам там ходить, зависимости разрешать, по ssh куда-то на сервер зайти и там логи почитать и так далее.
Так что я рекомендовал бы всё-таки WSL, если ты работать где-то в айти планируешь.
>>2632451
Лучше засори сразу, а то потом какая-нибудь библиотека для базы данных (или типа того) отъебнёт.
>>2633130
Объясняю. В руби всё почти - объект. Классы - это тоже объекты. Почему так? Потому что класс - это по сути информация о том, как класс и его экземпляры себя ведут. Где у нас в ООП лежит информация? В объектах. Поведение у классов тоже есть (методы, на которые они отвечают, в других языках их иногда называют статическими методами, в руби это - методы класса). Так что самые настоящие объекты класса Class.
Как только эта концепция в голове усядется, иди гуглить про eigenclass (он же singleton class) в Ruby. Там тебя ждут ещё более шокирующие открытия и наконец-то объяснение того, что НА САМОМ ДЕЛЕ значит синтаксис def self.some_method (но для простоты можешь пока считать это просто синтаксисом для объявления статических методов)
Принёс вам введение в TCP, процессы юниха и многопоточность с использованием руби
https://rubyfu.net/
А вот это - в кибербезопасность
Спасибо! Ещё годнота есть? Ребята, делитесь!
Я как раз и привел такую схему потому что не должно быть в юзере информации о том что он админ, это приводит к хранениию ненужного флага у всех остальных юзеров. Админ это роль а не информация у юзера и должна храниться отдельно.
В итоге чтобы сделать юзера админом - добавляем запись в таблицу AdminRole с user_id юзера. Работаем с евентами этого юзера как админа через модель User. Все работает как в случае если админ 1 так и любое количество
Лишние сущности какие-то, прибиваешь гвоздями таблицу AdminRole, в ней ссылки на Event, когда тебе понадобится сделать ModeratorRole - будешь создавать новую таблицу? В модели Event будешь добавлять belongs_to moderator_role? А юзеру прописывать has_one на каждую возможную роль? При том что достаточно всего лишь чекнуть роль пользователя в контроллере при создании эвента.
>> будешь создавать новую таблицу
А что особенного? Мы создаем новые таблицы все время чтобы связать куски информации друг с другом. Можно конечно хранить все в одной и после добавления 100 новых ролей у тебя у каждого юзера будет 100 взаимоисключающих флагов. Так уж получилсь что при добавлении функциональности приходится добавлять код.
Почему нельзя хранить роль в таблице Users?
По умолчанию там будет user, ещё есть admin, moderator, anybody
Может просто сделать проверу прав как это реализовано в Pundit и всё?
Да в принципе можно, почему нет. Я просто про разные варианты. Кстати если бы ролей было много я бы переименовал свой AdminRole в просто Role и там бы флаги хранил, можно кстати паковать флаги в инты битовыми операции если юзеров и ролей куча.
> можно кстати паковать флаги в инты битовыми операции если юзеров и ролей куча
Можно подробнее про это, не совсем понимаю зачем это и как
Я помню видел что-то подобное в одном коде, там переменным присваивались битовые сдвиги или что-то такое:
000001
000010
000011
В общем почему не просто числа 1, 2, 3, 5, n (через enu,)
Почитай про chmod на линухе
Короч смотри тему.
Представь у нас есть 8 битный int.
0000 0000 = 0
0000 0001 = 1 (2^0)
0000 0010 = 2 (2^1)
0000 0011 = 3 (2^1 + 2^0)
0000 0100 = 4 (2^2)
и так далее
Теперь представь каждый бит у нас это какойто флаг.
Нужно лишь понять как выставлять флаг, обнулять флаг в 0, проверять выставлен ли флаг.
возьмем например роли админ, модератор и other и представим их разными степенями двойки
admin = 1
moderator = 2 или 1 << 1 (шифтим единицу вправо на 1 бит)
other = 4 или 1 << 2 (битшифт единицы вправо на 2 бита)
Создадим пустую роль
role = 0
Выставим у нее флаг админ используя битовый or (|)
role = role | admin
модератор
role = role | moderator
Теперь в role записано что юзер админ и модератор
проверяем админ ли юзер используя битовый and(&)
is_admin = role & admin
модератор ли
is_moderator = role & moderator
Админ и модератор
both_roles = admin | moderator
is_both = role & both_roles == both_roles
То есть вся идея - пакуем булы в биты, юзаем битовые операции для операций над ними.
Энум тут можно использовать но придется создавать по энуму для каждой комбинации ролей
Короч смотри тему.
Представь у нас есть 8 битный int.
0000 0000 = 0
0000 0001 = 1 (2^0)
0000 0010 = 2 (2^1)
0000 0011 = 3 (2^1 + 2^0)
0000 0100 = 4 (2^2)
и так далее
Теперь представь каждый бит у нас это какойто флаг.
Нужно лишь понять как выставлять флаг, обнулять флаг в 0, проверять выставлен ли флаг.
возьмем например роли админ, модератор и other и представим их разными степенями двойки
admin = 1
moderator = 2 или 1 << 1 (шифтим единицу вправо на 1 бит)
other = 4 или 1 << 2 (битшифт единицы вправо на 2 бита)
Создадим пустую роль
role = 0
Выставим у нее флаг админ используя битовый or (|)
role = role | admin
модератор
role = role | moderator
Теперь в role записано что юзер админ и модератор
проверяем админ ли юзер используя битовый and(&)
is_admin = role & admin
модератор ли
is_moderator = role & moderator
Админ и модератор
both_roles = admin | moderator
is_both = role & both_roles == both_roles
То есть вся идея - пакуем булы в биты, юзаем битовые операции для операций над ними.
Энум тут можно использовать но придется создавать по энуму для каждой комбинации ролей
Вспомнил что такое битовые маски, просто биты используются как набор переключателей (флажков), погуглил ещё про ruby on rails bitmasks, даже нашлась пара гемов как раз для ролей на масках
А выборка по ролям через ActiveRecord тоже по маске идёт я так понял, чтобы например вытянуть всех с ролью moderator или banned
Если ролей много то всё равно нужна немного другая схема: User, Role, Event и join-модель UsersRoles; Event просто belongs_to User, чтобы не терять записи если юзер потеряет роль, завязывать эвент на роль никакого смысла нет.
А ты видел сколько там ненужных контейнеров если в pa -a. Набилдишь разными тагами, пока будешь тренироваться и засрешь систему)
или image list
для меня это не было проблемой, удалить все контейнеры и имаджи это намного легче чем сносить систему или пытаться её почистить от левых пакетов.
Докер пропишется в автозапуск, добавит тебе скрытые networks и будет грузить систему
Делай как ОКРщик Джереми Эванс:
https://github.com/jeremyevans/roda/blob/master/lib/roda/version.rb
Там даже тесты на версию есть :)
Используй семантическое версионирование
Мнения, отзывы, холивары? Какие плюсы, минусы, подводные камни, в том, чтобы брать его в не-Rails проекты? По-моему, прикольная штука, чуть меньше мозгоёбли вокруг миксинов.
Технически это просто вынос кода как и всякие штуки вроде ServiceObject и прочего
Ну когда их применял для лайков например (Likeable, тут тоже есть соглашение о названиях), то получалось не совсем REST
То есть можно было просто сделать отдельный контроллер для лайков
По мне нормальная вещь, для выноса общего фунцкионала, всё же ООП у нас
short polling - тут устаревшее и нагрузку даёт хорошую
long polling - тут похожее
web sockets - тут свои минусы вроде без гарантии доставки, опять же скорость для ActionCable низкая
SSE - в Rails для этого заготовка, многое самому надо реализовывать (пока не понятно как)
Вопрос: что лучше использовать из этого?
Ещё нашёл Kafka и RabbitMQ. Может это то что мне нужно?
Кстати наковырял тут https://github.com/asyraffff/Open-Source-Ruby-and-Rails-Apps
Там на одном из сайтов полно сервисов, для лайков например сервис использовался, а не консёрны или отдельный контроллер в который передаёшь пользователя и likeable объект
Ты не понял. Миксины - это встроенный функционал в руби, и как-то так они в целом и используются. Concern просто небольшая надстройка, которая немного его расширяет и прячет некоторое количество бойлерплейта (чтобы удобне было методы класса добавлять, например)
Слушай, а что на собесах на рубиста спрашивают? Мой основной язык Си/С++, питон. Писали байндинги с++ для руби. В основном прототипирование на руби писал. Никаких рельство. Но руби нравится гораздо больше, чем питон
А плюсовики compvision нужны на руби?
Надеюсь Гоша умрёт в страшных муках.
hey.test.ololo['somekey']['anotherkey'][0][0]
Как проверить, что вся его длина существует?
if hey && hey.test && hey.test.ololo['somekey' && ... && hey.test.ololo['somekey']['anotherkey'][0][0]
Выглядит глупо же.
Можно яснее об этом? Первое объявление используется часто, вроде как сокращение, но у них отличия оказывается есть
в `Admin::User` если объявить метод использующий класс `A`, то класс будет искаться относительно глобального нейспейса.
в `module Admin` если объявить метод использующий класс `A`, то класс будет искаться относительно неймспейса админ.
Проще говоря, внутри модулей можно писать относительные пути к константам и код смотрится чище.
Да всё так, консерны ничего принципиально нового не делают, это и есть миксины. Там в доке по ссылке все отличия и перечислены.
>>2643684
Зачем ты что-то пишешь, если ни хуя не в теме. Был бы в теме - написал бы хотя бы про Codex.
Но и она, и GPT-4 оче плохо делают работу программиста, даже джуна полноценно не заменят.
>>2644600
https://rubystyle.guide/#namespace-definition
Я запомнил как "делай как рубокоп говорит, иначе какой-то геморрой с лукапом"
Книжки тоже ничего
Делитесь годными ссылками чтоли, жлобы)
Игру хочу: https://summonthejson.com/products/ruby-flashcards
WSL ставишь RVM туда и в РубиМайне или ВСкоде ремоут интерпретатор юзаешь
Да не трясись ты так, заменят тебя, не сразу, но заменят.
Уже давно есть чувство, что среди эрлангеров/эликсировщиков дохуя рубистов - наверняка и тут такие найдутся.
Язык одного фреймворка
Так всё рубистами и пилилось, а вакансии в бурже есть, но там другие условия
Лучше что-то одно тянуть и не распылятся
Кажется я приуныл и отупел. Часто заставляют делать вещи не относящиеся к руби
В последнее время ничего не учил. Иногда кликал по ссылкам известного newsletter
Проект - легаси. Хотя один челик так не думает) В команде условные 3 человека
Сколько принято сидеть на одном месте? Пару лет? Зепку вроде стабильно поднимают, но может где-то наебывают
Мои действия?
Короче, gen_random_uuid() какие-то прямо сумасшедшие проблемы вызывает, и после id: :uuid надо обязательно дописывать default: -> { "uuid_generate_v4()" }
Я уже не знаю, почему так, всю ночь долбался с постгресом, и у меня совсем башка не варит, придумайте вариантов, а я с утреца почитаю. Как-то манкипатчить ActiveRecord::Migration, что ли
Только начал в рельсы. Какая стандартная практика, если нужно объединить несколько миграций? Допустим, в одной я создал таблицу, во второй добавил столбец, в третьей добавил дефолтное значение для столбца. По таймстемпам эти миграции не подряд идут, если это важно.
https://guides.rubyonrails.org/active_record_migrations.html#old-migrations
я так понял можно роллбек сделать до самой ранней миграции, которую нужно объединить, в нее засунуть содержимое остальных нужных миграций, удалить те, что больше не нужны. Ничего от этого не сломается? Рельсы сами разберутся куда делись другие миграции?
А что удобно. Просто много подробностей нужно задавать. А если слишком много то нейросеть тупит. Но в целом да, GPT с лёгкостью может настрочить много полезного кода. Другой вопрос, а что потом делать людям? Если нейросеть выйдет на более продвинутый уровень это получается программа будет писать программы. Конец IT, армагеддон. Создаём голема.
<p>Current time is <span id="current-time"></span></p>
<script>
setInterval(function() {
document.getElementById('current-time').innerHTML = new Date().toLocaleTimeString();
}, 1000);
</script>
Мне этот ваш жабаскрипт ещё надо знать что ли, чтобы писать на рельсах? Хтьфу бля.
>Вот это выдала. Но это нихуя не работает.
Лол.
Каждый рядовой оператор ГПТ через 10 лет.
Синиор операторы будут еще уметь в html
JS нужен конечно, раз fullstack, даже с hotwire минималка нужна как раз для часиков
Ребята, у нас у всех они тикают, двери закрываются(
1. Вот я добавил тесты на модель, саму модель и фабрику, как тут лучше сделать: 3 коммита или одним ебануть?
2. Создал тесты и контроллер с двумя action: index и show, тут коммит что добавил тест, затем контроллер, затем коммиты на каждый action или два коммита: тесты и контроллер. Вот эти мелкие куски кода (всякие вложенные вещи типа action или всякая мелочёвка типа фабрик) сбивают с толку
3. После контроллера нужно добавить маршруты к нему
Тут ещё нужно придумать какое-то соглашения о именовании: тесты, контроллеры, модели и прочее
Так, как принято у тебя на проекте, лол. У нас 1 таска = 1 коммит, если нет причин разделять на разные для удобства ревью.
Для удобства ревью - это когда у тебя миграция, которая в 15 файлах меняет аннотации, и ты эту поебень пихаешь отдельным коммитом чтобы не маячило. Всё остальное нахуй не нужно разделять по коммитам - то что ты каким-то своим образом выделяешь скоуп для фиксации изменений никому не облегчит работу, потому что уже и так есть общепринятый скоуп в виде задачи. Ну и per-commit никто банально не смотрит МРы, если заранее не предупредить.
Если ты в соло работаешь над петпроджектом, то хуярь как удобно.
> У нас 1 таска = 1 коммит, если нет причин
Шиз, скорее всего он спрашивает про другое
По факту, как нужно делать:
- Создаешь pr для решения какой-то задачи(нужно обобщить)
- Дальше можно хуярить туда сколько угодно коммитов
- Когда все готово, делаешь squash and merge, описав все старые коммиты одним предложением
В соло собираюсь
1 таска это какого размера? Например я прикрутил лайки к постам, фоткам и комментариям. Мне всё целиком уебать одним коммитом "добавлены лайки"?
У меня из-за этих коммитов ОКР развилось
Какого захочешь. Твой пример зависит от реализации. Если это что-то вроде одного концерна "Likeable" и инклюд в нужных моделях, shared тесты и одна миграция, то одним, потому что это нельзя декомпозировать. Если ты над каждой моделью пердолился, то разными.
Делай как тебе удобно, серьезно. Хоть каждый файл отдельным коммитом закрывай.
Можно поменять как на пикрил 2, но это уже не то получается, некрасивенько(((((99(9
Имеется в виду, не меняя вызов кода в SomeClass, а только имплементацию в BlockRunner
Ну нельзя так нельзя, и хуй с ним.
Запрещаю
Чтобы xss провернуть нужен инжект данных с клиент-сайда, get или post атрибуты, в данном случае вызова объекта Data, откуда там xss возьмется?
Аноны, а какие есть плюшки и профиты у Руби?
Сейчас пишу на Питухоне и Го. Го устраивает, но не хочу ебаться с асинхронщиной, у нас на проекте копеечный рпс, не надо нам асинхронщина. Да и контора идет ко дну, а как-то что-то нашел руби, дай думаю, хуя японский какой то бошковитый чел, ну давааааааааай.
Есть ли совместная фотка dhh и Мацумоты?
Где они в засос?
Это австралийские доллары, если что.
Мне надо было выучить шифрование в rails для баз данных, некоторых значений таблиц, и вот я нашел видео, в котором автор сначала просил нейросеть, которая нашла инструкцию, которая не имеет смысла: https://www.youtube.com/watch?v=SZCuEfvs9rc[РАСКРЫТЬ]
Ну вот ты найдешь неправильную инструкцию, и?
Тебе все равно понимать надо и самому делать в итоге, т.е. если кто-то захочет программировать через нейросети, надо будет нанимать программиста общаться и фиксить код нейросети.
Нейросетка - один изинструментов для программиста, а не вместо него. Стековерфлоу и гугл же не заменил айтишников, так и это не заменит.
Далее - гендир чатгопоты (chat-GPT) cказал, что нейросеть достигла предела возможностей: https://stealthoptional.com/news/chatgpt-improvements-coming-to-an-end-says-openai-ceo/
Так что такие дела.
знаешь почему Неуловимого Билли так никто и не поймал?
потому что он был нахуй никому не нужен
Неуловимого Джо. Если ты шутишь на уровне телепередачи Городок, хотя бы постарайся быть точнее.
По всему остальному - у меня немного другие данные, скажем так.
так лол, тоже самое
Есть рубисты итт?
Работаю на питоне с пыхой, пишу примитивный бэкенд без архитектуры/ооп. Все проекты идут на аутсорс, код стайла и код ревью нет.
Есть вариант уйти в руби и рельсы, сложно его понять, не имея нормального опыта на других языках? Сказали, что онбординга не будет, нужно в сжатые сроки начинать делать таски.
Есть вот «Rails for PHP Developers» http://www.r-5.org/files/books/computers/languages/ruby/java/Derek_DeVries_Mike_Naberezny-Rails_for_PHP_Developers-EN.pdf и моя любимая «Eloquent Ruby» http://www.r-5.org/files/books/computers/languages/ruby/main/Russ_Olsen-Eloquent_Ruby-EN.pdf
в javascript - с 3-го элемента по шестой
в ruby с 3-го элемента вернет 5 следующих
в php - также
давайте ненавидеть джаваскрипт
Вкат в руби после питона довольно легкий - у нас джуны как раз так переучивались. Насчет пыхи не скажу - нет опыта.
> в javascript - с 3-го элемента по шестой
А нахуя, если есть array[2..5]? Они ебанутые там все совсем?
Как мне добавить теги к постам, можете в целом описать?
Создаю пост с тегами ruby, ror, programming
Как создать три записи в БД сразу
Если такой тег уже есть, то он должен прикрепляться к посту, если нет, то создаваться
Какие автоматические хуитки качают-зеркалят, наверное.
Да я удивился. Думал руби посерьезнее будет, а там такая же помойка как в npm. Запросто можно себе майнер поставить
strace показывает что ruby пытается найти sqlite3 файлы во всех гемах. На пикче видно ENOENT (No such file or directory)
Какая-то херня после хардресета...
Хотя скорее всего норм. Руби ищет модуль по всем путям.
> Если я хочу отправлять рассылку со своего домена
maia`Nl ANUSdomaic!Jn PUNCTUMm%~@y , то как быть?
> придётся свой почтовик поднимать?
Любое письмо можно подписать любым обратным адресом. Но если ты хочешь читать то, что на этот адрес отвечают - тогда да, либо свой сервер, либо у всяких провайдеров рассылок такая функция может быть.
> Как мне добавить теги к постам, можете в целом описать?
google: many-to-many activerecord
Post has_many :taggings
Post has_many :tags, through: :taggings
Tagging belongs_to :post
Tagging belongs_to :tag
Tag has_many :taggings
Tag has_many :posts, through: :taggings
> Создаю пост с тегами ruby, ror, programming
> Как создать три записи в БД сразу
> Если такой тег уже есть, то он должен прикрепляться к посту, если нет, то создаваться
Ну, то, что ты описываешь, я представляю так: есть таблица tags с уникальным индексом на title
В контроллере Posts#create пишешь
post = Post.new(post_params)
# Тут N запросов в базу, ну и хуй с ними, потом оптимизируешь
tags = params[:tags].each { |t| Tag.find_or_initialize_by(title: t) }
post.tags = tags
post.save
Спасибо, добрый анон
> Любое письмо можно подписать любым обратным адресом.
Так, собственно, часто и делают: "
А что такое событие? Где оно создаётся?
> ВК, Одноклассники
Типа "Вася Пупкин лайкнул твой пост"? Ну у меня первая мысль - сделать модель Notification с текстом, булевым флагом прочитано/не прочитано и опционально ссылкой на то, о чём уведомление.
Потом PostLike.after_create { Notification.create!(user: self.post.user) }
Ну и этот after_create выносишь в отдельный консёрн, и вешаешь его на все модели, которые должны уведомлять после своего создания.
Если хочешь пуши - гугл firebase cloud messaging - это для андроида. Для яблока тоже какая-то похожая система есть. Её подключаешь к Notification
Если хочешь дать юзеру настраивать, какие уведомления получать в каких случаях - это уже совсем куча кода, там надо конкретно смотреть, какие опции ты хочешь дать.
Да, лайк, комментарий, подписка
С моделями и БД вроде всё понятно, а что выбрать для доставки самого уведомления? SSE, Polling, Cable (WebSockets) или ещё чего
Ну можешь просто значок показывать, если юзер грузит страницу, и у него непрочитанные уведомления. Но если твоим юзерам очень нужно, чтобы их заёбывали пуши - вебсокеты какие-нибудь, да.
https://www.youtube.com/watch?v=fqYoLWKjQWE
На го, питухоне и жс
У нас в клубе!
576x576, 0:05
Всё, что я нашёл - это rubyc, но он не работает (не у меня одного, под видео с ним вопросы, как это вообще заводить). Не подскажите альтернативы?
Спасибо.
Расскажите кулстори почему rubylang и половина каналов по руби умерла? 4 года в них не заходил и вот привет.
Потому и умерла, что ты не заходил.
Вы используете turbo frames и вот это вот все в проектах?
Меня почему-то не сильно тянет с этим экспериментировать, хотя видел в паре видосов как используют
Кажется увяз в своей легаси помойке и не сильно стремлюсь куда-то двигаться. Хотя мне пару знакомых намекает что пора. Щито делать? Взять гэпчик? За пару лет не разу не брал
А еще кажется что если сейчас решу создать проект с нуля, то жидко обосрусь)
На нём писать прикольно дохуя всякого сахарочка, а в рельсах вообще дохуя всяких прикольных плюшек. Но из этого всего вытекает минус в том что можно всякого нахуевертить и это будет тяжело поддерживать и как раз таки большая часть работы этом именно поддержка написанного, новых проектов мало.
Вакансий с каждым днем все меньше и меньше. Основной и можно сказать единственный фреймворк теряет популярность как и все MVC фреймворки, куча фишек для фронтенда теперь нахуй не нужна и тд и тп. А остальное особо не взлетело.
Ну так иди в дуднет. Динамикодрисня в большом легаси не может быть лайтовой.
Буква V view в них стала не нужна, html никто не генерирует, а на фронт летит json и там реакто-ангуляры все переваривают. Плюс стало популярно писать микросервисы вместо монолитов. Собственно огромное количество фич из рельс и того же джанго стали не нужны. На питоне взлетели всякие fastapi, взлетела nodejs из-за асинхронности, поскольку с теми же ресурсами можно держать большую нагрузку, да и вообще на go не так уж и больно писать микросервисы.
А руби нихуя только предложить не смогло кроме полудохлых не особо производительных sinatra и Hanami.
Решил наверстать что добавили. Открыл посл ролик dhh, поставил этот rich_text.. картинка добавилась, но видна только при редактировании. Оно же должно все из коробки работать(
Нашел что нужно ставить vips
Начинает казаться что dhh такой дегенерат что пздц прост
Здесь еще дофига зависимостей
Не пиздеть. Hotwire это забытое старое, как раз таки рендеринг html на сервере
В Ruby много интересного появилось, другое дело что это не завезли в Rails ещё
Ruby заебись, ваканский мало и от middle+
оказалось что это стиль
Можете объяснить на пальцах флоу? Нигде не гуглится конкретный этот случай.
Я правильно понимаю, что:
1. Есть какие-то ключи, с которыми мобилка звонит гуглу, получает от него структуру auth data (где id)
2. Мобилка шлёт полученную структуру на мою АПИ типа auth/callbacks/google, а я должен сделать что? По идее, проверить, что это всё взято напрямую от гугла а не составлено кем-то ещё?
Мне это самому делать, или гем omniauth-google_oauth_2 это за меня сделает? Если нет, то что он делает вообще? Почему он просит от меня client_id и secret, а потом оказывается, что они для андроида и айоси разные? Короче, ничего не понимаю, мозг уже выкипел, помогайте.
Как раз зашел в тред чтобы спросить а юзают собственно кто-нить Hotwire в продакшоне?
Какой вообще опыт? По ощущениям оно не популярно.
У меня больше опыта в классических SPA, когда есть простой и понятный рест бэкенд и есть тяжелая реактивная поеботина в браузере.
А сейчас прожект на рельсах хоелось бы подтянуть к чему-то более динамичному и решил попробовать hotwire, но блеать меня терзают смутные сомнения по поводу этой идеи обмениваться кусками html и еще какая-то МАГЕЯ под капотом. Боюсь в случае проблем будет ситуация что буду только я и эта ебаная проблема. В случае vue.js etc сообщество говнокодеров гигантское и база знаний уже большая.
Это пиздос гемор, боролся с тем же самым, в итоге оказалось проще переписать на жс и распространять через нпм без ебли со сборочкой бинаря
> Как раз зашел в тред чтобы спросить а юзают собственно кто-нить Hotwire в продакшоне?
hey.com достаточно? На habr'е есть пост (нужно искать), там как раз переводили проект на hotwire с react или vue уже не помню, а так какой hotwire когда legacy кругом?
> меня терзают смутные сомнения по поводу этой идеи обмениваться кусками html и еще какая-то МАГЕЯ под капотом
Обычный html и только
Ну какая магия? JS же, естественно спотыкаться будешь, оно всегда так
Да я понимаю что не магея конечно.. жас там крутится и меняет куски html'я, но я не знаю как это работает в деталях, понимаешь.
Потратил год назад дня 3-4 на попытку интеграции легаси рельсового приложения с hotwire, подохуел немного, не заводилось и все тут сука. Так и пришлось оставить ui допотопный. Но сейчас все больше и больше необходимости иметь динамичный UI и вот опять я думаю еще одну попытку сделать внедрить hotwire.
Проблема конечно в том что я вообще не рельсовик нихуя и не рубевщик, я из мира жвм и мне вся эта поеботина 'endless number of conventions over configuration' (c) меня ебет очень сильно.
Как и все это ебучее динамическое мета-программирование. Отсутствие даже обоссаных ХИНТОВ для типов (хотя можно еще поковырять rbs, но по ощущениям этой хуйней никто не пользуется). В общем после жс и рубей конечно еще больше начинаешь любить котлин, но я понимаю что вкусовщина все дела, да, наверное прост я слишком СТАР для всего этого и привык к умному конопелятору и помощи IDE, память уже НЕ ТА
К злым марсианам есть смысл подаваться? Там жоско ебут на собесах?
Кем? Ебут, но попробовать всё равно стоит
Вопрос: как ты стал мидлом? У мидлов проблем с трудоустройством быть не должно
мне кажется что последний вагон уходит и дальше будет совсем никак
Живи, тред!
Сомневаюсь, что на рынке рф есть джуновские вакансии по рубям и рельсам.
Какие подводные?
Чому так?
Я знал лично только одного рубиста и он действительно был мудилой
Любой вкатун её не получит
>>2842680
Вещаю с полей, менял работу мидла на этой неделе заодно помониторил рынок. Джуновских вакансий в рф нет от слова, можно даже не надеятся. По сути, единственная контора, которая более менее гарантировано может взять хорошего джуна - это СберМаркет. Но и они переходят на Go и не факт, что через год всех переквалифицируют.
Docker стал обязательным, везде спрашивали. Стало больше проектов с dry и graphql.
Подробнее бы
У эвилов крутая штука с их опенсорс хуйней
Если сам будешь туда наяривать переодичеки, то сами на тебя выходят
а там и релокация в ЖАПОНИЮ
они съебывают с рубей щас, на го
мы в конторке сделали црмку с хотваерам. админы текут быдло трясется жс идет нахуй мы кайфуем.
будем продолжать с ним воркать, но у нас чисто спашки в триваильном виде
сложные шьтуки я бы не стал на нем пока делать, еще не хватает экспертизы, там сорсы надо задрачивать чтобы его раскрыть в полной степени
Это как работает? Можно подробнее
Зачем? А как же великий Ruby?
Звучит как хороший план.
Я сокетами мало знаком, но что это за сокет такой, который закрывается и нахуй он нужон?
Задавлся точно таким же вопросом, но так ничего и не нашел... Собираю все в кучу сам.
>Q: Можно ли на руби писать нативные GUI, мобильные приложения, игры?
>A: Да, но не стоит.
А что на нем пишут обычно?
Имхо, дрисня какая говняная. Во всяком случае, в Rails-проектах это просто пятое колесо.
>>2938707
Коммерчески - бэкэнды для веба и всяких мобильных приложений, закрытые админки/CRM для средней руки бизнесов.
В принципе можно всякие юниксовые скрипты и костыли для себя писать и ботов в телегу и дискорд.
>>2939519
Был ещё какой-то игровой движок на Руби для всякой индюшатины (платный причём), но я так и не понял соль.
https://dragonruby.org/toolkit/game
config.after_initialize do
__Dir[Rails.root.join('app', 'models', '/*.rb')].each do |f|
____require(f)
__end
end
ничего не сломается?
Кароче почитал тут в доке что require нельзя в рельсе делать, так что теперь вот такой странный костыль в after_initialize:
Dir[Rails.root.join('app', 'models', '/*.rb')].each do |f|
__Object.const_get(File.basename(f, '.rb').camelize)
end
никак, раскусят тебя на каверзных вопросах по теории и метамагии всякой. сам джун строг пытался перескочить на мидла с аутсорс-галеры, в итоге иду джуном в продуктовую компанию, но ЗП х1.7
Получается не очень хорошо прошел тех. собес?
Предстоит в ближайшие пол года пытаться свичнуться с джуна на мидла (хотя бы попробовать), сейчас начинаю дрочить теорию.
вообще работа есть, че то на хх вообще грустно((
В первую очередь дрочи теорию именно по самому руби, а не по рельсам. В сети дохуя потенциальных вопросов по собесам на рор, кстати, в основном англоязычных, с подробным разборам. Сам по ним готовился когда-то.
Спасибо, попробую поискать. Пока собираюсь дрочить руби, всякое по базам и немного алгоритмов
Руби бог 13 лет экспы репортинг ин.
Бампану тред своей стори и поставлю этим постом жирную точку в истории под названием "Вкатился, катился и ДОКАТИЛСЯ", которая началась в руби треде ЕЩЁ ТОГДА, здесь она и закончится.
Помню году в 2010-2012 прочитал стори одного рубиста ещё на старом программаче (которую олдфаги уже и не вспомнят) как он красиво кодил опенсорц на рубях (рспек ЕМНИП) и ему сделали ремоут офер (что для 20хх было чем-то ВАУ) за какие-то бешенные бабки, на которые он мог позволить себе путешествовать и жить жизнь ПО КАЙФУ.
У меня появилась мечта.
Я, в ту бытность ещё будучи околошколой, пишущий на си/паскале, прочитав тред - загорелся. Купил книгу от Маца и дважды переписал её в тетрадь тезисно.
Работы на рубях в РФ было больше чем инцелов в /б/ тогда. В течение пары месяцев дрочки рубей, участия в специальных олимпиадах в пр нульча, если кто помнит пробежавшись по книге о рельсах - нашел свою первую работу джуном.
Приблизился на шаг ближе к мечте.
Бабки были огромные на то время, 90к после налогов (3к зелени примерно на 2013 год ДЖУНУ). Я даже не осознавая того факта что мне тупо повезло быть в правильное, сытое время, в нужном месте, с трендовой технологией в руках - ПОЙМАЛ ЗВЕЗДУ и начал менять РАБоты как перчатки, диктуя свои условия
Лонг стори шорт, спустя года 2-3 я пришел к своей мечте.
Полностью удалённый оффер, куча денег, чемодан-вокзал-тайланд, поездки по островам с новыми друзьями, вещества, тяны, наркотики, новые знакомства, новые проблемы; жил в таком ритме я где-то года 3-4 хз.
В итоге я вышел на пик переехав в одну очень успешную азиатскую страну где лутал ЕБЕЙШИЕ 20к не считая бонусов и стоков баксов просто за то, что был ЛИДОМ.
Параллельно, не осознавая что мне тупо повезло в своё время и искренне ощущая себя как охуенный спец, начал собеседоваться в серьезные компании, где нормальные инженеры с образованием и опытом создания действительно сложных систем, умением перекладывать байтики в памяти и писать быстрые алгоритмы - начали меня ОПУСКАТЬ на собесах.
Тогда я понял, что я тупой, всего навсего крудошлёп. Хуже Васяна на заводе, пишу модельки да контроллеры на рельсовой конвеерной ленте, а возомнил себя ИНЖЕНЕРОМ, ПРОГРАММИСТОМ! Звезда упала и порвала мне анус.
А потом ещё руби рынок во всём мире пошёл на спад понятно что сапорт все еще стоит денег, но эта история рано или поздно закончится.
Это вогнало меня в жуткую депру, попыткы доказать себе что я не крудошлёп длились много лет, и в общем-то они были позитивные, но успехом не увенчались. Осилил пару сложных книг по алгоритмам, даже в ФААНГ собеседовался вполне успешно (но из-за сокращений соснул хуйца в итоге всё равно).
Пытался вкатываться в более сложные языки типа скалы, но после руби это пиздец как лениво и непонятно нахуя это надо. В итоге я понял что в развитии своём как профессионал я так и остался КРУДОШЛЁПОМ, пускай и на максималках.
Ещё я недооценил влияние скуф-эффекта, выгорания и депрессии на возможности проф развития в IT области, я стал НЕОБУЧАЕМЫМ и пиздец каким ленивым. Щас мне просто всё лень и хочется делать всё что угодно, но не включать мозг.
Моя последняя работа за дохуя денег кстати закончилась выгоранием и нарушениями психики, так что ХЭПИ ЭНДА НЕ БУДЕТ. Я всё ещё разгребаю последствия влияния руби на мозг.
Зачем я всё это написал?
Наверное чтобы красиво закрыть гештальт.
Вижу щас как вкатуны выбирают Го и другие трендовые технологии несмотря на то, что рынок мёртв лмао и сперва такой: хаха ебать МАКАКИ. А потом вдруг начал видеть параллели между собой тогда и ими сейчас. И чёто охуел.
Выводы?
С одной стороны я залутал крайне много денег, но в итоге заебался, выгорел, разочаровался в себе и решил ВЫКАТИТЬСЯ из профессии вообще, заимев психологические проблемы.
А с другой стороны я реализовал свою мечту, жил полной насыщенной жизнью в свои 20+ лет пока не оскуфел, так что получается вкатуны всё делают верно?.
Наверное себе тогда я пожелал бы вкатываться в более мозгоукрепляющую технологию, менее трендовую, чтобы построить правильный фундамент, которого мне часто нехватало будучи рубистом. Вкатиться в любой тренд всё равно много ума не надо. А уметь не писать хуню - искусство, которое надо постигать.
Всё котаны, пазл сложился, цикл замкнулся, рекурсия прервалась. Из руби треда 1x лет назад в рубитред текущий.
Думайе.
Надо форварднуть эту пасту в тред гоудебилов, может сделают выводы.
Руби бог 13 лет экспы репортинг ин.
Бампану тред своей стори и поставлю этим постом жирную точку в истории под названием "Вкатился, катился и ДОКАТИЛСЯ", которая началась в руби треде ЕЩЁ ТОГДА, здесь она и закончится.
Помню году в 2010-2012 прочитал стори одного рубиста ещё на старом программаче (которую олдфаги уже и не вспомнят) как он красиво кодил опенсорц на рубях (рспек ЕМНИП) и ему сделали ремоут офер (что для 20хх было чем-то ВАУ) за какие-то бешенные бабки, на которые он мог позволить себе путешествовать и жить жизнь ПО КАЙФУ.
У меня появилась мечта.
Я, в ту бытность ещё будучи околошколой, пишущий на си/паскале, прочитав тред - загорелся. Купил книгу от Маца и дважды переписал её в тетрадь тезисно.
Работы на рубях в РФ было больше чем инцелов в /б/ тогда. В течение пары месяцев дрочки рубей, участия в специальных олимпиадах в пр нульча, если кто помнит пробежавшись по книге о рельсах - нашел свою первую работу джуном.
Приблизился на шаг ближе к мечте.
Бабки были огромные на то время, 90к после налогов (3к зелени примерно на 2013 год ДЖУНУ). Я даже не осознавая того факта что мне тупо повезло быть в правильное, сытое время, в нужном месте, с трендовой технологией в руках - ПОЙМАЛ ЗВЕЗДУ и начал менять РАБоты как перчатки, диктуя свои условия
Лонг стори шорт, спустя года 2-3 я пришел к своей мечте.
Полностью удалённый оффер, куча денег, чемодан-вокзал-тайланд, поездки по островам с новыми друзьями, вещества, тяны, наркотики, новые знакомства, новые проблемы; жил в таком ритме я где-то года 3-4 хз.
В итоге я вышел на пик переехав в одну очень успешную азиатскую страну где лутал ЕБЕЙШИЕ 20к не считая бонусов и стоков баксов просто за то, что был ЛИДОМ.
Параллельно, не осознавая что мне тупо повезло в своё время и искренне ощущая себя как охуенный спец, начал собеседоваться в серьезные компании, где нормальные инженеры с образованием и опытом создания действительно сложных систем, умением перекладывать байтики в памяти и писать быстрые алгоритмы - начали меня ОПУСКАТЬ на собесах.
Тогда я понял, что я тупой, всего навсего крудошлёп. Хуже Васяна на заводе, пишу модельки да контроллеры на рельсовой конвеерной ленте, а возомнил себя ИНЖЕНЕРОМ, ПРОГРАММИСТОМ! Звезда упала и порвала мне анус.
А потом ещё руби рынок во всём мире пошёл на спад понятно что сапорт все еще стоит денег, но эта история рано или поздно закончится.
Это вогнало меня в жуткую депру, попыткы доказать себе что я не крудошлёп длились много лет, и в общем-то они были позитивные, но успехом не увенчались. Осилил пару сложных книг по алгоритмам, даже в ФААНГ собеседовался вполне успешно (но из-за сокращений соснул хуйца в итоге всё равно).
Пытался вкатываться в более сложные языки типа скалы, но после руби это пиздец как лениво и непонятно нахуя это надо. В итоге я понял что в развитии своём как профессионал я так и остался КРУДОШЛЁПОМ, пускай и на максималках.
Ещё я недооценил влияние скуф-эффекта, выгорания и депрессии на возможности проф развития в IT области, я стал НЕОБУЧАЕМЫМ и пиздец каким ленивым. Щас мне просто всё лень и хочется делать всё что угодно, но не включать мозг.
Моя последняя работа за дохуя денег кстати закончилась выгоранием и нарушениями психики, так что ХЭПИ ЭНДА НЕ БУДЕТ. Я всё ещё разгребаю последствия влияния руби на мозг.
Зачем я всё это написал?
Наверное чтобы красиво закрыть гештальт.
Вижу щас как вкатуны выбирают Го и другие трендовые технологии несмотря на то, что рынок мёртв лмао и сперва такой: хаха ебать МАКАКИ. А потом вдруг начал видеть параллели между собой тогда и ими сейчас. И чёто охуел.
Выводы?
С одной стороны я залутал крайне много денег, но в итоге заебался, выгорел, разочаровался в себе и решил ВЫКАТИТЬСЯ из профессии вообще, заимев психологические проблемы.
А с другой стороны я реализовал свою мечту, жил полной насыщенной жизнью в свои 20+ лет пока не оскуфел, так что получается вкатуны всё делают верно?.
Наверное себе тогда я пожелал бы вкатываться в более мозгоукрепляющую технологию, менее трендовую, чтобы построить правильный фундамент, которого мне часто нехватало будучи рубистом. Вкатиться в любой тренд всё равно много ума не надо. А уметь не писать хуню - искусство, которое надо постигать.
Всё котаны, пазл сложился, цикл замкнулся, рекурсия прервалась. Из руби треда 1x лет назад в рубитред текущий.
Думайе.
Надо форварднуть эту пасту в тред гоудебилов, может сделают выводы.
Не пишу на руби, но было интересно прочитать. Сам хочу прыгнуть с легаси в хайповую технологию пока молодой.
Просто рельсы и есть инструент для крудошлепства, когда был фронт вместе с беком, то это был был почти идеальный инструмент и ты завис в этом инструменте. Возможно ты там дошёл и до кишочков фреймворка и знал дохуя всего в Active Record, но этот опыт не прокачивал тебя как инженера.
Я сейчас пишу все запросы руками, миграции тоже на чистом sql, иногда заебывает какие-нибудь фильтры или insert писать, но зато я какую хуйню только с постгресом не делал, руками прописывал хитровыебанные связи, хитробыебанные индексы с текстовым поиском, триггеры, функции. Я представляю как бы я это все делал в рельсах, я бы большинство этих вещей не знал бы и решал подобные задачи на уровне фреймворка. И так со всем остальным, за последние пару лет какой хуйней только не позанимался. Плюс еще полноценно с асинхроннойтью и многопоточностью поработал.
Так что да, с реальсами ты заперт внутри небольшого мирка
Ты просто зажрался, а беды с башкой и так бы вылезли неизбежно, ослик дотянулся до морковки - начался кризис материализма, а дрочил бы плюсы вместо руби - сидел бы сейчас на каком-нибудь шумном заводе, дёргал бы свои байты за 500 баксов в месяц.
>>3017722
>Я сейчас пишу все запросы руками, миграции тоже на чистом sql
Не дай бог работать кому-то с этим кодом после тебя, придётся всё выкидывать и писать с нуля.
(yoba-list sozday programu kotoraya nauchit men9 bit injenerom)
А по делу, да ща везде хуйня чел. Радуйся, что ты в руби и рельсах был. Радуйся, что всё это было.
Я как вкатун, могу тебе сказать, что вот начал с рубей и после них как неприятно ковырять жс и всё такое, но на руби тупо нет работы, по этому приходится чистить вилкой.
>>3018294
Двачую.
>Не дай бог работать кому-то с этим кодом после тебя, придётся всё выкидывать и писать с нуля.
Эксперт в треде
И да, я из РФ.
Ты легко можешь попробовать и то и другое, по классике, написать имиджборду на рейлс, потом на ноде, или наоборот, остановиться на том что покажется удобнее и логичнее. Ни то ни другое каких-то особых усилий и времени не требует и будет полезно в плане понимания современной веб-разработки.
>где больше денех дают
в рубях, закачик кабан с забугра в основном
>вакансии на руби есть
есть но мало и не джуновские
>вообще фуллстек вакансии с руби бывают
почти все бывают, это фуллстек фреймворк
Ток я сам не в рубях, говорю из того, что наблюдал.
> И вообще фуллстек вакансии с руби бывают?
Смотря что иметь в виду. Когда у тебя странички свёрстаны на руби+html вместе с бэком - бывает. Когда бэк на руби и отдельно фронт на каком-нибудь реакте - тоже бывает.
Ну сделал в итоге два варианта - через drb, удобно, гоняет объекты в обе стороны, скрывает под капотом все заморочки, как будто бы даже бесшовно, но через сеть, показалось немного громоздко для такой простой задачи, остановился на обычном IO.popen и чтением в потоке из stdout (10 строк кода простив 100 в drb), чем проще тем лучше.
Это же не переменная, а что это? Метод, который возвращает строку?
То есть примерно сказать, что количество вакансий на руби в n раз меньше, чем на шарпе, или в m раза меньше, чем на джаве.
Я пытался прикинуть соотношение через hh, но результат очень неточный, так как при поиске одного языка, ты в итоге видишь в выдаче в том числе совершенные другие языки, потому что в каких-то вакансиях могут быть указаны вообще 5 разных языков одновременно.
Это symbol синтаксис как у названия переменной, только впереди двоеточие, а по сути та же строка.
Вывело так, т.е. это не хэш тоже.
Как же жаль, что существует невероятно крутой один прожект, и при этом количество вакансий низкое.
Символ это как строка, разница в том что две одинаковые строки - разные объекты, а два одинаковых символа - один и тот же объект.
Переменная со значением 'hey'
Символ :test
Символ переведённый в строку
Почитай про символы и разницу между методами p и puts
Сейчас такое время, если ты в РФ, бери рейлс и импортозамещай сам, благо инструмент позволяет строить приложения любой сложности особо не напрягаясь.
>>3061416
На первой картинке есть :abysmall
Что это, метод? Хэш? Переменная? Обьект класса? Массив?
Не массив, не переменная.
Хэш должен иметь ключи еще, значит не хэш.
Обьект класса вернул бы на p что-то об этом.
Может метод тогда, верно?
К чему обращаются через двоеточие внутри хэша?
Например {'hey' => :test}
Что такое :test?
бля это вопрос или ты криво отвечаешь? ЯННП
:abysmall это СИМВОЛ символьный литерал
:test это тоже символ
Символ это тип данных в руби
Символ это как строка, с тем отличием что символ :a это всегда один объект в памяти :a.object_id == :a.object_id, в то время как одинаковые по значению строки могут ссылаться на разные объекты в памяти 'a'.object_id != 'a'.object_id
>К чему обращаются через двоеточие внутри хэша?
к ключу
ключ необязательно может быть символом, может быть строкой или чем угодно вообще, как в твоем примере:
>Например {'hey' => :test}
тут ключ это строка 'hey'
hash = {'hey' => :test}
hash['hey'] вернёт :test
hash[:test] вернет nil, так как такого ключа нет
>что такое :test
символ
Ты вообще нулевой что ли? Почитай иди книгу базовую по руби
бля это вопрос или ты криво отвечаешь? ЯННП
:abysmall это СИМВОЛ символьный литерал
:test это тоже символ
Символ это тип данных в руби
Символ это как строка, с тем отличием что символ :a это всегда один объект в памяти :a.object_id == :a.object_id, в то время как одинаковые по значению строки могут ссылаться на разные объекты в памяти 'a'.object_id != 'a'.object_id
>К чему обращаются через двоеточие внутри хэша?
к ключу
ключ необязательно может быть символом, может быть строкой или чем угодно вообще, как в твоем примере:
>Например {'hey' => :test}
тут ключ это строка 'hey'
hash = {'hey' => :test}
hash['hey'] вернёт :test
hash[:test] вернет nil, так как такого ключа нет
>что такое :test
символ
Ты вообще нулевой что ли? Почитай иди книгу базовую по руби
Что значит импортозамещай? Что именно можно сделать в одиночку?
>:abysmall это СИМВОЛ символьный литерал
спасибо
>Почитай иди книгу базовую по руби
посоветуй может быть, пожалуйста
чиво блядь?
любую книгу бери programming ruby, ruby programming language от маца, в руби несмотря на версию 3 нихуя особо существенного не изменилось, кроме keyword arguments
Он не знает английский, а ты ему суешь не то, что сейчас нужно
>Хайп прошел
И что, инструмент стал хуже? Нет, не стал. Появились какие-то вменяемые фуллстек-альтернативы? Тоже нет.
>>3062302
чё вы развонялись манюни? я в руби с 2008 года и не одного джуна на ноги поставил, если чел прочитает ту или другую книгу что я посоветовал - он будет охуенынм спецом.
"Новые уникальные фичи" чел освоит прочитав чейнджлог к новой версии рубей, все равно будет писать на рельсах лол
Че там уникального в современных книгах по руби? за ракторы, паттерн матчинг, кварги пояснят лол? 80% инфы (самой важной) будет то же самое, да и хоть одна норм книга вышла по языку вообще за последние 10 лет? руби мертв давно уже
>>3062294
прочитал дважды, лучшая книга по руби
конечно, любой го/питон/джава фреймворк
не вижу в 2024 смысла на руби писать
угараю с тех кто за 10 лет так и не пересел с руби на более вменяемый язык, руби - как бы я его ни любил - язык одного фреймворка, руби программеры в целом хуевые программеры, ибо руби чисто прагматичный язык для веба
Причина тряски? Давно писал на го или той же джаве, рубидаун? Никому твои рельсы уже не нужны кроме легаси проектов. А джсоны гонять лучше чем на го не придумаешь. Простой руби сервис жрал четыре инстанса и лагал как мразь на галере моей предыдущей. Го на одном летает и жрать не просит. Код писать не гемморойнее чем на руби. А тот факт что за него платят деньги - ну ты понял.
>джсоны гонять лучше чем на го не придумаешь
Задача примитивная, конечно тебе не нужен рейлс чтобы записать портянку текста в сокет.
>Код писать не гемморойнее чем на руби
Опять же, если задача - прогон джейсона, тебе сишка и десяток функций подойдет для этого.
Думаю, что руби мёртв больше чем жив, но рельсы ещё дадут прикурить, новых фич дохуя и писать фронт судя по всему легче становится чем гонять апишку, но это пока что всё для США, лет 5 и до нас дойдет нишево.
Сказано же, что Ruby не умер, он просто стал вампиром
А в РФ можно и на WordPress магазины клепать
Дурак что ли? Фулстек везде куда не плюнь. Нахуй рубисты нужны когда можно фулстек жс макаку взять? Рынок изменился. Руби нужен только для легаси, в основном хайрят синьоров. Точка. Нам всем надо смириться.
Тебя забыл спросить, на чем мне писать, еще какие-то точки ставит, охуеть дебил.
Конечно пиши на чем хочешь. Я сам на паскале иногда пишу. Но денег мне за это не платят. Платят за Goвно.
Ну к слову, ты не прав, что хайрят ток сеньоров. Есть стажировки даже на рубях, бесплатные конечно, но всё же. Да мало.
Другое дело, что это не фулстэк, а апишку делать. Так что вся прелесть рельс не чувствуется.
Бесплатно я и на идрисе по стажироваться могу лол.
Что нужно быстро повторить\выучить, чтобы пройти на мидла по ruby on rails?
Может есть какой гайд там и мануал, шпаргалка с вопросами и ответами, примеры кусков кода там?
Почему?
Видимо, он устроился на свои сытые миддловские 250к и теперь никогда не будет онлайн
Не могу найти синьора, потому что синьоров мало сейчас, а мидл не нужен, джун тем более.
хех
>Если смотреть youtube, то есть видео, где абстрактным классом считается обычный класс, который наследуют, и в котором переопределяют методы. Но при этом от обычного класса можно создать его instance, т.е. объект. А если смотреть википедию, то там написано, прям сразу в определении, что объекты от абстрактных классов создавать не предполагается, т.е. интерпретатор выдает ошибку в иных языках программирования, но в Ruby я могу создать объект класса, который считается абстрактным. Когда я спросил об этом в тусовке Ruby программистов в Telegram, которых я считаю гуру, то там мне ответили, что в Ruby нет абстрактных классов.
>Получается, что я завалил бы собеседование автору видео, если ответил бы, как считает Telegram тусовка, или завалил бы собеседование тусовке, если бы смотрел только видео, и завалил бы автору статьи в википедии, если бы ответил, как автор видео или тусовка Telegram.
https://2ch.hk/pr/res/3106055.html (М)
>После я пошел искать информацию об этом в Ruby, т.к. последние годы работал с этим языком программирования, и тут, получается, уже есть разногласия:
Нет интерфейсов, нет абстрактных классов, есть объект класса (метакласс), есть объект экземпляра, можно запретить метаклассу плодить экземпляры (синглтон), тогда это будет некое подобие абстрактного класса из джавы, разногласий тут никаких нет, просто у тебя пробелы какие-то по базовым вещам, что довольно странно само по себе, наталкивает на мысль что ты не работал с ООП и пропустил целиком главу из учебника, а это хуёвый звоночек на собесе.
>аталкивает на мысль что ты не работал с ООП и пропустил целиком главу из учебника, а это хуёвый звоночек на собесе.
>Нет интерфейсов, нет абстрактных классов
а как же видео про абстрактные классы в Ruby тогда?
А как же 2 года с Rails, в котором MVC и ООП?
А как же ActiveRecord в нем, который ORM?
Вот я и хочу узнать про абстрактные классы, потму что одни говорят одно, другие - другое, а википедия третье, а я просто смотрю архитектуру проекта и делаю также, и мне плевать абстрактный класс я наследую или просто класс, если он есть, меня мало волнует SOAP или REST API в проекте, потому что я смотрю json пришел или xml на реквест, ровно также, как мне пофиг мазь или крем прописал врач, я беру и мажу им то, что необходимо, я не понимаю зачем мне знать в каких случаях лучше перекись, а в каких хлоргексидин, если нужен антисептик, когда порезал палец, т.е .в проекте хлоргексидин - берешь его, перекись -её, какая мне разница в отличиях, я что, экстрасенс знать, что предпочитает тот, кто проводит собеседование? Потом все, когда я заваливаю собеседования, считают меня тупым, потом удивляются факту того, что я могу работаь на мировом рынке и выдерживать конкуренцию там, не могут в это поверить, блокируют соединение и считают, что дядя в цру, когда это не так, ищут самолет какой-то вместо фсб, максимум ебанутое быдло.
Рубисты, как широкого распространен JRuby?
>Рубисты, как широкого распространен JRuby?
>JRuby — интерпретатор языка программирования Ruby, написанный целиком на Java. Из Ruby-кода в JRuby можно вызывать классы Java, таким образом можно получить доступ ко всем библиотекам, инфраструктурам и инструментам платформы Java.
Т.е. ты хочешь сказать, что можно из Ruby вызывать классы Java, где уже точно есть и абстрактные классы в том числе? Мне так отвечать на абстрактном собеседовании?
Вопрос про абстрактные классы и интерфейсы это ловушка для вкатуна с курсов, который нарисовал себе годы опыта, но на самом деле не работал, на некоторые вопросы просто нужно заранее держать сформулированное определение в голове.
>>3106358
Бывает так что человек всё знает на практике, но объяснить не может - не владеет терминологией, тут только один вариант - читать книги из ОП-поста, первую базовую любую, вторую метапрограмминг, третью любую из продвинутого, текста много, но на выходе у тебя будет полный багаж теории и на всякой академической шелухе и попыткам копнуть поглубже ты уже не прогоришь.
>Бывает так что человек всё знает на практике, но объяснить не может - не владеет терминологией, тут только один вариант - читать книги из ОП-поста, первую базовую любую, вторую метапрограмминг, третью любую из продвинутого, текста много, но на выходе у тебя будет полный багаж теории и на всякой академической шелухе и попыткам копнуть поглубже ты уже не прогоришь.
Это очень ценный совет, спасибо огромное.
конечно
>Стоит ли дрочить этот стек дальше в ожидании вакансий стажер
Значит ты хочешь прийти с улицы без опыта, шоп тебя всему научили. А остальные чо блять тупые, этого не хотят? Или ты ожидаешь что ты будешь там единственным? Бля таких любителей халявы как ты, да тем более в сбер пол-города нахуй найдётся. Удачи тебе конкурировать с 500 человек на место. Таких ленивых увальней, которые ждут что работодатель их обучит, прокачает им опыт, пол-россии как минимум.
Ну вакансий руби/рельсы для джунов нет, а волчарой становиться не хочу, поэтому и думаю попытаться залететь в какой нибудь другой бек язык, где хотя бы вакансии джунов присутствуют
>Ну вакансий руби/рельсы для джунов нет
Да блять нет никаких джунов. Это просто образное выражение, это не буквально где-то прям заголовок вакансии висит. Такие вещи говорят между строк в описании (которое никто не читает), а не вывешивают в заголовках. Не существует никаких критериев что есть "джуниор". Кто это нахуй? Как он выглядит? Это больше как синоним говнокодера/рукожопа, а не конкретная вакансия.
Нахуй они тогда так делают? Могу ли я считать, что этот год опыта я получил дроча курсы?
>Нахуй они тогда так делают?
Опыт - это объективный фактор. Его можно посчитать. А "звания" это субъективщина, открой любой сайт с индусами, там каждый первый "сениор html-верстальщик". Чмохи с заниженным самомнением считают себя "джуниорами", а с завышенным "сениорами". Хотя этих сениоров пруд пруди на каждом сайте.
То что работодатель там пишет - тебя вообще ебать не должно. Твоя задача - это по описанию сопоставить свои навыки и то что им требуется. Осиляешь ты эту работу или не осиляешь. Говоришь, вот у меня такие и такие навыки, нанимаете? Нет? Я дальше тогда пошёл. Не надо ничо объяснять. Не надо никак оправдываться. Ты не обязан на 100% подходить под описание. Если они будут выёбываться - тогда пусть сами берут нахуй и работают. Всё.
Понял. Спасибо
конечно пиши на чем нравится, вот вакуха на джуна, удаленка
https://hh.ru/vacancy/97186095?query=Ruby&hhtmFrom=vacancy_search_list
Мне это показалось слишком нагруженным, не смотря на то, что я знаю регулярные выражения, т.е. я не понимаю, зачем их писать в неуникальных случаях, также я не увидел там валидацию хэшей, а мне нужно было именно это.
Поэтому я начал искать gem реализации иных ребяток, и не нашел валидацию, где не нужно было бы писать регулярные выражения или где можно создать свой шаблон для валидации проще. Поэтому я взял и написал свой класс начальной общеобразовательной школы для программистов с отклонениями и неординарным юмором (для себя).
- Там можно валидировать переменную или хэш.
- Там можно использовать готовые валидаторы.
- Там можно добавить шаблон для валидации хэша.
- Там можно добавить свои валидаторы к готовым (для любителей писать свои регулярные выражения).
- Там можно иметь валидацию или nil (для редких случаев, если девушка оставила номер телефона или нет).
+ Там нельзя валидировать хэши с вложенными хэшами пока иксзибит валидирует хэш, чтобы валидировать хэш (т.е. рекурсивная валидация вложенных хешей будет сделана когда-нибудь позже)
+ Там нет линтера и не будет, так что интервалы происаны в 4 пробела при табуляции (потому что я умею считать только с пяти до четырех).
+ Там нужен рефакторинг, и я оптимизирую код позже, т.е. он будет более профессиональным, но только тогда, когда я вырасту с middle+ до entry level
Просто я действительно не нашел простую валидацию, а у меня просто, как я считаю. Что думаете?
https://github.com/butteff/is_valid_ruby_gem ?
Но это всего-лишь 0.0.9 версия...
> Доброе утро этого осеннего вечера, господа
Копипаста даже не палится. Ладно, поговорим с копипастой.
>также я не увидел там валидацию хэшей, а мне нужно было именно это
Эм, в смысле? Может, я не понял автора, но всё там есть. Для каждого вложенного хэша нужно объявить свой Contract, унаследовавшись Dry::Validation::Contract. Через Dry::Schema.Params объявить схему, как показано тут: https://dry-rb.org/gems/dry-schema/1.13/nested-data/#nested-code-hash-code
Dry::Schema позволит проверить, что структура хэша соответствует ожидаемой. Если всё совпало, то каждый вложенный хэш можно валидировать через соответствующий Contract.
Абстрактный класс - это умозрительная хуйня, класс, который ты планируешь наследовать и не планируешь инстанциировать. Если рассмотреть конкретный пример бизнес-логики и нормально назвать эти классы, то 95% вопросов отпадают сами собой. Если у тебя есть зоопарк с кошечками и собачками, то тебе и в голову не придёт создать ЖИВОТНОЕ, вот животное здесь - это абстрактный класс.
Просто в каких-то языках есть специальные конструкции, которые будут вываливать ошибку при попытке создать объект, а в каких-то нет но можно писать костыли для получения этого функционала, суть от этого не меняется.
>dry-rb
Мало того что это набор кривых костылей, так еще и русофобская параша, блокнувшая российские ip на веб-сервере, может там еще и закладки в коде, кто знает.
Ладно, похоже что я гоню, видимо хостер просто в бане у РКН.
У меня всё открывается. Вроде как там висела вверху строчка "бла-бла-бла, помогите хохлам", её видно вот здесь, например:
https://web.archive.org/web/20230405005510/https://dry-rb.org/
Но сейчас я её не вижу, лол. Видимо поняли, что пора этот кринж заканчивать.
Что касается кривости, то, лол, а что не кривое? Это опен-сорс, так что по определению ничего хорошего ждать не стоит. Но я использовал dry-system, dry-configurable, dry-validation и пару других мелких (dry-cli, dry-files). Да - кривое, да - плохо документированное, но лучше, чем ничего.
Дальше оффтопик. Меня больше удивляет, что они там пилят Hanami, неужели им кто-то пользуется? Даже рельсы-то отмирают, ньюбисы руби обходят стороной и вкатываются во всякие Django, и пилить очередной фреймворк на рубях какая-то сомнительная идея...
>Для каждого вложенного хэша нужно объявить свой Contract, унаследовавшись Dry::Validation::Contract. Через Dry::Schema.Params объявить схему, как показано тут: https://dry-rb.org/gems/dry-schema/1.13/nested-data/#nested-code-hash-code
>
>Dry::Schema позволит проверить, что структура хэша соответствует ожидаемой. Если всё совпало, то каждый вложенный хэш можно валидировать через соответствующий Contract.
Не хочу показаться навязчивым и не претендую на звание суперзвезды в программировании, но, считаю, что я точно среднего уровня, поэтому делаю некоторые выводы о том, что у меня все же попроще. Я могу объявить инициализацию класса, передав в конструкторе шаблон валидации, как на этой картинке, и просто потом передать хэш для валидации, например, @@valid.check_hash(hash_data, 'status'), т.е., как мне кажется, у меня сильно проще, хотя dry-rb сильно поплуярнее, и я не могу понять зачем усложнено там, т.е. я смотрел их gem с миллионами загрущок, и решил написать свой, т.к. у меня, кажется, проще все же.
Документацию на gem или сам gem можно найти по ссылке htpps://butteff.ru/extensions/
>Не хочу показаться навязчивым и не претендую на звание суперзвезды в программировании, но, считаю, что я точно среднего уровня, поэтому делаю некоторые выводы о том, что у меня все же попроще. Я могу объявить инициализацию класса, передав в конструкторе шаблон валидации, как на этой картинке, и просто потом передать хэш для валидации, например, @@valid.check_hash(hash_data, 'status'), т.е., как мне кажется, у меня сильно проще, хотя dry-rb сильно поплуярнее, и я не могу понять зачем усложнено там, т.е. я смотрел их gem с миллионами загрущок, и решил написать свой, т.к. у меня, кажется, проще все же.
>
>Документацию на gem или сам gem можно найти по ссылке
https://butteff.ru/extensions/
Костыль какой-то, в dry-rb всё нормально сделано - в класс прописаны атрибуты и их тип, во время создания объекта конструктору передаёшь хэш, всё проверяется и пишется в атрибуты без лишних движений, у тебя же какой-то левый объект, нужно объяснять ему структуру хэша, хранить его состояние, потом спрашивать, валид\невалид, нахуя это всё нужно? Зачем так усложнять, плодить сущности какие-то? Зачем скрывать валидацию из кода в либу? Контакты какие-то придумываешь, синтаксис твоей хуйни еще в голове держать, у тебя проблемы с архитектурой программы если такое говно приходится рожать.
Не понимаю тебя. Либы для того и существуют, чтобы столкнувшись с %проблема_нейм% тебе не пришлось изобретать велосипед и писать с нуля то, что уже много раз было реализовано до тебя. Спроектировать, написать, отладить, снабдить документацией, а потом ещё и поддерживать свой gem — это в любом случае более трудоёмкая задача, чем изучить API готового решения. Каким бы изъёбистым API не казалось, какой бы уёбищной не была документация, как правило, всё равно освоить готовую либу легче, чем реализовать свою. Не знаю, зачем приходится такие очевидные вещи говорить.
Тащемта, если тебе нравится (и есть время на это) реализовывать свои велосипеды — пожалуйста, дело твоё. Но пользоваться лично я этим не буду, лол.
Привет, Рубистычи, думаю вкатиться в ROR чисто для self-build проектов, каких-то простых SaaS очень привлекла экосистема, комьюнити, и особенно Hotwire/Stimulus, Но не привлекла ебучая магия, отсутствие нормального дебагера, как будто завести проект - уже победа. На моем стеке на работе в принципе тоже самое, это джанга ебаная, всеми силами пытаюсь устроиться как гошник, но не зовут, т.к даже имея сильный бекграунд и сениорский грейд, я все равно для них свитчер-вкатун. А влажная мечта выйти из найма в свои СааСочки всегда была и есть.
Паца, а вот знаете такую хуйню, типо как маскот на сайте выплывающий? А-ля как Скрепочка из старого Майкрософт Офиса.
Можно на рельсах чето подобное замутить? Есть может гем какой или еще чего.
Гугл ведет меня сюда: https://github.com/joshuajansen/magnific-popup-rails
капча хорошая...
UPD
Внезапно открыл для себя Pixi JS. Вот это подходит вроде под реквест... Я у одного чувака на сайте видел мордашку, она спавнилась рандомно на странице, чето говорила и была кликабельна. Показ бы пример, да ссылка канула в лету.
>спавнилась рандомно на странице, чето говорила
Хуёвая практика в плане юзер-интерактив, всё что всплывает и мозолит глаза, провоцирует внимание, сам наверное понимаешь.
Оператор чата подержки Наталья онлайн!!111
Это копия, сохраненная 13 июля в 15:17.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.