半吊子全栈开发者的日常

使用 Git 生成增量更新包

上次有人叫我在 Blessing Skin 每次升级的时候带上一个增量更新包,只包含所有上一个版本后修改过的文件。

我听到这个需求,最开始想到的是使用 git diff --name-only,加上这个参数后可以只显示 commit 之间修改过的文件名,然后就可以用管道通给 zip 之类的程序来压缩。

去网上搜了搜,发现还有更简单的方法

$ git archive -o ../latest.zip NEW_COMMIT_ID $(git diff --name-only OLD_COMMIT_ID NEW_COMMIT_ID)

这是用了 git archieve 命令,本质上和我上面说的也差不离。

如果你打了 tag,就可以写成这样:

$ git archive -o ../latest.zip HEAD $(git diff --name-only v3.0.1 HEAD)

是不是很方便呢 |∀` )

开始使用搜狗拼音输入法

说起输入法,自从几年前我升级 win8 之后我就对自带的巨硬输入法一见钟情,从此再也没有换过其他输入法。

然而,前几天被升级 win10 14393 之后(之前是万年 TH2),虽然开始菜单呀,设置页面之类的地方变了许多,但总体来讲对日常使用并没有影响,因此我也就没有特别在意。

今天我在 Sublime Text 3 中打算进行全局替换的时候,按了快捷键 Ctrl + Shift + F,然而什么反应都没有。在排除了其他可能性(键盘坏了或者我瞎了)之后,就几乎可以确定是热键冲突了。然而排查了运行中的所有软件后,没有一个软件占用了这个快捷键,这就非常的迷了 (*´д`)

> READ MORE...

「このすば」第九卷终于他妈到啦

7 月 1 号发售,我 6.21 预订的,昨天刚到,整整 25 天,终于 tm 到了,就算是慢也不带这么慢的吧? emotion

果然不应该贪便宜挑了个便宜几块钱的店吗。。我他妈的中译版都快看两遍了,上次买伏见老贼新书的时候,即使店家在路上出了点事(书被海关扣了),最后也是两个星期多就到了,难道你也被扣了? emotion2 不是我不体谅做代购的,我也不说叫你多快多快到,你既然收了钱,好歹给个说得过去的速度吧?

难道说三个半星期还算是正常速度?


Screenshot

> READ MORE...

关于 FormData.get() 的兼容性问题

又踩到坑了,稍微记录一下 ( ・_ゝ・)

我在 Ajax 上传文件时是用的构建 FormData 对象的方法,构建完之后我很自然的打算从对象里面取出值来做验证,StackOverflow 里搜了一下之后就知道了有 FormData.get() 这个方法,我也没想太多就直接用了,并且在我本地环境(Chrome 51)上没有任何问题。

前天把 beta 版的 v3 皮肤站上线测试了,今天就有人发邮件给我,竟然是 FormData.get() 这个语句报错了,提示 e.get is not a function,当时我就知道八成又是兼容性问题了 ( `д´)

查了一下 MDN 文档 果然是这样,FormData.get() 方法竟然是从 Chrome 50.0 开始支持的,而那个用户用的是三六蛋浏览器,于是就喜闻乐见的 GG 了 emotion

Node 实现自动解析网易云音乐并转换为 APlayer 配置

最近在网易云音乐找到了很多很棒的歌,准备找个 HTML5 的播放器挂到博客上去。以前我的博客也是有音乐播放器的,用的是 WordPress 的一个叫 WP-Player 的插件。后来转到 Ghost 的时候就把以前文章里的插件短代码删掉了,也没有再搞播放器了。

今天正好心血来潮,于是去 GitHub 上搜了下,看中了 DIYGod 做的 HTML5 音乐播放器 APlayer。UI 之类的也很对我胃口于是就马上拿来用了。

配置 APlayer 的播放列表需要提供一个数组,数组里放存放了歌曲信息的字典,大概像这样:

> READ MORE...

Python 实现自动重命名网易云音乐下载文件

网易云音乐 PC 版的下载文件都是按照 歌手名 - 歌曲名.mp3 的格式命名的,然而我比较喜欢直接以歌曲名作为文件名。手动一个一个文件改肯定是不行的,太 tm 蠢了(笑

以前我是用 shell 写的脚本来实现自动重命名的,但是有一次需要处理一张 OST 内的所有歌曲时(Rabi-Ribi 的 OST,我想把所有的文件名前面加上音轨号),shell 脚本就有些力不从心了,而且我也不想去折腾 shell 读取 ID3,就打算用 Python 来实现。

不得不说 Python 用来写这种小脚本真的是贼 tm 方便,加上查 Mutagen 文档的时间写了也就半个小时:

> READ MORE...

关于 JavaScript 的函数默认参数的兼容性

最近在写 Blessing Skin Server V3 的前端的时候,定义带可选参数的函数的时候经常这样定义:

function showModal(msg, title = "Messgae", type = "default") {
    var btn_type = (type != "default") ? "btn-outline" : "btn-primary";
    var dom = '/* 省略 */';
    $(dom).modal();
}

因为 PHP 写多了,也就想当然的认为 Js 的默认参数也是这样写的,而且 PC 上的测试也是一切正常,所以也没多想什么。

然而今天我在一台手机上测试的时候,发现事件没有绑定上,找了好久原因(因为手机没有控制台也不能设置断点,只好用最原始的办法在可能出问题的行上加上 alert('fuck') 来调试)也只是把出错的函数找了出来,却死活看不出有哪里不对 emotion

> READ MORE...

PHP 实现函数重载(伪)

众所周知,PHP 作为一门弱类型的语言,是无法直接实现像 C++,Java 那样的函数重载的。然而在某些情况下,这就非常蛋疼了。不过我们可以用一些奇技淫巧来实现「伪函数重载」。

一、使用 func_get_args() 函数

func_get_args() 函数可以获取函数参数列表的数组,我们就可以利用一下这个特性啦。

> READ MORE...

「大鱼海棠」观后感

今天上午去看了《大鱼海棠》这部电影,颇有感触,在这里写点东西。毕竟只是观后感,并不是影评,所以也不会过多评价。

movie post

这部电影我在初中的时候就看过它的预告片了,直到现在我高三了才上映,不愧是跳票之王(笑

> READ MORE...