老调重谈:Spotify & Netflix on FreeBSD

FreeBSD 上没法用 Spotify 和 Netflix 很久了,自从这些东西的网页版需要 DRM 以来。具体来说,现在这些(以及基本上所有别的 Streaming 服务,例如 Disney+)都需要 Google 的 Widevine DRM 模块,而这货只有 binary,只提供给了 Windows/Linux/MacOS,所以 FreeBSD 就没法满足 DRM 需求。 理想状况当然是干掉 DRM,这个当然没戏;让 G 提供这个也不错,但是应该也没那么容易;用兼容层跑 Widevine 那个库或许可行,不过还需要花点功夫;之前还搞过在另一台 Linux 机子上放,转发过来。今天说的是通过跑个 Linux 虚拟机达到这个目的…… 第一次拿 bhyve 搞虚拟机,还挺好用的(通过使用 vm-bhyve……),几步就装完了一个 Debian。装好之后就有几个问题: 视频输出 音频输出 问题1有很多个办法,比如说可以ssh -Y,比如说可以remote desktop,可以VNC之类的…… 试了几波,ssh -Y和remote desktop都受限于 CPU,没法传4K。remote desktop差不多能到2560×1440,看流量大概有一个多Gbps…… 回头一想,搞什么ssh,直接连X啊…… 于是打开 X 的 TCP 监听,直接 DISPLAY=<IP>:0 怼过去,然后的确能用,4K都行,流量大概4个多Gbps…… …

Continue reading ‘老调重谈:Spotify & Netflix on FreeBSD’ »

折腾 Wireless Display

很早之前就买了个Microsoft Wireless Display Adapter,之后没怎么用。前段时间尝试从 Surface Pro 6 投影过去,发现怎么搞都不成…… 就是点了之后很快就说 Couldn’t connect。 照例在网上搜了若干方法,有说驱动的,有说组策略的,有说防火墙的,反正试了都没用…… 折腾了一晚上,情况都没啥变化。 最后我怀疑有啥软件半路拦截了数据包,于是打开 Windows 用户必备工具:SysInternals Autoruns…… 发现几个残留的东西,比如穿梭啦,QQProtect啦,以及之前装的 npcap 啦…… 统统车掉之后,居然就成了…… 但是,成了之后发现,这货只能投1080p,显示器是4K的,投了很糊…… 想起来当初为啥从Win跑路了,因为出了问题不好调啊…… 另外,SysInternals真是必备工具……

Pidgin 的回归?

从前啥IM都用 Pidgin 挂着,包括MSN啦,GTalk啦,人人啦,QQ啦,…… 后来发现用 Pidgin挂的话总有些问题,比如人人的XMPP接口会自动发状态啦,QQ时常不能用啦,GTalk 变成 Hangouts 之后干脆要干掉XMPP啦,就渐渐不用 Pidgin了…… 最近天天看着那个工作得不是很靠谱的Telegram客户端 (Linux版在BSD跑当然不靠谱),再看看那个卡得不行的 Hangout 网页版,突然想到是不是 Pidgin 现在可以搞这些了,于是去看了眼…… 虽然 Pidgin 那个难产的3到现在还没出来,界面和从前一模一样 (这几年到底在干嘛……),支持各种协议的插件倒是都有了。 Telegram: telegram-purple https://github.com/majn/telegram-purple Hangouts: purple-hangouts https://bitbucket.org/EionRobb/purple-hangouts Facebook: purple-facebook https://github.com/dequis/purple-facebook 试了试看上去都还工作得不错,终于可以摆脱 Hangouts 那个卡卡的网页版了…… 这三个里面嘛,Telegram和Facebook Messenger的协议都是公开的,所以应该是可以很好支持的。Hangouts 应该是人们自己分析出来的,所以可能时不时需要更新一下。不管怎么说,至少现在都能用,图片啥的也能看见 (虽然Telegram的动画表情还不行……)。 至于 QQ 嘛,还是去 Windows 上挂着比较靠谱……

年终总结

// 于是一年啥都没写就年终总结了…… 这个blog是要完蛋了嘛…… 还是已经完蛋了…… // 之前写过年终总结么?…… Research 2016年也算PhD读到第六年了,眼看着第六年还是毕不了业,想想还是挺傻逼的…… PhD重头当然是搞项目,今年前半段搞的项目基本上是大暴死,最后还有一个月发现有人搞过了…… 怎么说呢,随便就投入一个新领域,半路改题目还没读paper,最后发现有人做过了也是活该…… 至于毕业嘛,也不知道具体是啥要求…… 目前反正新项目目标就是毕业,所以管他是不是做system投到哪里去,能毕业就行…… 之前参与搞的另一个项目倒是投了若干次终于中了,好歹也算有新paper是吧,不像去年啥都没有…… Study 怎么说呢,娱乐时间偏多,基本上不学无术……搞那个不靠谱的项目倒是学了不少Scala相关的东西,感觉这个语言语法糖太多,有时候有歧义,看都看不懂…… 虽然有时候是写起来很爽是吧,但是那谁说过还是读起来爽比较重要…… 搞这个项目还了解了一些分布式系统的东西,但里面水太深,根本就是了解了很小一部分…… GitHub上倒是有不少烂摊子项目,开了个头就没接着搞的。看时候还是应该收拾收拾…… 买了本go的书就是一直没看,好像也没啥机会用…… Gadgets 看着袁叔天天用Surface Pro 4感觉挺爽,于是也买了个。毕竟之前用了Surface 3,觉得一方面挺方便,一方面性能不行。 Surface Pro 4性能倒是好,不过bug略多,我买的时候都出了一年了还是一堆bug…… 配合着Ubuntu on Windows,感觉这货还是挺好用的,既能拿来干活也能拿来娱乐,各种Linux原生程序都能跑,微软还是厉害…… 年初买了个Pixel C,也就用来看看漫画视频之类,主要也就是床上用用。在有了Surface Pro 4之后有被闲置的可能性…… 不过最近因为懒得把Surface拿出来所以又开始活跃了…… 其他嘛还有从袁叔那里进口的PocketChip,Pine64,Fossil Q Crewmaster,有兴趣单独写算了…… Life 嘛,有些事情也是慢慢熟悉起来的么…… 虽然还有很多不确定性,但是至少也算有个计划是吧…… 总的来说嘛,好像也不是太糟糕……    

DTrace

这两天搞了一把DTrace,貌似还挺有意思的。 DTrace是个动态跟踪工具,可以在动态环境下向内核/程序中插入探头(probe),收集处理以及显示一些信息。 其实本来搞DTrace是为了一个FreeBSD的bug。搞chromecast的时候发现,IP multicast的目标mac不对。不过后来分析代码大致定位到了出问题的文件,然后在最新代码里发现这个bug已经修了(PR 185395),于是纯粹就是学习DTrace了。 一开始在我的机子上DTrace还跑不起来,后来发现是因为我跑的UEFI分支里的内核路径有些特别,于是DTrace找不到符号。打了个补丁(dt_kernel_path.patch)之后,dtrace终于能用了。 DTrace脚本的主体是一堆事件处理函数。跑DTrace脚本的时候,系统碰到某个符合的事件,就调用对应的函数。这些函数用D语言(不是那个D语言,是DTrace自己的一种语言)写成,语法和C差不多。基本的赋值/比较都能干,不过没有循环,也没有if/then/else。能控制流程的,基本上就是每个事件自带的条件,和三元操作符,也就是?:。 虽然前面那个bug是修了,我还是搞了个简单脚本来试DTrace。我希望观察arpresolve函数的参数和返回结果,也就是那个返回IP对应mac地址的函数。 arpresolve的原型是 int arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m, const struct sockaddr *dst, u_char *desten, struct llentry **lle)int arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m, const struct sockaddr *dst, u_char *desten, struct llentry **lle) 我希望查看dst里的ip地址,和desten里返回的mac地址。 DTrace脚本如下: fbt::arpresolve:entry /execname == "ping" && arg4 != …

Continue reading ‘DTrace’ »