昨天产品发了新的交互说明书,其中主要增加了运动过程中“配速” 信息的记录和展示。大部分人可能对“配速”一词不是很熟悉,百度百科上是这样的:
也就是说,配速表示的是每公里用时。在新的交互中,需要在一个列表中顺序展示某一次跑步过程中每公里的配速。这一信息在之前的运动轨迹文件(GPX文件)中是没有保存的,也没有其他地方有关于配速的展示。在用户运动时,我们已经可以记录采集到的每个GPS点当时的经纬度、速度、距离和GPS时间。这些信息为了能够在安卓客户端与iOS客户端向服务器进行数据同步时保持一致,使用了一同定义的GPX格式,大致像这样:
其中的type表示的是骑行模式,是跑步还是骑行。对于如何在运动过程中获取配速信息我们没有异议,比较相邻轨迹点的向下取整和向上取整就可以得到运动距离达到整数公里的轨迹点。但是对于如何保存在GPX文件中,我们有了不同的想法。对于公共使用的数据文件的制定,可以参照公共数据库格式的要求:
1、在满足需求的条件下尽量减少对公共数据文件的格式更改;
2、在兼容新旧数据文件的同时,尽量少的产生冗余数据。
对此,安卓组的同事建议在trkpt 节点下增加<duration>0</duration> 节点,这个节点存储该轨迹点距离第一个轨迹点的秒数,最终像是这样:
<trkpt lat="31.828234815111482" lon="117.18830751582587"><ele>49.6828332826443</ele><dis>0.008209216</dis><sp>7.497872</sp><time>2016-02-24 14:12:49</time><type>0</type><duration>42</duration></trkpt>
这样做的依据是GPX文件存储的都是比较原始的信息,而且有这些信息后,客户端可以根据这些点方便的得到每公里的配速表。但是这样需要所有的点都记录 duration,就需求来说会产生很多的无用数据。因此我的意见是在轨迹点的数据区之前,单独开辟出存储配速表的信息,就像这样:
<?xml version="1.0" encoding="UTF-8"?> <gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.2" creator="Cycling"> <trk> <name>1918_0_track</name> <paceseg> <pace value=“320” ><pace> <pace value=“345” ><pace> <pace value=“325” ><pace> </paceseg> <trkseg> <trkpt lat="31.828524" lon="117.189110"> <dis>0.018462</dis> <sp>7.008073</sp> <ele>73.000000</ele> <time>2015-11-12T13:37:40Z</time> <type>0</type> </trkpt>
这样定义的优点是可以在处理GPX文件时直接读取出配速表,不用处理所有的轨迹点。但是缺点也比较明显,就是扩充了单独的数据区,同时还是存在一定程度上的数据冗余。在讨论了一番后,我们最终确定第二种方式更好一些。
但是,没错,就是但是,就在这时,我突然想到了百度百科上关于配速的定义,就是文章开头的东西。配速,是跑步时每公里的所花的时间。这个时间好像有问题,因为我们的运动模式——骑行和跑步,在暂停时都是不计入时间的,就是说当速度低于某个阈值时,我们的计时是停止的。这也是为什么我们要计算配速并存储到GPX文件中,而不是使用GPX文件中轨迹点的GPS时间的直接原因。但是,配速的时间是怎样计算的呢?是应当将暂停时间考虑在内,还是按照骑行时的时间一样不计算在内呢。按照百度百科的定义,恐怕应该按照前者。
于是,本文回到了标题所说的产品需求的理解在开发过程中的重要性。我们在与产品的同事确认配速的定时,证实了配速计算应该是从运动开始起,不论运动速度为何,如果结束都应计入时间。举个极端的例子,如果我开始跑步,但是跑的很慢,花了15分钟跑了500m,睡了半小时,再花了15分钟跑了500m,那么我第一公里的配速就是60分钟。以这种情况来考虑,那么我们之前讨论的关于GPX文件的扩展都是无用的!因为现有的数据已经包含了完整的信息,根据轨迹点的GPS时间我们就可以得到每公里配速表。
所以,总结来说,由于我们开发对配速这一概念的理解并不很深刻,没有意识到与之前骑行时间记录时的不同(一定程度上也因为是产品需求说明不够详细),使我们花费了一番功夫在一个本来没有必要讨论的技术问题上。这样的问题我想很多开发者都遇到过,因此,在我们拿到新的需求时,在想当然的理解之前,不妨对于自己比较陌生的领域知识和产品人员做深入的沟通,加深对细节的理解,也好发现需求输入时产品人员没有考虑到的问题。
转载请注明出处 http://grayheart.iteye.com 。
相关推荐
总结来说,该文档强调了对方法论的理解和应用对于程序员的重要性,提倡一种全面考虑问题本质和目的的学习方式,同时提醒读者注意在技术决策中不应忽视市场需求和整体规划。通过持续实践和学习,可以逐步提升在决策和...
这体现了教师在教学中融入了市场实际情况,让学生认识到创新的重要性。 8. 机器学习与深度学习的应用:文档中虽然没有直接提到机器学习和深度学习,但是机器人产品的改进往往涉及这些技术的应用。在未来的产品改进...
在组织模式中,作者强调了涉众管理和协作的重要性,指出有效的沟通是需求获取和理解的关键。信息模式探讨了如何根据受众的不同,定制需求表达方式,确保信息的准确传达。过程模式则探讨了需求分析过程的管理,包括...
### 经济金融不确定性的思考——全球金融危机的学理性反思 #### 一、引言 在探讨经济金融不确定性之前,我们需要回顾2008年全球金融危机。这场危机不仅揭示了金融市场脆弱的一面,还暴露了经济学家们对于风险评估...
标题中提到的《教学能力大赛促进信息化技术在专业的应用——以高职《python嵌入式编程技术》课程为例》表明本文聚焦于如何在高职教育中,通过参与教学能力大赛,促进信息化技术在专业课程,特别是在《python嵌入式...
《看得见的智能——人工智能在影视产业链中的应用和反思》 随着科技的飞速发展,人工智能(Artificial Intelligence,简称AI)已经渗透到我们生活的各个领域,其中就包括了影视产业。影视产业链条复杂,从创作、...
另外,徐书晗在反思中提出了比赛中的一个关键要素——“软实力”,即参赛者的素质和综合能力。软实力包括了平时的技术训练、应对突发状况的随机应变能力以及比赛时的策略制定。徐书晗认为,机器人足球比赛的胜利不单...
《翻转课堂在初中信息技术教学中的应用研究——以《图层和图层样式》教学为例》 在当今信息化教育背景下,传统的教学模式正逐渐被新型的教学理念所取代,其中翻转课堂作为一种有效的教学策略,已经逐步渗透到各个...
本章节深入探讨了“反思中的群体动力”,强调了在教师专业成长过程中,团队合作与相互学习的重要性。通过集体反思,教师们可以共同分析问题、分享经验,从而提高解决问题的能力和效率。群体动力不仅能够激发个体的...
这份"java软件开发——顶岗实习周记25篇.pdf"文档,很可能是某个学生或初入职场的开发者在Java实习期间所记录的工作与学习心得,提供了宝贵的实战经验与反思。 首先,Java作为全球最流行的编程语言之一,其语法严谨...
在敏捷开发中,需求优先级排序是一项重要的活动,它确保团队始终关注最重要的工作。在迭代期间,通常会尽量避免大的变更,以保持团队的工作节奏。此外,团队承诺是指团队对其工作量的承诺,这是基于团队的实际能力来...
信息技术在当今的小学数学教学中扮演着至关重要的角色,它为教师提供了丰富的教学资源和手段,使得抽象的数学概念变得更加直观、生动。然而,如同任何工具一样,信息技术的有效运用需要教师精心设计和恰当把握,避免...
值得注意的是,STEM教育理念在AI双师课堂中的应用也是一个重要方向。通过将AI技术与STEM课程相结合,可以更好地培养学生的编程技能、创造性思维以及问题解决能力。在AI双师课堂中,学生可以设计出各种编程任务,并在...
3. **关键技术与实践难点**:在这一部分,你需要详细说明在研究过程中遇到的关键技术问题以及如何克服这些难点。这不仅展示了你的解决问题的能力,也使听众明白研究的创新之处和实际操作中的复杂性。 4. **研究成果...
标题中的“网络爆款”的“推销”路径——“小程序”引发大讨论,暗示了本文将深入探讨小程序在现代网络营销中的重要作用以及其如何成为网络爆款产品的重要推手。在当今数字化时代,小程序作为轻量级的应用形式,以其...
5. **教学反思**:在教学过程中,教师注意到一些学生在表达时未能抓住要点,谈话缺乏条理,表现出较大的随意性。同时,有些学生过于关注自我表现,忽视了倾听他人的能力,导致评价他人时缺乏说服力。这些都是教师在...
《图书管理系统——课程设计》是一份综合性的学习项目,旨在帮助学生掌握软件工程中的系统设计与实现技巧。在这个课程设计中,学生们将面临一个实际的业务场景,即创建一个能够有效管理和操作图书信息的系统。这个...
然而,正如汽车行业的丰田和消费电子行业的戴尔所进行的精益生产转型一样,软件开发领域正在经历一场从僵化的、过程驱动的方式向更加灵活、以业务价值为导向的方法转变——这就是敏捷开发。 #### 敏捷开发概述 ...
角色游戏是一种富有创造性和想象力的活动,尤其对幼儿园大班的孩子来说,它是一种重要的学习方式。在"角色游戏——串串烧"这个活动中,孩子们通过模拟真实生活中的场景,如串串烧店、肯德基、儿童剧场、幼儿园和公共...