SRT

学期初,报名参加了一个SRT(学生研究训练),关于智能手机平台上的程序开发。由WuXiaojun和XuMingxing两位老师指导……SRT项目第一次讨论会上,进行了分组。有Nokia手机的一伙人加入了Symbian组,有Windows CE手机的一群人加入了Windows CE组。我和另一个学长,以及某没到场的同学,分到了iPhone/Android组。从这个分组来说,我们基本上是分到了一个没人要的组。毕竟Symbian和Windows CE发布已经很久了,这两个平台上有众多的开发人员,也有许多相关的参考书籍和文献,设计起来比较容易,而iPhone和Android毕竟是新生事物,相关资料还很少。 Android情况还算比较好,毕竟Google当初宣传Android的一大优势就是开放,因此用Android写程序自然会比较容易,也有Google的支持。经过研究,Android的开发,其实主要就是下载安装SDK,然后装个eclipse插件,就可以开发,调试了。SDK里面带有模拟器,用起来挺方便的(虽然启动很慢……)。我下了Linux版SDK,发现模拟器没法用。后来找到了Google公布的源代码,原来是用qemu模拟的,SDL负责显示,不过都是Google修改过的版本……编译出来一个静态的emulator,替换掉SDK里面的,就可以正常工作了。我写了个hello world之后,就去搞iPhone去了。现在,组里那位学长已经成功写出井字棋了。 iPhone就麻烦多了。虽然Apple出了SDK,但是只能在MacOSX上跑,并且要编译出能够在iPhone上跑的程序要99美元……幸好hacker们搞了Jailbreak,破解了iPhone的限制,是个程序经过随便什么代码签名就能跑,但是我没有Mac阿……Hacker们也搞出了第三方的SDK,基于 llvm-gcc 和 Open Darwin CC Tools。Google Code上有个iphone-dev,就是这个东西。照着网上的说明,我先编译出了 iphone-dev 项目的结果。但是,拿这个编译个命令行Hello World还行,编译图形界面程序,就说有东西没定义。折腾了半天,知道这个只能用于1.x版本的iPhone,2.x版本需要新的第三方SDK…… iPhone在1.x到2.x的过程中,改变了Objective C的ABI…… 编译target也从arm-apple-darwin(其实是8)变成了arm-apple-darwin9又折腾了至少十几个小时,终于搞出了新版SDK,编译出了图形化的程序…… Apple在新系统还引入了其他限制,图形界面的程序从命令行启动会被Kill,只有从SpringBoard(iPhone的类似于桌面的系统程序)才能启动…… 仿造了一个应用程序条目之后,终于从SpringBoard启动成功,图形化的Hello World阿~话说Apple公布的SDK还是很有帮助的,让第三方SDK编译过程简化了不少…… 但是感觉第三方程序严重受制于Apple,Apple改变一点东西,第三方程序编写者就有很多东西要改,除非加入Apple的某计划…… 总之,现在在iPhone和Android上面都能写带GUI的程序了~ hacker威武~

linux QQ 试用

腾讯出了个 linux QQ,不管是出于支持国产,还是出于争取用户,反正终于有官方版的了。为了这个能够在BSD上跑,我还更新了一堆包。BSD 上 port 里有的 linux 包都太老了,gtk还是2.6的,QQ没办法用,说有没定义的东西。我说你QQ怎么就不搞一个静态编译的……然后更新了 gtk 和 glib,为此更新了 pango,然后是 cairo,然后装了 pcre, xcb, pixman… 搞了半天终于跑起来了。 总的来说,功能很弱,腾讯那个网页宣扬的功能,也就是全部功能了。图片能收不能发,文件不能传,群只能聊天无法管理,没有声音提示(这个最BT! 别人发给我消息我不知道……)然后不支持只显示在线用户,连把好友换个分组都不行……说起来还是 preview 版,所以不能期望太高。毕竟到目前为止还没有 crash 过,这个就比我 wine 出来的 QQ2008 就好多了……官方出了QQ,总也不是什么坏事。反正不管谁出的,谁的稳定,谁的好用,就用么…… 毕竟服务是腾讯提供的啊…… 哪天谁像ubuntu老总那样NB了,钱多了开个公司,运行一个聊天服务器,发布开源的聊天软件,倒是很不错~  现在比较有希望的大概也就是 google 了。

小试Gtk/Glade:gtunet

从前看见有的程序用到glade,看了一下,发现是靠xml文件来描述程序界面的方法,当时就觉得不错。这两天看着学校的tunet越来越不爽,linux/BSD下只有命令行版本。虽然有个叫qtunet的,但是貌似从来没人更新,界面巨烂,功能也很有问题。于是想到在tunet的基础上,做个GUI。结果就动手写起gtunet。正好试试gtk编程,和glade这个工具。试下来glade真的非常方便,弄完界面,和函数挂钩,相当于原来的一个一个控件建出来再signal connect,省力许多。所谓"界面和程序逻辑分离",这个是第一步吧。 其实写了一半的时候,觉得用PyGTK或者其他脚本语言来写,或许更方便。毕竟要和一个命令行的程序对话,用C来写并不是很方便。而且,有什么问题,改一下就可以看见结果。但是,我一直对PyGTK之类的东西没有好感,本来Gtk并不大,却要装一大堆的binding。后来写到一半,发现大概还非得用C不可。tunet其实有个地方比较ws,它为了不让密码显示在控制台,是直接打开/dev/tty,然后可能靠ioctl来禁止回显。既然没有用stdin,我本来用popen打开的方法也不能输入密码。然后我也只好打开/dev/tty,然后用TIOCSTI这个ioctl来模拟键盘输入了。如果用脚本的话,这个估计就麻烦了…… 今天添加了一个线程,把获取程序输出并显示的部分扔到了一个线程里。然后麻烦的事情就出现了…… 我还想让记录自动滚动,然后写了一些东西,结果运行的时候,冒出来各种各样的错误…… 简直就是每次的错误都不一样…… 我的线程是用pthread建的,后来觉得问题就出在这个上面,改成了gtk自己的thread库。现在好像稳定了不少,但有时候还是会有问题……tunet很NB,我killall掉tunet的话,连我gtunet这个父进程也会收到一个SIGTERM…… 太NB了…… 现在,大致这个东西勉强能够用了,不过还有很多能够改进的地方~其实,貌似Gtk用类绑定之后,用起来会方便不少。但是,貌似用gtkmm这个库(C++绑定的Gtk)的程序很少,如果用了,还要额外装…… 算了吧。

From Beryl to Compiz-Fusion

当初,Compiz 社区的一部分人员,因为 David R. 不愿意接受某些 patch,决定分家,独立出 Beryl。现在,Beryl 和 Compiz 的开发人员意识到分家的问题,终于决定再次携手。虽然某些分歧仍然存在,虽然目前合并主要在 plugins 部分进行,但是毕竟,合并开始了。新的项目被称作 Compiz-Fusion,从名字上看仍然偏向于 Compiz,毕竟祖先是 Compiz。从 git 上面抓了代码,opencompositing 社区有个脚本,能够自动抓代码并编译,但是 BSD 上面跑还是有些问题。首先,很多地方缺编译参数 -I/usr/local/include ,很多 plugins 缺编译参数 -I/usr/local/include/libxml2。Linux 的 find 相当于 BSD 的 find . ,有些 Makefile 以及独立下载的 plugin 的 Makefile 有这个问题。奇怪的是 3d 插件,这个 beryl 当中非常重要的插件,不在 compiz 的默认安装里,不在 plugins-main里,甚至不在 plugin-extra里,以至于 plugins-unsupported 和 plugins-wip (Working in progress) 里面,不知道怎么打算的…… 还要独立搞下来,patch …

Continue reading ‘From Beryl to Compiz-Fusion’ »

Ubuntu用户见面会

昨天早上,到复旦去参加Ubuntu 用户见面会。这个是CXB老师推荐的,貌似SHLUG参与了组织。其实我不算是Linux用户,主要是FreeBSD用户。但是,既然CXB老师推荐,再加上都是unix系的系统,顺便还能混到新的Ubuntu,我仍然牺牲了懒觉,早上跑到复旦美研中心参加活动。整个活动就是 Mark Shuttleworth 在谢希德报告厅做了一个半小时的讲座,还是英语的…… 不过多半能听懂,只是他问问题的时候总是听不清楚…… 大概越想听清楚越不行吧。 报告说的是关于自由软件的各个方面,比如自由软件的盈利模式等。大部分时间都在回答问题,比如有人问起Dell PC预装Ubuntu,Ubuntu获得了利益,算不算把Ubuntu卖掉了(Mark说他们卖的是服务,而且这样做有助于促使厂商开发驱动程序);还有人问起在Linux系统上玩游戏的问题(Mark承认了这个问题,然后就扯到别的上面去了……);等等。最后,有人想出搞签名活动,就是请Mark在Ubuntu的盘上签名。一来我不算Linux用户,二来我有事情要尽快走,所以没有留下来等签名。 估计LeYan同学也去了,但是没认出来……