posts - 13,comments - 5,trackbacks - 0

  上周参加了一个时间管理的培训,又玩了一回经典的沙盘游戏。入职培训时上过类似内容的课,当时也玩了沙盘游戏。只是当时刚毕业,对时间管理没啥概念,所以上完课基本就忘光了。现在重上这门课,再回顾这一年多来的工作,可以说自己的工作效率是比较低的,一个很大的原因就是工作时间碎片化。因为工作环境相对宽松,可以自由上网、聊天,时不时弹出QQ、rtx消息,点开网页,工作时间被打断,很少能长时间集中注意力,导致效率低下。大道理其实都懂,只是没有行动。是需要做些改变的时候了,正如课上说的:走出心理的舒适区。先做到以下几点吧:

  1、上班时间不开QQ

  2、每天上班的前一两个小时是精力最好的时段,用这段时间去处理重要的工作,而不是一开电脑就上网浏览新闻。

  3、一个问题如果用rtx三句话无法解释清楚,直接电话沟通。

  4、两分钟内无法完成的临时任务,如果不是紧急的则押后,另外再用专门的时间去集中处理。

  这回玩沙盘游戏又遇到了一个问题:老师还没把规则说完大家就开始动手了,游戏过程中也没人去问老师最后的评分规则是怎样的。这与参加的另一个培训类似,老师出了个关于用户资料系统的架构设计题,所有讨论小组都默认是QQ用户资料系统。正如两个老师点评的:所有人一拿到问题就埋头苦干,在讨论过程中都忽视了老师——项目客户,这才是真正的需求来源。正确的时间正确地做正确的事,首先是要了解需求,做正确的事;否则大方向都错了,一切白搭。

posted @ 2011-04-16 20:42 csbird 阅读(1153) 评论(5) 编辑

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的使用

posted @ 2010-09-24 12:12 csbird 阅读(47) 评论(0) 编辑

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"]

posted @ 2010-09-24 00:10 csbird 阅读(51) 评论(0) 编辑

        这里说的修改不是去改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之类的属性就行了。

posted @ 2010-09-17 23:05 csbird 阅读(2869) 评论(0) 编辑

      快速浏览了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的命令行操作。

posted @ 2010-09-05 22:37 csbird 阅读(129) 评论(0) 编辑

经过半年的业务数据接入,最初的架构在存储和计算性能上开始显现出了一些瓶颈,组内正在评估hadoop的可行性。从别的部门应用的情况来看,似乎不是很理想:百来台机器每天处理T级的数据要花上8个小时。对于一些实时性需求比较高的数据,比如分钟级别的pv、uv,hadoop能胜任吗?先自学了解了解看吧,《Hadoop.The.Definitive.Guide》。

posted @ 2010-08-28 10:39 csbird 阅读(36) 评论(0) 编辑
摘要: expect是用来实现自动交互的脚本编程语言。比如用ssh自动登录远程服务器,可以用expect来实现自动输入密码登录。 一个需求:每天定时将一台服务器上的某个文件自动传输到另一台服务器。传输文件工具:scp;定时任务当然是crotab了。使用scp需要手动输入密码,这可以用expect来实现自动输入。完整脚本如下:#!/usr/local/bin/expect -fspawn /usr/loca...阅读全文
posted @ 2010-06-27 10:42 csbird 阅读(188) 评论(0) 编辑
摘要: 某个产品每天访问的用户id存放于文件中,每天一个文件。需要计算几个数据:每天的新老用户数、新开通的用户数、每天的活跃用户数。所谓每天的老用户是指:昨天访问过改产品,今天也来过;新用户是:昨天没来,今天来了;新开通用户:第一次访问该产品;活跃用户:最近3天至少来过2天,也就是今天来过的用户,在昨天和前天至少来过一次。 首先对每天的用户id文件数据进行去重:sort user.txt | uniq &...阅读全文
posted @ 2010-06-06 17:29 csbird 阅读(278) 评论(0) 编辑
摘要: 要在一个页面上对同一个数据源用两种不同的方式进行展示:一种是曲线图,另一种是表格。绘制曲线图需要全量数据;而如果数据源记录数比较多,表格需要分页显示。对于这种需求,可对曲线图和表格这两个UI控件分别配置store,一个去服务端端取全量数据,一个则分页取数据(Extjs自带的store支持服务器端分页)。虽然能解决问题,但有个缺点:表格每次翻页都要和服务器端进行一次交互。实际上,绘制曲线图时全量数据...阅读全文
posted @ 2010-05-30 17:15 csbird 阅读(820) 评论(0) 编辑
摘要: 都说好的互联网产品是运营出来的,那如何去把握一个产品的运营状况呢?最直接的,用户数。用户越多,产品就越受欢迎。然而对于产品运营人员来说,用户数这样一个单一的数据显然是不足的,需要更多的角度去看产品的运营状况,比如PV、UV、用户流失率、页面来源去向分布、操作习惯等。这些都依赖于有效的运营分析,说通俗一点就是对用户数据进行统计分析,说高深一点呢就是数据挖掘、智能信息处理。 数据仓库、数据挖掘的概念和...阅读全文
posted @ 2010-05-22 17:15 csbird 阅读(89) 评论(0) 编辑
仅列出标题  下一页