Linux

诡异的现象:df报文件系统满,但du看差别很大

今天在处理一个问题,最后发现是文件系统满(file system full)造成的,df看一下,果然/opt文件系统的Use%变成了100%。于是马上到/opt目录下用du命令看一下是哪个地方出现了大文件把文件系统撑爆了:du -sm | sort -nr /opt目录分配了30G的空间,我看了一下前几名的占用也不过10G左右。进一步,直接执行du -sh /opt 发现/opt目录的文件总和也不过12G,这就奇怪了,莫非18G被系统吃了??? 无奈Google了一下du df different results,发现原来是系统存在删除的文件没有释放导致。 具体来说是,某进程持有对某文件的引用,

  • 毛帅
2 min read

Headless Browser与服务器端HTML转PDF

最近的项目,要求生成PDF格式的报告书供客户下载或直接发送到Email地址。而且,报告书含有很多图表,基本上是前台HTML页面看到的一样。 这个是一个报表生成的需求,首先从实现的位置看,有两种方案: 由客户端,借助浏览器渲染并生成PDF。 优点:减轻服务器压力,使用HTML转换,与客户端浏览器保持一致。 缺点:无法脱离客户端,遇到需后台发送email的情况,无法实现;不同浏览器无法保证一致性的生成效果。 由服务器端渲染并生成PDF。 优点:可以完全控制生成PDF的效果;可以选择各种语言实现方案 缺点:对服务器压力大;如果用非HTML实现,很难做到和前台一致的效果。 经过比较,结合我需要发送Email的需求,最终选择了服务器端生成。服务器端生成一般有几种方案: 直接操作PDF(比如用Apache的pdfBox)

  • 毛帅
3 min read
Linux

超详细举例看懂Unix的diff格式(1/3):diff的常规模式

在使用git的过程中,难免会用到git diff命令,用于比较文件差异。但初学者对这个命令的输出格式几乎都是一脸懵逼,需仔细研究一番。 我读过阮一峰的《读懂diff》,收获颇大,但还是写了本文。一来,阮一峰文章中的举例过于简单和特殊,有些问题没有解释清楚;二来,也是自己的一份总结。 背景 git的diff,源于Unix的diff命;因此,追本溯源我们要从Unix的diff命令说起。 Unix的diff命令由于历史原因,又分为三种输出格式: 常规格式(normal diff) 上下文格式(context diff) 合并格式(unified diff) 本文是系列的第一篇,介绍diff常规输出格式。

  • 毛帅
12 min read
React

修改create-react-app支持多入口

使用Facebook官方脚手架create-react-app创建React应用,默认只能生成一个SPA,入口是index.html。虽然,SPA的页面切换可以使用前台路由框架方便(比如React-Router)实现,这也是SPA的推荐做法;但某些情况下,仍要将页面切分为多个页面,或者在同一个工程开发多个SPA,比如一个是面向客户的SPA,一个是后台管理的SPA。 (For English readers at article bottom) 我搜索了一下,网上确实有不少人有类似需求:Possible to have multiple entry points? #1079,官方给出的回答是: Sorry, but Create

  • 毛帅
5 min read
React

React技术栈学习路线图

最近,项目上使用React构建前台,我突击了一下相关的知识,暂时搭建了一个简单的开发环境,总结了期间的学习资料,如下: 传统前端基础 HTML+JavaScript+CSS W3school HTML教程 W3school CSS教程 廖雪峰JavaScript基础教程 阮一峰JavaScript 标准参考教程 传统的前端模块化规范CommonJS和RequireJS Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):require.js的用法 ​ 新规范 HTML5规范 W3school HTML5教程 ES6规范:

  • 毛帅
2 min read
React

内网环境Ant Design使用离线Icon图标资源

最近在使用React实现公司一套系统的前端。控件库,看中了蚂蚁金服的Ant Design。 脚手架使用的是React官方的create-react-app,创建完成后,引入了Ant Design。在我自己的笔记本调试的都很好,但放到公司的开发机器上,发现图标资源都无法加载。马上看了一下浏览器的资源请求情况,果然,Ant Design默认使用的是阿里的CDN。 公司是内网环境,显然是行不通的。官方文档果然给出了本地部署的提示。 研究了一番,发现主要是要覆盖@icon-url这个less变量,所以就要开启less支持。幸好官方在自定义主题一节,已经给出了create-react-app中如何实现主题less变量的覆盖;同理,在modifyVar节点增加@icon-url的覆盖,如下: modifyVars: { // 修改整体主题颜色 // "@primary-color"

  • 毛帅
1 min read
思考

被摁在沙发上放血——如何摆脱电视机的束缚

近几年的无数经验告诉我,不要看电视!电视是吞噬时间的恶魔,而首当其冲的又是电视连续剧。 电视节目的放血秘笈 网络视频的蓬勃发展,加上极为丰富的娱乐节目,已经和十几年前完全不同。现在可以说是:只要你有时间,总有足够多的“高质量”电视节目提供给你。这里的**“高质量”的含义是,足够吸引人,消磨时间,但未必有营养**,我称之为把你摁在沙发上放血。 十几年前,电视机还只能收看电视台。早的时候,只能收看当地三四个频道,电视台晚间或者星期二下午还要“休台”,冗长的广告和一天两三集的限制,观众并不会一直坐在电视机前。 后来,家里安装了有线电视,一下子增加了几十个频道;有些电视台更是推出所谓“周末大放送”

  • 毛帅
4 min read
英语

使用有道API在线批量翻译单词

之前,我已经确立了英语学习方针,接下来第一个关键目标,就是词汇量突破到7000这一分水岭。 有网友从COCA上已提取了7000个最常用的英文单词,我根据自身情况,筛选出自己不熟悉的4000个单词,并整理到了Excel中按计划背诵。 在Excel中,也写好了公式,输入背诵的天数,就会自动筛选出当天的新词,以及要复习的旧词(2天、4天、7天、20天各复习一次)。 遗憾的是,这7000个单词并没有提供释义。原本我决定每天背的时候现查词典。我稍微估计了一下时间: 查一个单词并粘贴到我的excel,至少需要10秒 4000个单词,就需要11个小时的查单词时间! 即便拆分到每天,每次查100个要背的单词,一次也要17分钟。 ——这显然是不划算。 本来就很枯燥的背单词,查完100个单词已经不耐烦了,更别提坚持背单词了。本着节约“

  • 毛帅
2 min read
英语

英语学习方针(使英语成为第一阅读语言)

最近几个月,强烈的意识到一些必须提升的基础性能力: 无障碍阅读英文的能力:更快的看到更大的世界。 清晰、实用的写作能力:强有力的思考和传播工具。 可用的高等数学能力。 一项极为熟练的编程语言,目前首选Python和JavaScript。 演讲能力。 这些,可能需要几年,甚至十几年的持续训练。重中之重,基础之基础,刻不容缓的又是第1条:无障碍的英文阅读能力。我的基本要求是:在相同主题或具有中英版本的书籍,优先选择英文版。此项重要之程度,就像文盲与非文盲之差别! 英文学习有听说读写,但就我的需要来看,优先专攻英文阅读能力,次之才是写作;再次之为听和说。 使英文成为第一阅读语言的计划(2017-04到2018-07): 目标1:词汇量突破到7000这一分水岭(目前词汇量为4000)

  • 毛帅
2 min read
计算机科普

GB与GiB的名分之争

稍了解计算机二进制原理的,都习惯并理解:计算机中单位换算大都是以2为底的指数倍。 又2^10=1024≈1000,我们常常将每2^10倍和十进制中的1000进行对应,便于人类书写和理解。 1. 磁盘厂商的黑锅 本来这也没什么,大家都遵守1kB=1024B,1MB=1024kB,1GB=1024MB便罢,世界也就太平了。可是,偏偏存储器厂商都喜欢用1000的换算关系。这样用户就犯糊涂了。买到的1T的硬盘,弄到电脑里只能显示900G左右,硬生生的被吃了100G。 不明真相的群众,都怪罪磁盘商“黑心”;或者也就当一种行业标准,默默的忍了。 先不说黑心不黑心,我总无法理解的是,

  • 毛帅
5 min read

氢OS3.0开启Google服务

一加氢OS升级到3.0版本后,基本上和氧OS已融合。底层都是基于Android7.0,并且在UI和操作逻辑上几乎一致,唯一区别仅在搭载的APP上了。 最大的差别自然是,氧OS预装了Google服务和Google全家桶;同时,不含电话号码识别等中国本地化的东西。另外,氧OS也不支持通话录音。 我猜测,在一加内部,两个ROM已经合并,只是在发布的时候,分别添加上本地化服务即可。 另外,据一加用户反馈,只要随便在氢OS3.0内安装Google Play客户端,即自动“激活”了Google服务。这说明,氢OS本身其实是有Google服务,只不过是被故意屏蔽罢了。 因此,国内用户没有什么理由去刷氧OS。 下面,是我安装氢OS3.

  • 毛帅
2 min read
思考

从码农的30岁陷阱,谈技术→管理→资本

先抛出本文的观点: 技术做到一定的阶段,应该转向管理。 “一定的阶段”的正确含义是:当需要实现更大的目标时。 为了不断实现更大的目标,人至少经历3个层次:技术→管理→资本。 码农的30岁陷阱 在此之前,先谈一个问题:码农的30岁陷阱。 所谓30岁陷阱,是指程序员在30岁之后,要不要坚持做技术,还是转型做管理? 我在刚开始工作的时候,无论是我的同学、同事,还是在网上看的帖子,都会营造这样的氛围:30岁以后,做程序员是做不动的,最好转管理。 网上对此也有争论,但基本分为两派,理由大致如下: 支持派。他们认为,年轻的新生力量,

  • 毛帅
6 min read

我的付费订阅服务

现在互联网越来越多的产品,是以订阅服务的形式提供的。稍微梳理了一下我目前的订阅,发现费用还不低呢。 下面这些产品,全部按照月订阅费计算,如下: 阿里云服务器:110元/月 vultr服务器:35元/月 evernote:56元/月 为知笔记:5元/月 office365:18元/月 优酷会员:14元/月 乐视会员:40元/月 5个得到APP付费订阅专栏(83元/月) 计算下来,每月的费用在361元。

  • 毛帅
1 min read
思考

名义8小时

【全文约1000字,1.6分钟读完】 大熊猫的进食 大熊猫日食量达10-60公斤,有些季节更要在40公斤以上,如此大的食量,几乎相当于体重一半。这使得大熊猫每天要花费十几个小时去不停的吃竹子,才能满足能量需要。对于大熊猫而言,生活就是不停的吃竹子嘛,这是它的常态。 然而,哪个物种又何尝不在时时刻刻的觅食?即便强如狮子、老虎,也要不停的观察猎物,然后追捕它们;醒来,要么是不停的吃,要么就是不停的找吃的。 找食,吃食,继续找食,这是生命的常态。 名义8小时 成年后,会越发感觉时间不够用了。这当中有多方面的原因,其中一点就是我们要工作。 公司雇佣员工,不管目的如何,

  • 毛帅
4 min read
数学

指数函数的可怕性

中央调控房地产,发文措辞很有讲究: 遏制房价增长 遏制房价过快增长 遏制房价过快增长的势头 感觉好似一样,都是在遏制房价,但含义完全不一样,从数学的角度,分别控制的是房价的一阶导数、二阶导数和三阶导数。 《时间的朋友跨年演讲》2017中,罗胖说创业者是逃亡者: 以前认为挣钱最重要,后面发现增长比挣钱重要;当你以为增长最重要的时候,后面发现增长的速度才是最重要的;当你在追求增长速度的时候,你又会发现超过市场预期的增长速度才重要。创业的本质是要增长,要预期中的增长,要超过预期的增长。 不仅要挣钱,还要明年要比今年挣得更多;不仅明年挣得多,还要明年多挣的部分大于今年多挣的;这还不行,还要多挣的增长速度也要大于去年的。 说白了,就是恨不得你任意阶导数大于零,这太残酷了!! 随便拿个二次函数:

  • 毛帅
3 min read