年终总结

// 于是一年啥都没写就年终总结了…… 这个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’ »