По следам подкаста

Как я не ярился писать много и регулярно, работа отнюдь не способствует этому. Радует, что нашлась пара минут закачать на телефон подкаст Алексея Дмитриева о Рельсах. Замечательная речь, в которой хорошо вынесены все плюсы платформы:

1. Open Source – рецепт и экономической популярности, и кросс-платформенной совместимости. Открытый код позволяет любому разработчику посмотреть на исходный код.
1. Скорость разработки – причина, по которой вы можете оставить конкурентов позади. Буквально несколько команд позволяют вам создать каркас приложения, на котором строятся прототипы, на которые потом уже наращивается мясо. Очень хорошо сказано: в фокусе Ruby on Rails находится программист, а не сам продукт. То есть система построена так, чтобы облегчить разработку новых продуктов.
1. Автоматические тесты – защита готового проекта от человеческого фактора. Наборы тестов позволяют проверить функциональность работы системы, после внесения в код изменений. Таким образом можно автоматизировать проверку измененного кода. Система развертывания capistrano предназначена для автоматического обновления уже работающего кода. Для других систем тесты и развертывание не являются стандратом de facto.
1. База готового кода – импорт/экспорт документов Excel, системы авторизации, интеграция со сторонними сервисами, поддержка tag-ов, ajax, галереи и блоги – все это легко встраивается в приложение посредством plugin-ов и не надо изобретать велосипед.
1. Человечность языка – сам код приложения легко читаем даже теми, кто никогда не учил ruby. Как говорил Матсумото:
*”Человек создан для творчества, и я всегда знал, что люблю творить. Увы, я обделён талантом художника или музыканта. Зато умею писать программы. Я хочу, чтобы компьютер был моим слугой, а не господином, поэтому я должен уметь быстро и эффективно объяснить ему, что делать.”*
1. Ruby on Rails – это модно. Microsoft, Sun, Apple, Ebay и многие другие смотрят на RoR как на серьезный продукт.

Замечательный выпуск, меня очень порадовало что автор прекрасно раскрыл все плюсы разработки. Особенно понравилась фраза:
: Программисты народ заскорузлый. Их заставить что-то изучить надо постараться. Особенно это касается программистов на php: да ладно, мы будем по старому, как сапоги тачали, так и будем тачать.

Ждем следующих выпусков, в которых автор откроет такие темы как:

+ Когда не стоит использовать Ruby on Rails
+ Подводные камни, которые ожидают тех, кто собирается перевести текущую разработку на RoR
+ Рентабильность размещения Rails приложений для хостеров

А о чем бы хотели услышать вы? Оставьте комментарий или трекбек, что именно вас волнует в современной веб-разработки и какие темы надо бы расскрыть.

[tags]ruby, rails, ruby on rails[/tags]

Еще раз для популяризации Руби

Пополняя свою коллекцию полезных скриптов, в добавок к Javascript-у, YAML-скрипту и Listing-cкрипту сегодня написал еще один Watermark-скрипт.
Как понятно из названия, он берет все jpg файлы из текущей папки и добавляет к ним одно изображение. Очень удобно для пакетной обработки файлов: можно поставить на все изображения URL вашего сайта, чтобы люди знали откуда сие добро взято.
Код простой, работает консольно без всякого вывода, однако для его запуска потребуется RMagick, а следовательно и ImageMagick тоже. Если вы используете нормальный сервер или одну из правильных OS, то проблем возникнуть не должно.


require 'RMagick'
wtm_file = 'watermark.png'
wtm = Magick::Image.read(wtm_file).first
Dir.open('./').each do |file|
    next if file[-4..-1] != '.jpg'
    next if file =~ /^..?$/
    
    image = Magick::Image.read(file).first
    image.composite!(wtm, Magick::CenterGravity, 
                                Magick::HardLightCompositeOp)

    out = file.sub(/./, "-wm.")
    image.write(out)
end 

Буду благодарен любым комментариям.

Ням-ням, YAML!

Сегодня я торжественно финишировал со сдачей всех своих долгов, успешно отчитавшись по “Электронной коммерции”. Самое интересное, как обычно было на ТКПО у С. А. Орлова. Надо было написать тестовый модуль, для прогонки определенного кода. Поскольку кроме ruby других интерпретаторов не держу, а всякие Delphi/Dotnet долго и неинтересно писал его на ruby. Вынес тестируемый кусок в отдельную функцию, и положил в папку скрипта простой файлик в виде:


- price: 50
  discount: 10
  result: 45

- price: -20
  discount: 10
  result: -1

А дальше сам модуль:


tc = YAML::load( File.open( 'testcase6.yml' ) )
tc.map do |m|
 puts "Result is "+"%3.2f" % discount(m).to_f
end

Коротко и прикольно. Единственное, что могу сказать: не забывайте о пробелах. Иначе, вместо красивого хеша, каждый тестовый вариант будет всего лишь стрингом, с которым конечно можно работать, но гемморою не меньше чем в delphi.
Подробнее о YAML:

Циклик

Понадобилось на одну страничку заклепать этак почти 2 сотни картинок. В ручную прописывать понятное дело муторно и не эффективно. Залил картинки в нужные папки по FTP, а для генерации написал скриптик, благо стили уже давно были. Решил, что надо завязывать со всякой php-шной фигней, а потому скриптик родил на ruby. Глядишь, будет такой же полезный и часто используемый, как тот, что на javascript-e.


puts '<ul class="products2">'
193.times do |a|
		puts '<li><div class="frame3">'
		puts '<a href="res/catalog/images/shkafi/full/sk'+
					("%04d" % (a+1))+'.jpg" 
					target="_blank">'
		puts '<img src="res/catalog/images/shkafi/thumbs/sk'+
					("%04d" % (a+1))+'_s.jpg" width="104" 
					height="104" border="0" /></a>'
		puts '</div></li>'
	end
end
puts '</ul>'

Понятное дело, что и CSS, и сам код можно было бы дооптимизировать, но дело в том, что я этим занимаюсь не ради удовольствия, а “грубо и цинично рублю бабло” (с).

C подачи начальства появилось чуть-чуть времени и скриптик был чуть более автоматизирован. Теперь он берет имена файла из текущей папки, отрубает у них разширение .jpg и вписывает в нужное место в темплейте.
Continue reading Циклик

Приключение под названием “Exigen”

## Intrа

Все началось с почты. Уже не помню когда, но в начале июля я выгреб у себя из мыльника письмо, мол [Brainbench][] уведомляет что Вы очень нужны компании [Exigen][]. Я конечно особых иллюзий не строил, знаю что им нужны “пахотливые волы”, а не раздолбаи, но с содержанием ознакомился… зайдите сюда, заполните CV, мы Вас найдем… А почему бы и нет? Я потратил 2 часа своего времени на то, чтобы разобраться со всеми каверзными вопросами, и двинулся по делам. А когда вернулся, у меня в мыльнике лежало приглашение на собеседование.

[Brainbench]:http://www.brainbench.com
[Exigen]:http://www.exigengroup.lv


## Cобеседование №1. Отдел кадров.

Встретила меня особа с которой я вел переписку. Ноги примерно моей длины, только худее и меньше размеров на 10.
В общем, я на нее поглядел и решил, что надо разговаривать с ней о работе,
поскольку все мужское население фирмы бросало на меня взгляды:
“А ты, шмель, откуда?”.
Мы двинулись в комнату с кондиционером, где мне был предоставлен огромный список вопросов, а ля, “что подвигло тебя на мысли о смене работы”, “какая из компьютерных новостей за последние полгода тебе показалась интересной”, “чем тебе понравился руби?”, “что хорошего в rails?” и т.д. 40 минут и всего 3 улыбки. Потом я двинулся домой.

Continue reading Приключение под названием “Exigen”

Промежуточные результаты

Итак, снова вернулся к своему Rubyshop-у, тоесть тестово-учебному произведению на RoR.

Любопытный до жути, и въедливый я, начал ковырять стандартный скаффолд. Сначала данный механизм, который позволяет просто представить и управлять данными (берет на себя SUID функции) никак не хотел расскрывать мне свои потроха, но уже через несколько минут секрет был расколот и я начал писать первые собственные экшены. В результате, через 2 часа мой магазин оброс:

  • возможностью добавлять фирму производитель и ее хоумсайт
  • возможностью добавлять категорию для товара (пока только одну)
  • возможностью выборки из списка всех товаров по категории
  • возможностью выборки из списка всех товаров по названию фирмы

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