2020-03-06(周五)

今天又把自己的华硕笔记本拆了,发现扬声器不响的原因,其实是我上次拆机忘记接回一条连接线了。装上之后,我又跑了一波黑苹果,开始对自己 Single 主题在 Safari 浏览器下滚动错误问题进行排查。 一番检查过后,我主要发现是 Kico Style 的 ScrollTo 方法有个地方写错了。在不支持原生平滑滚动(scroll-behavior)的情况下,需要进行回退操作,window.scrollTo() 方法默认为 x,y 两个参数,而我将它们写反了。解决完之后也给仓库提交了一个 Commit,而主题里面的暂时还没有更新。 下午把《伪恋 2》看完了,完结撒花。之后更新了一波后台,把媒体替换的功能正式完成(依旧存在可能出现的 Bug,例如后缀名为 jpg 的图片如果实质是 png,则会导致 GD 库处理报错),并把相关路由名称进行了修改,在修改过程中同时发现路由系统存在冗余,重新进行了整改。 晚上更了一波随机动漫音乐 API 的列表,你没看错,这个是人工维护的,还没有自动获取这么高级。因为网易云有很多音乐必须 VIP 才能听,会导致一些随机音乐无法播放,只能暂时人工维护。
多云 一般

2020-03-05(周四)

上午主要直播写代码,做了一个酷炫的轮播静态页面,提交到 GitHub 上的 Mystery 项目,作为首页展示子项目。在直播做页面所需要的效果图过程中,不知道什么原因,PS 突然崩溃!还好文件自动保存了,差点就翻车了! 下午则是在群友的建议下玩了一波 FaceRig,真是一个有意思的东西。它可以通过摄像头捕捉我的动作,即时反馈在虚拟人物中,以后我就可以用这个东西来直播增加乐趣了,哈哈哈 ?
一般

2020-03-02(周一)

上午起来之后,主要为图库增加媒体删除功能及进行小窝搬迁测试。前者很简单,就是封装了一条 API 语句,后者比较复杂,遇到了各种因环境切换出现的问题,我把折腾的过程写在了个人博客《Windows Server 折腾记》文章上,欢迎大家阅读指教!(同时还遇到了一个 PHP 环境差异的问题,还待解决与更新) 在 JS 里如何快速确定数组里面每个项目的属性是否全部/部分满足相应条件呢?相信各位首先都会想到万能的数组遍历法,但是经过今天的学习,我认识了两个新的方法,分别是 someevery。这样实现后代码更优雅,方便调用和理解。首先还是请回前几天都反复用到的那份数据做示例吧...
let users = [
    { name: "Paul", sex: "male", age: 19 },
    { name: "Eric", sex: "male", age: 19 },
    { name: "Kevin", sex: "male", age: 19 },
    { name: "Nazon", sex: "female", age: 18 }
];

// 返回 true,只要有一个符合条件就可以
users.some((item) => {
    return item.age === 19
})

// 返回 false,必须全部符合条件才可以
users.every((item) => {
    return item.age === 19
})
多云 一般

2020-03-01(周日)

晚上主要搞了一波 Ubuntu 系统,之前瞎弄把 GDM 弄死了,只能用命令启动。@Innei 大佬给了我一条命令 sudo systemctl enable gdm.service 设置自启,但貌似并没有作用。 除此之外,我最盼望的 xfce 桌面环境终于是成功体验上了,流畅度确实比 GNOME 快一点,但是界面也更丑了!装了集显驱动的桌面环境依旧摆脱不了那拖拽窗口撕裂的问题,播放音乐偶尔出现变调的情况也是难于克服。 什么,你问我 MacOS 不香吗?可我实在是不会弄黑苹果的驱动,教程也太缺乏了。没有蓝牙和无线网络,是真的难以接受,并且对于这台本就坏了两个 USB 口的电脑,这并不是什么好的解决方案。拔掉 3.5mm 耳机插头,我发现这台电脑的外放扬声器不响了。 凌晨十分,我在更新相册功能的时候偶然发现了个问题,导致生成的缩略图效果有误,出现了两次原图的内容。我已经把分析和解决思路记录在了博客文章《记 PHP 生成缩略图遇到的问题》,欢迎围观!以下配图的第二行第二张图,则为该 Bug 的效果,其前面的图片则为调试修复后的效果。
配乐 多云 开心

2020-02-29(周六)

凌晨两点,我历经千辛万苦,重新修改了图库原有旧文件的名称,前台终于是可以正常显示图片了... 醒来之后花了大半天时间收拾了自己的房间,把衣物重点整理了一波,最终收获一个较为干净的房间+严重过敏、轻微感冒症状的鼻子。同时给房间的老电脑装了金山打字,让我妈练习提升打字速度。 晚上吃饱饭继续听公开课,主要收获是认识了 ES6 的 Filter 方法,用于快速遍历数组,筛选里面符合条件的整条数据对象。
let users = [
    { name: "Paul", sex: "male", age: 19 },
    { name: "Eric", sex: "male", age: 19 },
    { name: "Kevin", sex: "male", age: 19 },
    { name: "Nazon", sex: "female", age: 18 }
];

// 旧方法
let names = [];
users.forEach((item) => {
    if(item.sex === "female") names.push(item);
});

// 新方法
let names = users.filter((item) => item.sex === "female");

// 最终都得到 [{name: "Nazon", sex: "famale", age: 18}]
配乐 郁闷

2020-02-28(周五)

上午主要研究了下怎么给自己的华硕路由器刷第三方固件,在刷第三方固件之前一定要备份一下内置的,假如翻车了,还有后悔药可以恢复。教程提供的方法是打命令之后把备份得到的文件通过 FTP 的方式取出,但是我发现 FTP 连接不上,就想到了用优盘的方式,简单的 Linux 命令还是会操作的。 接着就是给自己的服务器进行了一次备份,上一次的完整备份呢,是去年 11 月的时候做的。其实最好要养成一个月一次的备份习惯,现在有 NAS,存储空间比以往更宽裕了。在备份过程中,我留意到了自己此前想给自己服务器做一个特殊的防盗链:将盗链的图片链接统一替换为指定的图片,可以通过这种方法起到警示盗图者的作用。研究了一波,主要就是通过修改 Nginx 配置文件实现,配置过程以后可能会发布成文章,敬请期待! 晚上继续听前端公开课,主要收获是认识了 ES6 的 Map 方法。在以往为了筛选一个对象中的数据,我们都需要反复遍历数组,再通过 Push 取出需要的键值合成一个新数组。而现在只需要这么一个方法就能快速解决,省时省力。
let users = [
    { name: "Paul", sex: "male", age: 19 },
    { name: "Nazon", sex: "female", age: 18 }
];

// 旧方法
let names = [];
users.forEach((item) => {
    names.push(item.name);
});

// 新方法
let names = users.map((item) => item.name);

// 最终都得到 ["Paul", "Nazon"]
并且同时还得知 ES6 扩展运算符 ... 的使用,通过它可以用一个数组来填充一个函数所需的多个参数,简单来说其实就是快速把数组给拆开了。
配乐 开心

2020-02-25(周二)

今天主要修改了小窝的语录功能,从原有的 Post 表单提交方式改为 Ajax + API 提交,为以后全站 API 化,可能实现的前后端分离做好准备。晚上则是重新复习了一波 ES6 的变量解构(因为此前看过阮一峰的教程),主要内容如下:
let [a, b, c] = [5, 1, 2];
// 等同于 let a = 5, b = 1, c = 2;

let arr = [4, 5];
let [x, y, z] = arr;  // 等同于 let x = 4, y = 5, z = undefined
let [a, b, c] = [1, [1, 2], {id: 1}];  // 等同于 let a = 1,  b = [1, 2], c = {id: 1}
let [a, [b], d] = [1, [2, 3], 4];  // 等同于 let a = 1, b = 2, d = 4;

let arr2 = [100, 200];
let [x = 1, y = 2] = arr2;
// 等同于 let x = 100, 200,因为有内容,如果不用默认参数,就是
// let x = arr2[0] || 1, y = arr2[1] || 2;

let [x = 1, y = 2] = [6];  // 等同于 let x = 6, y = 2
let [x = 10, y = 20] = [];  // 等同于 let x = 10, y = 20
let [x, y = 100] = [10];  // 等同于 let x = 10, y = 100

// 以下两种情况只有 undefined 会变成 1
let [x = 1] = [null]
let [x = 1] = [undefined]
以此同时,还了解了对象的解构,它和数组也很相似,就是解构出来的变量名如果要改,必须使用 : 说明一下。左侧为匹配模式,右侧为修改的变量名
let obj = {
    name: "Paul",
    age: 19,
    id: 1
}
let {name, age} = obj;  // 等同于 let name = obj.name, age = obj.age
let {name:n, age:a} = obj;  // 等同于 let n = obj.name, a = obj.age

let {a} = {x: 1, y: 2};  // 无法匹配
let {x:a} = {x: 1, y: 2};  // 等同于 let a = 1,a 作为变量,x 作为匹配模式

let {x = 1, y = 10} = {x:undefined};  // 等同于 let x = 1, y = 10
let {x:y = 5} = {x: 10};  // 等同于 let y = 10
以及函数解构:
function test([x = 1, y = 2]) {
    return x + y;
}
test([10]);

function test2(x, y) {
    x = x || 1;
    y = y || 2;
    return x + y;
}
test2(10);

function test3({x = 1, y = 2}){
    return x + y;
}
test3({x: 10})
开心
奇趣音乐盒 技术源于 Kico Player
Emmm,这里是歌词君