Talk is cheap

Show me the code

一次意外的 rm -rf

本事件发生于 2018 年 1 月 9 日 晚 22:27:41

我最喜欢的 Interactive Shell 是 Fish 。Fish 有个特性是自动补全命令以及目录。当你在 Fish 中输入 ~ 这个字符,按下 Tab 键,就会列出一系列系统中已存在用户的 home 目录来供你选择。

Home 目录补全

- MORE -

突然的归家(下)

火车大概走到一半的时候,父亲突然在微信上给我发消息:“到哪里了?”我有些诧异,因为母亲说过让我不要告诉父亲我回去的事情,想必是她自己说了吧。我便如是回答到了哪个站。接着父亲又说,“你姑姑会去接你”。我虽然有些奇怪,因为以前总是父亲来车站接我的,但也没问下去。 在出站口迎接我的,是表弟。“这么快就出来了。”他漫不经心地说着,同时带着我向前走。山东的天气还是有些冷的,但由于没有刮风,感觉甚至比杭州要暖和一些。尽管如此,我还是把手连同衣袖一起塞在外套口袋里面,并把外套的拉链拉到了最高的位置。

坐上姑父的车,一行几人便开始寒暄起来。无非是关于冷不冷啊,上课忙不忙啊,什么时候实习毕业之类的问题。我算是认真地回答了一下,但心里还是期待着回家。很快到了我家楼下,姑父、姑姑以及表弟一起上了楼。

开门的是我父亲,看起来精神状态还不错,只是声音很沙哑。父亲见到我,心中的喜悦都洋溢在脸上,赶紧叫我们进来坐下,并交代母亲准备饭菜。这时候已经大概是 20 时了,姑姑一家早已经吃过饭,便在客厅与父亲交谈,我则在厨房吃饭。晚饭是烧饼,加上西红柿炒鸡蛋以及菜花炒肉。十几分钟后,我吃完了饭,姑姑一家也差不多要离开了。

回到客厅,这才开始好好地看看父亲的样子。父亲看起来没什么异样,只是脚下放着一个痰盂,时不时就要往里面吐些什么。我稍微问了一下,只是简单地答道,“是咽炎。”“既然是这样,那就少说些话吧”,我说道。父亲又问到回程车票的问题,我其实还没买。既然没什么大事,不如星期日下午回去,星期一还能赶得上上课。这么商量着,就买好了回程的车票,顺便用掉了本年度第二次学生优惠购票机会。

因为实在是有些累,又聊了一会,我就去洗澡睡觉了。感觉没什么特别的,父亲好像只是得了点小毛病,没什么大不了的吧。至于为什么要叫我回来,母亲说,父亲一开始想让你元旦的时候回来,但你觉得不合适没有同意,父亲也尊重你的安排。但我看他实在是想你了,就把你叫回来,直到火车快到站时才跟父亲说的。感觉,也没什么大事,就当放假回家看看嘛。毕竟,在我上大学以后,除了寒假暑假,就没有回过家。

- MORE -

突然的归家(上)

12 月初的时候,准确地说是 12 月 1 日那天晚上,突然感觉自己似乎很久没有给父母打过电话了。但当时已经是晚上 11 点半了,微信视频通话过去,爸妈都回复说已经睡觉了,可以明天再聊。于是第二天通了电话,但也只有短短的 6 分钟而已。感觉父亲的状态不是很好,嗓子很沙哑。但当时也没在意,因为学期初接的老师的一个巨坑无比的项目刚刚结束第一阶段的开发,实在挺累的,想要好好休息一下。电话中爸妈的意思是想让我元旦回家一趟,但我说 “反正就要期末考试了” ,想着考完试直接回家过年。况且元旦顶多放三天假,坐火车的路上就得浪费一天,实在不划算。

过来几天,在 12 月 5 号下午上课的时候,父亲突然在微信上给我发消息,让我元旦的时候买张票回家。但此时期末考试的安排已经出来了,大概 1 月 25 号就可以结束,于是我再一次推掉了。

我本来以为这件事就这么过去了,但在 12 月 6 号晚上上课前,母亲少见的给我打了电话。她执意要我回去,并说 “你爸爸病了,挺想你的,回来一趟吧” 。听到这个,我感觉有些诧异,也就同意了回家一趟。同时母亲还说,买票的事就不要给父亲说了,告诉她到站的时间,会来接我。但以前回家都是父亲来接我的,难不成…细思恐极。

于是下课回到寝室后,就订了星期五下午回家的车票。第二天是星期四,一整天上课。星期五早上想着去找辅导员请假,无奈他不在。没办法,再不去车站就要赶不上火车了,只能出发了。

阳光下的图书馆

- MORE -

XPS 13 9350 更换 Intel 8260 AC 无线网卡

Dell XPS 开发者版与普通版最大的区别大概就是无线网卡了。开发者版是 Linux 友好的 Intel 网卡,而其他的版本一般是 Dell 自己的网卡,在我看来就是 Broadcom 网卡的马甲。据说 Broadcom 的网卡对黑苹果很友好,然而我又不用 ... 但最近在更新 linux-lts 内核的时候,却出现了很大的问题。

在上个星期更新内核到 linux-lts-4.9.62-1 时,出现了网卡不可用的情况。给出的报错信息为

# journalctl
11月 20 14:43:34 quad kernel: brcmfmac: brcmf_p2p_create_p2pdev: set p2p_disc error
11月 20 14:43:34 quad kernel: brcmfmac: brcmf_cfg80211_add_iface: add iface p2p-dev-wlp58s0 type 10 failed: err=-16

# dmesg
[    4.061743] usbcore: registered new interface driver brcmfmac
[    4.061803] brcmfmac 0000:3a:00.0: enabling device (0000 -> 0002)
[    4.184308] brcmfmac 0000:3a:00.0: Direct firmware load for brcm/brcmfmac4350-pcie.txt failed with error -2
[    4.645165] brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Oct 22 2015 06:16:26 version 7.35.180.119 (r594535) FWID 01-e791c176
[    4.660415] brcmfmac: brcmf_cfg80211_reg_notifier: not a ISO3166 code (0x30 0x30)
[    4.681113] brcmfmac 0000:3a:00.0 wlp58s0: renamed from wlan0
[    6.054543] brcmfmac: brcmf_p2p_create_p2pdev: set p2p_disc error
[    6.054549] brcmfmac: brcmf_cfg80211_add_iface: add iface p2p-dev-wlp58s0 type 10 failed: err=-16

Google 了好半天,没有发现什么有用的信息,于是滚回 mainline 内核看看。结果一切正常 ...

但我就是要用 LTS 内核,这个 Broadcom 网卡已经让我不爽很久了!于是某宝买了个网卡,就有了下面的故事。

拆机

根据 这个教程 ,拆掉后盖的 8 个螺丝,掀开后盖,就可以直接换网卡了。不过后盖的螺丝是 * 型的,最好提前准备一下。

- MORE -

微信开发者工具 在 Linux 中的使用与吐槽

听说微信开发者工具更新了,啊不,不是听说,其实是在某挨踢之家看到的 一篇文章 ,出于好奇,就进去看了一下。发现下载页面只提供了 Win32/64 以及 macOS 的下载。真抠门啊,不给个 Linux 版的。我猜这个“开发者工具”是用 Electron 驱动的,于是下载了一个 macOS 版的准备看看。

下载下来是个 dmg ,可以用 7z x file.dmg 直接解包。这是解包之后的目录结构:

微信web开发者工具
├── Applications
├── .background
│   └── dmg-background.tiff
├── .DS_Store
├── [HFS+ Private Data]
├── .HFS+ Private Directory Data\015
├── .VolumeIcon.icns
└── wechatwebdevtools.app
    └── Contents
        ├── _CodeSignature
        ├── Info.plist
        ├── MacOS
        ├── PkgInfo
        ├── Resources
        └── Versions

打开 wechatwebdevtools.app/Contents/Resources ,里面出现了 app.nw 这个文件夹,原来用的是 nw.js 。继续进入,果然有 node_modules 以及 package.json 。然后进入 node_modules 看一下,发现了 reactreact-domreact-redux ........ 以及一大堆的 babel 插件。从 stage-0stage-3babel-registerbabel-minify 一应俱全。在打包的时候就不能把这些 devDeps 给删掉吗???

暂停一下,继续来看看能不能运行。

AUR 里面装一个 nwjs-bin 就行了。然后 cd 到 app.nw 运行

- MORE -

Arch Linux & KDE Plasma 配置笔记

换了新电脑之后,便入了 Arch Linux 的深坑。一开始是三天两头换桌面环境,还尝试使用 Unity for Arch ,最后还是停在了 KDE Plasma 。因为听说(真的是道听途说) f2fs 对固态硬盘很友好,便尝试在根文件系统上使用 f2fs 。但没有比较,也感觉不出来系统有多快,反而遇到很多坑 ... 装系统和日常使用的时候都有。比如系统启动的时候突然闪出一个 [FAILED] ,关机的时候半天关不掉(这里似乎忘了提示信息是什么了,反正是一个 1min 30s 的正计时,但时间到了以后又会顺延 1min 30s ,有时能到二十几分钟 ... ),Chrome 三天两头提示个人配置文件已损坏,但重启电脑又接着恢复 ... 等一系列坑爹的问题。一忍再忍,终于忍无可忍,但这时候就要期末考试了,所以只能继续忍下去。现在期末考试终于结束了,可以愉快的重装系统了!

首先是备份,直接把 /home 打成 tar 包复制到固态最后面一块刚划出来的分区里面备用。然后进入 LiveCD ,把 f2fs 分区干掉,换成 ext4 。这里又想吐槽一次了,f2fs 居然不支持分区移动和收缩,要拓展分区只能用 resize.f2fsparted 也是拿他没什么办法。

arch-chroot 分割线

先安装基本的软件包,当然少不了 fish shell 了!

pacman -S sudo fish git vim zsh nodejs npm shadowsocks-libev proxychains

在 Arch Wiki 的 KDE 安装环节,只提到了安装 kde-applications 软件包组或 kde-applications-meta 包。但这样会搞出很多没用的包,比如各种游戏,莫名奇妙的化学工具,“KDE 元素周期表”等等 ... 需要酌情做一些精简。

- MORE -

挖坑与填坑

在四月末,我插了三个旗子,在五月要完成这个完成那个。结果现在,六月已经过去两天了,还没有拔光......其实我是有好好填坑云音乐的,然后还建了 一个仓库 用来 分享 备份我的各种配置文件,只是没有写出来而已。至于评论系统么......鉴于这个辣鸡博客基本没人评论,就先扔在那吧,这也不是我所能控制的了啊 (误

在填坑的时候,有时会想,写这些代码的意义在哪里呢?放着作业不去写,来搞这些没什么用处的东西。而且写出来的也不是什么设计模式精良易维护易拓展的代码,如果真的有人看源码的话多半会笑掉大牙的吧。搬了这么多没用的砖,直接后果就是专业课没学好,期末考试就要等着挂了吧。然而就算是期末考试已经快要逼到了头上,还是不紧不慢,真不知道哪来的勇气。小小年纪就搬砖,那以后毕业了除了搬砖还能干啥?借用一句在 V 站上看见的话,“待遇的天花板瞬间就能碰到”。细思极恐。

所以到底为什么要挖这些坑呢?从我自己来看,大多都是出于一时冲动吧。突然有个想法从脑中闪过,就很激动,迫不及待要造个轮子,或者说马上就挖了一个坑。我这个糟透了的博客程序,云音乐,还有各种乱七八糟的仓库,大概都是出于此。之前我还很喜欢自己造轮子,用 Node.js 不喜欢装 npm 包,现在想想简直就是给自己找难受吧。虽然在一定程度上,重新“发明”一些轮子有助于学习,但把这些“多边形”的轮子用在生产环境就是自己的不对了。

为了填这些坑,最近,也可以说是相当长的一段时间以来,我都睡得非常晚,大概每天两点到三点左右的样子。不过一般来说八点就要上课了,自然只能是七点四十从床上爬起来,随便吃点东西/不吃东西就去教室坐着。而这些早课,大概只是一些上机课或英语课,我一般都没什么听的兴趣。有时还能坚持清醒着,大部分时间还是睡着了吧。作为一个大学生,这么做似乎有些舍本逐末的样子。还是痛快的承认自己不是一个“合格的”“当代大学生”好一点。啊,你看,现在都过了十二点,我又熬夜了。一边想着“这样做可不行呢”,一边又默默去填坑了。

我到底在写些什么?算了,还是填坑去吧。

在 Kotlin 中使用 Andorid 的 DataBinding

写教程之前,先闲扯点别的。昨天的 Google I/O 大会上,Google 钦点了 Kotlin 作为开发 Android 的官方语言,据说此言一出,台下开发者立即掌声雷动, 我没看直播所以只是听说 大概是天下苦 Oracle 久矣,Java 太辣鸡还天天想着抢钱。最近要组队搞某创新创业大赛,Android 端由我来负责,我终于也要开始写原生 Android 应用了呢,想想就有些激动。早就听说 JetBrains 的 Kotlin ,因为之前不用 Java 所以也没太在意,只是听说语法甜甜的。之前一直被灌输一些 Java 辣鸡的言论,而且身边有些 Java 使用者也这么认同了,当然不否认 Java 9 加入了很多新东西就是了。但如果让被 JS 惯坏了的我去写 Java ,我肯定是拒绝的,于是就开始学 Kotlin 了呗~

上学期,我接触了第一个前端框架 Vue.js 。当时觉得这个东西设计很精巧,上手也快,看了半天教程跟着打了几个 Demo 就上手写了,于是乎就习惯了双向数据绑定的写法,并且认为这是理所应当的。然而寒假之后接触了 React Native ,对没有双向绑定非常不爽。虽然双向绑定只是块糖,但有总比没有好嘛。听闻 Google 也搞了个 Android 上实现数据绑定的库 DataBinding ,而且兼容性也不错 我好像不是很在意兼容性2333 ,然后就想着要尝试一下。首先对于这个 DataBing 库,是有详细文档的,只不过如果要想在 Kotlin 上用它,有一些不一样。

下文中,~ 代表项目根目录。应用包名为 me.rocka.kotlindemo

1. 配环境 = =

首先在最外层的~/build.gradle ,添加 Kotlin Plugin Android Plugin :

buildscript {
    ext.kotlin_version = '1.1.2-3'
    ext.android_plugin_version = '2.3.0'
    { ... }
}

在当前版本的 Android Studio (2.3.3) 中,还不能直接新建 Kotlin 项目。但如果用工具(菜单栏 Code->Convert Java File To Kotlin File)将代码转换为 Kotlin ,应该会自动提示配置 Kotlin 项目,即上面的 ext.kotlin_version

- MORE -

四月的尾巴

五一假期放三天,过了两天浑浑噩噩的生活,假期就快要结束了。。。自从三月底服务外包校赛结束,把 React Native 扔到一边,就没怎么认认真真的写过代码 说的好像之前有认真写一样。转眼间四月要结束了,生日也过了,该想想之前都做了什么,以后又该做什么了。

四月刚开始的时候开了个大坑,然后一直有努力的在填 其实是为了GitHub连击数吧,我也不知道具体有什么用,现在大概做到能听歌看歌词的样子了。不过既然是大坑,就要一直填下去,就是不知道所谓服务外包国赛开始之后还能不能有这么多的空闲时间。

Electron Netease Cloud Music

- MORE -

Chrome 终于修复了高 DPI 下 IME 漂移的 bug

今天,北京时间 2017 年 4 月 20 日,Chrome for Linux 浏览器更新了 58.0.3029.81 版本。此次更新修复了一个陈年旧 bug :在 HiDPI 下输入法定位漂移的问题。相信高 DPI Linux 用户都会有亲身体会,而且基于 Chromium 的 Electron 应用也会有这个问题。现在这个 bug 终于被修复了,喜大普奔!接下来就坐等 Electron 同步最新的 Chromium 源码,皆大欢喜了!!!

喜大普奔

- MORE -