h2's profile蓝天、白云、草地、你和我PhotosBlogLists Tools Help

Blog


    September 06

    Google的浏览器 -web dev的苦恼

    Google出了自己的浏览器Chrome,昨天下了一个,体验一下新的浏览器有什么独特的功能。不过现在唯一的感觉就是画面很漂亮,Tab Label 从 Quick Label 下面改成这个浏览器的最上面了,也许这也算是google告诉别人,我们是一个新浏览器吧。 至从前几天从公司听说了这个消息,Chrome就成为了最近大家讨论的一个话题,而对于web开发的dev来说,这却不是一个好消息。现在IE和FireFox已经使web的dev在写一个界面的时候就必须处理两个浏览器,当然这里还不包括在国内不算流行的Mac浏览器。如果以Google的知名度,以及现在Chrome的占有率的增长,也许明天dev就得三套代码了,真希望浏览器产业赶紧统一起来,呵呵,对于开发的dev来说,这种“垄断”对开发来说是一种解脱啊,哈哈。
    April 21

    Algorithm

          好久好久没有写了,只从弄了个离线版的编辑器zBlogWriter以后,所有的blog都是写了一半,这时候想想,虽然用在线编辑器的风险大了些,但至少我可以写出两篇完整的blog啊。呵呵,工具,为生活带来方便,但方便的背后又隐藏着更多的东西。工具需要“善待”。
     
          算法——程序员用了一个专题来讲这个“曾经”被计算机人认为最为重要的一个东东。但随着编译器的不断更新,硬件速度的不断提高,慢慢的“消失”在我们这代程序员的视野之内。我曾经也误认为:“硬件的速度已经非常之快,我们在编写程序的时候,根本不需要考虑算法的好与坏,我们真正需要考虑的是前期需求分析的完整性、整个软件架构的层次性、数据库设计的合理性与测试过程中的校验性。”处于这种考虑在很长一段时间里我看的书是软件工程、具体工具语言的入门与深入。我苦苦的正在在其中,感觉书如同一座永远逾越不完的高山,过程是如此之累,而我却乐此不疲。说到这里我突然想到,我之前竟然弄不清楚算法到底是什么东东(唉,我都不好意思说,我写的论文竟将叫做“XXXX的算法研究”),幸好我还是一个程序员,但我看到“二十世纪最伟大的十个算法”的时候,我已经明白算法就在我身边,是那些最基础的、我们时时刻刻在用到的也可以说经典的已经流淌在我血液的东西。转回来,前一段时间在弄报告的时候,老朱&老蔡在改数据库查询的一个语句,看他俩不停的改,看哪个速度能快些,当然,如果速度快了当然会损失一些其它的东东了(比如一些安全机制)。当时我并没有太注意这件事情,也没有把其放在心上,今天回想起来,这不就是算法嘛。我的论文是“SMS系统瞬时到达海量数据情况的ED算法研究”这是什么,这不也是为了解决一个问题所选择的最好方法嘛。
     
          编程 = 算法 + 数据结构。
     
          我决定要重新开始学习,正如那句经典之中的经典:“基础很重要”。列个表吧:数据结构,操作系统,数据库基础。当然在看这些之前我要先把敏捷软件开发这本书看完。嘿嘿。
    February 16

    bloglines——今天我迈进了第一步

          当一天天在网上闲逛的时候,我时不时的总会问自己在干吗!当每次呆坐在电脑前而不知道干吗的时候,我总会问自己到底是学什么的!当Web2.0被充斥在各大杂志、网站的时候,而我对其却是不知所云的时候,想一想作为一个IT行业“工作者”,也许这就是悲哀吧!
     
          一年前我听说了weblog,半年前我看到实验室俺同学的blog,三个月前开了我自己的blog,一个月前我第一次听说Web2.0,昨天我看完了杂志上对Web2.0的全部介绍,今天我上网在Bloglines上注册了自己的RSS阅读器。有时候我不得不佩服自己的敏感性是如此之“强”,而且是作为更新速度最快、竞争性最强的IT工作者。
     
          当Web2.0作为一种思想在网络中迅速成长起来,当“微信息”不知不觉的从我们每个人手中创造出来,爆炸式的传播在短时间里渗透到网络中的各个角落,不得不让我为其鼓一次掌。虽然今天我才往其迈入了一步,但其所给我带来的冲击却让我感到了一丝窒息和无限的兴奋。
     
          今天,原打算是下载一个RSS(Really Simple Syndication)阅读器,查了iBlog, NewsFire, and NetNewsWire 2.0 beta三种终端软件的评测。同学推荐使用bloglines这种在线阅读器,比较适合活动在多机间的人,在网上看了bloglines和toPim两种在线阅读器的比较,感觉上bloglines的使用范围很大。
    推荐两篇关于bloglines的文章给大家:
    1、Steve Rubel写的Ten Bloglines Hacks
    2、betterday里的Using Bloglines(个人感觉这篇文章写的很好,描述的比较详细)。
     
    新学习了两个名词:
    1、Podcast(think of Podcasts as audio blogs),想了一会还是不知道用中文怎么描述。
    2、bookmarklet:A bookmarklet is a small JavaScript program that can be stored as a URL within a bookmark in most popular web browsers。解释的很清楚:)
     
    December 12

    Google™ Code Jam 程序

            int len = KeyStrokes.Length();
            int result = 0;
            if( len > 50 || N < 1 || N > 100 )
                    return result;
            int pos_e = KeyStrokes.Pos("E");
            if(pos_e)
            {
                    result = N;
                    do
                    {
                    KeyStrokes = KeyStrokes.SubString(pos_e+1,len-pos_e+1);
                    pose = KeyStrokes.Pos("E");
                    }while(pos_e);
            }
            int pos_h = KeyStrokes.Pos("H");
            if(pos_h)
            {
                    result = 0;
                    do
                    {
                    KeyStrokes = KeyStrokes.SubString(pos_h+1,len-pos_h+1);
                    pos_h = KeyStrokes.Pos("H");
                    }while(pos_h);
            }

            len = KeyStrokes.Length();
            for(int i = 1; i<=len ;i++)
            {
                   AnsiString c = KeyStrokes.operator [](i);
                   if(c =="L")
                   {
                            result = result==0 ? 0 : result-1;
                   }
                   if(c =="R")
                   {
                            result = result==N ? N : result+1;
                   }
            }
     
          对照了一下引用当中的程序,感觉他的程序更加简洁。我没对比两个程序的复杂度,当看到这个题目的时候,第一感觉就认为要从最后一个E或者H开始计算,虽然程序复杂了些,第一感觉还是认为这样的效率会高些。
          记得最开始学习编程的时候,认为编程序的第一要点就是效率高。那时候,为了一个简单的程序,翻来覆去的思考其最优性。也许这是那个年代,或者说是顺序编程时代人们最求的境界。随着学习的深入,渐渐的学习到了面向对象语言,那是给我的第一感觉应该是,程序中,代码精简程度不是第一位,第一的位置已经变成了,程序的可继承性。一系列的名词进入我们的视线,接口:这个面向对象中最底层,也应该是最关键的概念,他增加了程序的灵活性,但为其付出的代价却是代码量的增加。
          不说了,Apllo已提醒我到了回寝室的时间了。

    Google™ Code Jam

          从老蔡的blog里看到,原来Google编程大赛今天开始。越来越发现自己不像个程序员,真是符合这句话啊:“外面的世界很奇妙,外面的世界我不知道。”也许应该用悲哀来形容自己吧,怎么连自己的一亩三分的都看不到啊,不说了,越说越伤心。
          了解了一下这方面的内容,搜到一个哥们的blog里记录了关于Google™ Code Jam的一些练习题,算是盗取一下吧,放到自己的blog里,算是激励一下自己吧。我只把题目拿过来,至于最后的实现编程嘛,我想还是自己做一下吧,要不也太对不起自己了。不过现在还没有编那,等编好了不上吧:(
     
    Google™ Code Jam - 中国编程挑战赛1000分练习题
     

    Problem Statement
        
    When editing a single line of text, there are four keys that can be used to move the cursor: end, home, left-arrow and right-arrow. As you would expect, left-arrow and right-arrow move the cursor one character left or one character right, unless the cursor is at the beginning of the line or the end of the line, respectively, in which case the keystrokes do nothing (the cursor does not wrap to the previous or next line). The home key moves the cursor to the beginning of the line, and the end key moves the cursor to the end of the line.  You will be given a int, N, representing the number of character in a line of text. The cursor is always between two adjacent characters, at the beginning of the line, or at the end of the line. It starts before the first character, at position 0. The position after the last character on the line is position N. You should simulate a series of keystrokes and return the final position of the cursor. You will be given a string where characters of the string represent the keystrokes made, in order. 'L' and 'R' represent left and right, while 'H' and 'E' represent home and end.
    Definition
        
    Class:
    CursorPosition
    Method:
    getPosition
    Parameters:
    string, int
    Returns:
    int
    Method signature:
    int getPosition(string keystrokes, int N)
    (be sure your method is public)
        

    Constraints
    -
    keystrokes will be contain between 1 and 50 'L', 'R', 'H', and 'E' characters, inclusive.
    -
    N will be between 1 and 100, inclusive.
    Examples
    0)

        
    "ERLLL"
    10
    Returns: 7
    First, we go to the end of the line at position 10. Then, the right-arrow does nothing because we are already at the end of the line. Finally, three left-arrows brings us to position 7.
    1)

        
    "EHHEEHLLLLRRRRRR"
    2
    Returns: 2
    All the right-arrows at the end ensure that we end up at the end of the line.
    2)

        
    "ELLLELLRRRRLRLRLLLRLLLRLLLLRLLRRRL"
    10
    Returns: 3

    3)

        
    "RRLEERLLLLRLLRLRRRLRLRLRLRLLLLL"
    19
    Returns: 12

    This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.

     

    题目引用处: 小鸡的小车

     

    November 17

    浅谈排队论(一)

          看了几天的排队论,对其有了些粗浅的理解。排队系统是由三部分组成的:输入过程,排队规则和服务机构。
          首先要研究的应该是输入过程,一个系统,在一个时间点上,顾客的到达率大于顾客的离开率,也就是当一个顾客到达以后,服务机构不能马上为其服务。也只有在这种情况下,才会出现排队的可能性,我们也才会设计出一个调度算法来处理那些到达到而服务机构不能为其服务的顾客。这时就出现一个问题,我们要了解每个顾客到达服务机构的时间,而相对于系统来说,其主要关心的是相邻两个顾客之间的时间。由于凭借经验我们可以得出顾客到达时间的概率分布,从其便可以推导出相邻两个顾客到达时间的概率分布。在了解相邻两个顾客到达时间间隔大概率分布的前提下,关键性的任务是我们要通过数学期望,得出顾客到达的强度值,为下一步进行仿真做好最初的准备。
          当我们掌握了顾客访问的概率分布与到达强度,这样我们就会通过计算机的随机函数生成一组随机数,让其进行数学变换后得到符合先前我们得出的相邻两个顾客到达时间间隔的概率分布的数据,用这个变换后的数乘以到达强度就会得出相邻两个顾客到达的时间间隔。到这里,我们仿真模型的第一步就算做好了。
          在这里的关键点我认为有两个,一个是通过数学期望求出顾客到达到强度值,另一个是通过数学变换让生成的随机值变成可用的相邻顾客到达的时间间隔
         
    今天就写道这里,思路还不是很清晰,不过希望能通过写blog的方式整理一下思路。以前每写一篇都会花费很长时间,想从今天开始,锻炼一下自己,让每次写作的时间控制在半小时之内。
    November 14

    初始敏感性

          这一段找了一些关于排队论的书籍、论文在看。因为要以现在这个项目为背景,按排队论来抽取出一些其特性。
          准备工作已经开始一段时间了,但是效率一直都不是很高。由于以前从未涉及过这个方面,对其只是有个初步印象。感觉排队论,文应如其名,研究的无非是设计出一些排队的优化方案,提高排队的执行的效率而已。早期也就直接进入到查看论文,想按照目前系统的一些特有的规则,翻阅以往论文,快速的定位出一个恰当地切入点。可没有预料到的是,刚刚阅过论文的绪论,步入到正文,就被那纷繁的名词,公式,各类符号弄的冥冥不知所在。无奈中,只得返回到基础知识的从新学习。
          早些时候,大概是十一期间,看了一些关于软件总线的相关资料。那时候,进入角色的数度就非常之快,大约3天的时间,看来两篇论文,了解了一下周边的热点。很快找到切入点,进行到深度,广度扩展。可是深入进去后,却感觉如陷入了汪洋大海般,找不到边际。想想应该是由于题目比较大,让人可以从任何一个角度切入进去,但一点进入,就会发现其覆盖之广,涉及之深,盘结之密。
          最开始设立的目标都是一样,要想达到的结果也是一样的。不一样的是两个的初始敏感性,一个是有一定的基础,会轻易的切入到实质内容之中,但正是因为切入的快,进入后就会快速的扩展,而导致面的范围变大,而无暇往深度发展。而另一种是没有基础,很难找到切入点,会长时间的游荡在表层之外,以至于导致目标的偏离。但一旦找到切入点,就会快速的奔入主题,和所有的背景充分结合。两者在初期所需要、完成、确定的有很大的差异,一个需要在扩展的时候控制在一个有效的范围之内,属于是飘在高层,另一个则应该尽可能广的扩展出去,属于扎在底层。 而无论是哪个的初期敏感性都会对中期的拓扑可复制,后期的收敛起到决定性的作用。
          我两次准备都做的不是很好,以至于两个都浪费掉大量的时间在早期进行“试错”,虽然这不是随机的,但确给了我同样的结果,让我能够仔细的分析、总结一下。
     
     
          夜已经很沉了,我已不敢连续的敲打键盘。
          房间很静,只有显示器中发出一束光亮。
          也许深思需要在静夜中,
          正如连续的思路需要在间断地敲打而出。