今天整整一个下午都沉浸在音乐的潘多拉魔盒里,不得不承认 it’s coooooooool!
 
这是MGP(音乐基因计划)所提供的在线音乐服务,这个计划所使用的技术的确比较先进,类似人类基因计划,要不怎么叫作音乐基因计划?这个计划在2000年1月6号由一群音乐家和爱好音乐的科学家共同建立。我们都知道物种比较接近的基因大部分也都相同,据说人类的基因和黑猩猩的基因99%相同。音乐也一样,这些科学家把音乐分解到最小的单位,这些单位就好比基因。根据这些歌曲的基因,就可以找到其他类似的歌曲。你觉得一首歌好听,他们就会替你找到另一首跟这个类似,也会让你觉得好听的歌。但不是找到的每首歌都是你喜欢的,黑猩猩和人的基因差别虽然1%,不也差了十万八千里么?所以你需要对这个系统进行训练,播放了一首歌,你可以选择喜欢还是不喜欢,慢慢的大部分都是你喜欢的了。嗯,大致就是这个意思。
 
在网站上我们可以无限的听歌,虽然是在线听,但几乎感觉不出来,播放速度直逼本地。据说上面已经有了超过30万的歌曲,不过我好像还没找到中文歌曲,好不容易找到了也是唱的英文,比如
CoCo Lee。
 
播放歌曲是随机播放的,操作除了能暂停和播放下一首之外,不能再做什么了。你觉得刚听的那首歌不错,也不能返回重新听,只能一首接一首的由系统给你自动选择。觉得不好听,就选择“I
don’t like it”,然后就播放下一首了,觉得好听就老老实实地听完吧。就跟 iPod Shuffle
一样,也很有趣的,你永远都不知道下一首会是什么歌。
 
有些歌曲由于版权的原因,是不能播放的。我觉得《Shrek》里面的《I’m a
Believer》挺好听,结果就被告知由于版权问题不能播放,但是给我选择了另外一首类似的歌曲。
 
在网站上可以选择是否注册,不注册也可以听。但注册后你可以无限的听,还能维护自己的最多100个电台,还可以分享其他人的电台上面看到是否付费,不掏钱的话会有广告,不过我没发现广告,呵呵。
不过没关系,听歌嘛,爱出广告出广告去,只要别来弹出窗口 ^_^。
 
你永远都不知道潘多拉魔盒里会出现什么!起码我不用总是重复的听下载的那些歌曲了。

好多人都有这样的困惑,系统越用越慢,打开任务管理器一看发现一大堆的进程,有的占用资源还挺高,内存也被耗掉不少。有的看上去那么面生,担心会不会是木马程序或病毒。不知道是不是正常的进程,不知道该不该杀掉,有的还是系统的正常进程,只不过所提供的服务我们平时用不着,每次开机都自动运行白白耗费资源。

ProcessLibrary (http://www.processlibrary.com/) 就是这样一个进程库的大全,在这里能搜索到绝大部分的进程信息。比如我看到这么一个进程 wdfmgr.exe,不知道是个什么进程,每次都能看见,好像刚装完系统是没有的。一搜索wdfmgr.exe才知道,wdfmgr.exe 是 Microsoft Windows media player 10 及其以上版本的一部分。刚装完XP,系统里面是 Windows media player 9,难怪没有。下面还有一些其他信息:比如系统危害程度是0,不是间谍软件、广告软件、病毒或木马程序。

嗯,又看见一个 gmt.exe,一看搜索结果原来是个间谍软件,赶快删掉吧。

在 ProcessLibrary 首页上还能看到危害最高的5个进程:

1. lsas.exe
Security Risk
2. msbb.exe
Security Risk
3. scvhost.exe
Security Risk
4. gmt.exe
Security Risk
5. rundll.exe
Security Risk

你还可以把这些添加你的网站上提醒大家。不过我们平时用电脑还是以预防为主,什么杀毒软件、防火墙都尽早装上。要是厌烦了这些,就用 Linux吧,个人推荐 Ubuntu,还能免费获得正版光盘,平时上网、聊天、写文档、写程序、看电影、听音乐、玩些休闲游戏绰绰有余了,还不用担心病毒、木马的,也不会越用越慢是不是就去重装系统。毕竟电脑是为我们服务的,而不是要我们去伺候它的,你说呢?

08. January 2006 · Comments Off on links for 2006-01-07 · Categories: 美味收藏

嘿,从哈斯日志那里看到这么一个非官方的QQ——迷你QQ,才70多K。
采用命令行方式工作,还有酷酷的声音,基本上和朋友聊天是没什么问题了。

最重要的是免费的,当然你也可以选择注册。

这里是官方网站: http://www.prettysky.com/miniqq/

发信人: thinelephant (光吃不长), 信区: VIM
标  题: VIM 测试题(给用 VIM 做数据处理的初学者)
发信站: 水木社区 (Thu Oct 27 20:21:50 2005), 站内

以前写的,主要是针对数据处理的,虽然写得不好,不过也发到版上留个备份啦。:-)

VIM 测试题(给用 VIM 做数据处理的初学者)

请回答以下操作所需的步骤或命令:

01. (4) 光标移到最后一行
02. (4) 设置跳格(Tab)宽度为 4
03. (4) 忽略大小写查找字符串 elephant(本题不得使用 GUI)
04. (4) 将所有 elephant 替换为 pig(本题不得使用 GUI)
05. (4) 打开 VIM 关于正则表达式的帮助文档
06. (4) 在阅读 VIM 帮助时遇到链接如何跳转?如何返回?

07. (6) 比较编辑两个内容相近的文件
08. (6) 借助外部命令 sort 将文件的行按字母顺序进行排序
09. (6) 将每一行的第一个字符与第二个字符交换
10. (6) 将当前目录中所有文件的文件名插入到当前文本中

假设文件 data.txt 内容如下:

ACDSee             000001   499.95  ACD Systems, Ltd.
Internet Explorer  000004  1999.50  Microsoft Corp.
Vi IMproved        000015     0.00  Bram Moolenaar
FlashFXP           000204   199.00  CEDsoft

请回答以下操作所需的正则表达式(可查阅帮助,反复尝试):

11. (4) 匹配每行的软件名字段
12. (4) 匹配每行的编号字段
13. (4) 匹配每行的价格字段
14. (4) 匹配每行的开发者字段

请回答以下操作所需的步骤或命令:

15. (6) 交换每行的编号和价格字段
16. (8) 借助外部命令 sort 将文件的行按软件价格进行排序
17. (8) 将连续两个或以上的空格替换为一个跳格字符
18. (6) 删除每行的开发者字段

送分题,写得越多越好:

19. (8) 请写出任何难以用 notepad 完成的并且你会的 VIM 功能。

============================================================================

参考答案

01. G
    在 Normal 模式下按 G 快速跳到最后一行,按 gg 跳到第一行,当然,也可以按
    Ctrl-Home 和 Ctrl-End。
02. :set tabstop=4
    将 Tab 设成大一点的宽度,比如 16,查看数据文件的时候比较有用,对齐清晰。
03. 方法一,先设置忽略大小写,然后查找
    :set ignorecase
    /elephant
    :set noignorecase
    方法二,在前面加入 \c 表示忽略大小写
    /\celephant
04. :%s/elephant/pig/g
    g 表示如果一行有多个 elephant 将全部替换,没有 g 表示只替换每行第一个。
    另外还有 i 标志,有 i 表示忽略大小写。i g 这两个标志非常基础!
05. :help pattern
    用 :help xxx 看一个东西帮助,提示:在 :help 后面可以尝试按 tab 补全,
    比如输入 :help search 然后按 tab(一次或多次),你就可以看到
    search-pattern 正是你想要看的。
06. Ctrl-] Ctrl-T
    帮助里面用两个 | 括起来高亮的,比如 |pattern| 都是可以跳转的链接,按
    Ctrl-](按住 Ctrl 按右中括号)跳进去,再按 Ctrl-T 跳回来。

07. 在命令行下 vim -d file1.txt file2.txt 可以用比较模式查看编辑两个文件,
    或者如果在 Windows 下面,可以先选中两个文件,然后鼠标右点菜单,选
    “Diff with Vim”。一般在比较某个文件的两个版本(即是一个是以前的,
    一个是修改后的)时很有用。
08. :%!sort
    表示将整个文件的行用外部命令 sort 过滤一遍,不过要当心 Windows 的 sort
    命令在某些条件下会产生错误的排序结果。
09. 方法一,用正则表达式匹配替换每行的前两个字符
    :%s/^\(.\)\(.\)/\2\1/
    方法二,用块选择
    Normal 模式下,先把光标移到第一行第一个字符上,按 Ctrl-V 进入块选择模式,
    移动光标到最后一行第一个字符上,这时选中的是每一行的第一列字符,按 d
    删除,然后移动光标到第一行第二个字符,按 P(注意是大写)粘贴,刚才删除的
    第一列就被粘到第二列上了。
10. :split .
    打开当前目录(. 表示当前目录,当然也可以是比如 C:\ ),然后就可以将目录
    中的文件名复制粘贴过来了。

请把 :help pattern 那一页帮助内容仔仔细细阅读 99 遍!:-)

11. 软件名字段的特征是:位于行首;由若干个单词组成,单词之间用一个空格分开。
    ^\S\+\( \S\+\)*
12. 编号字段的特征是:恰好六个数字。
    \<\d\{6}\>
13. 价格字段的特征是:若干个数字,一个点,若干个数字。
    \d\+\.\d\+
14. 开发者字段的特征跟软件名字段的特征类似,但是位于行末。
    \S\+\( \S\+\)*$

15. 同 09 题方法二,用块选择。
16. 用块选择将价格字段换到前面,然后用 :%!sort 排序,然后换回来。
17. :%s/  \+/\t/g (注意这里是两个空格)或者
    :%s/ \{2,}/\t/g
18. 用块选择,按 D(大写)删除。块选择后按 d 跟 D 的区别是:d 删除选中的块,
    D 删除选中的块以及后面一直到行末的内容。

19. 略。

07. January 2006 · Comments Off on links for 2006-01-06 · Categories: 美味收藏
解决方法如下:
在诺顿网络安全特警的防火墙选项里有个http端口,把以下这些端口添加进去就好了
443 -> MSN (ssl)
1863 -> MSN
5050 -> Yahoo
5190 -> AIM/ICQ
6667 -> IRC

05. January 2006 · Comments Off on links for 2006-01-04 · Categories: 美味收藏



哈哈,有邀请了

刚把没邀请的图片贴出来,这突然就收到邀请了,哈哈

Originally uploaded by ChaiFeng.


才5个,太少了。

给同学和同事分了

JavaScript 的 base64 编码/解码的源代码
摘自:www.aardwulf.com
作者:aardwulf systems

var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";
function encode64(input) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
function decode64(input) {
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
// remove all characters that are not A-Z, a-z, 0-9, +, /, or =
var base64test = /[^A-Za-z0-9\+\/\=]/g;
if (base64test.exec(input)) {
alert("There were invalid base64 characters in the input text.\n" +
"Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" +
"Expect errors in decoding.");
}
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
do {
enc1 = keyStr.indexOf(input.charAt(i++));
enc2 = keyStr.indexOf(input.charAt(i++));
enc3 = keyStr.indexOf(input.charAt(i++));
enc4 = keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}