经过昨天的实践,终于搞定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,感觉更好用了~

厦门,尤其是鼓浪屿,本来作为环中国旅游的第一站,由于约定跟前度一起去而没去。跟前度分手后,后悔当初没去,还以为没机会了。想不到一个冲动的决定,就拉着豆丁度过了梦幻般的两天(2012-04-22至2012-04-23)。缘份(Fate)、命运(Disteny)、天注定(It is written)?都解析不了这浪漫的事情。

如果说珠海是浪漫之城,那鼓浪屿就是维纳斯天堂。一个直径才一两公里的小岛,遍布各种西式风格的古旧房子,各种特色小店,无论走到哪,都有惊喜;各种特色小吃、海鲜,无论吃到哪,都有新发现;各种风格主题小旅馆,无论住到哪,都那么写意…

不是攻略的攻略

在鼓浪屿唯一的行程就是“迷路”,漫无目的地游走于大街小巷,感受她的气息,发现她的美。岛上的景点,一个都没去,取而代之的是拿着印章本,去偶遇一个个小店。到店里盖个章,看看那些小饰品,或者写个明信片(没写一封明信片,有点遗憾),比计划着去这去那的好玩多了。当然,最好不要去沙滩,以免破坏一切的美好。

交通与住宿

在厦门机场有大巴直达鼓浪屿渡头。上岛的船票是包来回的,要保管好。岛上的旅馆一般都可以网上订房,但是不要相信淘宝。比较好的旅馆都有自己的官网,可以直接联系老板。为了买到便宜机票和找到好房间,最好提前10天预订。

吃在岛上

这个还是随缘吧。网上推荐那些店,感觉只是一般般。反正看到啥喜欢的就吃啥。

收获与感受

其实这次厦门之旅,还逛了南普陀寺和厦门大学,但是都没什么看头。值得留恋的,只有鼓浪屿。对比上一次的环中国之旅,感受最深的是,一个人的旅行与两个人的旅游,差别是很大的!拖着所爱的人,在路上嬉戏,谈情,是一种幸福!

期待已久的厦门之旅结束了,下一次,要拖着豆丁去哪里呢?乌镇?丽江?还是……其实,我希望是“家”。

PS. 在微博的感言:

错过,可能是未到的相遇;失去,或者是期待的拥有;迷路,也许是憧憬的出口…文艺青年、小资青年、恋爱青年,还是大龄青年,都适合在鼓浪屿邂逅一家小店、留恋一条小巷、寻找一个小印章、发现一朵小花、偶遇一只小猫、踏过一个小沙滩、睡上一间小民宿、拖着一只小手、谈着一段小感情…最后不舍这小岛~

再PS. 感想这东西,还是要趁热打铁。断断续续地写,读起来都变味了。

由于现在的公司有多个老旧系统,需要从一个系统访问到另一个系统的数据。一看到这个,就想到了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' } )

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

“一只南美洲亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,可以在两周以后引起美国德克萨斯州的一场龙卷风。”这就是“蝴蝶效应”。(from http://baike.baidu.com/view/1180.htm

奇妙的生活就像“蝴蝶效应”那样,细小的事情,引起重大的变化。这是我看完电影《蝴蝶效应》的最大感悟。

回想起大学二年级,豆丁作为大一新生、老乡会的新成员,走进我的生活圈子。那次作为迎接新生的老乡聚会上也没来得及了解这个师妹,也是这一届唯一的师妹(其实还有一个的,只是当时没联系到),她便匆匆离席了。第二次相遇,是她们学院的迎新晚会结束后,被逼请了一顿宵夜。不是因为她在,也不会咬着牙齿,挥霍掉100块。记忆已经不太清晰,再一次见面,是送给她胡萝卜玉米猪骨汤。以褒得太多为借口,送去一碗,记得她端起透明的塑料饭盒看了看,笑得很甜美。后来聊起,她却说不知道我那时对她有意思,晕一个~再后来,还送过蕃薯糖水。然后两人的单独来往就几乎没有了,只有上课的路上碰见面,或者在老乡聚会上见个面。这里省略几万字,包括混乱且模糊的记忆、不愉快且不想回顾的往事。

直到我找到新的工作,从珠海回到顺德容桂,才再次相约,一起吃了个晚饭。那天是万圣节前夜(2011年10月31日),也算是我决心放弃 S君的一周年纪念。地点是“威尼斯扒城”,她的猪扒,我的牛仔T骨,还有很杯具的爱尔兰咖啡和满是洋葱味的鸡爪皮。饭间聊了很多,以前的、现在的一大堆。只是她满面的憔悴,与其开朗健谈的性格,极不相衬。饭后,她说带我去“I am Free”吃泡芙。虽然找不到路、饮料不好喝、鸡翅不好吃,但泡芙还是过得去。那晚,还有一个最大的遗憾,我还跟C在一起,而她单身。

尽管开始是充满这样那样的遗憾与不愉快,但终究还是走在一起,就像今晚看到微博的一句话:If two people meant to be together, they will finally find their way back. 难得的是,一起的时间里,只是轻拖着她的手,看看她可爱的脸,也会满心欢喜。我深深地感受一份纯洁的爱情。很舒服,很幸福!

昨天(2012-02-14),拉上豆丁,终于过上人生的第一个情人节!深深感慨,有个体贴、可爱的女朋友,真好!

其实也不是过得很特别,只是又去了“威尼斯扒城”,吃了个晚饭。我难得早早下班,豆丁也出乎意料地早到,异常多人的 “威尼斯”居然不用预约也有个房间里安静的好位置,然后就是羊扒很好吃,牛排也很好吃…感觉一切都那么美好!饭后,还有豆丁的“金莎”。所以,过节最重要的不是怎么过,而是跟谁一起过。

礼物算是收到很多,洗面奶、润肤水、单肩包、明治黑巧克力…但是再多的礼物,都不及女朋友好。因为这些都是她送的。

想再多写点什么,却挤不出更多的文字。幸福真是难以形容!深深的一个拥抱,甜蜜的一个吻,或者面对面泛起微红的一个笑脸,就已经觉得很幸福了。

PS.吃饭时,隔壁桌点了份情人节套餐,那香煎什么鱼,杯具地躺了一晚,仍保持完整~

还有,居然到现在仍未拍过一张像样的合照,惭愧惭愧…

记得是2011年3月25日取到这本日本杂志——《大人の科学(vol.25)》。清理杂物的时候,又看了看拍出来的那两卷胶卷,想起当时拿到那杂志的兴奋。重点是看中那个双镜单反相机模型,其次是该杂志早绝版了(2009年10月30日开售)。

制作相机的时候,错误地把快门弄成B快门(就是可以手动控制曝光时间)。导致第一卷胶卷出来的效果不好,但是网上却很多人改造B快门失败。后来弄回来,就有了第2卷胶卷,LOMO效果很不错,有几张洗出来很满意。但是本来可拍30张照片的胶卷,只有10多张可以洗出来,非常浪费。

对了,该杂志刊登的样板照很正点。不知道是胶卷的问题还是技术问题呢?

官方网站介绍:http://otonanokagaku.net/magazine/vol25/index.html 全是日文,基本看不懂。

另一个中文介绍:http://www.imagejoy.com/article.php?id=141

PS.全球最大的胶卷生产商Kodak在2012年1月19日申请破产保护了,标志着一个时代的结束。最讽刺的,数码相机也是Kodak发明的。

上个月终于入手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

电影未上映就已经十分期待了!几经等待与挣扎之后,还是拖着豆丁(2012-01-08)去电影院看了。感觉真好!不是想起曾经的“沈佳宜”,而是怀着美好的心情去欣赏这电影,回味酸甜的过去——《那些年,我们一起追的女孩》。

每个男孩的成长经历都有一个“沈佳宜”,尽管过程不一样,感觉也是相似。好久没联系的“沈佳宜”,你过得还好吗?我很好~ ^_^

PS.豆丁,跟你一起看电影真好~

今晚(2012-01-13)终于把KOHJINSHA SA1F00卖掉了。一时感慨万千,写个悼念文以表怀念之情。

2010年9月份吧,在“太平洋”的二手论坛上看上这货。小巧、旋屏、触屏、低价…具备一切迷人的特点,或者说,只是迷倒我的特点。多次沟通及砍价后,终于在2010年10月3日(好像是10月2日,反正是国庆假期)广州芳村客运站当面与机主交易成功。而故事,也从那时开始。

系统安装

由于是用的硬件都不常见,装系统是个麻烦事,特别是Ubuntu Linux(主要是驱动问题)。例如要外接显示器才能用图形界面进行安装,内置无线网卡的Linux驱动超烂,切换分辨率的功能键需要通过写脚本实现等等。最后升级到Ubuntu 11.10,还得换上LXDE桌面才能比较流畅地跑起来。折腾的过程很痛苦,但是用起来还是挺高兴的。安装过程的经验,记录到本blog,也分享到论坛: http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=298473

移动办公

只是由于SA1F00很小巧,方便携带,所以表哥结婚去广西时,带上了。然后利用HTC G1共享上网,登录公司的RTX,跟公司的人沟通,解决工作上的问题。当时有同事对这个很感兴趣。还有一次,找了个有WiFi的小店,补填当月的工作日志。

休闲娱乐

由于性能不佳,最大的娱乐也只是上上网。例如拿着去Starbucks坐一下午。对了,记得有次(2010-10-30)从珠海坐大巴去广州,路上就是用它来开通了新浪微博,并发出第一条微博。还有,环中国之旅带着它,非常方便!

蹭网与路由

第一次用它来玩aircrack-ng,并成功搞定一个WEP加密的密码。只是后来WPA/WPA2都普及了,就没成功过了。然后主要成为无线路由,在信号好的地方接收WiFi,并共享给台式机。

挂机下载

此功能用得最多,主要是比台式机省电多了。同时也是充分利用闲置的网络资源(例如深夜时分,宽带闲着)。

最后还是通过“太平洋”的“二手论坛”,转让给别人了。本来交易时还好好的,就让买家随便测。只是那买家跑着XP时合上屏幕,系统就再也进不去了。于是被买家砍了一刀,只能卖个380rmb。然后微博上发了如下感言:

@胡骊Fox:SA1F00(2010-10-03~2012-01-13)的相关记录 http://t.cn/z0gvj01 原来偶的微博是用SA1F00申请的,第一条微博也是用它发的!

@胡骊Fox: 再见了,SA1F00,偶亲爱的ex-“二奶”!曾经协助Linux/Ubuntu学习,协助蹭网学习,陪伴环中国之旅, 陪伴星巴克悠闲下午,通宵挂机下载,协助装B…[可怜]短短的一年多,经历许多许多,非常感谢!希望在新的岗位继续发热发亮~噢…偶哽咽了…止不住的伤心与汹涌的泪水…[泪]

忘了当初是什么时候,为了在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。