写 Vue 的时候,时不时会发生一些笔误,出的错并不会被编译器和运行时发现,但确实会影响工作,所以想写一个工具把它跑出来。我目前遇到的问题有:
:v-modelattr="false"

写 Vue 的时候,时不时会发生一些笔误,出的错并不会被编译器和运行时发现,但确实会影响工作,所以想写一个工具把它跑出来。我目前遇到的问题有:
:v-modelattr="false"
周末手一抖把服务器从 17.10 升级到了 18.04,然后博客就挂掉了。
根据提示信息,nginx 应该正常工作,问题多半出在 PHP 上。service --status-all 之后,果然 php7.1-fpm 没有启动。然后照常 service php7.1-fpm start,咦,奇怪,报错了:
Failed to start php7.1-fpm.service: Unit php7.1-fpm.service is masked.
换用 service php-fpm start 也一样,区别就是 service 名字不太一样。然后 Google 之,没找到很靠谱的说法,但是找到一个类似的情况,发生于使用 do-release-upgrade 升级到 16.04 时,php5-fpm 启动不了,报类似的错误,解决方案是升级到 php7。
如此一来我也试试好了,因为直接 apt install php-fpm 会解析出来 php7.2,所以我尝试 service php7.2-fpm start,果然可以。既然如此,干脆升级到 7.2 好了,反正我也没啥特殊要求。
于是修改站点配置文件,把 php 接口指向 7.2 的 socket,然后安装几个欠缺的模块,终于又把博客跑起来了。

2016年从前司离职的时候,为了能够移动办公,经过再三对比,选择了当时较新的 XPS13 中配版本 i7-7500T+8G+256G。XPS 是 Dell 的高端品牌,比同配置的其它品牌要贵一些,买之前心里比较忐忑,实物到手后才放下心来:真是一分价钱一分货,XPS 设计感十足、屏幕色彩丰富、散热良好、噪音很小、待机超长,确实比以前 5K 附近的笔记本好用得多。
以前做前端,对性能感受不太明显。如今我厂日常很多编译工作,对 CPU 要求颇高,这一代 CPU 低主频低睿频少核心的劣势就很明显(主要是 2017年之前农企太不给力),使用体验明显差于 2015 年买的 iMac(i7 4核4G),可以参考前文:升级依赖的一些小感受。所以我早早就动了换本子的念头,尤其是 Intel 发布第八代酷睿之后,各大笔记本厂商纷纷升级换代,我也一直都在关注。基于前面使用 XPS13 的良好体验,我的第一目标是新 XPS13 顶配版:
不过新品 16999 的售价让我望而却步,打算等到双11,降价+优惠之后,再择机购买。这样一来老机器也能物尽其用,免得被领导批评。结果前两天我鬼使神差的打开 Dell 官网,惊讶的发现竟然直降 3000,在京东 16999 的同时,官网只要 12999 就能入手。而且使用招行信用卡可以分期,虽然不免手续费,但也还可以接受。
这……简直……不容错过呀……
于是我只有……先买为敬了……
于是我反复对比配置,确定降价的型号真的是顶配无误,才颤抖着点下下单按钮。
接下来,经过长达一周百爪挠心的漫长等候(真是被京东惯坏了……),今天终于拿到了新本子。立刻开箱:

按照年初制定的每月一次直播讲堂的计划,现在就要准备5月份的讲堂了。考虑再三,结合平时在 QQ 群里解答大家的问题的经验,我打算继续深挖“职场新人”的需求,这次的计划分享关于社保个税等非技术相关但又非常重要的主题。
计划围绕主角小宅,在职场生涯各个阶段面临的问题来组织这场讲堂。我也正好回顾一下自己的职业生涯:
这么一看,我还真的很合适做这个话题,哈哈。
内容主要分为客观部分和主观部分:
开始之前都会有早鸟票,欢迎光临。

第7期去哪儿了……
视频在此:尬聊会第八期 竞业禁止/性能对比测试
时间:2018-04-22 21:45
地点:我的斗鱼直播间 douyu.tv/meathill
回看视频:http://blog.meathill.com/tech/galiao-8.html
下下周因为 SF 直播的关系,下周没有尬聊会,下下周周日见。
欢迎加入肉山小课堂一同学习,QQ 群:肉山小课堂答疑交流群 628056148,SF 圈子:肉山小课堂继续深造中心

首先,我试用了 Wepy,丑的一逼,遂放弃。
小程序开发有两点比较蛋痛:
Webpack 在这里不太适用,因为 1,我们并非要把所有代码打包到一起。WebStorm 的 File Watcher 也不适用,因为它输出的文件扩展名是固定的(跟 pug 和 stylus 源程序有关)。于是我经过摸索了,使用 gulp 脚本解决了这个问题,代码如下:
import gulp from 'gulp';
import pug from 'gulp-pug';
import rename from 'gulp-rename';
const pugFiles = 'pages/**/*.pug';
// 通用的 pug 处理,可以把 pug 转译并改名为 .wxml 文件
async function doPUG(path) {
gulp.src(path)
.pipe(pug())
.pipe(rename({
extname: '.wxml',
}))
.pipe(gulp.dest('./pages'));
}
// 将所有 pug 进行转译
gulp.task('pug', async () => {
return doPUG(pugFiles);
});
// 侦听 .pug 文件的变化,并转译被修改的
gulp.task('watch', ['pug'], () => {
gulp.watch(pugFiles, ({path}) => {
doPUG(path);
});
});
接下来,开发的时候,只要运行 gulp watch 即可。
用类似的方式,我们还能处理 stylus -> css,这里就不详述了,大家可以自己试一试。
完整的 gulpfile 在 GitHub 仓库里,请自行取用。

这个创意部分来源于梁博的微博。他为了帮助他儿子学习,做了一个加减乘除练习题的生成工具。
在应试教育的前提下,考分非常重要。要想得到高分,题海战术最为行之有效,尤其是理科,多见识题目,多练题目,将课堂上学到的知识与题目建立强关联,以期在考试时尽快完成解答,几乎是唯一途径。
获取习题的方式,在我那个年代就只有买习题集。习题集可能是抄袭最多发的地区,基本上,买一本习题集,里面完全没做过完全没见过的题目<10。结果只有大量买,反正做过的就当复习了。
其实出题是有逻辑的,而且并不复杂。举个例子,小学生的加减乘除练习题,就是几个随机数,随机运算符,计算,得出结果。这个自不用说,大家都知道,那么复杂一些的问题是怎么产生的呢?
其实就是减少条件数量,隐瞒中间步骤。比如几何证明题,已知条件 ABC,求证 G,其实就是利用 ABC,退出 DEF,然后自然得出 G。或者更复杂一点,其中一个条件是辅助线。再比如化学推断题,就是 A 和 B 反应生成 C,C 搞一下生成 D,D 又和 E 反应生成 A 这样,其实也只是把某一物质的若干个反应结合起来,考察学生的记忆推理能力。
了解这些之后,我们应该可以写出一个题海生成器:
然后解答也很容易,直接揭示中间过程即可。
感觉又是一个月入百万的项目呢!

尬聊会开了4期之后,我发现大家很少问具体的技术问题,多半会问关于求职面试之类的事情。于是把之前的经验整理了整理,做了两期讲堂,效果还挺好:
接下来我觉得求职面试讲的差不多了,没剩啥干货了,加上今年想转换思路,利用尬聊会慢慢讲一些大题目,所以从第五期开始,讲设计模式,之后基本就在探索。
再接下来,我在工作中遇到两个算法问题,属于不复杂但是需要耐心和一点小技巧的类型。于是我就把它们拿出来作为作业布置下去——很遗憾,没人完成,不过尝试的人很多——然后第六期就做了比较详细的讲解。
具体视频在此:尬聊会 第六期 向上管理/URL过滤解析/自动补全筛选解析
时间:2018-03-26 21:30
地点:我的斗鱼直播间 douyu.tv/meathill
回看视频:http://blog.meathill.com/tech/galiao-6.html
视频中设计到的代码均可在 GitHub 课后作业 这个仓库中找到。
上周跟我厂老板争执了两个性能方面的问题,最终以性能对比测试的方式产生了结果。本周尬聊会计划就这个过程和细节做一次分享。结束前会抽一名同学赠书一本,《CSS 世界》或《深入理解 ES6》任选。
欢迎加入肉山小课堂一同学习,QQ 群:肉山小课堂答疑交流群 628056148,SF 圈子:肉山小课堂继续深造中心

记录使用 Puppeteer 的一些经验。
puppeteer 是一个“库”,没有自带的命令行功能。所以要使用的话必须写一个文件,然后实现对应的功能。
npm i puppeteer
puppeteer 里面包含完成的浏览器程序,少说也是 100MB,所以需要下载比较长的时间,在墙内则经常会失败。所以建议国内开发者用淘宝的源:
npm config set puppeteer_download_host=https://npm.taobao.org/mirrors
Could not find browser revision xxxxx如果安装依赖时,默认的浏览器下载不成功,使用时可能会报这个错误。里面的 xxxxx 是某个版本号。此时可以使用 npm i puppeteer --force 重新安装。如果是墙内用户,那么按照上一小节设置源之后再安装,多半就可以解决问题了。
关于 WSL 使用,请参考这篇博文:在 Windows 10 WSL 中使用 Puppeteer