All posts by dotte

BigData

作者:Xiaoyu Ma
链接:https://www.zhihu.com/question/27974418/answer/38965760
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的。你可以把它比作一个厨房所以需要的各种工具。锅碗瓢盆,各有各的用处,互相之间又有重合。你可以用汤锅直接当碗吃饭喝汤,你可以用小刀或者刨子去皮。但是每个工具有自己的特性,虽然奇怪的组合也能工作,但是未必是最佳选择。大数据,首先你要能存的下大数据。
传统的文件系统是单机的,不能横跨不同的机器。HDFS(Hadoop Distributed FileSystem)的设计本质上是为了大量的数据能横跨成百上千台机器,但是你看到的是一个文件系统而不是很多文件系统。比如你说我要获取/hdfs/tmp/file1的数据,你引用的是一个文件路径,但是实际的数据存放在很多不同的机器上。你作为用户,不需要知道这些,就好比在单机上你不关心文件分散在什么磁道什么扇区一样。HDFS为你管理这些数据。

存的下数据之后,你就开始考虑怎么处理数据。虽然HDFS可以为你整体管理不同机器上的数据,但是这些数据太大了。一台机器读取成T上P的数据(很大的数据哦,比如整个东京热有史以来所有高清电影的大小甚至更大),一台机器慢慢跑也许需要好几天甚至好几周。对于很多公司来说,单机处理是不可忍受的,比如微博要更新24小时热博,它必须在24小时之内跑完这些处理。那么我如果要用很多台机器处理,我就面临了如何分配工作,如果一台机器挂了如何重新启动相应的任务,机器之间如何互相通信交换数据以完成复杂的计算等等。这就是MapReduce / Tez / Spark的功能。MapReduce是第一代计算引擎,Tez和Spark是第二代。MapReduce的设计,采用了很简化的计算模型,只有Map和Reduce两个计算过程(中间用Shuffle串联),用这个模型,已经可以处理大数据领域很大一部分问题了。
那什么是Map什么是Reduce?
考虑如果你要统计一个巨大的文本文件存储在类似HDFS上,你想要知道这个文本里各个词的出现频率。你启动了一个MapReduce程序。Map阶段,几百台机器同时读取这个文件的各个部分,分别把各自读到的部分分别统计出词频,产生类似
(hello, 12100次),(world,15214次)等等这样的Pair(我这里把Map和Combine放在一起说以便简化);这几百台机器各自都产生了如上的集合,然后又有几百台机器启动Reduce处理。Reducer机器A将从Mapper机器收到所有以A开头的统计结果,机器B将收到B开头的词汇统计结果(当然实际上不会真的以字母开头做依据,而是用函数产生Hash值以避免数据串化。因为类似X开头的词肯定比其他要少得多,而你不希望数据处理各个机器的工作量相差悬殊)。然后这些Reducer将再次汇总,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。每个Reducer都如上处理,你就得到了整个文件的词频结果。
这看似是个很简单的模型,但很多算法都可以用这个模型描述了。
Map+Reduce的简单模型很黄很暴力,虽然好用,但是很笨重。第二代的Tez和Spark除了内存Cache之类的新feature,本质上来说,是让Map/Reduce模型更通用,让Map和Reduce之间的界限更模糊,数据交换更灵活,更少的磁盘读写,以便更方便地描述复杂算法,取得更高的吞吐量。

有了MapReduce,Tez和Spark之后,程序员发现,MapReduce的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言,虽然你几乎什么都能干了,但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法和数据处理流程。于是就有了Pig和Hive。Pig是接近脚本方式去描述MapReduce,Hive则用的是SQL。它们把脚本和SQL语言翻译成MapReduce程序,丢给计算引擎去计算,而你就从繁琐的MapReduce程序中解脱出来,用更简单更直观的语言去写程序了。

有了Hive之后,人们发现SQL对比Java有巨大的优势。一个是它太容易写了。刚才词频的东西,用SQL描述就只有一两行,MapReduce写起来大约要几十上百行。而更重要的是,非计算机背景的用户终于感受到了爱:我也会写SQL!于是数据分析人员终于从乞求工程师帮忙的窘境解脱出来,工程师也从写奇怪的一次性的处理程序中解脱出来。大家都开心了。Hive逐渐成长成了大数据仓库的核心组件。甚至很多公司的流水线作业集完全是用SQL描述,因为易写易改,一看就懂,容易维护。

自从数据分析人员开始用Hive分析数据之后,它们发现,Hive在MapReduce上跑,真鸡巴慢!流水线作业集也许没啥关系,比如24小时更新的推荐,反正24小时内跑完就算了。但是数据分析,人们总是希望能跑更快一些。比如我希望看过去一个小时内多少人在充气娃娃页面驻足,分别停留了多久,对于一个巨型网站海量数据下,这个处理过程也许要花几十分钟甚至很多小时。而这个分析也许只是你万里长征的第一步,你还要看多少人浏览了跳蛋多少人看了拉赫曼尼诺夫的CD,以便跟老板汇报,我们的用户是猥琐男闷骚女更多还是文艺青年/少女更多。你无法忍受等待的折磨,只能跟帅帅的工程师蝈蝈说,快,快,再快一点!
于是Impala,Presto,Drill诞生了(当然还有无数非著名的交互SQL引擎,就不一一列举了)。三个系统的核心理念是,MapReduce引擎太慢,因为它太通用,太强壮,太保守,我们SQL需要更轻量,更激进地获取资源,更专门地对SQL做优化,而且不需要那么多容错性保证(因为系统出错了大不了重新启动任务,如果整个处理时间更短的话,比如几分钟之内)。这些系统让用户更快速地处理SQL任务,牺牲了通用性稳定性等特性。如果说MapReduce是大砍刀,砍啥都不怕,那上面三个就是剔骨刀,灵巧锋利,但是不能搞太大太硬的东西。

这些系统,说实话,一直没有达到人们期望的流行度。因为这时候又两个异类被造出来了。他们是Hive on Tez / Spark和SparkSQL。它们的设计理念是,MapReduce慢,但是如果我用新一代通用计算引擎Tez或者Spark来跑SQL,那我就能跑的更快。而且用户不需要维护两套系统。这就好比如果你厨房小,人又懒,对吃的精细程度要求有限,那你可以买个电饭煲,能蒸能煲能烧,省了好多厨具。

上面的介绍,基本就是一个数据仓库的构架了。底层HDFS,上面跑MapReduce/Tez/Spark,在上面跑Hive,Pig。或者HDFS上直接跑Impala,Drill,Presto。这解决了中低速数据处理的要求。

那如果我要更高速的处理呢?
如果我是一个类似微博的公司,我希望显示不是24小时热博,我想看一个不断变化的热播榜,更新延迟在一分钟之内,上面的手段都将无法胜任。于是又一种计算模型被开发出来,这就是Streaming(流)计算。Storm是最流行的流计算平台。流计算的思路是,如果要达到更实时的更新,我何不在数据流进来的时候就处理了?比如还是词频统计的例子,我的数据流是一个一个的词,我就让他们一边流过我就一边开始统计了。流计算很牛逼,基本无延迟,但是它的短处是,不灵活,你想要统计的东西必须预先知道,毕竟数据流过就没了,你没算的东西就无法补算了。因此它是个很好的东西,但是无法替代上面数据仓库和批处理系统。

还有一个有些独立的模块是KV Store,比如Cassandra,HBase,MongoDB以及很多很多很多很多其他的(多到无法想象)。所以KV Store就是说,我有一堆键值,我能很快速滴获取与这个Key绑定的数据。比如我用身份证号,能取到你的身份数据。这个动作用MapReduce也能完成,但是很可能要扫描整个数据集。而KV Store专用来处理这个操作,所有存和取都专门为此优化了。从几个P的数据中查找一个身份证号,也许只要零点几秒。这让大数据公司的一些专门操作被大大优化了。比如我网页上有个根据订单号查找订单内容的页面,而整个网站的订单数量无法单机数据库存储,我就会考虑用KV Store来存。KV Store的理念是,基本无法处理复杂的计算,大多没法JOIN,也许没法聚合,没有强一致性保证(不同数据分布在不同机器上,你每次读取也许会读到不同的结果,也无法处理类似银行转账那样的强一致性要求的操作)。但是丫就是快。极快。
每个不同的KV Store设计都有不同取舍,有些更快,有些容量更高,有些可以支持更复杂的操作。必有一款适合你。

除此之外,还有一些更特制的系统/组件,比如Mahout是分布式机器学习库,Protobuf是数据交换的编码和库,ZooKeeper是高一致性的分布存取协同系统,等等。

有了这么多乱七八糟的工具,都在同一个集群上运转,大家需要互相尊重有序工作。所以另外一个重要组件是,调度系统。现在最流行的是Yarn。你可以把他看作中央管理,好比你妈在厨房监工,哎,你妹妹切菜切完了,你可以把刀拿去杀鸡了。只要大家都服从你妈分配,那大家都能愉快滴烧菜。

你可以认为,大数据生态圈就是一个厨房工具生态圈。为了做不同的菜,中国菜,日本菜,法国菜,你需要各种不同的工具。而且客人的需求正在复杂化,你的厨具不断被发明,也没有一个万用的厨具可以处理所有情况,因此它会变的越来越复杂。

赚钱的逻辑是什么?

Where to buy 🚀 aged domains and backlinks 🔥 from Best-SEO-Domains | 0083-0608

作者:肥肥猫
链接:https://www.zhihu.com/question/28893681/answer/74951218
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

对真正的有钱人来说,并不存在所谓“什么方法才能赚钱”的问题,而只有,“要怎样解决某一个问题”以及“怎样调动自己能调动的一切资源”这两个问题。“看钱不是钱而是工具”,就是一种能力。

许多人商海沉浮数十年,即便倾家荡产依然还能东山再起,靠的也不是具体的门路,而是比一般人高出一个层次的思维和意识。就像《1942》里的地主在流亡路上和长工说的,“我知道怎么从一个穷人变成财主,给我十年,你大爷我还是东家”。

想在中国赚大钱,有一些基本的规律和共通的观念,按照重要性排列大致有:

1.政治敏锐

从70年代末开始到80年代初,搞投机倒把的个体户是第一批发财者,而这些人往往是被主流国营经济拒之门外,被逼无奈才出去闯的。

到了80年代中后期,发财的人又从体制外回到体制内。依托村或者集体社,利用自身在原有社体制内的声望或者职务(村长,支部书记),集资办起了加工厂的人成为第二批暴富者,这一波机会和体制转型有着千丝万缕的联系,以苏南模式(华西村)最为典型。

90年代早期的价格双轨制改革和90年代后期的国退民进。不知道有多少人利用国有资本变卖的机遇,抓住了廉价买卖产权的机会。2000年开始到2005年。加入世贸又给出口加工业带来历史性的机遇,货代、纺织品出口都养肥了大把没有文化的沿海小老板。2005年的时候随便开个什么矿,之后的商品大牛市会让你的钱多到用麻袋装。

至于商品房改革、股权分置改革、资本市场的发展更是和每个家庭的财富息息相关。以前老有人说看新闻联播致富这个梗,其实是有一定道理的。

大的暴富机会,中国在过去20年出现了不下十次,最大的机遇几乎全都和政治格局变化息息相关。其基本特点是一波流。一波三五年让你赚个饱,但这波赚完还想继续赚,几乎不可能。煤矿、进出口加工,这才几年而已,现在已经在生存线上挣扎。

2. 从无到有

在中国,要预测社会未来的走向,一个最简单、最基本的思路就是:

“中国在走美国的老路”。

这也就是所谓的CTC(“Copy to China”)的基础。可以说是中国最近20年所有新兴行业的一条发展主线。这条主线之清晰、之连贯,和前面所说的靠政治趋势赚钱的一波流的短暂易逝形成了鲜明对比。从90年代末期到2000年初的中国第一次互联网泡沫开始,一直到最近这3年的第二次互联网泡沫,几乎所有成功的,体量在百亿美元以上的新兴企业,其产品最初的雏形,都是一个“中国版的美国XX”。

解决稀缺是一切生意的根本宗旨。赚钱这回事,其根本意义,是“为他人解决问题”,而所谓利润,无非是为他人(社会)解决某一问题的酬劳。而从无到有,从0到1的事情,从满足稀缺性需求的角度,要远比从1到10的事情值得去做。从经济学角度来讲,最紧缺的东西才是最有价值的,故而得到的回报也不可同日而语。BAT这些搬运工起家的巨头,解决的都是从无到有的局面,之后那些跟风的早已在格局上输了,只能吃几口残羹冷炙而已。

3.ROE思维

如果从财务上来解释这一点,那就是ROE(股本回报率)= 利润率*周转率*财务杠杆比率。

注意这三者是乘数关系,所以利润为负的情况下,你的失败也会被这个放大器给放大。但即便如此,所有赚了大钱的人,几乎没有不用到杠杆的,敢下注本来就是企业家精神的一部分。

我在之前的回答里说过,穷人是手里有多少资源才敢做大事情,富人是先想到要做多大事才开始考虑要如何筹措资源。熟练运用财务杠杆的前提,就是敢于去动“本不属于自己”的资源的意识,或者说的再直白一些,敢去借别人手里的资源来为我所用。

巴菲特扣除杠杆的收益率不过13%左右。被自己有限的资源所限制,说明自己无法掌控资源的流向,依然只是资源的奴隶。

再谈一下周转率。即使是低利润,只要有高周转率一样可以在短期内获得发展。比如很多人排队的绿茶和外婆家,菜价便宜但翻台率高。当利润很微的时候,提高周转率依然可以提升ROE。

卖珠宝和卖烤串哪个赚钱呢?很难定论。珠宝的单品利润算下来可能比较高,但周转率太低。反之,烤串利润率低但周转率要大大增高。假设同样的资金投入卖珠宝和卖烤串,并且假设珠宝3个月一个资金回笼的周期(从生产到物流到销售),烤串一天一个周期(从生产到销售),那么在假设两者都可以销售出去的情况下,也许卖烤串比卖珠宝更赚。

此外,中间型行业和智力型行业通常有望达到更高的ROE,主要是因为资产较轻的关系。

4.了解自己

没错,研究自己比研究他人,研究金钱更重要。我们最大的问题,就是对自己的了解远远没有自己以为的多。

能赚钱不代表自己就能从钱中获得享受,对金钱的态度其实是一件特别个人化的事情。大部分人也许可以做到正确衡量各种资源的时间价值、却往往对自己的时间成本毫不在意,对自己的收益偏好毫无概念。

这种能力需要建立在深刻了解自己的身体和心理的基础之上;同样的资金、时间,由于掌握信息的差异,对自己来说,用在哪里最值得,用在哪里对当下、对未来的效用最大,都是需要反复摸索和实践的。穷人往往把“钱”看的太“值钱”,把“钱”以外的资源,例如自己的时间,看得太不值钱。

很多人喜欢把赚钱、理财、投资混为一谈,其实这是三件性质完全不同的事情,所需要点亮的技能树也不尽相同。就我的观察,会赚钱的人不一定会理财;会理财和会投资也是完全两码事,会投资的人你若让他凭自己做生意,很可能亏的一塌糊涂。自己到底最适合做哪一样,也需要摸索。

很多人对创业有着各种不切实际的幻想,明明是个不够自律、厌恶繁琐的人,非要去做生产型企业,殊不知这可以算是最繁琐的一种商业模式,从原料供应,采购,生产,库存,物流,销售,每一个环节都不能出错,毛利润率又低,必须钻到每一个细节中去扣成本,可以说一步走错,满盘皆输。对自己不了解,花下去的人生成本是无法挽回的。

5.防骗意识

这里的“骗子”是广义的,泛指一切出于零和动机打你主意的、想从你这里榨取资源的人。防骗意识的培养,应该贯穿在人生的始终。

投资本身,首先一定是一件反常识的事情,不然有钱人不会在人口比例中占少数。对于投资,其零和性要比赚钱大得多,所以有时候不止要看到趋势,还要评估周围其他人是否也看到了这个趋势,更要考虑到周围人是否知道自己知道对方知道。

如果说赚钱还是人和外物之间的事,那投资就一定是人和其他人之间的游戏,更加复杂诡异,不仅要防马路上的骗子、短信里的骗子,更要防资本市场的骗子,伪装成“创业家”的骗子、伪装成“好企业”的骗子、伪装成“合伙人”、“好朋友”的骗子、伪装成“情人”、“伴侣”的骗子、甚至是伪装成“养老金”、“社会福利保障”的骗子。

怎么阅读财务报告,怎样判断信息的真实性,知道怎么查一个生意伙伴的诚信水平;这些东西之重要,可以说分分钟能让你半生心血付之东流。但可惜这些东西对于普通人家的孩子,极少有地方系统的学习,只能靠自己一笔一笔“学费”去交。

过去我们小时候学校所提供的教育和家庭教育,对于以上怎样和钱打交道的知识可谓一片空白。大部分中国的家长和老师自己也不懂这些东西。既然自己一辈子也没活明白,那就更不用说教会下一代了。这样导致的社会差距只会进一步扩大。

数据挖掘

基本概念

相关话题:大数据 数据分析 

如何系统地学习数据挖掘

这个问题思考了很久,作为过来人谈一谈,建议先看下以前的一些回答。

磨刀不误砍柴工。在学习数据挖掘之前应该明白几点:

  • 数据挖掘目前在中国的尚未流行开,犹如屠龙之技。
  • 数据初期的准备通常占整个数据挖掘项目工作量的70%左右。
  • 数据挖掘本身融合了统计学、数据库和机器学习等学科,并不是新的技术。
  • 数据挖掘技术更适合业务人员学习(相比技术人员学习业务来的更高效)
  • 数据挖掘适用于传统的BI(报表、OLAP等)无法支持的领域。
  • 数据挖掘项目通常需要重复一些毫无技术含量的工作。

如果你阅读了以上内容觉得可以接受,那么继续往下看。

学习一门技术要和行业靠拢,没有行业背景的技术如空中楼阁。技术尤其是计算机领域的技术发展是宽泛且快速更替的(十年前做网页设计都能成立公司),一般人没有这个精力和时间全方位的掌握所有技术细节。但是技术在结合行业之后就能够独当一面了,一方面有利于抓住用户痛点和刚性需求,另一方面能够累计行业经验,使用互联网思维跨界让你更容易取得成功。不要在学习技术时想要面面俱到,这样会失去你的核心竞争力。

一、目前国内的数据挖掘人员工作领域大致可分为三类。

  • 1)数据分析师:在拥有行业数据的电商、金融、电信、咨询等行业里做业务咨询,商务智能,出分析报告。
  • 2)数据挖掘工程师:在多媒体、电商、搜索、社交等大数据相关行业里做机器学习算法实现和分析。
  • 3)科学研究方向:在高校、科研单位、企业研究院等高大上科研机构研究新算法效率改进及未来应用。

二、说说各工作领域需要掌握的技能。
(1).数据分析师

  • 需要有深厚的数理统计基础,但是对程序开发能力不做要求。
  • 需要熟练使用主流的数据挖掘(或统计分析)工具如Business Analytics and Business Intelligence Software(SAS)、SPSS、EXCEL等。
  • 需要对与所在行业有关的一切核心数据有深入的理解,以及一定的数据敏感性培养。
  • 经典图书推荐:《概率论与数理统计》、《统计学》推荐David Freedman版、《业务建模与数据挖掘》、《数据挖掘导论》、《SAS编程与数据挖掘商业案例》、《Clementine数据挖掘方法及应用 》、《Excel 2007 VBA参考大全》、《IBM SPSS Statistics 19 Statistical Procedures Companion》等。

(2).数据挖掘工程师

  • 需要理解主流机器学习算法的原理和应用。
  • 需要熟悉至少一门编程语言如(Python、C、C++、Java、Delphi等)。
  • 需要理解数据库原理,能够熟练操作至少一种数据库(Mysql、SQL、DB2、Oracle等),能够明白MapReduce的原理操作以及熟练使用Hadoop系列工具更好。
  • 经典图书推荐:《数据挖掘概念与技术》、《机器学习实战》、《人工智能及其应用》、《数据库系统概论》、《算法导论》、《Web数据挖掘》、《 Python标准库》、《thinking in Java》、《Thinking in C++》、《数据结构》等。

(3).科学研究方向

三、以下是通信行业数据挖掘工程师的工作感受。

真正从数据挖掘项目实践的角度讲,沟通能力对挖掘的兴趣爱好是最重要的,有了爱好才可以愿意钻研,有了不错的沟通能力,才可以正确理解业务问题,才能正确把业务问题转化成挖掘问题,才可以在相关不同专业人才之间清楚表达你的意图和想法,取得他们的理解和支持。所以我认为沟通能力和兴趣爱好是个人的数据挖掘的核心竞争力,是很难学到的;而其他的相关专业知识谁都可以学,算不上个人发展的核心竞争力。

说到这里可能很多数据仓库专家、程序员、统计师等等都要扔砖头了,对不起,我没有别的意思,你们的专业对于数据挖掘都很重要,大家本来就是一个整体的,但是作为单独一个个体的人来说,精力有限,时间有限,不可能这些领域都能掌握,在这种情况下,选择最重要的核心,我想应该是数据挖掘技能和相关业务能力吧(从另外的一个极端的例子,我们可以看, 比如一个迷你型的挖掘项目,一个懂得市场营销和数据挖掘技能的人应该可以胜任。这其中他虽然不懂数据仓库,但是简单的Excel就足以胜任高打6万个样本的数据处理;他虽然不懂专业的展示展现技能,但是只要他自己看的懂就行了,这就无需什么展示展现;前面说过,统计技能是应该掌握的,这对一个人的迷你项目很重要;他虽然不懂编程,但是专业挖掘工具和挖掘技能足够让他操练的;这样在迷你项目中,一个懂得挖掘技能和市场营销业务能力的人就可以圆满完成了,甚至在一个数据源中根据业务需求可以无穷无尽的挖掘不同的项目思路,试问就是这个迷你项目,单纯的一个数据仓库专家、单纯的一个程序员、单纯的一个展示展现技师、甚至单纯的一个挖掘技术专家,都是无法胜任的)。这从另一个方面也说明了为什么沟通能力的重要,这些个完全不同的专业领域,想要有效有机地整合在一起进行数据挖掘项目实践,你说没有好的沟通能力行吗?

数据挖掘能力只能在项目实践的熔炉中提升、升华,所以跟着项目学挖掘是最有效的捷径。国外学习挖掘的人都是一开始跟着老板做项目,刚开始不懂不要紧,越不懂越知道应该学什么,才能学得越快越有效果。我不知道国内的数据挖掘学生是怎样学的,但是从网上的一些论坛看,很多都是纸上谈兵,这样很浪费时间,很没有效率。

另外现在国内关于数据挖掘的概念都很混乱,很多BI只是局限在报表的展示和简单的统计分析,却也号称是数据挖掘;另一方面,国内真正规模化实施数据挖掘的行业是屈指可数(银行、保险公司、移动通讯),其他行业的应用就只能算是小规模的,比如很多大学都有些相关的挖掘课题、挖掘项目,但都比较分散,而且都是处于摸索阶段,但是我相信数据挖掘在中国一定是好的前景,因为这是历史发展的必然。

讲到移动方面的实践案例,如果你是来自移动的话,你一定知道国内有家叫华院分析的公司(申明,我跟这家公司没有任何关系,我只是站在数据挖掘者的角度分析过中国大多数的号称数据挖掘服务公司,觉得华院还不错,比很多徒有虚名的大公司来得更实际),他们的业务现在已经覆盖了绝大多数中国省级移动公司的分析挖掘项目,你上网搜索一下应该可以找到一些详细的资料吧。我对华院分析印象最深的一点就是2002年这个公司白手起家,自己不懂不要紧,一边自学一边开始拓展客户,到现在在中国的移动通讯市场全面开花,的确佩服佩服呀。他们最开始都是用EXCEL处理数据,用肉眼比较选择比较不同的模型,你可以想象这其中的艰难吧。

至于移动通讯的具体的数据挖掘的应用,那太多了,比如不同话费套餐的制订、客户流失模型、不同服务交叉销售模型、不同客户对优惠的弹性分析、客户群体细分模型、不同客户生命周期模型、渠道选择模型、恶意欺诈预警模型,太多了,记住,从客户的需求出发,从实践中的问题出发,移动中可以发现太多的挖掘项目。最后告诉你一个秘密,当你数据挖掘能力提升到一定程度时,你会发现无论什么行业,其实数据挖掘的应用有大部分是重合的相似的,这样你会觉得更轻松。

四、成为一名数据科学家需要掌握的技能图。(原文:Data Science: How do I become a data scientist?

人一能之,己十之;人十能之,己千之。果能此道矣,虽愚,必明;虽柔,必强。
与君共勉。

作者:Han Hsiao
链接:https://www.zhihu.com/question/20751219/answer/24345252
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

开从首位 00 后 CEO 被指抄袭,聊聊开源协议

近日,一位自称『中国首位 00 后 CEO』的 17 岁少年,李昕泽因为一段专访短视频,一下在 IT 界火了。

而在昨日,李昕泽 所在的 崇才网络科技 发布的一款产品:猫桌面(智能电视桌面),被 CSDN 博客专家、Android 开发者『墨镜猫』所指抄袭。

原文地址在这里,大家有兴趣可以看看:http://blog.csdn.net/rain_butterfly/article/details/77847643

事情简单来说,崇才网络科技 发布的 TV端 App 产品 猫桌面,和『墨镜猫』之前在 Github 上开源的一款 AndroidTVLauncher (名称也叫 猫桌面),从UI到实现,都是一模一样的,才引发了现在的抄袭问题。

而在这件事情发生的当晚,我去看了下『墨镜猫』开源的 AndroidTVLauncher ,它在昨天已经将开源协议从 Apache License 2.0 修改成了 GNU GPL v3,并且在 commit 里表达了作者的愤怒。

从 commit 的记录来看,作者依然是在努力维护这个库的,最近才增加了对 kotlin 的支持。

而对于抄袭的事情,大多数同学都是声援的态度,但是在看了作者的开源协议之后,我有点犯难了。

从开源协议来看,这里涉及到两个协议:

  • Apache License 2.0
  • GNU GPL v3

下图是从 @GcsSloop 的博客中 Copy 出来的,可以清晰的说明这两个协议的特点。

Apache License 2.0 本身是一个比较宽泛的协议,使用者可以在需要的时候修改代码并且将它封装成产品发布/销售,而这只需要增加一个开源说明即可。

而 GNU GPL v3 就相对严格一些,它要求使用它的程序,也遵照 GNU GPL v3 协议。

说说我的看法

首先,代码最初使用的是 Apache License 2.0 协议,本身就可以让使用者修改并且商用,前提是在代码中附带一份原协议。

使用者不能打着作者的名号做商业宣传,并且原作者在不承担代码使用后的风险的同时,也放弃了这段代码被商用后的收益。也就是说,别人在原本代码的基础上,修改的好或者推广的好,那是别人能力的表现,这部分收益是可以不和原作者相关的(不排除使用者获益之后馈赠原作者的)。

到现在来看,撇来需要附带一份原协议这一点来看,使用者完全是遵循的 Apache License 2.0 的协议。(唯一可能有问题的是应该改改名称和图片资源,再上 PPT)

而原作者的代码,也并非 100% 原创的,它是一款基于 android.support.v17.leanback 的库来做的二次开发,而 Leanback 是 Google 为 Android TV 做的一款支持库,本身也是基于 Apache License 2.0 开源协议的。

Leanback 我自己也用过,并且用它开发过商业产品,现在已经上线盈利。AndroidTVLauncher 中的很多效果和实现,都是 Leanback 原生 Api 支持的,并没有做太多大的改动。所以这里对 AndroidTVLauncher 在原有库的基础上,改动的价值,就不太好做评判(毕竟我没有看过 AndroidTVLauncher 的代码)。

再来说说,作者昨天紧急修改了一波协议,这其实并没有什么实质的作用。因为本身 GPL 只是要求使用者也需要开源并且保持 GPL 协议,我想对于 崇才网络科技 的人来说,开源就开源呗。而且他们也是可以在之前代码的基础上进行修改,之前的代码依然保持 Apache License 2.0 的协议,这是一旦授予,无法撤销的。

做开源,先摆好心态

很多人将自己的代码放在 Github 上开源,本身就是为了推广自己,对于一些小而美的开源代码(例如:控件、动画等),其实心态还算平和,用就用了呗,而且应该是越多商业应用在用,作者就越高兴,觉得是一种认可。

可对于一些完整的 App 的开源。当发现别人使用自己的代码进行商用,并且推广的还不错,就心里有点不平衡了。

但是实际上,当你把代码放到 Github 上,等待被人 start 、fork 的时候,就应该做好开源的心态。而如果不想被商用,开源的那一刻就应该想清楚应该采用的协议,否者事后跳出来说使用者抄袭,这就有点不太厚道了。

正确的理解开源协议

最后还是在做开源之前,理解一下开源协议,选择一个适合自己的。

下图是 @阮一峰 博客里绘制的一个开源协议的中文分析图,供大家参考。

并且还有一个网站也非常的好,可以帮助开发者了解应该使用何种协议,推荐给大家。

http://choosealicense.online/

最后,还是说一句,做开源,心态一定要摆正。俗话说的好:孩大不由娘。你发布出去的开源代码,最终衍生发展成什么,真的不是你能控制的了的。

from:http://zhuanlan.51cto.com/art/201709/550631.htm