善意提醒

如果您打开本站很慢,布局排版混乱,并且看不到图片,那么可能是因为您还没有掌握用科学的方法上网的本领。

2006-08-30

日记2006.08.30

Chapter One

没想到今天又是个七夕。什么闰七月,农历可真是让人摸不着头脑。

Chapter Two

晚上和她通了 1:40:00 的电话,直到她手机没电。
没想到会讲这么久,她说她挺无聊的,早知道我拨过去了。不过她虽然没工作,我也相当于没工作了,半斤对八两。

和七夕没有直接的关系。

Chapter Three

晚上加班。
其实自己要做的事情很简单,按照平时的做法十分钟就应该做完了。
不过看了新人写的代码,颇为忿忿。「怎么能这样写呢?」这样的话在心里吼了好几遍。新人就是新人,基本上没有读懂原来程序的思路不说,代码的写法隐患极大,对需求也理解错了几处。不过因为以前没有做过 Web 开发,所以一切还算可以原谅。
但是还是得教训的,否则人会不知道做错了事,看来明天又有人要挨骂了。

2006-08-29

日记2006.08.29

Chapter One

中午打电话告诉了家里人要带全家出去旅游一趟的事情,老母兴奋得连电话都摔了。

表妹提抗议了,其实本来就计划去看她的。只不过去一趟成都实在是不值一提,我都没把那当作出门。

这样的话,旅途中必去的两个地点,是成都和武汉。其它地方到底还有哪些,还得根据时间和预算经费来安排。一开始计划的一个人 6000 ~ 8000,今天想了想,似乎多了点。因为出行时期并不是旅游旺季,无论路费、酒店还是用餐应该都会不是很贵,想想就是算是 300 元的标准间住上两周,算下来一人也才 2100。

计划旅程是一件很快乐的事情,我可以预见得到。不过眼下还不敢真的投入进去,先把眼下的事情忙完再说。

Chapter Two

今天早上睡得足足了才去上班。她说得对,我现在这个状况已经不需要遵守什么作息制度了,反正工资也没准备拿。

中午去把上个月的工资转帐到了自己的卡上,顺便取了点零花钱。上个月的确用得比较省,身上只剩一顿饭钱了,哈哈。

Chapter Three

晚上下班回家,一路上好些个 MM 盯着我瞧。瞧得我心慌慌的,连忙检查裤子天安门有没有关,再检查头上有没有鸟粪。可是什么异状都没有,真异常!真郁闷!

在麦当劳看到一个身材非常性感(脸蛋也很俊)的 MM,细腰、丰乳、肥臀,总之三围非常诱人。服饰穿着上也刻意突出这些,包括花纹、色调、样式……。男人色迷迷的目光她大概非常渴望吧?这样子明摆着就是在勾引男人,我倒还不想看了。

嗯,还是易中天的《品三国》比较好看一些。同样都是媚俗的东西,起码它还有点内涵。

2006-08-28

C随机函数的正确用法

看到有同事在用rand() % 100 + 1这样的方法试图获取一个1~100的随机数。虽然rand()出来的确实是一个整数,而且确实会大于100,但是这样得到的随机数并不是从1~100机率均等的。用在某些场合,不是很合适。

在C中正确的取随机数应该是这样:

#include <time.h>
#include <stdlib.h>

// 初始化随机数序列
void randomize(void);
{
    srand((unsigned)time(NULL));
    return;
}

// 获得一个0<=x<1之间的随机数(双精度)
double randf(void)
{
    return (double)(rand()) / (RAND_MAX + 1);
}

// 获得一个0<=x<number之间的随机数(整数)
int random(int number)
{
    return (int)(rand() * number / (RAND_MAX + 1) );
}

random之前别忘了先用randomize进行初始化,否则每次出来的随机序列可是一样的。呵呵,用时间值进行初始化也不一定保险,特别是用在博彩系统中,曾有人根据系统启动时间推算出随机数种子的例子。有必要的话,建议各位加上别的因素(比如对鼠标进行采样等)进行随机数种子的初始化工作。


更新于18年以后:

后来有人跟我杠,说rand() % 100 + 1这样写才是对的。
我的确也在很多地方看到有人这样写,甚至包括V2EX。我有点不是很明白,现在程序员的门槛这么低了吗?这些人是不是都是写Web前端的?这已经不是编程问题了,这是数学不及格啊!
往轻了说,你为了性能和开发效率,在业务需求允许的情况下走了「捷径」,起码在心中要有这个X数,而不是来跟我杠说这个写法才是对的。你那么爱杠,去跟AI杠一杠吧,它会让着你的。

日记2006.08.28

Chapter One

Dell 又在诱惑我了。

这次是一款 15' 的宽屏本,7799 的价格,配置免费升级到了 1GB 内存 + 120GB 硬盘 + 256MB 显卡 + DVD-RW。考虑了一会儿,还是决定抵抗诱惑。毕竟我现在的本本并不是无法使用,何况还有台式机可以用。再买新笔记本也只是增加一个玩物而已。以后应该会有更优惠的条件出现的,比如单根的 1GB DDR2 内存,比如 7200RPM 的硬盘,……等等。

继而想到,如果能加上免费升级到 9 芯电池×2 的配置就好了……

Chapter Two

上午的工作效率还不错。完成了预期的工作,还和即将部分接手我工作的同事沟通了不少关于管理的话题。
卡也不打了,反正我也不打算要工资。若是就此开除我倒是省却许多麻烦。
被人评价说「真有职业道德」,郁闷。

Chapter Three

辞职,料理完厦门的事情后,打算回家和家人好好团聚一下。
先在家里呆一段时间吧,然后全家人一起出去旅游,争取多走几个地方。健朗的外婆再怎么也已年过八旬了,我如果去工作了起码两三年内无法有长期假期,再不趁这个机会带她出去走走,也许以后就没这个机会了。
这大概算《成长的烦恼》对我的影响之一吧。

Chapter Four

另一个关于家庭的话题,是我打算写一个关于我家人的系列文章。这大概还因为受了我表妹那篇《家有猴哥》的影响。
当然,我并不打算写一篇《家有八戒》,否则有人要自居「师傅」了。

2006-08-24

Linux上FTP客户端实现自动登录

这是在制作服务器虚拟主机自动备份脚本的时候遇到的一个小插曲。

原本想使用输入重定向简单实现FTP客户端自动登录的,因此制作了一个文本文件进行实验:

a.txt

open www.某某.com
aaa
bbb
ls
exit

其中,aaa和bbb分别是FTP的用户名和密码。没想到在ftp < a.txt的时候,仍然让我输密码。看来输入密码的地方无法使用输入重定向来实现,得考虑另外的办法了。

翻阅ftp命令的在线帮助,发现它有auto-login功能。办法是在本用户(本例中是root)的用户根目录(如本例中root用户就是/root)下建立一个名为.netrc的文件,注意这个.可不能省。然后,在它里面存放一张FTP帐户列表,简单格式如:

machine www.某某.com login aaa password bbb
……(可以多行)

然后再直接ftp www.某某.com,就会发现ftp客户端直接以.netrc中设定的aaa用户名和bbb密码进行登录了。当然,系统在使用这张自动登录列表的时候,会根据FTP站点的名称进行核对的。如果没有发现指定的站点名,那么也不会应用这个自动登录功能的。

服务器虚拟主机自动备份功能

自己写了个脚本,来实现对我服务器上PHP+MySQL虚拟主机的自动备份。虽然目前只有我一个人在使用,但是即使这样,我也不希望数据因为意外事故损坏掉。

备份的原理,就是把Apache和MySQL先停掉,然后用tar打包HTML目录和MySQL的数据库目录,恢复MySQL和Apache服务之后,再慢慢通过FTP客户端传到我的一台远程FTP服务器上(其实是我在网上买的一个虚拟主机空间)。

备份周期完全由自己决定,我目前把它丢在/etc/cron.weekly下面让它每周运行一次。备份的文件会以备份日期自动命名。以后等我有了比较大的FTP空间之后,我就设置为按日备份。再在自己工作站上做一个按周归档,那就万无一失了。

脚本文件如下(隐去部分敏感信息):

#!/bin/sh
HOME=/root
# Stop the services
/etc/init.d/httpd stop
/etc/init.d/mysqld stop
# Tar the html bag
cd /var/www
tar -czf /tmp/html.tar.gz html
# Tar the mysql/data bag
cd /usr/local/mysql
tar -czf /tmp/mysql_data.tar.gz data
# Start the services
/etc/init.d/mysqld start
/etc/init.d/httpd start
# Build the ftp script
DATESTRING=$(date +%Y%m%d)
echo "open www.某某.com" > /tmp/ftp_$DATESTRING.txt
echo "put /tmp/html.tar.gz /wwwroot/vhostdatabackup/html_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "put /tmp/mysql_data.tar.gz /wwwroot/vhostdatabackup/mysql_data_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "exit" >> /tmp/ftp_$DATESTRING.txt
# Connect the backup FTP site and upload these files
ftp < /tmp/ftp_$DATESTRING.txt
# Clean temp files
rm -f /tmp/ftp_$DATESTRING.txt
rm -f /tmp/html.tar.gz
rm -f /tmp/mysql_data.tar.gz

增补于2006-09-10

如果想在cron中运行,在脚本中FTP登录之前还要加上HOME=/root,否则无法实现自动登录。原因……是crond运行脚本时的环境变量太过「干净」了。

2006-08-22

作为管理者的感慨

今天分派了三个任务给手下完成。编写任务说明书就花了一个上午外加二十六分钟,足以可见,沟通和管理的成本也是不便宜的。

我的管理,应该还算因人而异了。如果是能够独当一面的人才,我就把一件囫囵任务交给他,让他自己去做,自己去分析,自己去安排开发计划,让我过目一下就可以。如果是有潜力的新人,我会逐步放手,先给他做切分得很 Clear 的任务,然后慢慢减少自己干预的程度。如果是已经被证明了只能完成那种交待得很清楚的任务的手下,那么我会把工作安排成一系列简单明了的指令,明确他要做什么,像个 Sergeant。

低于这最后一个档次的手下,我认为就是不合格的了。下午的时候,老板的司机让我和门口一个「小孩」谈谈,说看看他水平如何,能不能在这里跟着干。坐下,问他软件开发方面的能力怎么样,直接回答说:「能力很糟糕。」小吓了我一跳,我想,他不是极度不自信,就是心态叛逆。再问下去,原来只会 VB、DELPHI 一类的快速开发工具,而且并没有什么实际的作品。电大刚毕业,这种专业水平也属正常。但我看他自信实在是缺缺,而且沟通方面也问题多多,——几次误解我的意思,口齿也不甚清楚。看来的确不是一个合格的人才。

想想真是可惜,这两年来我带过六个手下,先后走了三个。其中两个是花了比较大力气培养起来的 Lotus 工程师,这也导致了如今我手中这一部分工作无人接手。但我今后并不打算培养这方面的人才。毕竟时过境迁,这种过时的东西就让它过去吧,不想再误人子弟了。只是,其中有一个人天赋真的不错,却因为得不到合理的待遇而不辞而别。而别的部门因为这样的原因毅然走掉的人也不在少数。按照上头的说法:「铁打的营盘流水的兵」。黎叔的「二十一世纪什么最贵?人才!」似乎也只是一句台词。我能做到的,只是尽量让自己的手下能多学东西,每天过得充实、有兴趣,工作安排上「喂饱」他们,让他们有足够的成就感。不过,终于,这些快要与我无关了。

新找的工作,估计一开始是不会让我带人的,只可能别人带我,我想这方面我也得去适应。当然更可能是让我自生自灭,这个我倒是有相当的把握。不过,有人可以指挥时,效率明显会不同。即使手下们能力都不如我,但一个好汉三个帮,众人拾柴火焰高。今年的两个毕业生到位之后,一些堆积了很久都没法去处理的问题立刻得到了解决。这从某个方面也说明了「多线程并发」的重要性。

无所谓,我对于能不能担任管理岗位也没有什么要求。既然过去的经历已经证明我至少是个合格的管理者,相比起来,我更喜欢作一个纯技术人员,因为这样可以少长几根白头发。

日记2006.08.22

Chapter One

有人跑过来问我可不可以用短信端口帮他「群发投票」。我没听懂,群发怎么能和投票连在一起呢?是叫我用群发帮他宣传吗?

后来才弄明白,老板让他在一个投票活动中帮别人投票。他就来找我。我也帮不了它,SP 的短信端口哪能干得了这种事情呢?我真是觉得又好气又好笑。老板居然让自己员工干这种事情?

后来想想,老板用这种方式「帮助」别人,应该也是他觉得于自己的工作有利才会去做的,因此吩咐手下去干这事也是情有可原。只不过在我看来这实在是令人啼笑皆非。不管理由如何正当,这种行为也绝非一个职业经理人应该做的事情。想想这样的事情还有很多,比如叫自己的员工去他家布网络,去他朋友家修电脑,去帮他租房子……。若是吩咐私人秘书去做这些事情倒也罢了,可他这样子公私不分,我……拜托,专业一点好不好?!

Chapter Two

今天又从家里带了便当来公司中午吃。这是第二次了。其实也没什么好奇怪的,昨天晚餐的剩饭剩菜而已。
公司其他人也带便当。这是自从公司有了一台微波炉以后开始的风气。不知道是什么时候买的,总之我发现一到中午,空气中就经常弥漫着一股焦糊味——总是有急性子爱把火力开到最强,也总是有笨蛋不爱看当前的火力档位。
大概是因为我孤家寡人一个的缘故,大家都跑来看稀奇。头天叫外卖吃剩的饭菜,味道的确一半。早知道就加上几块韩国泡菜。不过不冰的韩国泡菜又不好吃。算了,明天不带便当了。

Chapter Three

美工苦着一张脸。
问原因,原来她被交待写方案。是我们公司一个教育信息化平台和移动运营商合作的方案。
不明白?怎么会让她写呢!不过我也能想象得到那句「不会写就要锻炼锻炼……」被讲出来时的语气。

据我所知,这个方案本来是让短信方面的「准负责人」写的。不过他由于对那个教育信息化平台(公司主营业务之一)了解有限,写了一段时间也未能有什么进展。这也不怪他,本来这个任务就应该由这整个项目的运营主管来负责完成。这个方案的目的就是要 Show 一整套的思路给合作方看。随便丢给下面一个人让别人写,怎么写得出来?就算要让手下代为起草,起码也得把思路给交待清楚,难道让别人凭空去想一套出来?

现在更离谱了,美工怎么可能写得出这种方案?分明就只能当替罪羊。相比起来,我宁愿让拖地的大妈来给我开发软件,那可能还略微现实一点点。

博客的域名总算独立了

庆祝 www.superliufa.com 独立!

今天上午终于收到了域名备案审批通过的通知,下午等查询功能生效之后,就将该域名绑定到 www.scusoft98.com 所在的虚拟主机上,然后通过一个脚本把相关访问请求转移到我的动态 IP 服务器上。

和公司的关系,又少了一分。

2006-08-20

近来有些不对,心情不对

上周一连三天没有去上班。对于我这个合同早已过期,辞呈又已经提出来早就超过一个月的人来说,我想这样做并没有什么法律或道义上的问题。我就是不想去上班了,我想我真的是累了,是心累。

其实呆在家里也没有做什么别的事情,情绪也……应该算是很差,但就是不想去上班。我设想了一下如果换做是别的工作会不会想去,似乎也缺少积极性。也许我现在需要一个休息,一个心情上的休整期,我想这也可以解释为什么我对于找工作这样看起来应该是很重要的事情会不太热衷。希望不要像上次那样长,我实在不想在重庆呆太久。也许一个旅行会比较好。

离本月结束还有四天,有些事情必须在这期间做完。都快想要吃兴奋剂了。这段时期的我,如果行为举止有些奇异,千万不要吃惊。 

2006-08-16

《铁甲威龙》观后感

很久以前就看过这片子了,改编的FC游戏也通关了很久了,还曾经制作成了录像。但是这些天突然又老夫聊发少年狂,一口气下了铁甲威龙系列的所有片子。慢慢观赏,又重新找回了那种曾经有过的感觉。

墨菲是一名青年警官,而且确实是金发碧眼——不过和某些文字的描述有所差别的是,他有老婆有孩子,男孩还不小了,所以虽然样子看起来还算年轻,但应该算是35左右的准中年了吧。他长得也算不上英俊,不过变成RoboCop,戴上头盔只露出下半张脸之后,却不知怎么的变得非常帅。我这才知道演员为什么会选他而不选别的小生。
墨菲耍枪的动作很酷,比某些国产片强多了。曾经看过一部国产片,警察拿手枪射驾车逃窜的匪徒,打了几枪居然是把手一松让枪往后转。还曾有一个穿警服的MM,转枪用了三个指头,花了三秒钟,丢脸哦!RoboCop耍枪也很酷,而且枪的托架从大腿中伸出,动作真是酷毙了!当年我也想在大腿上安一个枪架来着。
墨菲变成RoboCop之后,有一段时间致力于维护公共安全。记得印象最深的,就是那透过裙子的跨下一枪。很解气啊,解除了那男人犯罪的根源。我看已经不需要把他抓走了。
很快地,他的记忆复苏了。毕竟他的大脑、小脑等神经中枢都还在。他回忆起了自己被杀的情景。按理来说,作为RoboCop是不应该公报私仇的。但是,妻离子散,家破人亡,这使得他自行出动解决仇人。不过他最大的失误就是没有一枪把那个匪徒头子给打死,否则他的搭档后来就不会受伤了。
OCP的自保措施——RoboCop不能对OCP高级雇员下手,使得后台Boss逃过一劫。我疑心安置这种自保的Rule应该是OCP的习惯之一,因为负责RoboCop这个项目的人可是该后台Boss的死对头,他没理由让这个家伙知道这些的。可惜那可怜的ED209不是设计用来城市作战的,于是在楼梯间扭了脚。
接下来避难废弃工厂内。路易丝帮墨菲校正瞄准系统的那一幕真的很温馨,同时RoboCop也终于取下了面罩露出了他的真正面目。我现在还是想不通那画面效果是怎么拍出来的?头盔的话,似乎难度高了点。
那桶有毒废料不知道是什么东西,把一个匪徒变成了怪物。然后他又被车子撞成肉酱,真是可怜,看来连骨头都酥掉了。总之,可怜的匪徒,就算有火箭枪,也只是给墨菲送装备去而已。
接下来就轮到Boss了。那个场景在电影和游戏中同样经典。老板的一句「You are fired!」,接着就是那RoboCop专用枪的强大火力在身上打出的四个洞,然后就是摔窗而出。OCP的人似乎蛮喜欢从楼上飞下去的感觉……

本集中RoboCop不是受损最重的,但是在外表上是被打得最惨的。胸甲全烂了,一度用手护着脸暴露在N支轻火力之下。我在想,当时的警察如果装备的不是9mm的MP5,而是用的.50重机枪,说不定连机体都给打成筛子了。