收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网 QQ书签 更多 Bookmark and Share

2009年5月26日星期二

《股票作手回忆录》读完了

《股票作手回忆录》已经读完了,在google blog被封的这段时间里,读了2次。对这个印象最深的有以下几点:

  1. 对自己的操作不断地进行总结、进行修改
    虽说主人公没有对自己想在股票、期货市场上成为一个什么样子的人物,没有一个准确的定位,但是主人公对自己的每次操作,尤其是失败的操作,都进行深刻的总结。虽然破产了几次,但是每次交了学费,都能得到提高。
    按照主人公的话来说“交学费是正常的,但是如果交了学费,没有学到东西,没有得到提高,学费算是白交了”。
    另外的一种说法:有些人在购买一件衣服、购买一辆汽车上,所花费的时间竟然比影响一生的投资上所花的时间、精力更多,不可思议。
  2. 在投资上,主人公从短线到长线
    在投资的初期,主人公赚一个点就走人,但是随着年龄的成长、资金的增长,逐步认识到长线的优势,从短线操作逐步发展成长线的操作,得到更多的收益。
  3. 先 大趋势 再 个股
    在操作的层面,原来只关心个股,随着从短线发展成长线,在分析上也有所变化:先注重大趋势,再确定操作方向,确定操作个股。趋势涨,做多,趋势跌,做空(虽然目前国内A股市场没有做空机制)。
  4. 个股操作原则
    虽然主人公后期也关心个股的基本面,但是基本上以趋势操作为主。“个股的涨跌基本是资金面说决定的”。可以说主人公是趋势操作的典型代表。
有时间把这本书的一些自己认为比较重要的,对自己影响比较大的部分摘录一下


Google Blog被封已经有一段时间了

在国内,Google Blog被封已经有一段时间了。原来准备等google blog解开后在写一些,现在看来要有一段时间了,现在通过 http://www.unblockprox.com 国外的代理上来,竟然也可以写,目前就通过这些代理上来写写。

不过通过这些代理,会不会有用户名、密码的泄漏?不知道了先试试吧,反正这个用户、密码和所有和钱都没有关系,泄漏了就泄漏,不会造成经济上的任何损失。

今天也看了一下访问率(Google Analytics),发现随着国内对google blog的封锁,现在访问率下降的比较严重,原来刚创建的时候访问率在上升。而且访问的来源也是搜索引擎居多了。嗨,国内什么时候才能解封啊!

2009年5月14日星期四

JProfiler使用 -- Memory View


Memory View 包含以下部分
  • all objects view (JVMTI only):
    显示当前heap区所有的 dynamic class-resolved(动态类解析)的统计。这个视图只有在Java1.5(JVMTI)才可显示;-- The all objects view shows the dynamic class-resolved statistics for the current heap usage. This view is only visible if you profile with Java 1.5 (JVMTI).
  • recorded objects view
    recorded objects view显示记录的: dynamic class-resolved(动态类解析)的统计:生存和垃圾收集的类; --- the recorded objects view shows the dynamic class-resolved statistics for the live and garbage collected objects that have been recorded.
  • allocation call tree
    显示当前heap区域和垃圾回收兑现的分配树;
  • allocation hot spots view
    显示哪些方法负责创建选择的类;
  • Class Tracker:
    所跟踪的对象;

除非“record allocations on startup”被选中,在 profiling settings dialog中,data acquisition必须手工启动。重新启动的话,将会清除recorded objects view,the allocation call tree and the allocation hot spots view中的原有数据。只有the all objects view不受影响。
停止数据收集了,recorded objects 将会继续收集 garbage收集信息。
The heap walker能够对recorded objects显示分配调用栈(stack)的信息。
memory view集成heap walker。可以获取heap snapshot。


All Objects Views:
分类:
  • classes:
    每一行代表一个类。这是缺省的等级
  • packages:
    每一行代表一个package。sub-package不包含。
  • J2EE部件:
    每一行标识一个J2EE部件。是JSP以及Servlet等。

可以选择一个类、包,通过右键选择“Add Selection To Class Tracker”。如果class tracker没有录制,将会对配置在class tracker中的所有对象启动录制。如果class tracker用不同对象类型或者liveness类型录制,所有数据将会被清除---会有确认框。

Recorded Objects Views:
   只是显示被选择的哪些对象

    all objects view 和  recorded objects view比较类似,统计的内容相近,但是所选择的范围不同:
    双击某个类,会加载类的source code 和byte code

Allocation Call Tree:
   Allocation call tree显示所有线程(根据过滤条件过滤的) top-down call tree累积。

   通过右键菜单选择Calculate allocation Call Tree,选中第一个“Allocations cumulated for all classes”,选择适当的Liveness type,可以得到结果:
   可以通过这个,得到哪个消耗的时间最多。
   
Allocation Hot Spots View
    显示了调用的函数列表。只有调用的次数达到0.1%以上的才会包括在这里。
    可以查出:哪些函数调用频繁。

---------------------
总结:

通过Memory View,可以得出哪些占用的内存大,哪些类的变化比较频繁,哪些函数调用的次数多,消耗的内存多。

操作:
  • 通过 All Objects View 和 Recorded Objects View,可以得出在目前的系统中,哪些对象占据主要的空间。还可以随着时间的变化,看哪些类的变化比较频繁,Instance count或者size增长的比较快;
  • 通过Allocation Call Tree,可以通过层次关系,看出主要线程内部,哪些类占用的尺寸比较大
  • 通过Allocation Hot Spots,可以看出哪些method调用的比较频繁,
  • 通过Class Tracker,可以看出跟踪的某个对象的变化情况
通过以上方式,可以对程序进行优化



2009年5月13日星期三

对Google Blog配置又学会一招 -- 修改布局的HTML

增加了google提供的标签widget,但是觉得不好看,尤其是通过
  • 方式一串列下来,显得相当空。看有人使用的是标签和标签之间是空格的,觉得挺赶紧的,于是自己也试一下。

    在控制台中的 布局->修改HTML,先把原来的布局保存下来(万一损坏还可以修复)。

    然后找到标签的地方:
    原来的代码:
    < id="'Label1'" locked="'false'" title="'标签'" type="'Label'">
    < id="'main'">
      < cond="'data:title'">
        <><>< /h2>
      < /b:if>
      < class="'widget-content'">
        <>
        < values="'data:labels'" var="'label'">
          <>
            < cond="'data:blog.url">
              < dir="'data:blog.languageDirection'"><>< /span>
            <>
              < dir="'data:blog.languageDirection'" href="'data:label.url'"><>< /a>
            < /b:if>
            < dir="'ltr'">(<>)< /span>
          < /li>
        < /b:loop>
        < /ul>
        < name="'quickedit'/">
      < /div>
    < /b:includable>
    < /b:widget>

    新的代码:
    < id="'Label1'" locked="'false'" title="'标签'" type="'Label'">
    < id="'main'">
      < cond="'data:title'">
        <><>< /h2>
      < /b:if>
      < class="'widget-content'">
        < values="'data:labels'" var="'label'">
            < cond="'data:blog.url">
              < dir="'data:blog.languageDirection'"><>< /span>
            <>
              < dir="'data:blog.languageDirection'" href="'data:label.url'"><>< /a>
            < /b:if>
            < dir="'ltr'">(<>)< /span>
    &nbps;
        < /b:loop>
        < name="'quickedit'/">
      < /div>
    < /b:includable>
    < /b:widget>

  • 2009年5月12日星期二

    20090513 女儿的眼睛有点恢复了

    昨天学校里检查视力,女儿检查下来,一个0.8,一个1.0,真是出乎意料。从女儿得了假性近视眼以来,没有听到比这个更好的消息了。女儿自己说,昨天查视力的时候,眼睛是放松的,以前有时候是紧紧的。

    再次总结以下女儿假性近视后,所做的努力:
    1. 食疗(包括中药)
      用菊花、决明子、枸杞泡茶喝,一开始女儿还挺喜欢的,后来就不大喝了;
      食物方面多吃一点深绿色的叶子菜;
    2. 滴眼药水:
      现在有治疗假性近视的药水,医院里配的,主要就是进行散瞳治疗;
    3. 耳朵穴位治疗:
      在耳朵上对应的穴位,每天多柔几次,刺激穴位;
    4. 多做眼保健操:
      眼保健操还是很有用的,每次做好,眼睛都会得到放松;
    5. 注意写字姿势:
      原来做作业,过一会人就趴下了,现在一直盯住她,只要姿势不对,立刻就提醒她,坐姿要端正,握笔要往上,给眼睛留出看字的地方,这样也就不用趴下看字或者斜过来看字了。为了加强女儿的坐姿端正,孩子他妈还买了背背佳;
    6. 学校里的做好最近少了:
      具体的是什么时候不记得了,反正最近一阵学校里的作业应该是少了,这样也减少了女儿的用眼时间;
    7. 写作业的效率有所提高:
      近视后,为了减少女儿的用眼时间,对女儿的写作业时间进行了规定,不断的督促女儿提高写作业的效率;
    8. 进行一些其他方面的辅助:
      譬如补充营养,网上看视觉神经通过叶黄素进行运输营养的,这个又是人体内不能自我合成的,买了一些补充叶黄素的保健品(不能说药物,只能说是保健品)进行服用,暴贵无比。    
    以上到底哪个起了比较主要的作用不知道,反正这一组组合拳下去,女儿的视力有所提高。有时候一下子有所恢复,但是时间长久了又跌下去了。因此这些措施还是要坚持,再进行3,4次视力检查,如果还保持目前的状况(不奢望能再有所提高),就说明真正有所提高了,要稳固下去。



    2009年5月9日星期六

    火箭第三场还是输了(09季后赛第三场)

    09季后赛第三场,火箭主场还是输了,不仅输了,姚明受伤了,阿泰是否停赛还不知道。

    现在火箭的问题很大,这些问题不解决,明年也是没有大的希望:
    1. 进攻:
      火箭的进攻,太依赖于姚明。
      进攻不仅依赖于内线姚明的得分,并且还要依赖于姚明吸引对方的包夹,为外线创造机会,而外线对内线的帮助太少了,没有为内线分担压力。不仅没有像样的传球,而且没有精准的三分投篮,突破。内线姚明吸引对方的包夹,给其他人创造四打三的机会,而且给突破,三分带来了很好的机会,可是没有技术能力出众的队友能够利用到这些机会。内线创造的包夹,尤其是给底角三分创造的机会是最有杀伤力的,现在火箭没有人能够利用上,老巴里在季后赛也很少上场,其实他的三分还是火箭队最可靠的,是技术上的问题,还是战术上的问题?不知道阿德尔曼如何考虑的。有了外线的三分、突破,火箭的内线也不会这么痛苦了。
      火箭的内线,遇到对手内线实力不是很强,或者对方只有一个出众的内线选手,可以依靠姚明和斯科拉的默契配合,东边不亮西边亮,在对方的内线翻江倒海,但是遇到湖人,内线3个7尺大汉,不仅有身体,而且加索尔的灵活性又是姚明不及的,内线根本占不到便宜,加上外线又有一个超强的科比,火箭的优势没了,何来胜利?原来麦蒂可以解决火箭外线问题,可是麦蒂这个德行,当初交易出去,换回来一个明星级的后卫,现在也不至于如此。
    2. 防守:
      还是防守问题,范甘迪在的时候,火箭就是靠防守吃饭的。现在换了教练,进攻加强了,但是还没有到理想的状况。但是防守的力度在下降。虽然火箭有进入防守排行榜的巴蒂尔、阿泰,就这几场季后赛,科比场场30+,不仅自己能够拼命得分,而且盘活了湖人的进攻,几乎一人打败了火箭。
    3. 内线替补:
      内线姚明的替补是谁?原来安排的穆托姆博,现在也倒下了,内线除了姚明,还是姚明,真是要命,靠一个人包打天下不是不行,可是姚明不是那种人,姚明的优势是身高,是技术,体力、耐力都是姚明的短处,没有一个合适的替补给姚明休息时间,姚明迟早要倒下的。

    在blog中,增加了Addthis

    在网上浏览的时候,看别人的blog有收藏的按钮,可以将文章收藏到数十种网上收藏夹中。使用的是addthis,觉得挺好玩的,自己也试了一下,很简单的,

    在http://www.addthis.com/中注册一个用户,获取一段JavaScript代码,
    在google blog中增加一个JavaScrpt工具,将刚才从Addthis中获取的JavaScript代码嵌入进来。
    好了,在页面中可以看到有收藏的图标了,

    点一下,可以出来十几种网上收藏夹的地方,再点一下More,出来的更多。

    现在网上的资源真丰富,有一些自己的想法网上一搜,都有了。要出来一个新的创意越来越困难了,所以说现在,技术已经不是问题了,是否有一个好的创意才是成功的最关键的一点。不知道大家有什么好的创意,可以共同商量一下?

    在blog中增加了Google Analytics(分析)

    在blog中,增加了Google Analytics(分析),看一下,没有人访问 -- 就是自己点击也没有数字。

    仔细看了Google Analytics(分析)的说明,统计24小时更新一次,要看到流量,最少24小时候才能看到。

    桑桑历险记

    学校里要每个朋友自己出一本书,现在正好在养蚕,女儿就用蚕写了一篇作文,挺有意思的,记录一下:

    桑桑历险记

    A

    嗨,大家好,我的名字叫桑桑,是一只可爱的小蚕。

    从我

    生下来的时候,我就觉得这个世界是多么的巨大。小主人每天喂我的一片桑叶对我来说就是……,可是我已经厌

    倦了天天在纸箱里的生活,想到外面去闯一

    闯。于是我就把这个想法告诉了我的亲朋好友们。可是他们都不同意,说:“你还这么小,到外面

    去太危险了。你还是在‘家’里呆着吧。”但是桑桑可不同意亲朋好

    友们的想法,她想:到外面闯闯有什么危险的?我一定要到外面去看看。于是,桑桑趁着一天深夜,没人注意她时,偷偷从纸箱的缝隙里溜

    了出去……

    B

    外面是一片漆黑,伸手不见五

    指。桑桑突然害怕极了。可是,她还是继续慢慢的往前爬,爬到了一座“山

    脚”下。桑桑可好奇了!这个屋子里哪里来的山啊。于是,她顺着山上的斜披往山顶爬去。慢慢地,她越爬越往上,忽然她的脑袋撞到了一条

    软软的布---原来这座山并不是什么山,而是沙发,桑桑刚才碰到的

    是沙发软软的扶手。可是桑桑

    并不知道,奇怪极了,但是她继续往上爬,爬到了山顶。山顶上有一个很小的很小的裂口,里面塞满了棉布,

    可是这对桑桑来说是一张很好的床。这时她已经很困很困了,便躺在这张床

    上,昏昏沉沉地睡去。

    C

    第二天她还没有睡够,便听见一阵震耳欲聋的响声---原来今

    天是小主人第一天上学,妈妈在闹钟上设了一个闹铃,让他不要睡懒觉。这时桑桑自言自语地说

    :他们起这么早,怎么能睡够呢!桑桑想看看这个世界的其他风姿,便往山脚

    下爬去了。终于,桑桑爬到了山脚下,可是她的肚子早已空空,平时这个时候,她和伙伴们正在享受着桑叶

    的美味。可是,她现在没有东西吃,饿极了。

    D

    突然,桑桑闻到一股她从来没

    有闻到过的香味,便不由自主地朝着这股香味的

    方向爬去。心想:那里一定有许多许多的桑叶,能让我填饱肚子。等她爬到

    香味的附近,才知道是小主人在吃早饭:肉包子发出的香味。桑桑又往前爬,看看有没有其它能吃的东西。拐

    了一个弯,她一下子看到一个高大的、白色的长方体。她以为那么大一个东西里面不藏吃的才怪呢---因为她太饿了。于是她往上爬,想找吃

    的。可是她爬了几次都没有爬上去,原来那个高大的、白色的东西是冰箱。冰箱的表面非常滑,桑桑爬不上

    去,只好放弃了。她又爬出这间屋子,来到了小主人家的餐厅。她看到地上有四根高柱子,桑桑闻到上面又

    有香味飘下来。她一闻就知道了---是刚才肉包子的香味。她不管三七二十一,就往柱子上爬,再看看有没有其它吃的。

    E

    终于,她爬到了餐桌上,望着大大的餐桌,竟闻到上面还有桑叶的清香。桑桑已经快饿昏了,她向那堆桑叶“飞”了过去。看

    到桑叶,她就迫不及待地吃了起来。直到她把肚子填的满满的才罢休,准备到其它地方去看看。突然,她想到

    了一个重要问题:好不容易才能吃到桑叶,何不带一些桑叶出去呢?于是,桑桑又花了九牛二虎之力,用了两根很短的绳子,把三片桑叶拴在

    一起,用嘴咬住那两根绳子,把桑叶运到了地上。

    忽然,

    一双大脚走来,差点踩到桑

    桑!她出了一身冷汗。仔细看,原来是小主人的妈妈准备给自己的亲朋好友们喂第二批桑叶了。桑桑想:可

    不能让她看到我,否则她要把我抓回去,那就惨了。桑桑并不知道她的亲朋好友们正在着急地到处寻找她,便按照自己的想法,拖着几片桑

    叶,躲到了餐桌底下,看看有没有什么可以休息的地方。因为这时她已经走得很累了,干脆睡一觉吧!桑桑

    想。于是桑桑拖着三片桑叶躲到了桌子脚下,躺在桑叶上,就

    进入了甜甜的梦乡。

    F

    一觉醒来

    ,小主人已经放

    学回家了。桑桑在好奇心的驱赶下,便赶紧去看小主人在做什么。噢!原来他在看自己的亲朋好友们呢。桑桑还看见小主人在喂桑叶,自己的亲朋好友们吃得开开心心。忽然,小主人一回头,差点看到桑桑。桑桑为了不让大家看到自己,不会被捉回去,又马上带着桑叶,转移到另外一个安全地点---沙发底下。因为沙发底下太暗、太脏了,桑桑就呆在沙发下就好的位置---几乎没有

    灰尘、光线比较明亮、而且又不容易被发现的地方。

    每天早上,桑桑为了游行,都要饱饱的吃一顿,然后才到房间里的各个地方去“游行”。等到中午时,她回到沙发底下,再饱餐一顿,又继续“游行”。等到很晚了,桑桑才回到沙发底下,吃过晚饭,就高兴地睡了。当然她在游行时,有好几次差点被

    小主人的妈妈发现。但是桑桑每次都会快速地躲起来,不让小主人的妈妈发现。没几天,桑桑就熟悉了小主人的家。可是……

    G

    她在外面游行的第一个双休日到了。双休日时,小主人当然也不上学,呆在家里休息。桑桑那天正舒舒服服地躺在沙发上,躲在小主人旁边,和小主人一起高兴地看电视。不料,小主人的一只手正好撑在了桑桑的身体旁,桑桑害怕极了---自己要被发现了。小主人好像真的感觉到了桑桑的存在,忙把手抬了起来。一看,真是桑桑!小主人小心翼翼的用手把桑桑抓起来,放回到纸箱里。还叮嘱她:以后千万

    不要再乱跑了啊!

    真是一次快乐的历险。



    20090426 女儿的诗一首 -- 径之安(音译)

    2009-4-26周日
    表弟女儿过双满月,女儿特别想参加,当天超快的把作业做完(速度和以前相比,用只能用超快来形容)。在去的路上,诗兴大发,又作诗一首,当时用手机录了下来,根据读音整理了一下:

    径之安:

    绿树荫下径满园,
    鸟鸣猿啼生川鸣。
    滴水能让径满闹,
    无人走向此径园。

    -----------------------------------
    感觉音译的有些不准,有哪位能够知道用Sony Ericsson录音,怎么转到电脑里?用Sony Ericsson的套件好像不能进行转换

    2009年5月7日星期四

    系统进程占用了全部cpu --- kjournald

    早上监控人员说系统不正常,上去检查了一下,发现系统都是正在的在运行,但是非常慢,top一看,kjournald占用了全部的cpu。

    kjournald是个什么进程?
    是为ext3文件系统提供日志服务, 源码地址: http://www.linuxforum.net/forum/showflat.php?Cat=&Board=linuxK&Number=644901&page=&view=&sb=&o=&vc=1 日志系统的三种模式ordered, writeback, journal。

    写日志为什么这么忙?网上说把系统从ext3切换成ext2,自己才不会这么做呢。

    写日志这么忙,肯定有原因,聪明了一下,看一下磁盘情况,发现根分区没有空间了,系统拼命的写,写失败再写,不断的重复造成系统写log进程繁忙。

    删除一点无用的log文件,立刻恢复正常。

    ----------------------------------------------
    注: 这台机器是测试机器,没有加监控,所有的在线服务机器都加监控了,不会犯这个错误



    多站点共享登录

    刚才在网上浏览,看到一片不错的文章:“多站点共享登录的解决方案[原创]
    记录了以下几种方式:
    • 同一根域名下的多站点共享登录:
      采用了2种方式共享session验证
      客户端将cookie写入到根域名中 或者 后台采用同一个memcached(或者其他的共享设备)缓存用户session;
    • 不同根域名下的多站点共享登录:
      以淘宝和支付宝作为例子,如何多站点共享登录
    有兴趣的可以去看看。

    这个帖子里说到了SSO Server。SSO是什么,自己不理解,网上查了一下:
    SSO:Single Sign On,单点登录
    基本原理是:有一个认证中心,用户登录在认证中心登录,然后发送给客户一个标识:ticket,用户以后访问其他地方,都通过这个ticket进行验证,表示用户已经登录过。

    其实我们现在的系统已经采用这个方式了。

    编写你自己的单点登录(SSO)服务: 有概念介绍,也有例子

    再增加一个连接,转载了几篇SSO的文档(有些文章没有转载完全):


    用户是否可以在不同的机房登录?

    公司要做网站了,这是一件好事。可是同时也带来了麻烦。跨机房的用户个性化的信息如何处理?用户是否可以登录到不同的机房?
    • 如果用户只能在一个机房登录,个性化的信息就保存在那个机房,就简单了;
    • 如果用户可以在多个机房登录,用户的信息在各个机房中如何同步?如何维持用户信息的一致?--- 这个是最主要的问题,不知道现在各大网站是如何解决这个问题的

    现在确定是否允许多机房登录要根据技术方面来下结论,如果能够多机房登录,同时判断一下代价有多大,能够接受的就进行多机房登录,如果技术上不行,或者代价太大,则放弃。

    昨天网上找了一下,也没有找到什么有用的资料。
    --------------------------------------------
    【2009-5-8】
    机房布置一般有(参考资料):
    • 单机房多路线:
      在一个机房,连接电信、网通的线路进来
    • 多机房:进行映像(copy)
      在每个线路上都有服务器,进行内容复制
    • CDN加速:
      只在一个地方有真正的服务器,其他地方通过CDN进行缓存
    采用多机房,主要考虑到:
    1. 解决电信、网通之间的互联问题:
      其实还有铁通、校园网等,规模比较小,暂不考虑;
    2. 能够更加接近用户,更快的服务:
      由于服务的是证券实时信息,能够更加靠近用户,效果会要一些(好到什么程度看每个人自己的网络情况了);
    3. 分解压力:
      一个机房,所有的客户都走这条线路的话,会比较拥堵,有多个机房,可以分散流量;
    4. 解决异常情况:
      如果只有一个机房,如果遇到了问题,不能服务,故障率就是100%,如果有多个机房可以做一下备份。这个机房出了问题,还有其他机房可以使用,减少客户的抱怨以及投诉;
    由此可见,第一种单机房双线的方式在我们这里是行不通的,但是所有的业务都走多机房的话,也是有问题的,尤其是用户个性化的数据,在多机房部署,同步上会有问题。哪些业务能够多机房展开、哪些业务(在目前技术、投入的情况下)只能单机房服务要做一下区分。







    现在网上销售真乱,要好好治理一下了

    女儿近视眼了,正好前几天看一份健康杂志,有一个产品介绍,辅助眼睛治疗的,看说明真是有那么一点道理:眼睛需要叶黄素,而且是人体不能自己合成的,只能靠外部食物的摄入。同时介绍了一个产品:瑞辉制造的液明珠,可以补充液明珠。

    网上查了一下,查到2个网站都是介绍这个产品的:
    • www.yehuangsu.com
    • www.yemingzhu.net
    www.yemingzhu.net上有客服在线咨询,就上去咨询了一下,没想到这么一咨询,就把我自己也弄糊涂了,以下就是咨询的对话:
    以下的我,就是本人,沈大夫是网上的客服:
    沈大夫 说: 15:00:09
    您好,这里是美国辉瑞眼科专家治疗中心在线咨询,有什么需要我帮忙的?
    沈大夫 说: 15:00:19
    您好,这里是美国辉瑞眼科在线咨询中心,请问有什么可以为您服务的?
    我 说: 15:01:07
    瑞辉的液明珠和辉乐的叶黄素比有什么不同
    沈大夫 说: 15:01:57
    辉乐是什么医药公司
    我 说: 15:03:12
    瑞士的辉乐牌乐盯软胶囊
    我 说: 15:04:27
    在医院里有配的
    沈大夫 说: 15:04:43
    美国辉瑞公司胶囊部,全球医药巨头,顶级的研发能力,先进的生产设备。美国液明珠能够迅速有效补充眼部缺少的叶黄素,疏通眼脉,消融眼垢,排除体外,患者视力模糊、视力下降得到有效控制
    我 说: 15:06:35
    这2种介绍的说明,功效几乎一样的
    沈大夫 说: 15:07:05
    液明珠是外国原装进口、经过了美国免疫局和FDA认证的。
    我 说: 15:10:52
    乐盯是远瑞士罗氏维生素部出品的,
    我 说: 15:12:08
    还有博士康也有类似的产品
    沈大夫 说: 15:12:50
    抱歉、这个我不清楚。
    我 说: 15:13:31
    液明珠每粒含叶黄素多少毫克?
    沈大夫 说: 15:14:22
    每粒含叶黄素≥6mg、玉米黄质、大豆卵磷脂62%
    我 说: 15:15:06
    叶黄素的型号使用的是哪种?CWS5%?FS20%?CWS10%?
    沈大夫 说: 15:16:54
    ZTY8-90
    我 说: 15:19:37
    中国销售的液明珠是泰国生产的?
    沈大夫 说: 15:19:49

    我 说: 15:20:34
    我看网上销售的液明珠,有2种包装,这2种有什么不同?
    沈大夫 说: 15:22:16
    www.yemingzhu.net是液明珠的官方网站
    我 说: 15:24:03
    我看还有一个:http://www.yehuangsu.com/ 这个和你们有关系吗?
    沈大夫 说: 15:25:18
    没有
    我 说: 15:26:03
    它上面也写是瑞辉官方网站,到底哪个是呢?
    沈大夫 说: 15:27:57
    美国FDA生产许可证号:14-2-00648●美国FDA自由销售许可证号:14-2-00648-1-0015●美国辉瑞公司胶囊部泰国公司生产(京药)卫食证字(2008)第110000-JS0010号这个都是我们这边的相关证件证明。
    我 说: 15:30:07
    对方网站显示是:北京翰达成医药科技开发有限责任公司,你们的公司全称是什么?
    沈大夫 说: 15:30:46
    我们这边事北京翰达成医药科技开发有限责任公司。
    我 说: 15:31:28
    那么说那个网站盗用你们公司的名字?
    沈大夫 说: 15:32:28
    你可以让他们出示一下相关证件和证书、我们饿官方网站上都有显示证书证明的。
    我 说: 15:34:09
    你们网站上的卫生证书也不是你们公司的名称?

    感谢您的咨询,谢谢! 再见!


    没想到就这么结束了!

    用SSH Tunnel临时突破跨机房的限制

    http://www.54chen.com/c/94

    今天遇到一个测试机的环境要连通生产机的pgsql,后来用了SSH Tunnel,记录一下:
    在hostA中执行
    $ssh -N -f -L 9000:hostB:8080 user@hostB
    N 不用建立shell
    f 连线后在背景执行
    L 连接
    这样在hostB中执行localhost:8080相当于访问hostA,也就建立了B到A的信任连接,突破了限制。

    2009年5月6日星期三

    最近比较乱

    最近一阵比较乱,不像年初那么有头绪了。

    想掌握的东西、想学习的技术(不仅仅是技术)越来越多,越来越乱,不像当初都是有计划的,学习一项、掌握了,再进行下一项。

    最近心情也比较空洞,只能有这个来形容了,好像装的慢慢的,但一到电脑前,一下子什么都涌上来,不知道先执行哪项好,一下子又变空了。每次开始都重新整理一次,整理过多次,但是每次整理的结果都不一样,弄得最终的结果是什么都没有在进行,一气之下就是在电脑前玩游戏,好像这个最不用思考,简单、重复的执行,什么都不用思考。

    时间就在这么一天天的过去,计划列表上的事情一件都没有少下去,反而看到这个新鲜,看到那个有趣,计划列表上的任务越来越多,想删掉一些的心情都有了。

    可能是遇到的低谷了,要尽快的恢复过来。

    2009年4月29日星期三

    性能监控 以及 开发自动化 -- Java

    前一阵在找性能监控的工具,自己对Java比较关注点,因此在java上找到一些工具,比较著名的就是JProfiler,在Java1.5以后,在JDK中也带有一些性能监控的工具,如jconsole等,还有一些开源的产品,但是JProfiler分析的程度比较深,因此使用的效果相对好点。
    (十个最好的Java性能故障排除工具 : http://www.kuqin.com/developtool/20080721/11869.html

    在进行性能监控工具的查找中,发现问题的根源很多时候还是出在开发上面,在开发时对性能不重视,以为Java有内存自动回收(gc)就万无一失了,对Java的内存分配方式、回收方式都不去了解它,造成开发出来的程序问题一大堆。

    网上看到IBM有一个开发自动化的专题(以前看到过,但是没有这次这么有感触),要仔细的揣摩一下

    • CheckStyle 报告与项目预定的编码标准的偏离度。
    • CPD 报告代码重复。
    • JavaNCSS 可以帮助团队专注于更高级的代码复杂性领域。



    2009年4月27日星期一

    Tomcat遇到了“java.lang.OutOfMemoryError: PermGen space”

    Tomcat中新增了一些功能后,原来正常的程序,在运行一段后,发生了一下错误:
    Exception in thread "TP-Processor171" java.lang.OutOfMemoryError: PermGen space
    java.lang.OutOfMemoryError: PermGen space

    PermGen内存溢出。根据网上查了一下资料,发现这是sun JDK分代管理的一个问题 --- 当然,程序使用上也有讲究,但是程序上只能尽量避开这个问题,说解决的方式更换JDK,换成BEA JRokit。

    Permanent Generation space,是指内存的永久保存区域,用于存放ClassMeta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放InstanceHeap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APPLOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。 如果你的WEB APP下都用了大量的第三方jar, 其大小 超过了jvm默认的大小(4M-- 这个值各个地方写的不一样,没有搞懂,要确切,到JDK提供的官方去查)那么就会产生此错误信息了。 


    以下是网上的一些资料,
    ---------------------------------------------------
    问题已经查明,这个和程序编写有关系。

    当初不知道谁写的代码,当hibernate发生错误的时候,就重构一个hibernate的factory,每发生一次错误,就重构一次。这样每次重构的时候,都会造成PermGen的增长。把这个问题解决了,PermGen Size也没有溢出过。





    性能调试、测试工具

    性能对版本是否能给客户带来比较好的感受、是否能降低整个系统的投资,占据着相当重要的地位。

    有一个版本即将发布,在讨论时,对于程序的性能提了一下,在这里顺便做一下总结,对公司目前的所有产品,都考虑做一下性能的测试,以提高产品的服务能力。

    从公司开发的角度、测试的角度来看,大致需要以下一些调试、测试工具:

    1. Windows C++的
    2. Linux C++的
    3. Java的
    4. C#的
    5. 数据库的(Oracle & MySQL)
    6. Web性能的
      Web性能还包括安全方面的测试工具
    7. 操作系统的(以Linux为主)
    8. 网络方面的
    估计就是上面一些(可能会有遗漏),对以上的每一项,都需要多一下单独的讨论--- 自己比较关心Java性能工具、Web性能工具、数据库性能工具以及操作系统的性能工具(这个应该每个人都会)

    性能调试、测试工具,不仅需要了解机器的整体的性能,对于每个开发人员,必须要了解自己开发的程序的性能,单个进程的性能(目前还没有多进程程序)


    2009年4月22日星期三

    BugFree 2.0.2 指派人员支持多个邮件发送

    测试小组,每人负责某几个产品,开发人员要知道什么产品谁负责也是比较讨厌的。一个开发人员同时参与几个产品的开发(不同产品有不同的人员负责测试),而且开发人员更换的有时也比较快,又要重新培训也比较麻烦。因此一开始规定,将所有的测试人员邮件编辑成一个小组,开发人员版本提交的时候,发送到这个测试小组。测试人员收到邮件,如果是自己负责测试的产品就进行测试。


    一段时间用下来,平安无事。有一次客户又提出相同的bug,这个问题早已经解决过了,怎么客户还提这个问题。一路检查下来,发现公司的邮件不正常。

    原来开发人员发送邮件,发送给测试小组,测试小组相关人员收到邮件后会进行处理。但是现在负责该产品的测试人员没有收到这个邮件,造成了整个环节上的脱钩,无法联系起来。因此发送邮件通知版本发布还是有问题。现在内部的bug测试使用的是bugFree2.0.2,因此想使用bugfree进行版本提交,这样即使有邮件丢失,测试人员也可以通过检查bugfree工作记录重新拾起来。

    原本考虑使用bugfree发送邮件,发送到一个邮箱,测试人员都通过IMAP方式接收这个邮箱的邮件,但是公司内部使用的邮件服务器不支持IMAP服务(shit),只能通过修改BugFree来进行了。

    BugFree用的是Php开发的,从未接触过PHP,不过这些脚本式的语言应该可以依样画葫芦来进行处理。
    需要修改的地方有:
    1. 增加用户,可以输入多个邮件地址
    2.修改用户: 可以输入多个邮件地址
    3.可以往多个地址发送邮件

    看了一下Bugfree的源码,发现一个比较有趣的地方(觉得有趣,估计bugfree的一些功能根本没有使用到):
    1. 增加用户,检查邮件使用的是函数:sysCheckEmailFormat
    2.修改用户:发现直接在修改用户的函数中设置了正则表达式进行验证:xAdminEditUser
    3.发送邮件:在sysMail函数中,支持用逗号分割多个邮件地址。

    既然找出来的这几个地方,就依样画葫芦进行修改(谁叫自己不懂PHP)
    找到:sysCheckEmailFormat,将原来直接验证邮件的地方进行修改:
      原来: if(!eregi("^[ ......." , $EmailStr)
      修改成: $EmailList = explode(',', $EmailStr);
                       foreach($EmailList as $Singlemail)
                       {
                           if(!eregi("^[ ......." , $Singlemail) ....
                       }
          
    修改用户信息的地方,将直接判断邮件的地方改成用sysCheckEmailFormat进行验证就可以了。

    发送邮件的地方看了一下,在接收者的地方没有问题,Bugfree通过逗号进行了分割。但是抄送的地方没有进行判断,在CC的地方按照一样的方式,对每个人的邮件按照逗号进行分割,重新获取邮件地址。

    ----------------------------------------------------
    学习到的知识:
    1. PHP中的explode:将字符串变成数组,按照指定的字符进行分割
    2. 函数array_diff/array_unique,数组的方法,进行数据判别
    3. PHP的输出:在调试过程中,发生错误,但是不知道如何调试,找到的资料:
        通过syslog(LOG_NOTICE, 输出的内容)
        可以在/var/log/message中输出调试信息
    4.jsAlert:直接在页面上显示信息出来,没有仔细看这是Bugfree自己写的方法还是php的方法


    -----------------------------------
    调试过程中,遇到的问题:
    1. 原来以为通过分号分割用户的邮件地址,就可以向多个地方进行发送(类似于outlook等发送给多人的方式,实际使用下来不行,后来看到sysMail中用逗号分割,全部改成了逗号)
    2. 获取调试信息:
        修改了代码,但是结果不对,无法看到调试信息,上网找了一些资料,自己当前情况最方便的就是用syslog方式输出调试信息

    2009年4月18日星期六

    Gear Factory

    The Factory class is used to instantiate all other Gears objects. Using the create method, an application specifies the interface version it uses.

    Code Example:
    / Check whether Gears is installed. if (window.google && google.gears) {   // Instantiate Gears objects   var db = google.gears.factory.create('beta.database');   db.open(); }

    The supported class names are:

    classNameGears class created
    beta.databaseDatabase
    beta.desktopDesktop
    beta.geolocationGeolocation
    beta.httprequestHttpRequest
    beta.localserverLocalServer
    beta.timerTimer
    beta.workerpoolWorkerPool




    Gear Database API 使用

    Database API 提供铜鼓JavaScript使用的本地浏览器可以使用的数据。Gears使用SQLite数据库系统。

    数据存储使用 same-origin security policy,意思是在这个domian之外的web应用无法访问到这个数据。Gears包括SQLite full-text-search extension fts2.

    安全考虑:
      SQL语句通过execute()执行,并且应该用绑定参数的方式避免 SQL注入攻击(SQL injection attacks)。

    许可:
      这些API要求用户许可。如果你要客户化缺省的dialog,你要显示调用google.gears.factory.getPermission()

    Classes:
    Database
    ResultSet

    修改本地SQLite库
    SQLite通过Attache和Detach命令使用本地SQLite库。出于安全考虑,Gears禁止使用这些命令。将来在满足same-origin security policy情况下可以使用这些功能。

    Pragma设置
      SQLite的Pragma命令允许在不同的平台下进行一些设置。出于安全考虑,目前禁止使用。
      Gears使用的Pragma设置:
      Pragma encoding=“UTF-8”
      Pragma auto_vacuum=1
      Pragma page_size=4096
      Pragma cache_size=2048
      Pragma synchronous=NORMAL
     
    Full-Text Search
      Gears 包含 SQLite extension called fts2, for "Full-Text Search". fts2允许创建表,搜索Text数据。 fts2表创建:
     db.execute('CREATE VIRTUAL TABLE recipe USING fts2(dish, ingredients)');
     创建表recipe,字段dish、ingredients。所有fts2字段都是TEXT类型。表中的数据通过标准的SQL命令操作,如:INSERT/UPDATE/DELETE,和其他的表一样。fts2表有一个隐含的rowid字段,表现向唯一索引。

    ------------------------------------------------------------------
    基本使用:

    < type="text/javascript" src="gears_init.js">< /script>
    < type="text/javascript">
    var db = google.gears.factory.create('beta.database');
    db.open('database-test');  // 创建数据库
    db.execute('create table if not exists Test' +' (Phrase text, Timestamp int)');  // 创建表
    db.execute('insert into Test values (?, ?)', ['Monkey!', new Date().getTime()]); // 插入数据
    var rs = db.execute('select * from Test order by Timestamp desc');  // 查询

    while (rs.isValidRow()) { // 是否到记录结束
      alert(rs.field(0) + '@' + rs.field(1));  // 获取字段值
      rs.next();  // 移动到下一条记录
    }
    rs.close();  // 关闭数据库
    < /script>



    Gear 体系结构

    开发Gears程序,要按照离线程序体系结构开发做一些改变,

    独立的数据层(Isloating the Data Layer)
    普通的应用没有真正的数据层:



    第一步,要独立数据层:

    例如:如果Ajax也能够用通过JSON请求获取信息,要改成通过一个中间对象来获取数据。
    这个对象决定是从服务器上、本地、或者同时从这2者中获取数据。

    也可以考虑这个中间对象作为 data switch, 实现 Data Layer的接口
    第一步通过这个data switch向Data Layer获取数据

    第二步:如果增加了本地数据层,有Data switch进行切换:



    Modality(特征?形式?)
    最基本的离线使用的问题就是要确定Modality
    • Modal Application:相对于Online Modes,是很明确地离线使用,通过用户界面可以表现出来。用户很清楚地知道现在的使用模式,手工进行切换
    • Modeless Application:在online Mode和Offline Mode使用对用户是透明的,界面没有什么变化。用户不需要切换状态,是程序自动完成的。
    Modal:
      当在线使用,和后台服务器进行通讯;当离线使用,和本地服务器进行通讯。数据必须在切换模式的时候进行同步。

    Modeless:
     Modeless假设在离线状态下使用,或者随时都有可能离线。应用程序尽可能的使用本地数据(local store),并且不断地、小数据量通过后台服务和服务器进行数据同步。

    数据同步(Data Synchronization)

    有数种方式可以用在数据同步中,但是没有一种是适合任何情况的。最终选择的方案根据系统的不同而不同。

    Manual Sync:
    最简单的方式,有客户决定。可以通过将本地的所有数据进行上传覆盖服务器的数据,或者下载服务器上的数据覆盖本地的数据。

    要求: 数据量不能大。

    Background Sync:
       由应用程序在服务器和本地之间进行不断地同步。这个通过每隔一段和服务器进行通讯,让服务器push/stream数据到客户端(在Ajax术语中,叫做Comet)



    Google Gear Manifest 文件

    在Gear tutorial中的例子, Manifest包含以下内容:

    {
      "betaManifestVersion": 1,
      "version": "my_version_string",
      "entries": [
          { "url": "go_offline.html"},
          { "url": "go_offline.js"},
          { "url": "../gears_init.js"}
        ]
    }

    其中:
    version:定义一个版本的字符串,只要版本的内容不同,就会下载所有的enties中的内容 --- google文档上写这是一个已知的bug,目前无法做到增量更新

    entries: 所有需要下载在本地的文件,可以进行离线浏览的文件,除了最后一个文件外,其他用comma进行分割
      文件的地址可以是完整的带域名的方式,也可以是相对Manifest文件的相对路径

    要注意的:
    1. 确信你的机器上已经安装了Gear (通过gear_init.js可以验证)
    2.所有在Manifest中的文件必须URL正确,且存在可以获取到。Manifest文件和里面的URL在同一个Domain中
    3.

    2009年4月15日星期三

    Google Gear 基本使用方法

    Google Gear从例子上看,好像很容易使用(当然,仅仅是最基本的入门):

    首先通过例子的gears_init.js生成一个Google Gears对象:google.gears
    后面所有的操作通过这个对象进行。这个就直接抄gears_init.js实现,自己不用做任何处理了。

    对google.gears对象的判断:
    if (!window.google || !google.gears) {
        textOut("NOTE:  You must install Gears first."); --- 提示没有安装google gear,
      } else { ---- 安装了google gear,生成自己的localserver和store
        localServer = google.gears.factory.create("beta.localserver");
        store = localServer.createManagedStore(STORE_NAME);
        textOut("Yeay, Gears is already installed.");
      }

    其中的:STORE_NAME就是一个自己随意取的名字;

    MANIFEST的文件,在create store的时候使用到
      if (!window.google || !google.gears) { --- 判断是否安装了gear
        alert("You must install Gears first.");
        return;
      }

      store.manifestUrl = MANIFEST_FILENAME; --- 这个就是定义manifest文件名字的,而且mainfest的文件,要和当前的页面放在同一个目录中(如果没有设置目录的话)
      store.checkForUpdate();                                       --- 对store的创建更新

      var timerId = window.setInterval(function() {  --- 这是一个把更新的状态显示出来的脚本
        // When the currentVersion property has a value, all of the resources
        // listed in the manifest file for that version are captured. There is
        // an open bug to surface this state change as an event.
        if (store.currentVersion) {
          window.clearInterval(timerId);
          textOut("The documents are now available offline.\n" + 
                  "With your browser offline, load the document at " +
                  "its normal online URL to see the locally stored " +
           "version. The version stored is: " + 
                  store.currentVersion);
        } else if (store.updateStatus == 3) {
          textOut("Error: " + store.lastErrorMessage);
        }
      }, 500);  


    删除一个store也是相当容易的:
      if (!window.google || !google.gears) {
        alert("You must install Gears first.");
        return;
      }

      localServer.removeManagedStore(STORE_NAME); --- 删除,这个STORE_NAME就是上面创建时候的STORE NAME
      textOut("Done. The local store has been removed." +
              "You will now see online versions of the documents.");

    2009年4月14日星期二

    开发语言的选择

    昨天讨论后续的开发工作,讨论讨论,就讨论到开发语言的选择上了。

    现在的后台有一个系统使用Java+Jython做的,但是目前的技术负责是C++出身,一直认为Java的性能不行,对内存使用、内存管理有局限,一直排挤Java。领导呢对Python的某些功能比较青睐,又从网上找了一些的开源工具,可以节省开发难度,节省开发的工作量,因此想选择使用Python完成其中部分的工作 -- 对领导而言是比较重要的计算功能。

    为了这个问题,大家争论不休,意见难以统一。

    在这里也记录一下自己在会议上的意见:
    自己的意见就是: 采用哪种语言开发应该不是目前最关心的,而且效率不是现在唯一要考虑的因素,需要从以下各个因素上综合考虑:
    1. C++语言的效率优势已经不那么明显了:
       现在机器的性能上去了,原来C++效率的优势没有原来这么大了。而且随着语言的不断进化,语言本身的效率也在不断的提高,虽说C++的效率还是比较高,但是各个语言间的效率已经越来越接近了;
    2. 需要考虑工作进度、公司的人员配备:
      虽说C++语言在效率上还残存一些优势,但是C++的开发周期、开发的工作量,都相对较大 --- 从实际情况来说,这个还是比较客气的说法。每次出产品,C++开发的服务器,都是时间最长最长的,开发人员需要的技术、开发过程中的成本也是最高的,和目前的快速维护、快速增加功能的原则背道而驰。关键的部分(如只能唯一的服务器)、最为核心的部分要用C++开发,达到稳定、高效的目的,这个无可厚非,但是系统中所有的地方都用C++,在开发周期、开发成本上就无法接受;
    3. 发挥每种语言的优势:
      每种语言的产生,必定有其出现的道理,有其存在的理由、优势。在开发过程中,要发挥每种语言的优势,进行合理的搭配,达到快速有效的开发,这样才是最合理的配置;
    4. 体系结构优于语言的选择:
      现在的开发,尤其是后台支撑系统的开发,已经是体系上的竞争,架构体系的优劣已经远远超越语言的竞争了。
      体系方面,譬如简单的增加一级缓存,带来系统性能的提升、服务能力的提升、吞吐量的提升可能是数个数量级上的提升;而语言的不同,带来的可能仅仅是同一级别、同一层次上的提升;何况通过多种语言的协作,发挥各种语言的优势,不仅能够充分使用到公司目前的资源,而且使用到语言本身的优势,快速推出新功能,尽快的响应市场的呼声。开发语言相争和架构体系上比较起来,相对而言只是一个很局部的问题(目前在架构体系上,可以优化、可以提升的地方太多了)。
    最终的结果还是按照在原来的基础上,先完成功能,语言上的选择再议。

    GTD --Getting Things Done

    最近一阵狂热把工作搬到网上去,主要的原因还是有大量的工作需要在家里进行思考一下(周末不来公司,太远了,一来一回2个多小时,这些时间还不如在家里好好思考一下)。

    在网上工作,主要用到的还是google的日历以及google的文档,包括现在在看的google的code源码保留:当然,在google code上只放一些测试代码,公司运行的商业代码不放上去。

    在寻找网上任务管理的时候,看到有一个GTD的大家都挺推崇的(以前工作只能在局域网中工作,对现在的这些在线工具都孤陋寡闻了),GTD不知道是什么,在维基百科中查了一下:


    相关资源:
    http://www.chedong.com/blog/archives/000790.html 车东的blog,我比较喜欢的一个
    http://www.rememberthemilk.com 网上的DTD网站,评价很高


    维基百科中的注释:
    原来不打算抄的,后来看一下还是抄录过来比较好,以下是维基百科上的内容:

    GTD是英文Getting Things Done的缩写,是一种行为管理的方法,也是David Allen写的一本书的书名。

    GTD的主要原则在于一个人需要通过记录的方式把头脑中的各种任务移出来。通过这样的方式,头脑可以不用塞满各种需要完成的事情,而集中精力在正在完成的事情。

    目录

     [隐藏]

    [编辑]GTD是关于什么的

    和其他时间管理专家不同的是,Allen并不把重点放在设置任务的优先级。他提出制定出在各种环境下的任务列表,例如,制定一个需要打电话的列表,或者在市区才能完成的事情的列表。他也建议任何两分钟之内就能完成的任务应该马上做。

    GTD在心理上的好处在于使你需要完成的事情相关的信息易于保存,跟踪和获取。Allen认为导致很多我们在做事的时候碰到的脑力上的障碍的原因是前期的计划不足(举个例子,对任何项目我们需要弄清楚要达到什么目标,还有什么措施需要完成)。

    Allen认为我们的脑力上的“提醒系统”相当的低效,很少能够在恰当的时间和地点提醒我们需要做的事情。因此,把“下一步行动”根据场景分类存放在“可信的系统”当中,是一个能使我们在正确的时间得到正确的提醒的手段。在“GTD”中有很多个人的管理小技巧在实行Allen描述的工作流程中很有用的。

    一个很概括的对于Allen的书的内容的描述是对于任何事情都准备好:

    “把所有事情都从你的脑袋里弄出来。在事情出现,而不是在事情爆发的时候,就做好相关行动的一系列决定。以合适的类别组织好你的项目的各种提醒以及下一步的行动。保持你的系统更新和完整,充分地检查,使你在任何时候都能信任你的对于你正在做(或者不做)的事情直觉的选择。”

    [编辑]原则

    GTD的核心原则如下:

    [编辑]搜集

    把任何你需要跟踪或者记住或者做的事情记在Allen称之为‘水桶’的地方:一个收件箱,电子邮箱,磁带,笔记本,PDA,或者它们的组合。把你脑子里的任何东西都拿出来放到你的搜集设备里,准备好做下一步的处理。每星期所有的水桶都应该被至少清空一次。

    [编辑]处理

    处理你的收件箱要遵循一个严格的工作流程:

    • 从最上面开始。
    • 一次处理一项。
    • 不把任何东西放回收件箱。
    • 如果任何一项需要做:
    • 做(如果花的时间少于两分钟)
    • 委托别人完成,或者
    • 把它延期。
    • 否则
    • 把它存档以便查询,
    • 把它扔掉,或者
    • 使它成熟以便下一步的处理

    两分钟原则:任何事情如果花的时间少于两分钟,那么马上就去做。两分钟是一个分水岭,这样的时间和正式地推迟一个动作所花的时间差不多。

    [编辑]组织

    Allen描述了一个建议的列表集合,你可以用来跟踪需要关注的项目:

    • 下一步行动(Next actions) - 对于每个需要你关注的事项,定好什么是你可以实际采取的下一步行动。例如,如果事项为“写项目报告”,下一步行动可能会是“给Fred发邮件开个简短会议”,或者“给Jim打电话问报告的要求”,或者类似的事情。虽然要完成这个事项,可能会有很多的步骤和行动,但是其中一定会有你需要首先去做的事情,这样的事情就应该被记录在“下一步行动”列表上。较好的做法是把这些事项根据能够被完成的“环境”整理分类,例如“在办公室”,“用电话”,“在商场”.
    • 项目(Projects) - 每个需要多于一个实际的行动才能达到的生活或者工作中的“开放式回路”就是一个“项目”.使用跟踪以及周期性的回顾来确保每个项目都有一个下一步的行动进行下去。
    • 等待(Waiting for) - 当你已经指派了一个事项给其他人或者在项目进行下去之前需要等待外部的事件,就应当在你的系统当中跟踪以及定期检查是否已经可以采取行动或者需要发出一个提醒。
    • 将来/可能(Someday/Maybe) - 这些事情你需要在某个点去做,但是不是马上。例如:“学习中文”,或者“进行一个潜水假期”.

    对于跟踪你的预约和委托,一个日历也是重要的;另外,Allen特别推荐日历应该被用在他所谓的“硬工程”上:必须在某个特定的期限之前完成的事情,或者在约定的时间和地点完成的会议和约会.“待办”事项应该用在下一步行动列表当中。

    GTD的最后一个关键组织模块是归档系统.“Getting Things Done”书里说如果要用一个归档系统,那它必须得是简单易用和有趣。即使是一张纸,如果你需要用来记录参考信息,如果不属于你已经有的一个目录,也要有自己的文件组织方式。Allen的建议是你可以维护一个按照字母顺序组织的归档系统,这样可以比较容易快速的存储和提取你所想要的信息。

    Google的Gmail的用户可以用创建标签的方式来创建“待办事项”和“项目”,这种方式在Bryan Murdaugh的 “Getting Things Done with Gmail” [1]白皮书中有清楚的描述。它保留了很多GTD的相同概念,但是是在在线的电子邮件系统中实施。

    [编辑]检查

    如果你不至少每天或者只要你有时间就回顾检查,那么你的行动和提醒的列表将会变的毫无用处。以你当时拥有的精力,资源和时间,决定什么是对你来说最重要的事情,然后做。如果你倾向于拖延,你可能会老是做最容易的事情,避免那些难的。为了解决这个问题,你可以一个接一个地做列表上的事情,按照它们的顺序,就象你处理你的收件箱一样。

    至少以星期为周期,GTD要求你回顾所有你比较主要的“行动”,“项目”和“等待”的事项,确保所有的新任务或者即将到来的事件都进入你的系统,而且所有的事情都更新到符合最新的情况。Allen建议制作一个难题档案来帮助你更新你关于主要行动的记忆。

    [编辑]

    如果你把你的时间都花在组织工作、而不是做它们,那么这样的系统是不好的!David Allen的观点是,如果你可以把必须做的事情,让它变得简单、容易、有趣的话,那你就比较不会拖延、或者被太多的“开放性回路”所压倒。

    [编辑]工具和技巧

    A slice of '43 Folders'

    一个Allen推荐的工具是难题文件夹,用来组织你的GTD的文字工作(也被称为‘43文件夹’).12个文件夹用来表示每一个月,另外的31个文件夹用来表示每一天。这些文件夹用来帮助提醒你当天的活动。每天你打开表达当天的文件夹。你把所有的事项都拿出文件夹,然后把空文件夹放进下一个月里。这种处理允许你为自己保存提醒的硬拷贝。例如,如果你在这个月的12号有一个音乐会,你可以把票放在第12个文件夹当中。当12号到的时候,它就在那里等着你。

    [编辑]DIY Planner Hipster PDA

    这是一种用来执行GTD的纸本DIY范本,对于习惯用实体纸本计划的人来说,可作为另一种优质选择。[2]