我已经为开源iOS社区做出了大约一年的贡献,并参与了诸如MessageKit , Moya , SwifterSwift和IBAnimatable 。 这些项目无疑使我成为了一个更好的iOS开发人员,但是影响最大的项目是Moya,即Moya管理社区的方式。 如果您要构建一个相当大,持久且广泛使用的开源项目,则将需要一些额外的帮助。 与维护实际的代码库相比,通过维护示例文档,管理文档以及响应GitHub问题而积累的工作量可能更耗时。 对于成熟的项目尤其如此,因为代码库的更改频率较低。 我想讨论一下我从Moya中学到的教训,以便围绕一个项目建立一个大型社区,以维护该项目。 有同情心 对开源做出的贡献可能会令人恐惧-特别是对于初次贡献者。 人们常常不愿做出贡献,因为害怕受到批评或看上去无所事事。 不言而喻,您绝不应轻视任何贡献或尝试作出贡献。 您的项目应采用的首批文件之一是行为准则。 Moya遵守《贡献者公约》的行为守则。 如果潜在的贡献者正在努力做出贡献,请采取一切必要的措施来帮助他们完成任务,无论是指导他们完成拉取请求过程还是编写补丁的后备单元测试。 重要的是,每个项目都必须有一份有助于指导的文档,该文档讨论项目的开发过程及其对贡献者的期望。 这样可以确保新的贡献者感到舒适,并使贡献尽可能容易。 您应该总是感到受宠若惊,以至于有人足够关心以帮助您改进项目。 您永远不会知道,将来,该贡献者可能最终为您的项目做出一些最重要的贡献。 提供主人翁意识 绝大多数开放源代码项目都由捐赠时间提供支持。 重要的是,人们在帮助构建的东西上要有主人翁感。 我了解到有几种方法可以做到这一点: 将您的项目托管在组织中。 如果您的项目开始越来越引起社区其他成员的认可,则应高度考虑将所有权移交给组织。 这使您可以在项目周围形成社区,并让其成员在其GitHub个人资料上显示组织徽章。 在第一个合并的合并请求之后邀请用户加入您的项目。 莫亚(Moya)采取了这项政策,并取得了奇迹。 目前,该组织有126个成员,所有成员都对该项目具有写权限。 听起来很疯狂,但是我们锁定了master分支,要求通过状态检查和代码审查。 还没有一个问题。 Moya甚至还开发了一种名为Aeryn的工具来自动执行邀请过程。 您可以在此处查看采用Aeryn的其他组织的列表。 不要使用您自己的名称采用项目前缀。 建立成功的项目是团队的努力。 您应该避免使用引用您自己的名称的项目前缀或采用任何其他种类的个人品牌。 它暗示您是该项目的唯一所有者,并减少了其他贡献者的价值。 就个人而言,我不会使用此命名约定来涉及项目。 通过表彰杰出贡献者为核心团队来奖励他们。 所有贡献者都是宝贵的,但是不认识那些特别致力于维护项目和长期健康的人是错误的。 这可以像在GitHub组织内创建核心团队一样简单,也可以通过在正式文档中收集贡献者的姓名来实现。 尽管每个项目都有不同的要求,但您可以参考Moya如何确定核心团队成员及其职责。 分配责任 根据Ash Furrow的说法:…开源维护者应尽早分配其权力和职责。 因为事实是,最终您将准备好进行下一个项目。 作为维护者的目标实际上应该是创建一个对您的兴趣超过其兴趣的项目。 作为一个控制狂,这对我来说很难。 但是,在开发MessageKit时,我真正地了解了这一点的重要性。 最近,我因积极从事该项目而精疲力尽,以至于我停止了将近一个月的捐助。 在我缺席之前,我已经将制作新版本的权力分配给了前两名贡献者,然后返回发现他们已经修复了多个错误,提供了新功能,甚至发布了重要版本。 视力 […]
我将向您介绍一个故事,我的团队如何在短短2个月内启动iOS和Android应用的票务服务,如何轻松完成从Waterfall到Agile的过渡。 首先,我将描述项目的起点,软件开发流程之前的工作方式,并将重点介绍有助于我们取得成功的关键活动。 本文无意取代Jeff Sutherland的《敏捷宣言》或《 The Scrum》。 相反,我将告诉您,我们如何改变工作流程以更快地交付产品,而无需雇用大量敏捷教练和Scrum大师。 对于想开始自己的家庭项目的人们来说,本文也将是有用的。 我将向您展示在特定时间值得关注的重点,而不是重点。 所以,让我们开始🙂 这一切始于大约5年前。 我刚刚加入了一家俄罗斯的大型媒体公司,该公司有很多不同的产品:很少的在线报纸,娱乐服务,体育门户等。此外,我还向您介绍了这项票务服务。 该服务的主要功能是销售在线电影院,剧院,体育赛事的电子机票,使用户无需预定现金平台即可预订最佳座位。 幸运的是,我们已经在运行桌面和移动网站。 服务非常成功。 与往常一样,有一些限制。 不想打扰您的数字,只会说移动网站的表现不如预期。 这样做的主要原因是: 过时的UI设计 可用性问题 无法查看座位图 当然,可以解决第一个和第二个问题,但要提供功能齐全的座位图并进行离线票务存储肯定需要使用移动应用程序。 您应该在这里询问用户如何在不查看移动网站上座位图的情况下购买机票。 这是一个很好的问题。 后端团队的同事开发了一种算法,该算法会自动选择尽可能靠近中心的座位。 有时效果很好,有时效果不佳,有时客户想在最后一个“亲吻”行预订座位,而无法这样做。 但是,将应用程序与网站进行比较的好处是另一篇文章的绝妙主意,因此,在此我要说的是,我们很确定需要启动该应用程序。 除网站外,我们还有一个用于合作伙伴网站的XML API,可让他们获取地点,事件和时间表的列表,并能够在弹出窗口中购买门票。 现在您应该了解我们项目的起点。 如上所述,我们在工作中广泛使用了Waterfall方法。 我们将iOS,Android,设计,质量检查,后端团队和项目经理大军分开了。 因此,当我的项目经理首次与我联系这个令人兴奋的新项目时,我很高兴从头开始在这家公司开始我的第一个产品。 但是初次见面后,我所有的幸福都消失了。 发生了什么? 这次会议的主要目的是根据我们只有很少的UI设计来估计发布日期。 我们发现 用户界面设计不完整,缺少很多屏幕 我们获得的用户界面非常复杂,具有许多复杂的手势和动画,用户难以理解和使用,并且难以实施 技术要求甚至还没有接近完成 后端团队在接下来的几个月里很忙 这就是为什么我们发现我们无法进行估算来为此项目保留移动开发人员的资源。 老实说,我们实际上无法预测发布日期。 当然,我们可以说大约需要6个月的时间。 但是,如果您对如此庞大的应用程序的整体数量和复杂性一无所知,那么您的估计将非常不准确。 对于瀑布队来说,这是很平常的情况。 为了解决这个问题,我建议首先使用我们自己的UI设计并在第一个版本中启动少量重要功能,然后再发布最低价值产品(MVP),其余所有功能都留给我们应用的下一版本。 这个想法看起来很新鲜和令人兴奋,我们决定尝试一下。 技术要求和我们提供的UI设计屏幕中有很多功能。 我们清楚地了解到,我们无法开发出能够保持最高质量的产品。 敏捷来了! 我们写下了所有功能的列表,并问自己:“哪个功能最重要? 如果没有我们的应用程序的哪些功能,将无法使用?” 以下是为我们的产品定义的关键功能的列表: 电影院名单 […]
第一次使用Medium。 我新年的决议仍在进行中! 😄 今天的帖子是有关Timeplaces第二版的,我的个人应用程序可在App Store上找到。 什么事啊 让我们看一下App Store的内容: Timeplaces是一个简单的时间跟踪应用程序,专注于记录,显示和分析您执行项目的时间。 可视化并改善您在哪里花费的宝贵时间。 作为读者,您可能会问:“如果您已经有了第一个版本,为什么要花这么长时间? Well”好吧,让我们回到一年前这个项目是如何开始的。 在我上一份工作期间,我们被要求每周提交一份报告,描述在每个项目上花费的时间。 但是,可用的跟踪工具无法实现我对自动化跟踪的愿景😅。 手动启动/停止项目,到处都有弹出窗口,嗯……作为一名开发人员,我开始变得富于创意,并开始思考替代方案。 第一个问题:我该如何追踪工作时间以做某事? 一个独立的笔记本电脑应用程序可能对我没有帮助。 在很多情况下,您仍可以在不激活笔记本电脑的情况下工作,可以在不重新启动应用程序的情况下重新启动计算机,也可以只在另一台计算机上工作。 为什么不使用移动应用程序? 那里一定有一百万! 我开始关注一些基本要求的市场: (1)免费 (2)基于位置开始/停止项目 (3)电池没电 (4)导出CSV数据 (5)分析概述 有一些众所周知且非常好的应用程序可以完成工作,但是为什么不自己做呢? dirty弄脏自己的双手并从头开始做某事始终是一个很好的借口💯。 2个月后,Timeplaces的第一个版本发布了! 它涵盖了上面提到的所有用例,但是有点太适合我当时的目的:我的每周报告。 休息一会之后,我想重新开始对自己的东西进行编码,为什么不使Timeplaces更加简单/直观,以便其他人也可以使用它呢? 我不再需要提交每周报告,但是我无法追踪在办公室,去健身房或在家中活动所花费的时间(出于好奇)。 我对专注于某件事的时间有些痴迷,我也必须努力解决这个问题。 是时候改变几件事了,让我们着手开发第二版应用程序。 我有以下想法: *我只想了解该项目,不需要花哨的描述或特殊字段。 *区分项目的直观方式。 *具有不同日期范围过滤器的简单分析视图。 *一个可轻松启动/停止项目的小部件(在午餐时间,我发现它很有用!🍕)。 结果,这就是我组织应用程序的方式: (1)项目清单 (1.1)创建新项目 (1.2)访问现有项目 (2)分析 (3)设定 从项目列表中,您可以检查现有项目,创建新项目或访问它们。 在创建新项目时,您将需要一个名称,一个可以轻松区分它们的主题以及一个用于自动跟踪的可选位置。 请注意, 始终需要访问位置权限才能使其正常运行。 别担心,它不会耗尽您的电池电量,我正在使用CoreLocation的区域检测功能,该功能经过了非常优化,可以使用尽可能少的GPS传感器。 您还可以通过在初始列表中点击一个项目来手动启动/停止项目。 等待! 更好的是,只需转到小部件并从那里开始您的项目,您甚至不需要解锁手机! 💪 分析为您提供了有关花费时间的概述,这是应用程序的主要目的。 […]
我现在有什么 工作API 我在Ionic上构建的应用示例 我需要的每个页面的屏幕 我可以使用高级设计模板来创建某种设计。 项目管理计划(您已阅读。) 我有测试数据 可以使用Loopback API(IBM)帮助完成注册 您可以看到–之前已经解决了很多问题。 我们需要解决这个问题 我们将如何创建,提交和托管应用程序? 我们将如何处理订阅(付款)? 确定我们需要博客功能吗? 增加送餐会很酷,但是Instacart没有回复他们的营销电子邮件🙁 我们必须具有针对不同美食,过敏(其他类型)的过滤器。 我们如何使用应用程序UI使其变得简单? 我当时正在考虑为用户提供一种创建和发布自己的食谱的能力。 很酷的功能,对吧? 我们可以添加分析并了解用户如何喜欢或使用我们的食谱吗? 我们如何处理应用程序内部的支持内容? 在接下来的版本中,我们必须将杂货店管理添加到类别中。 也许添加厨房管理 我想添加一个预算计划者。 重要并且将是一个好功能吗? 0)自由食谱 1)每周菜单 1.2)杂货清单 2)认证 3)付款 4)搜索 5)导入配方 6)完善的膳食计划程序软件 自由食谱版本 食谱清单(每周菜单模拟) 带有图片的应用简介(显示内容完成,测试其工作方式,完成js,因此应用简介仅打开一次)。 挑选的图像。 控制器已添加。 内容已选取。 没有按钮的杂货清单-长清单 复杂配方 将样式移到适当的位置 添加材料设计版本以获取免费菜单版本 将JSON中的步骤更改为路线 每周餐(alpha) 膳食计划类型(无过敏,无麸质,两人做饭,有孩子的家庭(主要选择)) 样本菜单(不同类型) 复杂配方 复杂的JSON解析 主JSON文件中的杂货清单 杂货清单模板2 –长滚动列表,所有类别都在一页中(过滤器/搜索将很酷) 杂货清单设置和食谱日历 主JSON文件中的每周菜单 图片介绍 […]