前言:终于,完成了Flagsgo的Demo版本。从诞生想法至今日,将近两个月有余,从而得出结论——自己的能力有太大的提升空间。
简书放不了视频演示地址,点我看Demo。或者直接进我个人博客——牧马东吴,不知归处。
想法之初
大致三个月前建了个微信群,拉着小景子与大飞侠每天打卡背单词,特地在公平自愿的原则下立了规矩——无论何种理由,只要有一天没有打卡便要认罚(红包&罚抄)。目前,自己已经发出三次共计70元的红包,罚抄1500+的words。随之而来的是,每天与这两位仁兄在毕业后也多了一份羁绊,另外便是词汇量多少还是有所增加。
与此同时,一种想要做个东西的想法又按不住的冒了头。其实,以前在学校做Android的时候也有过一些idea,出现过和图书相关的一个idea,还出现过和宠物社交相关的idea,貌似还有过一个记不清的idea。显而易见的是,以往的想法并没有付诸于coding。
当某个周末的洗澡过程中,脑海中一系列的化学反应之下,关于Flagsgo的idea就自己跑了出来。穿好衣服从卫生间跑出来,便赶紧跟汤姑娘阐述自己的所想,好似面对着自己的投资人一般……
畅想版本: Flagsgo,未来的它一定是能对用户做出正向的影响,而且本身具有一定的商业价值。Flagsgo通过备忘提醒这个核心嵌入点,加入好友互助提醒分赏金的游戏方式,可以同时兼有【工具】、【社交】和【金融】的因子。
行动之初
UI
在一张大纸上思维导图式的整理了下最初的想法,紧接着便计划把整个UI的草稿涂涂画画,在画初稿的过程中想到可以用Sketch做icon和logo等。但是,当自己上手的时候发现脑海的想法并不方便实现,而且我并不会制作icon和logo。
在网上找了几篇Sketch的教程,对软件本身的简单使用的确不成问题。然而,就像会用笔不代表写得了书法一般,没有设计的基础和积累,我的脑海是一片空白。直到最后转到使用墨刀,做了一两个界面之后又开始了边开发边考虑布局等等。
iOS实现
核心功能的精简
一开始想着要有社交,要有类似红包这样的游戏功能,另外便是最基本的提醒功能。尽管在做了一定了解之后发现做即时通信有现成的SDK可以使用,红包功能也可以想着用微信或者支付宝来曲线救国。实际开发时,却发现要在最初版本做到这些对于自己实在是太大的工作量,而且由于目前没有架构的能力,可以预见之后的版本一定是推倒前面重写……
最终,各种功能是砍了又砍(ps.最开始想着直接把金融这块功能做了,绝对是年少轻狂不懂事),最终便只剩下了如下的主要功能:
实际版本: 实际的开发中,发现自己一个人能力有限,而且有些事情现在没有办法实施。而且,当发现市场上竟然有类似自己畅想版本的App存在,在开发的原动力上多少有点打击。如此一来,便真的只是纯纯的锻炼自己。保留最最基本的工具功能,备忘提醒。加上诗词欣赏以及查看当地天气这两项功能。
最烦的是逻辑
Coding的过程是很难受的,因为不断发现想法很好实现很难,干脆不会。虽然,到最后这个Demo版本,基本没有任何有难度的功能,至少看起来单一的功能都的确是简单。可是,这里面也有不少知识点,特别是和业务逻辑结合在一起就更是如此。
- iOS不知道怎么实现闹钟功能,反正找不到直接调用系统闹钟的方法。最后就取巧,通过本地通知的形式做提醒。知识点1:多个通知的唯一标识不能相同,否则无法响应通知。
- 获取经纬度,地理编码转码。
- 【收藏】功能多处的联动。
- 数据本地存储,以及根据业务逻辑的增删。
- TextView自适应高度。
- TableView的类型选择,以及使用。
- ……
Python之数据&服务
很久以前想过做爬虫,认为会写爬虫的程序猿比较cool,也比较极客风。能这么说,肯定是以前被爬虫给唬住了,止步了。事实证明,毛爷爷说的太对了——XXX都是纸老虎。
Python学习
在同事那里借了一本Python的书,便开始了差不多一个多星期的Python之旅。过语法用了差不多两天的样子,两年前边看边敲了一遍《Learn Python the hard way》,可是再回顾语法的时候真的是没太多印象。这又证明了——如果一门技能或知识学了不用,时间久了,生疏可能是最好的结果。
过完语法之后的自己,又开始拿着书敲一个游戏的例子。刚开始还好,有股子冲劲,可人真的是有惰性的。而我更是好吃懒做,巴不得这本书我只看一眼就能很熟练的掌握,以致于在这个学习的过程中越敲代码越抗拒越吃力。
好在,最终拖拖拉拉的一个星期总算把游戏的例子敲完,剩下关于数据分析和web应用程序开发的能容则是看了好几遍。在这里,真的是庆幸自己毕业后来到的单位不是血汗工厂,而且所在的部门氛围特别舒服,自己得以在工作中还能继续学习。(可惜我这马屁了,老大看不到)
爬虫获取数据
回到正题,Python爬虫,网上有好多例子,可是不知道为啥子就是不想跟着敲那种爬百度百科的,爬淘宝MM的(不爬MM图片,这不应该呀……)。自己直接根据一个爬二手车信息的例子,写起了爬某个诗词网站的爬虫程序。爬二手车信息的例子唯一能给自己的帮助就是,原来要用这几个库,以及了解到简单的爬虫就是:访问网页->解析HTML->抓取数据->存储数据。
在经过解析诗词网站的HTML,和解决解析数据与存取数据出先的BUG之后,终于完成了自己的第一版Python爬虫。
MongoDB存取数据
数据存储一开始,自己是直接写在了文件之中。可是当试图开始要去发布服务,为iOS展示诗词提供数据时,发现服务返回的应该是JSON,文件处理起来就感觉比较麻烦。便进了MongoDB这个坑,当然,以我爬到的几千首诗词用其他的数据库也无不妥。
遇到新的知识,只好又是看博客,反正数据库以前也是用过的,而且那时候在班里也是能66的教其他同学。果不其然,简单的数据增删改查很简单,而且数据可以直接导出成json格式,这简直太棒了。
ps.值得一提的是,MongoDB原来是看不到的呀。
Flask发布服务
之前复刻项目和做项目时,网络请求数据或上传数据就总用到服务,感觉这是个很厉害的东西,别人只是给了自己一个接口,但是却处理了很多事。
3年前其实就接触过服务端,那时候是为了给第一个Android项目写数据的上传下载,可是实验室没人写后端服务,自己也没有后端的概念。刚开始,看到一些博客的例子,很是不理解为什么自己照着写,可是每次进行上传或者下载的时候就报错。在这,纠结了一周左右用PHP写了个小服务,才自己摸索到了后端相关的一些概念,那时候的自己真是不开窍。
又说多了。因为多少有点相关概念在脑子,而且知道Python可以写服务,正好组里有高手。通过高人指点,直接看Flask的一个教程,跟着敲了几行代码,渐渐有了头绪。刚开始只能本机访问,后来能够做到局域网内访问,最后不仅可以服务发数据(例如,服务发布诗词数据),还能接受数据(例如,收到用户反馈的信息并写入文件)。
经验总结
虽然Flagsgo的Demo版本没有进行上架(哪里有脸上架),而且服务也没有弄在公网上,但是基本对一个App想法->实现走了一遍流程。
简单的总结如下:
- 坚持,真的是会有收获。
- 一个人的能力实在有限,难以面面俱到。但这不妨碍我们朝着全栈发展,只是个人感觉,还是要有所突出。
- 宏观上的产品架构薄弱,App整体设计与开发的架构能力都等于无能力。
- 目前开发效率低下,状态基本是边开发,边想,边调整,边学习这般循环。如果自己一个人做个产品,迭代速度会跟不上。