Spark学习手册(一):HDFS支撑的Spark环境搭建与尝试

  用于大数据分析的,虽然在前面说过数据分析和数据挖掘的核心贵在算法,但是对于折腾帝来说搭建体验一下还是可以的吧~需要注意的是Spark是可以脱离Hadoop在单机上运行,但总觉得单机跑不出Spark的味道,所以顺便把Hadhoop也搞一份玩玩!  
  Spark是可以同Hadoop的HDFS和YARN集合到一起玩的,这里先只涉及用Spark跑HDFS方面的东西。

一、LXC集群环境搭建

  本来想用KVM建立两个DataNode,然后host主机做NameNode的,但根据腿毛兄建议可以用LXC轻量级的虚拟化,想想也是这么回事,这种简单的事搞个虚拟机太浪费了,网上一搜果真还真有。相比较KVM的全虚拟化,LXC基于容器共享一个内核和很多系统组件,当开启多个实例的时候可以大大节约共用的资源,磁盘也类似是host主机文件系统chroot的一个目录,相比完全虚拟化创建一个磁盘镜像完全隔离也显得轻量节省太多了。当然,除了LXC,Docker就是用go语言基于LXC产生的企业级的容器虚拟化方案,但最终偶还是选择了LXC——人嘛,总是要有点追求滴!
  还有,virt-manager+libvirtd是支持链接管理LXC容器的,对于创建应用容器很方便,但是对于系统容器,默认不能创建文件系统;当然你可以用lxc-create的方式进行编译创建,也可以用lxc-create下载官方最新构建好的系统镜像,比如:

1
2
lxc-create -t download -n alpha -- --list
lxc-create -t download -n debian8_node101 -f /etc/lxc/guest.conf --dir=/home/user/Machines/LXC_ROOTFS/debian8_node101 -- -d debian -r jessie -a amd64

  但是这种命令行方式创建的容器十分的“裸”,网络参数啥的需要自己手动设定,没耐心的还真需要点功夫,十分的麻烦。于是个人偷了个懒:

  • 网站 下载好自己想要的发行版的rootfs.tar.xz镜像;
  • 用root权限解压到自己指定的rootfs目录:
    xz rootfs.tar.xz
    sudo tar xvfp rootfs.tar #注意root权限解压
    sudo mv rootfs /home/user/Machines/LXC_ROOTFS/debian8_node101
  • virt-manager创建系统容器的时候,指定到这个目录来;
  • 默认系统root没有密码,但是virt-manager没密码的话还不让你登陆,丫的只能chroot然后改密码:
    chroot /home/user/Machines/LXC_ROOTFS/debian8_node101 /bin/bash
    passwd root

  然后就好了,virt-manager中可以方便的选择网络是NAT模式的,而且公用KVM虚拟机的NAT网段,在WIN7虚拟机里面也可以跟LXC“私通”,很爽吧。
  关于系统镜像,个人反复比较一下,决定用的debian 8(jesse):fedora的镜像200多M,所以系统比较的臃肿;centos7最小,但是很多软件(比如python3)默认不支持,添加源也比较麻烦;就选择了debian stable算比较折中(又一次背叛了自己的信仰……)。
  PS:Debian和Fedora新版系统在virt-manager下终端登陆有问题,放弃了,目前用的Ubuntu 1404(在此请原谅我的堕落)……
  图1:Virt-Manager关机LXC容器,网络默认是配好的(记住,Virtual-manager还支持链接远程的KVM和LXC的,需要远程主机添加Libvirt的kvm/LXC的相关驱动)
virt-manager登陆管理LXC容器

Pro Git速查笔记

一、前言

  git是个性大神Linus自Linux内核而来的第二大发明。对于这个神器,个人也用了很久,相对其它的版本控制工具,其速度快、性能好、操作智能人性,是开发人员必备之利器;GitHub依托git作为程序员和开源项目代码首选托管网站,俨然同时也已成为全球最大的程序员基佬之交友网站。
  正如Linux下面的大多数命令行程序一样,只有常用的和用的多的才记得住,不常用的即使当时搞得很清晰,事后也容易忘记。这次在假期把Pro Git中文版看了一遍,这里打算对常用的命令和参数进行一次整理,方便后续复习查阅。
Pro Git

二、git常用命令记录

.gitignore文件格式
  • 所有空行以及用#开头的注释都会被忽略;
  • 匹配的模式是glob模式,*匹配零个或多个任意字符,[abc]匹配任何一个列在方括号中的字符,?只匹配一个任意字符;
  • 模式后面接/表示要忽略的是目录;
  • 要对某些模式或者目录提出例外情况,使用!进行取反;
  • doc/.txt只匹配doc直接目录下的.txt,而doc/*/.txt会递归匹配整个目录和子目录的*.txt;
git diff
  • git diff #默认查看的是当前修改的文件和暂存区快照文件的差异;
  • git diff –cached/–staged #查看暂存区快照文件和上一次提交的对比;
  • git reset HEAD #将文件从暂存区撤出来,和当前修改合并;
git rm
  • git rm #将文件从版本控制中剔除,默认会连同文件系统的文件一通删掉
  • git rm –cached #保留文件本身而脱离版本控制(常用于比如忘了添加到.gitignore)
git log
  • git log -p #以补丁的形式显示提交的内容差异
  • git log - #显示最近的n次提交
  • git log –word-diff #显示单词(而不是默认行)级别的差异,在处理文本的时候比较有用
  • git log -U #显示差异的上下文行数,默认是3
  • git log –stat #相比默认显示,添加了修改文件,及其行数信息
  • git log –pretty=[online,short,full,fuller,format:]
    git log –pretty=format:”%h %ae %cd %s” #这在提交数目太多的时候,可以方便的显示.
  • git log –author=xxx –since=”2015-01-12” –before=”2015-03-10” –grep=”CPP” #可以指定单条或者多条过滤格式.默认是满足任何一条就列出,如果需要满足多条,需要额外添加–match-all选项.

深度学习的那些有趣案例

  随着阿尔法狗(AlphaGo)和李世石那场艺人瞩目的人机围棋大赛落下帷幕,人们对于深度学习的热议和探讨也越发的高涨。其实作为深度学习的基础人工神经网络在上个世纪四五十年代就被提出来了,但是受限于当时的计算能力和数据规模,而且神经网络的”黑盒”不具解释性,导致神经网络的相关研究一直不瘟不火的。
  正如当前积累了大量的电子数据的同时,单点计算能力以及大规模分布式集群研究和实现,让大数据的概念被炒的红红火火,似乎现在嘴边不挂个云计算、大数据,都不好意思跟别的搞IT的说话。内行看门道,外行看热闹,大家可以说可以聊,但不必过于的神话这些概念,就像是我之前听的一个讲座上说的,这些搞云计算和大数据的,其实都是给我们数据挖掘和数据分析提供工具和服务的,如果你是一个在互联网行业的淘金者,那么云计算和大数据就是先进的铲子、筛子这类工具,而对应的互联网公司无谓就是卖或者租这些工具的,甚至有一些为我们扮演者端茶倒水的角色。数据挖掘、分析等核心技术和思路并没有因为大数据和云计算的概念产生很大的变化。
  现今深度学习已经取得了较大的突破,一方面表现为Google Brain、Google驾驶、百度语音Deep Speach等一系列振奋人心的深度学习成果展现出来,传统的语音、图像等机器学习的领域被深度学习一个个攻破;另一方面各家各类的诸如Caffe、Theano、Torch、MXNet等深度学习框架展现出了百花齐放的态势,深度学习作为当今机器学习的热点,给人一种大有可为的景象。

  首先,为当今深度学习的四大金刚(大牛)致敬,正是他们的存在,使得深度学习不仅在理论上不断的被完善和突破,而且更是把深度学习推向了图像、语音、文字等实用领域,附带着一波波小牛混文凭水文章,一批批专家骗科研混经费。请接受吾等草根屁民一拜。
深度学习的四大金刚
  (Yann LeCun,Geoffrey Hinton, Yoshua Bengio, Andrew Ng)

我的养狗笔记

  上一篇算是把仔仔的成长历程大概说了一下,也涉及到一些养狗的知识,这一篇就做一个统一的整理和说明,方便自己今后查阅,也方便没有经验的朋友做个参考吧。

一、养狗之前

  在把狗狗领回来之前,这里的因素你都要考虑清楚,不然到时候转让或者送养,对财力物力的损失事小,还会对狗狗幼小的心灵产生伤害,对己对狗都是一种不负责任的态度。仔仔有个兄弟叫天虎,开始被预订了,结果四个月了那人不要了,后来一个女孩领回去带了几天,说房东不让养又送回去了,类似这样来来回回五六次,最后八个多月了还在卖狗人家里。虽然狗家对他很好,但在他成长时候这样反复的换主人,是一件多么残忍的事情啊。
  对于深圳租房客来说,房东让不让养是个必要条件,我们还算幸运的,房东只要房租不少她的,基本不干涉我们的生活,但是私自养狗被房东扫地出门的情况是大有案例的。
  虽说人和狗都有穷养富养,你的狗狗可能不需要王可可那样戴苹果表、爱马仕,但必要开销还是少不了的,幼犬的钱在他一生的花费中算是微不足道的。例如:狗狗第一年三针疫苗三百多;每三个月一次体内体外驱虫,每次需要一百多;每个月狗粮好点的四百多,一般的也需要三百左右;成年后每年一次疫苗一百多,两次驱虫三百左右。以上是必须消费,你自己饿着也要出的,平时如果要出门,或者过年回家,寄养一天八十;两周一次澡,如果要别人洗一次70~120;磨牙棒零食你不会不买吧,玩具少买也不可能一个都没有吧。
  或许你是壕,或许钱的问题跟大多数人说的一样,钱的问题都不是问题,那么请准备好,养狗是需要大量的精力的,养他不像是街上的狗狗你看着可爱摸一下就好的,或者在自己空虚无助抑或感情泛滥时候想起了他,而平时可以像玩具一样摆着不闻不问的。否则在狗狗十二年的生命中,除非刮风下雨,否则每早半小时拉屎撒尿,每晚至少一小时的遛狗时间少不了。而且狗狗的生物钟特别准,意味着你可能从此与懒觉无缘了。
  养狗还需要耐心与毅力。不要被网络上的图片视频蒙骗了,即使大家所公认的“大暖男”金毛也不一定狗狗都会成为天使,哈士奇这些就自求多福吧,而且金毛变天使之前还有两年的恶魔期哦。这两年狗的嘴之贱至无敌,啥东西都要咬,基本要报废一两套沙发,各个台子凳子都给你啃成圆角的,领回去的快递比你还高兴,拆个稀巴烂…所以你们高档家具或者房东的好家具,请做好心理准备。仔仔算是比较好的,很快就会定点定时排便了,如果你的狗狗学的迟的话,天天给他捡屎拖地吧。当他不听话甚至闯祸的时候,是对主人最考验的时候,你没法直接告诉他什么是对的,什么是错的,一切都需要你耐心的引导才行,你把他揍个半死也无济于事。

我们仔仔快要一岁啦

  仔仔是4月1日生日,就是下个月就一岁了。虽然和她家里以前都养过狗,但说句实话都没这么上心的养。正如所有的事情一样,快乐总伴随着辛苦,成长总伴随着痛楚,这其中的幸酸苦辣也只有养过的人才能体会到。当你带着他在外的时候,有的人可能躲你远远的,有的人莫名其妙的给你冒出个贱狗,没事干,费钱之类的,当然也有人或是由衷的赞美你的狗狗好乖好听话,或者敷衍一下你的狗狗养的真不错。对于一个把狗养成年的人来说,这都不是事儿,因为能坚持把狗养下来的人,必定是那种意志力无比坚定的人。能有狗狗陪伴成长是一件美好的事情,但这是有巨大的时间、物力和精力付出的。社会上有很多狗狗的美图,狗狗忠于主人感人事迹,狗狗陪伴家人的温馨画面,甚至伴随着神犬小七的热印出现了拉布拉多幼犬价格水涨船高的现象,但是我们在的狗群朋友圈常年都有幼犬因为工作、怀孕等原因转让甚至免费赠送的情况,不排除有特殊情况或者变故,但不少人都是脑门一热买了一只狗,当有伴随着热度的下降和各种养犬问题的暴露,最终放弃他们。负责任的爸爸妈妈或许还会为孩纸找一个好的归宿,而有些直接遗弃狗狗。所以我写这篇文章的目的,一来是看着仔仔慢慢长大,把以前的点点滴滴记录下来,也是传播一下真正狗奴的生活写照,展现每一个狗狗主人背后的付出!
  仔仔的生日是2015年4月1日,所以他的出生就是个笑话。说他太爷是加拿大引进的,不过这也无从考究,总共兄弟姐妹五公三母,排行也不知道了,不过他几个弟兄都长得像他妈妈圆圆,这也就解释了为啥他从小到大长着个男儿身却有着女儿的面容和媚眼。那天下午选他的时候只有三兄弟了,一抱出来后三个全跑出来解我的鞋带。之前网上攻略说要腿粗的,毛量多的,鼻子湿的,耳朵刚好盖住前眼的,挑了半天其实都差不多,最后选了个颜色浅的(关键是兄弟三个都长的丑,个个都是猴子脸)。狗长大的颜色和耳朵的颜色差不多,虽然审美各有所爱,但感觉大多数人还是喜好偏色浅的。然后说说价钱吧,狗家口很紧,这货2200拿下的,平常遛狗交流,这货价格算中上层了,不过也没后悔,确实比那些千吧块钱的狗长的好,其实在十几年的狗生中,这点钱根本排不上位,所以如果喜欢,幼犬贵一点也无所谓。他们家算是专门繁殖狗的,自己打了两针疫苗,给了我们疫苗本,同事送了一包羊奶粉(狗狗对牛奶消化不好,所以幼犬要补充营养,就喂羊奶)。
  去的时候是坐的地铁和公交倒腾的,回来的时候是狗家帮忙找的当地的面包车送回来的。这狗车上直吐白沫,看的心疼啊,三十多公里的路程,估计把他折腾的够呛,到家停车后,这家伙哇哇啦吐了人家一车的。我们估计回来这家伙要缓个两天才精神,没想到回来一会儿,这家伙就家里活动起来到处闻来着了,我们也是醉了。然后他麻麻在家里看着他,我就去超市买狗粮了,偌大个人人乐只有宝路的,而且后来我发现超市一般只卖宝路的,就提了一袋回来,顺便买了袋钙棒和球给他。
带回来的仔仔

面对越来越多的信息我们是怎么了

  主要是前两天把今日头条给删除了,顿时感觉生活清净了很多。以前在外拿着手机,心中有一种焦虑感和不知所措感,不断的在今日头条/扣扣/微信/什么值得买这些软件之间切换,而平常坐车坐地铁的生活,也看见很多年轻人拿着手机,频繁重复着解锁-维信-朋友圈-锁屏的操作。就像当初看过一部乔布斯的记录片中说到的:乔布斯用手机改变了人类的生活,手机使我们跨越了地域的限制,把我们联系的越来越紧密,也让人与人之间越来越冷漠,越来越孤独。(为此,还有人专门为iPhone开发了APP,强制自己在某一段时间内不去触碰手机!)
  还有就是前段时间Amazon Kindle公布了年度图书销售报告,大数据告诉我们两点信息:(1)在偏远的地区,人们花在阅读上的时间比一线二线城市要多;(2)付费的图书,阅读完成率比免费图书阅读完成率要高的多。
  所以,总结起来说:在人越是多越是喧闹的城市,人表现的明显的焦虑浮躁;如果获得某些信息的代价越低,就越不会被珍惜和重视。针对前者,当然因素很多,比如大城市比较喧闹,生活和工作压力大,节奏太快等,不是单一几个因素所能决定的,倒是对于后者,这个社会产生的信息越来越多,而且获取信息的成本也越来越廉价(甚至免费),而人性天生又比较贪婪,面对这种情况,显得有些不知所措。

请善用GPG安全你的邮件和文件

  虽说在伟大的天朝,互联网无隐私——很多互联网公司有着强大的控制欲和窥探欲(PC软件没事就把你硬盘扫描的吱吱作响,手机一个最简单的软件都要检查一下软件列表,或者拷贝一下通讯录等),要么公司安全意识淡薄(密码不加密不加盐,没防火墙各种端口打开等),同时很多公司又无底线的将这些信息在网上兜售贩卖,ZF以国家安全为由立法强制软件和互联网公司提供后门和协助解密……
GPG
  针对这些问题,我们普通庶民还是要提高警觉的,不是说在互联网上支付转账的时候才涉及到网络隐私和安全,互联网的安全无处不在,你的信息任何时候都可能会被滥用于诈骗、恶意推送等,如果你看过一些社会工程学的东西,哪怕泄露最不起眼的一点信息有时候也会让你毛骨悚然。

  当然,我们平常在Cyber Life的时候,适当的注意和加强防护意识,还是可以将这些风险大大降低的,比如:

  • 尽量使用开源操作系统和开源软件,比如Linux和FreeBSD,以及各类开源的替代软件。这些系统和软件由于是开源的,所以受到全世界用户的监督,而且不以任何一个国家和政府所牵制。这同时也向大家暗示着:闭源的系统和软件的好用,也是有安全方面的代价的。
  • 对于没有开源实现的软件,就将这些软件放到虚拟机中隔离起来,比如企鹅和阿里类的软件。
  • 各种账户和密码即使使用相同的邮箱注册,也不要使用相同的密码,防止某一家泄露造成撞库的危险。推荐个人密码管理器KeePass
  • 对于网络服务,如果是重要的数据,尽量选择国外的大公司的产品,比如Gmail,Dropbox等。(访问不了的话想办法访问)
  • 对于重要的数据和邮件,请签名和加密。

我的博客用上HTTPS啦

  Hexo(或者其它静态网页生成框架)+GitHub一直被认为是博客神器,原因就是,很多IT Geek都有自己的个人博客网站,而且绝大多数的博主都有这几个博客迁移过程:

  • 寻找国内或者国外的免费空间,用提供商的免费三级域名,但是免费也是有条件的:要不不允许绑定自定义域名、要不需要在网站显眼的地方贴出商家广告、要不每个月访问量或者更新量不足就会被关闭。
  • 然后感觉限制太多了,就用起来付费的空间写。商家把LAMP环境给你弄的妥妥的。
  • 然后你玩的多了,发现空间价格贵、限制多,自己没折腾的不好玩,于是自己入手一个VPS,从头搞自己的博客系统。
  • 然后,你可能不小心丢过几次数据,可能各种原因在各家VPS供应商迁移来迁移去,或者被定期备份事情烦扰着……
  • 最终,你就想着要是别人把这些运维、备份等都给做好,我自己只关心写文章,而且最好是免费的,该多好啊!

  基本上面的路我都走过,我相信很多人也有同样的经历。其实,很多事都有类似的过程,基本都是刚开始从懵懂,再到激情满满,再到最后变懒不想折腾。个人感觉这是成长的过程吧,刚开始什么都想折腾,最后感觉精力有限,把这些繁琐无聊的事情“外包”出去,让自己专心于自己喜欢的或者核心的事情,岂不快哉!

NumPy科学计算库学习记录

  Python语言最为流行的科学计算库。主要是在数学计算的时候,使用矩阵的方式可以加速纯粹循环方式计算的速度。而SciPy则是建立在Numpy上的一个库,增加了数值分析、统计等一些函数算法。

一、Numpy基础

数组对象(由实际的数据和描述这些数据的元数据组成)

  • 产生向量:

    1
    >>> a = numpy.arange(12)
  • 向量加法:

    1
    2
    3
    >>> b = 3; # broadcast
    >>> d = numpy,arange(12) ** 2 # 指数
    >>> c = a + b; e = a + d;
  • 多维数组:

    1
    2
    3
    >>> m = numpy.array([ numpy.arange(3), numpy.arange(3) ** 2])
    >>> m.shape # (2, 3)
    >>> m[1,2] # 4
  • Numpy支持的数据类型
    bool(True/False) inti int8 int16 int32 int64 uint8 uint16 uint32 uint64 float16 float32 float complex64 complex

    1
    >>> numpy.arange(3, dtype=float)
  • 自定义数据类型

    1
    2
    3
    4
    >>> t = numpy.dtype([('name', numpy.str, 20),('age', numpy.int32),('height', numpy.float)])
    >>> t
    dtype([('name', '<U20'), ('age', '<i4'), ('height', '<f8')])
    >>> items = numpy.array([('taozhijiang',29, 168),('YAO', 28, 158.999)])
  • 数组的切片(同Python本身类似)

    1
    2
    3
    >>> a = numpy.arange(9) # array([0, 1, 2, 3, 4, 5, 6, 7, 8])
    >>> a[:7:2] # array([0, 2, 4, 6])
    >>> a[::-2] # array([8, 6, 4, 2, 0]) #反向序列
  • 多维数组的切片

    1
    2
    3
    4
    >>> b = numpy.arange(24).reshape(2,3,4)  
    >>> b[0,2,2] # 10
    >>> b[1,1,:] # array([16, 17, 18, 19])
    >>> b[1,1,::2] # array([16, 18])
  • 修改数组的维度

    1
    2
    3
    4
    5
    >>> b = numpy.arange(24).reshape(2,3,4)
    >>> b.ravel() # 展开一维数组
    >>> b.flatten() # 同上面,只是上面得到的是原来数据的View,而下面会重新分配内存存储数据。例如你在View中修改某一个数据,那么b本身也会被修改掉。
    >>> b.transpose() # 矩阵的转置
    >>> b.resize(3,8) # reshape函数返回一个新数组,但原数组本身不变;resize在返回一个新数组的同时也改变原数组本身。
  • 组合数组

    1
    2
    3
    4
    5
    >>> numpy.hstack((a,b)) # 矩阵的水平组合
    >>> numpy.concatenate((a,b), axis=1) # 效果同上
    >>> numpy.vstack((a,b)) # 垂直组合
    >>> numpy.concatenate((a,b), axis=0)
    >>> numpy.dstack((a,b)) # 深度组合
  • 分割数组

    1
    2
    3
    4
    5
    >>> a = numpy.arange(9).reshape(3,3)
    >>> numpy.hsplit(a, 3)
    >>> numpy.split(a, 3, axis=1) # 垂直分割
    >>> numpy.vsplit(a, 3)
    >>> numpy.split(a, 3, axis=0) # 水平分割
  • 数组的其它属性

    1
    2
    3
    >>> a.ndim # 维度 2
    >>> a.size # 数据个数 9
    >>> a.T # 转置
  • 类型转换

    1
    2
    >>> a.astype(float)
    >>> a.tolist() # 转换成列表类型

2015年工作总结——离开TP之路

  自从15年上半年离职之后,就再也没写过工作总结了,想到现在也快一年的时间了。感觉这么一段时间中,自己经历了许多,思考了许多,当然也收获了许多。吾本身就是个优柔寡断、多愁善感之人,但也常常告诫自己——人向前看才能走的更远。其实在我低落的时候,真的感觉身边陪伴我的伙伴才是我最宝贵的财富,平常跟他们吃饭出游、天天在群里插科打诨,让日子变的充实欢快了许多。当前,就接着这新年刚过,对去年自己的生活中的点点滴滴做一次回顾吧。

  去年最大的一件事情,就是离开了工作近两年的大TP。其实TP真的是个大围城:在里面的人觉得,TP公司传统封闭,做下游的制造链而没有核心技术,在互联网兴起的时代毫无前景,公司官僚主意和平均主义盛行,员工懒散毫无斗志;在外的人对TP工作压力小加班少,平时大小节假日对员工关爱有佳,薪水待遇丰厚而垂涎三尺。在TP员工不断的入职和离职算是司空见惯的事情了,而且TP喜欢“名牌学生”,不是985名校出门研发不要,算是TP招人的一个隐形规则(还有个隐形规则就是不招女研究生),而恰恰这些名牌大学的毕业生志存高远(或者心高气傲,差不多就这个意思),TP的工作内容和企业文化很难HOLD住这帮人,所以等于TP帮深圳的其它企业将这部分人才(或者废材)带到了深圳。曾经有个公司跟我戏说TP就是深圳人才的黄埔军校,即便实际上是这么个意思,我也很不喜欢这么个说法,毕竟跟其他的坑货或者不负责任的公司相比,TP做事还是正正规规、有板有眼的,对于我们这类刚出校园又远赴深圳就职的人来说,其强大的人事处和行政部门帮我们把一切考虑的周周道道,清清爽爽的。

  在TP内部当然各个部门也是蛮有意思的,公司上层来说是最重视研发处的(比如研发处的工资涨的飞快,而且有配股分红),但是在实际体验来说研发处是公司最苦逼的部门:没有任何权利,前方被产品部折腾,后方被测试部纠缠,产品部立项就是看看市场再加上自己的奇思妙想,然后就是不断的催进度,催、催、催……测试部要不说自己资源紧张跟你扯皮,要不怀疑你的开发水平说着说那的,技术支持更是黑白无常似的缠着你说前线十万火急赶紧拿方案,平常大家喜欢邮件来邮件去的踢皮球,一下不爽了就抄送对方的领导升级成部门间的斗争。这些事情看似奇葩,不过现在细细品来,还是觉得十分有意思的,正如谈恋爱中说的:打打骂骂才是爱,人与人之间最可怕的不是争执,而是无言的冷漠……