我的技术和生活

  • Vue 代码校验工具

    Vue 代码校验工具

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

    1. :v-model
    2. attr="false"
  • 密码保护:我司的现状

    密码保护:我司的现状

    此内容受密码保护。如需查看请在下方输入访问密码:

  • Failed to start php-fpm.service: Unit php-fpm.service is masked.

    Failed to start php-fpm.service: Unit php-fpm.service is masked.

    周末手一抖把服务器从 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,然后安装几个欠缺的模块,终于又把博客跑起来了。

  • XPS13 2018 新版顶配开箱

    XPS13 2018 新版顶配开箱

    2016年从前司离职的时候,为了能够移动办公,经过再三对比,选择了当时较新的 XPS13 中配版本 i7-7500T+8G+256G。XPS 是 Dell 的高端品牌,比同配置的其它品牌要贵一些,买之前心里比较忐忑,实物到手后才放下心来:真是一分价钱一分货,XPS 设计感十足、屏幕色彩丰富、散热良好、噪音很小、待机超长,确实比以前 5K 附近的笔记本好用得多。

    以前做前端,对性能感受不太明显。如今我厂日常很多编译工作,对 CPU 要求颇高,这一代 CPU 低主频低睿频少核心的劣势就很明显(主要是 2017年之前农企太不给力),使用体验明显差于 2015 年买的 iMac(i7 4核4G),可以参考前文:升级依赖的一些小感受。所以我早早就动了换本子的念头,尤其是 Intel 发布第八代酷睿之后,各大笔记本厂商纷纷升级换代,我也一直都在关注。基于前面使用 XPS13 的良好体验,我的第一目标是新 XPS13 顶配版:

    1. 更轻薄体积更小
    2. 待机时间更长
    3. 带指纹识别的开关
    4. 触控屏(没办法,触控的确更符合人类天性)

    不过新品 16999 的售价让我望而却步,打算等到双11,降价+优惠之后,再择机购买。这样一来老机器也能物尽其用,免得被领导批评。结果前两天我鬼使神差的打开 Dell 官网,惊讶的发现竟然直降 3000,在京东 16999 的同时,官网只要 12999 就能入手。而且使用招行信用卡可以分期,虽然不免手续费,但也还可以接受。

    这……简直……不容错过呀……

    于是我只有……先买为敬了……

    于是我反复对比配置,确定降价的型号真的是顶配无误,才颤抖着点下下单按钮。

    接下来,经过长达一周百爪挠心的漫长等候(真是被京东惯坏了……),今天终于拿到了新本子。立刻开箱:

    (更多…)

  • 新讲堂:职场新人必修课——社保个税创业股票贷款买房晋升考评等

    新讲堂:职场新人必修课——社保个税创业股票贷款买房晋升考评等

    按照年初制定的每月一次直播讲堂的计划,现在就要准备5月份的讲堂了。考虑再三,结合平时在 QQ 群里解答大家的问题的经验,我打算继续深挖“职场新人”的需求,这次的计划分享关于社保个税等非技术相关但又非常重要的主题。

    计划围绕主角小宅,在职场生涯各个阶段面临的问题来组织这场讲堂。我也正好回顾一下自己的职业生涯:

    1. 非科班,靠自学 Flash 找到第一份工作
    2. 快速成长,当上前端组组长
    3. 遇到第一个职业瓶颈,难以突破
    4. 艰难离职,缺乏跳槽经验,找了一家外包公司,并不合适,于是半年后二进宫
    5. 产品方向取得突破,700人公司进入核心管理层,遇到第二个职业瓶颈
    6. 再次离职,工资突破性成长,突破技术瓶颈
    7. 加入初创公司
    8. 努力做大做强,跟各部门合作
    9. 创业失败,扫地出门

    这么一看,我还真的很合适做这个话题,哈哈。

    内容大纲

    内容主要分为客观部分和主观部分:

    客观部分:

    1. 社保养老医保商保公积金个税
    2. 保密协议竞业禁止接私活
    3. 买房贷款
    4. 生孩子报销
    5. 期权与股票
    6. 晋升与跳槽

    主观部分:

    1. 工作中的常见误区
      1. 过分信任老板
      2. 过分信任同事
      3. 是金子总会发光的?
    2. 如何认识加班?
    3. 如何认识头衔?
    4. 学会背锅,学会汇报——升职加薪的阶梯
    5. 大城市奋斗,小城市养老?
    6. 如何突破阶层壁?

    面向受众:

    1. 应届生,大学生
    2. 刚刚开始工作不久的新人

    讲堂地址:

    职场新人必修课——社保个税创业股票贷款买房晋升考评等

    开始之前都会有早鸟票,欢迎光临。

  • 尬聊会:第八期

    尬聊会:第八期

    第7期去哪儿了……

    视频在此:尬聊会第八期 竞业禁止/性能对比测试

    时间:2018-04-22 21:45
    地点:我的斗鱼直播间 douyu.tv/meathill
    回看视频:http://blog.meathill.com/tech/galiao-8.html

    0. 竞业禁止

    • 什么是竞业禁止
    • 竞业禁止有哪些注意事项

    1. 性能对比测试

    1. 什么是性能对比测试
    2. jsperf.com
    3. 性能对比测试的细节

    实录地址:

    2018-04-22 尬聊会 第8期实录

    下期预告:

    下下周因为 SF 直播的关系,下周没有尬聊会,下下周周日见。


    欢迎加入肉山小课堂一同学习,QQ 群:肉山小课堂答疑交流群 628056148,SF 圈子:肉山小课堂继续深造中心

  • 使用 Pug 和 Stylus 开发小程序的 watch 脚本

    使用 Pug 和 Stylus 开发小程序的 watch 脚本

    首先,我试用了 Wepy,丑的一逼,遂放弃。

    小程序开发有两点比较蛋痛:

    1. 每个页面必须有3个文件,wxml,js,wxss
    2. 使用 wxml 替代 html,使用 wxss 替代 css,使得默认的编译失效

    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 这样,其实也只是把某一物质的若干个反应结合起来,考察学生的记忆推理能力。

    了解这些之后,我们应该可以写出一个题海生成器:

    1. 录入所有需要掌握的知识点,比如平行线、SO2有臭鸡蛋味等
    2. 输入难度系数
    3. 按照难度系数,生成完成推理过程
    4. 模糊掉中间过程,只给出初始条件和结果

    然后解答也很容易,直接揭示中间过程即可。

    感觉又是一个月入百万的项目呢!

  • 尬聊会:第六期实录

    尬聊会:第六期实录

    尬聊会开了4期之后,我发现大家很少问具体的技术问题,多半会问关于求职面试之类的事情。于是把之前的经验整理了整理,做了两期讲堂,效果还挺好:

    接下来我觉得求职面试讲的差不多了,没剩啥干货了,加上今年想转换思路,利用尬聊会慢慢讲一些大题目,所以从第五期开始,讲设计模式,之后基本就在探索。

    再接下来,我在工作中遇到两个算法问题,属于不复杂但是需要耐心和一点小技巧的类型。于是我就把它们拿出来作为作业布置下去——很遗憾,没人完成,不过尝试的人很多——然后第六期就做了比较详细的讲解。

    具体视频在此:尬聊会 第六期 向上管理/URL过滤解析/自动补全筛选解析

    时间:2018-03-26 21:30
    地点:我的斗鱼直播间 douyu.tv/meathill
    回看视频:http://blog.meathill.com/tech/galiao-6.html

    目录

    0. 向上管理

    • 简单介绍了向上管理。
    • 平时应注意积累数据,并在汇报中包含这些数据。
    • 写简历的时候也应带上数据。

    1. 问题一:URL 过滤

    整理域名 问题描述

    2. 问题二:自动补全筛选

    生成自动补全的函数列表 问题描述

    参考资料

    视频中设计到的代码均可在 GitHub 课后作业 这个仓库中找到。

    下期预告

    上周跟我厂老板争执了两个性能方面的问题,最终以性能对比测试的方式产生了结果。本周尬聊会计划就这个过程和细节做一次分享。结束前会抽一名同学赠书一本,《CSS 世界》或《深入理解 ES6》任选。


    欢迎加入肉山小课堂一同学习,QQ 群:肉山小课堂答疑交流群 628056148,SF 圈子:肉山小课堂继续深造中心

  • Puppeteer 笔记

    Puppeteer 笔记

    记录使用 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 下使用

    关于 WSL 使用,请参考这篇博文:在 Windows 10 WSL 中使用 Puppeteer

    我的测试仓库和工具

    参见 GitHub puppeteer-tool