Note: весь код работает на ruby 1.9 (не ставил цели запустить на 1.8)
- nokogiri + mechanize - Удобный парсинг сайтов
- wirble - autocomplete и подсветка в консоли
- active_support - много полезных расширений
- rspec2 - тесты
Одекватность людей в команде :). Покрытие тестами. Не очень хорошо, когда люди комитят не рабочий код в основную ветку. Комментарии к коду должны быть на английском языке, если заказчиком не оговоренно иное. Так же удобно называть файлы именами классов (для удобной навигации по коду)
lambda и proc-и часто использую, но ruby более OOP way, чем функциональный.
Использую Rails (ActiveSupport, ActiveRecord) даже не в web проектах. С ActiveRecord удобно поддерживать базу в актуальном состоянии (migrations). ActiveSupport дает очень много полезных функций.
Для дебага мне всегда хватает тестов и логов. Для мониторинга нагрузи сети мы написали тулинг вокруг bwm-ng.
Недостаков не знаю вроде (привык уже). Нравится retry (в Java, C# такого нет)
Javascript, CoffeeScript, Objective-C, C/C++, C#, Java, Action Script
1660 / 100 != 16.6
- потому что тут деление на цело. Чтобы условие
выполнялось необходимо, чтобы один из операндов был вещественного типа.
(1660/100.0 == 16.6
)
24.0 * 0.1 != 2.4
- из-за стандарта представления чисел с плавующей точкой в
разрядной стетке. Необходимо проверять равенство с учетом некой дельты:
delta = 0.1 ** 6
(24.0 * 0.1 - 2.4).abs <= delta
- Я бы выбрал BSON да еще бы пожал бы его через gzip
- Поддержка бинарных данных (без эскейпинга), что позволит эффективно передавать вложения. Хорошая поддержка формата на обоих сторонах (ruby - bson_ext, action script - https://github.com/argoncloud/ActionBSON).
Потоки это механизм паралельного выполнения кода в одном процессе. При этом общая память доступна для чтения и записи. Форки - это механизм копирования процессов. При этом общая память доступна только для чтения. В случае с руби (MRI) настоящего параленього выполнения в потоках можно добиться только в IO или на native уровне. Насчет инструментария, то мне только известны Java профайлеры и дебагеры.
На базе EventMachine, можно писать настоящий асинхронный код на ruby. Ruby 1.9 fibers позволяют скрыть множественные callbacks и делают год более простым.
спека grabber_spec.rb
Достаю только картинки из тэгов IMG и скачиваю их в 10 потоков
спека finder_spec.rb
Вообщем ruby медленный язык, так как интерпретируется каждый раз. Evan делает rubinius с JIT-ом и убирает GIL. Как я понимаю, за rbx будущие, но сейчас он сильно отстает по производительности от 1.9 MRI. Один из путей оптимизации кода - это переписывать на C узкие участки программы. Если native code не брать в расчет, то я предерживаюсь следующий здравых правил:
- Не плодить объекты - GC медленный в ruby
- Не делать callstack большим - тоже связанно с работой GC
- Не использовать eval
- Заранее построить индексы по полям [Возраст, Рост, Индекс, Сумма Денег]
- Начинать фильтровать записи с узких индексов [индекс, сумма денег] даллее [Возраст, Рост].
- Оставшиеся записи проврить фильтром [Пол] (Если он есть)