<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Essay | Mobabel</title>
	<atom:link href="http://www.mobabel.net/category/essay/feed/?lang=en_uspage-11page-6page-7" rel="self" type="application/rss+xml" />
	<link>http://www.mobabel.net</link>
	<description>Just One Pure ITer</description>
	<lastBuildDate>Tue, 07 Jun 2022 00:03:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>
	<item>
		<title>结对编程到底行不行得通</title>
		<link>http://www.mobabel.net/%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b%e5%88%b0%e5%ba%95%e8%a1%8c%e4%b8%8d%e8%a1%8c%e5%be%97%e9%80%9a/</link>
					<comments>http://www.mobabel.net/%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b%e5%88%b0%e5%ba%95%e8%a1%8c%e4%b8%8d%e8%a1%8c%e5%be%97%e9%80%9a/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Mon, 02 Sep 2019 15:03:19 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4087</guid>

					<description><![CDATA[<p>&#160; &#160; 开发中适当放松 我的Apple Time &#160; Code Review最佳实践 代码审查</p>
The post <a href="http://www.mobabel.net/%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b%e5%88%b0%e5%ba%95%e8%a1%8c%e4%b8%8d%e8%a1%8c%e5%be%97%e9%80%9a/">结对编程到底行不行得通</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-5977" src="http://www.mobabel.net/wp-content/uploads/2019/09/02/4ffce04d92a4d6cb21c1494cdfcd6dc1_150328.gif" width="359" height="202" /></p>
<p><img decoding="async" class="alignnone size-full wp-image-5978" src="http://www.mobabel.net/wp-content/uploads/2019/09/02/4ffce04d92a4d6cb21c1494cdfcd6dc1_150340.gif" width="284" height="189" /></p>
<p>&nbsp;</p>
<p><a href="https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&amp;mid=2650712367&amp;idx=3&amp;sn=6ee96074bda199cbbaaeae468d1795cf&amp;chksm=bea6d8fc89d151ea06bbaf5ec1679967736b1be129a5965aba32f8ceca6bf5e7bfb056b54a93&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">开发中适当放松</a></p>
<p>我的Apple Time</p>
<p><img decoding="async" class="alignnone size-full wp-image-5979" src="http://www.mobabel.net/wp-content/uploads/2019/09/02/4ffce04d92a4d6cb21c1494cdfcd6dc1_150346.gif" width="350" height="193" /></p>
<p>&nbsp;</p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s/fLgaKGTed6Sw1ScB7Kb5MQ">Code Review最佳实践</a></p>
<p><a href="https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&amp;mid=2650711906&amp;idx=3&amp;sn=fc8c930f03c53fa86567a2fa15d0a62e&amp;chksm=bea6d6b189d15fa70c21555dbc6c5f497fc7bfd5fa82c8fea22e7e5bf060e5be1bcee7308821&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">代码审查</a></p>The post <a href="http://www.mobabel.net/%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b%e5%88%b0%e5%ba%95%e8%a1%8c%e4%b8%8d%e8%a1%8c%e5%be%97%e9%80%9a/">结对编程到底行不行得通</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b%e5%88%b0%e5%ba%95%e8%a1%8c%e4%b8%8d%e8%a1%8c%e5%be%97%e9%80%9a/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>中国程序员在德国究竟在做什么,说什么?</title>
		<link>http://www.mobabel.net/%e4%b8%ad%e5%9b%bd%e7%a8%8b%e5%ba%8f%e5%91%98%e5%9c%a8%e5%be%b7%e5%9b%bd%e7%a9%b6%e7%ab%9f%e5%9c%a8%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%8c%e8%af%b4%e4%bb%80%e4%b9%88%ef%bc%9f/</link>
					<comments>http://www.mobabel.net/%e4%b8%ad%e5%9b%bd%e7%a8%8b%e5%ba%8f%e5%91%98%e5%9c%a8%e5%be%b7%e5%9b%bd%e7%a9%b6%e7%ab%9f%e5%9c%a8%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%8c%e8%af%b4%e4%bb%80%e4%b9%88%ef%bc%9f/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Thu, 13 Jun 2019 21:32:00 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=5310</guid>

					<description><![CDATA[<p>今年5月27日, 一位据说在德国的中国程序员@将记忆深埋 在微博公布: “半年时间,100多TB数据, 利用1024、91、sex8、PronHub、xvideos 等网站采集的数据对比Facebook、instagram、TikTok 、抖音、微博等社交媒体。我们在全球范围内成功识别了10多万从事不可描述行业的小姐姐。” 热炒之下,这套Deep Learning系统瞬间炸了锅,顺便炸翻了在德国处于懵逼状态的一众平时安安静静老老实实的程序员:我们身边竟然藏着这样一个人?! 这引起了我对在德中国籍程序员的行业分类以及专业方向等相关数据的好奇。长期以来德国一直面临着劳动力短缺,特别是工程技术方向,尤其是IT专业人才的极度缺乏,以至于德国政府将这些专业的人才获得欧盟蓝卡的最低年薪标准降到了税前41808欧元(2019)。换句话说,软件信息专业的同学毕业后在德国很容易找到工作,并且获得蓝卡工作居留许可。近年来身边来自印度,俄罗斯,中国的程序员也在逐年增加。那么中国程序员在德国到底从事那些行业呢? 1. 蓝卡和德国程序员数据 先在网上找了一圈,没有找到特别针对中国籍程序员的数据分析,只找到关于蓝卡和在德国工作的程序员的数据分析。 1-1. 蓝卡数据 2013-2018年,超过76000外籍人员持蓝卡在德国工作。2017年德国共有21727外国人申请蓝卡工作签证,其中中国国籍申请者占了近10%。这说明仅2017年,就有二千多中国籍雇员申请了蓝卡,这其中IT从业者占比未知。假设IT软件信息领域的中国雇员只占比其中10%,那么过去五年中就有约800名中国籍程序员拿到蓝卡。实际上根据生活和工作的接触,我保守估计在德中国籍程序员数量超过1500人。 据2016年数据,欧盟蓝卡签证的所在申请国,84%位于德国,可以说几乎整个欧盟的外国工程师都来德国找工作了。 &#160; 1-2. 在德国工作的程序员数据 据 来自Stack Overflow的德国IT数据分析,2016年全德国有超过120000软件开发人员,2017年暴增超过820000。不过82万这个数字不可信,毕竟德国总人口才八千多万,如果是将近1%的占比,德国不至于一直闹码农荒。可信的十几万程序员中,软件开发方向数据如下:Web开发占比65.51%,系统管理员位居第二,数据库管理员第三。仅仅这三个方向就吃掉了75%的占比,为什么德国程序员看起来很偏科,爆火的机器学习和数据分析才各占4%左右。 这是因为德国IT行业大多为德国的支柱产业服务,如汽车,制药,机械,电子等,这些公司所需的企业内部管理软件如今多为SAAS构架,同时因为传统行业对云服务的怀疑和不信任态度,亦或安全原因,他们又维护着大量的企业私有服务器,和企业级数据库。所以不难理解前三甲总合占比之大。 虽说国内的移动开发趋势这两年有点弱,但德国的iOS和Android移动开发就从来没有强过,因为缺乏B2C土壤,传统企业一般也不重视移动开发(未必需要),相关产业很多都外包于东欧或者印度,中国的团队。 &#160; &#160; 2. 在德中国程序员数据分析 网络上暂时没有发现任何关于这些可能存在的1500名中国程序员的数据,这就尴尬了,没数据怎么分析? &#8212;-本文只好结束&#8212;- &#160; &#160; &#160;&#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e4%b8%ad%e5%9b%bd%e7%a8%8b%e5%ba%8f%e5%91%98%e5%9c%a8%e5%be%b7%e5%9b%bd%e7%a9%b6%e7%ab%9f%e5%9c%a8%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%8c%e8%af%b4%e4%bb%80%e4%b9%88%ef%bc%9f/">中国程序员在德国究竟在做什么,说什么?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<p>今年5月27日, 一位据说在德国的中国程序员@将记忆深埋 在微博公布:</p>
<blockquote><p>“半年时间,100多TB数据, 利用1024、91、sex8、PronHub、xvideos 等网站采集的数据对比Facebook、instagram、TikTok 、抖音、微博等社交媒体。我们在全球范围内成功识别了10多万从事不可描述行业的小姐姐。”</p></blockquote>
<p>热炒之下,这套Deep Learning系统瞬间炸了锅,顺便炸翻了在德国处于懵逼状态的一众平时安安静静老老实实的程序员:我们身边竟然藏着这样一个人?!</p>
<p>这引起了我对在德中国籍程序员的行业分类以及专业方向等相关数据的好奇。长期以来德国一直面临着劳动力短缺,特别是工程技术方向,尤其是IT专业人才的极度缺乏,以至于德国政府将这些专业的人才获得欧盟蓝卡的最低年薪标准降到了税前41808欧元(2019)。换句话说,软件信息专业的同学毕业后在德国很容易找到工作,并且获得蓝卡工作居留许可。近年来身边来自印度,俄罗斯,中国的程序员也在逐年增加。那么中国程序员在德国到底从事那些行业呢?<span id="more-5310"></span></p>
<h1 id='1-蓝卡和德国程序员数据'  id="boomdevs_1" style="text-align: center;" >1. 蓝卡和德国程序员数据</h1>
<p>先在网上找了一圈,没有找到特别针对中国籍程序员的数据分析,只找到关于蓝卡和在德国工作的程序员的数据分析。</p>
<h2 id='1-1-蓝卡数据'  id="boomdevs_2" style="text-align: center;" >1-1. 蓝卡数据</h2>
<p>2013-2018年,超过76000外籍人员持蓝卡在德国工作。2017年德国共有21727外国人申请蓝卡工作签证,其中中国国籍申请者占了近10%。这说明仅2017年,就有二千多中国籍雇员申请了蓝卡,这其中IT从业者占比未知。假设IT软件信息领域的中国雇员只占比其中10%,那么过去五年中就有约800名中国籍程序员拿到蓝卡。实际上根据生活和工作的接触,我保守估计在德中国籍程序员数量超过<strong>1500</strong>人。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5353" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/9e083af6552bd314b5c88c6d6af25187_213201.jpg" alt="The diagram shows how many EU Blue Cards were issued in 2014-2017." width="480" height="329" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/9e083af6552bd314b5c88c6d6af25187_213201.jpg 480w, http://www.mobabel.net/wp-content/uploads/2019/06/13/9e083af6552bd314b5c88c6d6af25187_213201-300x206.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5354" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/66f4275f66a4151886563b9c631003c0_213204.jpg" alt="A pie chart shows the breakdown of EU Blue Card recipients and their nationalities." width="533" height="320" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/66f4275f66a4151886563b9c631003c0_213204.jpg 533w, http://www.mobabel.net/wp-content/uploads/2019/06/13/66f4275f66a4151886563b9c631003c0_213204-300x180.jpg 300w" sizes="(max-width: 533px) 100vw, 533px" /></p>
<p>据2016年数据,欧盟蓝卡签证的所在申请国,84%位于德国,可以说几乎整个欧盟的外国工程师都来德国找工作了。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5355" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/ebe6aec049f447e0b5df780ccfed7e1e_213211.jpg" alt="A pie chart shows which EU countries issue what shares of EU Blue Cards." width="480" height="320" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/ebe6aec049f447e0b5df780ccfed7e1e_213211.jpg 480w, http://www.mobabel.net/wp-content/uploads/2019/06/13/ebe6aec049f447e0b5df780ccfed7e1e_213211-300x200.jpg 300w" sizes="(max-width: 480px) 100vw, 480px" /></p>
<p>&nbsp;</p>
<h2 id='1-2-在德国工作的程序员数据'  id="boomdevs_3" style="text-align: center;" >1-2. 在德国工作的程序员数据</h2>
<p>据 来自Stack Overflow的德国IT数据分析,2016年全德国有超过120000软件开发人员,2017年暴增超过820000。不过82万这个数字不可信,毕竟德国总人口才八千多万,如果是将近1%的占比,德国不至于一直闹码农荒。可信的十几万程序员中,软件开发方向数据如下:Web开发占比65.51%,系统管理员位居第二,数据库管理员第三。仅仅这三个方向就吃掉了75%的占比,为什么德国程序员看起来很偏科,爆火的机器学习和数据分析才各占4%左右。</p>
<p>这是因为德国IT行业大多为德国的支柱产业服务,如汽车,制药,机械,电子等,这些公司所需的企业内部管理软件如今多为SAAS构架,同时因为传统行业对云服务的怀疑和不信任态度,亦或安全原因,他们又维护着大量的企业私有服务器,和企业级数据库。所以不难理解前三甲总合占比之大。</p>
<p>虽说国内的移动开发趋势这两年有点弱,但德国的iOS和Android移动开发就从来没有强过,因为缺乏B2C土壤,传统企业一般也不重视移动开发(未必需要),相关产业很多都外包于东欧或者印度,中国的团队。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5356" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screen-Shot-2017-11-27-at-13.23.55_213217.png" alt="Screen Shot 2017-11-27 at 13.23.55.png" width="640" height="492" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screen-Shot-2017-11-27-at-13.23.55_213217.png 640w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screen-Shot-2017-11-27-at-13.23.55_213217-300x231.png 300w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1 id='2-在德中国程序员数据分析'  id="boomdevs_4" style="text-align: center;" >2. 在德中国程序员数据分析</h1>
<p>网络上暂时没有发现任何关于这些可能存在的<strong>1500</strong>名中国程序员的数据,这就尴尬了,没数据怎么分析?</p>
<p style="text-align: center;"><strong>&#8212;-本文只好结束&#8212;-</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>等等,平时管理的几个德国的IT行业微信群不就是最好的数据源?群友加起来也有500多人了,样本虽不大,但毕竟还是遵循正态分布的。不过必须用Python 3开发一套脚本来收集和处理相关数据。</p>
<h2 id="boomdevs_5" style="text-align: center;">2-1. 在德中国程序员做什么:<br />
专业方向&amp;工作领域&amp;开发语言和框架</h2>
<h3 id='2-1-1-数据采集'  id="boomdevs_6" style="text-align: center;" >2-1-1. 数据采集</h3>
<p>如果使用匿名调查报告方式,扰民且又费时费力,此类信息只能从群昵称上打主意了,首先是发群公告规范群友昵称标准:</p><pre class="crayon-plain-tag">昵称|行业或专业领域|擅长开发框架或语言
举例:
小呆|学生|想找数据分析工作
中二|前端|nodejs, react
大傻|机器学习|nlp
老痴|自动驾驶|c++</pre><p>大部分群友按标准改了昵称,但是还有一部分死硬派坚决不改,又不能经常发群消息提醒,只能开发机器人自动提醒了。<a href="https://wxpy.readthedocs.io/zh/latest/">微信机器人wxpy</a>是一个包装得非常简洁的微信个人号 API, 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展,一些常见的场景:</p>
<ul class="simple">
<li>运行脚本时自动把日志发送到你的微信</li>
<li>群成员信息获取,邀请或者踢人</li>
<li>跨号或跨群转发消息</li>
<li>监听群聊或者单聊的信息</li>
<li>通过脚本和第三方API交互,比如图灵聊天机器人,智能办公,智能家居</li>
</ul>
<h4 id='2-1-1-1-开发需求'  id="boomdevs_7" >2-1-1-1. 开发需求</h4>
<ol>
<li>获取群聊群成员信息</li>
<li>找出所有群昵称不符合标准的群友</li>
<li>随机抽取5人,在群里发布改昵称提醒消息</li>
<li>同时将这次提醒的5人,存储进数据库</li>
<li>每天早八点晚八点两次定时启动昵称检查脚本</li>
<li>某人在将来被提醒次数超过10次,还不予配合不改昵称时,将自动踢出群</li>
<li>新群友被邀请进入群时,立刻发送群规提示改昵称</li>
</ol>
<h4 id='2-1-1-2-开发分解'  id="boomdevs_8" >2-1-1-2. 开发分解</h4>
<p>该任务所需第三方库如下:</p><pre class="crayon-plain-tag">pip3 install wxpy
pip3 install apscheduler
pip3 install pymysql
pip3 install DBUtils</pre><p><strong>1. 建库建表</strong></p>
<p>本文采用的是MySQL,后期可以扩展支持Postgre或者MongoDB。</p>
<p>因为需要存储微信表情字符集,所以表的默认编码采用utf8mb4_unicode_ci。</p><pre class="crayon-plain-tag">DROP TABLE IF EXISTS `wx_chat_group`;
CREATE TABLE `wx_chat_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(64) COLLATE utf8mb4_unicode_ci  NOT NULL DEFAULT '',
  PRIMARY KEY `id` (`id`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_unicode_ci;

INSERT INTO `wx_chat_group` (`id`, `name`) VALUES (1, '德国IT职业信息分享群');

-- 每次抽取的不合规格的昵称将存储如表以供计数
DROP TABLE IF EXISTS `wx_chat_nickname_check`;
CREATE TABLE `wx_chat_nickname_check` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `group_id` int(9) UNSIGNED NOT NULL,
  `wx_puid` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `nickname` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create time',
  PRIMARY KEY `id` (`id`),
  INDEX `idx_group_id` (`group_id`),
  INDEX `idx_create_time` (`create_time`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_unicode_ci;</pre><p><strong>2. 用户设置</strong></p>
<p>所有用户自定义变量存入conf文件里,如群名,临时存储路径,数据库接入信息,踢人阈值:</p><pre class="crayon-plain-tag">[wechat]
group_name_1=德国IT职业信息分享群
group_id_1=1

path_tmp=/opt/tmp/

notice_random=5
kick_max=10
tuling_api_key=xxxxx

[mysql]
mysql_host=localhost
mysql_port=3306
mysql_user=root
mysql_pwd=xxxx
mysql_database=wechat_group_ibot</pre><p><strong>3. 监听群消息</strong></p>
<p>初始化群聊对象,并且监听群消息</p><pre class="crayon-plain-tag"># 查找群聊,并且设置附加属性,以备后用
def init_group(group_name, group_id):
    group = ensure_one(bot.groups().search(group_name))
    group.ext_attr = lambda: None
    setattr(group.ext_attr, 'group_id', group_id)
    setattr(group.ext_attr, 'group_name', group_name)
    return group

# 初始化微信机器人bot
bot = Bot(cache_path=True, console_qr=True)
# unique chat person's id
bot.enable_puid()

# 读取自定义参数
cf = configparser.ConfigParser()
cf.read('wechat.conf')
group_name_1 = cf.get('wechat', 'group_name_1')
group_id_1 = cf.get('wechat', 'group_id_1')

# 初始化群聊对象
group_1 = init_group(group_name_1, group_id_1)

# 监听类型为NOTE的群消息,如:"aa"邀请"bbb"加入了群聊
@bot.register(group_1, NOTE)
def welcome_for_group(msg):
    try:
        new_member_name = re.search(r'邀请"(.+?)"|"(.+?)"通过', msg.text).group(1)
    except AttributeError:
        return
    group_1.send(welcome_text.format(new_member_name, space_after_chat_at))


# 保持bot持续运行
bot.join()</pre><p><strong>4. 昵称检查</strong></p>
<p>检查群友昵称,存入数据库并且发送提醒,  具体逻辑代码这里不予累述。</p><pre class="crayon-plain-tag">def check_nickname(nickname):
 # 正则检验群昵称是否标准
 if re.match(r'([\u4e00-\u9fa5]|[ -~]|[\s\S])+\|([\u4e00-\u9fa5]|[ -~])+\|([\u4e00-\u9fa5]|[ -~])+', nickname):
        return True
    else:
        return False

......

# 检查群友昵称
def process_group_members(group):
    # 每次检查前先刷新群成员信息,避免用户改了昵称后再次被提醒
    # 但刷新会改变成员临时的内部puid,所以检查昵称必须同时结合puid和nickname
    group.update_group(members_details=False)
    ......
    for member in group:
        nickname = member.name
        wx_puid = member.puid
        if not check_nickname(nickname):
            invalid_member = GroupMember(nickname, wx_puid, 0)
            invalid_members.append(invalid_member)

   .....
   # 随机抽取不合格的5人
   random_members = random.sample(invalid_members, k=5)
   ......


# 将本次提醒群友存入数据库,供下次计数
def insert_invalid_name(group_id, wx_puid, nickname):
    bot_db.execute("INSERT INTO wx_chat_nickname_check (`group_id`, `wx_puid`, `nickname`)"
                   " VALUES (%s, %s, %s)",
                   (group_id, wx_puid, nickname))

# 获取昵称不合规群友被提醒计数
def get_invalid_name_count(group_id, wx_puid, nickname):
    result = bot_db.get_count("SELECT id FROM wx_chat_nickname_check "
                              "WHERE group_id = %s and (wx_puid = %s or nickname = %s)", (group_id, wx_puid, nickname))
    return result</pre><p><strong>5. 数据库连接池</strong></p>
<p>这里的数据库连接使用了数据库连接池:DBUtils.PersistentDB</p>
<ul>
<li>DBUtils.PooledDB: 适用于多线程频繁开启关闭数据库连接</li>
<li>DBUtils.PersistentDB:适用于单线程多次频繁连接数据库</li>
</ul>
<p>如果不采用线程池而是采取直连,那么运行一段时间后,脚本将出现该错误</p><pre class="crayon-plain-tag">pymysql.err.OperationalError: 2006</pre><p>这里将DBUtils再次封装了一下,写了一个单例模式BotDatabase, 提供了query(select), execute(update, delete) 以及批处理execute等常用接口。</p>
<p><strong>6. 启动定时器</strong></p><pre class="crayon-plain-tag"># 早八点晚八点各执行检查一次
def start_schedule_for_checking_member(group):
    scheduler = BlockingScheduler()
    scheduler.add_job(lambda: process_group_members(group), 'cron', hour=8, minute=1, timezone="Europe/Paris")
    scheduler.add_job(lambda: process_group_members(group), 'cron', hour=20, minute=1, timezone="Europe/Paris")</pre><p></p>
<h4 id='2-1-1-3-最终成果'  id="boomdevs_9" >2-1-1-3. 最终成果</h4>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/61560371107_.pic_.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-5323" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/61560371107_.pic_.jpg" alt="" width="276" height="534" /> </a><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/71560371108_.pic_.jpg">  <img loading="lazy" decoding="async" class="alignnone wp-image-5324" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/71560371108_.pic_.jpg" alt="" width="275" height="489" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/71560371108_.pic_.jpg 375w, http://www.mobabel.net/wp-content/uploads/2019/06/12/71560371108_.pic_-169x300.jpg 169w" sizes="(max-width: 275px) 100vw, 275px" /></a></p>
<h4 id='2-1-1-4-已知问题'  id="boomdevs_10" >2-1-1-4. 已知问题</h4>
<ul>
<li>在消息中输入 @群员昵称 并不能真正让该群友收到@提示(显示推送提示),微信App里是在@群员昵称后自动加上了一个特殊的显示空白的字符<strong>u&#8217;\u2005&#8242;</strong>。但是经测试,加上这个符号也不行,推测是微信Web API基于防范垃圾推送,屏蔽了群提示接口。</li>
<li>wxpy的bot在运行一段时间后会停止工作,出现连接服务器错误,必须重新登录,推测是微信Web API的Session安全机制导致的问题。</li>
</ul>
<p>&nbsp;</p>
<h3 id='2-1-2-数据清洗'  id="boomdevs_11" style="text-align: center;" >2-1-2. 数据清洗</h3>
<p>一段时间后大部分群友修改了昵称,于是有了在德中国程序员职业和专业方向的数据,经清洗后,导出CSV规格如下。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/member_list_csv.jpg"><img loading="lazy" decoding="async" class="size-full wp-image-5325 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/member_list_csv.jpg" alt="" width="484" height="230" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/member_list_csv.jpg 484w, http://www.mobabel.net/wp-content/uploads/2019/06/12/member_list_csv-300x143.jpg 300w" sizes="(max-width: 484px) 100vw, 484px" /></a></p>
<p>&nbsp;</p>
<h3 id='2-1-3-数据分析'  id="boomdevs_12" style="text-align: center;" >2-1-3. 数据分析</h3>
<p>该任务所需第三方库如下:</p><pre class="crayon-plain-tag">pip3 install pandas
pip3 install matplotlib
pip3 install jieba
pip3 install wordcloud
pip3 install seaborn
pip3 install palettable</pre><p></p>
<h4 id='2-1-3-1-开发需求'  id="boomdevs_13" >2-1-3-1. 开发需求</h4>
<ol>
<li>在德程序员男女比例</li>
<li>在德IT软件专业在职和学生比例</li>
<li>分析在德程序员所处行业和专业方向</li>
<li>程序猿和程序媛所处行业和专业方向对比</li>
<li>分析在德程序员常用开发语言和框架</li>
<li>程序猿和程序媛常用开发语言和框架对比</li>
<li>在职和学生常用开发语言和框架对比</li>
</ol>
<h4 id='2-1-3-2-开发分解'  id="boomdevs_14" >2-1-3-2. 开发分解</h4>
<p><strong>1. 在德程序员男女比例,输出Pie Chart</strong></p><pre class="crayon-plain-tag">def gen_pie_member_gender(self, csv_file):
        df = pd.read_csv(csv_file, delimiter='\t', encoding='utf-8')

        genders = df['gender']
        col = [0, 0, 0]
        for g in genders:
            if g == 1:
                col[0] = col[0] + 1
            elif g == 2:
                col[1] = col[1] + 1
            else:
                col[2] = col[2] + 1

        perccent_male = '{0:.2f}%'.format((col[0]/len(genders) * 100))
        perccent_female = '{0:.2f}%'.format((col[1]/len(genders) * 100))
        perccent_unknown = '{0:.2f}%'.format((col[2]/len(genders) * 100))

        labels = [r'Male %s' % perccent_male,
                  r'Female %s' % perccent_female,
                  r'Unknown %s' % perccent_unknown]
        colors = ['lightskyblue', 'pink', 'gold']

        plt.figure(figsize=(8, 6))
        patches, texts = plt.pie(col, colors=colors, startangle=90)
        plt.legend(patches, labels, loc="best")
        plt.title('Gender of Member')
        # Set aspect ratio to be equal so that pie is drawn as a circle.
        plt.axis('equal')
        plt.tight_layout()

        path_image = os.path.join(self.path_analyse,
                                  '%s_member_gender_pie.png' % self.group_id)

        plt.savefig(path_image, format='png', dpi=100)
        plt.close()
        return path_image</pre><p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_gender_pie-1.png"><img loading="lazy" decoding="async" class="wp-image-5327 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_gender_pie-1.png" alt="" width="442" height="334" /></a></p>
<p><strong>分析:</strong></p>
<p>在德中国程序猿和程序媛比率约为2:1,这个比例基本和中国籍蓝卡申请人男女比率持平。但是根据2018年中国程序员数据调查表,中国程序员群体中男女比例接近12:1。德国的各位猿,你们就偷乐吧。</p>
<p>&nbsp;</p>
<p><strong>2. 在德IT软件专业在职人员和学生比例,输出Pie Chart</strong></p>
<p>代码和上面雷同。</p>
<p style="text-align: center;"><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_occupation_pie.png"><img loading="lazy" decoding="async" class="alignnone wp-image-5328" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_occupation_pie.png" alt="" width="438" height="336" /></a></p>
<p><strong>分析:</strong></p>
<p>IT信息行业在职工作人员和在读学生比率为9比1,绝大部分人是在职工作的。</p>
<p>&nbsp;</p>
<p><strong>3. 在德程序员所处行业和专业方向,输出词云</strong></p><pre class="crayon-plain-tag"># 这里采用一个汉字停词库,近两千词
    @staticmethod
    def load_stopwords():
        filepath = os.path.join('./assets', r'stopwords_cn.txt')
        stopwords = [line.strip() for line in open(filepath, encoding='utf-8').readlines()]
        return stopwords

    def gen_wordcloud_info_nicknames(self, csv_file, column='branch', gender='all'):
        df = pd.read_csv(csv_file, delimiter='\t', encoding='utf-8')

        stopwords = set(STOPWORDS)
        stopwords.update(self.load_stopwords())
        # 可添加一些额外stopword,过滤词云结果
        stopwords.add('学生')

        #自定义jieba分词词库,定义一些IT软件特殊术语
        jieba.load_userdict("./assets/jieba_userdict.txt")

        col = df[column]
        # 将词云按限定图形布局
        shape_file = './assets/member_info_shape.png'
           
        word_count = ""
        for c in col:
            if c is not np.NaN:
                seg_list = jieba.cut(c, cut_all=False, HMM=True)
                for word in seg_list:
                    word_count = word_count + word + " "

        mask = np.array(Image.open(shape_file))
        font = r'./assets/heiti.ttf'

        word_cloud = WordCloud(
            margin=0,
            mask=mask,
            font_path=font,
            scale=1,
            stopwords=stopwords,
            random_state=42,
            background_color='white'
        ).generate(word_count)

        path_image = os.path.join(self.path_analyse,
                                  '%s_member_word_cloud_%s_%s.png' % (self.group_id, column, gender))

        word_cloud.to_file(path_image)

        return path_image</pre><p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_all-2.png"><img loading="lazy" decoding="async" class="size-full wp-image-5343 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_all-2.png" alt="" width="800" height="600" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_all-2.png 800w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_all-2-300x225.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_all-2-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<p><strong>分析:</strong></p>
<ol>
<li>大数据,数据分析,数据挖掘</li>
<li>机器学习ML,人工智能AI,深度学习</li>
<li>汽车,自动驾驶,CV(机器视觉)</li>
</ol>
<p>这三个大方向占比最大,说明中国码农在德国还是跟得上软件信息时代的变革的,并没有像一般德国码农那样一个技术吃一辈子。基于德系汽车制造业在电动车和自动驾驶领域的研发投入加重,越来越多的程序员也向这几个领域转型。一些传统企业如制造业,也开始用大数据来发现生产中潜在的工艺改进,或提前故障预警。</p>
<p>云计算,和以上三个方向密切相关,从业人员却不多。这可能是因为德国本土鲜有自己的大规模云计算服务商,很多企业没有自己的私有云,而将云服务部署在AWS上,如AWS就和奔驰,大众等汽车厂商达成了云数据等方向的深度合作。</p>
<p>互联网,电商这些领域在我另一篇文章《<a href="https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&amp;mid=2650715829&amp;idx=1&amp;sn=4533f979033ac73fb3061ee1048c01a3&amp;chksm=bea6c76689d14e70233f7c1f2a4281d355ccb6722fd4d8c3657b2c8a82eed957caa5159f7535&amp;scene=21#wechat_redirect">中国程序员在德国</a>》里提过,在德国属于荒漠地带,从业人员数量少可以预见。</p>
<p>咨询和SAP这两个领域,在德国企业里可以说是四平八稳,很多德国传统企业的IT项目多为外包,自己的IT团队只负责管理和规划,所以专业咨询人员必不可少。同时SAP系统在德国各行业的占有率非常高,而且SAP的定制功能强大,包罗万象,可以说,如果不考虑开发时间和成本,你想要什么流程,SAP都能给你二次开发出来。</p>
<p>经济,金融,银行,由于英国脱欧,大批金融机构从伦敦搬到法兰克福,对程序员也是求贤若渴。</p>
<p>图中还出现了区块链倔强而顽强的身影。</p>
<p>&nbsp;</p>
<p><strong>4. 程序猿和程序媛所处行业和专业方向对比,导出云图</strong></p>
<p>处理步骤和上述雷同,所以将gen_wordcloud_info_nicknames进行扩展,按branch或者language过滤数据源。</p><pre class="crayon-plain-tag">......

        if gender == 'male':
            df_male = df[df.gender == 1]
            col = df_male[column]
            shape_file = './assets/member_%s_%s_shape.png' % (column, gender)
        elif gender == 'female':
            df_male = df[df.gender == 2]
            col = df_male[column]
            shape_file = './assets/member_%s_%s_shape.png' % (column, gender)
        else:
            col = df[column]
            shape_file = './assets/member_info_shape.png'
......</pre><p>生成图片:</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_old.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5332" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_old.png" alt="" width="817" height="622" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_old.png 817w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_old-300x228.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_member_word_cloud_branch_old-768x585.png 768w" sizes="(max-width: 817px) 100vw, 817px" /></a></p>
<p>嗯?这是什么鬼,这两坨哪里能看出男女区别了?!</p>
<p>作为有着钢铁直男审美的程序员决不能容忍这么丑陋的数据呈现,好在Python支持透明PNG图片叠加,先准备相应的Alpha透明度较高的图片。</p><pre class="crayon-plain-tag"># 加载透明背景图片
        if gender == 'male':
            ......
            shape_alpha_file = './assets/member_%s_%s_shape_alpha.png' % (column, gender)
        elif gender == 'female':
            ......
            shape_alpha_file = './assets/member_%s_%s_shape_alpha.png' % (column, gender)
        else:
            ......
            shape_alpha_file = './assets/member_info_shape_alpha.png'        
       ......

       # 预定义词云输出颜色集范围,突出男女有别
       if gender == 'male':
            word_cloud.recolor(color_func=self.color_func_blue, random_state=3)
        elif gender == 'female':
            word_cloud.recolor(color_func=self.color_func_red, random_state=3)

        word_cloud.to_file(path_image)

        # 将透明背景图叠加到云图上
        background = Image.open(path_image)
        foreground = Image.open(shape_alpha_file)
        background.paste(foreground, (0, 0), foreground)
        background.save(path_image)</pre><p>&nbsp;</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21.png"><img loading="lazy" decoding="async" class="size-full wp-image-5344 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21.png" alt="" width="1612" height="1242" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21.png 1612w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21-300x231.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21-768x592.png 768w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-15.43.21-1024x789.png 1024w" sizes="(max-width: 1612px) 100vw, 1612px" /></a></p>
<p>这下数据呈现美观且直观多了。</p>
<p><strong>分析:</strong></p>
<ul>
<li>在大数据,数据挖掘分析,机器学习上,猿媛平分秋色</li>
<li>自动驾驶和机器视觉CV,猿占比稍微多一点</li>
<li>媛更爱ERP,CRM,VWL,仓管,MES等企业级软件系统领域,还有BI和SAP领域</li>
<li>软件测试少不了程序媛妹子</li>
<li>比较意外的是从事嵌入式开发的女汉子不少</li>
<li>猿从事的专业领域更广,不过这也可能是采样数据不够大的原因</li>
</ul>
<p>&nbsp;</p>
<p><strong>5.  在德程序员常用开发语言和框架</strong></p>
<p>下面这三个分析代码一致,这里只贴出数据结果。</p>
<p style="text-align: center;">5.1 在德程序员常用开发语言和框架</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/1_member_word_cloud_language_all.png"><img loading="lazy" decoding="async" class="size-full wp-image-5345 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/1_member_word_cloud_language_all.png" alt="" width="800" height="600" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/1_member_word_cloud_language_all.png 800w, http://www.mobabel.net/wp-content/uploads/2019/06/13/1_member_word_cloud_language_all-300x225.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/13/1_member_word_cloud_language_all-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<p><strong>分析:</strong></p>
<ol>
<li>得益于大数据和AI的火热,Python当仁不让位居第一。</li>
<li>Java,C和C++并驾齐驱。<br />
Java是德国传统企业里企业级应用系统开发语言首选,出于系统稳定和兼容性考虑<br />
C++和C在自动驾驶,医疗,机械,嵌入式系统领域是不可替代的<br />
当然不能忘了.Net在工业界PLC系统里基本是霸主地位</li>
<li>Angualr,React,Vue,Jquery,Typescript在企业级应用前端开发里使用广泛</li>
<li>移动开发iOS和Android基本绝迹,原因之前也提了。</li>
</ol>
<p>以上占比分布基本是符合德国六个行业开发语言占比率的,依次为软件开发,信息技术,电商,汽车,咨询,金融。稍微反常的是德国的中国程序员在工作使用PHP的不多,可是会PHP在德国也是很容易找工作的嘛。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.26.08.png"><img loading="lazy" decoding="async" class=" wp-image-5349 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.26.08.png" alt="" width="743" height="604" /></a></p>
<p style="text-align: center;">5.2 程序猿和程序媛常用开发语言和框架对比</p>
<p style="text-align: center;"><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5348" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22.png" alt="" width="1808" height="1414" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22.png 1808w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22-300x235.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22-768x601.png 768w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.21.22-1024x801.png 1024w" sizes="(max-width: 1808px) 100vw, 1808px" /></a></p>
<p><strong>分析:</strong></p>
<ul>
<li>猿偏向后端开发,媛偏向前端开发</li>
<li>在Java,C++,C上,猿媛旗鼓相当</li>
<li>在数据库管理和SQL使用上,媛稍微多一点</li>
<li>总体来说,在德程序媛的能力并不比程序猿弱,技术栈相当广,德国不愧是培养理工女汉子的国度。</li>
</ul>
<p>&nbsp;</p>
<p style="text-align: center;">5.3 在职人员和学生常用开发语言和框架对比</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02.png"><img loading="lazy" decoding="async" class="size-full wp-image-5347 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02.png" alt="" width="1662" height="1166" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02.png 1662w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02-300x210.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02-768x539.png 768w, http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-16.00.02-1024x718.png 1024w" sizes="(max-width: 1662px) 100vw, 1662px" /></a></p>
<p><strong>分析:</strong></p>
<p>加上这个对比,是因为之前担心一些热门语言是因为在读学生用得多,才占比高。不过从这个图看来,程序员们在工作中是确确实实使用到了这些技术栈,并不只停留在大学和科研领域。</p>
<p>&nbsp;</p>
<h2 id='2-2-在德中国程序员说什么-聊天数据分析'  id="boomdevs_15" style="text-align: center;" >2-2. 在德中国程序员说什么:聊天数据分析</h2>
<p>以上知道了在德中国程序员们做什么,那么来看看他们平时聊什么?</p>
<h3 id='2-2-1-数据采集'  id="boomdevs_16" style="text-align: center;" >2-2-1. 数据采集</h3>
<h4 id='2-2-1-1-开发需求'  id="boomdevs_17" >2-2-1-1. 开发需求</h4>
<ol>
<li>监听并记录群聊入库</li>
</ol>
<p><strong>开发分解</strong></p>
<p><strong>1. 首先建表</strong></p><pre class="crayon-plain-tag">DROP TABLE IF EXISTS `wx_chat_history`;
CREATE TABLE `wx_chat_history` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `group_id` int(9) UNSIGNED NOT NULL,
  `msg_type` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Text',
  `wx_puid` VARCHAR(16) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `gp_user_name` VARCHAR(70) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `sender_name` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `receiver_name` VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `msg` VARCHAR(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Create time',
  PRIMARY KEY `id` (`id`),
  INDEX `idx_group_id` (`group_id`),
  INDEX `idx_create_time` (`create_time`)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_unicode_ci;</pre><p><strong>2. 数据持久化</strong></p>
<p>通过监听群消息,将获取的消息录入数据库。</p><pre class="crayon-plain-tag"># 将puid,nickname,消息等相应数据存入数据库
def insert_chat_history(group_id, msg_type, wx_puid, gp_user_name, sender_name, receiver_name, msg):
    bot_db.execute("INSERT INTO wx_chat_history (`group_id`, `msg_type`, `wx_puid`, "
                   "`gp_user_name`, `sender_name`, `receiver_name`, `msg`)"
                   " VALUES (%s, %s, %s, %s, %s, %s, %s)",
                   (group_id, msg_type, wx_puid, gp_user_name, sender_name, receiver_name, msg))


def save_message(msg, group_id):
    # create_time = msg.create_time.strftime('%Y-%m-%d %H:%M:%S')
    member_name = msg.member.name
    wx_puid = msg.member.puid
    gp_user_name = msg.member.user_name
    message = ''
    # 常规消息
    if msg.type == TEXT:
        message = msg.text
    # 分享链接
    elif msg.type == SHARING:
        art_list = msg.articles
        for item in art_list:
            print(item.url + ' ' + item.title + ' ' + item.summary)
            message = item.url + '||' + item.title + '||' + item.summary

    insert_chat_history(group_id, msg.type, wx_puid, gp_user_name, member_name, '', message)


# 监听群聊,包含自己发送的消息
@bot.register(group_1, except_self=False)
def reg_msg_for_group(msg):
    save_message(msg, group_id_1)

# keep login by block thread
bot.join()</pre><p>&nbsp;</p>
<h3 id='2-2-2-数据清洗'  id="boomdevs_18" style="text-align: center;" >2-2-2. 数据清洗</h3>
<p>定义函数,可以从数据库里提取指定时间段(如一个月)的数据,并生成csv以供下一步使用。</p><pre class="crayon-plain-tag">def save_chat_in_current_month(self, group_id):
        results = self.load_chat_history(group_id, self.fl_days[0], self.fl_days[1])
        path_csv_file = os.path.join(self.path_analyse,
                                     '%s_chat_%s_%s.csv' % (self.group_id, self.fl_days[0], self.fl_days[1]))

        with open(path_csv_file, mode='w', encoding='utf-8') as csv_file:
            fieldnames = ['id', 'create_time', 'msg_type', 'wx_puid', 'sender_name', 'msg']
            csv_writer = csv.writer(csv_file, delimiter='\t', quotechar='"', quoting=csv.QUOTE_MINIMAL)

            csv_writer.writerow(fieldnames)
            for row in results:
                row_id = row[0]
                msg_type = row[1]
                wx_puid = row[2]
                sender_name = row[3]
                msg = row[4]
                create_time = row[5]
                msg = self.format_message(msg)
                csv_writer.writerow([row_id, create_time, msg_type, wx_puid, sender_name, msg])

        csv_file.close()

        return path_csv_file</pre><p>最终生成的CSV格式文件:</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/chat_history_csv.jpg"><img loading="lazy" decoding="async" class="size-full wp-image-5337 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/chat_history_csv.jpg" alt="" width="461" height="121" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/chat_history_csv.jpg 461w, http://www.mobabel.net/wp-content/uploads/2019/06/12/chat_history_csv-300x79.jpg 300w" sizes="(max-width: 461px) 100vw, 461px" /></a></p>
<h3 id='2-2-3-数据分析'  id="boomdevs_19" style="text-align: center;" >2-2-3. 数据分析</h3>
<h4 id='2-2-3-1-开发需求'  id="boomdevs_20" >2-2-3-1. 开发需求</h4>
<ol>
<li>生成话题词云</li>
<li>分析消息种类占比</li>
<li>分析日均聊天曲线</li>
<li>分析群员聊天活跃时间热点图</li>
</ol>
<p><strong>开发分解</strong></p>
<p><strong>1. 话题词云</strong></p>
<p>相关代码和上面相近,生成的云图:</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_word_cloud_2019-05-01_2019-06-30.png"><img loading="lazy" decoding="async" class="size-full wp-image-5338 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_word_cloud_2019-05-01_2019-06-30.png" alt="" width="800" height="600" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_word_cloud_2019-05-01_2019-06-30.png 800w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_word_cloud_2019-05-01_2019-06-30-300x225.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_word_cloud_2019-05-01_2019-06-30-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<p><strong>分析:</strong></p>
<ul>
<li>德国中国两者工作生活的对比是永恒的话题,到底回国还是留德,经常是热点。</li>
<li>因为是职业群,所以大部分话题还是集中在职场:公司,工作,老板,工资,技术</li>
<li>IT领域不得不提领头羊美国,包括硅谷的工资。</li>
<li>讨论贸易战少不了华为</li>
<li>创业目前在留德华中也是个热门话题</li>
</ul>
<p>&nbsp;</p>
<p><strong>2. 消息种类占比,生成Bar Chart</strong></p><pre class="crayon-plain-tag">def gen_bar_plot_msg_type(self, csv_file):
        df = pd.read_csv(csv_file, delimiter='\t', encoding='utf-8')

        df['msg_type'].value_counts().plot(kind='bar')

        plt.subplots_adjust(bottom=0.2)
        plt.title('Message Type [%s - %s]' % (self.fl_days[0], self.fl_days[1]))
        path_image = os.path.join(self.path_analyse,
                                  '%s_chat_msg_type_bar_%s_%s.png' % (self.group_id, self.fl_days[0], self.fl_days[1]))
        plt.savefig(path_image)
        plt.close()

        return path_image</pre><p><strong><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_msg_type_bar_2019-05-01_2019-06-30.jpg"><img loading="lazy" decoding="async" class="wp-image-5339 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_msg_type_bar_2019-05-01_2019-06-30.jpg" alt="" width="403" height="287" /></a></strong></p>
<p><strong>分析:</strong></p>
<p>聊天以文字信息为主,没有出现其他灌水群的斗图行为。</p>
<p>&nbsp;</p>
<p><strong>3. 日均聊天频率,生成Bar Chart</strong></p><pre class="crayon-plain-tag">def gen_bar_plot_chat_freq_day(self, csv_file):
        df = pd.read_csv(csv_file, delimiter='\t', encoding='utf-8')
        msg_count = len(df)

        time_list = self.cal_time_list_chat_freq_day(df)

        plt.figure(figsize=(18, 9))
        plt.bar(time_list.keys(), time_list.values(), width=.8, facecolor='lightskyblue', edgecolor='white')
        plt.xticks(range(len(time_list)), time_list.keys())
        for x_axies in time_list:
            y_axies = time_list[x_axies]
            label = '{}%'.format(round(y_axies*1.0/msg_count*100, 2))
            plt.text(x_axies, y_axies+0.05, label, ha='center', va='bottom')
        plt.title('Chat frequency in 24 hours [%s - %s]' % (self.fl_days[0], self.fl_days[1]))
        path_image = os.path.join(self.path_analyse,
                                  '%s_chat_freq_day_bar_%s_%s.png' % (self.group_id, self.fl_days[0], self.fl_days[1]))
        plt.savefig(path_image)
        plt.close()

        return path_image</pre><p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_freq_day_bar_2019-05-01_2019-06-30.jpg"><img loading="lazy" decoding="async" class="size-full wp-image-5340 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_freq_day_bar_2019-05-01_2019-06-30.jpg" alt="" width="900" height="450" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_freq_day_bar_2019-05-01_2019-06-30.jpg 900w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_freq_day_bar_2019-05-01_2019-06-30-300x150.jpg 300w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_chat_freq_day_bar_2019-05-01_2019-06-30-768x384.jpg 768w" sizes="(max-width: 900px) 100vw, 900px" /></a></p>
<p><strong>分析:</strong></p>
<ul>
<li>每日从六点开始活跃,估计是一部分人上班通勤坐车时有时间聊聊</li>
<li>早七八点到公司开始工作,安静</li>
<li>早九、十点开始活跃,到午休11点左右到达高峰</li>
<li>午休后工作时间</li>
<li>下午三点开始活跃,这时是德企里的下午茶时间</li>
<li>晚9点饭后再次活跃一下</li>
</ul>
<p>&nbsp;</p>
<p><strong>4. 群员聊天活跃时间周热点图,  输出Heat Map</strong></p><pre class="crayon-plain-tag">def gen_heatmap_member_activity(self, csv_file):
        df = pd.read_csv(csv_file, delimiter='\t', encoding='utf-8')
        create_times = df['create_time']

        week_online = [[0 for j in range(24)] for i in range(7)]
        for li in create_times:
            week_online[int(mk_datetime(li, "%Y-%m-%d %H:%M:%S").weekday())][int(li[11:13])] += 1

        week_online = np.array([li for li in week_online])
        columns = [str(i) + '-' + str(i + 1) for i in range(0, 24)]
        index = ['Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.', 'Sun.']

        week_online = pd.DataFrame(week_online, index=index, columns=columns)
        plt.figure(figsize=(18.5, 9))
        plt.rcParams['font.sans-serif'] = ['SimHei']
        sns.set()

        # Draw a heatmap with the numeric values in each cell
        sns.heatmap(week_online, annot=True, fmt="d", cmap="YlGnBu")
        path_image = os.path.join(self.path_analyse,
                                  '%s_activity_heatmap_%s_%s.png' % (self.group_id, self.fl_days[0], self.fl_days[1]))
        plt.savefig(path_image, format='png', dpi=300)
        plt.close()

        return path_image</pre><p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30.png"><img loading="lazy" decoding="async" class="size-full wp-image-5341 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30.png" alt="" width="5550" height="2700" srcset="http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30.png 5550w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30-300x146.png 300w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30-768x374.png 768w, http://www.mobabel.net/wp-content/uploads/2019/06/12/1_activity_heatmap_2019-05-01_2019-06-30-1024x498.png 1024w" sizes="(max-width: 5550px) 100vw, 5550px" /></a></p>
<p><strong>分析:</strong></p>
<ul>
<li>周一大家都很忙,或者装着很忙的样子</li>
<li>周二下午开始活跃了</li>
<li>周三上午也活跃起来</li>
<li>周四,快到周末了,放松,全天活跃</li>
<li>周五,上午欢乐时光,下午和德国同事一样,走的走跑的跑</li>
<li>周末死一般沉寂</li>
</ul>
<p>从这个分析图可以看出,中国程序员上班是非常用心和责任感的,同时也非常遵守德企工作时间相关制度,坚决不加班,坚决朝九晚五。</p>
<blockquote><p>996是什么?能吃吗?</p></blockquote>
<p>认真地说,为工作和任务有限加班是可以的,但我非常反对无效的为加班而加班,把996作为KPI考勤标准的做法。</p>
<p>德国大中型企业一般做法是员工自行调配加班时间,某段时间任务紧,加班时间多了的话可以将超时存起来,之后再换成休假;实在没空休假的可以换成工资,不过一般HR和工会不推荐这么做,超时太多将强制休假&#8212;-员工健康比工作重要。</p>
<p>在德企小公司或咨询公司里,就不一定了,因为可能业绩和分红挂钩,或者小公司项目紧张,主动或被动加班是很常见的。</p>
<p>绝大多数IT企业并不固定员工的上下班时间,而是采用核心时间制度,比如10-15这五个小时员工必须在岗,但员工可以自行决定上班和下班时间,早来早走,晚来晚走,自由度高。</p>
<p>&nbsp;</p>
<h3 id='2-2-4-制作pdf总报表'  id="boomdevs_21" style="text-align: center;" >2-2-4. 制作pdf总报表</h3>
<p>以上数据分析步骤生成了若干独立的图片报表,不便传阅,可以将其集中整理并且排版格式化到一个pdf总报表里,方便阅读。</p>
<p>所需第三方库如下,可以将含图片的html页面完整输出成pdf文件。</p><pre class="crayon-plain-tag">pip3 install pdfkit
    
Install wkhtmltopdf
  
Debian/Ubuntu:
&gt; sudo apt-get install wkhtmltopdf

Redhat/CentOS
&gt; sudo yum install wkhtmltopdf

MacOS
&gt; brew install Caskroom/cask/wkhtmltopdf</pre><p><strong>开发分解</strong></p>
<p><strong>1. 准备HTML模板</strong></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;style&gt;
        h1 {
            text-align: center;
        }
        h2 {
            text-align: center;
            margin-top: 20px;
        }
        img {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h1&gt;{{group_name}} 聊天数据分析&lt;/h1&gt;
&lt;h2&gt;{{date_begin}} - {{date_end}}&lt;/h2&gt;

&lt;h2&gt;24小时内聊天频率&lt;/h2&gt;
&lt;img src="{{img_chat_freq_day}}" style="width:100%;"/&gt;

&lt;h2&gt;消息类型&lt;/h2&gt;
&lt;img src="{{img_chat_msg_type}}" style="width:80%;"/&gt;

&lt;h2&gt;日均聊天数量&lt;/h2&gt;
&lt;img src="{{img_chat_count_day}}" style="width:100%;"/&gt;

&lt;h2&gt;群友活跃时间热点图&lt;/h2&gt;
&lt;img src="{{img_chat_heating_act}}" style="width:100%;"/&gt;

&lt;div class="divider_b"&gt;&lt;/div&gt;
......</pre><p><strong>2. 生成pdf</strong></p>
<p>读取HTML模板,替换Pattern,生成pdf</p><pre class="crayon-plain-tag">with open('./assets/chat_analysis_%s.html' % lang, 'r') as file:
            file_data = file.read()

        # 替换Pattern
        file_data = file_data.replace('{{date_begin}}', self.fl_days[0])
        file_data = file_data.replace('{{date_end}}', self.fl_days[1])

        file_data = file_data.replace('{{img_chat_history}}', Path(img_chat_history).name)
        file_data = file_data.replace('{{img_chat_freq_day}}', Path(img_chat_freq_day).name)
        ......

       # 输出临时HTML文件
       with open(path_html, 'w') as file:
            file.write(file_data)
       # 输出pdf
       pdfkit.from_file(path_html, path_pdf)</pre><p><strong>3. 定时任务</strong></p>
<p>添加定时任务,每月第一天早八点自动启动数据分析任务,分析上个月数据,然后自动将pdf报表发到群里。</p><pre class="crayon-plain-tag"># 08:10am at the first day of the month
    scheduler.add_job(lambda: process_schedule(bot_db, bot, group_1), 'cron',
                      month='1-12', day=1, hour=8, minute=1, timezone="Europe/Paris")

    # 发送文件到指定群里
    group.send_file(file_path)</pre><p>最终pdf报表预览:</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-17.37.31.png"><img loading="lazy" decoding="async" class=" wp-image-5350 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/06/13/Screenshot-2019-06-13-at-17.37.31.png" alt="" width="171" height="1714" /></a></p>
<h2 id='2-3'  id="boomdevs_22" >2-3. </h2>
<h2 id='2-4-总结'  id="boomdevs_23" style="text-align: center;" >2-4. 总结</h2>
<p>通过数据分析可以非常直观地了解工作和生活在德国的中国程序员们,平时做什么工作,说什么话题。不过因为采样数量较小,某些分析无法采用更明确的类别数量占比图,分析结果难免有偏差,还请见谅。</p>
<p>本文使用Python和相关库快速完成了数据采集,清洗和分析的工作,你可以基于该项目,扩展自己的数据分析模块,比如图灵聊天机器人,连接各类第三方服务。</p>
<p>文中聊天记录只短时间采集并供本文脱敏分析,后期清除不再继续监听。</p>
<p>项目源代码已上传至 <a href="https://github.com/mobabel/wechat-group-ibot">GitHub</a>,欢迎指教和加星。</p>
<p>&nbsp;</p>
<p>PS:@将记忆深埋 究竟在不在这几个IT群里,始终是个谜。</p>
<p>&nbsp;</p>
<h3 id='2-4-1-参考资料'  id="boomdevs_24" >2-4-1. 参考资料</h3>
<p class="isFirstInSlot"><a href="http://www.bamf.de/EN/Infothek/Statistiken/BlaueKarteEU/blaue-karte-eu-node.html">Figures on the EU Blue Card</a></p>
<p class="detail_headline"><a href="https://www.br.de/nachricht/mittelfranken/inhalt/76000-auslaender-mit-blauer-karte-in-deuschland-100.html">76.000 Ausländer mit &#8220;Blauer Karte&#8221; in Deutschland</a></p>
<p class="page-hero-headline"><a href="https://www.stackoverflowbusiness.com/de/blog/der-stack-overflow-entwicklerreport-2017"><span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" data-hs-cos-general-type="meta_field" data-hs-cos-type="text">Der Stack Overflow Entwicklerreport 2017</span></a></p>
<p class="Post-Title"><a href="https://zhuanlan.zhihu.com/p/46415054">2018年中国程序员数据调查表</a></p>
<p><a href="https://statistik.arbeitsagentur.de/Statischer-Content/Arbeitsmarktberichte/Berufe/generische-Publikationen/Broschuere-Informatik.pdf">https://statistik.arbeitsagentur.de/Statischer-Content/Arbeitsmarktberichte/Berufe/generische-Publikationen/Broschuere-Informatik.pdf</a></p>The post <a href="http://www.mobabel.net/%e4%b8%ad%e5%9b%bd%e7%a8%8b%e5%ba%8f%e5%91%98%e5%9c%a8%e5%be%b7%e5%9b%bd%e7%a9%b6%e7%ab%9f%e5%9c%a8%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%8c%e8%af%b4%e4%bb%80%e4%b9%88%ef%bc%9f/">中国程序员在德国究竟在做什么,说什么?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e4%b8%ad%e5%9b%bd%e7%a8%8b%e5%ba%8f%e5%91%98%e5%9c%a8%e5%be%b7%e5%9b%bd%e7%a9%b6%e7%ab%9f%e5%9c%a8%e5%81%9a%e4%bb%80%e4%b9%88%ef%bc%8c%e8%af%b4%e4%bb%80%e4%b9%88%ef%bc%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>欧洲网站罢工抗议欧盟新的版权法</title>
		<link>http://www.mobabel.net/%e6%ac%a7%e6%b4%b2%e7%bd%91%e7%ab%99%e7%bd%a2%e5%b7%a5%e6%8a%97%e8%ae%ae%e6%ac%a7%e7%9b%9f%e6%96%b0%e7%9a%84%e7%89%88%e6%9d%83%e6%b3%95/</link>
					<comments>http://www.mobabel.net/%e6%ac%a7%e6%b4%b2%e7%bd%91%e7%ab%99%e7%bd%a2%e5%b7%a5%e6%8a%97%e8%ae%ae%e6%ac%a7%e7%9b%9f%e6%96%b0%e7%9a%84%e7%89%88%e6%9d%83%e6%b3%95/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Thu, 21 Mar 2019 23:27:55 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=5042</guid>

					<description><![CDATA[<p>1. 欧洲互联网罢工抗议 自03.20晚,当德国网民照常访问维基百科时,会发现网站赫然显示一份醒目的白底黑字的抗议声明: 2. 这是我们最后的机会。请帮助我们,在欧洲保持版权现代化。 亲爱的访客, 为什么您不能照常使用维基百科?维基百科的作者们决定今天关闭维基百科,以抗议计划中的欧盟版权改革。该法律可能将于3月26日获得欧洲议会的批准。 该法律的改革将可能严重限制免费互联网。即使是很小的互联网平台也要采取措施预防,预防当用户使用易错的或滥用的上传过滤器时所作出侵犯版权的行为(拟议中的法律的第13条)。此外,所有来自新闻作品的文字摘录片段的网页引用,都必须获得出版商许可(第11条)。这两点都将严重影响观点,艺术和新闻的自由表达。 虽然维基百科本身有豁免权,不受新版权法影响,但维基百科在自由知识分享世界中无法独善其身,就如沙漠中最后一片绿洲。 针对当前改革,已有五百万人请愿和抗议,145个民权和人权组织,经济和IT协会(包括bitkom,德国初创组织以及Chaos-Computer-Club)),互联网先驱如Tim Berners-Lee,记者协会和创意人员等。 因此,请您联系欧洲议会议员并告知他们您对计划改革的立场。 谢谢。 &#160; 不止维基百科,欧洲多家网站同时约定罢工24小时,均在首页贴出类似声明以示抗议。这新版权法到底对互联网做了什么,引发欧洲网民如此反感? &#160; 3. 新版权法 2018年7月,欧盟最新版权法修改方案被欧洲议会否决,因其中包括“最为争议”的第11条和第13条,俗称“链接税”和“上传过滤”,遭到广泛批评。 2018年9月,欧洲议会却以438票赞成、226票反对的结果,初步通过了包含修订版第11条和13条的新版权法。 第11条,链接税,允许出版商和作家在Google等盈利性互联网平台链接到其发布的文章时,收取版权费。互联网平台须向出版商、作家等内容创作者支付费用后,才能分享后者的作品内容和使用作品链接。 第13条,上传过滤,要求YouTube和Facebook等盈利性互联网平台阻止用户分享未经授权的版权内容。互联网平台必须使用“有效的内容识别技术”,来过滤平台上传的所有内容是否侵权。 如果读者对这两条例的解释还是不清楚的话,那就拿国内互联网企业打个比方。 3-1. 链接税 基于该条例,火爆的智能采集信息于各大新闻网站的今日头条可能将立刻歇菜,要么缴纳巨额版权费,要么停业。我们常见的各大新闻门户网站之间的文章转载,摘录将不复存在,各个媒体公司最大的部门不会是编辑部,而会是法务部。比如新浪新闻的编辑在文章中引用了搜狐网站某篇新闻的一小段,或者直接在文中加了该篇新闻一个跳转链接,那么搜狐就可以向新浪收版权费了。 上传过滤 基于此条例,优酷和腾讯视频将坐立不安,要对成千上万的用户已经上传的视频做版权审核,因为可能用户上传的视频来自哔哩哔哩,爱奇艺等其它平台,而这些视频并没有得到相关版权授权。而且每个视频网站必须采取严格的审核,确认上传内容是原创,没有版权问题。 &#160; 这两个条款摆明了就是直接针对谷歌,脸书,Youtube等互联网内容信息平台,欧洲传统传媒认为,这些美国网络巨头已对欧洲媒体产业形成垄断,以几乎零成本抓取了这些传媒生产的新闻信息,并且抢夺了本该属于这些媒体的广告收入。在传统传媒产业式微的今天,希望籍此向这些互联网巨头征收版权费用,增加自己的收入。而且欧洲历年对美企互联网所开的天价罚单,也不算少见了。 虽说这是欧洲本土互联网革新力量与国际互联网巨头之间的博弈,但此做法对本来就羸弱的欧洲互联网产业所带来的潜在伤害,可能是灾难性的。欧洲政客对美国互联网巨头垄断所采取的这个对策并非最终解决方案,很可能是杀敌八百,自损一千。 4. 潜在问题 1. &#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e6%ac%a7%e6%b4%b2%e7%bd%91%e7%ab%99%e7%bd%a2%e5%b7%a5%e6%8a%97%e8%ae%ae%e6%ac%a7%e7%9b%9f%e6%96%b0%e7%9a%84%e7%89%88%e6%9d%83%e6%b3%95/">欧洲网站罢工抗议欧盟新的版权法</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<h2 id='1-欧洲互联网罢工抗议'  id="boomdevs_1" >1. 欧洲互联网罢工抗议</h2>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51.png"><img loading="lazy" decoding="async" class="size-full wp-image-5043 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51.png" alt="" width="782" height="1031" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51.png 782w, http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51-228x300.png 228w, http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51-768x1013.png 768w, http://www.mobabel.net/wp-content/uploads/2019/03/21/2019-03-21_17h13_51-777x1024.png 777w" sizes="(max-width: 782px) 100vw, 782px" /></a></p>
<p>自03.20晚,当德国网民照常访问维基百科时,会发现网站赫然显示一份醒目的白底黑字的抗议声明:</p>
<blockquote>
<h2 id='2-这是我们最后的机会-请帮助我们-在欧洲保持版权现代化'  id="boomdevs_2" >2. 这是我们最后的机会。请帮助我们,在欧洲保持版权现代化。</h2>
<p><span id="more-5042"></span>亲爱的访客,</p>
<p>为什么您不能照常使用维基百科?维基百科的作者们决定今天关闭维基百科,以抗议计划中的欧盟版权改革。该法律可能将于3月26日获得欧洲议会的批准。</p>
<p>该法律的改革将可能严重限制免费互联网。即使是很小的互联网平台也要采取措施预防,预防当用户使用易错的或滥用的上传过滤器时所作出侵犯版权的行为(拟议中的法律的第13条)。此外,所有来自新闻作品的文字摘录片段的网页引用,都必须获得出版商许可(第11条)。这两点都将严重影响观点,艺术和新闻的自由表达。</p>
<p>虽然维基百科本身有豁免权,不受新版权法影响,但维基百科在自由知识分享世界中无法独善其身,就如沙漠中最后一片绿洲。</p>
<p>针对当前改革,已有五百万人请愿和抗议,145个民权和人权组织,经济和IT协会(包括bitkom,德国初创组织以及Chaos-Computer-Club)),互联网先驱如Tim Berners-Lee,记者协会和创意人员等。</p>
<p>因此,请您联系欧洲议会议员并告知他们您对计划改革的立场。</p>
<p>谢谢。</p></blockquote>
<p>&nbsp;</p>
<p>不止维基百科,欧洲多家网站同时约定罢工24小时,均在首页贴出类似声明以示抗议。这新版权法到底对互联网做了什么,引发欧洲网民如此反感?</p>
<p>&nbsp;</p>
<h2 id='3-新版权法'  id="boomdevs_3" >3. 新版权法</h2>
<p>2018年7月,欧盟最新版权法修改方案被欧洲议会否决,因其中包括“最为争议”的第11条和第13条,俗称“链接税”和“上传过滤”,遭到广泛批评。</p>
<p>2018年9月,欧洲议会却以438票赞成、226票反对的结果,初步通过了包含修订版第11条和13条的新版权法。</p>
<blockquote><p>第11条,<strong>链接税</strong>,允许出版商和作家在<span id="usstock_GOOG">Google</span>等盈利性互联网平台链接到其发布的文章时,收取版权费。互联网平台须向出版商、作家等内容创作者支付费用后,才能分享后者的作品内容和使用作品链接。</p>
<p>第13条,<strong>上传过滤</strong>,要求YouTube和<span id="usstock_FB">Facebook</span>等盈利性互联网平台阻止用户分享未经授权的版权内容。互联网平台必须使用“有效的内容识别技术”,来过滤平台上传的所有内容是否侵权。</p></blockquote>
<p>如果读者对这两条例的解释还是不清楚的话,那就拿国内互联网企业打个比方。</p>
<h3 id='3-1-链接税'  id="boomdevs_4" >3-1. <strong>链接税</strong></h3>
<p>基于该条例,火爆的智能采集信息于各大新闻网站的<strong>今日头条</strong>可能将立刻歇菜,要么缴纳巨额版权费,要么停业。我们常见的各大新闻门户网站之间的文章转载,摘录将不复存在,各个媒体公司最大的部门不会是编辑部,而会是法务部。比如新浪新闻的编辑在文章中引用了搜狐网站某篇新闻的一小段,或者直接在文中加了该篇新闻一个跳转链接,那么搜狐就可以向新浪收版权费了。</p>
<p><strong>上传过滤</strong></p>
<p>基于此条例,优酷和腾讯视频将坐立不安,要对成千上万的用户已经上传的视频做版权审核,因为可能用户上传的视频来自哔哩哔哩,爱奇艺等其它平台,而这些视频并没有得到相关版权授权。而且每个视频网站必须采取严格的审核,确认上传内容是原创,没有版权问题。</p>
<p>&nbsp;</p>
<p>这两个条款摆明了就是直接针对谷歌,脸书,Youtube等互联网内容信息平台,欧洲传统传媒认为,这些美国网络巨头已对欧洲媒体产业形成垄断,以几乎零成本抓取了这些传媒生产的新闻信息,并且抢夺了本该属于这些媒体的广告收入。在传统传媒产业式微的今天,希望籍此向这些互联网巨头征收版权费用,增加自己的收入。而且欧洲历年对美企互联网所开的天价罚单,也不算少见了。</p>
<p>虽说这是欧洲本土互联网革新力量与国际互联网巨头之间的博弈,但此做法对本来就羸弱的欧洲互联网产业所带来的潜在伤害,可能是灾难性的。欧洲政客对美国互联网巨头垄断所采取的这个对策并非最终解决方案,很可能是杀敌八百,自损一千。</p>
<h2 id='4-潜在问题'  id="boomdevs_5" >4. 潜在问题</h2>
<p>1.  这套法规有可能遭到版权流氓的滥用。</p>
<p>比方某些企业的专利流氓的手段大家有目共睹,令人闻风丧胆,一些企业情愿不做生意也要绕道走。在执行过程中,执行边界很难用技术手段来确定,互联网页面相互链接的数量已经无从统计,很多网站和可能无意中引用了其它新闻出版站点的文章,欧洲数以万计闲得发慌的律师可不会放过任何一个索赔并从其中抽成的机会。</p>
<p>比如德国有一群这样的法律从业人员,专门去拍卖网站Ebay里检查卖家的商品,看里面有没有用到侵权的图片,然后发律师函索赔。有些卖家因为图省事,没给自己卖的物品拍照,而是随便Google搜了一张该物品的图片用了,而不巧这张图片是有版权的,那该卖家将会收到一封索赔信。</p>
<p>2.  以<strong>链接税</strong>为例</p>
<p>条款同时规定:个人用户的合理的、非公开、非商业使用新闻出版物的权利不受此限;  仅仅是互联网超链接以及简短词语不受此限;。</p>
<p>但以此条例作为判例,未来再进一步发展成为不限于新闻领域,不限于盈利性互联网平台的相关法规和更严苛的审查机制,不是不可能。可能将来普通人写个博客都要心惊胆寒,不能添加任何外部链接。</p>
<p>3.  以<strong>上传过滤</strong>为例</p>
<p>若需阻止用户数上传无版权问题的视频,这类工作很可能没法寄希望于人工智能或者机器学习等技术手段,必须人工审核处理,从而给欧洲本土的中小互联网平台带来巨大人力负担。也许在Youtube头疼的同时,欧洲本土已经先倒下去一批互联网小企业。</p>
<p>&nbsp;</p>
<h2 id='5-国际互联网企业的对策'  id="boomdevs_6" >5. 国际互联网企业的对策</h2>
<p>这两条法规对国际互联网企业的影响是显而易见的,版权付费的分享模式将是一笔巨大的开支。所以一些公司所采取的措施很可能是一刀切:<strong>关闭服务</strong>。</p>
<p>2014年,西班牙试图对谷歌的链接收费,作为回应,谷歌关闭了西班牙的谷歌新闻。</p>
<p>2018年欧洲落实《通用数据保护条例》(General Data Protection Regulation)时,很多欧洲人常用的美国网站,一夜之间,针对所有来自欧洲的IP,直接采取了粗暴的禁止访问的做法。因为这些企业没有相应的人力物力针对GDPR做出相应的IT系统变更开发,情愿忍痛不做欧洲人生意,也不想将来收律师信。相比下,中国企业比如腾讯,对GDPR的反应以及微信App服务里相关的修正是非常及时的。</p>
<p>这些服务关闭后,本土传媒产业或互联网企业能否抢占这些巨头所留下的空间,还是个问号,因为该法同时也是把双刃剑。</p>
<p>&nbsp;</p>
<h2 id='6-对中国出海互联网企业的可能影响'  id="boomdevs_7" >6. 对中国出海互联网企业的可能影响</h2>
<p>欧美互联网企业相争,中国企业不会从中收益,反而要更加注意。如果该法正式通过,以短视频分享平台抖音海外版TikTok为例,它所面临的问题也不小,除了花大力气对用户上传的视频做甄别外,还要提防欧洲“专业”版权律师可能的钓鱼执法手段。</p>
<p>在德国,同样有一群针对视频分享的版权律师,在P2P分享盛行的今天,会在网上分享标注了“特殊记号”的视频比如盗版电影,用来钓鱼执法,一旦有网友下载了该视频,他们会通过与电信部门的合作,得到该网友的的IP地址和真实住址,最后寄去上千欧的罚单。针对短视频分享平台,以钓鱼性质上传一些有版权争议的短视频,也是大有可能的。</p>
<p>&nbsp;</p>
<p>互联网从诞生开始便象征着知识开放和自由,但由于全球化资本逐利带来的垄断或“作恶”行为,近年来从野蛮发展到各国纷纷出台相关法律限制和监管,并力图保护本国互联网产业。也许将来的互联网,不会如最初那么开放和自由了。</p>
<p>&nbsp;</p>
<p>发布于CSDN:<a href="https://mp.weixin.qq.com/s/AruFear-LcJdZ1wFfPmavA">欧洲互联网将“死于”版权法?</a></p>
<p>&nbsp;</p>The post <a href="http://www.mobabel.net/%e6%ac%a7%e6%b4%b2%e7%bd%91%e7%ab%99%e7%bd%a2%e5%b7%a5%e6%8a%97%e8%ae%ae%e6%ac%a7%e7%9b%9f%e6%96%b0%e7%9a%84%e7%89%88%e6%9d%83%e6%b3%95/">欧洲网站罢工抗议欧盟新的版权法</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e6%ac%a7%e6%b4%b2%e7%bd%91%e7%ab%99%e7%bd%a2%e5%b7%a5%e6%8a%97%e8%ae%ae%e6%ac%a7%e7%9b%9f%e6%96%b0%e7%9a%84%e7%89%88%e6%9d%83%e6%b3%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>德国有没有互联网产业?</title>
		<link>http://www.mobabel.net/%e5%be%b7%e5%9b%bd%e6%9c%89%e6%b2%a1%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e4%ba%a7%e4%b8%9a%ef%bc%9f/</link>
					<comments>http://www.mobabel.net/%e5%be%b7%e5%9b%bd%e6%9c%89%e6%b2%a1%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e4%ba%a7%e4%b8%9a%ef%bc%9f/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Tue, 05 Mar 2019 20:59:49 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4770</guid>

					<description><![CDATA[<p>德国有没有互联网?有! 你能说出一个德国有名的互联网企业吗?容我思考五分钟&#8230;&#8230; 1. 中德互联网回顾 1984年8月2日:德国卡尔斯鲁厄大学,Werner Zorn教授收到了一封由美国计算机科学网发出的邮件,这是德国接收到的第一封电子邮件,意味着德国成为了世界上第四个接入因特网的国家。 1987年9月20日:在Zorn教授协助下,中国通过架设在卡尔斯鲁厄大学的网关,向海外发出了中国第一封电子邮件。邮件内容大家耳熟能详:“Cross the Great Wall ,we can reach every corner in the world”。 1988年 :德国互联网络信息中心(DENIC)初见雏形。 1989年初:德国通过一条连接阿姆斯特丹的宽带为2.4 KB的专线,成功架设了德国第一条真正的因特网。 1993年:德国连接纽约的因特网宽带已达192 KB,德国互联网商业化进程开启。 1994年4月20日:中国通过一条宽带为64 KB的国际专线,全功能接入国际互联网,成为国际互联网大家庭中的第77个成员,中国互联网时代从此开启。 1997年6月3日:中国互联网络信息中心(CNNIC)成立。 回顾历史,可以说,是德国给中国互联网点燃了一个小小的火苗。直到90年代末,德国在网络基建上和互联网商业化上是领先于中国的,中国貌似输在了起跑线上。 但是历史转折往往是不按常理出牌的。 1997年:网易成立。 1998年:搜狐公司,京东公司,腾讯计算机系统有限公司,新浪网公司相继成立。 1999年:中国第一个B2C电子商务网8848开始运营,阿里巴巴集团,盛大网络成立 2000年1月1日:百度成立。 1997至千禧年短短几年内,未来的中国互联网巨头开始N足鼎立。差不多同一时间内,德国发生了什么?&#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e5%be%b7%e5%9b%bd%e6%9c%89%e6%b2%a1%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e4%ba%a7%e4%b8%9a%ef%bc%9f/">德国有没有互联网产业?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<blockquote><p>德国有没有互联网?有!</p>
<p>你能说出一个德国有名的互联网企业吗?容我思考五分钟&#8230;&#8230;</p></blockquote>
<h1 id='1-中德互联网回顾'  id="boomdevs_1" style="text-align: center;" >1. 中德互联网回顾</h1>
<blockquote><p><strong>1984年8月2日</strong><b>:</b>德国卡尔斯鲁厄大学,Werner Zorn教授收到了一封由美国计算机科学网发出的邮件,这是德国接收到的第一封电子邮件,意味着德国成为了世界上第四个接入因特网的国家。</p>
<p><strong>1987年9月20日</strong><b>:</b>在Zorn教授协助下,中国通过架设在卡尔斯鲁厄大学的网关,向海外发出了中国第一封电子邮件。邮件内容大家耳熟能详:“Cross the Great Wall ,we can reach every corner in the world”。</p>
<p><strong>1988年 :</strong>德国互联网络信息中心(DENIC)初见雏形。</p>
<p><strong>1989年初:</strong>德国通过一条连接阿姆斯特丹的宽带为2.4 KB的专线,成功架设了德国第一条真正的因特网。</p>
<p><strong>1993年:</strong>德国连接纽约的因特网宽带已达192 KB,德国互联网商业化进程开启。</p>
<p><strong>1994年4月20日:</strong>中国通过一条宽带为64 KB的国际专线,全功能接入国际互联网,成为国际互联网大家庭中的第77个成员,中国互联网时代从此开启。</p>
<p><strong>1997年6月3日:</strong>中国互联网络信息中心(CNNIC)成立。</p></blockquote>
<p><span id="more-4770"></span></p>
<p>回顾历史,可以说,是德国给中国互联网点燃了一个小小的火苗。直到90年代末,德国在网络基建上和互联网商业化上是领先于中国的,中国貌似输在了起跑线上。</p>
<p>但是历史转折往往是不按常理出牌的。</p>
<blockquote><p><b>1997年:</b>网易成立。</p>
<p><b>1998年:</b>搜狐公司<b>,</b>京东公司,腾讯计算机系统有限公司,新浪网公司相继成立。</p>
<p><b>1999年:</b>中国第一个B2C电子商务网8848开始运营,阿里巴巴集团,盛大网络成立</p>
<p><b>2000年1月1日:</b>百度成立。</p></blockquote>
<p>1997至千禧年短短几年内,未来的中国互联网巨头开始N足鼎立。差不多同一时间内,德国发生了什么?</p>
<blockquote><p><strong>1997</strong><b>:</b>德意志银行试点电子货币支付</p>
<p><strong>1997</strong><b>:</b>德国连锁店Tchibo集团开始制定在线多渠道销售战略</p>
<p><strong>1998</strong><b>:</b>德国开始在线交易电力能源</p>
<p><strong>2003</strong><b>:</b>德国超市连锁Otto开启在线商务</p></blockquote>
<p>看起来没有发生什么大事件,而且至今为止,德国境内没有诞生类似Facebook,Amazon,Twitter,Youtube那样有很强互联网基因的名号响当当的平台,你估计很难立刻说出一个德国有名的互联网企业。同时间,中国境内却诞生了无数本土互联网巨头。</p>
<p>是因为德国人不爱互联网,或是网民数量不够多吗?<strong>德国到底有没有互联网?</strong></p>
<p>&nbsp;</p>
<h1 id='2-德国人民用不用互联网'  id="boomdevs_2" style="text-align: center;" >2. 德国人民用不用互联网?</h1>
<p>以下数据如无特殊标注,均为2017-2018年数据统计。</p>
<h2 id='2-1-网民数量'  id="boomdevs_3" >2-1. 网民数量</h2>
<p>德国人口近8300万,超过90%的人使用互联网。有6330万人从14岁起就开始使用网络。日均网络使用时长为2.5小时。14-29岁用户每天耗在网络长达4.5小时,30-49岁用户也不闲着,每天3小时。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-02-41.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4886" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-02-41.png" alt="" width="685" height="245" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-02-41.png 685w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-02-41-300x107.png 300w" sizes="(max-width: 685px) 100vw, 685px" /></a></p>
<p>81%的德国人使用智能手机,73%的网民使用智能手机上网。</p>
<p><strong>总结</strong>:德国人很爱上网,爱上移动互联网,而且有瘾。</p>
<p><strong>PS</strong>:华为是欧洲很多家电信公司的供应商,德国电信大量依赖华为的4G设备。得益于华为在地铁隧道里的基站建设,德国人已从十年前的“地铁里人人一本书”,进化到“地铁里人人手机低头族”。照片摄于柏林和慕尼黑地铁,2019。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-4964 size-medium" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-225x300.jpg" alt="" width="225" height="300" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-225x300.jpg 225w, http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-768x1024.jpg 768w, http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1.jpg 1080w" sizes="(max-width: 225px) 100vw, 225px" /></a> <a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-4965 size-medium" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2-300x225.jpg" alt="" width="300" height="225" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2-300x225.jpg 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2-768x576.jpg 768w, http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2-1024x768.jpg 1024w, http://www.mobabel.net/wp-content/uploads/2019/03/05/germany_ubahn_mobile_1-2.jpg 1440w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2 id='2-2-社交媒体'  id="boomdevs_4" >2-2. 社交媒体</h2>
<p>90%的网民使用社交媒体,其中76%的用户使用Facebook,73 %用户使用WhatsApp聊天。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4885 size-medium" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik-300x300.png" alt="" width="300" height="300" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik-300x300.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik-150x150.png 150w, http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik-160x160.png 160w, http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik-320x320.png 320w, http://www.mobabel.net/wp-content/uploads/2019/03/05/social-media-nutzung-nach-altersgruppen-infografik.png 750w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>按用户年龄来分:</p>
<ul>
<li>14-19岁网民中,100%的人使用社交媒体</li>
<li>20-29岁网民中,98%的人使用社交媒体</li>
<li>30-39岁网民中,93%的人使用社交媒体</li>
<li>40-49岁网民中,87%的人使用社交媒体</li>
<li>50岁以上网民中,85%的人使用社交媒体。</li>
</ul>
<p>按社交媒体平台来分:</p>
<ul>
<li>约4000万人使用WhatsApp,其中日活用户3400万。</li>
<li>至2018年,3200万德国人注册了Facebook,并且其中2400万人每天使用。</li>
<li>每月至少有1500万人使用过Instagram一次。</li>
<li>越6%的网民使用Snapchat</li>
<li>约有1300万德国人使用Twitter,180万人是活跃用户。其中50-69岁用户占16%。</li>
<li>1200万德国人使用<span style="color: #ff0000;"><strong>本土职场社交网站Xing</strong></span>,约180万用户使用移动端,11%的会员找到了更好的工作。</li>
<li>1000万德国人使用职场社交网站LinkedIn,40,1 %介于35-49岁间,超过50岁约41.9%</li>
</ul>
<p><strong>总结</strong>:德国人很爱社交媒体,离开活不下去。本土社交媒体平台只有一个针对职场的Xing,几乎全军覆没。</p>
<p>&nbsp;</p>
<h2 id='2-3-电子商务'  id="boomdevs_5" >2-3. 电子商务</h2>
<p>82%的德国网民在线购物,2017年德国排名前1000名的在线商店创造了428亿欧元的营业额。据2018年数据,营业额排名第一的美企Amazon,以88亿欧元秒杀排在它之后的<strong>9</strong>个德国本土网店<strong>营业额总和</strong>。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-23-59-52.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4890 size-full" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-23-59-52.png" alt="" width="830" height="497" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-23-59-52.png 830w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-23-59-52-300x180.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-23-59-52-768x460.png 768w" sizes="(max-width: 830px) 100vw, 830px" /></a></p>
<p>&nbsp;</p>
<p>至于电子支付,德国人是强硬的顽固派。至2014年,还有二分之一的德国人网购使用账单形式支付,剩下39.9%的人爱用银行转账支付,9%使用Paypal。德国本土没有出现类似于支付宝这种在网店和实体店以及公共服务支付中广泛使用的电子支付渠道。至2017年,情况稍有好转,但Paypal的占有率仅仅约20%,大部分人还是倾向传统支付方式:账单,转账,信用卡,面付。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-0-30-09.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4891" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-0-30-09.png" alt="" width="842" height="587" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-0-30-09.png 842w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-0-30-09-300x209.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-0-30-09-768x535.png 768w" sizes="(max-width: 842px) 100vw, 842px" /></a></p>
<p>目前德国银行业正在联合推广Paydirekt移动电子支付,未来会不会像支付宝和微信支付那样通过App支付,并且融入生活各个方面,还有很长的路要走。不过笔者注意到在超市,用<strong>Payback Pay</strong>的年轻人越来越多,Payback是德国使用较广的购物积分返现平台,最近推出了充值账户支付服务,用户刷一下手机二维码,就能在用账户余额支付的同时积分。</p>
<p>德国专家自己都认为在德国普遍使用移动支付是乌托邦,原因有下面几点:</p>
<ul>
<li>德国数据保护相关法律对电子支付非常严格。</li>
<li>德国人非常注重隐私,用电子支付方式会被支付平台时刻监管,每比交易都被记录。</li>
<li>电子支付方式的手续费,相对于支付宝和微信支付无手续费,Paypal的手续费相当高。</li>
<li>德国人信任银行,胜过Paypal这个美国支付平台,也胜过任何第三方电子钱包。</li>
<li>德国没有涵盖工作生活的全区域的电子支付解决方案,比如在所有超市连锁都能使用。</li>
<li>信用卡等电子支付代表性不足,德国人对现钞的热情独一无二。</li>
<li>对德国人来说,他们无法理解,在超市可以用银行卡刷卡或现金支付时,再用App支付的必要性。</li>
<li>在德国,WhatsApp或Facebook做出成功移动支付平台的可能性较大,毕竟有很大的用户基数。德国人也不愿装上几十个不同渠道的App在不同的场合移动支付。</li>
</ul>
<p>按照中国电子商务发展经验,电子支付是电子商务的基础,没有支付宝也没有现在的淘宝和阿里巴巴。没有完善的电子支付,德国的本土电子商务未来势必长期停步不前。</p>
<p><strong>总结</strong>:德国人很爱网店,剁手不能停,但不喜欢电子支付。本土电子商务望Amazon兴叹,欲哭无泪。</p>
<p>&nbsp;</p>
<h2 id='2-4-在线媒体'  id="boomdevs_6" >2-4. 在线媒体</h2>
<p>这块蛋糕基本是被 Youtube,Netflix,Amazon,Maxdome,iTunes,Spotify给瓜分了。</p>
<p>70%以上网民看Youtube,看Youtube已成为他们生活的一部分。60%的网民每周至少看一次在线视频。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-20-36.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4887 size-full" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-20-36.png" alt="" width="748" height="293" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-20-36.png 748w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-22-20-36-300x118.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></a></p>
<p><strong>咳咳,要画重点了。</strong></p>
<p>抖音海外版TikTok德国区的下载量已超880万,超过410万德国人是抖音活跃用户。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/TikTok-Statistiken-Deutschland-Nutzerzahlen.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4888 size-full" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/TikTok-Statistiken-Deutschland-Nutzerzahlen.png" alt="" width="768" height="442" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/TikTok-Statistiken-Deutschland-Nutzerzahlen.png 768w, http://www.mobabel.net/wp-content/uploads/2019/03/05/TikTok-Statistiken-Deutschland-Nutzerzahlen-300x173.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></a></p>
<p>活跃用户中,日均观看时间是39分钟,每人每天要打开抖音8次以上。其中女性用户占54%,超过男性用户。笔者之前并不知道抖音有个海外版的TikTok,是听一个同事提起,他去问公司市场运营媒体公关部门负责人,目前德国年轻人都在用什么App?那负责人回答说:TikTok呀,年轻人都爱玩。</p>
<p><strong>总结</strong>:德国人很爱在线媒体,沉迷抖音,欲罢不能。本土在线媒体平台全军覆没,苟延残喘的,可能也就剩下不可描述产业的在线视频平台了。</p>
<p>&nbsp;</p>
<h2 id='2-5-游戏产业'  id="boomdevs_7" >2-5. 游戏产业</h2>
<p>德国游戏市场营业额近33.5亿欧元(2017年)。德国游戏玩家3400万,其中2800万每月玩游戏。28%的玩家年龄50岁以上,也是最大比例。48%玩家的玩家拥有大学及以上学历。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-28-48.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4884 size-full" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-28-48.png" alt="" width="861" height="565" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-28-48.png 861w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-28-48-300x197.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-28-48-768x504.png 768w" sizes="(max-width: 861px) 100vw, 861px" /></a></p>
<p>但本土游戏公司发展低迷:</p>
<ul>
<li>2016年中,德国前十大游戏公司还有超过4100个员工</li>
<li>2017年初,降至3500人</li>
<li>至2017年八月,已经快跌破3000人</li>
</ul>
<p>位于汉堡的InnoGames 是德国最大的游戏开发公司,2016年夏据统计有1600员工。员工超过100人的游戏开发公司只有12个。2018年德国最受欢迎的安卓游戏前十,只有一个拼单词游戏是德国公司开发。</p>
<p>德国畅销的游戏基本来自美国的,要么产自北欧。德国仅存的游戏公司,基本都是美国或者法国或者其他国家的游戏公司在德国的买办。</p>
<p><strong>总结</strong>:德国人很爱在线游戏,而且高素质玩家很多。本土游戏产业发展前景堪忧。</p>
<p>&nbsp;</p>
<h2 id='2-6-在线餐饮产业'  id="boomdevs_8" >2-6. 在线餐饮产业</h2>
<p>2018年有323万人次通过在线订餐平台定外卖,盈利2.6亿欧元;但却有1469万人次直接通过餐馆在线订餐,盈利18亿欧元。相对于国内饿了么,美团外卖,德国送餐外卖平台的实力和覆盖率简直是不值一提,连传统餐馆的简陋订餐网页都干不过。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4893" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35.png" alt="" width="1141" height="450" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35.png 1141w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35-300x118.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35-768x303.png 768w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-24-35-1024x404.png 1024w" sizes="(max-width: 1141px) 100vw, 1141px" /></a></p>
<p>德国劳动力价格非常贵,法定每小时最低工资是9.35欧元,这部分送餐的人工费用终究要转到消费者的头上,而且很大可能会出现送餐人工费高于订的食物本身的价格。</p>
<p><strong>总结</strong>:德国人也爱订外卖,但平台呵呵哒。不过话说德国有好吃的吗,值得我多花一倍钱订吗?</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-47-27.png"><img loading="lazy" decoding="async" class="size-full wp-image-4894 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-1-47-27.png" alt="" width="145" height="158" /></a></p>
<h2 id='2-7-网约-共享汽车产业'  id="boomdevs_9" >2-7. 网约&amp;共享汽车产业</h2>
<h3 id='2-7-1-网约车'  id="boomdevs_10" >2-7-1. 网约车</h3>
<p>作为全球战略布局的网约车巨头Uber,除了在中国被逼退外,2014年试图进入德国时也是困难重重。</p>
<p>2016年6月,德国法兰克福高等法院,再次判决,禁止Uber在德国提供服务:</p>
<ul>
<li>Uber旗下的服务违反德国当地法律。德国「载客运输法」规定,若要执行载送乘客的营利服务,司机需取得执照。但是,Uber驾驶不需经过考试,因此收费比传统的出租车便宜。</li>
<li>德国传统工会展现了力量&#8211;德国出租车协会,对Uber占车资20%以上的高比例抽成,以及雇用一些没有专业执照司机的做法强烈反对。多个城市的出租车司机上街抗议Uber。</li>
</ul>
<p>但Uber一直没有放弃德国市场,2018年6月,Uber决定避开风头,先在慕尼黑做个电动汽车租借试点项目Uber Green,以及一个共享电动自行车项目。不过Uber的麻烦不止如此,它的竞争对手,欧洲打车应用Taxify获得了来自戴姆勒和滴滴的超过1.75亿美元投资,开始在欧洲26个国家以及非洲布局,蚕食Uber的份额。</p>
<p>而且戴姆勒子公司Mytaxi推出出租车共享服务,并受到了德国出租车行业的热烈欢迎。几名乘客可以分享一辆出租车,并根据行驶距离分摊相应的费用。</p>
<h3 id='2-7-2-共享车'  id="boomdevs_11" >2-7-2. 共享车</h3>
<p>相对于Uber,德国人更支持本土公司的共享汽车服务,至2019年初,德国共有约170个共享车平台,超过246万德国注册用户,在740个城市提供服务,硝烟弥漫。</p>
<p>排行第一的是BMW与Daimler Benz合作推出的共享汽车<strong>SHARE NOW,</strong>由两家的DriveNow和car2go合并。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-02-26.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4897" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-02-26.png" alt="" width="692" height="412" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-02-26.png 692w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-02-26-300x179.png 300w" sizes="(max-width: 692px) 100vw, 692px" /></a></p>
<h2 id='2-8-小结'  id="boomdevs_12" >2-8. 小结</h2>
<p>德国的网络覆盖率以及网民比率都是挺高的,但在以上几个大的产业链内,除了立足于德国职业社交的Xing,稍有名气的服装类电商Zalando, 以及受到本土汽车行业强力支持的共享车平台之外,德国互联网企业可以说是乏善可陈。</p>
<p>&nbsp;</p>
<h1 id='3-德国互联网行业'  id="boomdevs_13" style="text-align: center;" >3. 德国互联网行业</h1>
<h2 id='3-1-本土互联网企业'  id="boomdevs_14" >3-1. 本土互联网企业</h2>
<h3 id='3-1-1-rocket-internet'  id="boomdevs_15" >3-1-1. Rocket Internet</h3>
<p>提到德国本土互联网企业,不得不提大名鼎鼎的互联网山寨抄袭皇冠上的明珠:Rocket Internet。公司成立于2007年,其运作模式是发现成功的互联网项目,然后以光速招聘技术人员组建团队进行抄袭复制,同时组建极其专业的金融运营团队,将复制的网站运营到市场存在空白的国家和地区。</p>
<p>他们第一次下手的对象是ebay,在德国复制了Alando这个与ebay一模一样的电商品牌,然后在成立一百天后以4000万美元的价格卖给了ebay。之后一发不可收拾,先后抄袭Amazon,Paypal,Uber,婚恋交友eHarmony,Facebook,图片分享Pinterest,移动支付Square,Airbnb,Groupon&#8230;&#8230;</p>
<p>公司洗白上市后转型风投公司,公司2016年营业额22亿欧元。但公司这两年发展遇到瓶颈,投资数百家公司,盈利却不多,毕竟韭菜们也变聪明了。</p>
<p>公司官网曾经的Slogan:<strong>成为美国和中国之外的最大的网络平台</strong></p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-40-11.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4898" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-40-11.png" alt="" width="720" height="274" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-40-11.png 720w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-11-11-40-11-300x114.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></a></p>
<h3 id='3-1-2-zalando'  id="boomdevs_16" >3-1-2. Zalando</h3>
<p>这个是中国剁手党稍微熟悉点的,服饰类电商,2018年京东计划进军德国时,还传出要收购Zalando。公司成立于2008年,2018年营业额54亿欧元,超过一万五千多员工。</p>
<p>Zalando创业初期,得到了Rocket Internet孵化器的支持,并且山寨了美国在线鞋店Zappos,公司所采用的商业模式:免费送货&amp;退换,网站设计甚至公司名称首字母都来自Zappos。不过Zalando创始人不太在意,而且运营超越了山寨的层次,不仅在服饰类超越了巨头Amazon,也让德国传统零售商H&amp;M和Otto倍感压力。</p>
<h3 id='3-1-3-本土互联网初创企业'  id="boomdevs_17" >3-1-3. 本土互联网初创企业</h3>
<p>从生活中接触到的德国IT从业人员中,持创业意向的人比率不高,大部分还是以在大型传统企业一辈子工作为荣,关系到每年雷打不动的度假天数和福利,他们成为一个自由职业者的意愿可能更高。</p>
<p>在传统工业公司(如戴姆勒,博世,宝马,大众)附近落户的IT初创企业,其服务对象基本也是传统工业公司,创始人最大的人生目标大多是公司被这些大企业收购,完全和中美初创企业创始人的远大B2C目标背道而驰。而且德国很多专家都认为,将来德国成功的初创企业不会 是基于B2C业务,而是提供工业解决方案,优化流程或其它技术应用领域的B2B业务。</p>
<p>阻碍德国人创业的原因主要有:</p>
<ul>
<li><strong>德国缓慢的互联网发展和官僚主义作风</strong>。</li>
<li><strong>IT技术人才短缺</strong>。许多创始人抱怨说,软件开发不仅意味着与谷歌,也和其它大公司抢人才。 毕竟德国传统行业都在战略布局数字化,无论是化妆品制造商还是汽车制造商。</li>
<li><strong>家庭与工作无法调和</strong>。加班与早期收入低是创业不可逾越的槛。据调查,德国初创公司的男性员工的平均收入为3333欧元,女性员工的平均收入仅为 2500欧元,远远低于大中型公司收入。</li>
<li><strong>缺少风险投资</strong>。虽说德国的风险投资家近年来逐步小跑, 但风投的份额仍然落后于英国,美国甚至以色列。</li>
</ul>
<p>&nbsp;</p>
<h2 id='3-2-德国人的觉醒'  id="boomdevs_18" >3-2. 德国人的觉醒</h2>
<p>德国人其实也是意识到中国近年的互联网革命的成功,羡慕、好奇并且开始学习。</p>
<p>一位朋友在德国一家械制造公司工作,该公司在中国开展B2B业务且近年呈增长趋势。某天公司请来了一位所谓的懂中国市场的企业咨询师,给员工分析微信为什么成功,以及如何用微信运营中国市场。这位德国咨询师提及在中国很多人在微信上做生意(微商),并且拿三一重工做例子,如何四步在微信上买一个挖掘机。朋友的同事都是工程师,不少连Facebook都没有开通,听得是云里雾里。朋友自己的听后感:就像在德国吃了顿德国厨师做的中餐&#8211;看来这位咨询师还是没领悟中国熟人生意的精髓。</p>
<p>下图来自德国某互联网会议,德国人做的关于中国在线视频产业的报告。图中正在介绍Bilibili的弹幕。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-16-12.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4882 size-medium" src="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-16-12-300x209.png" alt="" width="300" height="209" srcset="http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-16-12-300x209.png 300w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-16-12-768x535.png 768w, http://www.mobabel.net/wp-content/uploads/2019/03/05/2019-3-10-14-16-12.png 781w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>不乏有清醒的德国专家看到问题,拟文抨击德国互联网现状:</p>
<blockquote><p>为什么德国公司在数字化创新中失败了?!德国已经被甩到了数字化暗黑森林的边缘。我们发明了汽车,我们有最好的工程师,最有价值品牌前100名我们占了11个,我们是欧洲经济的发动机,但我们错过了数字化创新这波浪潮。</p>
<p>而且所有人都在否认这个现状。德国制造还在代表质量,但为什么汽车行业大的创新来自美国和中国,为什么德国没有世界领先的电子产品,为什么全球访问量前100网站没有一个来自德国?为什么我们在全球创新排名中只占第九?</p></blockquote>
<p>专家列出了深层次的原因:</p>
<ul>
<li><strong>德国传统的死板的层级管理</strong><br />
大部分德国公司管理层如金字塔状,每个员工汇报给他的上级,一层层往上汇报,中间会有无尽的委派,策划和指责。在此构文化下,创新无法生存,创新至少需要一些创造性的自发性和自主性的土壤。<br />
德国管理层压制自主性,转而寻求“共识”。为达到共识,德国人会将意见切分成一个个细小的块直到所有人都同意&#8211;这对于创新者的大胆且独立的决断往往是诅咒。</li>
<li><strong>缺少现代化IT软件</strong><br />
很多公司还在使用石器时代的工具,很多团队还在用Email来交流,新的工具比如移动聊天和在线视频会议常常不被允许使用。项目管理中,德国人还在大量使用Excel和MS Project。<br />
这是因为德国严格的数据保护法,公司必须首先确认数据匿名化,并且按相关规定存储。这些规定让公司恐惧云数据平台,不得不继续用这些老旧的软件。</li>
<li><strong>过时的基础设施<br />
</strong>我们有世界上最快的不限速的高速公路,但是直到2016年,只有约2%的德国宽带通过光纤电缆连接,同时拉脱维亚和瑞典已经是50%。德国的宽带覆盖率,在欧洲32国家中只排28位。</li>
<li><strong>IT人才缺乏</strong><br />
据统计,德国公司有160万技术性职位空缺,德国电信甚至招不到足够的安全专家,人工智能领域就更别提了。</li>
</ul>
<p>&nbsp;</p>
<h1 id='4-德国工业互联网'  id="boomdevs_19" style="text-align: center;" >4. 德国工业互联网</h1>
<p>德国的互联网产业发展缓慢,那么德国工业互联网信息产业发展如何?德国不是正在布局工业4.0战略吗?</p>
<h2 id='4-1-德国工业互联网'  id="boomdevs_20" >4-1. 德国工业互联网</h2>
<p>2019年2月5日,德国联邦经济事务与能源部部长签署发布了《国家工业战略2030》(Nationale Industriestrategie 2030)草案。这份草案被认为是德国工业4.0战略的进一步深化,表明德国政府对本国和全球经济和科技发展态势有清醒的认识。德国政府方面看到了数字化、人工智能等新一代信息技术的迅猛发展对全球工业格局的剧烈冲击,感受到了德国在互联网、平台经济、人工智能等产业领域存在的问题,因而在政治、经济等宏观层面进行了深刻反思,提出通过国家适度干预重点工业领域,打造德国或欧洲的龙头企业,继续保持德国工业在欧洲乃至全球的竞争力。</p>
<p>值得注意的是,德国传统工业领域管理高层也意识到信息化的重要性:</p>
<ul>
<li>西门子在过去十来年内,不断收购工业数字化领域公司,已成为德国数一数二的“软件”公司。</li>
<li>2018年7月,戴姆勒宣布拆分成三个公司,其中戴姆勒移动出行(Daimler Mobility AG)公司,将负责移动出行,自动驾驶,高精导航等数字化领域</li>
<li>2019年1月,CES大展,博世集团放出“Like a Bosch”宣传片,再次强调它转型物联网以及数字化服务领域</li>
<li>2019年2月,大众集团宣布宣布组建自己的软件部门“Digital Car&amp;Service”,大众CEO声称:大众将会成为一家软件驱动的公司。</li>
</ul>
<p>上文说到,德国很多专家非常看重工业领域的信息化革新,而且这里不得不提,德国工业的隐形冠军。所谓隐形冠军的定义是:</p>
<ol>
<li>全球市场占有率第一或第二;</li>
<li>年产值在二十亿欧元左右;</li>
<li>鲜为大众所知。</li>
</ol>
<p>按此标准,德国是全球隐形冠军企业最多的国家,有近1400家,占全球总数的近50%,涵盖机器人,自动化,机械制造,航天航空,化工等诸多高端制造领域。这些企业中,不少自身的IT信息技术储备非常强,生产的机械或自动化系统中所用中控操作系统都是基于德国工程师几十年不断调试测试的经验总结。单单这一块,中国IT企业想要简单复制难度相当大。</p>
<p>特别是还有德国车企以及相关技术工程外包公司研发多年的一整套完整的涉及汽车制造,生产流程,性能测试,模拟仿真等方面的软件工具链,以及软件层面之上的无数人的多年经验沉积,技术不可小觑。全球科技实力排名德国位于第五。</p>
<p>工业智能制造,是中国的长期目标,相对来说德国更为靠近这个目标。</p>
<h2 id='4-2-中国工业互联网'  id="boomdevs_21" >4-2. 中国工业互联网</h2>
<p>工信部长苗圩指出,<strong>在全球制造业的四级梯队中,中国处于第三梯队,而且这种格局在短时间内难有根本性改变</strong>。“中国制造不像我们想象的那么强大,<strong>西方工业,也没有衰退到依赖中国</strong>。我们的制造业还没有升级,制造业者已开始撤离。”</p>
<p>全球制造业已基本形成四级梯队发展格局:</p>
<blockquote><p>第一梯队是以美国为主导的全球科技创新中心;</p>
<p>第二梯队是高端制造领域,包括欧盟、日本;</p>
<p>第三梯队是中低端制造领域,主要是一些新兴国家,包括中国;</p>
<p>第四梯队主要是资源输出国,包括OPEC(石油输出国组织)、非洲、拉美等国。</p></blockquote>
<p>今年两会,腾讯董事会主席兼首席执行官马化腾提交七份书面建议,其中一个是《加快发展产业互联网》。</p>
<blockquote><p>马化腾认为,发展产业互联网,将为实体经济高质量发展提供历史机遇和技术条件,对实体经济产生全方位、深层次、革命性的影响。互联网公司作为“数字化助手”,应做好连接器、工具箱和生态共建者,帮助实体产业在各自的赛道上成长为世界冠军。他建议,大力推进信息基础设施建设,夯实产业互联网的发展基础,加快 5G 和 IPv6 全面商用部署;促进云计算创新发展,鼓励工业云、金融云、政务云、医疗云、教育云、交通云等各类云平台加快发展,加速实体经济数字化转型。</p></blockquote>
<p>其实阿里和腾讯等中国互联网巨头,已经意识到如今的B2C领域大多已经圈地为王,很难再有蓝海。与其自相厮杀,不如而自上而下对工业领域进行B2B转型,紧抓物联网,大数据,人工智能这些方向,既能利国利民,同时也是一片无边无际的产业发展蓝海。</p>
<h2 id='4-3-中德工业的互补'  id="boomdevs_22" >4-3. 中德工业的互补</h2>
<p>简短总结:</p>
<ul>
<li>德国的口号是:<strong>我们传统工业需要数字化!</strong></li>
<li>中国的口号是:<strong>我们需要数字化传统工业 !</strong></li>
</ul>
<p>一般来说,口号喊得越响,就越说明缺什么。</p>
<p>德国具有很强的高精尖工业制造能力,但在互联网信息数字化领域掉了队;中国目前在互联网创新领域风头正盛,但是在高精尖工业领域,特别是工业自动化集成这块还需时日追赶。因此中德两国制造业虽说是相近的竞争关系,但实际上具有很强的互补性。</p>
<p>中国的互联网企业可以尝试技术输出,举一个例子:在安防和图像识别领域。</p>
<p>2019年2月发生的柏林15岁少女Rebecca失踪案,引发全德聚焦,案件涉及德国的车牌识别系统,也叫KESY系统。该系统主要安装在高速公路上,记录所有过往车辆的数据。根据德媒的报道,KESY经常频繁地传输错误数据,各州的错误率不同,如巴伐利亚州,错误率高达97,91%,被民众诟病。而且KESY无法识别汽车的驾驶员,这个不足会使很多案件的调查变得更为复杂,如在Rebecca案例中,KESY就不能确定车里的驾驶人到底是谁。相比之下,中国互联网企业的车牌识别和人脸识别系统,由于采用深度学习方法或者专用芯片,已经高度发展,识别率相当高。</p>
<h2 id='4-4-最后'  id="boomdevs_23" >4-4. 最后</h2>
<p>希望未来中德两国在互联网和工业领域能进行更多技术交流,实现互惠共赢!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>参考资料:</p>
<p><a href="https://www.boxun.com/news/gb/china/2011/08/201108230135.shtml">中国互联网的微缩“编年史”</a></p>
<p><a href="https://www.zhihu.com/question/26523865/answer/58276873">https://www.zhihu.com/question/26523865/answer/58276873</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&amp;mid=2650715434&amp;idx=1&amp;sn=698d8c831adff5358f1a4fb30aad67e1&amp;chksm=bea6c4f989d14def31e41c5303387b0cbfa9646e71143b929c69ace4bb3c04ee815b8b1cf4f1&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">1999-2019,互联网失落者</a></p>
<p><a href="https://www.netplanet.org/geschichte/deutschland.shtml">Das Internet in Deutschland</a></p>
<p class="entry-title"><a href="https://www.monitoringmatcher.de/2018/01/social-media-nutzung-in-deutschland-die-besten-quellen/">Social-Media-Nutzung in Deutschland – die besten Quellen</a></p>
<p class="post-header__title"><a href="https://blog.hubspot.de/marketing/social-media-in-deutschland"><span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" data-hs-cos-general-type="meta_field" data-hs-cos-type="text">Statistiken zur Social-Media-Nutzung in Deutschland</span></a></p>
<p><a href="https://www.zeit.de/digital/internet/2017-10/internetnutzung-studie-ard-zdf-streaming-facebook">Täglich zweieinhalb Stunden Internet</a></p>
<p class="col-xs-12"><a href="https://www.gruenderlexikon.de/news/studien/mobile-optimierung-noetig-immer-mehr-menschen-surfen-mit-dem-smartphone-84233420">Mobile Optimierung nötig: Immer mehr Menschen surfen mit dem Smartphone</a></p>
<p class="entry-title"><a href="https://onlinemarketing.de/news/globale-internetnutzung-digitalisierung-deutschland-2017">Social &amp; Mobile Trends: So digital ist Deutschland 2017</a></p>
<p class="hl-article article__title"><a href="https://de.statista.com/infografik/15940/video-streaming-in-deutschland/">Video-Streaming in Deutschland</a></p>
<p class="hl-article article__title"><a href="https://de.statista.com/infografik/16904/anzahl-der-tiktok-downloads-auf-android-und-ios-geraete/">8,8 Millionen TikTok-Downloads in Deutschland</a></p>
<p class="entry-title"><a href="https://www.gameswirtschaft.de/wirtschaft/50-groesste-games-entwickler-studios-deutschland-august-2017/">Die 50 größten Games-Entwickler in Deutschland</a></p>
<p class="entry-title"><a href="https://www.basicthinking.de/blog/2018/12/16/erfolgreichste-android-spiele-deutschland/">Das sind die 10 erfolgreichsten Android-Spiele aller Zeiten in Deutschland</a></p>
<p><a href="https://www.handelsdaten.de/handelsthemen/e-commerce">E-Commerce in Deutschland</a></p>
<p><a href="https://www.ehi.org/de/top-100-umsatzstaerkste-onlineshops-in-deutschland/">Top 100 umsatzstärkste Onlineshops in Deutschland</a></p>
<p class="c-headline o-headline--is-emphasis rf-c-dreifaltigkeit__headline rf-o-headline" data-qa="Headline"><a href="https://www.welt.de/wirtschaft/bilanz/article174196053/Mobile-Payment-Keine-Chance-fuer-innovative-Bezahlformen-in-Deutschland.html">Warum die Deutschen immer noch nicht mit dem Handy bezahlen können</a></p>
<p data-qa="Headline"><a href="https://www.statista.com/outlook/374/137/online-food-delivery/germany?currency=eur">Online Food Delivery</a></p>
<p data-qa="Headline"><a href="https://www.facebook.com/photo.php?fbid=10155281366426720&amp;set=bc.AboboAPHXrs5zttbVg5_UOyDmgcdYMsiuwif5eDLwc57NM82Tc4GkCLp_xlunkG_o_yzS0C1fpfVC9V3LqKK5qO5Su0NbNsHGFf1sVD84TF5c6thbsS_nMRNvOSFpt4Ve6o&amp;type=1&amp;opaqueCursor=AbpjtijfCP3QmRD8gVhn-LD1NKEGcXw65QDG5Q8ewCuB05pombl6pQNKcTtj8OMdGaUqWrU24oSjh_m_bpYfko98FhCsNVkExjDG_j_khUBlAgKNeXb3N_qDcUS9nWicsHgnZizj1sVB_U0XlA04iWSZpaLXALmhtqVWJyx6KejlQTBgxyzDib0ofnJgqmIIzabDNBDaHJ40oD-j_ZWuWsU8e04mULVRLey2YGfCLzIWlOxZHpAQIUsx7O42fPOU239r32pr6rr3r5ckvgstW_GJ1US2iK36K-dLaWp7VTjsJWREX-X6O7Uhed3SgjfVzki_gkheab-0G8LhNH9H37QDKDxzceC6Zj2Hps3xl1BhqeJh3nLRRICQ5SoSJQPc0XdSOi5k_2ps6Z7L--Ccb_EiOv7YijX3dMESy6hoWnO0ugT3-qpTe3aMcXcHGv9wLEPQ-sLwUWDqRQghtMmMeVVIFFciEoyekg5g3oi2CWz_-N25Q0TncUJi-zdJ_9ullMg&amp;theater">Berlin ubahn Photo</a></p>
<p><a href="https://www.handelsblatt.com/unternehmen/it-medien/fahrdienst-vermittler-hatten-einen-schlechten-start-so-will-uber-in-deutschland-fuss-fassen/22649734.html?ticket=ST-1674988-1J07KEg4eNk0r5tFigWm-ap5">„Hatten einen schlechten Start“ – So will Uber in Deutschland Fuß fassen</a></p>
<p class="entry-title"><a href="https://www.carsharing-news.de/carsharing-anbieter/">Carsharing Anbieter</a></p>
<p><a href="https://www.handelsblatt.com/unternehmen/mittelstand/gruenderreport-2018-5-gruende-warum-in-deutschland-viele-den-weg-zum-eigenen-start-up-scheuen/22761520.html?ticket=ST-1886355-vdi5uv6QPufMhgGYwnOE-ap5">5 Gründe, warum in Deutschland viele den Weg zum eigenen Start-up scheuen</a></p>
<p><a href="https://www.handelsblatt.com/today/opinion/not-getting-it-why-german-companies-fail-at-digital-innovation/23581568.html?isappinstalled=0&amp;from=timeline&amp;ticket=ST-182024-bwrQnLmeKAAXO6lsE1fS-ap2">Why German companies fail at digital innovation</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MjM5NDMxOTMwNg==&amp;mid=2653059685&amp;idx=4&amp;sn=6c2000de9d8160dcc568756615b59773&amp;chksm=bd5f44c08a28cdd6ec50bb24f4706463e3818061749fe7bf7f417a202679ed0bb27cc51f949f&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">从柏林少女失踪案来谈谈德国车牌识别系统</a></p>
<p><a href="https://www.sueddeutsche.de/auto/automatische-kennzeichenerkennung-wo-ihr-nummernschild-erfasst-wird-1.2188409-3">Was passiert, wenn die Geräte fehlerhaft arbeiten?</a></p>
<p class="buzz-title xs-mb1 "><a href="https://www.buzzfeed.com/de/marcusengert/kennzeichenerfassung-der-polizei-funktioniert-nicht">Wie die Polizei Millionen Autofahrer mit einem System überwacht, das nicht funktioniert</a></p>
<p><a href="https://www.tagesschau.de/wirtschaft/volkswagen-197.html">VW streicht bis zu 7000 Stellen</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MjM5ODY2MzIyMQ==&amp;mid=2652437324&amp;idx=2&amp;sn=a7beb5c705a0abd7f8d97a2bb8dd141b&amp;chksm=bd2b1e168a5c9700c2725015417e9d6bc8ba84788f7502855abe9b243c25be009e8fddb18ae7&amp;mpshare=1&amp;scene=24&amp;srcid=0225SJGvVStUNrHM0Cg47J3n#rd">奥迪、宝马、奔驰是怎么做自动驾驶测试的?</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MjM5NTIyMjA2MQ==&amp;mid=2656744321&amp;idx=1&amp;sn=b4c768f5e834e3acdb8783fc43b9d441&amp;chksm=bd55d4c38a225dd55ff67cbba4cc80fec7420952957d7db73f3fb452c88ea03f8574ac88bd4e&amp;mpshare=1&amp;scene=1&amp;srcid=02265v2oIc1N4OrHcZJhoNnW#rd">麦肯锡:软件驱动重写汽车行业竞争法则</a></p>
<p class="topic-1C9iaKZi"><a href="https://pit.ifeng.com/c/7kn37RFM9JY?_share=weixin&amp;from=groupmessage&amp;isappinstalled=0">德国国家工业战略2030︱中德合作现隐忧</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MzI0OTE4MTY1Ng==&amp;mid=2649565151&amp;idx=1&amp;sn=8c53f26bcedfb08bd7d9875bc1ad303d&amp;chksm=f18ce368c6fb6a7e9d1729203f209f7a1c8ed4750d86c454a35705a01ac05af2c7977bd63769&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">为什么今天德国的大学没有名气?</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&amp;mid=2247495511&amp;idx=1&amp;sn=8a054c59bdeefc35253d5923128da1f2&amp;chksm=fbea5698cc9ddf8e189bbccb910dfd8090d76fb12b442082b6fdf3cb66944f63d9113157a2cd&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">40%创业公司用伪AI忽悠钱,欧洲被AI时代抛弃了吗?</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MzIyMzQyNDc2OQ==&amp;mid=2247484656&amp;idx=1&amp;sn=d19c7c44292901952e8adf9970709256&amp;chksm=e81f3c9edf68b5887b9f9690d3f3e1388b4bb6b56775b469ac16d2f638255d307dd54ddcdb01&amp;mpshare=1&amp;scene=24&amp;srcid=#rd">谈中德企业数字化转型 | 访SAP资深商业咨询师李烨博士</a></p>
<p id="activity-name" class="rich_media_title"><a href="https://mp.weixin.qq.com/s?__biz=MzAwODMzNjU4Ng==&amp;mid=2651225223&amp;idx=5&amp;sn=cb4b532e349bc2fcabc7d3d3eaa79c14&amp;chksm=8082b922b7f53034ed604d1399b506e4036da41382a8f5e18711fcc5b06098e682d420ef7a96&amp;mpshare=1&amp;scene=24&amp;srcid=0309EAlT1u5T7FcDbyjAsE6n#rd">工信部长:别嘚瑟了,看看全球科技实力排名,就知道中国还差多远</a></p>
<p class="n-title"><a href="https://ishare.iclient.ifeng.com/shareNews?forward=1&amp;aid=ucms_7ksTDFZTwJS&amp;aman=787O769Z540S781n068&amp;gud=&amp;ch=SYLB10NEW_DOWN">德国“隐形冠军之父”谈中国制造:实事求是 不要空想</a></p>
<p>&nbsp;</p>The post <a href="http://www.mobabel.net/%e5%be%b7%e5%9b%bd%e6%9c%89%e6%b2%a1%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e4%ba%a7%e4%b8%9a%ef%bc%9f/">德国有没有互联网产业?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e5%be%b7%e5%9b%bd%e6%9c%89%e6%b2%a1%e6%9c%89%e4%ba%92%e8%81%94%e7%bd%91%e4%ba%a7%e4%b8%9a%ef%bc%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Protected: IoT TTT 讲座</title>
		<link>http://www.mobabel.net/iot-ttt-%e8%ae%b2%e5%ba%a7/</link>
					<comments>http://www.mobabel.net/iot-ttt-%e8%ae%b2%e5%ba%a7/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Tue, 05 Feb 2019 20:46:13 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<category><![CDATA[IoT]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4433</guid>

					<description><![CDATA[<p>There is no excerpt because this is a protected post.</p>
The post <a href="http://www.mobabel.net/iot-ttt-%e8%ae%b2%e5%ba%a7/">Protected: IoT TTT 讲座</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<form action="http://www.mobabel.net/wp-login.php?action=postpass" class="post-password-form" method="post">
<p>This content is password protected. To view it please enter your password below:</p>
<p><label for="pwbox-4433">Password: <input name="post_password" id="pwbox-4433" type="password" spellcheck="false" size="20" /></label> <input type="submit" name="Submit" value="Enter" /></p>
</form>The post <a href="http://www.mobabel.net/iot-ttt-%e8%ae%b2%e5%ba%a7/">Protected: IoT TTT 讲座</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/iot-ttt-%e8%ae%b2%e5%ba%a7/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2019新年快乐</title>
		<link>http://www.mobabel.net/2019%e6%96%b0%e5%b9%b4%e5%bf%ab%e4%b9%90/</link>
					<comments>http://www.mobabel.net/2019%e6%96%b0%e5%b9%b4%e5%bf%ab%e4%b9%90/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Mon, 04 Feb 2019 13:16:12 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4442</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70.jpeg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4440" src="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70.jpeg" alt="" width="1079" height="720" srcset="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70.jpeg 1079w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70-300x200.jpeg 300w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70-768x512.jpeg 768w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG70-1024x683.jpeg 1024w" sizes="(max-width: 1079px) 100vw, 1079px" /></a></p>The post <a href="http://www.mobabel.net/2019%e6%96%b0%e5%b9%b4%e5%bf%ab%e4%b9%90/">2019新年快乐</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/2019%e6%96%b0%e5%b9%b4%e5%bf%ab%e4%b9%90/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Happy Chinese New Year 2019</title>
		<link>http://www.mobabel.net/happy-chinese-new-year-2019/</link>
					<comments>http://www.mobabel.net/happy-chinese-new-year-2019/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Mon, 04 Feb 2019 13:13:39 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4438</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p><a href="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71.jpeg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4439" src="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71.jpeg" alt="" width="1079" height="720" srcset="http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71.jpeg 1079w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71-300x200.jpeg 300w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71-768x512.jpeg 768w, http://www.mobabel.net/wp-content/uploads/2019/02/04/WechatIMG71-1024x683.jpeg 1024w" sizes="(max-width: 1079px) 100vw, 1079px" /></a></p>The post <a href="http://www.mobabel.net/happy-chinese-new-year-2019/">Happy Chinese New Year 2019</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/happy-chinese-new-year-2019/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>从码农以及星际爱好者视角看AlphaStar完胜人类职业玩家</title>
		<link>http://www.mobabel.net/%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bdalphastar%e6%98%9f%e9%99%852%e6%af%94%e8%b5%9b101%e5%a4%a7%e6%af%94%e5%88%86%e5%ae%8c%e8%83%9c%e4%ba%ba%e7%b1%bb%e8%81%8c%e4%b8%9a%e7%8e%a9%e5%ae%b6/</link>
					<comments>http://www.mobabel.net/%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bdalphastar%e6%98%9f%e9%99%852%e6%af%94%e8%b5%9b101%e5%a4%a7%e6%af%94%e5%88%86%e5%ae%8c%e8%83%9c%e4%ba%ba%e7%b1%bb%e8%81%8c%e4%b8%9a%e7%8e%a9%e5%ae%b6/#comments</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Fri, 25 Jan 2019 02:21:34 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=4333</guid>

					<description><![CDATA[<p>1. AlphaStar 北京时间01.24凌晨2:00,DeepMind的伦敦总部,《星际争霸2》游戏人工智能AlphaStar首秀。DeepMind是全球人工智能领军,AlphaGo和AlphaZero的创造者,这里就不多介绍了。星际2作为一款当今世界最复杂的即时战略游戏,含经济运营,兵伐诡道,战争迷雾以及瞬息万变的策略,自2016年起,就被DP当做一个攻克目标。相比之下,围棋棋盘是固定的,双方是摊开了局面战斗;而星际2类似于真实战争,作战双方不知道对方的经济详细情况和所有战略战术&#8212;-一句话,战场无法预测,没有套路! 星际2解说 Artosis 与 Rotterda全程解说。首先问了暴雪的游戏总监Tim Morten:“为什么那么热切和DeepMind合作?” 答:“星际2是当今水平最高竞技游戏,也是人工智能研究的里程碑。” “暴雪作为合作伙伴意味着什么?” 答:“我们团队非常困难地开发了一款特殊版本的星际2,作为工具公开发布,同时也和SP紧密合作。这个特殊版本和普通版不同,但是规则相同,适合SP研究。最大的不同就是,我们在游戏研究中必须大量预先设置比如live surfing,所以我们今天将观看的都是比赛回放录播,你知道,实时比赛必须从选手视角直播。” Artosis接着问了DP的研究合作领导Oriol Vinyals:“为什么选择星际作为AI研究目标?” 答:“DP的研究任务就是人工智能,所以找一个检验标准很重要,在开展任务之前,用来检验算法和Agent。这是我们研究的第一个电脑游戏,就像围棋那样 。但星际和其它游戏相比它最突出的挑战就是,很明显下一步对我们的AI Agent来说,挑战的等级很高,我在这个图里高光标注了。” 首先是“信息类型”不完美,意思是Agent不知道也无法预测人类选手现在在做什么。不像围棋,如果你不是大师,将容易输掉比赛。正如我展示的,这对我们是个很大的挑战。” Oriol接着说了过去两年DP做了什么样的研究。他们并不是第一个意识到星际是AI中一个重要研究领域的团队,下面图中可以看到过去15年AI发展历程。2003年即时战略游戏RTS就被视作AI研究方向,2009年就有开源机构研究第一版星际Blood War。过去八年取得不少进展,许多团队开发了Bot和Agent玩游戏,并且玩得不错。他也亲自参与了早期的游戏竞赛AIIDE,甚至被要求作为职业玩家和其他Bot对抗,还因此发现了bug。 PS:2015年已有关于星际Bot的论文 StarCraft Bots and Competitions。 AlphaStar早期就公开资源和工具,每个人都能参与。整个团队做了巨大的努力,才开发了能全程完整玩星际的第一个版本。 接下来Rotterda对Oriol的访问,就是今天比赛录像的相关科普了。 比赛都是2018年12月进行的,只有一张1v1地图上:Catalyst LE。神族VS神族。赛制五局三胜。 接着第一个人类玩家Dario Wünsch(TLO )出场,来自暴雪推荐给DP做合作的职业战队Liquid。他是个德国职业虫族玩家。 TLO说了下他和DP合作的起因,并和Oriol讨论过如何让比赛公平。Rotterda也问了我们观众要问的:“作为虫族玩家,比赛中用神族什么感觉?” 答:“我做了大量的赛前准备,玩了100多场神族,不算专业级别,但在星际天梯赛里也算Top&#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bdalphastar%e6%98%9f%e9%99%852%e6%af%94%e8%b5%9b101%e5%a4%a7%e6%af%94%e5%88%86%e5%ae%8c%e8%83%9c%e4%ba%ba%e7%b1%bb%e8%81%8c%e4%b8%9a%e7%8e%a9%e5%ae%b6/">从码农以及星际爱好者视角看AlphaStar完胜人类职业玩家</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<h2 id='1-alphastar'  id="boomdevs_1" >1. AlphaStar</h2>
<p>北京时间01.24凌晨2:00,DeepMind的伦敦总部,《星际争霸2》游戏人工智能AlphaStar首秀。DeepMind是全球人工智能领军,AlphaGo和AlphaZero的创造者,这里就不多介绍了。星际2作为一款当今世界最复杂的即时战略游戏,含经济运营,兵伐诡道,战争迷雾以及瞬息万变的策略,自2016年起,就被DP当做一个攻克目标。相比之下,围棋棋盘是固定的,双方是摊开了局面战斗;而星际2类似于真实战争,作战双方不知道对方的经济详细情况和所有战略战术&#8212;-一句话,战场无法预测,没有套路!<span id="more-4333"></span></p>
<p>星际2解说 Artosis 与 Rotterda全程解说。首先问了暴雪的游戏总监Tim Morten:“为什么那么热切和DeepMind合作?”</p>
<p>答:“星际2是当今水平最高竞技游戏,也是人工智能研究的里程碑。”</p>
<p>“暴雪作为合作伙伴意味着什么?”</p>
<p>答:“我们团队非常困难地开发了一款特殊版本的星际2,作为工具公开发布,同时也和SP紧密合作。这个特殊版本和普通版不同,但是规则相同,适合SP研究。最大的不同就是,我们在游戏研究中必须大量预先设置比如live surfing,所以我们今天将观看的都是比赛回放录播,你知道,实时比赛必须从选手视角直播。”</p>
<p>Artosis接着问了DP的研究合作领导Oriol Vinyals:“为什么选择星际作为AI研究目标?”</p>
<p>答:“DP的研究任务就是人工智能,所以找一个检验标准很重要,在开展任务之前,用来检验算法和Agent。这是我们研究的第一个电脑游戏,就像围棋那样 。但星际和其它游戏相比它最突出的挑战就是,很明显下一步对我们的AI Agent来说,挑战的等级很高,我在这个图里高光标注了。”</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4337" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53.png" alt="" width="1520" height="833" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53.png 1520w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53-300x164.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53-768x421.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-38-53-1024x561.png 1024w" sizes="(max-width: 1520px) 100vw, 1520px" /></a></p>
<p>首先是“信息类型”不完美,意思是Agent不知道也无法预测人类选手现在在做什么。不像围棋,如果你不是大师,将容易输掉比赛。正如我展示的,这对我们是个很大的挑战。”</p>
<p>Oriol接着说了过去两年DP做了什么样的研究。他们并不是第一个意识到星际是AI中一个重要研究领域的团队,下面图中可以看到过去15年AI发展历程。2003年即时战略游戏RTS就被视作AI研究方向,2009年就有开源机构研究第一版星际Blood War。过去八年取得不少进展,许多团队开发了Bot和Agent玩游戏,并且玩得不错。他也亲自参与了早期的游戏竞赛AIIDE,甚至被要求作为职业玩家和其他Bot对抗,还因此发现了bug。</p>
<p>PS:2015年已有关于星际Bot的论文 <a href="https://www.researchgate.net/publication/304919439_StarCraft_Bots_and_Competitions">StarCraft Bots and Competitions</a>。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4339" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29.png" alt="" width="1516" height="853" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29.png 1516w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29-300x169.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29-768x432.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-23-51-29-1024x576.png 1024w" sizes="(max-width: 1516px) 100vw, 1516px" /></a></p>
<p>AlphaStar早期就公开资源和工具,每个人都能参与。整个团队做了巨大的努力,才开发了能全程完整玩星际的第一个版本。</p>
<p>接下来Rotterda对Oriol的访问,就是今天比赛录像的相关科普了。</p>
<p>比赛都是2018年12月进行的,只有一张1v1地图上:Catalyst LE。神族VS神族。赛制五局三胜。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4340" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27.png" alt="" width="1372" height="713" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27.png 1372w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27-300x156.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27-768x399.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-15-27-1024x532.png 1024w" sizes="(max-width: 1372px) 100vw, 1372px" /></a></p>
<p>接着第一个人类玩家Dario Wünsch(TLO )出场,来自暴雪推荐给DP做合作的职业战队Liquid。他是个德国职业虫族玩家。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4341" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33.png" alt="" width="1537" height="899" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33.png 1537w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33-300x175.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33-768x449.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-24-33-1024x599.png 1024w" sizes="(max-width: 1537px) 100vw, 1537px" /></a></p>
<p>TLO说了下他和DP合作的起因,并和Oriol讨论过如何让比赛公平。Rotterda也问了我们观众要问的:“作为虫族玩家,比赛中用神族什么感觉?”</p>
<p>答:“我做了大量的赛前准备,玩了100多场神族,不算专业级别,但在星际天梯赛里也算Top 1%水平了。”</p>
<p>今天将播放TLO和AlphaStar之间五场比赛中的两场,人类捍卫尊严的比赛回放正式开始!</p>
<h2 id='2-tlo-vs-alphastar'  id="boomdevs_2" >2. TLO vs AlphaStar</h2>
<h3 id='2-1-第一场'  id="boomdevs_3" >2-1. 第一场</h3>
<p>作为星际爱好者,我看不出AI开局和人类玩家有什么不同:造水晶,建筑,probe探路,侦查敌情,前期小骚扰。前五分钟,双方资源人口以及兵力相差不大,AI略为优势。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4342" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18.png" alt="" width="1326" height="293" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18.png 1326w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18-300x66.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18-768x170.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18-1024x226.png 1024w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-25-0-45-18-1320x293.png 1320w" sizes="(max-width: 1326px) 100vw, 1326px" /></a></p>
<p>第五分钟开始,AI开始追猎正面压制TLO的第二基地,双方互秀了一波微操作。但AI的造兵能力这时开始显现,第六分钟兵力已是TLO近乎三倍(28:10)。AI持续优势兵力压制,TLO开始拉上probe抵抗,开局7:06时,TLO打出了gg。</p>
<p>解说员惊诧了,请出DP的研究合作领导David Silver,他说DP是经过几个月研究后才第一次打败人类职业选手。TLO吐槽自己都不知怎么回事,但作为神族的确犯了一些错误。但即使第一场失败,他当时还是非常自信能赢下一场。</p>
<h3 id='2-2-apm'  id="boomdevs_4" >2-2. APM</h3>
<p>解说员 Artosis开始询问APM(Action Per Minute),玩家操作手速&#8211;这也是观众的的疑问,万一比赛规则不对等怎么办,毕竟电脑的APM可以每秒无上限啊。David 解释,他们做了公平性处理,让AI模拟人类玩家手速。从下图可以看出,AI的APM中数平均值是低于人类选手的。况且星际并不是靠手速获胜的,而是靠策略。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4343" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55.png" alt="" width="1516" height="857" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55.png 1516w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55-300x170.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55-768x434.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-04-55-1024x579.png 1024w" sizes="(max-width: 1516px) 100vw, 1516px" /></a></p>
<p>有的观众抓图说AI的APM有时远超人类,比如下图。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-00-58.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4360" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-00-58.png" alt="" width="631" height="67" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-00-58.png 631w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-00-58-300x32.png 300w" sizes="(max-width: 631px) 100vw, 631px" /></a></p>
<p>但我仔细看了回放,战斗时双方APM几乎是持平的,而且人类也会高于AI,这一块是相对公平的。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-43.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4361" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-43.png" alt="" width="569" height="62" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-43.png 569w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-43-300x33.png 300w" sizes="(max-width: 569px) 100vw, 569px" /></a></p>
<h3 id='2-3-ai游戏视角-战争迷雾'  id="boomdevs_5" >2-3. AI游戏视角(战争迷雾)</h3>
<p>David 接着解释AI是以什么样的视角来玩游戏的,并不是我们想的地图全开的模式。类似于<strong>上帝视角模式</strong>,AI会鸟瞰整个地图,但它的所有视觉只限于它的移动单位所能看到的当前视野的合集,其它地区还是被战争迷雾所覆盖。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4344" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32.png" alt="" width="1388" height="934" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32.png 1388w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32-300x202.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32-768x517.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-14-32-1024x689.png 1024w" sizes="(max-width: 1388px) 100vw, 1388px" /></a></p>
<p>人类玩家在操作单位并展现其可视区域时,会做其它的区域点击操作,比如资源掌控,兵力生产时会移动玩家的可视区域。DP分析了这些,模拟了人类这些视觉切换操作,最终设置了AI现有的APM。</p>
<p>Oriol说AI不关心当下发生了什么,不像人类有输赢的概念以及心情变化,所以五场比赛对AI来说都是独立的。TLO接着说了他第二场比赛失利的过程,他采取的防御式打法未能奏效。</p>
<h3 id='2-4-第三场'  id="boomdevs_6" >2-4. 第三场</h3>
<p>这局TLO坚持到了中前期间,比赛中AI用裂光球神乎其神,几乎弹无虚发,非常有效地大量杀伤了TLO的部队。双方在路口拉锯式作战,AI的操作非常强,稍有劣势就后撤,稍有优势就压制,经常有神操作出现。TLO也采取了空投骚扰,小股部队潜入等战术,对战局未产生影响。AI的总人口,资源,兵力,始终都是压制TLO的,14分钟是,AI的兵力几乎是TLO的两倍,胜利天平很明显倾向AI。两分钟后TLO打出gg。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4346" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42.png" alt="" width="1262" height="303" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42.png 1262w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42-300x72.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42-768x184.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-37-42-1024x246.png 1024w" sizes="(max-width: 1262px) 100vw, 1262px" /></a></p>
<p>&nbsp;</p>
<h2 id='3-alphastar-league'  id="boomdevs_7" >3. AlphaStar League</h2>
<p>DP是如何训练AI的,David 做了解释。DP称此训练过程为AlphaStar联赛,第一步,学习数据来自人类在星际联赛里的比赛数据。用神经网络学习这些数据,然后每一个子状况,新的Agent会fork它,包括之前的Agent,加入到AlphaStar联赛内。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4347" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44.png" alt="" width="1735" height="936" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44.png 1735w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44-300x162.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44-768x414.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-45-44-1024x552.png 1024w" sizes="(max-width: 1735px) 100vw, 1735px" /></a></p>
<p>联赛之间的Agent再互相PK,学习。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4348" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17.png" alt="" width="1608" height="937" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17.png 1608w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17-300x175.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17-768x448.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-17-1024x597.png 1024w" sizes="(max-width: 1608px) 100vw, 1608px" /></a></p>
<p>这样神经网络就会持续升级。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4349" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56.png" alt="" width="1536" height="934" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56.png 1536w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56-300x182.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56-768x467.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-46-56-1024x623.png 1024w" sizes="(max-width: 1536px) 100vw, 1536px" /></a></p>
<p>神经网络升级到最终选出某个阶段,某个策略可以打败其它所有策略。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4350" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13.png" alt="" width="1556" height="937" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13.png 1556w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13-300x181.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13-768x462.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-13-1024x617.png 1024w" sizes="(max-width: 1556px) 100vw, 1556px" /></a></p>
<p>神经网络 继续升级。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4351" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28.png" alt="" width="1546" height="924" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28.png 1546w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28-300x179.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28-768x459.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-28-1024x612.png 1024w" sizes="(max-width: 1546px) 100vw, 1546px" /></a></p>
<p>过程中加上额外配置Personal Learning Ojbect 个人学习模块,比如某些特殊的操作,生产某些特殊兵种,最终学习得出最优策略。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4352" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49.png" alt="" width="1569" height="928" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49.png 1569w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49-300x177.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49-768x454.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-47-49-1024x606.png 1024w" sizes="(max-width: 1569px) 100vw, 1569px" /></a></p>
<p>最后产生五个Agent用于比赛,TLO等于是在和五个不同的顶级选手在打比赛。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4353" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26.png" alt="" width="1782" height="936" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26.png 1782w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26-300x158.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26-768x403.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-1-48-26-1024x538.png 1024w" sizes="(max-width: 1782px) 100vw, 1782px" /></a></p>
<p>AlphaStar学习了大量人类选手各类奇特打法,比如农民快攻,炮台快攻。每场比赛的Agent都是预先设置好的,不会随着比赛动态适应并变化。相当于一个人在一场比赛中用固定战术在和TLO打。AlphaStar总共花了七天学习人类联赛,第一阶段学了三天,学习的是联赛白金选手的比赛。这七天的学习数据量,相当于人类学习<strong>200</strong>年!</p>
<p>&nbsp;</p>
<h2 id='4-mana-vs-alphastar'  id="boomdevs_8" >4. MaNa vs AlphaStar</h2>
<p>Oriol分享了DP开发团队的对此站胜利喜悦,他表示团队在短暂庆祝之后将再接再厉。接着顶级玩家MaNa上场,波兰人,真正的神族玩家。<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4354" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16.png" alt="" width="1543" height="663" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16.png 1543w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16-300x129.png 300w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16-768x330.png 768w, http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-2-34-16-1024x440.png 1024w" sizes="(max-width: 1543px) 100vw, 1543px" /></a></p>
<p>但作为神族选手,他好像也没有占什么优势,先输了两局(没有播出)。DP团队做了个视觉流程图来解释神经网络激活原理,对原理感兴趣的最好去看这一段原视频解说或者<a href="https://deepmind.com/blog/alphastar-mastering-real-time-strategy-game-starcraft-ii/">DP科普文</a>。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-55.gif"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4362" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-03-55.gif" alt="" width="784" height="450" /></a></p>
<h3 id='4-1-第三局'  id="boomdevs_9" >4-1. 第三局</h3>
<p>前期MaNa发展正常,但硬抗AI的兵力压制非常辛苦,双方实力差不多持平。但五分钟后AI的空军出现后,占局就逐渐向AI有利的方向发展了,人类几乎之后被按着在地上摩擦,8:02 MaNa打出gg。</p>
<h3 id='4-2-第四局'  id="boomdevs_10" >4-2. 第四局</h3>
<p>MaNa这局表现得很强势,但是短兵相接时,AI对追猎的微操作太强了,红血的追猎被不停地瞬移到阵型后方,人类很难对AI的部队造成战斗减员。导致AI兵力越来越多,人类兵力越打越少,12:48,人类gg。</p>
<p>不出所料,MaNa也输了之后的最后一局。</p>
<p>至此人类10:0全军覆没。</p>
<p>看到这我有点纠结,从人类玩家角度,非常沮丧,我还不愿相信AI能在星际这种策略无穷的游戏中获胜;但做为程序员,我又很高兴看到AI技术发展的这一个巨大的里程碑。</p>
<p>这时直播中间插播了一段DP开发团队的采访记录,以及日常开发视频,很有热血感染力。</p>
<p>&nbsp;</p>
<h2 id='5-人类挽回一点颜面'  id="boomdevs_11" >5. 人类挽回一点颜面</h2>
<p>直播最后,加赛一场,DP更改了AI的之前的<strong>上帝视角模式</strong>,改成<strong>游戏玩家视角模式</strong>。就是说AI模拟Agent“看到”的视觉范围和人类类似,只是面前这个屏幕大小而已。还特别强调了这个技术还未成熟,处于测试阶段(可能意思是就算输了,人类也别高兴)。</p>
<p>MaNa终于在这局为人类挽回了一点颜面,通过大量偷袭一步步占据优势,最终大获全胜。但比赛中明显看出AI在调兵遣将上出现了很大的失误,很可能因为这是测试版?</p>
<p>我和同是星际爱好者的码农朋友讨论了下。</p>
<ol>
<li>AI的APM设置可以说公平。</li>
<li>AI上帝视角对于顶级玩家来说也不算太大优势,因为他们非常关注左下角鸟瞰地图[下图]和游戏中的声音预警。但也有朋友认为最后一场的AI游戏玩家视角,才算真正公平,因为来回切换视角很费时。<br />
<a href="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-26-32.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4363" src="http://www.mobabel.net/wp-content/uploads/2019/01/25/2019-1-25-22-26-32.png" alt="" width="229" height="193" /></a></li>
<li>这十盘比赛前期ai都是靠微操作碾压人类,人类由于生理极限不能长期维持亢奋状态,无法撑到发挥人类战略大局观的优势的中后期。</li>
<li>比赛二位选手都是欧洲玩家,与亚洲玩家比,欧洲玩家大多胜在资源掌控和大局观,欧亚对抗赛中欧洲玩家经常后期翻盘。如果换成亚洲玩家,可能第3点上前期AI不占优势。</li>
<li>比赛五局中,人类每局都相当于在和不同的Agent打,这也算公平,毕竟职业玩家都有私藏多种杀手锏,相当于一个人用了五种打法。</li>
</ol>
<p>&nbsp;</p>
<h2 id='6-赛后'  id="boomdevs_12" >6. 赛后</h2>
<p>DeepMind创始人,AlphaGo之父Demis Hassabis在<a href="http://twitter.com/demishassabis">推特</a>上发文,满是掩饰不住的骄傲:这是游戏人工智能的一个里程碑,第一个干掉人类顶级选手的系统,这展示了我们的牛逼,我们也测试了新的产品原型:游戏玩家视角接口。谢谢选手MaNa,我们将继续努力。星际是个非常复杂的游戏,我很激动,因为AlphaStar背后的技术可以应用于很多场景,比如天气预报以及天气模型等&#8230;&#8230;.相关论文将很快发布</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-22-39-37.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-4335 size-full" src="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-22-39-37.png" alt="" width="730" height="421" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-22-39-37.png 730w, http://www.mobabel.net/wp-content/uploads/2019/01/24/2019-1-24-22-39-37-300x173.png 300w" sizes="(max-width: 730px) 100vw, 730px" /></a></p>
<p>&nbsp;</p>
<h2 id='7-期待'  id="boomdevs_13" >7. 期待</h2>
<p>WCS星际争霸2全球总冠军芬兰选手Serral将于2月15日,为了人类尊严与AlphaStar决战。谁胜谁负,我们拭目以待。</p>
<p>所有比赛录像可以下载:<a href="https://deepmind.com/research/alphastar-resources/">https://deepmind.com/research/alphastar-resources/</a></p>
<p>关于AlphaStar的研究资料:<a href="https://deepmind.com/blog/alphastar-mastering-real-time-strategy-game-starcraft-ii/">https://deepmind.com/blog/alphastar-mastering-real-time-strategy-game-starcraft-ii/</a></p>The post <a href="http://www.mobabel.net/%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bdalphastar%e6%98%9f%e9%99%852%e6%af%94%e8%b5%9b101%e5%a4%a7%e6%af%94%e5%88%86%e5%ae%8c%e8%83%9c%e4%ba%ba%e7%b1%bb%e8%81%8c%e4%b8%9a%e7%8e%a9%e5%ae%b6/">从码农以及星际爱好者视角看AlphaStar完胜人类职业玩家</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e4%ba%ba%e5%b7%a5%e6%99%ba%e8%83%bdalphastar%e6%98%9f%e9%99%852%e6%af%94%e8%b5%9b101%e5%a4%a7%e6%af%94%e5%88%86%e5%ae%8c%e8%83%9c%e4%ba%ba%e7%b1%bb%e8%81%8c%e4%b8%9a%e7%8e%a9%e5%ae%b6/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>女人天生都是产品经理</title>
		<link>http://www.mobabel.net/%e5%a5%b3%e4%ba%ba%e5%a4%a9%e7%94%9f%e9%83%bd%e6%98%af%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86/</link>
					<comments>http://www.mobabel.net/%e5%a5%b3%e4%ba%ba%e5%a4%a9%e7%94%9f%e9%83%bd%e6%98%af%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Tue, 08 Jan 2019 21:56:37 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=2332</guid>

					<description><![CDATA[<p>大蒜,牛油果,西葫芦,包菜,鸡蛋,西红柿,鸡腿,三文鱼,土豆,洋葱,黄瓜,杏仁干&#8230;&#8230; 这是我买菜前在手机里列出的购物清单。我觉得我已经比很多相信自己脑子记得住,却常常丢三落四买了酱油忘了醋的理工男靠谱了。毕竟我买东西都是一样不少买回去的。但是每次回家还总是被老婆数落,这个不对那个不满意的。 有一天我终于忍不住爆发了,说那你给我个购物清单吧,到底要买什么?! 然后她的清单发来了: 大蒜一挂,要 Bio(有机)的 牛油果3个,暗绿色的捏着要硬,软的深褐色的存储不了,也不能太硬,口感不好 西葫芦一根,注意不要破损的,指甲印太多的 包菜一个,要买Spitzkohl(一种尖头包菜),不是那种圆滚滚的包菜,这个口感更好,像国内吃的 鸡蛋一盒6个装,黄壳,不要白壳 西红柿Bio 650g 8个装那种,买前捏一下,软的不能要 两个鸡腿,500g左右盒装,盒子上要标“非转基因” 三文鱼200g,不要冷冻,要冰鲜的,去鲜鱼柜台买 土豆1kg,一定要标注Festkochend,前后多一个少一个单词都不可,比如Mehlig festkochend, vorwiegend festkochend就不行。这种少淀粉炒土豆丝较脆。 洋葱一包,白皮圆形大个的,不要红皮 小脆皮黄瓜,9cm左右的买6根 杏仁干,250g一袋,碳水含量低于4% &#8230;&#8230; PS: 所有上述食品都要看保质期。 你可能要问:土豆不就一种吗,不就是马铃薯,洋芋?那你太天真了,德国是个有200多种土豆,能把土豆吃出花来的国度。 我在超市里盯着这个采购清单,突然无比后悔刚才的冲动。本来作为直男,采购的速度是以光速计算的,只要找到货架位置,刷刷刷把东西扔进购物车就行;现在我必须一个个按规定检查,在一排排同类但不同生产商的货中挑出符合规定的东西,还要看保质期。采购速度直接翻了五倍,本来一刻钟左右我就应该出现在收银台的,现在快一小时了我还在干果区找碳水含量低于4%的杏仁干,最后抓了一个路过的店员一起找了半天才在零食区发现。 好不容易采购完毕回家后,心想这次总该不会不满意了吧。结果棋差一着,还是被抱怨了:那盒鸡蛋有一个蛋破了。我按习惯是打开盒子,扫视一下外壳的,但我万万没想到,那个蛋底部破了。所以今后清单上又多了个标注:鸡蛋检查盒子底部,看有没有蛋液渗出。 &#160; 1. 正题 现在再回到我那个最原始的购物清单:大蒜,牛油果,西葫芦,包菜,鸡蛋,西红柿,鸡腿,三文鱼,土豆,洋葱,黄瓜,杏仁干&#8230;&#8230; 男人的思维方式,大多数情况下是直线式,收敛式,简单式的,他们天生排斥“不必要”的修饰和麻烦。我敢打赌,99.999%的程序猿的购物单和我一样。那些各种各样的“细节”和“形式”,在女人看来无比重要的细枝末节,在多数男人看来,只是浪费时间和吹毛求疵的表现。 这和软件开发有什么关系?&#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e5%a5%b3%e4%ba%ba%e5%a4%a9%e7%94%9f%e9%83%bd%e6%98%af%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86/">女人天生都是产品经理</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<blockquote><p>大蒜,牛油果,西葫芦,包菜,鸡蛋,西红柿,鸡腿,三文鱼,土豆,洋葱,黄瓜,杏仁干&#8230;&#8230;</p></blockquote>
<p>这是我买菜前在手机里列出的购物清单。我觉得我已经比很多相信自己脑子记得住,却常常丢三落四买了酱油忘了醋的理工男靠谱了。毕竟我买东西都是一样不少买回去的。但是每次回家还总是被老婆数落,这个不对那个不满意的。<br />
有一天我终于忍不住爆发了,说那你给我个购物清单吧,到底要买什么?!<span id="more-2332"></span></p>
<p>然后她的清单发来了:</p>
<blockquote><p>大蒜一挂,要 Bio(有机)的<br />
牛油果3个,暗绿色的捏着要硬,软的深褐色的存储不了,也不能太硬,口感不好<br />
西葫芦一根,注意不要破损的,指甲印太多的<br />
包菜一个,要买Spitzkohl(一种尖头包菜),不是那种圆滚滚的包菜,这个口感更好,像国内吃的<br />
鸡蛋一盒6个装,黄壳,不要白壳<br />
西红柿Bio 650g 8个装那种,买前捏一下,软的不能要<br />
两个鸡腿,500g左右盒装,盒子上要标“非转基因”<br />
三文鱼200g,不要冷冻,要冰鲜的,去鲜鱼柜台买<br />
土豆1kg,一定要标注Festkochend,前后多一个少一个单词都不可,比如Mehlig festkochend, vorwiegend festkochend就不行。这种少淀粉炒土豆丝较脆。<br />
洋葱一包,白皮圆形大个的,不要红皮<br />
小脆皮黄瓜,9cm左右的买6根<br />
杏仁干,250g一袋,碳水含量低于4%<br />
&#8230;&#8230;<br />
PS: 所有上述食品都要看保质期。</p></blockquote>
<p class="itemTitle">你可能要问:土豆不就一种吗,不就是马铃薯,洋芋?那你太天真了,德国是个有200多种土豆,能把土豆吃出花来的国度。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-22-34-36.png"><img loading="lazy" decoding="async" class="size-full wp-image-4261 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-22-34-36.png" alt="" width="559" height="855" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-22-34-36.png 559w, http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-22-34-36-196x300.png 196w" sizes="(max-width: 559px) 100vw, 559px" /></a></p>
<p>我在超市里盯着这个采购清单,突然无比后悔刚才的冲动。本来作为直男,采购的速度是以光速计算的,只要找到货架位置,刷刷刷把东西扔进购物车就行;现在我必须一个个按规定检查,在一排排同类但不同生产商的货中挑出符合规定的东西,还要看保质期。采购速度直接翻了五倍,本来一刻钟左右我就应该出现在收银台的,现在快一小时了我还在干果区找碳水含量低于4%的杏仁干,最后抓了一个路过的店员一起找了半天才在零食区发现。</p>
<p>好不容易采购完毕回家后,心想这次总该不会不满意了吧。结果棋差一着,还是被抱怨了:那盒鸡蛋有一个蛋破了。我按习惯是打开盒子,扫视一下外壳的,但我万万没想到,那个蛋底部破了。所以今后清单上又多了个标注:鸡蛋检查盒子底部,看有没有蛋液渗出。</p>
<p>&nbsp;</p>
<h1 id='1-正题'  id="boomdevs_1" >1. 正题</h1>
<p>现在再回到我那个最原始的购物清单:大蒜,牛油果,西葫芦,包菜,鸡蛋,西红柿,鸡腿,三文鱼,土豆,洋葱,黄瓜,杏仁干&#8230;&#8230;</p>
<p>男人的思维方式,大多数情况下是直线式,收敛式,简单式的,他们天生排斥“不必要”的修饰和麻烦。我敢打赌,99.999%的程序猿的购物单和我一样。那些各种各样的“细节”和“形式”,在女人看来无比重要的细枝末节,在多数男人看来,只是浪费时间和吹毛求疵的表现。</p>
<p>这和软件开发有什么关系?</p>
<p>如果把这份购物清单看做客户发给你的产品需求,或者一份软件设计文档呢?</p>
<p>&nbsp;</p>
<h2 id='1-1-产品需求分析'  id="boomdevs_2" >1-1. 产品需求分析</h2>
<p>因为工作领域关系,经常有朋友找我咨询一些软件项目的问题,比如:</p>
<ul>
<li>开发一个教育类App多少钱?</li>
<li>做一个网店多少钱?</li>
<li>我想做一套在地图上实时显示数据并且分析的可视化平台,开发周期一般多久?</li>
<li>我需要一套采购物流系统,开发周期一般多久?</li>
</ul>
<p>我的回答一般都是以这句话反问:</p>
<blockquote><p>我问一下,你所在城市房子多少钱一套呀?</p></blockquote>
<p>别人一般回答:</p>
<blockquote><p>这要看房子大小,朝向,哪个区买的,差别很大啊。</p></blockquote>
<p>我会接着说:</p>
<blockquote><p>做软件和买房子一样的,按软件实际的需求和开发构架的差别,开发周期和费用也是有很大的变化区间的。</p></blockquote>
<p>然后再一步步细问对方的实际需求,最终可以得出一个大概的项目开发预算和时间预估。</p>
<p>&nbsp;</p>
<h2 id='1-2-需求设计文档'  id="boomdevs_3" >1-2. 需求设计文档</h2>
<p>我平时习惯在谈项目初期,先做业务和构架需求分析,但还是时不时一个方面没考虑到,就入了坑。曾经有一个做产品经理的朋友找我合作一个项目:客户要做一个电商系统,项目第一版的要求很<strong>简单</strong>,只要能运行正常购物流程即可:</p>
<ol>
<li>电脑和手机可以访问。</li>
<li>用户可以邮件注册,也能微信注册。</li>
<li>有产品列表展示,购物车,订单,用户扫二维码支付即可。</li>
<li>用户界面自己决定,以后可以换模板</li>
<li>管理员后台能管理产品,批量上传订单,上传上传图片,查看客户订单。</li>
</ol>
<p>我自己手头有一套完整的基于Spring的CMS开发框架,包括前端API模块,后端管理模块,用户权限模块,数据持久化模块等等。所以1245这四点按按估算很容易搞定。第3点里的产品,购物车,订单分成三个小模块,做个二维码支付也不是大问题。而且第一版只要基本功能,不用考虑任何的分布式,大流量,并发抢购等今后做大了要考虑的问题,无需过度设计。</p>
<p>我这个朋友也是个资深程序猿出身,所以我也很放心他作为客户传话筒,所有需求遵循KISS原则,但保留基本的模块扩展性。讨论过后,这第一版的构架图简单如下图所示,我也写了个相应的需求列表。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-23-04-56.png"><img loading="lazy" decoding="async" class="size-full wp-image-4262 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-23-04-56.png" alt="" width="719" height="459" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-23-04-56.png 719w, http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-7-23-04-56-300x192.png 300w" sizes="(max-width: 719px) 100vw, 719px" /></a></p>
<p>我们这边技术层面一切OK,客户那边看起来也很 佛系,对于我们写的第一版的基本需求列表没有异议,事情似乎向着阳光的方向发展。我想到了所有技术和构架上能想到的点,却单单漏了一点:</p>
<blockquote><p>朋友是个男性产品经理。</p></blockquote>
<p>所有该谈的事情谈定了后,最终朋友从客户那里得到了一个产品需求细节文档:</p>
<ol>
<li>用户分级别,享受不同折扣率</li>
<li>产品含品牌属性</li>
<li>产品归于相应的一级和二级目录</li>
<li>产品由不同供货商提供</li>
<li>产品含颜色和大小等属性</li>
<li>产品分官方价格和折扣价格,订单扣费按当天折扣</li>
<li>支付和交易需要后台管理</li>
<li>产品按重量和大小分不同的物流渠道以及关税申报登记</li>
<li>订单最终价格是折扣后价格,加上动态计算的物流价格</li>
<li>订单表含发票和发货模块,同时扩展物流模块</li>
<li>发票模块需要调用一个第三方发票在线生成系统</li>
<li>支付模块并不和支付宝直接对接,而是和一个境外第三方支付机构。</li>
<li>特价,打折模块</li>
<li>官方Blog模块</li>
<li>若干其它模块</li>
</ol>
<p>如果真正做过电商系统的朋友,看到第5点可能会心里一颤,这个就是要做一个完整的SKU系统啊!SKU是大型电商系统的基础,复杂度不言而喻。按之前的开发预算和时间预估,这么多关联模块根本不可能完成。</p>
<p>把朋友电话里暴揍一顿后,按客户的产品需求,产品构架思维导图变成了这样。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-8-0-28-04.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4263" src="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-8-0-28-04.png" alt="" width="826" height="861" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-8-0-28-04.png 826w, http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-8-0-28-04-288x300.png 288w, http://www.mobabel.net/wp-content/uploads/2019/01/07/2019-1-8-0-28-04-768x801.png 768w" sizes="(max-width: 826px) 100vw, 826px" /></a></p>
<p>我得到的教训就是:</p>
<blockquote><p>在没有客户的详细需求设计文档之前,绝对不要做任何项目估算,更别提动手开发!</p></blockquote>
<p>看到这,各位是不是很容易联想到你们的男性产品经理或是项目经理,和客户开个会后,就急冲冲地列出一份新的Feature所需大致功能,然后马上发邮件或者口头传述给开发团队,程序员撸起袖子就开始开发。这里可没有性别歧视,我工作中遇到的男性产品经理或程序猿在做功能设计文档时,常常没有女性产品经理那么细心和耐心。这种文档不明确就开发的做法,看似敏捷快速迭代,但做出来的功能往往和客户所需相差甚远,最后返工付出的代价难以计算。</p>
<h2 id='1-3-分析细节标准'  id="boomdevs_4" >1-3. 分析细节标准</h2>
<p>我们公司有个客服系统,客户在使用产品遇到问题时,会邮件或者电话给客服,客服录入系统后会分配给相应研发团队。这是一个常见的一问一答流程,我们的反馈会通过客服发给客户。</p>
<blockquote><p>客户:我App突然登陆不了<br />
研发:请问您用的系统版本是什么,App的版本是什么?登陆时发生什么错误?<br />
客户:我的系统版本是xx,App版本是xxx。输入用户民和密码后,登陆界面跳转到浏览器,然后就没反应了。<br />
研发:请问浏览器里显示什么,有没有错误代码,是什么时候登陆的?<br />
客户:浏览器里显示“Request Error”,时间是xxxx<br />
研发:请尝试清空App的缓存,以及浏览器的缓存。步骤如下&#8230;&#8230;&#8230;.<br />
&#8230;&#8230;.</p></blockquote>
<p>有没有感觉这样的沟通成本其实很高,客户提供的信息模糊,研发问得也不尽清晰。这里和产品需求文档类似,到底细节的标准在哪?</p>
<p>我建议我们程序猿在做需求分析时,先向你的女朋友或妻子学习如何分析细节,比如分辨下面这些:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-4272 size-medium" src="http://www.mobabel.net/wp-content/uploads/2019/01/08/8a2d4cacf6544d7893e29022d185c75a_215640-300x186.jpeg" alt="" width="300" height="186" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/08/8a2d4cacf6544d7893e29022d185c75a_215640-300x186.jpeg 300w, http://www.mobabel.net/wp-content/uploads/2019/01/08/8a2d4cacf6544d7893e29022d185c75a_215640.jpeg 640w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>呃,好吧,当我没说&#8230;&#8230;</p>
<p>我的建议是需求也业务拆分尽可能详细,考虑周全,最好能覆盖今后绝大部分的测试用例。</p>
<p>比如需要开发一个用户注册登录的功能,从某个男性产品经理嘴里说出来可能就一句话:给我开发一个用户系统,能注册,能登录,三天够不够?</p>
<p>从女性角度,她们习惯把一件简单的事情变的复杂化&#8212;-如果这里的简单并没有你想象的那么简单呢?</p>
<p>如果你足够细心,就需要和客户做仔细沟通后达成共识,最终交付给研发团队的应该是如下一份需求Kickoff列表(只是举例,考虑并非100%全面):</p>
<ul>
<li>用email注册还是用户名注册?</li>
<li>如果是用户名,最短几位,最长几位,允许特殊字符吗,密码最短几位,最长几位?</li>
<li>如果email注册,是密码一起填写注册,还是有验证步骤?</li>
<li>点击注册前,是否展示用户协议。不勾选显示什么错误?</li>
<li>如果有验证步骤,需要手机验证吗?如果要,要对接哪个API,验证码长短,过期时间?</li>
<li>手机验证码发送时间间隔,以及发送频率限制</li>
<li>如果只需邮箱验证,发送给用户的激活链接有效期多久,过期了怎么办?</li>
<li>验证这个业务要不要持久化?</li>
<li>发送激活邮件的模板,HTML还是txt,谁来设计?</li>
<li>激活链接过期后,显示什么错误,然后跳转到验证邮件重发界面?</li>
<li>激活链接激活后,显示什么信息,自动跳转到哪个界面,比如设置密码界面?</li>
<li>密码设置允许特殊字符吗,最短几位,最长几位?</li>
<li>密码入库前采用何种加密算法,以哪个属性作为salt?</li>
<li>用户密码设置成功后,跳转哪个界面,显示什么消息?</li>
<li>用户后期允不允许改用户名或注册邮箱吗?</li>
<li>用户后期修改密码是否需要邮件或手机验证</li>
<li>允不允许单用户多地点登录,如果不允许,显示什么错误自动登出</li>
<li>支不支持单点登录SSO</li>
<li>要不要开发移动端App,需不需要提供注册和登录API</li>
<li>API需不需要支持OAuth2,或是Token</li>
<li>登录构架是单体还是需要考虑分布式Session</li>
<li>用户权限系统设计,多Role或是单Role设计</li>
<li>鉴权系统设计是无状态还是有状态</li>
<li>用户自己或者管理员关于权限系统的操作流程是什么?</li>
<li>有没有第三方SNS接口注册接入,如果接入,需不需要同步头像,需不需要同时必须新建本地账号。</li>
<li>第三方SNS接入的流程,回调接口,以及界面设计</li>
<li>相关前端和App界面设计图,错误对话框UI</li>
</ul>
<p>需求文档越详细,后期开发与测试遇到的误解就越少,试错成本也越低。该文档必须保持在线实时更新,有任何变更,研发团队必须第一时间得知。不要通过短信或者Email更改需求,这会使团队和产品经理陷入无尽的扯皮炼狱之中。</p>
<h2 id='1-4-细节的力量'  id="boomdevs_5" >1-4. 细节的力量</h2>
<p>如果说女性太注重于细节,是期待对方给足自己安全感。那么我们在做项目时注重细节,其实也是给自己一种安全感:减少返工。一个口碑好的软件,肯定是从用户需求分析开始就研究细节,设计时重视细节。</p>
<p>大部分程序猿都是非常看重技术,但从男性视角介入软件产品设计时,很容易陷入工程师思维:先考虑怎么做,再考虑做什么,最后考虑为什么做?一看到新项目,脑海里浮现的立刻是各类框架,各类中间件,高并发,恨不得立刻开机撸码。</p>
<p>而从女性角度介入软件产品设计时,她们往往会带有与生俱来的消费者直觉,会从第三方角度看事情。</p>
<p>我这里不是简单地贴职场标签,而是提醒不管是程序猿还是程序媛们,思考一下自己在设计产品时思维的盲区。</p>
<p>最后:</p>
<p>女人天生都是产品经理,<span style="color: #ff0000;"><strong>只不过</strong></span></p>
<p><span style="color: #ff0000;"><a href="http://www.mobabel.net/wp-content/uploads/2019/01/08/2332.jpg"><img loading="lazy" decoding="async" class="size-full wp-image-4276 aligncenter" src="http://www.mobabel.net/wp-content/uploads/2019/01/08/2332.jpg" alt="" width="1080" height="720" srcset="http://www.mobabel.net/wp-content/uploads/2019/01/08/2332.jpg 1080w, http://www.mobabel.net/wp-content/uploads/2019/01/08/2332-300x200.jpg 300w, http://www.mobabel.net/wp-content/uploads/2019/01/08/2332-768x512.jpg 768w, http://www.mobabel.net/wp-content/uploads/2019/01/08/2332-1024x683.jpg 1024w" sizes="(max-width: 1080px) 100vw, 1080px" /></a></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>The post <a href="http://www.mobabel.net/%e5%a5%b3%e4%ba%ba%e5%a4%a9%e7%94%9f%e9%83%bd%e6%98%af%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86/">女人天生都是产品经理</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e5%a5%b3%e4%ba%ba%e5%a4%a9%e7%94%9f%e9%83%bd%e6%98%af%e4%ba%a7%e5%93%81%e7%bb%8f%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>程序员开发软件的意义在哪?</title>
		<link>http://www.mobabel.net/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%bc%80%e5%8f%91%e8%bd%af%e4%bb%b6%e7%9a%84%e6%84%8f%e4%b9%89%e5%9c%a8%e5%93%aa%ef%bc%9f/</link>
					<comments>http://www.mobabel.net/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%bc%80%e5%8f%91%e8%bd%af%e4%bb%b6%e7%9a%84%e6%84%8f%e4%b9%89%e5%9c%a8%e5%93%aa%ef%bc%9f/#respond</comments>
		
		<dc:creator><![CDATA[leelight]]></dc:creator>
		<pubDate>Sat, 22 Dec 2018 21:41:17 +0000</pubDate>
				<category><![CDATA[Essay]]></category>
		<guid isPermaLink="false">http://www.mobabel.net/?p=2422</guid>

					<description><![CDATA[<p>有一篇热文《写了8年的代码,做过的项目都下线了,程序员的意义在哪里!》,作者8年工作和业余时间开发几十个项目,几乎都关闭了。 想当初,很用心的去开发每一个项目;如今,这些项目只能一个个关闭。 这真的使我很悲观: 我花了那么多的时间精力,去做的事情,竟然如此的毫无意义。 我相信这也是所有程序员到一定人生阶段时必定会思考的一个哲学问题:程序员开发软件的意义在哪? 是为了养家糊口,是为了追寻技术,是为了创业,还是为了改变世界? 在软件咨询业摸爬滚打十余年后,我在整理简历时遇到一个难题,就是工作经验那一块,做过的项目太多了,要写好几页,这与当前硅谷的人力资源强调简历必须简洁的原则严重不符,因为招聘专员在你的简历上的目光扫描只有短短的15至30秒。德国传统的简历标准允许稍微冗长,毕竟不少公司废除纸质简历投递是这几年才执行的。但德国有历来向美国看齐的传统,所以大型公司或者新兴科技IT公司的人力资源,今后逐步采用硅谷的标准会是趋势。 我的首要业务,是把原本三四页的几十个项目简介缩短到两页以内。于是我开始一条条回顾,从业至今,做过的那些项目。 1. 那些年,做过的C项目 1-1. 第1个C项目 工作第一个项目,是为斯图加特地铁公司做的一个轨道内部管理移动系统,前端后端,数据库,后台数据接口全部一个人完成。 技术: 后端:J2EE Servlet,数据接口Hibernate,通过SOAP和SAP的接口与地铁公司数据交互。 移动端:JavaME,开发界面和业务逻辑,数据采录,显示轨道的静态地图图片。那时Google Map刚起步,也没有适合地铁公司数据格式的开源地图服务器,花了很大力气,架设了一个商用地图服务器,搞定了地图这一块。 前端:GWT,Google的一个Web Rich Client框架 项目现状:卒 原因: JavaME已经死了,Nokia那么庞大的帝国已轰然倒下。 臃肿的SOAP接口被RPC或Rest取代。 Hibernate,半死不活。SSM大行其道。 静态无交互地图显示随着Google Map和其它优秀开源地图服务器的普及也淡出历史。 GWT早已被各类前端框架替代 留在简历:留。 毕竟面试时,德国HR喜欢问的,常常是你做的第一个项目,哪怕你工作了多年。和其它刚入行的新人一样,我从这个项目中,海绵一般地吸收新知识,学了非常多的技术,包括移动端的设计和构架,后端数据接口的交互,以及数据库的设计与应用,这些技术习惯我一直沿用至今。 &#160; 1-2. 第2个C项目 德国本土一个娱乐信息互动平台的移动端。&#46;&#46;&#46;</p>
The post <a href="http://www.mobabel.net/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%bc%80%e5%8f%91%e8%bd%af%e4%bb%b6%e7%9a%84%e6%84%8f%e4%b9%89%e5%9c%a8%e5%93%aa%ef%bc%9f/">程序员开发软件的意义在哪?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></description>
										<content:encoded><![CDATA[<p>有一篇热文《<a href="https://www.cnblogs.com/senlinmu/p/9805684.html">写了8年的代码,做过的项目都下线了,程序员的意义在哪里!</a>》,作者8年工作和业余时间开发几十个项目,几乎都关闭了。</p>
<blockquote><p>想当初,很用心的去开发每一个项目;如今,这些项目只能一个个关闭。</p>
<p>这真的使我很悲观: 我花了那么多的时间精力,去做的事情,竟然如此的毫无意义。</p></blockquote>
<p>我相信这也是所有程序员到一定人生阶段时必定会思考的一个哲学问题:<strong>程序员开发软件的意义在哪?</strong></p>
<p>是为了养家糊口,是为了追寻技术,是为了创业,还是为了改变世界?<span id="more-2422"></span></p>
<p>在软件咨询业摸爬滚打十余年后,我在整理简历时遇到一个难题,就是工作经验那一块,做过的项目太多了,要写好几页,这与当前硅谷的人力资源强调简历必须简洁的原则严重不符,因为招聘专员在你的简历上的目光扫描只有短短的15至30秒。德国传统的简历标准允许稍微冗长,毕竟不少公司废除纸质简历投递是这几年才执行的。但德国有历来向美国看齐的传统,所以大型公司或者新兴科技IT公司的人力资源,今后逐步采用硅谷的标准会是趋势。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-22-21-33-41.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-3944 size-medium" src="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-22-21-33-41-245x300.png" alt="" width="245" height="300" srcset="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-22-21-33-41-245x300.png 245w, http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-22-21-33-41.png 313w" sizes="(max-width: 245px) 100vw, 245px" /></a></p>
<p>我的首要业务,是把原本三四页的几十个项目简介缩短到两页以内。于是我开始一条条回顾,从业至今,做过的那些项目。</p>
<h1 id='1-那些年-做过的c项目'  id="boomdevs_1" >1. 那些年,做过的C项目</h1>
<h2 id='1-1-第1个c项目'  id="boomdevs_2" >1-1. 第1个C项目</h2>
<p>工作第一个项目,是为斯图加特地铁公司做的一个轨道内部管理移动系统,前端后端,数据库,后台数据接口全部一个人完成。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Servlet,数据接口Hibernate,通过SOAP和SAP的接口与地铁公司数据交互。</li>
<li>移动端:JavaME,开发界面和业务逻辑,数据采录,显示轨道的静态地图图片。那时Google Map刚起步,也没有适合地铁公司数据格式的开源地图服务器,花了很大力气,架设了一个商用地图服务器,搞定了地图这一块。</li>
<li>前端:GWT,Google的一个Web Rich Client框架</li>
</ul>
<p><strong>项目现状</strong>:卒</p>
<p><strong>原因</strong>:</p>
<ul>
<li>JavaME已经死了,Nokia那么庞大的帝国已轰然倒下。</li>
<li>臃肿的SOAP接口被RPC或Rest取代。</li>
<li>Hibernate,半死不活。SSM大行其道。</li>
<li>静态无交互地图显示随着Google Map和其它优秀开源地图服务器的普及也淡出历史。</li>
<li>GWT早已被各类前端框架替代</li>
</ul>
<p><strong>留在简历</strong>:留。</p>
<p>毕竟面试时,德国HR喜欢问的,常常是你做的第一个项目,哪怕你工作了多年。和其它刚入行的新人一样,我从这个项目中,海绵一般地吸收新知识,学了非常多的技术,包括移动端的设计和构架,后端数据接口的交互,以及数据库的设计与应用,这些技术习惯我一直沿用至今。</p>
<p>&nbsp;</p>
<h2 id='1-2-第2个c项目'  id="boomdevs_3" >1-2. 第2个C项目</h2>
<p>德国本土一个娱乐信息互动平台的移动端。</p>
<p><strong>技术</strong>:后端开发J2EE Servlet, 移动端JavaME</p>
<p><strong>项目现状</strong>:卒</p>
<p><strong>原因</strong>:平台已倒闭</p>
<p><strong>留在简历</strong>:否</p>
<p>&nbsp;</p>
<h2 id='1-3-第3个c项目'  id="boomdevs_4" >1-3. 第3个C项目</h2>
<p>给法兰克福政府机构做的Mobile城市景点热点导航。</p>
<p><strong>技术</strong>:后端开发J2EE Servlet, 前端JSP+JS做HTML5</p>
<p><strong>项目现状</strong>:卒</p>
<p><strong>原因</strong>:Google map一出,谁与争锋</p>
<p><strong>留在简历</strong>:否</p>
<p>&nbsp;</p>
<h2 id='1-4-第4个c项目'  id="boomdevs_5" >1-4. 第4个C项目</h2>
<p>德国拜仁州铁路购票系统。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Spring,MySQL。德国除了德铁是一半国有外,各个州和城市的铁路系统都是私营企业经营。各个企业都是独立的票务系统,但它们一般都使用德国的两家铁路票务系统平台。这两家系统的标准和接口是完全不同的。我的工作,是开发一套通用的API,通过SOAP和Rest接口与两大系统平台接口兼容对接,实现德铁与拜仁铁路票务系统的数据整合。</li>
<li>移动端:JavaME,车次查询,票务系统</li>
</ul>
<p><strong>项目现状</strong>:半卒</p>
<p><strong>原因</strong>:</p>
<ul>
<li>JavaME已死</li>
<li>后端服务API可能还在继续运行,用在后来新的Android或iOS移动端上。</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>从这个项目我学到了,如何开发一套完善的合乎标准的API。</p>
<p>这时我已经把一个叫J2ME Polish的框架用的炉火纯青,它可以在Nokia等手机和Blackberry上做出比系统原生界面炫得多的界面。当时国内相当多的团队也在用,我甚至想写本中文的技术书。这个想法后来被智能手机系统iOS和Android的诞生掐灭了。</p>
<h2 id='1-5-第5-6-7-9个c项目'  id="boomdevs_6" >1-5. 第5、6、7、9个C项目</h2>
<ul>
<li>手机多媒体云备份系统,类似dropbox</li>
<li>本土移动LBS社交平台(2009),类似陌陌</li>
<li>为德国电信开发的移动银行客户端</li>
<li>本土团购平台</li>
</ul>
<p><strong>技术</strong>:后端开发J2EE Spring,MySQL, 移动端Android,iOS,JavaME</p>
<p><strong>项目现状</strong>:卒</p>
<p><strong>原因</strong>:平台已倒闭或项目被下马</p>
<p><strong>留在简历</strong>:择其一</p>
<p>&nbsp;</p>
<h2 id='1-6-第8个c项目'  id="boomdevs_7" >1-6. 第8个C项目</h2>
<p>2009年,德国第一个移动拼车平台,类似于滴滴(滴滴于2012年起步)。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Spring,MySQL。搭乘、好友、消息、推送、地图、匹配系统。</li>
<li>移动端:Android,iOS</li>
<li>前端: GWT</li>
</ul>
<p><strong>项目现状</strong>:另一种形式的生命延续</p>
<p><strong>原因</strong>:</p>
<ul>
<li>项目后来被德国某车厂收购,改成目前颇受欢迎的汽车共享系统。</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>如之前一样,整个项目的开发构架从前到后都深入参与。并且负责开发了一个核心组件:搭乘路线与搭乘人员的Buffer zone匹配系统。一想到这个核心算法一直服务至今,有点小开心。</p>
<p>&nbsp;</p>
<h2 id='1-7-第10-11个c项目'  id="boomdevs_8" >1-7. 第10-11个C项目</h2>
<p>2011,是HTML5和Widget崛起的元年。很多手机生产商都发布了自家的小程序Widget框架。</p>
<ul>
<li>某大型机械企业生产线二维码移动作业系统</li>
<li>某大型物流公司移动办公CRM系统</li>
</ul>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:Node.js,MySQL</li>
<li>移动端:HTML5 Hybrid App 或Widget</li>
<li>前端: HTML5</li>
</ul>
<p><strong>项目现状</strong>:不明</p>
<p><strong>原因</strong>:</p>
<ul>
<li>用在工业或者商业领域内部</li>
<li>HTML5和Node.js一直很茁壮的成长</li>
</ul>
<p><strong>留在简历</strong>:择其一</p>
<p>那年HTML5 Hybrid技术刚刚起步,还没有各类优秀的框架(PhoneGap刚出生)。Widget各家标准不一,手机兼容性问题非常严重,开发时非常痛苦。今年Widget小程序又被各个流量渠道吵了冷饭,不禁让人联想起时尚的轮回。</p>
<p>&nbsp;</p>
<h2 id='1-8-第12-22个c项目'  id="boomdevs_9" >1-8. 第12-22个C项目</h2>
<p>2012 入职一个大型咨询公司,开发的多为本土工业界内部管理系统。</p>
<ul>
<li>企业考勤系统,招聘系统</li>
<li>德铁大型GIS内部作业管理系统</li>
<li>某大型能源公司CRM系统</li>
<li>德铁AR虚拟增强外业管理系统</li>
<li>某航天科技公司卫星数据分析平台</li>
<li>若干企业管理系统</li>
</ul>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE,.NET,PHP,ROR,Oracle,MySQL</li>
<li>移动端:iOS, Android原生App或者HTML5 Hybrid App</li>
<li>前端: JQuery和各类UI框架</li>
</ul>
<p><strong>项目现状</strong>:大半仍在稳定运作并持续更新</p>
<p><strong>原因</strong>:</p>
<ul>
<li>用在工业或者商业领域内部,运行和迭代周期长。</li>
<li>业务层面高于技术层面,而且技术栈较宽,多选择茁壮(老旧)且稳定的商用构架。</li>
</ul>
<p><strong>留在简历</strong>:择其一二</p>
<p>工业软件咨询业从成本出发,多宣传和采用HTML5 Hybrid技术,虽然有Cordova等框架,但是和底层的大量交互仍是深坑不断,这也是我后来一直对Hybrid App保持谨慎的原因。</p>
<p>这些项目做下来,完善了自己对客户需求开发流程,以及文档和标准的理解,明白项目不仅仅是软件开发那么简单。</p>
<p>&nbsp;</p>
<h2 id='1-9-第23-27个c项目'  id="boomdevs_10" >1-9. 第23-27个C项目</h2>
<p>2015 德国的工业4.0口号越喊越响,做的项目也逐渐向IoT方向靠拢。公司也逐步采用开源框架。</p>
<ul>
<li>数家大型能源公司智能电网内部管理项目</li>
<li>风力发电IoT预测管理系统</li>
<li>其它公司内部管理系统</li>
</ul>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:除了上述技术栈,多了SAP HANA,和一些开源框架</li>
<li>移动端:同上</li>
<li>前端: Extjs和相关UI框架</li>
</ul>
<p><strong>项目现状</strong>:半数仍在稳定运作并持续更新</p>
<p><strong>原因</strong>:</p>
<ul>
<li>同上</li>
</ul>
<p><strong>留在简历</strong>:择其一二</p>
<p>&nbsp;</p>
<h2 id='1-10-第28个c项目'  id="boomdevs_11" >1-10. 第28个C项目</h2>
<p>个人很看好物联网IoT这个领域,涵盖车联网,智能家居,云和大数据等方向。于是入职现在的公司。</p>
<ul>
<li>智能家居系统</li>
</ul>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:OSGi,云,各类最新开源框架,各类硬件标准</li>
<li>前端/移动端:Android,iOS原生开发,各类最新开源框架</li>
<li>CI/CD: 各类最新开源框架,DevOps</li>
</ul>
<p><strong>项目现状</strong>:长期稳定运作并持续更新</p>
<p><strong>留在简历</strong>:是</p>
<p>除了能接触到业内较为前沿的技术领域外,也深入了解了大型团队协作化的各类流程。大公司开发流程标准虽然繁琐,但从另一方面看,这是对质量的一种保障。对于团队开发,测试,持续集成和持续开发的流程也有了全新的理解,比如在保证进度的同时保证软件发布的质量等这类永恒的问题。</p>
<p>&nbsp;</p>
<h2 id='1-11-c项目小结'  id="boomdevs_12" >1-11. C项目小结</h2>
<p>虽处德国,但我的C项目经历中的消费领域项目,基本是伴随中美互联网浪潮,移动互联网浪潮,以及云浪潮同步进行的。我相信你们肯定做过下列某个或某些领域:团购,LBS交友,SNS,同城,搭乘,车分享等等。我做的其中八九成此类项目在德国已经挂掉,就如国内IT行业一样:大浪退去,谁在裸泳一清二楚。有些项目挂了,说不上方向不对,而是理念在当时太过于超前,受限于硬件或技术。只能说是,正确的项目生在了正确的地点,却生在了错误的时间。</p>
<p>而其中工业界内部软件,多半至今还在运作。理念和流程的惰性,没有让管理者决策过于盲目的追随互联网的浪潮。工业领域数字化技术虽相对陈旧,但强调运行稳定,从某个角度来看,这也算是德国工业界相对务实的一种表现吧。如果程序员希望自己开发的软件寿命能久一点,那么可以进工业界或者金融界工作,相对来说,这些领域的系统更强调稳定。</p>
<p>这些已经挂掉的项目的意义,在于推动了整个数字化世界的不断发展;对个人开发者来说,也不断积累了技术栈的经验,同时也不断的更新个人技术储备。</p>
<p>好了,如果能耐着性子读到这,大家一定有个疑问,什么是<strong>C项目</strong>?</p>
<p>这里<strong>C</strong>指的是<b>Careers</b>,职业项目。下面说说程序员修炼必修科目:<strong>Side Project</strong>。</p>
<p>&nbsp;</p>
<h1 id='2-程序员的另一面'  id="boomdevs_13" >2. 程序员的另一面</h1>
<p>Side Project是指程序员在工作之余,做的一些开源,外包或者兴趣项目。有些同事,很可能是某个开源项目的大牛,也可能自己开发数字货币,有的甚至已经有了自己的公司,本质工作只是副业。</p>
<p>一个人在一个行业领域工作久了,必然会出现啃老本的状况,比方说用三五年时间积累的经验,不断重复十年,二十年,三十年,进入一个稳定的个人舒适区。在上述C项目里,我能移除一部分,也是因为某些项目是用之前相同框架改动开发出来的,所谓经验的重复性,泛善可陈,HR也不会有兴趣。</p>
<h2 id='2-1-鸡蛋放一个篮子里的风险'  id="boomdevs_14" >2-1. 鸡蛋放一个篮子里的风险</h2>
<p>IT是个不同于传统行业的特殊行业,除了某些领域偏底层开发外,知识的迭代非常快,传统行业三十年河东三十年河西,IT可能缩短到两三年。程序员除了在自身擅长领域深挖之外,还要注重培养其他领域的广度。广度不代表什么都学,而是你自己清楚哪些可以不学。</p>
<p>我永远记得2011年8月的一个阳光明媚的上午,突然看到一则新闻:Nokia宣布放弃自家研发多年的Symbian系统,拥抱微软WP系统。我立刻告诉了我对面的Andy,他脸色大变,马上去老板办公室把老板喊了过来,俩人脸色凝重地又仔细看了这则新闻,然后去会议室开了很久的会。Andy是个Symbian C++开发高手,当时负责一个将虚拟人生(Second Life)这款游戏移植到Symbian系统里的项目,公司投资开发了一年多。这则新闻意味着:老板一年多的投资打了水漂,Andy从业多年的领域突然被造碗的砸了饭碗。Andy后来转向了iOS开发,我离职几年后偶遇,他已经转行汽车行业客户经理了。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2018/12/22/2422.jpg"><img loading="lazy" decoding="async" class="wp-image-4036 size-medium aligncenter" src="http://www.mobabel.net/wp-content/uploads/2018/12/22/2422-300x203.jpg" alt="" width="300" height="203" srcset="http://www.mobabel.net/wp-content/uploads/2018/12/22/2422-300x203.jpg 300w, http://www.mobabel.net/wp-content/uploads/2018/12/22/2422-768x519.jpg 768w, http://www.mobabel.net/wp-content/uploads/2018/12/22/2422-1024x692.jpg 1024w, http://www.mobabel.net/wp-content/uploads/2018/12/22/2422.jpg 1079w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<h2 id='2-2-通过side-project不断学习'  id="boomdevs_15" >2-2. 通过Side Project不断学习</h2>
<p>当工作中如果长期被分配做性质雷同的任务,自己感觉技术停滞不前时,那就说明你要充电了。学习是程序员永远不能丢弃的基本技能,而Learn by doing,则是掌握新技能不变的定律。Side Project是最好的途径,即掌握了技术,又可以通过开源或者外包,提高自己在同行中的声望。当然,每个人发展最优路径不同,坚持下去很可能副业变主业,业界有很多典范。</p>
<h2 id='2-3-第1个s项目'  id="boomdevs_16" >2-3. 第1个S项目</h2>
<p>起源于我的硕士毕业论文,一个轻量级矢量地图服务器SUAS Map Server。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:PHP,MySQL,Postgre</li>
<li>移动端:J2ME</li>
<li>前端: Jquery,众多开源框架</li>
</ul>
<p><strong>项目现状</strong>:开源,停止维护</p>
<p><strong>原因</strong>:</p>
<ul>
<li>持续维护了五年,期间和大学教授一直保持合作,发表了一系列论文</li>
<li>当核心需求越做越深时,已经突破了“轻量”这个概念</li>
<li>想兼容太多GIS行业ISO标准和数据格式,任务繁重</li>
<li>做大型框架经验累积不够</li>
<li>Google Map把我想做的功能也做了</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>虽然业内一直吐槽PHP,但它不失是一个优秀的语言,尤其是用了类构架后,PHP一样可以OOP,代码质量是可以保证的。项目用户多集中在高校和科研机构,毕竟轻量级不适用于工业和消费级领域。我学习了如何从无到有开发一个完整框架,如何从行业ISO标准落地实际项目。</p>
<p>&nbsp;</p>
<h2 id='2-4-第2个s项目'  id="boomdevs_17" >2-4. 第2个S项目</h2>
<p>免费的移动字典和背单词App:Modict和 Momemo。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE,MySQL</li>
<li>移动端:J2ME,Android</li>
</ul>
<p><strong>项目现状</strong>:开源,停止维护</p>
<p><strong>原因</strong>:</p>
<ul>
<li>Android和iOS商店里同质化App太多</li>
<li>维护五年,后来的Android版本因系统碎片化也导致维护难度升级</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>作为电子设备爱好者,从开始学德语时,就特别反感随身带一本纸质字典。在Android和iOS没有出现之前,所有德国的手机都是预装拉丁文系统。这类系统不支持中文显示,就算装了德汉字典软件,只能显示一个个方框,现在用智能手机的同学很难体会到那种痛苦。</p>
<p>当时不信邪,试了各种技术方法不成功(汉字图片是个很low的方法),直到我发现了GB2312点阵字库。2006年夏,当我把一个显示了汉字的App展示给室友时看时,他一脸的惊奇和兴奋。光有汉字显示不够,我又想办法开发了拼音输入,第一次在德文系统里实现了汉字输入和显示。然后字典软件顺理成章诞生,期间对大数据切分索引算法(字典树)和各类压缩算法做了很深入的研究,在功能机上实现了小内存(200kb+)搜索十几万(20mb+)的数据秒回,几乎榨干了App运行时每一块内存。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2018/12/22/modict.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3952" src="http://www.mobabel.net/wp-content/uploads/2018/12/22/modict.jpg" alt="" width="920" height="250" srcset="http://www.mobabel.net/wp-content/uploads/2018/12/22/modict.jpg 920w, http://www.mobabel.net/wp-content/uploads/2018/12/22/modict-300x82.jpg 300w, http://www.mobabel.net/wp-content/uploads/2018/12/22/modict-768x209.jpg 768w" sizes="(max-width: 920px) 100vw, 920px" /></a></p>
<p>在欧洲求学或工作的朋友的支持给了这个项目很大的推动力,在基础功能的基础上,又添加了字典通配符模糊搜素和在线搜索,添加了英汉,法汉,意汉等各种语言字库,添加了背单词等功能,并应用户需求添加了多款软件皮肤。一些用户告诉我,靠Modict背单词过了各类语言考试。</p>
<p>虽然停止更新,十年后的一天,我在论坛上碰到一个陌生人发消息给我,问我是不是手机字典Modict的作者,他说他记得我的ID,因为我最开始时通过论坛发布过App。他说他很感谢我,因为他在学习和工作中,用了这个App很久,直到换了智能手机。在这之前,他从未想过能在他的外文系统手机里能用上可以显示汉字的App,更别提还能输入中文!</p>
<p>我突然觉得,之前很多次为攻克难题挑灯编程的通宵很值,毕竟你的软件在用户的生命中陪伴了他或她某一段时间,并且占据了他们回忆中一点点的位置,对我来说,这就足够了。</p>
<p>&nbsp;</p>
<h2 id='2-5-第3个s项目'  id="boomdevs_18" >2-5. 第3个S项目</h2>
<p>2010-2015,涵盖了全球400多加物流公司的全球快递追踪平台,Packetracer。</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Spring,MySQL,PHP</li>
<li>移动端:J2ME,Android,iOS,QNX,WP,JQuery Mobile</li>
</ul>
<p><strong>项目现状</strong>:闭源,停止维护。可能重启</p>
<p><strong>原因</strong>:</p>
<ul>
<li>维护五年,精力难以为继</li>
<li>没认真思考商业前景</li>
<li>后端接入接口太多,异常太多,人工维护极其困难</li>
<li>技术切面太多,多线作战</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>后台系统,核心基于自研的爬虫框架,后来逐步完善了多用户系统,自动日志系统,自动路由切换,Rest API,一整套图像识别系统;以一己之力,开发了几乎涵盖了市面所有手机系统的App:iOS,Android,BlackBerry BB10/SmartPhone,Windows Mobile,Windows Phone 7, 以及HTML5移动端。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-23-12-32-45.png"><img loading="lazy" decoding="async" class="wp-image-3950 size-medium aligncenter" src="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-23-12-32-45-300x143.png" alt="" width="300" height="143" srcset="http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-23-12-32-45-300x143.png 300w, http://www.mobabel.net/wp-content/uploads/2018/12/22/2018-12-23-12-32-45.png 707w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<ul>
<li>400多家公司的程序员为了反爬虫,可谓无所不用其极,我每天回家就是看日志,找错误,看是不是对方用了新的反爬虫方法,再找破解。<em>以后会写一篇相关的技术文章</em>。</li>
<li>为了不被封IP,租了十几个服务器,开发了个路由系统。</li>
<li>为了破解验证码,从头研究文字识别OCR(那时机器学习还未普及),用自研框架配合OCR开源软件实现验证码破解</li>
<li>为了给用户省钱(那时包月套餐很贵),自研了一套类似protobuf的字节流序列化和反序列化框架,配合压缩,将API数据流量降到极致。</li>
<li>熟悉了DevOps运维</li>
</ul>
<p>几年下来,各个平台的付费用户已有千人,免费用户不计其数。期间有个国内公司还希望全盘收购整套项目。每天都会收到大量的用户邮件,求助,感谢,报告bug,报告故障,实在应接不暇。其中有些很可爱的国内用户,每次换手机新装App都主动找我买序列号,其中一位长期支持我的理由是:</p>
<blockquote><p>我用过很多同类App,只有你的软件,在地铁里面信号很弱时,还能照常收到更新。</p></blockquote>
<p>如果你帮用户真心实意解决了问题,用户也会真心实意支持你,这是推动开发者的原动力之一。其实这个项目停更我也有不舍,等第九个项目完善后,计划用新框架重新构架这个项目,并且认真考虑如何商业化。</p>
<p>&nbsp;</p>
<h2 id='2-6-第4-8个s项目'  id="boomdevs_19" >2-6. 第4-8个S项目</h2>
<ul>
<li>辐射监测App(配合硬件)</li>
<li>开源智能眼镜Launcher</li>
<li>OBDII HUD车载信息读取</li>
<li>多媒体广告演示平台</li>
<li>智能电视多媒体Launcher</li>
</ul>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Spring,MySQL,PHP</li>
<li>移动端:J2ME,Android,iOS,QNX,WP,JQuery Mobile</li>
</ul>
<p><strong>项目现状</strong>:部分开源</p>
<p><strong>原因</strong>:</p>
<ul>
<li>使用技术多为之前的技术储备</li>
</ul>
<p><strong>留在简历</strong>:否</p>
<p>&nbsp;</p>
<h2 id='2-7-第9个s项目'  id="boomdevs_20" >2-7. 第9个S项目</h2>
<p>商业级开发框架</p>
<p><strong>技术</strong>:</p>
<ul>
<li>后端:J2EE Spring MVC/Cloud,MySQL,缓存中间件,消息中间件,日志聚合,多用户多权限无状态系统,CI,CD,大数据分析</li>
<li>前端/移动端:Angular或Vue, Flutter</li>
</ul>
<p><strong>项目现状</strong>:暂闭源,完善后开源</p>
<p><strong>原因</strong>:</p>
<ul>
<li>希望将多年开发积累的经验,遇到的解决过的痛点,集成到一套框架里</li>
<li>完善成一套成熟的项目脚手架,能快速应用到任何单体,或者分布式项目中</li>
<li>希望能帮助一些创业小型公司,能快速做出功能相对完备的应用。</li>
</ul>
<p><strong>留在简历</strong>:是</p>
<p>这也算是个人转型的项目,代表我今后技术关注的重心,从移动端和前端技术里移出一部分,放到后端微服务构架,云和大数据这块。移动领域的蓝海可能快要退潮,我选择逐浪继续前行。</p>
<p>&nbsp;</p>
<h2 id='2-8-s项目小结'  id="boomdevs_21" >2-8. S项目小结</h2>
<p>除了上述这些,还有不计其数的小项目。其实按严格的商业成功标准,我这些S项目根本谈不上成功。但我觉得开发这些项目时,非常的快乐,可以非常放松地学习很多新的领域,这些新的领域在完善项目的同时,又帮我扩展了新的思域。我亲手塑造了它们,它们也同时见证我的成长。</p>
<p>通过这些项目我认识了一些有意思的用户,一些志同道合非常有想法的开发者。别忘了,刚才说的学习模式,除了学以致用外,还有20%的知识,是来自于有效社交的。</p>
<p><a href="http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010.jpg"><img loading="lazy" decoding="async" class="aligncenter wp-image-3945 size-large" src="http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010-1024x756.jpg" alt="" width="1024" height="756" srcset="http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010-1024x756.jpg 1024w, http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010-300x222.jpg 300w, http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010-768x567.jpg 768w, http://www.mobabel.net/wp-content/uploads/2018/12/22/learn_model_702010.jpg 1079w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>&nbsp;</p>
<h1 id='3-软件的意义'  id="boomdevs_22" >3. 软件的意义</h1>
<p>如果你看到这还没有离开,说明你在我冗长的回忆中,找到了一丝共鸣,也许你看见了你自己的影子,或许把你带回到过去的某一刻。那我也同样感谢你,作为软件行业坚守者的一员,不断磨砺前行。</p>
<h2 id='3-1-软件的死亡'  id="boomdevs_23" >3-1. 软件的死亡</h2>
<p>一个软件,从它被写入第一行代码时,就是注定要死的。有的可以活得久一点,有的可能很快夭折。软件在它存活的那段时间内,如果能服务到真正的用户,帮助他们解决了生活、学习和工作上的问题,或者帮用户活得更舒适,过得更舒心,那它就活出了意义,也体现了你,作为开发者的价值。</p>
<blockquote><p>电影寻梦环游记中,南美人相信:当一个人真正被遗忘的时候便是他真正死亡的时候。</p></blockquote>
<p>《死亡清单》里曾经表达过类似的观点:</p>
<blockquote><p>人的一生,要死去三次。</p>
<p>第一次,当你的心跳停止,呼吸消逝,你在生物学上被宣告了死亡;</p>
<p>第二次,当你下葬,人们穿着黑衣出息你的葬礼,他们宣告,你在这个社会上不复存在,你从人际关系网里消逝,你悄然离去;</p>
<p>第三次死亡,是这个世界上最后一个记得你的人,把你忘记,于是,你就真正地死去。整个宇宙都将不再和你有关。</p></blockquote>
<p>同样,对于软件来说,最遗憾的不是死亡,而是被所有用户遗忘。当它被所有用户遗忘时,就意味着,这个软件在这个世界上彻底消失了。</p>
<p>如果一位用户能在多年之后,某个云淡风轻的午后,一个不经意的瞬间突然想到了你开发的软件,正在因特网某处的你,会不会感到一丝幸福?</p>
<h2 id='3-2-代码的永恒'  id="boomdevs_24" >3-2. 代码的永恒</h2>
<blockquote>
<p class="LC20lb">一滴水只有放进大海里才能永远不会干涸</p>
</blockquote>
<p>一个项目会死,一个软件会死,但它的代码如果开源,并且其中的一部分,甚至只有一小段代码被其他程序员使用到另外的项目中,不管有没有引用Copyright,这代码可能就实现了某种意义上的数字化的永久存储。</p>
<p>我相信,开源世界,是永恒的。</p>
<p>&nbsp;</p>
<h2 id='3-3-最后'  id="boomdevs_25" >3-3. 最后</h2>
<p>程序员的世界注定是要随着摩尔定律不断地更新和迭代,你我作为程序员,必定会经历疲惫,质疑,焦虑。我希望你和我一样,在接近2018年末的一个晚上,细细回忆这些年,做过的项目。如果在你脑海中,某一个项目的协作场景,某一段重构的代码,某一次解决问题的雀跃,能让你禁不住嘴角微笑,并暂时忘却当天的烦恼,那它,可能就找到了存在的意义。</p>
<p>&nbsp;</p>
<p>删减版本发布于CSDN公众号: <a href="https://mp.weixin.qq.com/s/xu4J8_izLWOEo4DZoNw_sw">程序员开发软件的意义到底在哪?</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>The post <a href="http://www.mobabel.net/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%bc%80%e5%8f%91%e8%bd%af%e4%bb%b6%e7%9a%84%e6%84%8f%e4%b9%89%e5%9c%a8%e5%93%aa%ef%bc%9f/">程序员开发软件的意义在哪?</a> first appeared on <a href="http://www.mobabel.net">Mobabel</a>.]]></content:encoded>
					
					<wfw:commentRss>http://www.mobabel.net/%e7%a8%8b%e5%ba%8f%e5%91%98%e5%bc%80%e5%8f%91%e8%bd%af%e4%bb%b6%e7%9a%84%e6%84%8f%e4%b9%89%e5%9c%a8%e5%93%aa%ef%bc%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Page Caching using Disk: Enhanced (Requested URI contains query) 

Served from: www.mobabel.net @ 2024-12-04 13:23:16 by W3 Total Cache
-->