最近和几个朋友约着一起写一个开源项目,欢迎大家来给我们的
项目 点赞;同时由于项目自身数据的敏感性,我们考虑到需要尊重原作者的劳动结果;
这里对 开源协议 做了一些调查。希望大家在未来的几十天里可以共同进步,也希望开源世界里我们更尊重彼此的劳动成果,这里感谢Listen1为我们提供了灵感~~

五大开源协议

上图为我们开源项目常用到的协议:
从上图中,我们可以看到 BSD、MIT、Apache 都是允许闭源的,顾名思义也就是可以用于商业用途,但是注意啦司机们:

  • BSD、MIT以及Apache协议都需要原作者的版权说明,Apache 需要按照作者的要求来进行说明,相比之下BSD 和 MIT 就显得人性化点啦,随便说只要有我就好。但是BSD作者害怕我等程序员不懂这些,所以协议要求不能使用它的名字宣传;

  • LGPL、GPL还得需要说明下:GPL 的声明作者为了强调它以及基于它的项目都是开源的,因此这个协议要求在它分支上必须都开源~~,服不服!!!
    LGPL 觉得自己开源算了,还得要求别人开源,这种做法是不是不太地道。所以机智的它修改了相关内容说明下就可以了,随便用~~

综上所述,果断选择 MIT。

欢迎大家持续关注我们团队成员的进度:

姓名 | Github账号 |角色|
|—-|——|——–|
|冷晶晶 ||后端开发|
|卜飞飞 ||产品设计|
|王夜寒 ||数据爬虫|
|操乐 ||数据爬虫|
|袁明明 ||Android移动端|
|杨光召||Android移动端|
|闵亮||Android移动端|
|汤增雷||后端开发|

参考文章:

五种常用的开源协议

Preparation:

1.数据来源:

case 1: 豆瓣开发者文档

case 2: 网络爬虫,亲测可试

2.工具

网络请求中必须要会用抓包工具,便于后续工作的有效进行。这里给mac开发者们推荐一款抓包工具,下载链接:paros抓包工具(PS:iOS团队同事付费购买的,被我蹭来啦,给点个star哈~~)

3.依赖库:

OKHttp

OkHttpUtils

OKGO

这里因为一直做项目没用过RxJava,正好撑着这个机会可以学习下,所以选择了OkGO,看看有没有什么更好的值得借鉴的地方。

好吧,下面正式进入主题

思路介绍:

因为受到github上江清清的FastDev4Android项目的启发,正巧又要负责公司新项目的启动,所以准备写个类似的库,做到write once,run AnyWhere(哈哈,开玩笑,方便以后快速开发是真的~~)

so,没错,你现在看到的是我的目标项目的网络框架的请求部分;这个模块实际也没什么重要的工作,就是对引入的网络请求库进行一些包装,因为考虑到前端技术更迭速度比较快,后期如果切换网络请求库的时候我们只需要更换这个类里面的网络请求部分就好了。

废话扯了这么多,我们来看看接下来的具体工作吧~~

  • Http post请求

  • Https post请求

  • 文件上传

  • 文件下载

一年一度的Google IO大会于2017年5月19号在Google总部山景城举行,会议期间宣布期间有101项规定产生。
这里分别对会议的内容摘要进行了手机:

毕竟作为移动端开发人员,对于Google爸爸那是要绝对的忠诚嘛~~根据会议的内容简要地做了一个总结并绘制了思维导图,谨以此图做个归纳:

此外,GMTC于2017年06月09-2017年06月10日在北京召开,虽然是个学术讨论会议,但是让我们深省的是Android开发人员除了做好native app,更要对新出的pwa,小程序,RN以及Weex有个关注和学习,这样才不会被技术趋势所淘汰!此外,AR/VR和微服务架构的企业端服务市场还是需要跟进的。


出来混,总是要还的~~


魔都的夏天刚刚过去,即将迎来「金九银十」的招聘季节了,公司也是早早下手从人才市场吸纳人才一起建设更加敏捷的团队。正巧有机会趁着这波面试和几个做了四五年 Android 的大牛面试者们一起探讨一下技术,这里写下此文也是从面试者的角度去了解怎样去招纳技术人员。

闲暇之余和同事讨论过面试别人的技巧,最后我们得出结论:

  • 首先基本的兴趣爱好了解下;
  • 然后看看他的作品并且让他解释一到两个功能模块重点去看看面试者的技术功底和语言表达能力以及逻辑思维能力;
  • 再问问他曾经爬过的最深的坑以及最后是怎么排查解决这些问题的;
  • 最后也是最重要的我们需要了解下面试者是否从事过现在公司业务的相关功能开发,如果有的话让他去谈谈对行业的理解和技术趋势的看法,因为创业公司对于人员的需求可能是你可以很快上手做事并且把事情做好(如果是大公司可能更加注重基本功扎实以及视野的广阔性,这样便于你能够在切换开发团队能够以最快地速度融入到大环境中)。

以上算是对技术面试的一个小小的总结吧,如果时间充足的话可以了解下他的离职原因,个人爱好,对朋友、加班、薪资的看法;这样也可以方便寻找到更快融入到团队的同志嘛~~


全中国赚钱最容易的男歌手,舞台表演跑下去吃个夜宵都没人会发现,yoyo yoyo,这就是凤凰传奇组合里的玲花和曾毅~~重温的吐槽经典,看一遍笑一遍的大会:

《吐槽大会》凤凰传奇


好吧,今天偶然看到了一幅好玩的搞笑组图,于是把视频找了出来有空的朋友可以看看欧~~开始今天的主题吧:最近在调研一些关于音视频会员方面的内容,相信你一定很好奇天天都被使用到的播放软件的会员是怎么实现的吧~~下面就让我们一起来探索这个问题吧!

为了在软件中实现付费观看的音视频播放,团队成员们都在各自收集自己的方法以在会议上进行进一步的讨论。通过一番Google和调研和实现,对音视频的设计也有了些粗浅的看法,在这里用本文进行记录:

  1. 录制过程中对音视频文件内容进行加密,播放过程中对加密文件进行解密;
  2. 控制访问权限:
    • 对链接加密;
    • 防盗链技术;
    • 设置专有资源访问接口,通过用户id判断是否进行视频播放授权;

方案一可以对安全性进行比较好的控制,但是开发的成本相对来说要大一些;方案二中对视频访问链接进行加密,增加防盗链以及设置专有资源接口可以控制用户直接获取资源,但是可以通过获取播放器访问资源时对请求从而获取资源的访问地址,并且无法杜绝后期做下载功能时用户有可能窃取视频资源。

注:防盗链技术中所需的字段:「Referer」在 Android 系统 4.0~6.0 中已被移除 参考链接,也就是不能使用系统原生播放器,可替代使用 ijkPlayer 但是由于此库中 .so 库所占空间较大可能使 app 体积大幅增加所以要斟酌使用。网上也有种说法用 User-Agent 字段代替 Referer 实现防盗链,如果希望采取此技术的筒子们可以详细尝试下~~

实际上从技术的角度很难去杜绝资源被窃取,我们只能去争取尽可能妥当的方案;还有一点需要考虑的是可以从法律的角度去保护隐秘资源的权益,这里就要使用我们的 DRM 技术啦,常用的就是给咋们的视频打上水印,打个水印还得防止别人给认为去除喽,使用 Google 爸爸的软件「Watermark Master」可以解决打水印的问题~~水印效果如下:

好啦,说了这么多我们来从技术的角度谈谈实现吧:

  1. 防盗链技术实现

实际就是控制 MediaPlayer 在访问过程中添加请求头,详情请参见:传送门
此外,上面也说了要使用 ijkPlayer

  1. 文件和字符串的加密解密技术

    本文的重点来啦~~先来看一张思维导图吧:
    java加密解密

    图中可以看到:

  • 从严格意义上来讲 Base64 和凯撒加密只能算作为一种编码的方式;

  • MD5,SHA1,HMAC 作为单向加密算法,不能被解密,一般也只能用于信息发送方的确认,比如高德、百度地图需要添加 SHA1 值作为验证开发者信息的手段;

  • 复杂加密算法可分为对称加密和非对称加密,对称加密算法由于其公钥的普遍性所以并不是特别安全。非对称加密则必须要公私要配合使用,并且私钥作为验证用户身份的方式存在;

  • 数字签名和数字证书的认证思路是一致的:发送方通过 MD5 加密明文获取信息摘要,然后通过私钥对明文+MD5 进行签名表明自己的身份。接受方必须通过 公钥进行验证签名;

具体代码实现请参见:BlankJ Encrypt

无论是互联网产品还是传统行业的产品,我们都需要盈利,或者要尽快地走上盈利的道路上。所以我们需要了解产品的市场和背后的逻辑,让自己的产品更加富有竞争力显得尤其的重要。
微观上,分析所在行业的竞争,我们要由“点”,“线”,“面”的角度出发,借鉴或创新商业盈利模式;宏观上,从公司自身自身的角度出发,判断行业状况以及整个一个大的经济条件下去决定自己产品的市场,从而解决我们在哪儿的问题;
此外,我们需要找到行业的痛点,并提出自己的解决方案。要知道我们要铸造什么样的商业壁垒使得自己屹立不倒,从而解决我们要到哪儿去的问题;
最后就是怎么去的问题啦,好好看看思维导图的传授的方法论吧~~

markdown笔记下载地址,欢迎star

从事产品研发接近两个年头啦,回过头来看一看,一个互联网产品从项目立项->需求的确立->产品的设计->开发团队的实现->测试人员的反复测试->最后的运营上线,这里的每个环节都需要通过伟大的PM去协调和决策并且付诸行动。今天,小小程序员带着一颗渴望感受真正产品的心拜读了苏杰老师的《人人都是产品经理》这本书,也是为了对产品经理这个职位的认知上有了一个提升,现在趁着还有这股兴头,好好整理下自己的思路吧,体味一下如何打造出一款优质的有价值的产品。

让我们思考几个问题:

  1. 什么是产品?
  2. 什么是好的产品?
  3. 什么是好的产品经理?

我想每个人的心中都会有不一样的答案吧,谈谈我个人的感受吧:

  1. 我觉得生活中的任意一个物件,只要能够解决生活中客观存在的问题,那么它就可以是一款产品;当然啦,有时候我会发现自己也是一款产品,因为我的功能就是给身边的人带来正能量和温暖的感觉~~(自恋地说)
  2. 更深层次一点,一款好的产品我觉得
    • 首先她要有着自己的基本价值(解决问题,满足日常的需求,还必须能创造出商业价值);
    • 其次她是设计者价值观的体现和灵魂的寄托,必须是寄托了设计者信仰有灵魂的;
    • 然后在时间允许的情况下,她必须有着近乎完美的设计,而我对于设计这个东西的完美性的定义就是在满足设计规范的基础下做到 Don‘t make me think
    • 最后如果我们的产品能够从马斯洛需求层次上尽可能多的满足用户的需求那就再好不过啦。
  3. 产品经理,或者叫做PM,我认为一个好的产品经理必须具备帮助团队为用户打造有价值的产品的能力
  • 团队:他们生活在老板,客户,财务,销售,设计,开发,测试和运营等各个团队的核心地带,就像计算机的总线型结构一般,要保证计算机的高速运转,充当核心的他们必须充当团队的润滑剂,他们需要懂得每个领域的专业知识,使得沟通的成本可以大大降低。他们需要协调身边的一切资源,对任务作出取舍和判断,所以中心地段的他们要求真的比较高。

  • 用户:要知道用户有时候根本不太清楚自己需要的是什么,他们对于很多东西的判断可能没有进行过深入的思考,所以我觉得一款产品的最初的难点就在于在特定的产品使用场景下,通过真实的数据或者对于人性的理解去感知真实存在的需求,同时这种需求要满足我们的价值观和商业发展战略,的确是最难的一块;

  • 打造:我觉得这里是我作为一个开发人员能够做到的,要关注任何一个细节,最起码要保证我们的产品没毛病,在此基础上有自己的个性;还要根据自己采集的数据和真实用户的反馈来不断地优化我们的产品,毕竟一次性设计还是会有很多问题的;

  • 有价值的产品:价值的体现可以从两个角度去考量:

    • 用户的角度:我们的产品要能解决客户固定场景下的客观需求,解决用户实际存在的问题,那我觉得我们的产品就是有价值的;

    • 企业自身的角度:创造利润

谈了自己对于几个产品概念的理解,我们知道要打造一款真正好的产品背后需要付诸很多心血,下面想和大家谈谈咋们研发人员应该做出哪些思考吧。

很喜欢苏杰老师的一个比喻,刚刚进入公司的时候我们总是在给老板做问答题,总会抛出各种各样的问题,却不知道如何下手;渐渐的有了点经验后我们开始自己想出一部分问题的答案,这个阶段抛出的问题大多是以填空题的形式抛出去;再后来,我们浅浅可以独立地完成很多模块,这个时候我们需要积累自己解决问题的方案,而工作过程遇到的问题也就变成了选择题的形式,在这个基础上我们渐渐尝试着给出自己的判断,如果某一天自己的判断完全可以符合公司的发展战略的时候,我们也就可以独挡一面啦;或许有一天,自己也会变成那个帮别人批改试卷的人。

有时候真的觉得我们做事的方式应该像一个产品经理打造一款产品一样,一个个演变的过程会让我们渴求的产品(自己)变得愈加完美。作为开发人员的你们处于哪个阶段呢?你渴求达到什么样一个境界呢?你想好了怎么办到了吗?

我觉得这两年通过自己的积累自己勉强达到选择题的地步吧,希望自己可以在某一天自己的判断受到PM的认可吧。所以接下来的日子里采取的措施:去感受市场和公司的战略,模拟用户场景,体会用户的真实需求,在工作中提前一步,精心设计和打造自己的产品的每一个细节。

Tips:做一个对产品有感知的人吧,多看看appStore的排行榜的产品,一起加油!

题外话:我觉得抛开技术谈人生,我们也是自己人生的产品经理,我们需要不断去经营个人品牌,提升自身的魅力,扩大个人影响力,我想这可能是苏老师真正想传达给我们的吧;在这个纸醉金迷的时代,很多东西都略显浮躁,人情味儿似乎没那么强,所以我希望将自己打造成一款有温度的人这样的一款产品,希望通过写作的方式来和对面的你一起并肩作战,希望看到我的文章的时候会觉得这个世界还有我的同伴,加油,做自己人生的产品经理吧~~

markdown笔记下载地址,欢迎star

在前面的学习中,我们了解到了产品作为一种能够高效解决某一类特征群体的问题的工具,它寄托着产品设计师的灵魂。

产品的构建是一项项需求完美结合起来的产物,那么如果需要设计一款产品,我们需要考虑以下几个方面的问题:

  • 需求来源何处?

  • 如何正确的表达需求,让沟通更有效率,让自己的思路更加完善?

  • 怎样高效地执行我们的需求?

  • 如何不断优化我们的需求,让我们在竞品之中立于不败之地?

A1:我们知道需求可能的来源:

  • 用户或者市场陈述与反馈
  • 公司内部

如上脑图显示,我们需要明确地根据马斯洛需求理论去置身于具体场景中去体会产品的需求。然后将我们的需求通过Feature List表格详细的记录思考,纳入我们产品的备选项中;再进行过仔细探讨和推演后,我们就可以将其制作成具体的prd从而让开发去实现我们的需求。

说到这里,我认为对于一个产品经理很实在的能力:

  1. 对于竞品深入的分析;
  2. 对于市场深入地理解和战略的制定;
  3. 通过feautrueList尽可能详尽地描述产品需求;
  4. 近乎于变态版详尽的prd,让自己的思路蔓延到产品的方方面面;
  5. 具体有效的用户反馈手机手段,并且从中提取中产品中的不足;
  6. 通过数据分析产品的迭代方向;

A2:为了提升整个团队的沟通效率,我们需要通过将自己的需求转换成文档,让自己的逻辑更加清晰,也让团队中的人员可以更加清晰的了解我们的思路;

当我们能够用一句换很清晰地表述出我们的需求模块要干什么的时候,可能就已经对我们的产品定位有了个纲领型的认识。那么借助于文档工具可以让我们的想法更加具体化;

A3:

知己知彼,方能百战不怠;商场如战场,对于对手以及产品尽可能全方位的认知应该是不断深入的,那么竞品分析就显得十分的重要,他能让我们时刻从一些比较常规的角度去了解竞品的基本情况。只有在不断地修正对竞品地认知,才能吸取别人的长处,才能让自己紧跟或者超越潮流,所以竞品分析在PM的课程中显得特别重要

下面就让我们来思考几个我想到的问题吧:

  • (how?)如何做一个竞品分析?
  • (when?)什么时候应该做竞品分析?

A1:一款产品有她所在的行业,她可以是从0到1地创造,也可以是伴随着竞争而产生。这里我们只讨论后者,因为毕竟前者需要我们在大量的积淀后才有可能会有的发挥;
假设我们所处的行业有着比较多的竞争对手,那么现在问题来了:这个行业这么大,竞争者这么多,如何寻找自己的对手呢?
我的看法:假想自己是行业中档水平,那么这个行业中的对手只有可能存在三种情况:

1.远远超过我们的;

2.和我们持平的;

3.稍微低于我们水平的;

建立在这个目标的基础上,我们分别找出三类对手

  • 行业标杆
  • 同水平竞争者
  • 潜在对手

注:对手的水平判断依据我认为应该是她所在的公司经济和团队水平和产品的目标定位无关;这里我们推荐给大家几个网站用来收集竞争产品以及调查相应公司的背景吧:

//TODO:

APP相关数据

* []()
* []()
* []()
* []()

公司背景分析

* []()
* []()
* []()
* []()

行业数据分析

* []()
* []()
* []()
* []()

科技咨询网站

* []()
* []()
* []()
* []()

在经历过讨论筛选后,我相信大家都会有自己中意的几款产品,接下来我们要做的就是全方位体验对手的产品,线上从《用户体验要素》的角度去分析产品;线下当然实际去感受产品啦(如果有的话,就像摩拜单车~~)

下面的重点来了,我们前面做的所有准备工作,都是为了让我们分析总结
对手的产品,那么我们应该从哪些方面总结呢,这里课程中的老师给出了一些角度,让我们做下参考:

  • 公司背景分析
  • 策略分析
    • 产品策略
    • 商业模式
    • 运营策略
  • 定位分析
  • 产品分析
  • 用户分析