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 上挂着比较靠谱……

Streaming Music的方法

最近之前买的虾米会员过期了,忘了续了…… 于是看了眼目前可用的几种方案…… 虾米 买了会员国外才能用,不过会员很便宜,有不靠谱的自己写的客户端,速度有时候不太行。 也有些歌下架了。会员一个月可以下100首。好像没有无损来着。 网易 一样买了会员才能用。只有Linux客户端,BSD下面只能跑网页版,Wine出来的有点问题。速度也是有时候不行。 有些歌下架了,其中某些可以靠黑科技下下来,某些就不行。买了会员一个月可以下300首。号称很多歌有无损。 Spotify 不付钱有广告,有不少想听的东西找不到。好像有Linux客户端来着,据说Wine出来的客户端也还行,当然也有网页版。速度没有问题。 Google Music 不付钱没法搜,只有电台。很多歌没有。没有PC客户端只有网页版,网页版还有傻逼DRM…… Apple Music 反正也要付钱来着?一样也是缺东西,PC客户端就不要想了……   所以总的来说都很糟糕。其他还有QQ音乐啦酷狗啦酷我啦之类的,酷我这种好像就没有版权下架的情况…… 目前暂时用的是曲线救国的路径,先从网易那边下下来,然后利用Google提供的云存储传上去,再用手机streaming…… 但是Google没有客户端,网页依赖DRM,所以BSD上还是没法用…… 考虑把Google提供的云存储换成自己的云存储,自己架一个服务器然后用符合标准的客户端听…… 不过VPS肯定不行,存储太小,只能用NAS或者在自己家里弄个服务器再搞个动态域名之类的了……

年终总结

// 于是一年啥都没写就年终总结了…… 这个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 嘛,有些事情也是慢慢熟悉起来的么…… 虽然还有很多不确定性,但是至少也算有个计划是吧…… 总的来说嘛,好像也不是太糟糕……    

在FreeBSD的Flash里输入中文

对其他系统用户这大概都不是什么问题,但是在BSD系统上有一堆问题…… 环境:FreeBSD 11, 打了个patch所以用的centos 6作为linux_base。 首先是glibc是否支持locale的问题。貌似linux_base-c6没有产生locale数据库,所以要跑build-locale-archive。 之后跑linux的locale应该就不会报错了。 其次看gtk的xim输入法模块是否启用了。找个gtk2-devel的包,从里面可以找到gtk-demo,跑他可以检验。 默认貌似只装了gtk2包,没装immodule…… 找到gtk2-immodules-xim包,把里面的im-xim.so装到/compat/linux/usr/lib/gtk-2.0/2.10.0/immodules里。这还没完,还要更新immodules列表。跑linux的gtk-query-immodules-2.0,把结果写到/compat/linux/etc/gtk-2.0/i386-redhat-linux-gnu/gtk.immodules里。之后开gtk-demo,找个文本框,右键菜单->输入法里应该有XIM了。 这时可能还是无法激活输入法。我写了个小程序检查XIM的情况: #include <X11/Xlib.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> int main() { Display *dpy = XOpenDisplay(NULL); if (!dpy) { printf("fail to open display\n"); exit(1); } if (XSupportsLocale()) { printf("Xlib supports current locale\n"); } char *p = XSetLocaleModifiers(""); printf("current locale modifier: %s\n", p); XIM im = …

Continue reading ‘在FreeBSD的Flash里输入中文’ »

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’ »

在bsd上跑ndk-build

bsd一直是个官方不咋支持的Android开发平台…… 不过靠着linux兼容层,还是可以混混的…… 首先是ndk-build会报不支持的os(FreeBSD)和arch(amd64),而且ndk-build并不会使用环境变量里定义的值。所以有两个办法: 1. 直接调用gmake env HOST_OS=linux HOST_ARCH=x86 gmake -f $NDK_DIR/build/core/build-local.mk 这样啥都不用改。 2. 修改ndk-build 把HOST_OS设置成linux,HOST_ARCH设置成x86,并且export出来。 再把GNUMAKE设置成gmake,否则会调自带的linux版gmake导致一些麻烦的事情…… 然后直接跑就行了。 跑了之后会碰到一个问题:ld会segmentation fault。看系统log可能是因为fallocate和fstatfs64系统调用没有实现的关系。 解决办法是,到ndk目录里的toolchains/*/prebuilt/linux-x86/…/bin/,如果有ld.gold,那把老的ld干掉,改成到ld.bfd的符号链接。老的ld就是ld.gold…… 其实就是gold那个新的ld调了一些新的bsd还没实现的linux的system call…… 用老的bfd里的ld就没事了……

在FreeBSD上装linux skype 4

折腾了一个晚上好歹是搞出来了…… 起因是把linux_base更新到了linux_base-c6,也就是CentOS 6。这是个相当新的版本,各种rpm找起来也比较容易。 但是问题是,ports里其他linux包基本都是老的,要么是fc4的,要么是f10的…… 反正用不了。于是统统删掉。但是这样linux程序基本就跑不了,缺很多包…… 于是就自己搞rpm来装。但是rpm这回又不好使,试了ports里rpm3/4/5貌似都不行。 怀疑是因为rpm调了cpio,而FreeBSD 8-STABLE里的cpio貌似还不支持xz? 因为CentOS那些新包是xz压缩的,于是就解不了。 后来干脆不管rpm了,搞个脚本: if [ ! -f $1 ]; then wget http://mirror.yandex.ru/centos/6.2/os/i386/Packages/$1 fi rpm2cpio $1 | unxz > ~/tmp cd /compat/linux sudo cpio -idv < ~/tmpif [ ! -f $1 ]; then wget http://mirror.yandex.ru/centos/6.2/os/i386/Packages/$1 fi rpm2cpio $1 | unxz > ~/tmp cd /compat/linux sudo cpio -idv < ~/tmp …

Continue reading ‘在FreeBSD上装linux skype 4’ »