上周参加了一个时间管理的培训,又玩了一回经典的沙盘游戏。入职培训时上过类似内容的课,当时也玩了沙盘游戏。只是当时刚毕业,对时间管理没啥概念,所以上完课基本就忘光了。现在重上这门课,再回顾这一年多来的工作,可以说自己的工作效率是比较低的,一个很大的原因就是工作时间碎片化。因为工作环境相对宽松,可以自由上网、聊天,时不时弹出QQ、rtx消息,点开网页,工作时间被打断,很少能长时间集中注意力,导致效率低下。大道理其实都懂,只是没有行动。是需要做些改变的时候了,正如课上说的:走出心理的舒适区。先做到以下几点吧:
1、上班时间不开QQ
2、每天上班的前一两个小时是精力最好的时段,用这段时间去处理重要的工作,而不是一开电脑就上网浏览新闻。
3、一个问题如果用rtx三句话无法解释清楚,直接电话沟通。
4、两分钟内无法完成的临时任务,如果不是紧急的则押后,另外再用专门的时间去集中处理。
这回玩沙盘游戏又遇到了一个问题:老师还没把规则说完大家就开始动手了,游戏过程中也没人去问老师最后的评分规则是怎样的。这与参加的另一个培训类似,老师出了个关于用户资料系统的架构设计题,所有讨论小组都默认是QQ用户资料系统。正如两个老师点评的:所有人一拿到问题就埋头苦干,在讨论过程中都忽视了老师——项目客户,这才是真正的需求来源。正确的时间正确地做正确的事,首先是要了解需求,做正确的事;否则大方向都错了,一切白搭。
1、shell脚本的for语句的基本格式
for var in list
do
commands
done
这里的list是一串用空格(空格、tab字符、换行符)分开的值,也可以是其他命令产生的列表值。
可以通过修改环境变量IFS的值来使得for语句可以处理其他分隔符的列表,比如/etc/passwd的值是用冒号分开的,
设置IFS=$'\n':,分割符为回车和冒号。每次修改IFS的值之前最好先保存原来的值,在你的处理过程结束后再把它恢复
IFS.OLD=$IFS
IFS=$'\n':
#your processing code
IFS=$IFS.OLD
for语句支持c形式的循环,基本格式:
for ((variable assignment; condition; iteration process))
比如 for ((a = 1; a < 10; a++))。这里有几个跟通常的bash标准不同的地方:
变量赋值可以包含空格;条件表达式中的变量引用不需要$符号;最后的循环迭代部分不需要使用expr命令的格式。
另外在c形式的for循环语句中可以使用多个变量:
for ((a=1,b=10;a<=10;a++,b--))
2、break和continue
break可以结束当前的循环;在嵌套循环中,可以用break n语句跳出外部的循环,这里的n为要跳出的循环的层数,
默认值为1,即当前循环。例如:
for((a=1;a<4;a++))
do
for((b=1;b<100;b++))
do
if [ $b -gt 4]
then
break 2
done
done
当b>4时会结束整个循环。
continue也类似。
3、可以把循环块的输出进行重定向,或者用管道传给其他命令:
for ...
do
echo "hello"
done > output.txt
while ...
do
echo "hello"
done | sort
4、一个小技巧:
在处理文本文件时,常常需要先以行为单位来处理,然后对每一行用指定的分隔符再处理,比如读取/etc/passwd文件:
IFS.OLD=$IFS
#分割符设为换行符,先以行为单位处理
IFS=$'\n'
for line in `cat /etc/passwd`
do
#每一行的值用冒号分隔
IFS=:
for value in $line
do
#your processing code
done
done
IFS=$IFS.OLD
注意这里的环境变量IFS的使用
1、bash不支持浮点运算,可用其自带的bc计算器来完成浮点计算。
#!/bin/bash
var1=`echo " scale=4;10.2/5" | bc`。
变量var的值为2.0400。这里的scale用来设置小数位数。
可以在计算的表达式里引用shell变量,如
var2=`echo " scal=4;$var1*2" | bc`
变量var2的值为4.0800。
2、if-then语句的基本格式是:
if command
then
commands
fi
在c/c++/java等编程语言中if后面跟的是布尔表达式,而在shell脚本中,if后面跟的实际上是个命令command,
if语句会先运行这个命令,如果该命令的退出状态(exist status)值为0,也就是说命令执行成功,那么then后面的
commands就会执行,否则跳过。如在passwd文件中查找是否有myuser这样一个用户,并打印提示信息:
if grep "myuser" /etc/passwd
then
echo "find the user"
else
echo "no such a user"
fi。
实际上shell脚本的if后面跟的只能是命令,并根据命令的退出状态值来选择是否执行后面的语句;当然shell提供了其他便捷
方法供用户去计算布尔表达式值,如test命令。实际上如果test后面的条件表达式为true,test命令返回0,否则返回1。除了test命令,
还可以把条件表达式用中括号[]括起来,如if [ "10" -eq "5"]
这里说的修改不是去改extjs本身的ext-all.css, 也不建议这样去做,这样会影响所有页面;而应该是用自定义的css去覆盖某些控件的默认样式。大部分控件都有类似cls、style的属性供开发者去定制样式;但具体要设置样式的哪些属性才能达到特定效果,api文档就没说了。比如要构建一个不带边框的panel,设置border、bodyborder属性是不行的,还是会有1px的边框。网上去搜就更难了,准备好万能的firebug,自己摸索吧。
打开firebug,切换到html选项卡,找到panel对应的div节点,如下图:

panel控件的基准样式是x-panel,其中的border-style:solid就是设置边框的,将其覆盖为border-style:none就成无边框的了。
具体方法:定义无边框的样式.my-panel-no-border{border-style:none},然后定义panel时设置baseCls属性:
var mypanel = Ext.Panel({
baseCls:'my-panel-no-border',
//其他属性
});
没文档,搜又不好搜,只能用这种最土的方法了。类似的还有个需求,checkboxgroup里面的checkbox以列模式摆放时,各个checkbox是对齐的;现在需要
对checkbox缩进摆放,体现出一定的层次关系,就像树形列表一样。打开firebug,找checkbox的样式,加上什么padding之类的属性就行了。
快速浏览了definitive guide的前面4章内容,通俗易懂,既有大框架的介绍,也穿插了很多api细节的解释。在虚拟机ubuntu上装了0.21版的hadoop,java虚拟机用的是openjdk,安装很顺利。按照hadoop自带文档里的快速入门跑第一个程序:以单机模式跑example程序,抛异常:java.util.zip.ZipException: error in opening zip file hadoop。文档写的jar文件是hadoop-*-examples.jar,也照着打了,难怪出错,实际要跑的程序是hadoop目录下的hadoop-mapred-examples-0.21.0.jar。最后配了ssh,以伪分布式模式把hadoop跑了起来。周末就先折腾下简单的,后面逐步熟悉hadoop的命令行操作。
经过半年的业务数据接入,最初的架构在存储和计算性能上开始显现出了一些瓶颈,组内正在评估hadoop的可行性。从别的部门应用的情况来看,似乎不是很理想:百来台机器每天处理T级的数据要花上8个小时。对于一些实时性需求比较高的数据,比如分钟级别的pv、uv,hadoop能胜任吗?先自学了解了解看吧,《Hadoop.The.Definitive.Guide》。