Comments 30
Как-то Сисадмин спросил:
– Учитель, не желаете ли красивую картинку для вашего десктопа? У меня есть коллекция «обоев для рабочего стола» со звёздным небом и моральным законом.
– Почему ты думаешь, что мой нынешний «wallpaper» хуже? – спросил в ответ Инь Фу Во.
– Я не знаю, какая у вас картинка сейчас. Я никогда не видел вашего десктопа. У вас всегда открыто множество окон.
– Я тоже его никогда не видел, – сказал почтенный Инь. – Я работаю.
– Учитель, не желаете ли красивую картинку для вашего десктопа? У меня есть коллекция «обоев для рабочего стола» со звёздным небом и моральным законом.
– Почему ты думаешь, что мой нынешний «wallpaper» хуже? – спросил в ответ Инь Фу Во.
– Я не знаю, какая у вас картинка сейчас. Я никогда не видел вашего десктопа. У вас всегда открыто множество окон.
– Я тоже его никогда не видел, – сказал почтенный Инь. – Я работаю.
Прошу простить, но для человека, не знакомого с ruby, код выглядит страшно. Нельзя ли его сделать более приятным на глаз?
Но это Ruby, он просто такой. Я понятия не имею как его можно сделать более приятным для глаз. Может кто-нибудь подскажет?
Подскажет.
Не надо писать всё в одну строчку.
И ещё, вот это:
attr_accessor :window
attr_accessor :tags
attr_accessor :size
attr_accessor :number
attr_accessor :saveInto
attr_accessor :startButton
attr_accessor :output
attr_accessor :downprogress
attr_accessor :downloader
attr_accessor :img
Ужас… Можно один раз написать attr_accessor, а потом перечислить какие…
Не надо писать всё в одну строчку.
И ещё, вот это:
attr_accessor :window
attr_accessor :tags
attr_accessor :size
attr_accessor :number
attr_accessor :saveInto
attr_accessor :startButton
attr_accessor :output
attr_accessor :downprogress
attr_accessor :downloader
attr_accessor :img
Ужас… Можно один раз написать attr_accessor, а потом перечислить какие…
Потому что это написано в C-подобном стиле. Рубями тут и не пахнет.
Примеры бы не помешали?
github.com/troydm/AnimeWallpaperDownloader/pull/1
Я, следуя порыву, начал рефакторить, но сумел вовремя остановиться.
Для более глубокого рефакторинга надо смотреть, что там за страницы оно отдаёт и т.д.
Примеры:
1. В руби стандартом являются отступы в 2 пробела (styleguide)
2. Неплохо было бы вычищать лишние пробелы — это очень портит диффы.
3. Имена переменных это главный фейл. Ещё в школе по-моему рассказывают, что называть переменные «a, b, c» — это плохо.
4. Повторяющийся код надо извлекать в соответствующие методы.
5. Меня смущают счётчики и метод, которым парсятся страницы, но по этому поводу я ничего не могу сказать конкретного, надо вникать в то, как работает приложение.
7. Зачем там хеши нужны я так и не понял. Заменил на массивы.
8. Ну и прочие C-измы. То есть приложение написано в обычном процедурном стиле как это делается в C, без использования всех возможностей ruby.
Ну в общем рад, если помог. :)
Я, следуя порыву, начал рефакторить, но сумел вовремя остановиться.
Для более глубокого рефакторинга надо смотреть, что там за страницы оно отдаёт и т.д.
Примеры:
1. В руби стандартом являются отступы в 2 пробела (styleguide)
2. Неплохо было бы вычищать лишние пробелы — это очень портит диффы.
3. Имена переменных это главный фейл. Ещё в школе по-моему рассказывают, что называть переменные «a, b, c» — это плохо.
4. Повторяющийся код надо извлекать в соответствующие методы.
5. Меня смущают счётчики и метод, которым парсятся страницы, но по этому поводу я ничего не могу сказать конкретного, надо вникать в то, как работает приложение.
7. Зачем там хеши нужны я так и не понял. Заменил на массивы.
8. Ну и прочие C-измы. То есть приложение написано в обычном процедурном стиле как это делается в C, без использования всех возможностей ruby.
Ну в общем рад, если помог. :)
Могу вам посоветовать книгу Eloquent Ruby. Там сделан основной акцент как стилистически правильно писать на Руби.
nokogiri для парсинга страниц не?
Усложнять всё это (nokorogi надо ещё запаковывать) и трать много времени не хотелось так как там несколько моментов где нужно запарсить html и достаточно стандартных средств Ruby
:facepalm:
gem install nokogiri
Это разве работает на MacRuby? Я тут погуглил stackoverflow.com/questions/2776195/how-to-install-nokogiri-as-a-macruby-gem. И как потом все в .app запаковать?
www.macruby.org/trac/ticket/810
Никак паковать не надо в app, зачем? Или все библиотеки линкуемые вы тоже всегда к приложению прикладываете? :) Надо это написать в prerequisites или в самом скрипте сделать проверку, что б ежели что отсутствует — выдавал полный список требуемых гемов и инструкции по установке.
Никак паковать не надо в app, зачем? Или все библиотеки линкуемые вы тоже всегда к приложению прикладываете? :) Надо это написать в prerequisites или в самом скрипте сделать проверку, что б ежели что отсутствует — выдавал полный список требуемых гемов и инструкции по установке.
Я не думаю что простые рядовые пользователи умеют устанавливать gem-ы. Счаз там ничего кроме MacRuby не нужно. Eго устанавливать не сложно. Простой установщик. Я потом разберусь как его вообще вместе с .app поставлять чтоб пользователи не морочились c установкой MacRuby вообще. Это же десктопное приложение всё таки
Внимание, вопрос. А зачем вы вообще тогда взялись на MacRuby писать?! Не лучше ли на нативном Obj-C? По времени вышло бы столько же, задача тривиальная благо. И никаких бы проблем не было.
Исходя из первого абзаца, просто интересно было разобраться в MacRuby
Вы явно пытаетесь решать или не ту задачу, или не теми средствами.
Если вы хотите, что бы приложение было standalone и требовало минимум усилий по установке в порыве заботы о «рядовых пользователях» — пишите на Obj-C. Иначе это скоро кончится тем, что вы и сам macRuby прилинкуете жестко и положите в пэкэдж, а то вдруг выйдет новая версия, и ваш код окажется работать без какого-нибудь небольшого фикса. Такие случаи медицине известны.
Отказ от велосипедов и массированное использование гемов — один из столпов руби, сама идея жестко их линковать выглядит противоестественной, о чем тут и намекнули. Установка гемов проста как никогда, для этого люди приложили много усилий. Если беспокоят какие-то сложности — напишите установочный шелл-скрипт, он может все разруливать очень умным образом. И если вы пойдете этим путем, то образовательный эффект будет гораздо больше.
Если вы хотите, что бы приложение было standalone и требовало минимум усилий по установке в порыве заботы о «рядовых пользователях» — пишите на Obj-C. Иначе это скоро кончится тем, что вы и сам macRuby прилинкуете жестко и положите в пэкэдж, а то вдруг выйдет новая версия, и ваш код окажется работать без какого-нибудь небольшого фикса. Такие случаи медицине известны.
Отказ от велосипедов и массированное использование гемов — один из столпов руби, сама идея жестко их линковать выглядит противоестественной, о чем тут и намекнули. Установка гемов проста как никогда, для этого люди приложили много усилий. Если беспокоят какие-то сложности — напишите установочный шелл-скрипт, он может все разруливать очень умным образом. И если вы пойдете этим путем, то образовательный эффект будет гораздо больше.
nokogiri использует C-ext, MacRuby не работает с RubyC, однако можно подключить любую Obj-C библиотеку.
итого получился проект для скачивания обоев с одного сайта и чтобы использовать его для его-то другого, нужно переписать больше половины вашего класса Downloader?
troydm, переименуй «save into» в «save to». Так будет правельнее
Довольно интересный ресурс создали, спасибо :)
Sign up to leave a comment.
Пишем Anime Wallpaper Downloader на MacRuby