GSoC:开源活动管理器目标与活动

2014年8月6日 | cbruckmayer | 无许可

在今年谷歌夏季代码项目(GSoC)的过去4个月里,这是一个为开源软件项目编写代码的大学生开发者提供津贴的全球项目,克里斯蒂安·布鲁克迈尔与其他学生和导师合作,为开源活动管理器(OSEM)编写了一个仪表板。在这个系列的文章中,克里斯蒂安将向你讲述他的项目以及他从这段经历中学到的东西。

Google Summer of Code 2014 Logo

克里斯蒂安·布鲁克迈尔大家好,我是克里斯蒂安,再次回来。这是我关于我的GSoC项目的三个系列文章的第二篇,上周我在我的文章OSEM:会议仪表板中解释了仪表板。如果你还没有阅读,你应该去阅读一下!本周我想告诉你另一个我在这个夏天实施的功能:会议目标与活动。

设定会议期望

在仪表板上工作时,越来越明显的是会议组织者对注册、论文提交和计划有期望。例如

  • 我需要超过50人参加才能使会议成功。

  • 我需要在下个月至少收到一百份提交,才能制定一个合理的日程安排。

  • 最终,我的日程安排有21小时的节目时间。

目标

我们提出了将这些期望表达为目标的想法,以便将它们与实际数据进行比较。我相信目标非常重要,无论是在商业还是私生活中,都能激励你,前进并衡量你的成功!我已经大学里学到设定目标不是一个容易的过程,并且我们学习了不同的方法。我们希望使这个过程尽可能简单,所以我们决定使用众所周知的SMART标准来帮助会议组织者。这些标准指出目标应该是

  • 具体的:目标应该清晰明确

  • 可衡量的:目标应该可追踪

  • 可实现的:目标是现实且可管理的

  • 相关的:目标应该对你的会议很重要

  • 有时限的:目标应该在特定时间内实现

为了满足这些标准,我们决定使用以下属性来实现目标模型

  1. 截止日期

  2. 目标数量

  3. 单位

现在目标是具体的(10(目标数量)注册(单位))并且可衡量的(我们可以将目标与当前的注册、提交和计划小时数进行比较)。此外,我们相信注册、提交和计划小时数这些单位对每个会议都非常重要且相关。最后但并非最不重要的是有时限的(截止日期)。会议组织者现在只需要设定现实和可实现的目标!

为了获得目标的当前进度,我简单地实现了以下方法

def get_progress
  numerator = 0
  if unit == Goal.units[:submissions]
    numerator = conference.events.where('created_at < ?', due_date).count
  elsif unit == Goal.units[:registrations]
    numerator = conference.registrations.where('created_at < ?', due_date).count
  elsif unit == Goal.units[:program_minutes]
    numerator = conference.current_program_hours
  end
  (numerator / goal_count.to_f  * 100).round(0).to_s
end

根据单位,我查询当前数量,并将其除以目标数量。就完成了!

活动

我们提出的另一个想法是营销活动。这对组织者来说是一个非常有用的功能,因为现在他们不仅知道有多少,还知道注册和提案提交来自哪里。为此,我们大量使用了Ahoy,这是一个Ruby on Rails扩展,它提供了一个坚实的基础来跟踪访问和事件。使用Ahoy,我们现在可以这样跟踪注册

def register
  ...
  ahoy.track 'Registered', title: 'New registration'
  ...
end

现在我们知道注册是来自我们的博客文章还是推文!这太棒了,不是吗?

OSEM Campaigns List

此外,你可以将营销活动与特定目标结合起来。如果组织者想通过推文产生20个注册,他可以生成一个“20个注册”目标,然后将其附加到活动。现在他可以轻松监控目标的成功情况。

为了实现这一点,我必须实现以下方法

def get_campaign
  numerator = 0
  if unit == Goal.units[:submissions]
    numerator = campaign.submissions_count
  elsif unit == Goal.units[:registrations]
    numerator = campaign.registrations_count
  elsif unit == Goal.units[:program_minutes]
    numerator = campaign.current_program_hours
  end

  progress = (numerator / goal_count.to_f  * 100).round(0).to_s
  result = {
    'goal_name' => to_s,
    'campaign_name' => campaign.name,
    'value' => numerator,
    'unit' => unit,
    'created_at' => created_at,
    'progress' => progress,
    'days_left' => days_left,
  }
  result
end

最终,我们计算一个包含所有相关数据的哈希值,并在我们的仪表板上显示它

campaigns_targets

这就是开源活动管理器的目标与活动功能的全部内容。我希望你再次喜欢我的总结,下周我会少谈技术,告诉你GSoC教会了我什么。到那时!

不要忘记查看我在此系列中的其他文章

分享此帖子