2010-01-31

加班男

最近经常加班,其改变堪比从学生刚进入工作状态。时间紧、任务急,为了能回去过年,只有主动加班了。周五晚上、周六下午,加上今天一天的劳动终于把自己的进度赶了回来。没想到我堂堂GQ竟然沦为加班男!

工作三年,收获更多的可能是一些教训。它们告诉我以后怎样写出更高质量的代码,清晰、可读并且可维护。这几天写Java代码也是有收获的,最大的感想便是:No Silver Bullet.  这句话几十年前Fred Brooks就说过。在糟糕的设计之下,任何漂亮、优雅的语言都无济于事。

稍微闲下来的时候逛了逛京东,看中一款ThinkPad X200,没有光驱,没有蓝牙,没有modem,没有摄像头,没有Touchpad,也没有指纹锁,如此干净利落,实在令人痛快!如果是13.1的屏幕那就完美了!老鄢,不知道阿布用的是不是这款?

等啥时候俺被lay-off了,拿个package买个X200,装上Debian Squeeze,那该多happy!

标签:

2010-01-27

光脚穿鞋

在健身房跑完步又是大汗淋漓。现在每周两次,感觉体质在慢慢变好 -- 因为鼻炎已经明显不如前些日子严重。看来这只鼻子还没到无药可救的地步。跑完洗澡,发现忘了带袜子,只好光脚穿鞋了。这除了让我体会到袜子是一项伟大发明 之外,另外得到一项结论:自己的右脚比左脚出汗多。:)

跑步机上现在我只能跑程序4,两波6-7-8米每秒后最后冲到9米每秒,一次刚好一 刻钟。一千六百米多一点点,能耗值12000多。想想这才相当于绕操场跑了4圈。这让我很有点怀疑当初每次十圈是怎么跑下来的。打开Google Earth求证了一下:交大那操场一圈确实是四百米。从博仕欣居门口到老东家门口大概3200米多一点。这就是说,06年四月开始,基本上每天上午我跑了 3公里路,晚上如果再跑步回去的话就是6公里,有幸碰到段王爷约我去跑步,那就再加上4000米。我KAO,最高一天十公里,原来当年我竟有如此禽兽体 质!

还是那双徒步鞋(在Decathlon买的第一双,花了500大洋),虽然已经穿烂,还是没舍得扔。现放在公司,去健身房跑步的时候就 穿上。可惜鞋是人非啊!俺啥时候才能恢复到当年水平嗫?

标签:

2010-01-22

[zt] So long, old friend...

[Orignal Link from James Gosling's blog]:
http://blogs.sun.com/jag/entry/so_long_old_friend

标签:

2010-01-15

大刀砍来

上周末OT还没完全解决的bug其实今晚才真正搞定,当然,也是抓耳挠腮加上OT了之后的结果。因为不想再牺牲一个周末搞得像连续工作了两周似的。

空降了五尊大神,算是稍微正式宣布了lay-off的消息。大刀砍来,一下便走了几个兄弟,让人感到非常难过。虽然曾经经历过几次,但这是第一次自己组内,甚至小组内发生,喉咙哽咽了。LP郁闷的说怎么不把我给踢走,这样也好拿个package好做个小小暴发户。我在此严正声明,丁丁还在一直等着呢,别插队,保持队形!

我对LP说,我看到了未来,却没想到它来得如此之快。借用某神一句话:They have no mercy.

标签:

2010-01-11

充实的周末

这个周末过的很充实。

周六上午接到xuan core电话,于是连上vpn搞定了一个bug。下午依约去跑步,半小时下来真的是气喘吁吁、汗如雨注。休息了一下,正好有三个兄弟在公司,正好来一局三国杀。郁闷的是,找了一圈都没找到牌,悲剧啊!(今天才知道原来牌被xuan core带回家了)。接着去浦东姑妈那里吃饭,然后再杀回五角场,等晚场的Avatar。10:45开始,没想到居然满场。凌晨1:25看完,洗个澡爬上热炕头已经2:30了。那个累啊!

昨天手机没开,打开gmail发现xuan core的邮件已经等在那儿了。又有一个bug,一时之间找不到root cause,加上vpn实在慢的不可忍受,于是跑去公司,直到晚上9:45才搞定。LP声称至此和xuan core已经结下梁子,因为本来周日下午应该是陪她逛街的。

今天一天感觉很累,不过对周日的问题得到了一个比较完美的fix。殚精竭虑,形神俱废了。-_-

标签:

2010-01-07

鼻炎

鼻炎算是成都留给我的一个legacy,那是离开之前的最后一个冬天。得了重感冒,扛着,感冒好了以后便落下了鼻炎算是后遗症。以前看胖总施展鼻孔吸凉水的吐纳大法,煞是心惊肉跳,如今我也开始修炼这一绝技。此外顺便还修炼了简单一千倍的雕虫小技一阳指 -- 按摩鼻部穴位。

在LP的督促之下,昨晚盯着刺骨寒风绕着江湾体育场外圈跑了两圈 -- 本来计划第一次先跑三圈的,实在太冷,放弃了。凭我一路飞奔下来,居然没看见第二个在跑步的,扎堆绕场走路的倒是有一些。许了口诺,每周三、周六跑步,不过下次绝定换用公司的跑步机了。

谈起跑步,我不由得想起闵行诸公。除了各位总以外,不知道段王爷还在不在。也许什么时候能再次一起跑个步啥的?“兄弟,有空不?交大,跑个十圈呗!”

标签:

2010-01-06

又是一年EPAS

每当要写EPAS[1]的时候才真正意识到一年又结束了。写EPAS是件正经而且重要的事情,虽然此间回顾一年的工作内容时,竟然有点揭自己遮羞布的感觉。西洋鬼子基本上比较注重规程,却又不像东洋鬼子那样死盯着。每个季度要写MBO,每年要写EPAS,自己给自己设一些目标并有个年终评估,其实是个好习惯。

除了EPAS之外还有个IDP[2],不过在这里IDP不是mandatory的。回望去年写下的IDP,完成度算是刚刚及格。08读了前半本《Code Generation in Action》,前半本《Programming Ruby》,领略了SICP的第四章,还有若干关于Haskell的资料。最大的收获在于一些代码生成技术,和对函数式编程的进一步理解;而最大的遗憾在于对以上领域还是缺乏更多的实际经验。

[1] EPAS, Employee Performance Appraisal System

[2] IDP, Individual Development Plan

标签:

随机密码生成器

花了一天时间用Bash写了个生成随机密码的脚本。生成的密码符合以下条件:

  1. 长度为8~20个字符;

  2. 包含至少一个大写字母;

  3. 包含至少一个小写字母;

  4. 包含至少一个数字;

  5. 包含至少一个特殊字符。


总的来说,我还是比较喜欢这个脚本的,够简单也够简洁。
PW_LEN=$((8 + (RANDOM % 12)))
DIGITS='0 1 2 3 4 5 6 7 8 9'
LCHARS='a b c d e f g h i j k l m n o p q r s t u v w x y z'
UCHARS='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
SCHARS='! @ # $ % ^ & ` ( ) { } [ ] ; : " , . < > ? / \ | ~'

DISPTB=(DIGITS LCHARS UCHARS SCHARS)
DISPTB_LEN=${#DISPTB[*]}

# randomly select one character from randomly selected char table
function random_select()
{
local table=${DISPTB[$((RANDOM % DISPTB_LEN))]}
local n_ele=
local clist=

eval clist=(\$$table) # clist contains char table
n_ele=${#clist[*]} # length of array `clist'

echo -n ${clist[$((RANDOM % n_ele))]}
}

function pwgen()
{
local passwd=

for ((cnt=0; cnt<PW_LEN; cnt++)); do
passwd=$passwd random_select
done

echo $passwd
}

# check whether given password conforms to policy
function is_valid()
{
local pw_len=$(expr length "$1")
local nr_lower=$(echo "$1" | fold -w1 | grep -c '[[:lower:]]')
local nr_upper=$(echo "$1" | fold -w1 | grep -c '[[:upper:]]')
local nr_digit=$(echo "$1" | fold -w1 | grep -c '[[:digit:]]')
local nr_schar=$((pw_len - nr_lower - nr_upper - nr_digit))

[ $nr_lower -eq 0 -o $nr_upper -eq 0 -o \
$nr_digit -eq 0 -o $nr_schar -eq 0 ] && return 1

return 0
}

while true; do
pw=$(pwgen); if is_valid "$pw"; then
echo "$pw"; exit 0
fi
done

标签: ,