Archive

Archive for the ‘Computer Science’ Category

解决在Mac OSX下无法mount AFP的share的问题

May 30th, 2010 Wei No comments

最近突然发现,一直以来用的挺好的AFP服务,突然不能访问了。具体的现象如下:

  1. 使用Registered User打开通过Bonjour服务显示在Finder侧边栏的AFP服务,点击以后,一直显示Connecting,没有反应
  2. 使用Guest打开通过Bonjour服务显示在Finder侧边栏的AFP服务,点击以后,能够列出部分share的列表
  3. 通过Finder的Connect to Server,可以连接任何指定的AFP share
  4. 通过Finder的Connect to Server,只指定服务器名称,而不包含AFP share的名字(如:afp://192.168.1.10/),能够列出全部的share,但选择其中一个share并连接,一直显示Connecting,没有反应

一直以为是NAS的AFP服务出了问题,但无论是重新启动AFP服务,还是重新启动Bonjour服务,甚至是重新启动NAS服务器,都无法解决。

之后想到了是OSX的问题,但重新启动OSX后,也没有任何好转。通过日志也没有找到任何相关的信息。

经过一段时间的搜索,终于发现了该问题的原因:是OSX在share的最顶层目录中写入了OSX特有的一些隐藏文件和文件夹。通过Web File Manager或者SSH删除这些文件和文件夹后,问题解决。这些文件包括:

  • .AppleDB
  • .AppleDesktop
  • .AppleDouble
  • .TemporaryItems
  • :2eTemporaryItems
  • Network Trash Folder
  • Temporary Items
  • ._.TemporaryItems
  • .DS_Store
  • :2eDS_Store

Migrate Single Disk to RAID5 in QNAP 409 Pro

April 11th, 2010 Wei 3 comments

由于NAS上的硬盘即将告急,又赶上近期硬盘稍有降价。就趁机添置了2块1TB的硬盘,准备添加到NAS上使用。目前的情况是,当硬盘容量超过1TB时,一个好的灾难恢复机制就显得非常重要了。3块硬盘正好组建RAID5,可以容许1块硬盘损坏,但总容量则变为:最小单块容量×(硬盘数-1)。

QNAP 409 Pro号称有Online RAID Migration功能,我的理解就是,所谓Online,就是所有的服务都不需要停止,也不会在此过程中出现中断。然而,QNAP的RAID迁移过程,还是让我受了不少罪的。

Day 1:直接在Web管理界面上选择Single Disk,然后迁移到RAID5。迁移过程开始后,进度基本按照每半小时1%的速度进行着。在将近48小时的时候,未知原因,迁移过程中断。没有错误提示,没有日志,没有数据丢失。

Day 3:经过搜索论坛后,发现有人与我有类似的经历,解决的的方法是关掉所有的后台服务。依此进行,关掉全部AFP、SAMBA、MySQL等服务。仍然是在50%的位置中断。在SSH查看过程时,发现前10%有个mke2fs的进程;从11%到50%,则有一个cp -a的进程。

Day 5:重新启动NAS,确保kill掉所有的无关进程,重新迁移。从11%起,硬盘进入Read Only模式。但在50%时,再次中断。此时却发现_httpd_进程没有了,web管理页面自然也就没有了,重启后仍然没有。

Day 7:准备采取最后的方案,备份数据,然后重新设置服务器。在备份数据的时候,突然想到其他的方案。采用其他的迂回方案。首先remove以前的Single Disk,插入新的2块硬盘。在Web页面(经过换盘重启后不知道什么原因恢复了),创建新的RAID1(镜像)。然后在线插入以前的硬盘,识别后,通过SSH,将全部数据复制到新的Volume里面。接下来重新从Web管理页面将RAID1迁移到RAID5。然而,我却发现,这个迁移过程和之前的过程如出一辙,仍然是将RAID1的一块硬盘,与新硬盘组成一个新的Volume,然后把旧的数据复制进去。再进行迁移。可这次居然再50%之后没有停下来,Web页面能够看到迁移过程,提示剩余600分钟。。在此经过大约8小时,迁移完成,数据也没有丢失。

Single Disk to RAID 5的迁移过程

这个迁移的过程,貌似有些山寨:

  1. 新增的两块硬盘,组成新的Volume(degraded RAID5),加载点为/share/mdx_tmp(迁移过程的0%到10%)
  2. 通过cp,直接复制旧数据到新的volume,在此过程中,磁盘属于Read Only模式(迁移过程的11%到50%)
  3. 将旧的磁盘格式化,合并到新的volume里面
  4. 通过RAID5的sync,最终实现RAID5

RAID1迁移到RAID5的过程与之类似,因为RAID1两块硬盘互为镜像,所以迁移的过程中,可以直接断开一块硬盘,并执行上面的过程。

从这里看出来,这个迁移过程并不能算是完全的“online”。首先,需要停止所有的网络服务(包括SAMBA,AFP等);其次,即使可以不停止这些服务,迁移过程的11%~50%也是Read Only模式的,并不能实现完整的服务。

这里的经验是:

  • 迁移之前,停止所有的服务,并且停止所有有访问硬盘的进程
  • 备份,迁移之前备份还是非常重要的
  • 大约1TB的数据,迁移的时间大约为72小时。其中创建degraded RAID5大约需要2个小时,复制数据需要48小时,剩下的大约24小时为最后的迁移和sync的过程

Linode VPS上安装pptpd VPN服务

February 12th, 2010 Wei 2 comments

从购买了Linode VPS服务之后,就一直考虑弄个VPN。今天终于实现了,该文档讲述了如何在Linode上配置基于pptpd的VPN服务,以及一些troubleshooting的问题。

前提:必须有VPS;必须有SSH。

接下来的步骤将完成pptpd的安装:

  1. 安装pptpd服务
    sudo apt-get install pptpd
  2. 修改pptpd服务的配置文件/etc/pptpd.conf(只需要修改最后的localip和remoteip部分):
    localip 192.168.10.1
    remoteip 192.168.10.100-150
    
  3. 修改/etc/ppp/chap-secrets文件
    username pptpd password *
  4. 设置pptpd的DNS服务器,修改/etc/ppp/pptpd-options文件:
    ms-dns 208.67.222.222
    ms-dns 208.67.220.220
    
  5. 设置ip4v转发,修改/etc/sysctl.conf文件,去掉如下行的注释:
    net.ipv4.ip_forward=1
  6. 使ipv4转发生效,运行:
    sysctl -p
  7. 重新启动pptpd服务,运行:
    /etc/init.d/pptpd restart
  8. 开启ipv4转发,运行如下命令:
    /sbin/iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
    /sbin/iptables -p FORWARD ACCEPT
    

需要注意的是,我的VPS不知为什么,FORWARD rule默认的action是DROP(可能是由于我之前配制了防火墙的缘故。这也令我在一段时间内,纠结于为啥VPN无法正常转发。

Categories: Computer Science Tags: , , , ,

iPhone通讯录中文条目在英文环境下的排序问题

January 30th, 2010 Wei 3 comments

由于工作的关系,另一方面是iPhone中文翻译的习惯问题,我个人更偏向在英文系统下操作iPhone。iPhone的操作系统可以完美的支持各国语言文字和风格,但是在英文环境下,通讯录的中文条目将无法按照中文的习惯排序,更无法分类在右侧的首字母分类中,如下图所示:

这些联系人被分类到#中,且“兰”、“关”、“冯”、“刘”的排序顺序也是不正确的。实际上这些问题在中文环境中确实没有问题的。在非jailbreak环境下,也无法通过修改系统文件的方法修改排序方式。

使用如下的方法,即可正确的将联系人分类,且排序也是正常的。

首先选择一个联系人,进入编辑状态。点击最下面的add field。再选中Phonetic Last Name。

输入该联系的拼音。用同样的方法添加Phonetic First Name。添加后,在联系人中会显示该联系人的拼音姓名。

回到通讯录列表,即可看到联系人正确的显示在列表中,且无论是在Contact还是Phone中,都可以正确排序和分类。连Search中也可以使用拼音排序。

Categories: Computer Science Tags: , , ,

iPhone 3GS+联通(北京)WCDMA 186 3G网络评测

December 3rd, 2009 Wei 7 comments

最近禁不住诱惑的入手了iPhone 3GS,又再次禁不住诱惑的入网了北京联通186号段的WCDMA网络。

前提

其实一直以来我都用移动的服务,但最近移动的EDGE网络慢的要死,网页都打不开,我公司的座位上信号又非常差。

另一方面,随着电话、网络使用频率的逐渐增加,发现作为大多数Class B的GPRS手机,都不能实现语音和数据的同传,即当有GPRS/EDGE数据活动的时候,语音是完全断开的,也无法接受呼叫。也就是说,当你用GPRS/EDGE打开网页的时候,任何语音电话呼叫都是收不到的。(这完全解释了我的手机信号良好的情况下,来电提醒业务发来的漏接电话的提醒信息)。这对于我这种使用推送邮件服务的人来说,简直就是灭顶之灾。如果在推送和数据传输的时候,恰巧有电话呼入,那呼叫者得到的只能是“您拨叫的用户暂时无法接通”。(如果不信,可以再手机上打开一个网页,在页面载入过程中,用另一部电话拨打手机)

更换

经过和同事(另一个先期更换186的同事)的沟通,发现联通186号段的WCDMA标准的3G网络非常不错。经过一番考察和犹豫,最终选中了186XXXXXXXX这个号码。北京联通网上选号,还免费配送。

选中号码并提交订单后的第二天早上,收到联通客服的电话确认订单,核对信息后告知72小时内送到。第三天,准时盼到了送货人员,在提交身份证复印件后,收到了一张USIM卡和用户协议。

我选择的是96元标准套餐,包括240分钟国内主叫,免费国内接听,300MB数据流量,30分钟可视电话等;另加了5元包60条短信的附加包。超过套餐内容,国内主叫0.15元/分钟;0.0003元/KB(折合0.3元/MB)。

踏上3G之路

iPhone换上3G卡后,迅速搜索到了3G信号。使用Google Map测试了一下网络速度:将地图移动到一个全新的位置,画面从网格到地图完全显示,用了不到2秒;同样测试移动EDGE的速度,则花费了30+秒(最终也没有完全打开,放弃了)。

由于首月是标准资费,1分钱/KB,不敢过于使用网络流量。第二天开始测试3G网络的数据功能。通过iPhone上的测速程序,测得下载速度为431KB/s,上传为36KB/s(本地服务器)。刚刚通过Internet Tethering用IE直接从美国网站上下载软件,速度显示为147KB/s。

一些评价

  • 联通WCDMA网络的速度让我非常满意。但在这样的速度下,网络流量显得非常不够。并且联通并没有为WCDMA提供数据可选套餐。当然,联通数据流量超过套餐时0.3元/MB的价格至少是比移动厚道多了。
  • iPhone的Internet Tethering功能默认打开了。当时移动的SIM卡之所以没有打开该功能,是因为iPhone手机上没有移动的运营商信息。
  • 通话质量非常清晰,完全没有移动网络中断续和变音的问题
  • 开启联通的呼叫等待(Call Waiting)功能后,iPhone内置的Add Call,Swap Call,Hold,Merge Call功能完全正常。
    • 电话A拨叫iPhone,iPhone接听,电话B拨叫iPhone,Hold+Answer后,切换到线路B,按Merge Call实现合并。
    • iPhone拨叫电话A,按Add Call拨叫第二个电话,按Merge Call实现合并。
  • 3G信号明显强于移动的信号,至少在我公司的座位上,联通信号满格,接听正常、清晰;而同样位置的移动信号,却很微弱,电话可以拨入,但对方经常听不到声音。
  • 联通的客服人员,不知道是不是因为有考核指标,说话快的像蹦豆一样,并且因为“系统忙”而直接把我要求查询呼叫等待功能的请求拒绝了,直接告诉我代码让我自己开通。
  • 还是联通的客服人员,我在晚上9点提交一个网上咨询,关于呼叫等待功能。2小时后,晚上11点,我收到联通客服的电话回复。这个事儿……我真的不觉得晚上11点给客户回电是明智的选择(虽然我很满意联通本次服务的反馈时间)

iPhone 3GS入手及使用评论

November 22nd, 2009 Wei 5 comments

最近一直以来很郁闷Windows Mobile的用户体验,在考虑换手机了。也一直在HTC Hero和iPhone之间徘徊。最近也比较中毒iPhone,就最终决定iPhone 3GS港版行货。

我买的是41周后生产的iPhone 3GS 16GB白色版香港行货,送到我这里的时候,还是未开封的。然而41周以后产品因为使用了新的Baseband,还无法实现完美的jailbreak(截止到2009年11月20日,如果jailbreak,每次重启都需要连接USB)。但如果不jailbreak的话,软件就只能通过iTune安装(当然也不能安装破解软件了)。

iPhone的整体用户体验非常好,电容屏(和WM需要使用指尖点击的电阻屏相比)的指触感觉也非常好。色彩效果也远比WM要强多了,毕竟WM受硬件限制,最大只能达到65K色。 AppStore上的应用非常多,除了设计系统的,绝大多数功能都能有具体的实现。

一些技巧:

  • 输入法中,临时需要标点符号,可以按住符号按钮不松手(这时键盘已经切换为符号),滑向需要输入的符号,松开后,符号已经输入进去,但键盘仍然为字母状态。
  • 输入法中,按住$、.(句号)等符号不松手,会出现与之类似的符号(比如¥和…);按住字母键也可以显示拉丁字母
  • Maps中,点击左下角的定位图标可以定位到当前位置(根据基站和GPS) ,再次点击会切换为“前方为上”的地图状态(之前是“北方位上”)。
  • 截屏:按住电源键同时按下Home键。

铃声:

iPhone不支持直接使用MP3作为铃声,但可以通过iTune制作铃声(不超过40秒)。具体方法是:首先进入iTune,将要作为铃声的MP3导入iTune;右键单击文件,选择Create AAC format;再次点击右键选择Get Info,查看文件存储的位置;找到该文件(扩展名为m4a),将扩展名修改为m4r;重新导入iPhone(原mp3文件删除即可),即可看到Library–>Ringtones里面看到刚刚导入的铃声。

目前iPhone 3GS存在的不足:

  • 短信回执:目前很多手机都已经有短信回执功能(即对方收到短信后,会发送一条delivered消息)了,这点上索尼爱立信的Symbian系统做的很好,回执会以一个图标的形式出现在“已发送短信”中;Windows Mobile很烂,只是一条单独的短信,每次发短信都要单独删除一次;而iPhone压根就没有(当然也省得删除了)。
  • 彩信会把每个Page展开为一条独立的短信,这样在同一个thread中如果有多条彩信,那么他们会被显示成类似于1篇文章(即第二条彩信会紧接着第一条彩信内容显示。
  • 多任务:除了iPod、Phone、Voice Memo、Internet tethering以外,其他应用程序都不支持多任务,按Home键就直接退出了。比如你在通过Safari或者其他应用下载一个文件,当有短信到来,如果选择回复短信,则下载会中断。部分软件可以通过Notification实现类似后台运行的效果,但像Skype这类的软件无法支持Notification的,则没有什么实际意义了。
  • Voice Memo不支持通话录音,App Store里面也没有类似软件可以实现。
  • 文件系统过于封闭:你不能修改和查看任何系统文件,应用程序之间的文件也不能共享。例如:电子邮件中非图片和音视频的内容,无法保存(如果邮件附件是个Word文档,则无法做到编辑后再回复给发件人);通过其他软件(例如WoTV)下载的视频,只能在该软件中使用,不能放到Video文件夹中;任何文件(包括铃声等),都只能通过iTune传送;除了视频和Photo Roll文件夹中的内容,其他内容均不可删除;
  • Bluetooth仅支持蓝牙耳机,不支持文件传输(同样是因为文件系统封闭)。
  • Internet Tethering:3GS的广告和spec中提到了网络共享功能,而我的中国移动SIM卡插进去后却完全没有这个选项。再看iPhone的spec,旁边有行小字:“Tethering is not currently offered in the U.S. and some other countries. See your carrier for availability.”(中国联通的3G业务却可以)
  • Merge Call:这也是iPhone广告中提到的功能。但经过我的实践,中国移动的卡只能在两个call之间切换,却不能将两个call merge。(中国联通3G号码可以实现两个call之间的切换,并且可以实现merge call)
  • Voice Message:这个是AT&T提供的可视化语音信箱(Virtual Voice Message)功能,在国内完全无法使用,却也没有设置语音信箱的问题,导致改功能彻底无法使用。
  • 比较耗电:开启邮件推送以后,正常使用手机(电话、短信等),24小时开机,只能坚持大约1~1.5天。
Categories: Computer Science Tags: , , ,

Outlook 2007提示Could not install the custom actions的解决方法

November 5th, 2009 Wei No comments

近来我的Outlook 2007突然出了一些问题,无论是回复还是转发,甚至是新建邮件,都会出现Could not install the custom actions错误(如图)。而在出现此问题前,Outlook会出现假死情况。

Outlook 2007 Could not install the custom actions

经过搜索和研究,发现问题出现Forms中。解决方法也很简单:删除如下文件夹:

%SystemDrive%\Users\%UserName%\AppData\Local\Microsoft\FORMS

重新启动Outlook即可。

Smugmug: 专业的摄影照片分享服务

November 1st, 2009 Wei No comments

Yahoo!旗下的Flickr相比大家都已经比较了解了,这次介绍的是Smugmug

SmugMug Home Page

Smugmug是个专业的摄影照片分享服务,具有非常友好和强大的用户界面。具有非常强大的功能:

  • 可以存放无限量的照片(JPEG、GIF和PNG格式),无存取流量限制。单张照片容量限制为: Standard和Power不大于12MB的照片,Pro不大于24MB,所有照片都不能大于48Megapixel(4800万像素)。所以对于目前的主流相机来说,可以直接存储原始JPEG照片了。
  • 购买SmugVault服务后,甚至可以上传任何格式的文件(包括TIF、RAW、PSD等)。
  • 没有广告
  • 照片存储在Amazon S3服务,Amazon提供存储空间和流量
  • 支持密码保护的相册(Gallery)和帐户
  • 支持照片不显示在公共列表中(Unlisted)和私人站点(Private Site)
  • 支持显示EXIF信息
  • 支持原始尺寸的照片
    SmugMug Photo Gallery
  • 支持相册(Gallery)和单独照片的共享(通过链接、邮件、共享组)、外链、嵌入式相册
    smugmug-share
  • 支持多种上传方式(Web、Java、第三方的上传/下载工具):这里有详细的上传和下载的工具列表。
    SmugMug Java Uploader
  • 支持多种方式取回照片(也支持邮寄DVD)
  • http://*.smugmug.com/的二级域名(Power和Pro用户支持域名绑定)
  • 支持嵌入picnik.com的简单编辑功能
  • 支持基于Flash的全屏SlideShow
    Smugmug Fullscreen SlideShow
  • 支持多种主题,Power和Pro帐户还支持自定义CSS功能
  • 支持FaceBook等Social功能
  • 支持购买照片打印服务
  • 支持按照物理方位标识照片
  • 支持照片时间线

Smugmug实际上使用了Amazon S3来存储照片的数据,S3服务的费用和质量总体都是非常不错的,在国外,S3经常被用来作为备份空间。

Smugmug最大的缺点应该就是费用了。它不提供免费帐户,试用账户可以使用14天,之后必须付费才能继续使用。费用也不算太低,Standard每年39.95美元,Power用户每年59.95美元,Pro用户每年149.95美元。

如果你对Smugmug感兴趣的话,不妨去注册一个试用帐户体验一下。如果想成为正式用户,Smugmug提供一个推荐计划,如果有用户推荐,可以在付款时减掉5美元。例如,如果你在注册时候,填写我的Coupon代码(tZl1azJPB9jzA),即可获得5美元的优惠。所以在你注册付款时,请记得填写我的Coupon代码tZl1azJPB9jzA

目前来说,Smugmug有个bug,因为Comment增加了Facebook Connection功能,所以如果你的网络因为一些问题导致无法访问Facebook,则会出现Comment画面无法打开的情况,导致匿名用户无法发表评论(注册用户不会有此影响)。

tZl1azJPB9jzA。
Categories: Computer Science Tags: , ,

QNAP TS-409 Pro添加中文UTF8 locale

October 24th, 2009 Wei 15 comments

QNAP TS-409 Pro NAS中除了C和POSIX以外,不包含utf8的locale,PHP中也不包含iconv。即使是最新版本的3.0.1 Build 0708T也是如此。最直接的结果就是MLDonkey等软件的下载文件名出现乱码或者“_”符号。但QNAP却提供了手工安装locale的方法。但最新的3.0.1版本中,却没有locale和localedef文件,导致按照官方安装locale的方法,无法操作。经过论坛上的各种讨论,可以采用如下的方法来实现。

首先通过SSH登录NAS,找到locale和localedef命令,并创建对应的符号链接:

ll /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/locale*
ln –s /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/locale /usr/sbin/locale
ln –s /mnt/HDA_ROOT/rootfs_2_3_6/usr/bin/localedef /usr/sbin/localedef
ll /usr/sbin/locale*

接下来下载Posix-locale文件(下载地址:http://wiki.qnap.com/w/images/7/77/Posix-locales.rar),解压后,上传到任意目录,并将LOCALES重命名为locales。为了节省系统盘空间,推荐在/share/HDA_DATA(或/share/MD0_DATA)中创建一个目录。

mkdir /share/HDA_DATA/i18n
ln –s /share/HDA_DATA/i18n /usr/share/i18n
cd /usr/share/i18n
wget http://wiki.qnap.com/w/images/7/77/Posix-locales.rar
unrar Posix-locales.rar
mv LOCALES locales

创建/usr/lib/locale目录,该目录用于存储locale-archive文件(也可以使用符号链接)

剩下的步骤就可以创建新的locale了

localedef –i zh_CN –f UTF-8 zh_CN.utf8

如果需要其他的locale,只需要将zh_CN、UTF-8更换为其他的locale即可,具体的参数,可以查看/usr/share/i18n/locales和/usr/share/i18n/charmaps中的文件列表,最后的zh_CN.utf8可以自己指定。

检查新的locale

locale -a

此时即可生成新的zh_CN.utf8的locale,剩下的工作可以为locale-archive创一个符号链接,以便节省/分区的空间。

mv /usr/lib/locale/locale-archive /share/HDA_DATA/locale-archive
ln –s /share/HDA_DATA/locale-archive /usr/lib/locale/locale-archive

特别说明

  1. QNAP NAS会在每次升级之后,重新在硬盘中写入操作系统,所以此过程需要在每次升级版本的时候操作一次。
  2. 为了避免在UTF8编码无效时,某些软件(如MLDonkey)出现乱码的问题,在操作/升级前,请先关闭所有的QPKG。
  3. HDA_DATA为不使用RAID配置的路径,如果启用RAID,则将更换为MD0_DATA。

关于MLDonkey

MLDonkey的启动脚本位于/share/HDA_DATA/.qpkg/MLDonkey/mldonkey.sh。该脚本通过/usr/bin/locale取得当前环境的LANG环境变量。我图省事儿,直接将此修改为:

export LANG=zh_CN.utf8
Categories: Computer Science Tags: , , , , , ,

解决nginx和php-fastcgi上传大文件的问题

October 3rd, 2009 Wei No comments

近来需要在blog中上传一些比较大的照片,却发现无论是Flash Uploader还是Web Uploader均无法上传。经过一番试验,发现这种情况仅发生在上传较大图片的时候,而对于几百KB的图片却不出现问题。

我的Server使用了nginx和php-fastcgi,经过检查php的配置文件,发现upload_max_filesize、post_max_size都不应该会影响上传。从phpinfo()来看,这些配置也都正确读入了。经过查看/var/log/nginx/error.log,发现其最下面几行出现日志:

2009/10/03 22:06:23 [error] 6029#0: *20 client intended to send too large body: 1345385 bytes, client: x.x.x.x, server: weigblog.com, request: "POST /wp-admin/async-upload.php HTTP/1.1", host: "www.weigblog.com"

既然log是nginx报出来的,那问题自然出现在nginx上。经过查询nginx的wiki,解决方案如下:

在/etc/nginx/nginx.conf中添加如下配置:

http {
        ...
        client_max_body_size 100m;
        ...
}

之后运行/etc/init.d/nginx reload重新载入配置文件,上传搞定。