分类 编程相关 下的文章

经过多个晚上的搜索与实践,终于在今天上午把Arduino IDE装到CentOS 5.4上了。其实Arduino IDE是用Java写的,这个可以直接运行。但是是该IDE需要用到avr-gcc进行交叉编译,而且CentOS 5.4上没有rpm包直接安装,所以要自己动手编译。为了研究相关的设置和依赖包,费了很多时间。以下是安装过程的总结。

首先,安装binutils、avr-gcc和arv-libc

参考:
Building your own avr-gcc environment with atmega328p capabilities, Linux
=> http://tuxgraphics.org/electronics/200901/avr-gcc-linux.shtml#0lfindex0
gcc编译安装中的链接错误
=> http://qingyan1971.spaces.live.com/blog/cns!90DC91975FC440F6!502.entry

1)binutils-2.20.1

--Download: http://ftp.gnu.org/gnu/binutils/

执行以下命令:
tar jxvf binutils-2.20.1.tar.bz2
cd binutils-2.20.1
mkdir obj-avr
cd obj-avr
CC=gcc
export CC
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-install-libbfd

make

make install

cd ../..

2)gcc-core-4.4.3、gcc-g++-4.4.3

---------------------- 注 意 ----------------------
安装avr-gcc前,先检查是否已经安装了GMP 4.1以上和MPFR 2.3.0以上。
GMP 4.1+
=>CentOS 5.4的安装光盘可以找到GMP 4.1的rpm包,直接安装就可以了。
=>源码地址:http://ftp.gnu.org/gnu/gmp/

MPFR 2.3.0+
=>源码地址:http://www.mpfr.org/=>由于没有rpm包,只能通过源码编译安装。
=>安装完毕,要添加路径到/etc/ld.so.conf文件中。安装完毕后会有提示的。
------------------------------------------------------

--Download: http://ftp.gnu.org/gnu/gcc/gcc-4.4.3/要下载gcc-core-4.4.3和gcc-g++-4.4.3,或者只下载gcc-4.4.3就可以了

执行以下命令:
tar jxvf gcc-core-4.4.3.tar.bz2
tar jxvf gcc-g++-4.4.3.tar.bz2
cd gcc-4.4.3
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-languages=c,c++ --disable-libssp --with-mpfr=/usr/local/lib/mpfr

make

make install

cd ../..

3)avr-libc-1.6.4

--Download: http://savannah.nongnu.org/projects/avr-libc/

tar jxvf avr-libc-1.6.4.tar.bz2
cd avr-libc-1.6.4
PREFIX=/usr/local/avr
export PREFIX
CC=avr-gcc
export CC
PATH=/usr/local/avr/bin:${PATH}
export PATH
./configure --build=`./config.guess` --host=avr --prefix=/usr/local/avr

make

make install

cd ..

--------------------------------------------------------------------

然后,安装FTDI USB驱动

--参考:http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267186646/3#3

After you install the Arduino environment and plug in the board, make sure you can see the /dev/ttyUSBx device.
Code:

安装完Arduino开发环境和把板子插到电脑USB口上,看是否有/dev/ttyUSBx设备。可以执行以下命令查看:
ls -la /dev/ttyU*

如果没有该设备,则用root用户执行以下命令:
modprobe ftdi_sio

别忘了设置该/dev/ttyUSBx的访问权限。

由于不明原因,来自异世界的Ghost游荡在我们的世界,而且人类看不到它们!然而强大的Google服务器搜索出这不明来客,于是为了驱除Ghost,净化人类的世界,Google发明Android。来吧,拿起你的Android手机,装上SpecTrek就可成为战士,协助拯救世界。

以上为Android上著名游戏SpecTrek的故事背景。该游戏利用手机的摄像头、GPS、指南针、重力感应,结合Google Map、Internet,成为能够与现实交互的虚拟游戏。玩法很简单,启动游戏,选择游戏的时间长度(15分钟、45分钟或2小时),然后游戏根据所选游戏时间,以玩家当时所在地点为圆心,圈取一定范围作为游戏区域,并在该区域放置一定数量的Ghost。进入游戏,玩家只要在所选时间内,捕捉游戏区域内的Ghost,就算是完成任务。另外,游戏区域内还有隐藏物品,不过不会轻易捡到。游戏操作也很简单,玩的时候,手机平放就可以看到地图和指南针,举起手机就可以捕捉身边的Ghost。

该游戏的奇妙之处就是把虚拟游戏和现实结合,达到良好的操作体验。相信玩过Wii的,都可以想像到那乐趣。简单来说,是个随时可以玩的寻宝游戏。而且经验值像RPG一样可以累积,有等级和能力成长。这很适合替代无聊的饭后散步。

玩这游戏时,我想起了日本动画《电脑线圈》。此时我的G1就成了动画中眼镜,透过那特殊的眼镜,可以看到建立在现实世界中的虚拟世界。但此游戏的互动性肯定没那眼镜强。提起现实世界与虚拟世界的交互,就不得不提在MIT工作的一个印度人,他的想法是结合投影仪、摄像头、3G网络等,改变我们操作电脑的方式(扯远了,改天再写下那人的演讲)。It's amazing!

PS.
1)回顾一下电子游戏的发展,就会发现人们一直在努力提高电子游戏的操作性。以Nintendo的游戏主机发展为例,红白机上的光枪和扫描条形码的游戏,GameBoy上拍摄游戏者头像成为主角头像的“口袋妖怪“(卡带上有摄像头),GBA上能够识别白天和黑夜的“黄金太阳“,NDSL及其后继机型配备麦克风、触摸屏来提高操作性,Wii则配备拥有方位及重力感应的无线手柄……

2)曾经想过改造输入设备来提高电子游戏的乐趣:
A)高中时想过利用“跳舞毯“和键盘玩电脑版的“生化危机“。跳舞毯代替方向键,其它键用键盘操作,其中空格键设为开枪键。只是当时没钱买“跳舞毯“,想自己造一个,却发现买材料也需要成本。即使还想过用赛车游戏的“方向盘“来代替方向键,但也是钱的问题,最后都没实现。

B)大学时去玩“太鼓达人“,觉得很High,于是想自己弄个“鼓“。最后的实现是5块钱买个破手柄,把它的四个方向键分别外接上四个大按钮,并把这四个按钮固定在桌上。启动个跳舞游戏后,拿起两个小的塑料可乐瓶(当作鼓棍)就可以敲了。玩起来还是有一点感觉的,只是太山寨了。还有类似的,是玩“吉他英雄“(好像是这游戏)时,把键盘放地上当作脚踏(就因为空格键够大,好踩),手拿手柄。

由于FireFox实在是太慢了,于是想装个Chrome(官方版叫Chrome,开源社区版叫Chromium)。安装RPM包时提示要安装lsb 3.2以上,而CentOS的软件包只有redhat-lsb-3.1,无奈之下只能Google一下解决办法。最后找到别人编译好的Chromium二进制包,下载解压后,可以运行。此二进制版的缺点有两个:一是只能放在固定的文件路径下运行,二是不能输入中文(就是输入法不能用,原因不明)。

找到的讨论帖:
https://www.centos.org/modules/newbb/viewtopic.php?topic_id=23746

该版本的Chromium下载地址:
http://www.cs.bham.ac.uk/~cxs548/chrome.tar.gz

终于下定决心卖个Arduino开发板了。于是前天晚上去“淘宝“逛了一下,以150RMB买了个Mega,加上“面包板“(8RMB)和70条连接线(8RMB),还有两个热敏电阻(0.5RMB/个),一共167RMB。今天东西都到手了!

回宿舍后,马上下个最新版的IDE(版本号0018)。读取出那个最基本的LED闪烁控制程序,编译后上传到开发板,结果正常!由于Mega板载一个可控制的LED,所以不用额外插个LED测试。而且已经有Bootloader,程序上传后即可运行。

Arduino Mega是目前最强大的Arduino开发板了。其芯片采用ATmega 1280-16au,CPU频率为16MHz,8KB SRAM,128KB闪存(其中4KB用于Bootloader),4KB EEPROM,还有54pin I/O接口……详细参数如下:

Microcontroller ATmega1280
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 54 (of which 14 provide PWM output)
Analog Input Pins 16
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA
Flash Memory 128 KB of which 4 KB used by bootloader
SRAM 8 KB
EEPROM 4 KB
Clock Speed 16 MHz

这么好的东西,用来做个什么好呢?确实是个问题。

查了日历才知今天已经是2月16日了。农历新年的假期迷迷糊糊地渡过一半了。

过年前,突如其来的寒流弄得我不知所措。买了的新衣服(秋装)不能穿,Adidas的鞋还没买,情人节的礼物送不出手,Linux上的蓝牙驱动未安装成功,Android上不知道做个什么软件,《Thinking in Java》还没看…虽然习惯了做假期计划,但还没习惯实行假期计划。每天呆在被窝里发呆,任随时间飘过。

去年搞LAMP时,想过一个问题:关于数据库中数据ID选择UUID(或者类似UUID的GUID等),还是自增型(整数类型)?其实搞毕业设计时就想过了,但是那时受实习公司的影响,采用了UUID而放弃自增型。后来发现其实采用自增型ID也有其好处。

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。其主要由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列和全局唯一的IEEE机器识别号(如果有网卡,从网卡获得其MAC码,没有网卡以其他方式获得)。UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。(摘自本人毕业设计,其它参考:维基百科《UUID做主键,好还是不好?这是个问题。》

自增型ID(Autoincrement ID),从字面可以理解,自动增加的整数。

两者比较,UUID的优点是方便数据迁移、数据库集群等,缺点是占的空间比自增型ID大很多,查询效率可能比较低。自增型ID的优点是查询快、方便排序,缺点明显是不能保证数据库间ID的唯一性。

空间的问题,正如我同事经常说的,现在硬盘不值钱,存储空间不用考虑。相信银行的系统也不会随便仅仅挂个500GB的硬盘上去。

性能的问题,网上有人说拿200万条数据做测试对比,发现UUID的查询效率落后于自增型ID一个数量级。虽然随着CPU的发展,计算机的性能不能提升,但是对于大型数据库系统来说,效率很重要!没做过对比,我也不好说。

唯一性的问题,如果用自增型ID,做数据迁移或数据库集群时,就会带来灾难性的问题!有人说可以通过修改ID来解决,但数据关联都用到ID,ID一修改,关联就没了。如果约定自增型ID在不同数据库中的范围不同,是可以在一定程度上解决问题的,但数据一旦超出预计范围,那还是没解决问题。UUID就灵活多了,但网上有人说居然发现有UUID重复的情况,难以置信!

感觉对于我们开发的中小系统来说,还是UUID比较适合,毕竟数据量还不算庞大。

昨天看到消息说,Oracle终于通过欧盟的审查,同意其收购SUN。至此,2009年最大最受关注的并购落下帷幕,SUN也结束了27年的创业历程。

Java之父也在其Bolg上发悼文:
So long, old friend...
http://blogs.sun.com/jag/entry/so_long_old_friend

[caption id="" align="alignnone" width="294" caption="So long, old friend..."]So long, old friend...[/caption]

除了Java的未来,还有一个让人担心的问题是,MySQL的前途。

PS. 翻查了资料,当年(大概是2004吧),SUN推出过Java桌面系统,据说系统需要20分钟以上(不是普通人能接受 囧!)。该系统就是Linux上“铺”个Java虚拟机,这想法被Google用来成就了Android。

今晚有个无知少女(不排除是人妖)在群里嚷着要谁给她个Ajax实现长连接的例子。对那女的没什么兴趣,但是她提的问题引起我的注意。

网上找到比较经典的文章:
Comet:基于 HTTP 长连接的“服务器推”技术
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

问了一下胖子,他说HTTP长连接的话,常用的是内嵌Flash作为客户端,而Ajax只能实现长轮询。

终于决心装个64位的Linux了。

首先由于光驱坏了(狂呼BenQ是垃圾!),所以装系统也要走点弯路——直接通过硬盘上的ISO文件来安装。由于Linux不认NTFS,而Fat32又不支持大于4GB的文件,所以只好再切个Ext3分区来放这个ISO文件。然后利用强大的Grub来启动安装程序。具体是:

1)从硬盘切割个Ext3分区出来,大约5GB就可以了。例如是第一个硬盘的扩展分区的第二个分区,即hd0,6。

2)把安装系统的ISO文件复制到刚切出来的分区下。

3)再把ISO文件里的isolinux文件夹下的initrd.img和vmlinuz文件解压出来,也放到刚切出来的分区下。

4)找个Grub装一下,或者什么“深山红叶”启动盘也有。

5)重启电脑,进入Grub,并按e进入编辑模式,输入以下命令,然后按b启动:(注意空格,这三行都有)
grub>root (hd0,6)
grub>kernel /vmlinuz
grub>initrd /initrd.img

6)然后熟悉的安装界面便出来了。

非常麻烦的方法,但是装系统时,速度飞快。装完系统后最郁闷的是要装一大堆软件。下次还是选择升级系统比较省事。

今天午休上网,偶然发现Richard Stallman在上星期六来珠海演讲的新闻。顿时惊呆了,反应过来时一股无奈的气流贯穿全身。这么难得的机会居然跟我擦身而过,成为本年度最大遗憾!

认识他,是看《OS Revolution(操作系统革命)》的其中一个收获。那时才知道,早在80年代,“开源运动”就由他发起。只是对freedom的不断追求,为了帮助人们更自由地使用自己的电脑,于是发起了GNU计划,提出GPL v1和v2,为电脑软件的发展作出巨大的贡献,很让我感动。

很想成为这样的人!即使路途遥远,但他的吸引力实在太大了。所以,今天觉得极其遗憾。