• 15
  • 3月

可能是前些天尝试在Windows 7上安装IE7失败的后果吧,桌面右键“个性化”时出现“不支持此接口”错误(我用的是英文版64位Win7 pro,对应的错误是personalization – No such interface supported)。另外Office 2010打开doc文件时提示“文件损坏”无法打开。

在差点格掉重装系统前找到了这么一条命令,居然成功把这两个问题都搞定了

FOR /R C:\ %G IN (*.dll) DO "%systemroot%\system32\regsvr32.exe" /s "%G"

提示:32位、64位通杀,此命令运行完需要相当长时间,中间系统可能会失去响应一段时间,并会弹出暴多错误对话框。但运行完毕后确实解决了问题。

2011年5月3日更新:

最近又遇到这个问题了,发现已经有人编写好了脚本:

http://iefaq.info/index.php?action=artikel&cat=42&id=133&artlang=en

在“attached files:”里根据自己的系统下载对应的脚本。比如我的是64位,就下载了“ie8-rereg.32on64.zip”和“ie8-rereg.64on64.zip”。运行里面的脚本,秒杀。

文章标签:
  • 07
  • 3月

本quarter Geodetic Science 634 – Digital Mapping Systems最后一个实验:Google’s Solution of WebGIS,照着指导写了点东西。总结一下吧。

首先是用Google SketchUp建了几个简单的建筑模型,保存为kmz文件后可以直接在google earth中查看。然后熟悉了一下google的(确切地说已经是OpenGIS的标准了,不过这里还用到了一些google的专有扩展)kml文件格式,用flyto标签创建一个展示3D建筑的动画。除了这些算是单机的之外,剩下的就全部都是web实现了——又是天天在写的html+javascript。

一共写了这么几个文件:

  • Google earth API with own 3D model
  • 自己用SketchUp建了个模,上传到服务器,利用google earth api将其显示在网页中内嵌的earth frame中。

  • Google maps API with routes
  • 在google earth下生成了两个路线的kml文件,上传到服务器,利用google maps api显示两条路线。为两条路线显示增加开关,另加一开关切换使用普通google maps网页api显示或调用google earth插件3D显示。

  • Geocoding with google maps api and show in earth
  • 利用google maps api提供的geocoder对地址进行定位,结果用google earth显示。另外控制google earth,显示边界层和道路层。

  • Smooth animation with google earth api
  • 利用google earth api,打开边界层、道路层和3D建筑层,向正北方向飞行的动画效果。动画利用googleearthplugin的frameend事件产生。Google官方例子。

  • Geocoding with google map api and animation in earth
  • 上面两个功能的综合,外加控制飞行方向。另外用到了GEView的viewchangeend事件控制动画产生。

  • Load models and tour by kml
  • 在上面基础上自己研究出来的功能,用google earth api实现了最初提到的单机在google earth中显示建筑模型并动画展示的功能。建筑通过kml加载dae,动画直接加载kml动画。

另外写了一个索引文件http://www.seebit.org/glab/(英文)

文章标签:
  • 07
  • 3月

最近看惯了大分辨率的显示器,感觉这个模板好窄,才818px宽。这点上倒是和我老板感觉一样了,上次那个网页照这个宽度做的时候他也觉得窄。参考了一下当今网页的普遍宽度,加了100px上去,现在是918px宽了,相应的内容部分也由原来的550px加到了650px,在大显示器普及的今天算是跟上潮流吧。

另外顺手更新了一下google adsence的广告单元,把右侧sidebar下方的广告去掉(根本不可能有人会看到),在上方加了个链接单元,这个广告感觉还是有点用处的。

文章标签:
  • 07
  • 3月

其实是个老问题了,这个模板在其他浏览器下一直很正常,但一到Opera下就跑偏。内容区域左侧有大片空白,并把右侧导航菜单挤到底下去。

刚开始以为是标签没闭合的问题,但用W3C工具检查过发现没什么毛病,于是一直没去理它。正好今天原来那个爆慢的dreamhost空间到期,把内容搬到这个新空间。加上最近这几个月写了不少javascript和CSS,又遇上Opera 10.5的发布,于是决定研究一下。

原来跑偏那个DIV用的是float:left。从最近干活的经验上来看肯定是上面有个元素抢占了它的空间,但具体是哪个不好找。于是来个简单的:float出问题,clear来解决。把跑偏DIV的上级容器加一个“clear:both;”——Opera下终于正常了。

不得不说,在美国留学确实很充实,现在天天Fortran、MPI、HDF5、php、javascript、CSS……感觉基本上没有闲着的时候,写博客也就没那么及时了。

学习着!

文章标签:
  • 09
  • 12月

工作中有一个中文字库表,是前辈从其他地方导入的。最近使用的时候发现有些词,比如“清白”,明明只有两个字,却只能用LIKE ‘%清白%’查出,直接=’清白’找不到。

第一反应,前后可能有空格。于是在PHPMyadmin中用MySQL的trim函数过滤了一下

update 字库 set Vocabulary = trim(Vocabulary)

但返回的affected rows数居然是0

可以肯定不知道是哪个UTF8不可见字符混了进去,直接看又看不见,想个办法让它显型。于是用到了MySQL的hex函数,把字符串的hex输出来对比一下:

select hex('清白'), hex(Vocabulary), Vocabulary from 字库 where Vocabulary like '%清白%'

这下一眼就看出正常字符串前多了个hex为“EFBBBF”的字符,将这个十六进制数扔到windows自带的计算器中换成十进制为15711167,真凶确定,删之:

update 字库 set Vocabulary = REPLACE(Vocabulary, char(15711167),'')

affected rows居然有3000多,怪不得感觉老有些常用词检索不出来呢……

保险起见,再用了一次trim

update 字库 set Vocabulary = trim(Vocabulary)

又冒出3个affected rows。

工作继续。

文章标签:
  • 16
  • 11月

不得不说,Ubuntu做得越来越不错了,对中文的支持也越来越好。但我这个从Ubuntu9.10 beta一路升级过来还是遇到了一点问题——grub2 的新式开机配置文件,另外64位版下flash对视频拖动支持有问题。

先从grub2说起。Ubuntu 9.10将系统默认的启动管理器升级为了grub2,至少从7.10到9.04一直用的是grub。好不容易习惯了改menu.lst,现在突然改为grub.cfg。确实让人有些不适应。不过在总结grub2配置方法前先总结一下我看到的grub升级策略。

全新安装Ubuntu 9.10正式版时会正确地安装grub2,使用/boot/grub/grub.cfg配置;而从老系统升级时ubuntu会沿用原先的grub,继续使用menu.lst配置。但像我这样全新安装Ubuntu 9.10 beta再一路升级过来的就出了一点问题:引导用的是grub2,但系统中自带的grub工具还是grub1版的。因此为确保正确使用最新版的grub2,执行以下命令

sudo apt-get install grub2

这样系统中的工具和硬盘的引导记录都会被正确地设置为grub2。

关于grub2的设置,ubuntu中文论坛上有一些不太合适的文章,或直接修改grub.cfg,或修改/etc/grub.d/下的文件。但Ubuntu 为grub2准备了一个专门的设置文件“/etc/default/grub”,用这个文件的最大好处是当内核更新时,不会丢失原来的配置。以下是这个文件的默认值,及我对其中最常用两项的注释:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.

GRUB_DEFAULT=0 #将0改为saved,可让grub记住上次启动时选择的系统
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="5" #显示启动选择菜单的时间
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"

修改完这个文件后,使用命令

sudo update-grub

应用更新。

更新:最近发现最近Ubuntu 9.10 64位版中的flash-nofree包是会自动下载最新版64位flash的。可能是我从beta版开始安装所以有些遗留问题吧。以下内容参考而已,已经无用。

至于flash拖动问题,貌似64位版里用的是32位flash的包装版,包装器的设置有点问题,有人已经给出方案了,但考虑到我们伟大的墙,我只好再引用一遍:

来源:http://www.ubuntugeek.com/fix-for-flash-is-not-recognizing-mouse-clicks.html

方法1:
注意:此方法在每次你的系统升级后可能均需重做才可生效
修改 /usr/lib/nspluginwrapper/i386/linux/npviewer
在其中添加语句 export GDK_NATIVE_WINDOWS=1

方法2:
注意:此方法可能破坏你的系统
将如下脚本存储入文件,授权执行:

#!/bin/bash
# Script created by
# Romeo-Adrian Cioaba romeo.cioaba@spotonearth.com
# Jaša Bartelj jasa.bartelj@gmail.com

echo “Stopping any Firefox that might be running.”
sudo killall -9 firefox

echo “Removing any other flash plugin previously installed.”
sudo apt-get remove -y –purge flashplugin-nonfree gnash gnash-common mozilla-plugin-gnash swfdec-mozilla libflashsupport nspluginwrapper
sudo rm -f /usr/lib/mozilla/plugins/*flash*
sudo rm -f ~/.mozilla/plugins/*flash*
sudo rm -f /usr/lib/firefox/plugins/*flash*
sudo rm -f /usr/lib/firefox-addons/plugins/*flash*
sudo rm -rfd /usr/lib/nspluginwrapper

echo “Installing Flash Player 10.”
sudo cd /tmp
sudo wget http://labs.adobe.com/downloads/flashplayer10.html
sudo wget `cat flashplayer10.html | egrep -o “http:.*”|cut -d\” -f1|grep linux-x86_64.so.tar.gz`
ARCHIVE=`ls libflashplayer-*.linux-x86_64.so.tar.gz`
echo “Version is $ARCHIVE.”
sudo tar zxvf $ARCHIVE
sudo cp libflashplayer.so /usr/lib/mozilla/plugins/
echo “Linking the libraries so Firefox and apps built on XULRunner can find it.”
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/firefox-addons/plugins/
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/xulrunner-addons/plugins/
# now doing some cleaning up:
sudo rm -rf flashplayer10.html
sudo rm -rf libflashplayer.so
sudo rm -rf $ARCHIVE

PS:自打开始折腾毕业、出国以来,已经好久没有更新过这个博客了。初到美国,很多事得做,也一直没静下心来写点东西。难得现在心情平静一些,赶紧写点。等以后学习、生活安定下来还是要坚持更新的。

文章标签:
  • 02
  • 7月

做毕业设计时对wordpress几个缓存插件进行了性能分析。费了老大劲测得的数据仅仅扔在毕业论文里实在可惜。精简一下,与大家共享。

测试环境:virtualbox中全新安装的Ubuntu 9.04 Server,标准LAMP环境。

测试工具:httperf、top

测试方案:无缓存、WP Super Cache半开、WP Super Cache全开、cos-html-cache共四种状态。在每种状态下分别对首页和id为148的文章页面进行测试。

每次测试前在服务器端使用命令

top -bSn 1 >Xt0.txt

将各个进程的CPU使用情况记录到一个txt文件中。

为什么不使用ps:虽然查看进程信息的“标准”命令是ps,但在linux下ps输出的CPU时间仅精确到秒,而top可以精确到0.1秒。top使用参数b时使用批量模式,将系统中所有进程的情况遍历输出参数n指定的遍数后退出。

然后在客户端使用httperf对指定页面进行50次顺序访问,所有测试结果以这50次的平均值为准。对id为148的页面httperf命令如下

httperf --hog --server 192.168.1.104 --uri /wordpress/archives/148.html --num-conn 50 --timeout 60

httperf测试完成后,马上在服务器端使用top命令记录测试后各进程CPU时间。测试期间服务器没有其他负载,所以可以认为apache2、mysqld的CPU使用完全是由wordpress引发的。

数据处理部分就不说了,无非就是加减乘除。直接上性能对比图!

响应速率

响应速率

apcahe CPU占用对比

apcahe CPU占用对比

mysql CPU对比

mysql CPU对比

不得不说,wordpress在效率上确实不怎么样,随便一缓存性能就有十几倍的提升。

至于WP-Super Cache、cos-html-cache的优缺点已经有很多讨论了,在此不再重复。

但有一点要强调的是,本测试是基于对同一篇文章连续访问的情况下测得的。在这种情况下缓存是100%命中的,而事实上WP-Super Cache缓存有效时间只有十分钟,在缓存失效的情况下访问一下页面,由于要重建缓存,响应速度反而会比没有缓存慢一些。不过由于wordpress本身的速度,慢的这点应该是不明显的。

文章标签:
  • 28
  • 4月

在ubuntu 9.04上,VirtualBox虚拟机第一次启动正常,再启动虚拟机的内容就会变成半透明效果。而且会造成mplayer(smplayer)画面透明,无法显示视频。换compiz到metacity问题依旧。

参考论坛讨论,自己总结出彻底解决方法如下:

sudo vim /usr/bin/VirtualBox

在PATH=……一行前加入:

export XLIB_SKIP_ARGB_VISUALS=1

添加完保存之后正常启动VirtualBox,虚拟机画面正常。注销后再启动VirtualBox也不会再影响mplayer。

文章标签:
  • 20
  • 4月

刚才闲着无聊在wordpress后台“常规”页面改博客的名字,結果一次提交之后返回到了登录页面。而且不管用哪个用户登录只会在登录页面循环,无法进入后台。

虽然无法登录,但主页上显示的链接是“后台管理”而不是“登录”,说明登录认证还是成功的。后台无法登录,只能到数据库里看一看了。

用phpMyAdmin查看了一下wp_options表的内容,发现siteurl的内容居然为空。手动将其改回 http://www.seebit.org,刷新一下wordpress后台,可以正常使用了。

文章标签:
  • 13
  • 4月

用了一年的LunaPage空间马上就要到期了,在淘宝上买了一个新的DreamHost合租空间。花了点时间将Blog完整地转移到了新空间中。

其实步骤非常简单,大部分时间都花在了文件上传、下载上。

具体步骤如下:

1.用faisun_zip将原空间中除sitemap和各种日志外打包下载,再用faisun_unzip全部上传到新空间。

2.修改hosts文件,将www.seebit.org指向新空间IP

3.浏览器打开www.seebit.org,运行wordpress安装程序。

4.用wp-db-backup导出原数据库,新空间中用PhpMyAdmin清空wordpress自动生成的数据库内容,导入原数据库内容。

5.测试一切正常后,到域名注册商修改域名A记录。删除hosts文件中手动添加的记录。

一切都像没有发生过改变一样。

PS:为什么我的空间总是换来换去,因为淘宝上最便宜的空间合租总是做不长久……

文章标签:
所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程