python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project
世界上99%的需求都已经有人想到了,但只有多想一步,才能转化为产品。
在国外,人们将各种业余时间打造的产品或项目称为“side project”。这些side project的灵感都来自于生活,一开始均为兴趣使然,有的逐渐走向商业,有的归于平静,但每个创造者都能从中获得快乐与满足。
作为互联网/IT从业者,会有更多机会接触新鲜事物,相信大家一定会有很多奇思妙想。这篇文章,就是关于一个side project-Writeathon从0到1的过程,同时,也会分享遇到的各种技术坑和产品开发经验,希望能够给各位参考,实现自己的side project。
产品构想,从0到1
Side project的初始需求,往往来源于自己或身边人。年初的时候,我计划写一个关于几年前到新西兰进行Working Holiday的系列文章。从最基本的word,到最专业的scivener,还有获得无数好评的ullyses,和后起之秀bear,typroa,byword等等,从上手难度,写作体验,使用便捷性,专业性等综合考虑,均难以让我趁手。
于是,作为一个技术出身的产品,对写作工具/平台做了一番研究。
世界上99%的需求都已经有人想到了,但只有多想一步,才能转化为产品。
上文提到的产品,均可以归为专业写作工具,核心是辅助写作者组织、输出内容。除此之外,还有写作社区,像国外的medium,国内的简书(这里不得不插一句,简书从一开始的高质量内容社区,到如今充斥着各类鸡汤营销软文,非常可惜),让作者分享、交流有深度的内容。
还有就是最近兴起的AI写作工具,通过AI对文章进行分析,以及相关素材的收集,甚至根据给定的主题和关键字自动创作内容。
最后,是比较少接触到的,我称之为创意写作工具,虽然也属于写作工具,但核心不在于写作,而在于写作灵感激发,例如:http://dailypage.co,http://twords.2lch.com,http://blankpage.io等。这些工具的写作功能往往比较简单甚至简陋,但专注于提供一系列激发灵感的服务,例如写作话题推送,写作进度分析等等。
回到最开始的需求,我是想找一个各方面达到平衡的产品。一个side project最开始只要满足自己或者最小的需求就足够了,而这样的需求究竟是大众的痛点还是痒点,则可以通过MVP方法交由用户和市场去验证。
MVP(Minimum Viable Product),最小可用产品,从产品的核心功能开始构建产品。
那么,如何从这些信息和需求中构思一个产品?
首先要确定的是产品定位,它决定了要做什么。对于专业写作工具,我认为现有的产品已经足够多且优秀,暂时没有更好的切入点。而写作社区,则对后期的运营能力有极高的要求。
AI写作是趋势,但有相当的技术门槛。创意写作工具目前比较缺少,是一个可行的切入点。所以初步的定位是融合了专业与创意写作工具的特点,一款能满足基本写作需求的,能够激发作者灵感与创作热情的产品。
同时,微信、微博、短视频等各种应用造成的碎片化时间,让人很难静下心去做一件事,这款产品的理念也是希望提供纯粹的写作体验,让人专注于写作。
writeathon的名称,来源于编程马拉松(hackathon),也寓意着写作就像马拉松。
然后,则是要考虑资源,它决定了能做什么。大部分side project开始往往都只有一个人,而且只能利用业余时间。这就决定了必须要从最核心的部分开始,对于writeathon来讲,作为一款写作工具的核心则是编辑器。所以现阶段,主要精力都应该放在如何实现一个简单而高效的编辑器上。
明确了定位和资源,剩下就是怎么做,也就是产品计划。对于大部分side project来说,一个完整而长远的计划并不是必须的,只要明确了核心诉求,其它部分都可以灵活安排。但出于产品的职业习惯,还是为writeathon安排了一个分3步走的计划:
- 实现一个简单、高效的编辑器,并提供基本的写作统计功能,让人能专注于写作;
- 提功写作灵感激发功能,激发创作热情,让人爱上写作;
- 通过AI等技术,提高写作效率与质量,让人写得更好。
产品技术选型,稳定与可扩展
除非你的side project涉及到前沿领域,否则应该选择稳定可扩展的技术框架,稳定是指产品的迭代无需过多考虑其变化,而可扩展是指相关的生态圈能够支持产品的扩展。
是产品为技术服务,还是反之,取决于产品的定位和用户的需求,以及产品的发展阶段。
writeathon首先满足的是自己的需求,对于中长篇的写作我还是习惯在传统电脑上完成,同时考虑到通用性,所以优先以web的方式展现。
在三大前端库react、vue和angular中,我选择了vue,其生态社区非常活跃,而且相关的文档也很完善,同时配合Nuxt实现SSR(这里其实对SSR没有强烈的需求,只是借side project作为试验)。
样式框架采用了bulma,与bootstrap相比,其column布局更为灵活,自定义也很方便。后端接口基于阿里团队推出的eggjs,虽然阿里的开源产品经常无疾而终,甚至被称为KPI产物,但不得不说eggjs从目前的发展来看还是很稳健的,非常适合小团队的快速开发。数据库选择了mongodb,配合mongoosejs作为ODM。而基础服务部分,选用的是阿里云。
整体技术框架如下:
产品开发,快速迭代
我们经常提到产品的快速迭代,但快速迭代并不是只求速度,还要把握好质量和速度之间的平衡,多久迭代一次,每次迭代多少内容。
writeathon由两个项目构成:writeathon-web和writeathon-api,截止至写这篇文章,断断续续2个月,writeathon-web经历了70次的迭代,writeathon-api也有30次。
目前的产品版本为1.0.2,实现了以下功能:
在开发过程中,遇到了大大小小的难题,相信做过开发的同学都知道程序员的十大谎言之首:“我这里是正常的啊”,开发中遇到的问题只是开始,处理生产环境及用户环境产生的问题,才是最耗费精力的。
这里列举一部分爬过的坑:
- 编辑器的开发;
- 基于jwt的校验;
- passport库的浏览器兼容性问题;
- 目录层级及其呈现方式;
- NodeBB论坛系统的单点登录;
- zen模式的设计考量;
- 移动端适配;
- 夜间模式的样式设计;
- markdown语法提示;
- 通过Let’s Encrypt获取ssl证书及配置。
- ……
限于篇幅,这里先分享编辑器的开发,其它话题有机会再单独展开。
为了避免重复造轮子,编辑器是基于codemirror来打造的。Codemirror的功能十分强大,github上的很多编辑器项目,都有它的身影,其丰富程度足以打造一个线上的IDE。编辑器主要用到了codemirror的markdown语法模式,自定义主题,自定义插件等特性,与vue结合成了一个名为zeneditor的组件,后续会考虑将其开源。
在格式支持上,得益于codemirror,除了基本的markdown格式,还支持github推出的GFM(Github Flavored Markdown),GFM扩展了表格、图片和复选列表等特性。在预览功能上,使用了marked这个库,并通过hightlight-js进行语法高亮。
同时,为zeneditor设计了zen主题及配套的夜间主题zen-dark,其中夜间主题的背景及字体颜色是反复优化得出的。zen主题还提供了zen模式支持,在该模式下编辑器的高度会固定为半屏,同时非当前编辑的段落会弱化视觉效果,类似于其它开源编辑器中的打字机模式。
此外,还专门开发了markdown语法提示插件,通过输入‘@’快捷插入markdown语法。为了提高效率,zeneditor的主要功能如新建、切换夜间模式、zen模式、保存、导出等均设置了键盘快捷键。
当前版本zeneditor呈现的效果,就像一张白纸,让用户最大程度地专注于写作,后续会在细节如字体、颜色、格式支持、zen模式2.0等持续优化。
产品上线&推广,选择合适的渠道
很多side project开发完后,没有进行任何推广,权当自娱自乐当然没有任何问题,但其实可以做适当的宣传,一来与大家分享成果,二来可以倾听来自用户的反馈,作为下次迭代的参考。
Side project基本不会有任何的市场推广预算,但只要多花一点精力,一样可以取得不错的效果,一般来说可以考虑以下渠道:
- 产品社区;
- 产品目标用户群的社区;
- 相关技术社区;
- 自身的社交媒体圈。
writeathon选择了在producthunt(产品社区)、豆瓣小组( 产品目标用户群的社区)、v2ex(相关技术社区)和朋友公众号(自身的社交媒体圈)作为第一次推广尝试。
从结果来看,producthunt带来的效果是最多的,在上线的一周内获得了130多个赞,近千次的访问量。这个数据虽然算不上多高,但至少迈出了第一步。同时正由于其关注度很高,在上线前一定要做好充分的准备,不然会浪费曝光的机会。
豆瓣我选择了与写作相关的小组进行宣传,从效果来看关注量并不高,需要调整相关的用户社区宣传策略。
如果在产品目标用户群的社区推广并不理想,需要思考是否产品的定位出现了偏差,或者缺乏吸引目标用户的亮点。
v2ex虽然浏览量不少,但相关的讨论为0,在技术社区如果只是简单的宣传,而没有相应的干货,是很难产生互动的。
而朋友的公众号本身关注的人就不多,仅作为友情推广。
第一轮推广过后,应该根据各种渠道的关注度和用户的反馈,及时调整后续的推广策略,甚至产品的定位及迭代计划。
最后
一个side project,无论最终能否得到广泛的使用和任何,但把自己的想法从0到1实现,本身就是一个快乐而充实的过程,希望这篇文章能够给大家一点启发,谢谢。
本文由 @阿楚 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project相关推荐
- python tkinter 实现简易秒表计时器
import time import tkinterroot = tkinter.Tk() root.title('秒表计数器') root.geometry("400x200+300+20 ...
- python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例
Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...
- 用 python+tkinter+有道云API 写一个自用的背单词软件
目录 导语 程序功能 需要用的工具 需要安装的python包 程序代码 功能类函数Functions 键盘响应 窗体设置 Sql连接 Gui程序打包 结语 参考文献 导语 最近在学英语,新单词需要反复 ...
- python+ tkinter做的一个项目辅助测试工具
python+tkinter 写的一个项目测试工具 目的是能够自动按照模板向禅道系统 提交bug,自动打包日志并上传到禅道上 以及结合进 项目中一些其他的功能,提升测试效率 主要是记录下 tkinte ...
- python tkinter计算器实例_利用Tkinter(python3.6)实现一个简单计算器
前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起 ...
- python tkinter计算器实例_使用Python自带GUI tkinter编写一个期权价格计算器
0 准备工作 首先,确认环境中有numpy.scipy.stats和tkinter三个功能包.前两个功能包可用于Python的数学计算,比如使用numpy来生成随机数用于Monte Carlo模拟,以 ...
- Python Tkinter实现一个听书神器
Python Tkinter实现一个听书神器 前提条件 相关介绍 Tkinter 组件 实验环境 听书神器 实现步骤 代码实现 输出结果 前提条件 熟悉Python 熟悉Tkinter 熟悉Pytts ...
- python tkinter 计算器V1.0
文章目录 前言 一.最终成果物 二.代码详解 1.基本框架 1.1 主窗口整体布局 1.2 显示板 1.3 按钮 2.内部逻辑 2.1 数字处理 2.2 计算处理 2.3 等号处理 总结 前言 pyt ...
- 使用python+Tkinter做一个自动关机的图形界面
之前写了一个自动定时关机的软件,这次把它做成图形界面 https://blog.csdn.net/qq_33289175/article/details/87300783 凡是开发软件必须要走:原型- ...
- python实现一个秒表(可用于跑步比赛记录名次与时间)
TOC 欢迎学习用python实现一个秒表 对于各种田径比赛,我们都需要利用一种计时器来对参赛者进行计时,也就是秒表,按一次则可以记录一个时间,同时不会影响自开始到结束整个过程的时间. 第三方库:ti ...
最新文章
- C# 获取图片的EXIF 信息
- 10w 行级别数据的 Excel 导入优化记录
- python基础(四)集合
- java获取真实ip工具类
- Linux 配置IP地址,子网,网关,DNS,linux远程, wget 下载工具
- 使用结构、数组、循环和DataGridView写的分数统计小程序
- 扎克伯格凌晨放大招,说几句话能造世界的那种
- IE6环境下遭遇winow.location.href=''的跳转bug
- mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
- 突破Android微信微博浏览器限制直接拉起应
- linux字符设备驱动的 ioctl 幻数
- 业务功能中包含邮件发送,怎么测试?
- rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩
- 数据分级分类实施指南_运营商行业数据安全治理实践
- mysql set substring_MySQL substring()函数
- 分支语句复习 java 9018
- 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL
- Springboot项目结构浅析
- 交互式反汇编器专业版IDA Pro的一点介绍
- vue-cli+gitlab代码管理时,vue项目配置文件设置
热门文章
- 对于tnsping的连接超时的功能补充
- Struts和SpringMVC两种MVC框架比较
- js学习笔记1---使用方法
- 编译安装LAMP及分离式LAMP平台构建
- python运行完不能显示图_Python Pygame无法正确显示图像
- 3gpp协议_【5G学习笔记】3GPP 5G协议分类清单大全
- Map.keyset()
- 函数平移口诀_呆哥数学函数合集——函数的图形变换来啦【4】
- java juel表达式_activiti 自定义函数解析juel表达式
- python做数据分析的包_用Python做数据分析,Numpy,Pandas,matp