« 2006年02月 | 首页 | 2006年04月 »

2006年03月31日

距离产生美丽?

  今天同事突然问我为什么我的显示器为什么那么靠近自己,都没有地方放东西了,我也发现最近眼睛有些累的。于是接纳他的建议把显示器和自己之间的距离拉大了好多,这样看起来我的屏幕还蛮好看,原来自己永远看不到自己的恶习的啊!唉,又忘记了买眼药水了,眼睛好干,什么时候能告别CRT啊,等等等等...
  要是哪位的显示器也离自己很近的话,记得推远它。

2006年03月30日

Office迁徙

昨天我们办公室从A房间搬进了B房间,有些从坑甲挪动到坑乙的感觉,但毕竟单位是想为我们营造更好的工作环境,总体来说是开心的,虽然很累,晚上我们几个兄弟和对换房间的哥哥们出去happy,他们好像消灭了38瓶啤酒。午夜打车护送上次提到的那位神仙大哥回家,他要我住他家里,我不答应,他坚持打车把我送了回来,然后又打车回去了。:-(

2006年03月26日

WEB 2.0追尾进行时之Flickr & del.icio.us

对于“追新”,读书的时候我是比较热衷的,而慢慢变老了之后很多的名词只能让我眼花缭乱,拿到flickr的帐户也有些时间了,但因为自己长得丑又不善于摄影,所以一直那么空放着,后来看到很多写blog的人都把图片放在flickr上,我也有些不解,只是在去年租用的那个虚拟空间我每天流量都会超标的时候,往往变成了只能上午访问的Blog :( 我才想起来flickr,最近写的这些logs的图片都是保存在flickr上的了,记得给我的blog搬家的时候用ftp down&upload那些以前的图片好辛苦,估计下次可以不必这样了,并且可以留下更多的空间来存储文本的信息,国内的空间相对来说都是比较有“含金量”的,谁让咱是穷银呢!看到好多的朋友都在自己的movabletypewordpress上装上flickr的插件来show自己的photos的,但我暂时还没有这个需求,我的图片都是一些screenshot罢了。如果什么时候我真的想“自暴”,我会random一些骇人的写真上来的:O.
再说del.icio.us这个公共书签,不知道什么时候Tag这个东西逐渐的火了起来,当blog it变得不那么时髦的时候,tag it显得好新颖,说辞终归是说辞,让人喜欢的更应该是它的方便。也许这种新的一实体多Tag的分类方式真的发散了人们的思维。我可没想那么多,哈哈,不过是把del.icio.us集成到我FF里的书签里。这样不管我跑到哪里,或在我的windows或slackware linux都可以使用同样的书签了,重新安装系统也没有了备份的烦恼。
现在WEB 2.0都要炒过了头,N个牛牛给了N个定义。我这个丑男觉得不过是更尊重和方便用户的思想驱动的新的开发模型,我们等着受益就是了,估计优秀的javascript程序员现在的工资应该可以长长了吧!毕竟现在RIA的解决方案中AJAX占了不小的一部分份额的。

Show一下我的Firefox插件

以前是用maxthon的,并且我至今认为maxthon应该是win32下的中文用户的最佳选择。可自己真正转到firefox上来也有一段时间了,总体感觉还算好用,但大家都知道如果想让Firefox好用的一个前提就是要装上各种各样的插件,也许这满足了童趣未了的我的好奇心吧!



可FF的插件装多了就会有像Eclipse一样的问题,不仅是个吃内存的大户而且还会因为质量有问题的插件而崩溃,好多的朋友都是用Opera的,他们有些看不起Firefox,希望Firefox在这方面做些努力。我也是经过一些取舍最后留下这些插件的,但如IE Tab就是个crash的元凶。

2006年03月18日

尝尝firefox的performancing插件写blog的滋味

在不只一个地方看到朋友们谈论performancing,不用用总是觉得缺少些什么的,毕竟我是一个未到中年的貌似中年的知识分子,不安分的因素还是有很多的。
做为一个FF的插件这个东西用起来感觉还是蛮方便的,用简单的向导就可以和主流的blog api连接上,而且功能也都很体贴,这次算是测试的使用一下子吧,如果真的好用,说不定也就这么用着了。我还是比较懒惰的,对于便捷些的工具还是很依赖的。
下一个on schedule的也许会Flock了吧,虽然只是个preview
但从它的介绍来看还是比较吸引人的。

本人提供gmail orkut writely wallop邀请

如题,本人提供以上诸所谓2.0网站的帐户邀请。
请发信到sleetdrop@gmail.com
本人定期查收处理。
注意请在标题内写明需要某某账户的邀请字样,
以便于辨认。

啥叫“身未动心已远”

最近见了几次的"身未动心已远"
最早见到是小白的blog 的名字,
后来QQ上有个人叫这个名字,
今天在netviebes 里读朋友的Blog 时也看到了这句话。
不知道出处如何,google了一下。
好像是周迅的一首歌:

等待着海 变了颜色
鲜艳的火 是遥远的日落
我曾听到 神秘又浪漫的心跳
那些声音 跳进了山谷的怀抱 为我们静静的祈祷

那是她在召唤啊 要生命鲜花般灿烂
明天有未知的梦的礼物 开始吧无尽的旅途

来不及再 忧郁一秒
她的呼唤 在动情的燃烧
我能听到 神秘又浪漫的心跳
那些声音 撕破了城市的喧嚣 洗尽现实的烦扰

那是她在召唤啊 要生命鲜花般灿烂
明天有未知的梦的礼物 开始呀无尽的旅途


听起来文绉绉的一句话,“淡泊明志,宁静致远”与其相比又怎么样的,也许“心未动身已远”更洒脱随和些吧。
看朋友的log时,里面她暗指的诸君我已经对不上号码,也许这就是分别多年带来的陌生吧。
感觉人人都是有感悟生活的虔诚的,只是身未动罢了...

今天是另一个旧友的生日,祝福他健康快乐.

2006年03月15日

用inetd方式运行subversion服务

前些天在vmware里安装了centos,并且在里面给同事们配置起来apache+php+mysql的环境。
并且用standalone “daemon” 方式运行了subversion.
前两天暂时借到一个PC,在里面装了slackware,把大家web目录里的东西和mysql数据库的数据都转了过去。
最后用svn dump和svn load把subversion的数据也转了过去。
因为一共就四个人在玩这个东西,一天也没有几次的commit,所以感觉让它跑在inetd的方式可能会比较合适。
在手册里找了一下,原来是个比较简单的设置哈。
/etc/services 加入如下行:

svn           3690/tcp   # Subversion
svn 3690/udp # Subversion

在/etc/inetd.conf加入:

svn stream tcp nowait svnowner /usr/bin/svnserve svnserve -i -r YourRepos

其中svnowner是对subversion仓库有读写权限的用户
YourRepos是subversion仓库所在的路径
比如在我的机器上就是这个样子的:

svn stream tcp nowait root /usr/bin/svnserve svnserve -i -r /var/svn/repos



2006年03月14日

SUN技术日有免费的午餐

昨天去参加了SUN中国技术日@东北大学,感觉还可以,也许自己水平比较差吧!
我对java一直没有感冒起来,对solaris也只是简单摸摸罢了,但毕竟是在宁宁哥的sun工作站上开始学的shell,还是有些感情的。
总体来说还是有些收获的,虽然在吃免费的午餐的时候洒了满手的菜汤:(
印象比较深的是Liang Chen的关于并行计算的介绍,我基本是IT边缘人,所以这些东西对我来说还是比较难的。
再加上他与普通话迥异发音的中文plus英文的演讲,我是过了大约5分钟才跟上他的思路,简单的了解了些OpenMP MPI 和前瞻性的GRID .
同时他在最后还给了年轻人一些良好的建议.讲稿下载 .
另一个比较令人感兴趣的人就是Joey Shen,一个蛮招人喜欢的家伙,自称为Evangelist,不知道为什么突然让我想起Latter days ,罪过啊。
他和大家玩了Java puzzle还讲解了Netbeans 的一些新的特性.
如更好的GUI的RAD,智能的提示,自动补全,错误修改建议,以及重构等.
但这个帅哥在最后讲解profiler的时候摔在了tomcat上.
这只公猫在down掉一次后说什么也不起来给他跑那个webapp了.
因为昨天晚上还会有场IBM的Eclipse 的专场,所以帅哥不想留下话柄,但终究没有如愿。
无可厚非这个哥哥是优秀的,同情他,阳光的布道者...
讲稿下载

MySQL(root用户)密码忘记重置

转自:
http://tech.0532163.com/news/78/200633171550.htm



MySQL(root用户)密码忘记重置

1、首先停止正在运行的MySQL进程

Linux下,运行 killall -TERM mysqld
Windows下,如果写成服务的 可以运行:net stop mysql,如未加载为服务,可直接在进程管理器中进行关闭。

2、以安全模式启动MySQL

Linux下,运行 /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
Windows下,在命令行下运行 X:/MySQL/bin/mysqld-nt.exe --skip-grant-tables

3、完成以后就可以不用密码进入MySQL了

Linux下,运行 /usr/local/mysql/bin/mysql -u root -p 进入
Windows下,运行 X:/MySQL/bin/mysql -u root -p 进入

4、更改密码

>use mysql
>update user set password=password("新密码") where user="root";
>flush privileges;

注:如是4.1以上版本则使用old_password()函数进行密码更改。





2006年03月11日

Google SiteMap模板 For Movable Type

以前在Bo-blog里做SiteMap是自己写php程序生成的,现在用MT了,正想着是否需要补习一下Perl来着。可轻易就google到了sitemap的模板。原来世界真是美好哈.....具体模板文件在如下链接里:
Google SiteMaps for Movable Type - now with correct Last Modified dates (Anders Jacobsen's blog)

生活细节之美

最近感觉时间过得好快,每个星期都是闪烁而过,似乎总是抓不住粗略经营的生活的细节。成熟是否意味着感官迟钝,就如不再为漏水的暖气而恼怒,也不为多事的邻居而烦乱,更不因摇摇晃晃的双层铁床而失眠。机械地洗碗,热剩下的饭菜,迷迷糊糊的敲代码,心不在焉的把水晶头压在网线上...
儿时总是用下面的话骗姥姥要鸡蛋吃"我要是没有营养就长不好身体,长不好身体就不能考大学,考不上大学就不能孝顺您,所以给我烧个鸡蛋吃吧!"后来读书了,小学和初中我很听话,是个乖娃娃,成绩也蛮好。高中的时候可能是懵懂时的萌动吧,浪费了不少时光在发呆上。高考的那年独自住在家里放杂物的小下屋,望着未修饰的漆黑的棚顶企盼着未知的大学时光。而今大学 读了,工作 也找了,可回去看姥姥也不过一年一两次。我们老家有句俗语:外甥是姥家的狗,吃完就走。经典啊!
刚刚给妈妈打了个电话,得知了爷爷最近身体还可以,放心了些。妈妈说她又在给我织毛裤,因为年假回家的时候她看我买的毛裤穿着不是很合身也不够暖和。她一定是坐在炕头带着花镜,一针一针的织着,爸爸在一边有一句没一句的和她聊着天,<国际新闻>的时候爸爸会去给爷爷当翻译,并不是爸爸会外语,而是爷爷有些耳背,但爷爷是绝对不带助听器的,就像爷爷一半的牙都掉光了,倔强的绝对不带假牙一样。但爷爷的眼睛绝对的好,可以在比较暗的光线下看报纸,这让我六十六岁的大伯都欣羡不已。BTW:爷爷年轻的时候是做过日语翻译的,而且有一次听他和爸爸说他网球和排球都打得很好,可我连玻璃球都不会玩,汗一下......
今天做饭的时候发现味精用完了,打开了前两天买的鸡精,因为同事说味精吃多了有些副作用的,况且我的头发真的是越来越少。偶然想到那么大的一袋盐,一袋味精都会在不经意中用完。它不像健硕的馒头,冒尖的米饭那样在你面前迅速的消失,而着实是点点的无色有味的洒进了平淡的生活里,也许这就是被我忽略的美丽的细节吧。BTW:太太乐 味道真的不错。



Writely发布日志到MT Blog系统的时候TimeZone差错的问题

昨天用writely发布日志到自己的blog里,没有注意时间居然是错误的。我已经老了,已经没有午夜过后爬起来写Log的体力了:-)在writely的forum开发人员说writely读取的是本地计算机的时区设置,可我的MT和我的PC都设置的是东8区啊。在google这个问题的时候也发现一个帅哥哥The Jason Salas Experience: Suggestion for Writely: let me store my local time zone和我有同样的问题。哎,事情总是不那么完美,看来用writely写blog也不是那么的舒服哈。自己写html标签也满好玩的。


2006年03月10日

WYSIWYG的梦想--WRITELY

换成了MT后比较麻烦的就是它自己带的那个编辑器了.
安装了两个WYSIWYG的插件发现一个不好用,一个出了莫名的错误无法使用.
最后还是回writely 了,最近有些天没用它了,现在居然发现它已经是part of google了 .
好像google很喜欢这样的东西吧.
今天突然放弃了给MT装N种插件的想法了,因为以后升级必定又是个问题.
还是Richard.Hong 说的对,Blog最重要的是内容,这么说来我的这次搬家 也许也算是多此一举了吧.




2

2006年03月09日

成功从Bo-blog 1.32迁移至Movable Type 3.2

经过近两天的时间,把我以前Bo-Blog里的日志和评论都导了过来。老版本的blog现在为只读,地址为http://www.vetcafe.net/blog
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
经过近两天的时间,把我以前Bo-Blog里的日志和评论都导了过来。老版本的blog现在为只读,地址为http://www.vetcafe.net/blog
因为从Bo-Blog到Movable Type没有成品的转换程序,我自己想了一些笨的办法基本解决了问题。
首先学习了下
http://www.sixapart.com/movabletype/docs/3.2/f_import_format/
MT数据导入的格式。
然后又看了看Bo-blog的代码,发现它使用的是phplib的模版引擎。google到phplib模版的介绍。然后按照MT的格式要求写了静态模版和利用模版导出文本的export.php文件,其中php文件是改写的bo-blog原有blog.php文件。这样按照export.php?job=art&articleid=a_20060309_090743这样的格式就能得到一个log的输出文本。然后又写了一个mkexp.php生成一个所有输出的url列表,相当于一个站点地图。在freebsd下用wget下载这个url列表里的所有东西,就得到了全部log的符合MT导入格式的文本。由于忘记了自己原来的Bo-blog太老,是gb2312编码的。第一次导入到utf-8里的MT的时候得到的是一堆乱码,于是又写了个shell脚本用iconv把所有的文本转成了UTF-8的。再次导入基本成功。但发现图片和附件原来都是相对路径的连接,在MT里无法正确显示,就再用sed把文本里的相对路径改成了全路径。最后导入就成了现在的样子:-)
文件列表如下:

export.php
在blog根目录下

<?php
require("global.php");
if (!$page) $page=1;
if (empty($tem)) {
$tem=$blogtem; }
$navall=@file("$dirblog/cat.php");
$catnav="<a xhref=blog.php>首页</a>";
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$catnav.=" $columnstring <a xhref=blog.php?job=showcat&cat=$navtmp[1]>$navtmp[2]</a>";
}
$catnav.=" $columnstring <a xhref=blog.php?job=listall>全部</a>"; //获取分类导航
if ($login_status==1 || $allowvisitorreply==1) {
$catnav.=" $columnstring <a xhref=blog.php?job=guestbook>留言</a>"; //留言本
}
$catnav.= $newurl;
for ($i=0;$i<count($navall); $i++) {
$navtmp=explode("|",$navall[$i]);
$navt2=$navtmp[1];
$categories[$navt2]=$navtmp[2];
} //获取分类数组
//Now starting TEMPLATE CLASS
include_once("blog/template.php");
$t = new template(".");
if ($job=="art") {  //阅读某文
    $isfound=0;
    if (empty($articleid)) $isfound=0;
    else {
    unset ($allfiles);
    $allfiles=file("$dirblog/list.php");
    $allfilescount=count($allfiles);
    for ($i=0; $i<$allfilescount;$i++) {
    $latest=explode("|",$allfiles[$i]);
    $id=$latest[1];
    if ($id==$articleid) {
    $articlereplys=$latest[5];
    $articlename=$latest[2];
    $appendpagetitle=$articlename;
    $catidd=$latest[4];
    $week=date("w", $latest[3]);
    $weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
    $articletime=date("m/d/Y H:i:s",$latest[3]+($timezone*3600));
    $isfound=1;
    $foundindex=$i; //获得当前序号
        if ($isowner==1) {
        $editurl="<a xhref=mblog_edit.php?articleid=$articleid>编辑</a>";
        $delurl="| <a xhref=mblog_edit.php?articleid=$articleid&action=del>删除</a>";
        $noreplyurl="| <a xhref=mblog_reply.php?articleid=$articleid&action=delallreply>清空回复</a>";
        } else {
        $editurl="";
        $delurl="";
        $noreplyurl="";
    }

    break;
    }
}   
}

if ($isfound<>1) {
    wronginfo("没有找到指定文章,它可能已被删除。或者你没有指定文章。");
} else {
    $article=getarticle("$dirblog/$id.art");
    $thiscat="{$categories[$catidd]}";
    $reurl="<a xhref=mblog_reply.php?articleid=$articleid>发表评论</a>($articlereplys)";
    if ($foundindex!=0) { //上一篇的链接
    $tmplast=explode("|", $allfiles[$foundindex-1]);
    $quicktoprevious="<a xhref=blog.php?job=art&articleid=$tmplast[1]><font face='Webdings'>3</font>上一篇 ".msubstr($tmplast[2],0,40)."</a>";
    } else $quicktoprevious="&nbsp;";
    if ($foundindex!=($allfilescount-1)) {//下一篇的链接
    $tmpnext=explode("|", $allfiles[$foundindex+1]);
    $quicktonext="<a xhref=blog.php?job=art&articleid=$tmpnext[1]>下一篇 ".msubstr($tmpnext[2],0,40)."<font face='Webdings'>4</font></a>";
    } else $quicktonext="&nbsp";
    $previousandnext="<table width=95% cellpadding= cellspacing=0><tr><td>$quicktoprevious</td><td align=right>$quicktonext</td></tr></table>";
    $seereply="";
    $t -> set_file("export", "blog/template/$tem/export.htm");
    $t->set_var(array("articleid"=>$articleid, "articlereplys"=>$articlereplys, "seereply" =>$seereply, "articlename"=>$articlename, "articletime"=>$articletime, "article"=>$article, "editurl"=>$editurl, "delurl"=>$delurl, "noreplyurl"=>$noreplyurl, "newurl"=>$newurl, "reurl"=>$reurl, "thiscat"=>$thiscat,"previousandnext"=>$previousandnext, "appendpagetitle"=>$appendpagetitle,));
    $t->parse("out","export",true);
    $t->p("out");
    print "\n";
   
    if ($articlereplys==0 || !file_exists("$dirblog/$articleid.rep")) {
//        $reply="此文还没有任何评论。"; $replyinfo="提示:";
//        $t -> set_file("rebody", "blog/template/$tem/reply.htm");
//        $t->set_var(array("reply"=>$reply, "replyinfo"=>$replyinfo));
//        $t->parse("mainbodyout","rebody",true);
    }
    else {
        unset ($tmp);
        $tmp=file("$dirblog/$articleid.rep");
        $areply=@readfromfile("$dirblog/$articleid.rpl");
        $tmpreply=@explode("\n|rep|", $areply);
        if(count($tmp)>$repperpage) {$countreps=$repperpage; $morepre="<br><br><div align=right><a xhref=blog.php?job=seereply&articleid=$articleid>还有更多评论,点击查看全部</a></div>";}
        else $countreps=count($tmp);
        for ($i=0; $i<$countreps;$i++) {
            $rep=explode("|",$tmp[$i]);
            $replyauthorandemail=@explode("θθ", $rep[2]);
            $replyauthor=trim($replyauthorandemail[0]);
            if (!empty($replyauthorandemail[1])) $replyauthor="<a xhref=mailto:$replyauthorandemail[1] title='给评论者发信'>$replyauthor</a>";
            $replyid=$i;
            $week=date("w", $rep[3]);
            $weekday=array("星期日", "星期一","星期二","星期三","星期四","星期五","星期六");
            $replytime=date("m/d/Y H:i:s",$rep[3]+($timezone*3600));
            $replyip=$rep[5];
            $reply=getreply($tmpreply[$replyid]);
            if ($i==($countreps-1)) $reply.=$morepre;
            $replyinfo=$replyauthor." 在 ".$replytime." 评论:";
            if ($isowner==1) $delreply="[<a xhref=mblog_reply.php?action=delreply&replyid=$replyid&articleid=$articleid>删除</a>]";
            $t = new template(".");
            $t -> set_file("rebody", "blog/template/$tem/exportr.htm");
            $t->set_var(array("replyauthor"=>trim($replyauthorandemail[0]), "replytime"=>$replytime,"replyip"=>$replyip,"replyauthorandemail"=>$replyauthorandemail[1],"replyinfo"=>$reply));
            $t->parse("out1","rebody");
            $t->p("out1");
            print "\n";
           
        }
    }   
}
}
print "--------";
?>


模版文件
在你所用的模版的目录下
export.htm

--------
TITLE:{articlename}
DATE:{articletime}
CATEGORY:{thiscat}
-----
BODY:
{article}
-----

exportr.htm

COMMENT:
AUTHOR:{replyauthor}
DATE:{replytime}
IP:{replyip}
EMAIL:{replyauthorandemail}
{replyinfo}
-----

生成URL列表的mkexp.php
在blog根目录下

<?php
    require("global.php");
    ob_start();   
    $all=@file("$dirblog/list.php");
    for ($i=0; $i<count($all); $i++) {
            $tmp=explode("|", $all[$i]);
            $theurl="$weburl/blog.php?job=art&articleid=$tmp[1]";           
            echo $theurl;
            echo "\n";           
    }
    $xml_file = fopen("exportlist", "w");
    fwrite($xml_file, ob_get_contents());
    fclose($xml_file);
    ob_end_clean();
    header("Location:blog.php");
?>


转utf-8的shell脚本

#!/bin/sh

for i in *
do
iconv -f gbk -t UTF-8 $i >tmp
cp tmp $i
done

2006年03月07日

My Notification Area

systrayicon

这样的通知区域,我都对自己是否能安心工作表示一点点怀疑。