Pull to refresh

Разработка ПО для проведения Saratov SFD'09: Как это было

Reading time 4 min
Views 701
В 2009ом году в СГСЭУ(Саратовский Социально-Экономический Университет) произошла ротация кадров вследствие чего проведение там Saratov Software Freedom Day более не представлялось возможным.
Эстафету проведения SFD в Саратове подхватил СГУ.
Организаторами от СГУ были восновном люди с техническим уклоном и потому в этом году Saratov SFD получился существенно более технически продвинутым чем ранее.
Для организации SFD 2009 в СГУ было разработано несколько программных продуктов (вплоть до драйверов под Linux!)

При организации Saratov SFD 2009 был учтен опыт предыдущих лет.
Был открыт специальный сайт посвещенный данному мероприятию sfd.sgu.ru

Работы над сайтом


Сайт на самом деле является проектом в свободной системе управления проектам Redmine cc.sgu.ru/redmine применяющейся в Вычислительном Центре СГУ cc.sgu.ru.
Redmine написан на Ruby on Rails и на данный момент считается лучшим Open Source Багтрекером/Системой управления проектами.
Сделать SFD проектом в ВЦшной системе управления проектами(а не например поднимать отдельный инстанс того же Redmine) было решено чтобы:
  • облагородить ВЦшный редмайн для людей со стороны (SFD стал «лучом света в темном царстве» на данный момент единственным общедоступным/Open Source проектом ВЦ)
  • привлечь внимание потенциальных новых кадров к ВЦ
  • подчеркнуть принадлежность ВЦ к организации данного мероприятия


Вследствие этого организаторы столкнулись c рядом проблем:
  • Redmine из коробки не поддерживает различные стили для разных проектов
  • в Redmine есть много полей которые не нужны рядовому докладчику при добавлении заявки на участие(статус, приоритет, назначена и т.д.)
  • Redmine не поддерживает использование javascript в темах (фактически тема — это одна CSS)


Эти проблемы были решены разработкой плагина к Redmine (никакого изменения исходников Redmine)
В дальнейшем планируется его отрефакторить (разделить на отдельные плагины по функциям) и выложить в opensource. Приведу тут только некоторые куски кода:

Добавление CSS, убирающую ненужные поля для неучасников проекта, и добавление JS:

  1. def view_layouts_base_html_head(context = { })
  2.   ret=''
  3.   project = context[:project]
  4.   baseurl = url_for(:controller => 'wiki', :action => 'index', :id => project) + '/../../..'
  5.   if not project.nil?
  6.     if not User.current.member_of?(project)
  7.       if File.exists?("#{RAILS_ROOT}/public/themes/#{project.identifier}/stylesheets/non_member.css")
  8.         ret+= stylesheet_link_tag(baseurl + "/themes/#{project.identifier}/stylesheets/non_member.css")
  9.       end
  10.     end
  11.     if File.exists?("#{RAILS_ROOT}/public/themes/#{project.identifier}/js/project.js")
  12.       ret+=javascript_include_tag(baseurl + "/themes/#{project.identifier}/js/project.js")
  13.     end
  14.  
  15.   end
  16.   return ret
  17. end


Подмена функций самого redmine из плагина (per-project themes):

  1. require_dependency 'redmine/themes'
  2.  
  3. module CSSPatch
  4.   def self.included(base) # :nodoc:
  5.     base.send(:include, InstanceMethods)
  6.  
  7.     base.class_eval do
  8.       alias_method_chain :path_to_stylesheet, :perproject
  9.     end
  10.   end
  11.  
  12.   module InstanceMethods
  13.     # Adds a rates tab to the user administration page
  14.     def path_to_stylesheet_with_perproject(source)
  15.  
  16.       th = String.new(Setting.ui_theme)
  17.       if not @project.nil?
  18.         projecttheme = "#{RAILS_ROOT}/public/themes/#{@project.identifier}"
  19.         if File.exists?(projecttheme)
  20.           th = @project.identifier
  21.         end
  22.       end
  23.       @current_theme ||= Redmine::Themes.theme(th)
  24.       stylesheet_path((@current_theme && @current_theme.stylesheets.include?(source)) ?
  25.         "/themes/#{@current_theme.dir}/stylesheets/#{source}" : source)
  26.  
  27.     end
  28.  
  29.   end
  30. end
  31.  
  32.  
  33. ApplicationHelper.send(:include, CSSPatch)

Драйвера для сенсорного экрана Электронного киоска


Для популяризации открытого ПО, осуществления возможности прямого взаимодействия посетителей с этим ПО а так же для наглядной рекламы мероприятия в СГУ было решено использовать электронный киоск оставшийся у ВЦ после реализации проекта информатизации муниципальных учреждений Саратова.
image

И конечно на киоске должно было стоять свободное ПО.
Но как оказалось железная начинка киоска была не очень-то свободна…
под сенсорный экран GeneralTouch были очень старые проприетарные драйвера под графику Xfree86 не совместимые с современными Xorg и был еще дикий велосипед от какого-то энтузиаста linuxportal.ru/forums/index.php/m/81607/#msg_81607 (там какая-то служба как-то там маскировала этот сенсорный под какой то другой к которому тоже дрова старые и сторонние), который к тому же так и не заработал…
Мы решили а почему бы не попробовать самим написать нормальные дрова? Тем более что в состав Xorg входят драйвера для сенсорных экранов Elotouch тоже к COM порту подключаемых как наш GeneralTouch и кроме того от того «велосипедиста» нам достался протокол по которому работает GeneralTouch.
Открыли исходники xorg-x11-drv-elographics, смотрим а формат то основного Touch пакета в точности совпадает!(формата других пакетов GeneralTouch у нас нет)…
Убрали инициализацию и другие не нужные куски, скомпили… Заработало!
В последствии наш патч был принят в апcтрим

Вывод… не бойтесь программировать… беритесь за практически полезные и интересные задачи…
Перед написанием дров посмотрев на исходники xorg-x11-drv-elographics даже некоторые бывшие олимпиадники из ЦОПа(Центр Олимпиадной Подготовки СГУ) говорили:
"Почитал код драйвера и мне стало страшно :(
Думаю будет разумнее попытаться найти готовые дрова - низкоуровневое программирование это слишком тяжко на мой взгляд."


PS. Как уже написали в топике в этом году Saratov SFD 2010 тоже проводит Саратовский Государственный Университет. Как говорится welcome!
Tags:
Hubs:
+9
Comments 1
Comments Comments 1

Articles