对连接的思考

头两天微信10周年,张小龙在产品方面对微信做了总结,我觉得特别能打动我,特别摘录如下,以便后面查看: 微信十年,如果非要用两个词来描述微信,我想,一个是连接,一个是简单。 连接是很美的。因为世界的运行就是靠万事万物的连接而进行的。对产品来说,做连接,意味着做服务的底层设施,因为基于连接可以演变出来的结果是最丰富的。 很多的社交产品可能也做连接,但它止步于人,微信的连接范畴更大,公众号、小程序目标都是连接,连接人和内容、人和服务,包括微信支付也可以认为是一种货币的连接,视频号的目标也是连接。重心不是在做内容,而是在做底层的连接,这很重要。这也是为什么我们会提“去中心化“,因为连接和中心化是有些排斥的。 再说简单。 我用简单来作为美观,实用,合理,优雅的代名词。 简单是很美的。从一个物理公式到一个日常用品,往往是简单的是更好的。实现同样一个目标,有一千种方法,但只有最简单的方法是最美的。正是因为有一千种方法存在,所以要真正做到简单是很难的。 以前在饭否,看到很多产品越做越复杂,我吐槽说,“一个产品,要加多少功能,才能成为一个垃圾产品啊!” 不是说加功能会让产品不好,而是加了不必要的功能,或者加功能的方式不对。 十年来,微信加了很多功能。我很庆幸的是,现在的微信,还几乎和十年前的微信一样简单。虽然比十年前多了非常多功能,但这些功能,都已经是用的最简单的办法了,所以增加的复杂度会小。 简单才会好用。特别是一个产品有十亿人在用的时候。 有时候也会想,很多用户其实并不一定很在意产品是否简单。粗制滥造的产品,也可能照样会有很多人用的。但是我们还是会追求简单,因为总有部分人,会认同这种简单背后的美感。 微信虽然是这么大用户量的产品了,并且经历了10年之久了,但我还是希望,它能一直保持自己的风格,一直像一个小而美的产品一样,有自己的灵魂,有自己的审美,有自己的创意,有自己的观念。而不仅仅是数字的奴隶。这样的话,我和团队,才会为我们的工作而感到骄傲,并且觉得有意义,这是我对微信十年在今天的最后一个总结。 巧的是公司产品部也有一样被这些话打动的同事,所以引发了简单的讨论,一位同事表达了自己的看法: 我们也可以思考一下“连接”1)个人用户不同设备的互连,比如华为分屏共享,2)企业客户之间的互连,方便的传文件,发消息,视频,开会,共享日历(避免会议冲突)3)和亲朋好友的互连,传照片,分享视频等等。当然简单好用是任何一个产品都需要考虑的,不光是微信,操作系统更是这样。 我下意识回复了一句“互联网时代,说连接怎么都不会错。。。” 讨论嘎然而止。 这两天因为考虑部署出去系统的更新问题,我又开始重新思考连接这个词:我们部署了系统,有服务期限,但是我们好像没有跟用户真正建立连接,对用户和我们放出去的产品基本失去了运营的能力,这是一个面向企业级市场的产品经理深深的痛。 与之相对的,互联网产品就没有这方面的问题。 那么什么是互联网产品?大部分人都会觉得,互联网产品就是基于互联网的产品呀。但是它有什么特点呢?这也是一个比较模糊而又值得思考的问题。以前跟一位朋友聊天,他给我的答案是,互联网业务就是站着就能把钱给挣了,完全的“睡后收入”。说得有点夸张,但是现在想来还是有一定的道理,什么样的产品能够产生“睡后收入“? 就是能够产生流量,并且可以流量变现的产品。其中的流量其实就是建立在连接之上的。 说起这个,不由要说起靠互联网模式成长起来的小米,小米的手机性价比方面在国内的口碑一直不错,但是它却能在维持手机性价比的同时制造大量利润,最主要的原因就是高性价比的手机为小米获取了大量的客户,然后通过各种米服务跟用户建立了千丝万缕的连接,小米再通过这些连接赚取大量利润。这也是小米“手机+AIot”战略的精髓所在,只不过在Iot发展起来以后,小米的用户不再单一通过手机建立联系、而是任何智能家具都可以成为小米跟用户连接的通道。 大家诟病比较多的小米的广告,广告这种东西投放的精准度是非常重要的,小米有了跟用户的连接以后,可以在服务端很方便地(当然也需要很强的技术能力支持)做好精准投放,从而会比传统媒介有更好的精准度。 为什么很多App千方百计希望用户能够接受通知推送的权限,最主要原因就是App需要通过这个来主动跟你建立连接,否则依靠你主动连接(打开App)他们公司可能就要关门大吉了。 最近想换一个手机,鉴于现在安卓机便宜又强大,其实非常想切换到安卓阵营。但是还是纠结了几点: 安卓和苹果体验上的差距; 隐私的控制; 续航; iCloud; 前面三点基本上问题不大:虽然体验上安卓和苹果有一定差异需要适应,但是这本身就是想体验的一部分,而且现在安卓手机电池容量都超大,续航方面比苹果还要强一些。最终让我最头疼的还是是切换平台以后,我存在iCloud上的照片&文档,迁移太过麻烦,最后只好作罢。 这是什么?这就是有了用户连接以后,可以在此基础之上创造新价值所带来的用户粘性。 再回到文章开头的问题,对于内网部署操作系统的客户来说,怎么建立连接?思来想去也只能搞复古的办法——把服务做好,通过这种人工的连接,把我们能给客户提供的新价值提供给客户,增加用户粘性,提高自己被替代的成本。 另外,对于同事提到的个人不同设备的互连,这个我也是非常赞同的。现在大部分用户使用手机会远远多于电脑,但是大家处理工作还是会优先使用电脑,这主要是因为电脑还是效率平台。但是如何让用户在使用两者的时候更方便,这其实是手机OS和电脑OS厂商都需要考虑的问题。 作为手机和电脑都做的厂商,苹果和华为显然走在了前面:苹果很早就推出了接力,可以把一些在手机上未完成的工作同步到iPad和Mac上。华为在近几年也推出了手机同屏功能,可以直接在PC上操作手机上的内容。而且,两家公司都开始尝试把自家的笔记本芯片换成ARM架构,将来手机上的应用在电脑上运行的障碍会更小,比如目前苹果已经实现iPhone上的应用可以直接在Mac上运行。这带来了另外一种可能就是手机上没有完成的工作,以前可能还受碍于电脑端没有相应的软件可以”接力“(苹果的情况),或者受碍于同屏界面仍然太小不够高效,将来直接在电脑上运行相应的程序,并直接把未完成的工作做无缝迁移。 手机会变成效率平台(PC、Mac、平板&Pad)的一种输入媒介。这个值得桌面操作系统厂商深思。 总结来说,想表达以下几个观点: 产品要想办法跟用户建立起连接,方便为用户提供新价值,同时提高自己被替代的成本,也即增加用户粘性; 在互联网出现前,产品建立连接的方式主要是人工服务,有互联网之后建立连接的方式主要是通过信息服务; 桌面OS在未来有两条发展方向: 一个是消费者方向,需要做好用户设备间的连接,手机作为效率平台(PC)的输入,发便用户做切换(不是替代); 一个是企业方向,桌面轻量化,连接云平台,做好定制&管控接口的管理,方便用户做管控(下次论证); 欢迎拍砖&交流~

《成就》读后感

​ 《成就》副标题是“优秀管理者成就自己,卓越管理者成就他人”(英文书名并不是这个意思,虽然书的主旨有这句话,但是副标题点明还是有点唐突和直白),是埃里克·施密特(Eric Schmidt)和他在谷歌的同事乔纳森·罗森伯格(Jonathan Rosenberg)为了纪念比尔·坎贝尔(Bill Campbell)写得一本书,主要是通过一些散文性质的小故事来展现比尔·坎贝尔的管理思想和待人之道。 ​ 知道这本书还是在收听吴军在得到 《硅谷来信2:谷歌方法论》专栏知道的,吴军在他的推荐序里提到坎贝尔的管理思想和人才培养方式的四个特色: 1, 强调在IT企业里规范管理的必要性; 2, 强调IT企业管理和传统工业企业的差异; 3, 强调服务型管理; 4, 强调管理者自身水平的提高和管理效率; 正是对这些点深以为然,所以才读了这本书。 ​ 因为整本书都是一些小故事,读起来也不费什么精力,非常酣畅淋漓,但是里面的只言片语却非常值得思考,特引用如下: 在推荐序一中,有一句话我认为是为本书开了一个好头: 说到底,一个人的职位越高,他的成功就越取决于能否让别人取得成功。 勇气和同理心的重要性: 在比尔的管理哲学中,愿景和热爱是公司的核心和灵魂,他尤其敬重那些有勇气、有技能的初创企业创始人,因为他们每一天都面临巨大的困难,但仍然坚信自己无论如何都能成功。 比尔认为橄榄球教练的成功靠的是“冷静”,这或许没有错,但在商界,越来越多的证据表明,同情心是取得成功的关键因素。事实证明,让同情心融入团队的想法在商界的作用比在橄榄球场上大得多。 本书让我了解了管理的教练属性,也是这半年来在一位同事身上学到的管理方面最重要的一点,很多情况下管不住自己的手和口,要么下场干活、要么直接给出答案,人的培养也就落下了: 在那15年里,比尔的建议影响深远。重点并不在于他教我们做什么事——他的影响远胜于此。如果比尔对产品和战略有任何意见,他通常会隐而不发。但他会确保团队不断地进行沟通,把紧张和分歧摆到桌面上并进行充分讨论,以便在做出重大决定时,无论个人同意与否,大家都能支持最终的决策。 感受到自己时不时好像也会这样,哈哈哈: 比尔的拥抱从来都不是那种怯怯地靠过来、不走心、给人感觉是“咱们可别惹恼了律师”、纯为了鼓励、外带几个飞吻式的拥抱。他只要一抱便是熊抱。他拥抱你的时候,你会感觉他很认真,而事实上,他也真的是在认真拥抱你。当李的演讲接近尾声时,他看着在座的人,邀请大家向比尔致敬,拥抱一下自己身边的人。 以前小团队的时候,时不时有鸡毛蒜皮,但大部分齐心协力;团队大了要把团队凝聚在一起就非常困难,但是团队的管理者至少始终要记得: 在公司里还有另一个同样重要的成功因素:精诚合作的团队。 有时候我觉得这些浅显的道理,很多人都不明白。后来渐渐懂了,很多人做管理或者管理属性的工作(项目经理、产品经理、主管等)怕接受别人的建议,其实是怕自己的权威被挑战,本质上确实是缺乏自己,这种情况下更上级的管理者应该提供更多“安全”的环境,让这些管理者可以打开心扉,尽快走到下一个阶段。 2014年的一项研究发现,最没自信的管理者才会害怕接受他人的建议(或者指导)。所以反过来说,公开接受教练的指导事实上是自信的表现。[插图] 2010年的一篇文章指出,“团队训练”效果很好,但公司或组织往往不会采用这种办法来提升团队或组织的表现(该文作者把团队训练称为“以目标为导向的变革”)。 其他许多管理技能都可以授权给他人,但职场训练不能。这就是比尔教给我们的终极奥义。在一个快速发展、高度竞争、由技术驱动的商业世界中,要想成功,就要组建一个能够有效、高效工作的团队,并给它成就大事所需的资源和自由。而高绩效团队的领导者既要是个充满悟性的管理者,又得是个懂得关心他人的教练。在这一点上,比尔·坎贝尔是有史以来做得最棒的。 比尔认为,领导才能是卓越管理的产物。“如何凝聚人才,并让他们在公司里茁壮成长?不是靠独裁,不是靠事无巨细、亲力亲为,而是要让大家觉得和你在一起的时候,他们受到了重视。倾听,而且是用心倾听,这就是优秀的经理要做的事。 比尔总是会说同一个答案:员工的幸福和成功。 确实是这样,管理者应该能有效地组织团队,同时要帮助团队成长,成长狭义上就是获取额某种能力,这本质上也是为了提升效率,试想一下没有某种能力的时候要完成某项工作需要先习得这种能力,自然效率低: 请记住,他认为管理者最重要的工作就是帮助别人变得更有效率,并帮助大家成长和发展,而一对一会议是实现这一目标的最好机会。 其实,不只是面对自己的下属,面对协作部门的下属也可能要保持这样的心态,才能避免为了自己&自己部门的利益(尊严、奖金、功劳等)去动怒、冲突,看起来是为了公司大局,实际上也锻炼了自己的心性。 比尔曾经说:“可以把所有下属都想象成你的孩子,你需要帮助他们纠正航向,让他们变得更好。” 比尔制定的一对一会议和绩效考核框架中,很值得借鉴和思考。其中,针对管理者的部分摘抄如下: 1, 你是否在指导你的下属? 2, 你处理了害群之马吗? 3, 你在努力招人吗? 4, 你能让你的下属不畏艰难地去完成工作吗? 值得反思处: Read On →

2020年终总结

​ 最近一直在思考一件事情,年终总结到底应该是12.31号写还是应该在1.1号写,想着想着就到1.1号了…祝大家元旦快乐! ​ 上一次写年终总结还是2018年,但是2020年的年终总结是非写不可了,因为这是很不平凡的一年。 疫情 ​ 先说一下疫情。在 2020 这一年的时间里,全球人民一起经历了魔幻的疫情大战。 ​ 以我自己为例,在 1.19 号的时候在武汉的办公室里跟同事谈笑风生,还打趣行政为什么准备口罩、喷消毒液;20号驱车回家(第一次开长途回家),一路在服务区收到各种疫情消息,快到家的时候叮嘱爸妈买消毒液,进门消毒;23号武汉封城,不少同事被困武汉;在老家莫名被“软禁”一个多月,在武汉的同事也经受了人间炼狱般的折磨。 ​ 然后是全球疫情爆发,中国提前登了场并率先退了场: ​ 截止目前2021.1.1病例数据概览(来源于wikipedia) 中国 病例总数 治愈 死亡 87,071 82,067 4,634 全球 病例总数 治愈 死亡 8340万 4700万 182万 ​ ​ 在疫情的大背景下,2020年的一切都显得悲壮、可贵、强大,悲壮是武汉封城、白衣逆行、同胞逝去,可贵是家人健康、公司发展、事业前进,强大是人类的坚韧。 ​ 为逝去的同胞默哀,为健康的朋友祈福! 升级成为奶爸 ​ 2020年疫情让一切都变得很难,包括成为奶爸。 2020年4月26日早上8点55分,在历经了住院困难、陪护困难等一系列问题后,我的小公主出生。这位前世的小情人,让我真正体会到了什么叫“再苦的时候,看她一眼心都会化掉”的感觉。 ​ 懵懵地过了大半年,虽然娃的大小事都是她妈操心,但是看到小公主茁壮成长,当爹的很开心 :) ​ 陪伴家人 ​ 疫情让春节假期变得比往年多了许多,今年在老家待了不满2个月,这是从大学毕业以来少有的跟家人待在一起的机会。被“软禁”在家,我也不喜欢社交,刚好在家看看书、聊聊天、做做事情,陪伴着父母、小妹和老婆小孩儿,也算是塞翁失马焉知非福的一种感觉吧。 失去亲人 ​ 2020年失去了我奶奶,这位在少年时期对我疼爱有加、青年时期对我无比牵挂的奶奶。奶奶晚年没有特别享什么福,子女照顾基本周到,也就差不多了,但是这些跟我基本上没有什么关系。曾经想得孙儿事业有成让您享清福,是一个无法弥补的遗憾。 Read On →

deepin 开发者规范

为了保证研发项目的规范化,避免不一致造成的效率低下,特在此规范中对项目目录、README、代码风格、版权信息和版本控制等方面进行了一定约束,公司内部及合作项目均需按此规范进行。 项目目录 一般情况下,项目目录结构按照下表说明进行创建和管理,对于复杂项目由开发经理按需以此为基础调整项目目录结构: 目录名 说明 src/ 存放项目源代码文件。 3rdparty/ 存放本项目引用的第三方项目源代码或者二进制。如非顶级依赖,可以适当调整放入src目录相应的模块中。另外需注意:项目依赖优先使用仓库中已有的包,尽量避免出现包裹第三方项目的情况。 tests/ 单元测试存放目录。 docs/ 用于存放帮助手册、man等文件。 tools/ 项目用到的工具和脚本。 po/ 存放项目用到的翻译文件,也可以为translations、i18n等明显可以看出是翻译文件存放目录的名称。 misc/ 项目需要使用到的数据文件或者不属于前面任一类型的文件。 .desktop 项目的desktop文件,如有多个可以放在misc目录中。 README 项目的说明文档,用于说明项目的概要情况。 LICENSE 项目采用的授权协议。 Makefile 构建脚本,同类型的还有pro文件CMakeLists.txt文件等。 README 每个项目必需包含该README文件,README文件内需包含如下内容: 项目描述 依赖(包括编译依赖和运行时依赖) 构建和安装 项目目录说明 获取帮助(开发项目要求) 参与开发(开源项目要求) 授权协议说明 参考模板如下: Read On →

deepin Qt/C++ 代码风格指南

本代码风格为深度科技Qt/C++代码风格规范,主要是在Qt Coding Style上进行删减和修改。 代码缩进 使用4个空格进行缩进; 禁止使用Tab进行缩进。 声明变量 不同的变量声明不要放在同一行; 变量尽量起有意义的变量名; 单字符变量尽量避免,且只能在局部变量和临时变量处使用; 需要变量时再去定义变量(对比C语言在头部声明所有变量); // 错误写法 int a, b; char *c, *d; // 正确写法 int height; int width; char *nameOfThis; char *nameOfThat; 变量名和函数名使用小写开头,命名规范遵循驼峰式命名规范; // 错误写法 short Cntr; char ITEM_DELIM = ' '; // 正确写法 short counter; char itemDelimiter = ' '; 类名以大写开头,命名规范遵循驼峰式命名规范。 空格 在代码段落之间使用空行隔开; 任何地方的空行不要超过两行; 关键词后和大括号前均需空格: // 错误写法 if(foo){ } // 正确写法 if (foo) { } 对于指针和引用,*和&需要和变量名紧挨: Read On →

deepin系统启动流程

deepin系统整个的启动流程到底是怎么样子的?以前曾被同事缠问过类似的问题。遇到这种宏大而又不着边际的问题,我的回复往往是“你还太嫩,现在我告诉你还是会忘掉的,等你干上个两年,不用我说你就知道了”。我边敲着键盘,边佩服自己的聪明才智。 两年后…… 这个小伙子长大了,并且坚定地又问了同样的问题。 我一愣神,脑海中不停浮现出一个声音“出来混,迟早是要还的”。想想也罢,是时候该把压箱底儿的货拿出来了,毕竟自封了“半吊子系统工程师”的title(虽然我自封的title还有很多:半吊子客服、半吊子产品经理、半吊子研发项目经理等等),不给你们露两手看看看来还真不行…… 概览 deepin系统启动,从整体上看主要分为了硬件上电、内核引导、内核启动、系统初始化、图形界面等几个阶段。如果将这几个阶段分为两个部分,那么第一部分的硬件上电、内核引导、内核启动主要是“引导(boot)”,更偏向让内核可以启动;而第二部分的系统初始化、图形界面两个阶段主要的任务则是“初始化(initialize)”了,因为对于一个系统来说仅仅有内核跑起来是不行的,还要有各种各样的服务对系统的软硬件进行管理,这也是平常大家说发行版跟纯粹的GNU/Linux内核不是一个概念的原因之一。 下面我从一个软件开发者的角度说一下我对每个阶段的理解以及一些调试的方法。 硬件上电 既然说了是软件开发者的角度,这个部分对我来说基本上相当于黑盒子了。但是大体上我们仍然知道这个部分主要是: 硬件上电 BIOS/UEFI bootloader 当你按下电源的那一刻起,电流就会“滋滋滋”的流向主板,启动BIOS(Basic Input Output System)系统。BIOS系统,顾名思义就是最直接跟硬件打交道的系统,因为有标准规定,所以输入输出设备的基本功能都是可以使用的,一些硬件的开关配置也可以在BIOS中进行操作。除此之外,BIOS还有两个重要的功能,一个是硬件自检;另外一个是加载引导。硬件自检这个跟作为一个”半吊子系统工程师“没什么关系,自不多说。加载引导的过程其实就是大家耳熟能详的MBR、小蝌蚪找妈…哦不…MBR中找bootloader了。 跟BIOS对应的UEFI,要说它们之间的区别,除了加载引导的方式不大一样以外。对我来说可能就是界面能够用鼠标点点点了吧,嗯……哈哈哈。 这里讲个段子,之前15.7搞启动时间优化的时候,测试的同学测试系统启动时间的优化情况,老是说效果不理想,我去看看吧,原来是他们测试系统启动是从硬件启动算起的,我说你们直接从内核引导开始计算,他还问我为什么。优化时间/(BIOS时间+GRUB时间+内核时间+图形时间) 跟 优化时间/(内核时间+图形时间)哪个大哪个小?我只能说这个测试同学的数学不大好……😂 内核引导 BIOS在MBR中(或者UEFI在主板专有的存储设备中)找到bootloader并加载后,bootloader就会开始加载Linux内核并启动了。 GRUB引导 deepin系统默认的bootloader是GRUB(GRand Unified Bootloader)。其实我一直觉得这个名字挺恶心的,大神们果然都是重口味……GRUB并不需要按照什么规则去硬盘中找系统,而是根据/boot/grub/grub.cfg中的启动项加载内核、启动系统,而这个配置文件则是在系统安装或者手动执行update-grub这个命令的时候生成和更新。 update-grub这个命令其实是对grub-mkconfig的一个包装,在非Debian系的发行版上是没有的。grub-mkconfig会执行的动作主要是: 加载/etc/default/grub中的一些配置项。比如GRUB_CMDLINE_LINUX_DEFAULT配置项会控制Linux的boot param。 挨个执行/etc/grub.d/目录中的脚本,用来生成最终的grub.cfg文件。比如我们平常看到update-grub命令执行时输出的哪些启动项,其实就是/etc/grub.d/03_os-prober这个脚本里面执行os-prober这个工具产生的。 在GRUB界面选择启动项,按e编辑启动项。除了普通的上下左右键移动光标,还可以使用基本的Emacs快捷键: Ctrl+N 下一行 Ctrl+P 上一行 Ctrl+B 左移一个字符 Ctrl+F 右移一个字符 Ctrl+A 移动光标到行首 Ctrl+E 移动光标到行尾 编辑完成后按Ctrl+X按照编辑后的结果启动系统,但是编辑的结果不会保存,也就是说如果需要永久修改某个启动项,就要修改grub.cfg文件或者会影响grub.cfg生成的/etc/default/grub以及/etc/grub.d/中的脚本文件了。 对于GRUB,我们一般需要知道的就这么多,关于GRUB其他一些用法和知识,可以参考GRUB与系统引导这篇文章。 UEFI直接引导 在UEFI模式下,除了使用GRUB来引导内核以外,还可以通过UEFI直接引导内核(需要内核开启了EFI Stub支持),具体的配置方式见Debian Wiki EFI Stub。需要注意的一点是在使用efibootmgr创建启动项的时候,可能需要-d参数指定设备,否则可能会导致创建启动项失败。 内核启动 内核启动部分其实主要是想说initrd。 initrd是一个小型的rootfs,这个rootfs保证了内核启动过程中所需要的内核模块和用户态工具。同时,它还需要为下一个阶段“系统初始化”做准备,也就是为init程序准备好真正的文件系统,并且启动init程序。 内核使用initrd启动的过程主要是: 执行init脚本(这个不是上面说得init程序,而是生成好的initramfs中的/init这个文件。后面的步骤其实都发生在这个脚本的执行过程中); 解析内核启动参数,识别关键的如debug、boot、break等; 执行/scripts/init-top/中的脚本; 加载内核模块; 执行/scripts/init-premount/中的脚本; 执行/scripts/$BOOT脚本中的mountroot函数,其中的$BOOT参数就是第2步中识别到的boot参数指定的,自带的可选项有local(本地启动,默认)、nfs(比如PXE启动); 执行/scripts/init-bottom/中的脚本; 执行init程序。 live系统 上面第6步提到initramfs-tools包自带有两种boot类型:local和nfs,我们使用live系统的时候的boot类型其实live。这个boot类型主要是live-boot这个包支撑起来的。 Read On →

深度数据盘和FUSE文件系统

说起FUSE,大概很早之前就知道了,但是写文件系统这种东西,大概一辈子也没几次机会会用到,所以当时也没怎么研究,直到最近遇到一个“扭曲”的需求…… 这个需求是这样的。在深度系统的安装器中,有一个全盘安装的功能,这个功能看起来非常简单:扔一块全新的或者老旧的硬盘给安装器,只需一杯咖啡的功夫,你的系统也就能优雅地躺在你的硬盘上了。然而,其中有一个处心积虑,哦不,深思熟虑的细节设定,就是假如你硬盘够大,安装器就会给你多分出一个分区:数据盘。 据说数据盘的主要作用是让用户存放数据文件,也就是以前用Windows的时候D盘或者E盘等的作用,放点图片、下点片之类的。用户重装系统的时候,也可以方便的做数据迁移。不过鉴于之前我们的一些客户对文件权限的设计不太理解,经常莫名其妙就出权限文件,所以,这个数据盘大概隐含了两个隐性需求: 文件权限不要太严格; 文件权限不要太严格…… 第一次尝试 收到需求的你肯定想,Linux(类Unix)把用户权限、文件权限划分地这么好,虽然也不算天衣无缝吧,但是也是大神们深思熟虑的成果,退回到上古时代的没有文件权限这种事,简直就是历史的倒退么……然而作为一名优秀的程序员,怎么能不理解这种为了用户使用方便,宁愿自己背负骂名的行为呢,所以我们毅然选择了不抵抗政策。另外,为了这个盘可以被双系统的Windows读到,当时我们很自然就选择了NTFS作为数据盘的分区格式。 然而,过了一段时间。 社区用户:我的硬盘发热好厉害呀,是不是这个NTFS分区…… 商业伙伴:这个NTFS文件系统的有点不清真啊…… 这显然没有达到我们预期的目的嘛,必须想办法搞定啊。数据盘这个需求就开始了它的扭曲之旅。 第二次尝试 如果不使用NTFS,那就在ext4上面做文章咯?在网络上搜索了半天,也没有发现什么好的方式,要么就是chmod -R xxx 这种,要么就是 chown……操作系统跟用户那可是一辈子的事情,这几种显然只适合做一锤子买卖的方式显然是不适合的。然后,我突然想到之前同事提到过的ACL(限于篇幅和主题,就不展开了),就研究了一下,果然还就能解决问题,两条命令: $ setfacl -d -m "g:sudo:rwx" /xxx $ setfacl -m "g:sudo:rwx" /xxx 其中的/xxx就是数据盘的挂载点,第一行命令设定挂载点文件夹的默认ACL规则为:所有sudo组的用户可以对文件夹有rwx操作权限,第二句设定挂载点文件夹的ACL规则为:所有sudo组的用户可以对文件夹有rwx操作权限。这两句话看起来好像没有什么区别,其实不同的地方在于第一行命令设定的是文件夹的默认ACL规则,而第二行命令设定的是文件夹本身的ACL规则。设定了默认规则以后文件夹里面新创建的文件或者文件夹就会继承这个规则,如果只设置文件夹的ACL规则,则新文件和子文件夹不会继承这些ACL规则;如果只设置文件夹的默认ACL规则,而不设置文件夹本身的ACL规则,则文件夹本身没有ACL规则生效。 虽然这个设定感觉有点让人发晕,但是好歹功能都实现了呀,一切都看似那么美好。 然而程序员的所有美好都怕测试这种物种,测试有一天突然发现:“咦?系统里面的A用户放在数据盘里面的文件怎么B用户无法访问?”程序员就多了个BUG…… 经过调试,发现一种神奇的现象:Linux(可能其他系统也是)对ACL的处理有点奇怪,假如在拥有ACL规则的对象(文件或者文件夹)上进行chmod操作,那么chmod 会对对象的ACL规则造成影响,影响的结果就是对象虽然有ACL规则,但是ACL的有效值会变成chmod要达成的效果。举个例子,假如文件原来的ACL规则如下: $ getfacl testacl # file: testacl # owner: hualet # group: hualet user::rw- group::r-- group:sudo:rwx mask::rwx other::r-- 文件的权限是644,但是sudo组的用户有rwx权限。这时候如果我们使用chmod 700 testacl修改一下文件的权限,再次查看文件的ACL会变成: $ getfacl testacl # file: testacl # owner: hualet # group: hualet user::rwx group::r-- #effective:--- group:sudo:rwx #effective:--- mask::--- other::--- 可以看到,group和group:sudo后面的有效值是---,即rwx权限全无,other也从原来的r--变成了---。 Read On →

《走向共和》观后感

​ 断断续续地从2018年下半年开始看《走向共和》,到今天算是看完了。 ​ 最开始知道这部电视剧,还是看到网友Tualatrix在Twitter上的推荐,不过当时看电视封面中最大头像的是孙中山,不太感冒,所以就没有怎么好好看,一般都是边玩游戏边看,但是看了几集以后顿时觉得过瘾,一共58集的电视剧把中国从甲午中日战争到护国、护法运动的历史算是做了非常精彩的演绎,而且电视剧的布景正是我喜欢的类似《大明王朝1566》(后来才知道原来是同一个导演张黎)、《乔家大院》、《大染坊》、《六龙飞天》那种朴素而又显得真实的布景,再加上对剧中主角的性格塑造非常细致,基本上推翻了以前从教科书中得到的对几个主角的评价,愈发觉得着实的喜欢。 主角们 ​ 因为剧情比较宏大,所以总共算是有四个主角,按照清政府倒台作为中间线,前半段主要是李鸿章主角、后半段主要是袁世凯主角,慈禧和孙中山贯穿其中,只是作为两段历史的领袖人物,慈禧要比孙中山戏份多得多,对剧情也重要的多(个人观点)。 李鸿章 ​ 这部剧之所以吸引我,大概就是前期对李鸿章的塑造大大刷新了我对他的认识,这哪是什么教科书中的卖国贼,片中的李鸿章分明是一个讲求实干、精于世故、老成谋国的人,苦苦支撑国事的偏于正面的形象: 为北洋水师的军费与朝中以翁同龢为代表的清流派争斗; 顾全大局(争取本来敌视他的南洋大臣张之洞,这点感觉比他的老师曾国藩对待左宗棠有手段); 有点跋扈,但是也对自己认清的现实非常坚持,视满朝的非议诋毁如过耳云烟; 马关和谈时尽其所能与日本人周旋(甚至把自己在日本被刺当作谈判筹码,与伊藤博文讨价还价,苦苦哀求砍掉2000万作为回国的盘缠,真是叫人揪心……); 对政局了若指掌,戊戌变法时跑到欧洲考察,实际是为了躲避帝后之争; 辛丑和谈的时候表现出的老道; 签订辛丑条约时与列强的周旋(李鸿章拦住了一起主持议和的庆亲王,而只签上了自己的名字。说:王爷还年轻,这种要背千古骂名的事还是由我这老朽担当了吧)。 ​ 李鸿章在政治上是一个高级玩家,狡猾地如狐狸一般,但是作为一个士大夫,还是表现出了那种家国天下的情怀,终然洞穿官场一切的潜规则,还是尽自己最大的努力来维持局面。作为晚清洋务运动的领导者之一,他可以说是举步维艰,但是仍然知难而上,运用自己的政治智慧沉着应对每个难关。 金句 “身怀利器,杀心自起,慎而重之!” “一代人只能做一代人的事情。” 评价 ​ 李鸿章作为一个天才,只能说生错了国家、生错了时代,为国苦苦经营,最后却落得个卖国贼的名分。 ​ 用剧中伊藤博文的原话来说:“伊藤不才,然何其幸哉,能驻足日本之地,此乃立宪国之地,且举国人才辈出;李鸿章大才,然何其不幸,为政于中国之地,其乃绝对专制之地,故而有才化无才,且举国人才,一遇专制俱为奴才。” 袁世凯 ​ 我记得以前我的一位历史老师曾经讲过一个笑话:“袁世凯一生只做过一件好事,就是他死了”,当时全班大笑,因为在小时候的电视剧里面,真没有看到过哪个剧里面有袁世凯,但是是一个正面形象的,坏人死了的才是喜剧嘛。 ​ 但是这部剧里面的袁世凯,太复杂,根本无法单一评价,正面看: 实干家; 勇武果断; 聪明; 能力出众; 讲义气(对小站练兵的弟兄、对英子); …… ​ 从反面看: 反叛者; 依附权贵; 阴险狡诈(杀了赵秉钧); 破坏共和; …… ​ 从一个成年人的视角,可能他做得很多事情,都对得起最后那句“我们这辈子,没有白活啊。”但是,作为一个统治者,为了自己的权利欲望去玩弄国家政体,确实只能说是历史的罪人…… 金句 “这就是政治,可以犯罪,但不可以犯错。” “这做事也罢,当官儿也罢,千万不能搞一锤子的买卖,不能过河就拆桥,你得老想着还有下一次,只要还有能力就要架桥铺路,不然那就是短视,做人没出息,办事也总是失败。” 评价 ​ 从我个人来说,我还是挺佩服他的,实干家又懂得政治规则,从一个痞子最终混成了帝国的皇帝,不可以说他没有才干。但最终,一招不慎,满盘皆输,明明什么都看得透彻,但是就是抵不住自己对权力的欲望,落得个众矢之的的下场。 ​ 用孙中山对他的评价,原话忘了,大意是“袁世凯本质上就是一个攀附权贵的人,先是李鸿章,接着是荣禄和张之洞,还有最后的庆王爷,他迟早是要当皇帝的,这是他的心病。只是仙子啊满世界都在搞宪政、搞共和,袁世凯非要当皇帝,这历史的潮流是不允许的。“ Read On →

WPS中的字体名

今天又被 fontconfig 坑到了……仔细想想,半年到一年前我还对 fontconfig 狗屁不通呢,而现在我已经被 fontconfit 坑了有几次了,这印证了一个真理:“只要你足够迟钝,世界就是美好的,一旦你有了某种能力,麻烦就会找到你”——这只是个玩笑,事实上不管你有没有能力,现实都不会让你好过 😈 在这些坑里面,有两个是跟今天主题相关的,也就是关于WPS中字体名称的两个问题: WPS 字体列表中中文字体在中文环境下不显示中文名(比如系统里面有宋体,列表里面显示 SimSun); WPS 设置段落字体(中文字体)后,工具栏显示的字体为英文名(比如你设置一段文字是宋体,但是标题栏显示的仍然是SimSun) 这两个问题有点像,但是却不是同一个问题(也不只是WPS有问题,而是WPS对字体的需求比较多): 第一个问题原先是 论坛用户报告 的(实际上刘老大也报过,不过被自动忽略了😂),论坛用户又报过来以后,大家看用户的报告太详细了,感动得一塌糊涂,顿时解决问题的动力都有了。我也折腾了大半天,不过脑袋里面一直有一个同事的声音:那是字体有问题!我也挺赞同的:盗版的字体,不靠谱很正常……所以,我就考虑能不能给字体做一些别名啥的,比如 SimSun 就叫 宋体……当然了最后就是玩了一下 fontconfig 的配置以后,默默就放弃了。 最后经过 @felixonmars 同学的排查,发现是上游的一个 bug ,而且已经修复,所以赶紧更了一波,解决了这个问题。 本以为皆大欢喜了,今天又有客户报过来 bug,说 Windows 上写好的文档,调整好的字体,跑到deepin下字体就不对了,废了老大的劲儿才又调好,其中就提到了选择方正字库里面的字体,显示的不是中文字体名称的问题。 怎么说呢,幸亏我脑子不好,不记得之前已经解决过中文字体名显示为英文的问题,要不然得跟客户和老板掰扯一会儿,我只记得字体的中英文名字好像是有点问题,所以默默赶紧去看了一下,还真真的有问题。 因为 DDE 并没有设置过多的 fontconfig 配置,所以我相信这不是 DDE 的问题,但是又觉得对于一个文字处理软件来说,如果这么重要的功能都有 BUG,我真不信 WPS 的人还能坐得住,所以就想试一下在 Ubuntu 下 WPS 的这个行为是否正确。刚好年前 ElementryOS 发新版的时候尝鲜装了一个在测试机器上,所以很快切进去下了一个 WPS 安装上,从一个正版的网站上下载了一个盗版的宋体,试了一下,果然踏马的是好的…… 理性的我用事实证明了感性的我是错误的,气氛一度很尴尬。 更让人尴尬的是,我也不知道这是怎么回事。但是,无巧不成书,就在这种尴尬氛围的笼罩下,我鬼使神差地在 ElementryOS (太长了,下面简称 EOS )上运行了 fc-match 宋体 这个命令,而且很神奇的发现输出的 simsun.ttf: "宋体" "Regular" 跟 deepin 下同样命令输出的 simsun.ttf: "SimSun" "Regular" 不太一样,这可把我乐坏了——要知道一个稍微复杂点的图形软件,打开 fontconfig 的调试以后,输出就是很可怕的,更别说 WPS!别问我是怎么知道的,回忆起来都是泪。但是现在使用 fc-match 就能重现的问题(我打心底认为这俩是同一个问题),调试起来就比较简单了。 Read On →

2018 年终总结

2018 年也不知道为啥过得这么快,似乎“嗖”的一下就过完了,但是仔细回想一下,还是有不少事、不少感想值得留存的,所以赶紧用文字记录下,不然以我的健忘性格,不用到明年的今天,我就不会再记得 2018 年我做了什么、经历了什么和有什么感悟了。惨痛的教训比如 2017, 没有总结,我看了 2016年终总结 甚至不知道我的 2017 相比 2016 是否有进步、有没有按照规划去做了对的事情。所以在这个时间点,就算是年终刚好出去参加同学的婚礼了,也在火车上抽了时间做了脑图,整理了一年下来的总结。 读书 总的来说18年读的书不算多,甚至可以用少来形容,不过总归还有些感悟,记录下来权做以后翻看旧书需要的介绍了。 《南渡北归》 拖拖拉拉终于几乎看完了全本,只是到国民党退到台湾以后,顿时有一种很丧的气氛在里面(不知道是书还是当时看的我),所以后面基本上就没怎么看了。 对于整本书的评价还是很高的,革命/战乱的年代,杂糅这知识分子的热忱、浪漫、坚毅、吃苦耐劳,沉入其中,感受每个人面对的挣扎和选择,对于一个人对人生和价值观的思考还是非常有促进作用的。 像《老残游记》和《浮生六记》一样,如果有机会,我还会再读几遍。 《技术管理之巅》 技术管理书,因为很贴近实际,所以显得比较接地气。 在看这本书的过程中想通了技术和管理其实是可以很好融合在一起,而不是互相对立的。 《把生命浪费在美好的事物上》 原以为是类似汪曾祺的哪些小散文的书,但是完全被吴晓波起的书字给骗了。把生命浪费在美好的事物上,你得先跟吴晓波一样有钱 :P 同上本书,这本书让我知道了“铜臭气”和“书呆子气”可以同时存在于一个人身上,并且很好地共存。 《曾国藩的正面与侧面》 青春期的时候,可能是热血漫画看多了,我总是喜欢认为自己是个“天才”,但是随着年龄增长,我越往后越发现我对于“天才”和“聪明”的需求越来越弱,反而是对“勤”和“恒”的需求越来越多。这本书并没有教会我做什么,而是加深了我早已有的很多想法,让我更知道如何为人和处事。 《原则》 忘记这本书是什么时候引起风潮的,似乎一时间所有的人都在看这本书。不过我还是因为懒没有看。等过了一段时间有次在火车上没事干,想找一本书看看就选择了这本书。 初看还是很有同感的,尤其是生活部分(其实就像作者说得,前面哪些他个人的经历,其实没有什么特别有意思的地方)的一些原则,我当时甚至想给深度的开发同事也弄一个 深度开发者行事原则 的,但是碍于这个东西实在不好讲,因为每个人本身的认知程度千差万别,想一下子拉齐到同一水平很不现实,所以一拖两拖,就废掉了。 不过我还是因此养成了一个把我在一些特殊时刻想到的一些感受和想法记录下来沉淀的习惯,收获也算不少吧。 《白夜行》 纯娱乐,读得相当快,好像是一两周之内读完的(这已经是我读书的最快水准)。读这本书是因为偶然一次机会在一个便利店看到一个《解忧杂货店》的舞台剧广告,上面写着“日本作家东野圭吾作品”,当时我就傻眼了——《解忧杂货店》不是村上春树的作品么???再三确认以后,我决定再读一本东野圭吾的作品,以示歉意,所以就选了《白夜行》。 书中的故事相当粗暴,但是很吸引人,就是那种“我已经猜到答案了,你快点告诉我是不是这样”一路走下去的感觉。 《见识》 吴军老师的书,都是干货的方法论合集。 按道理说一般说外企大佬写得书,多半是鸡汤(至少我认为是这样),但是吴军老师的书里面还是有很多大智慧。 《我们台湾这些年 I》(未完) 纯好奇,看着作者从小往大介绍,思绪慢慢从我的童年飘到现在,找回不少记忆。不过越往后看,越想借用《南渡北归》中蒋介石的一句话来送给自己和其他心心念互联网自由的人:“汝辈竟无革命精神若此!” 《奈飞文化手册》 得到APP里面买的,介绍奈飞公司文化的一本书,其实给我的感觉是跟《原则》这本书交相呼应的,书里面介绍的几个价值核心:“我们只招成年人”、“要让每个人都理解公司业务”、“绝对坦诚”、“只有事实才能捍卫观点”要么是有很多共鸣——比如“要让每个人理解公司业务”,我一直觉得公司很多东西该透明要积极去透明,也一直在努力让开发部内部所有的事情都清晰透明;要么就是对我启发比较大——比如“我们只招成年人”。其他章节不是不好,而是因为需要在公司更高层面去运作,所以我的认识相对较少。 旅行 全年两次旅游,一次在宜昌,一次在云南。 宜昌算是散心之旅,我和小崔两个人,游记见摆脱尘世繁杂——宜昌休闲4天游。 云南真的是一场说走就走的旅行,因为今年公司没有组织年度旅游,所以云南游算是全年的大游了,但是其实只是一时冲动陪朋友去云南探亲,结果他的探亲成假,我们旅游去成真了。无游记。 电视剧&纪录片 电影就不说了,跟着小崔看了好多电影。只说下对我印象还比较深刻的电视剧和纪录片。 《我们这一天》 家庭剧,这部剧让我对未来的家庭充满期待,也很感恩我后来不再是独生子女。 Read On →