分类 编程相关 下的文章

经过昨天的实践,终于搞定Ubuntu共享WiFi功能,而且不是Ad-hoc模式。从此“二奶”可以作为无线中继使用(这里指的是在Ubuntu系统下)。参考教程:
Ubuntu共享WiFi(AP)给Android/更新方法二 http://weibin.me/538

首先很重要的是,要确定无线网卡驱动是否支持master mode。如果不支持,就别想了。然后就可以按照教程安装并设置hostapd和dnsmasq。根据教程,写了个脚本,方便启动或关闭该功能。第一次写比较长的Shell脚本,所以该脚本还是不太完善,但基本可用。要注意,/etc/dnsmasq.conf还是要手动修改。脚本如下:

#!/bin/sh
# begin file: sharewifi

# Setup wireless AP, share the Internet from interface0 to interface1
# USAGE: sharewifi [ start | stop ] interface0 interface1
# EXAMPLE: sharewifi start wlan1 wlan0

help( )
{
cat << HELP
Setup wireless AP, share the Internet from interface0 to interface1
USAGE: sharewifi [ help | start | stop ] interface0 interface1
EXAMPLE: sharewifi start wlan1 wlan0
HELP
exit 0
}

start( )
{
echo Starting share wifi ......
echo Share Internet $port_in to $port_out

# Configure iptable rules
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o $port_in -j MASQUERADE
iptables -A FORWARD -s 192.168.7.0/24 -o $port_in -j ACCEPT
iptables -A FORWARD -d 192.168.7.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i $port_in -j ACCEPT

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf
echo >> $hostapd_conf interface=$port_out
echo >> $hostapd_conf driver=nl80211
echo >> $hostapd_conf ssid=AO522-Tether
echo >> $hostapd_conf channel=1
echo >> $hostapd_conf hw_mode=g
echo >> $hostapd_conf auth_algs=1
echo >> $hostapd_conf wpa=3
echo >> $hostapd_conf wpa_passphrase=1234567890
echo >> $hostapd_conf wpa_key_mgmt=WPA-PSK
echo >> $hostapd_conf wpa_pairwise=TKIP CCMP
echo >> $hostapd_conf rsn_pairwise=CCMP
chmod 755 $hostapd_conf

# Configure /etc/dnsmasq.conf
#interface=wlan0
#bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
#except-interface=lo
#dhcp-range=10.1.1.10,10.1.1.110,6h #设置dhcp地址范

killall named
killall hostapd
ifconfig $port_out 192.168.7.1
hostapd -B $hostapd_conf
/etc/init.d/dnsmasq restart

echo Sucess share wifi

exit 0
}

stop( )
{
echo Stopping share wifi ......
echo Stop share Internet $port_in to $port_out

# Configure iptable rules
iptables -F

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf

# Configure /etc/dnsmasq.conf

killall named
killall hostapd
ifconfig $port_out down
ifconfig $port_out del 192.168.7.1
ifconfig $port_out up

echo Sucess stop share wifi

exit 0
}
#port_in is the network interface which connected to Internet, and default wlan1.
port_in=wlan1

#port_out is the network interface which will be setup AP, and default wlan0.
port_out=wlan0

if [ -n "$2" ]; then
port_in=$2

if [ -n "$3" ]; then
port_out=$3
fi
fi

case "$1" in
"help" )
help ;;
"start" )
start ;;
"stop" )
stop ;;
*)
help ;;
esac

# end file: sharewifi

PS. “二奶”升级到Lubuntu 12.04 LTS,感觉更好用了~

由于现在的公司有多个老旧系统,需要从一个系统访问到另一个系统的数据。一看到这个,就想到了SOA,但是几个小系统部署个SOA来整合,值得么?重点是没搞过SOA!于是怎么简单就怎么解决,例如实现跨数据库访问,即从SQL Server访问MySQL,程序层就从SQL Server读取数据。

Google了一下,找到一篇有用的教程:SqlServer2005 链接服务器用法(http://www.jb51.net/article/18484.htm)。文中提到用sp_addlinkedserver这个存储过程来添加链接服务器(要先配置好MySQL的ODBC数据源),然后通过以下语句获取数据:

SELECT * FROM OPENQUERY (链接服务器名,'MySql查询语句');

按照这个方法配置好,并建立了视图,然后就可以进行查询了。但是有很多问题:例如SQL Server不支持MySQL的某些数据类型,导致查询结果出错,还有个致命的问题,查询速度很慢。

最后还是写了个ASP页面,直接访问MySQL数据库,返回查询结果。打印时,也是写个ASP页面来实现。这,比什么都简单。汗……

PS. 后来还发现如果是SQL Server之间的访问,可以直接用OpenRowSet函数来实现跨数据库访问。格式如下:

OPENROWSET ( 'provider_name', { 'datasource' ; 'user_id' ; 'password' | 'provider_string' }, { [ catalog.] [ schema.] object | 'query' } )

太方便了,特别是两个数据库之间复制数据,或者进行数据对比。

上个月终于入手Acer AO522-C6Ckk(以下简称AO522),看重APU C60的高性能集成显卡与低功耗,还有轻薄便携。系统选择方面,Windows 7是必须的,网银支付、玩游戏,都得用它。重点是Linux方面,Ubuntu都习惯了,当然是首选。但是Unity太不给力了,于是根据经验(在SA1F00上装过Ubuntu 11.10 + LXDE,比Unity流畅多了),选择了衍生版Lubuntu。由于Lubuntu本身还有很多不完善,所以又开始了新一轮折腾之旅…

第一,系统安装
现在的Linux分发版都很方便,可以通过光盘、U盘、硬盘、网络等方式安装,还可以做成Live CD,不安装就可以运行。对于AO522,还是建议制作启动U盘进行安装,很方便。本人手头没有U盘,只能通过硬盘安装。

不管通过哪个方式安装,都要注意:必须先进BIOS设置 Main -> Network Boot 为Enabled。否则会遭遇死机,以致无法进入安装环境,或安装后不能进入系统。

安装步骤总结如下:
1)安装Grub(或者可以直接使用带Grub的、可启动 的U盘)。

2)下载lubuntu-11.10-desktop-amd64.iso,放到该机器硬盘上某分区的根目录下(我就放在第一个分区 下,一般为Windows的C盘)。并把iso文件里casper文件夹下的vmlinuz和 initrd.lz两个文件解压,并与iso文件放在一起。

3)启动电脑,进入grub的启动界面,按c键进入命 令编辑界面,输入以下命令:

grub > set root="(hd0,1)"
grub > linux /vmlinuz boot=casper iso-scan/filename=/lubuntu-11.10-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8
grub > initrd /initrd.lz
grub > boot

4)进入lubuntu系统后,打开终端,运行以下命令:

sudo umount -l /isodevice

5)运行安装程序。由于是全中文,所以安装过程略过。

第二,显卡驱动
由于AMD自家的闭源驱动不给力,所以用默认的就可以了。就是不用再瞎折腾了。

第三,声卡设置
由于系统默认的声卡是HDMI输出,所以播音乐没声音。进入/etc,新增文件asound.conf,其文件内容如下:

defaults.ctl.card 1
defaults.pcm.card 1

记得设置文件权限,如下:

sudo chown 755 /etc/asound.conf

第四,主菜单维护
Lubuntu的不完善马上体现出来,想修改主菜单,没有对应的软件。详细参考:http://wiki.lxde.org/zh/%E4%B8%BB%E8%8F%9C%E5%8D%95 该文档提到安装LXMED软件,来修改主菜单。

第五,Flash插件
进入 http://get.adobe.com/cn/flashplayer/ 下载对应系统的.tag.gz文件,例如我的是AMD64。解压出libflashplayer.so文件,复制到 /usr/lib/chromium-browser/plugins/ 目录(用FireFox的,复制到 /usr/lib/firefox-X/plugins/ 目录)。记得设置其权限:

sudo chown 755 /usr/lib/chromium-browser/plugins/libflashplayer.so

第六,RAR插件
进入 http://www.rarlab.com/download.htm 下载对应的RAR版本,解压后,进入rar目录,然后执行:

sudo make install

第七,屏幕亮度
系统启动后总是以最大亮度显示,每次都要重新设置其亮度,很麻烦。修改/etc/rc.local文件,在文件最后,exit 0之前,加入如下代码:

echo 0 > /sys/class/backlight/acpi_video0/brightness

其中0代表最暗,这个可以根据需要设置。

第八,拼音输入法
默认没有安装输入法,输入以下命令安装:

sudo apt-get install ibus-pinyin

可以根据需要或喜好,选择fcitx、scim等。

第九,其它
参考Ubuntu的AO522帮助文档:https://help.ubuntu.com/community/AspireOne522

忘了当初是什么时候,为了在G1上运行脚本(或动态语言),发现了SL4A,记得那个时候还是叫做ASE。然后又发现了Beanshell这个运行Java语言的脚本环境,貌似挺好玩,于是在G1上都装上了,但是运行不了,弹出ClassNotFoundException。该问题一直解决不了,只好作罢。现在换上Nexus S后,前几天又找出这东西来玩,问题依然。今天找了一下,终于解决了!简单来说,就是权限问题。具体过程如下:

1)安装 SL4A 。先到该项目官方网站 http://code.google.com/p/android-scripting/ 下载当前最新版 sl4a_r4.apk ,并安装到手机或模拟器上。

2)安装Beanshell for Android。可以到SL4A官方网站下载当前最新版 beanshell_for_android_r2.apk ,安装到手机货模拟器上。或者运行SL4A,依次点击 菜单键(menu) -> View -> Interpreters -> 菜单键(menu) -> Add -> BeanShell ,就会自动下载 Beanshell 了。

3)打开 BeanShell ,点 Install 。安装完成后,就会在SL4A中看到 hello_world.bsh 脚本文件。

4)打开 SL4A ,运行  hello_world.bsh 脚本文件,就会看到报错。大概说找不到 /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar 。

解决办法1:
进入Android的Shell环境(例如:超级终端、ConnectBot等),运行以下命令:
su
dalvikvm -classpath /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar bsh.Interprefer

就可以进入BeanShell环境了。很明显,在root权限下运行,无视了一切权限问题。当然,这不是我们想要的。

解决办法2,也就是真正的解决办法:
手机上找到 /mnt/sdcard/com.googlecode.bshforandroid/extras/bsh/bsh-2.0b4-dx.jar 。打开 bsh-2.0b4-dx.jar ,解压 classes.dex 文件到 /data/dalvik-cache 下,并重命名为 mnt@sdcard@com.googlecode.bshforandroid@extras@bsh@bsh-2.0b4-dx.jar@classes.dex 。更改该文件的权限为 rw-r--r-- ,更改Owner为 1000 (即system),更改Group为 1000 (即system) 或 2000 (即shell) 或 与SL4A相同的Group。这样就可以了。测试发现最重要修改文件权限和Owner。

再三纠结后,终于在上个月中 (2011-6-12)入手了Google Nexus S(SAMSUNG i9020)。虽然是二手,且花了2400RMB,但买到了Super AMOLED版,感觉还是值了。

机子没什么挑剔了,强大的性能、几乎最全面的功能、轻薄的身段……只是机子太强大了,导致用着用着变颓废了。主流3D游戏全部可玩,不再失望与无奈,这样花在游戏上的时间更多了;内存512MB,不用考虑APP to EXT、APK的ODEX化、压缩内存以增大使用空间或挂载swap分区等等,感觉拿着它没事可干了;内置16GB闪存,但是不能分个EXT分区,想chroot个Debian也变得麻烦了;Android 2.3.4什么都集成了,又不用装其它软件了……这一切的改变,使得该机子更接近于手机加掌上娱乐,感觉没G1好玩了。

即将要失业了,得赶紧做下计划。希望能依靠Nexus S与G1,在Android上能有所收获吧。

G1用了两年后,刷上2.3.4,虽然还基本满足日常需要,但仍感不足。内存过小从来都是被骂的硬伤,加上IO效率低下,然后是CPU速度不高(相比很多新的机器),于是再升上去绝对是勉强了。看着N多机器降价,口水直流,于是想到了换新机器。

候选佳丽1号,HTC Desire Z。去年年末一看到发布就迷上这货了,而且有着另一个名字——T-Mobile G2,G1的真正继承者啊!最重要的是,带QWERTY键盘!但是,有个硬伤——非常耗电。别人的评测中,开WiFi浏览网页只有3个小时左右,开3G的话更费电!杯具了~再想想,主频连1G都没有,键盘不如G1的(只有4行,G1有5行),没有前置摄像头,没有NFC……犹豫了。

候选佳丽2号,Google Nexus S (SAMSUNG i9020)。作为与HTC Desire Z同价格等级的选择机型,也作为Google的第2个亲生儿子,具备Android 2.3.4所需的一切硬件条件。前置摄像头、NFC芯片、1G CPU、强劲的显示芯片、Super AMOLED屏幕……而且最大的好处是,对Android新版本有更好的支持,不愁升级的问题。但是必须牺牲偶一直向往的键盘,而且不能插TF (Micro SD) 卡(还好内置16GB Flash)。另外,由于Super AMOLED产能有限,SAMSUNG推出了采用Super Clear SLCD屏幕的机型i9023,此屏幕缺点是黑屏漏光,重量增加。所以想买到i9020还有一定的困难。

场外佳丽,Nikon D5100。很久前就想买个单反了,从D3000开始观望,到D3100出来还是不敢下手(其中日本东海的大地震也间接把价格推高,导致下不了手),现在被D5100迷住了。本来“五一”假期就可以入手D5100了,可是这假期挥霍了,加上预算中的第一季度奖金居然只有想象中的一半……不给力啊!!!于是购买计划又暂停了,而且不知道要拖到什么时候。总是在想,单反这么贵,也只能拍照,值么?然而去拍照时,又感触,怎么就不买个单反呢?

其实,问题的根源还是没钱。有钱的话,都可以实现了。-_-///

终于如愿入手16GB TF卡,小小的遗憾是,只买了Class 4的,没能买个Class 6或以上的(主要是价格)。

等了N久(偶也算比较理性的),终于等到16GB的TF卡降价(以前是400左右或以上),跌到200以内了。12月12日那晚,看到“卓越网”有货,而且是见过的最低价格,189!于是果断入手一个(下订单后第2天就涨了10块),只是4天后的今天才送过来,太折磨人(在卓越上第一次等这么久)。

到手后马上分区、拷贝数据。第一次用G1上的Recovery 1.7分区,太方便了。拷贝数据时,用Ghost备份、恢复,比起直接复制、粘贴快很多,尤其是小文件比较多的情况。

装上G1后,系统一切如常。由于也是Class 4的卡,所以跟原来的KingSton 8G没多大变化。最大的变化当然是容量扩大了。

本人的目的是用来多放点的歌、电影、资料等,所以从性价比来说,Class 4、16GB是最佳的选择了。原来的8G卡以50块转给同事,这样就更划算了。选SanDisk的原因嘛,主要是口碑好,据说以前SanDisk的Class 2卡,速度直赶别人的Class 6卡。

PS. 容量有了,应该可以把图形界面的Debian装上去跑跑看~~去年就想搞的了~~

PS.. 今晚把Nokia BH-214的原装耳机拿来听听,音质还是那么不给力。于是放回原来的角落,换上一直在听的MX 360。还是看谁需要的,把它送人算了。有机会换耳机的话,希望能换上Sennheiser(森海塞尔) MX 760!据说听人声、纯音乐之类,可以达到心灵救赎的效果……哈哈,太夸张了。

转眼来到12月,接近年末了。上个月本以为可以松一口气,没想到还是忙不过来。算了工作上的不提了,没意思。晚上回到宿舍,除了看看电视剧、电影,然后就是继续折腾SA1F00上的Ubuntu。

现在已经习惯了Ubuntu,由于软件比较给力,用着还不错。甚至还想把台式机的CenterOS卸了,换个Ubuntu。但是SA1F00还是不够给力。我不嫌弃其配置低(其实基本满足我的需求),只是在驱动、软件方面兼容太差。例如很多软件都不支持小尺寸、低分辨率屏幕,只能自己下载源码修改。目前只是搞了下gpaint,利用触摸屏画画就更方便了。又如挂起、休眠功能都不能唤醒,目前还在折腾pm-utils。

SA1F00上也陪好了开发环境,实现随时随地编程应该没问题了。但是CPU工作效率不高(曾用了12个小时编译Linux内核),屏幕小(装个Eclipse,要把大部分快捷按钮删除,把常用的窗口改为隐藏,尽量腾出空间来显示代码),所以也不能完全依赖它。前几天配好LAMP(本来想用Nginx代替Apache的,还是贪求方便,装了Apache),希望能推动PHP的学习,同时积极利用目前的免费空间,写一些实用的程序。

对了,买了几本操作系统相关的书。不知道有没有时间去看,反正按照习惯先收藏。

坐在回家的车上写下这个Blog文,车也快到了。想想上星期天还在加班,真是痛苦。今晚回去后,要好好休息一下。

PS. 广州亚运也随着11月的过去而闭幕了,我居然没一点关注过。

今晚终于把SA1F00上的Ubuntu 10.10的触摸屏驱动装上了。

装完Ubuntu 10.10后,触摸屏是可以使用,但是定位不准,于是寻找解决方法。

先把结果发上来吧。官方驱动地址:
http://www.penmount.com/Download/Driver/PenMount/PenMount%20Ubuntu%2010.10%20driver%20V3.5.0.tar.gz把下载的文件解压到任何地方,然后执行install.sh即可。重启系统后,即可运行该驱动,而且可以用图形界面校准,非常给力!

下面是寻找解决方法的过程。

第一个尝试。找到evtouch的资料:
https://wiki.archlinux.org/index.php/%E8%A7%A6%E6%91%B8%E5%B1%8F
_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

但是配置MinX、MinY、MaxX和MaxY的过程相当痛苦!因为该驱动自带的校准脚本也不支持SA1F00的触摸屏,而且没有校准工具可以用,所以只能手动逐个值进行尝试。太浪费青春了!后来找到另外一个资料:
http://blog.chinaunix.net/u3/110913/showart_2394865.html
文章末尾提到一个校准工具,但是照着去编译后,该程序还是有问题。就是点屏幕后,那程序接收不到点击事件。

第二个尝试。得知SA1F00的触摸屏是PenMount USB后(查询输入设备的命令:#cat /proc/bus/input/devices),尝试安装xserver-xorg-input-penmount驱动(新立得里可以找到)。但是该驱动的配置更复杂,参考资料如下:
http://www.rainmelody.net/blog/?date=20090418
最大的问题是,找不到相关的资料来弄清楚那些选项代表什么。

为了这个驱动,连续好几个晚上都只睡觉4到5个小时,严重影响第二天的工作。不过装上后,还是很有满足感的,并且马上去找个画图软件来画画!好了,现在就剩下那鸡肋般的无线网卡了。

由于拥有了SA1F00,加上手机,宿舍里就有了三台电脑了,而且都具有无线网卡。于是想组个局域网,方便三个机子之间的数据传输。

方案1,PC用无线网卡共享Internet连接。可是SA1F00上的无线网卡在Ubuntu上没有很好的驱动,以致连不上无线网络。手机的无线网卡一直开着也耗电。最重要的是,要PC开着才能组网。所以,此方案只能用于临时连接。

方案2,针对于方案1,考虑买个无线路由。众多产品中,看上了腾达w150m。该产品的特点是价格便宜,小巧并方便携带,使用USB供电,可以做无线中继(有5个不同的工作模式),基于802.11n协议,兼容b/g……缺点是只有一个RJ-45口。此方案的问题是SA1F00的无线网卡还不能工作。于是先搁置一边。

方案3,用有线代替无线。此为临时、可靠、省成本的无奈方案。就是用PC上的第二个网卡,共享Internet给SA1F00。当两台电脑中只有一台开着,就直接插上那根能连外网的网线。手机G1可以用CMNET连外网,要连电脑就用数据线连。

连好后,SA1F00上的Ubuntu 10.10就可以进行更新,同时可以用PC来看电影。

下一步的计划是搞定SA1F00的无线网卡。由于该网卡是用内置的USB线连接,所以正考虑换个USB网卡。但是要先做实验,看行不行。

PS. 连网时发现两个网卡连接,可以用交叉线,也可以用直通线。记得,以前老师教的是一定要用交叉线,大学时也实践并证明过。问了一下强哥,原来现在的网卡都可以自适应了,所以两种线都可以连。