#
刚才用visudo编辑sudoers文件,编辑完保存的时候,碰巧PuTTY估计因为网络传输的问题出现了刷新不及时,有些文本有乱码,只看到最后一个选项有save的字样,顺手就选了最后一个选项。完了才反应过来,刚才的sudoers文件有语法错误,悲剧了,真是欲哭无泪啊。服务器是ubuntu,刚装好还没设置root密码,sudoers文件一完蛋就没法再sudo了,看来只能明天手动恢复了。
教训:
1. ubuntu安装完后必须立即设置好root密码并记住,ubuntu默认不让用root,实在不能称之为一个好的设计。
2. 随手一个按键这个linux系统就完蛋了,以后做这种操作的时候,必须慎之又慎。
打了两签招商证券,结果中了一签,概率2%。总算rp爆发了一把,纪念一下。
现在用Google Docs写博客并发布很方便,但是对于那些同时维护多个博客站点的人来说,要是写好后能同时发布到多个博客站点那就更爽了。
最近关闭visual studio 2005的模拟器后,DeviceEmulator.exe进程始终不退出,并占用大量cpu,整个系统处于假死状态,必须手工杀掉DeviceEmulator.exe进程才能恢复正常。最后实在没办法了,从Visual Studio 2008的安装盘里抠出新版的Device Emulator(在WCUARM目录下),安装后问题解决。
以前的模拟器一直使用得很好,不知道改了什么地方visual studio 2005的模拟器就不正常了。
最近老碰到要查询某个字符串在文件中第n个出现时的位置,UltraEdit的查找功能要做到这个好像比较难,看了下帮助,觉得用脚本完成再简单不过了。
UltraEdit对javascript的支持不错,写了个小脚本如下:
var str = UltraEdit.getString("input string",1);
var nTime = UltraEdit.getValue("input count",1);
UltraEdit.activeDocument.top();
var nFindTimes = 0;
for(;nFindTimes < nTime; nFindTimes++){
UltraEdit.activeDocument.findReplace.find(str);
if(!UltraEdit.activeDocument.isFound()){
UltraEdit.messageBox("there is only " + nFindTimes + " "+ str);
break;
}
}
搞定。
在windows下连接android手机需要驱动程序,在linux下却能自动识别,但是还是需要一点点设置。
以ubuntu为例,当把usb连接线连上电脑和手机时,手机会弹出一个对话框,这里要在对话框里选择“调试”模式。
ubuntu把android手机识别为网卡usb0,在操作手机前,需要设置一个ip地址:
sudo ifconfig usb0 192.168.100.1
为了让adb命令控制手机,需要设置环境变量ADBHOST:
export ADBHOST=192.168.100.2
然后输入adb shell就可以进入手机的控制台了。
每次插拔usb线的都需要进行上述设置,可把这些命令保存为一个shell文件:
#!/bin/bash
sudo ifconfig usb0 192.168.100.1
export ADBHOST=192.168.100.2
adb kill-server
adb start-server
摘要: vc 2005 sp1下isspace函数的debug版本对中文处理有问题
今天碰到一个怪问题,从别人那儿拿来的一段代码先在gcc下过了,又移植到vc下编译,结果debug时老是有assert错误。看了一下代码,错误发生在一个trim函数中。trim函数接受一个char*类型的字符串参数,去掉字符串前后的空格、制表符等空白字符。其中判断是否是空白字符用的是 isspace函数。按照一般的想法,char*字符串里的字符编码无论是GBK还是utf-8,因为都兼容ASCII,所以isspace函数都不应该发生问题。但事实是只要是字符串有中文,无论是gbk还是utf-8编码,isspace内都有assert错误。为了便于说明,把其中的代码抽像出来如下:
阅读全文
摘自 http://hi.baidu.com/ashuy/blog/item/69a25f60327d96dd8cb10d0f.html
Firefox同样支持W3C标准属性,包括childNodes、firstChild、lastChild、nextSibling、 nodeName、nodeType、nodeValue、ownerDocument、parentNode和previousSibling。不幸的是,对于微软专有的text和xml属性,Firefox并不支持,不过可以利用其他方法来模拟该属性的行为。
大家应该还记得,text属性返回了当前节点的内容,或者是当前节点及其子节点的内容。这不仅仅返回当前节点的文本,还有所有子节点的文本,因此要模拟该功能实现是十分容易的。下面这个简单的函数就能够完成该功能,该函数唯一的参数是一个节点:
function getText(oNode) {
var sText = "";
for (var i = 0; i < oNode.childNodes.length; i++) {
if (oNode.childNodes[i].hasChildNodes()) {
sText += getText(oNode.childNodes[i]);
} else {
sText += oNode.childNodes[i].nodeValue;
}
}
return sText;
}
在getText()函数中,sText变量用来保存获取的所有文本。接着对oNode的子节点使用for循环进行遍历,检查每个子节点是否包含子节点。如果有子节点,那么就将其childNode传给getText()函数,并进行同样的处理;如果没有子节点,那么将当前节点的nodeValue 加到字符串中(对文本节点而言,这只是文本字符串)。处理了所有子节点后,该函数返回变量sText。
摘要: 很多网站有多个语言版本,根据用户的区域语言来选择具体的版本。比如google appengine就是这样,但是可惜的是,它的中文页面更新速度远远落后于英文页面。比如现在我想下载google appengine sdk,英文页面上早就是1.1.9下载了,但中文版上还是1.1.0。在中文windows下,默认总是进入appengine页面的中文版,如果能修改我们的首选语言为英语的话,就总能看到最近的更新了。
阅读全文
摘要: android 1.0 代码刚开放到时候,里面并没有带gdbserver,有些强人就自己编译了gdbserver来使用。不过现在好了,android的新源码里已经包含了 gdbserver,就在prebuilt目录下。如果想在android 1.0里使用,可以到如下地址下载:http://android.git.kernel.org/?p=platform/prebuilt.git;a=tree。gdbserver的二进制文件就在android-arm/gdbserver/gdbserver,我们只需要把gdbserver这个可执行文件放到模拟器上即可。
阅读全文