5
二/10
0

archlinux上搭建android开发环境

其实在archlinux上搭建Android的开发环境更加简单,我们甚至不需要去官方网站下载SDK,因为aur的源里面都有了。首先安装eclipse开发环境(虽然netbeans现在也有android开发包,但配置起来很麻烦)。

sudo pacman -S eclipse jdk

然后使用aur安装eclipse-android(ADT)以及android的sdk。

yaourt -S eclipse-android android-sdk

完成后,我们就可以打开eclipse来创建android项目了,但在这之前,我们先做一些简单的配置,window菜单的“Android SDK and AVD manager”选项打开后,选择update all,安装SDK platform android 2.1(最新版)。
这里需要注意下,arch默认为我们安装的SDK文件属主不是自己,该目录下没有可写的权限,所以在安装的时候可能会失败,我们事先要把SDK目录chown成自己就没问题了。如果发现没有安装成功,仔细查看下日志,我第一次安装的时候就是因为目录不可写的问题。

完成后在eclipse的首选项里面配置下android的SDK路径,arch默认安装在/opt/android-sdk目录下,我们手动指定即可。

所有配置都已完成,我们现在可以参考android官方文档开始创建项目了。

android

2
二/10
0

SDLMAME的家用机模式

今天看到一个新的neogeo的bios,点击这里可以下载。运行sdlmame的时候可以指定一个bios,比如

sdlmame -bios uni-bios_2_0 kof98

启动后即可设置是否采用家用机模式,如果还想设置下次进入这个bios的界面时候ABC三键一起按(是游戏中的ABC,不是键盘)。另外游戏中可以同时按下1P的开始键和投币键,即可调出来一个作弊菜单。

如果你同时按下ABC时键盘冲突,可以参考我的另外一篇文章:
XMAME热键设置

最后,如果嫌每次都输入-bios选项麻烦,可以手动加一个alias,编辑.bashrc文件,加入一行:

alias sdlmame=’sdlmame -bios uni-bios_2_0′

source .bashrc

以后只要运行sdlmame kof98就可以了。

enjoy mame games!

关键字: ,
30
十二/09
0

firefox3.5关联amule

自从firefox3.5和amule不能通过常规办法关联后,就一直借助opera做下载的跳转,今天看到一个老外用的办法,试了下可行,分享给各位。

$ gconftool-2 -t string -s /desktop/gnome/url-handlers/ed2k/command “/usr/bin/ed2k %s”
$ gconftool-2 -t bool -s /desktop/gnome/url-handlers/ed2k/needs_terminal false
$ gconftool-2 -t bool -s /desktop/gnome/url-handlers/ed2k/enabled true

关键字:
18
十二/09
0

豆瓣电台上线了

今天Gmail收到一封豆瓣的邮件,邮件标题为”豆瓣送你一部私人音乐电台”,自己本身对豆瓣的产品从技术到体验还是比较中意的,尤其之前看过豆瓣的开发架构演变过程,更是觉得不错。

互联网很多产品都在改变我们的生活,正如邮件中所说:我们后台的机器人会不断模仿和学习你的个人口味,算出你真正想听的歌曲。

确实,现实生活中,大部分用户电脑上面的音乐文件都是自己喜欢的,听的时间一长的确比较腻味,新的音乐流行的音乐又不一定对自己的口味。或者选择QQ音乐等推荐,但这种推荐往往并不是自己真正喜欢的东西。如果通过一种方式或者算法程序提供给你自己喜欢的音乐,或者客观根据你的音乐喜好给你推荐你没听过但”应该“会喜欢的音乐,那多好,豆瓣电台正是如此。

试用了一下,通过三种方式”喜欢,删除,跳过“来判别你的音乐喜好,通过你的类似微软语音识别软件的”调教“之后,想听的音乐相似度越来越高。另外,还可以自定义自己喜好的歌手,我想这个会更加精确选择你喜好的音乐。

总之很有创意,因为有了喜好分析算法,不单单是一个在线流媒体播放器,不错的产品,应该可以删除您电脑中庞大的mp3或者更大格式的文件了。

关键字:
11
十二/09
0

关于drupal架构的思考

自从drupalchina推荐我的blog后,很多drupal的开发者和我讨论drupal的性能,drupal的缺陷,大有感触。

很多人都说drupal站点不适合扩展,或者简单的做到数据库和代码分离后就茫然了。最近参考了很多软件和web架构的书,反过来对drupal这个系统做了一些关于架构扩展的思考。

以自己现有水平来看,drupal的瓶颈似乎在PHP代码执行层面。网上说使用APC加速可以大大加强drupal的性能,自己还没有手动进行测试,所以没有发言权。但目前在自己使用过程中,还是看到drupal一些小尴尬。

drupal的缓存系统比较简单,只是对匿名用户(因为匿名用户访问页面变更比较少)进行页面缓存,并且是以数据库的形式进行缓存。直接序列化页面到cache_page表中,这种性能可想而知,如果对百万级的访问量来说,db将会是个噩梦。

drupal用apache的rewrite模块实现了简洁链接,伪静态页面是提高了SEO效果,但是针对生成静态页面来说,还是比较困难的。另外,drupal的代码可以更加精简,否则为了强大的扩展性损失大幅性能也是不可取的。

有人说代码和架构扩展没有关系(忘记哪位大牛说的),其实我不是很赞同这句话,代码和数据库刚开始的设计决定或者制约了很多后面需要扩展的条件,比如水平划分数据库表的时候,最好是选取primary key,但是这个字段最好不是auto_increment的(道理很容易想到),再比如数据库抽象层的代码如果做memcache缓存,好修改吗?

很多时候,代码级别制约扩展性的很大一个因素就是联合查询,因为在做垂直划分数据库的时候,分离的都是一些关联性不大,并且不会牵扯到联合查询的库表,但drupal很多地方都使用的inner join(几乎每个模块都能看到)。当用户并发数越来越大,服务器最大的压力来源于数据库,这时,有些朋友就说了”负载均衡“啊。

没有那么简单,首先我们考虑基于重定向的负载均衡,多做几个后端服务器,使用RR或者简单随即抽取机制来轮流使用服务器,drupal和其他站点不同的一点小小特性就是唯一入口index.php,也就是说在这个文件我们可以写入一些代码,实现重定向的负载均衡,这点是比较合适的。或者您为了避免不是真正的压力平衡,可以使用DNS负载均衡,这样下来,稍微大点的数据量我们勉强顶得住了。

从水平划分的方面来看,首先最大的表应该是drupal的node表,nid字段是primary key,并且auto_increment的,这就很难进行分表存储。另外就算使用了一些别的算法,分N个表出来存储node,问题是如果使那些众多的node相关操作代码使用不会出问题?

另外一种做法就是使用ngnix的反向代理功能,很多java的开发者叫分布式。就算后端服务器性能差异,我们还是可以通过配置文件来决定权重,能者多得的方式,让每个机器发挥到极限。还可以考虑的方式就是使用apache加载我们定义的lua脚本,匹配select和insert,update,delete等字符串,用来区分属于何种sql查询,进一步实现读写分离。不过在机器之间的数据同步也是个麻烦的事情,我没有在运维方面有多少经验,最多就是使用过rsync。

分析种种情景,使用drupal的用户不要担心,只要我们想的到,可扩展的办法还是很多的。性能决定在你自己手里。

关键字: