Записки программирующего руководителя http://dapi.ru ruby, управление, проекты и мечты posterous.com Fri, 27 Apr 2012 23:29:00 -0700 Ловить Exception где попало это плохо http://dapi.ru/exception http://dapi.ru/exception

Потому что Exception это не только ошибки, но и прерывания - подробнее..

Лучше ловить StandartError, а еще лучше только те исключения, что нужны:

Exceptions, Catch, and Throw

  • Exception
    • NoMemoryError
    • ScriptError
      • LoadError
      • NotImplementedError
      • SyntaxError
    • SignalException
      • Interrupt
    • StandardError (default for rescue)
      • ArgumentError
      • IOError
        • EOFError
      • IndexError
      • LocalJumpError
      • NameError
        • NoMethodError
      • RangeError
        • FloatDomainError
      • RegexpError
      • RuntimeError (default for raise)
      • SecurityError
      • SystemCallError
        • Errno::*
      • SystemStackError
      • ThreadError
      • TypeError
      • ZeroDivisionError
    • SystemExit
    • fatal

 

А распечатать карту эксепшенов можно так:

require 'pp'
tree =
(cr = lambda {|h,k| h[k] = Hash.new &cr})[{},nil]
ObjectSpace.
each_object(Class) {|cl| if cl.ancestors.include? Exception
then cl.
ancestors.reverse.inject(tree){|tr,cl| tr[cl]} end}
pp tree

 


http://rubyonrailsthrissur.wordpress.com/2011/06/07/exception-hierarchy-ruby/

https://makandracards.com/makandra/4851-ruby-exception-class-hierarchy 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1096523/danil_pismenny_100x100.jpg http://posterous.com/users/4xgjCwnvhGAV Danil Pismenny dapi Danil Pismenny
Wed, 11 Apr 2012 00:15:00 -0700 Простое правило комментирования программного кода http://dapi.ru/121647914 http://dapi.ru/121647914

На ruby писать приятно тем, что его текст легко читается и понимается другими программистами. Но это заслуга не столько ruby, сколько пишущего программиста, и к сожалению, так писать получается не всегда.

Поэтому приходится придерживаться правила:

Как только вы встречаете программный код, на понимание которого затратили какое-то время, сэкономьте это время коллегам: или перепишите понятнее или просто прокомментируйте.

В комментарии интересует не столько ЧТО делает код, но КАК он это делает.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1096523/danil_pismenny_100x100.jpg http://posterous.com/users/4xgjCwnvhGAV Danil Pismenny dapi Danil Pismenny
Sat, 07 Jan 2012 08:27:00 -0800 Как мы деплоим проекты (vlad в submodule) http://dapi.ru/vlad-submodule http://dapi.ru/vlad-submodule

Мы деплоим с помощью vlad-а. Написили git-сабмодуль с настроеным деплоем и подключаем его в каждый проект. Смысл:

  • отсутсвие Vlad-а в основном Gemfile проекта (он часто конфиктует с другими гемами)
  • быстрый запуск деплоя, за счет короткого Gemfile модуля, в нем ведь всего 3 гема подключаются.
  • обычные настройки лежат в проекте, а не раскидываются по форкнутым гемам. Хотя форкнутыйе гем тоже есть - https://github.com/dapi/vlad-unicorn и https://github.com/dapi/vlad-git

Собствено git-сабмодуль: https://github.com/dapi/vlad_deploy

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1096523/danil_pismenny_100x100.jpg http://posterous.com/users/4xgjCwnvhGAV Danil Pismenny dapi Danil Pismenny
Wed, 04 Jan 2012 12:46:00 -0800 Авторизация битриксовых пользователей на рельсах http://dapi.ru/91973974 http://dapi.ru/91973974

https://gist.github.com/1562013 разработчик - Дмитрий Максимов

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1096523/danil_pismenny_100x100.jpg http://posterous.com/users/4xgjCwnvhGAV Danil Pismenny dapi Danil Pismenny
Tue, 29 Mar 2011 22:00:00 -0700 gritter_notice: Всплывающие flash-сообщения из глубин фоновых задач http://dapi.ru/flash-delayedjob http://dapi.ru/flash-delayedjob

C flash-сообщениями постояно одни и теже поблемы:

Не понятно где их вводить на странице. Заранее определять блок - жалко место и не ясно что на нем вводить когда сообщений нет. Делать блок раздвижным - не хочется двигать из-за этого все содержимое страницы, да и лайаут не вегда может быть резиновым в этом месте. А еще сообщений может быть много.. А еще нужно заботиться об их стилях, о хелпере вывода.. а еще кто-то все время норовит засунуть сообщение в неизвестный ключ, типа flash[:system]='Траляля'

А еще хочется выводить сообщения не только в текущей сессии, но для конкретного пользователя. Запустил, например, он импорт контактов, ушла задача в delayed_job и не слуху не духу от нее, flash-ками уже не обойдешься.

В итоге родился gritter_notice. Вызовом одного метода во вьхе он выводит все флешки ввиде popup-окошек, а еще позволяет добавить в пользовательскую модель метод .notice с помощью которого можно посылать юзеру любый сообщения, в том числе и с картинками, откуда угодно:

    user.notice 'Вася, мы закончили работу'
    user.notice_warning 'Вася, что-то тут такое странное происходит', :image=>'http://..'

Василий получит эти сообщения при первом-же просмотре сайта как и остальные flash-и.

Для вывода собщений используется  jQuery плагин gritter, пример его работы - http://boedesign.com/demos/gritter/

Подробнее: https://github.com/dapi/gritter_notices

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/1096523/danil_pismenny_100x100.jpg http://posterous.com/users/4xgjCwnvhGAV Danil Pismenny dapi Danil Pismenny