赵翔鹏的Blog Xiangpeng's Thinkpad

29九/080

效率极低人群之七大习惯(转载)

效率极低人群之七大习惯

By Henrik Edberg

 

  与通常所列举的应该培养的有益习惯不同,本文在此举出的是我们最好避免的7种习惯。

   就像寻找对你有益的习惯一样,寻找妨碍你的习惯同样重要。这7种习惯中大多数都可能会轻易成为你日常生活的一部分,使你难以察觉它的存在(或者它如何影 响到你)。我曾经略微尝试了这些习惯,结果毫无疑问,那些重要的事情没有几个可以完成。同时我也要添加说明的是,这只是在生活中你可能形成的影响效率的主 要的7个习惯,我很确定绝不仅仅是这些。

 

    1、缺席。

  

 也许你曾经听过伍迪·艾伦所说的这句话:

   “百分之八十的成功来自于出席。”

 

    更多的出席——这是在生活中你可以保证更多成功所做的最大也是最简单的事情之一,无论是在你的社交生活中,你的事业上还是你的健康方面。如果你想要改善你的健康状况,一个最重要也是最有效的事情就是在每次你该出席时出现在健身房里。

 

    也许天气会不好,也许你会不想出门,也许你有一大堆其他必须要做的事情。但是,如果即使你在积极性不高时仍然继续出现在健身房里,那将比你呆在家里的沙发上放松要有效的多。

 

    我想这个也可以推及到生活的其他领域。如果你每天都坚持写作或绘画,你就会快速的得到提高。如果你更多的出门你就可以遇到更多的新朋友。如果你参加更多的约会,你遇到心上人的机会就会大大提高。仅仅只是更多出席就会使你的生活大大不同。而缺席却会使你毫无收获。

 

    2、拖拖拉拉。

 

      为了简化,我将最喜欢的3种摆脱拖拉情况的方法列举如下:

 

    -吞食青蛙。也就是说在一天的最开始就完成那些最艰难最重要的工作。早上良好的开始会让你一天都保持高昂的情绪和积极的动力。这通常会使你这一天都十分高效。

 

    -你如何吃掉一头大象呢?不要打算一口吃成胖子,这会使你感到过多负担以至于产生拖延的念头。把一项工作分为若干可付诸于行动的小步骤,然后仅仅关注第一步直到把它完成,接下来再继续下一步。

 

    -说服自己。我发现这种向导型调整十分有效。就在我花了20分钟躺在床上反复默念在这几天里我都十分高效之后,我就不再会陷入拖拉的情况或者浏览15个我喜爱的网站寻找更新信息的必要。

 

    3、做一些无关紧要的事情。

 

    除了拖拖拉拉以外,你最容易陷入的不良习惯之一就是忙于一些无关紧要的事情之中。

 

    为了提高效率你也许需要某种时间管理方法。它可能会是一件极为简单的事情,比如在一天的开始使用80/20法则。80/20法则,也就是我们通常所熟悉的帕累托法则认为, 80%的收获源自20%的努力。所以为求高效你应该将你精力的大部分集中在那些极少数重要的事情上。

 

    当使用这个法则时你只需按优先顺序写下这一天你需要做的3件最重要的事情,然后从头做起。即使你只能完成其中的一件事,你仍然完成了今天最重要的事情。也许你也会偏爱其他诸如GTD等方法。但是无论你如何组织工作,最关键的还是寻找那些最重要的工作,这样你就不必花费几天,几个星期甚至几个月的时间去忙于那些并不是很重要的事情。如果这些事情无关紧要,那么即使你快速的完成它们也是没有多大用处的。

 

    4、多虑。

 

    因为多虑而很少采取行动。陷于无穷的分析之中只会使你虚度光阴。行动之前加以思考是没有错的。做一些调查研究,制定一个计划,探究可能存在的积极以及不利因素。

 

    但 是强制性的反复思考就会成为另外一种浪费时间的做法了。在尝试之前你没有必要去从每一个角度检查每一件事情。而且你也不可以等到一个最完美的时间再去做 事,因为这样的时间从来不会出现。如果你继续这样思考就只会使自己陷的越来越深,从而使采取行动变得越来越难。相反,虽然思考在一定程度上对你有所帮助, 但你现在需要做的就只是停止思考,然后去做那些你应该做的事情。

 

    5、凡事过于消极。

 

    当你凡事都从消极方面考虑时,你的积极性就会被大大打击。你会发现到处都是问题和错误,而这些问题是本不存在的。你抓住细节不放。如果你想要寻找一个不做某事的理由,这当然没有问题。而当你从一个消极角度看问题时,每次你都可能找出十个借口。

 

    因此你几乎一事无成。你向任何愿意倾听的人诉苦(也许很多人并不想听),抱怨你的工作,生活和领导有多么的差劲。你的生活取决于你如何看待这个世界,这已经成为一个能够自我实现的预测。

 

    对 此的一个解决方法就是了解消极方面的限度,认识到你的消极思考并不是这个世界的真实写照。然后不妨尝试一些其他的角度。举例来说,你可以尝试着培养一下凡 事从更为积极和乐观的角度思考的习惯,这会对你大有帮助。通过这种方式,你也许就会开始尝试这种积极性的挑战。这并不容易,然而如果你接受了这种挑战,连 续7天都只从积极方面思考,你就会突然意识到你看问题的角度和想法是如此深刻地影响着你对世界的理解和你所得到的成果。

 

    6、固执己见,与世隔绝。

 

    人们很难去承认自己的想法不是最佳选择,因此你越来越执着于自己的想法,变得闭目塞听。这会让你很难取得进步,比如说效率就会很难提高。在这种情况下,即使认真思考改变人生的可能性都会变得很难。

 

    显然,解决方法之一就是打开心胸。开阔视野,从他人和自己的错误中汲取教训,从书籍等资源中获取知识。与任何事一样,这事说起来容易做起来难。正如前面所说,对此我的建议就是认识到你的知识领域毕竟是有限的,而你做事的方式也会存在不足。那么不妨就尝试一下新事物吧。

 

    而我的另一条建议就是,阅读一下埃克哈特·托利的《新天地》,特别是有关Ego的章节。正如托利所建议的,如果你不再像Ego那样思考,你就会更加容易接受新思想,抛弃那些已经无用的旧思想。另外我想要补充说明的就是:不要迷信书本,也不要盲目追求新的信息,否则你就会成为一个沉迷于自我帮助的人。在行动中运用那些新信息和你学到的事情,然后加以尝试。

 

    7、持续信息过剩。

 

    信息过剩并不是说你过多的阅读,我所指的是所有输入信息的过剩。如果你让所有的信息都涌进大脑,这当然会导致难于清晰思考,因为刺激源太多了。以下就是这种习惯可能会存在的弊端:

 

       -你所接受的一些信息也许会是消极的。媒体和周围环境会因种种原因提供一种消极的信息。如果你没有根据需要对信息加以选择,也许你就会陷入消极之中,从而影响到你的所思,所感,所为。

 

       -这会使你急于追赶当今发生的事情,然而每时每刻都有十几件事同时发生,想要追赶上它们几乎是不可能的事情。你的生活会因此充满压力。

 

       -如果你持续被信息轰炸,并且还试图将所有信息分类,那么你将很难做出决定并采取行动。就我个人而言,如果我得到过多的信息,就会造成某种形式上的瘫痪,一事无成。或者你会被这种习惯所困,终日急于忙碌在一些非重要的事情上。

 

    为了可以集中精力,清晰思考并付诸行动,你就需要在吸取信息时更有选择性。当你工作时尽可能的避免那些分散注意力的事物。关掉电话,断开网络,关上大门。你就会不可思议的发现,当你没有每隔五分钟就被打扰一次,没有机会因浏览RSS-feeds或喜爱的网站而拖延时,居然可以完成这么多的事情。

 

    现在并不是说我建议你们停止阅读所有的博客或报纸。但是一定要清楚哪些是你真正想要阅读的,哪些只是用来打发时间的。同时你也可以查看其他开阔性信息的领域。

 

    比如说,你没有必要陷入所有来自周围环境的消极情绪。如果周围的所有人都在拖延或者焦急的忙于各种非重要的事情时,你会很容易被这种情绪所影响。如果你有一扇心灵之门,关上它而去关注更为重要的事情,这会是个不错的主意。

8九/082

用VSTO 2008写一个Outlook 2007插件

VSTO是微软的Office开发框架,基于.Net。跟以前的VBA宏相比,功能更强,优点很多,而且可以在Visual Studio里面用。我用VSTO做了一个Outlook插件(Addin),模拟了Gmail的“存档”按钮。

为什么做这个?

我喜欢Gmail的“存档(Archive)”按钮,它的功能很简单,就是把选中的邮件(一般是已经看过的邮件)移动到一个叫“Archive”的文件夹里。这样做的好处是可以保持收件箱(Inbox)里的邮件比较少(留下的都是要用的),看起来比较干净,而且载入的速度也快(以前我的Outlook收件箱里有5000封信,每次打开都很慢)。

虽然Outlook也很强大,虽然我也可以建一个“Archive”文件夹,把看过的email用鼠标拖拽过去,但这其实很麻烦,稍不留神就丢到错误的文件夹里了。所以我就花了些时间做了这个小程序。

实现

1. 首先在VS 2008里建一个Outlook 2007 Addin工程,在ThisAddIn类中加了几个成员变量:

        private Office.CommandBar archiveToolBar;
        private Office.CommandBarButton archiveEmailButton;
        private Outlook.Explorers selectExplorers;
        private Outlook.MAPIFolder inBox;
        private const string ARCHIVE_FOLDER_NAME = "Archived emails";

2. 加一个Toolbar,放一个"Archive"按钮进去。

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            // Get inbox reference
            inBox = this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            // Add toolbar
            selectExplorers = this.Application.Explorers;
            selectExplorers.NewExplorer += new Outlook
                .ExplorersEvents_NewExplorerEventHandler(newExplorer_Event);
            AddToolbar();
        }
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
        private void newExplorer_Event(Outlook.Explorer new_Explorer)
        {
            ((Outlook._Explorer)new_Explorer).Activate();
            archiveToolBar = null;
            AddToolbar();
        }
        private void AddToolbar()
        {
            if (archiveToolBar == null)
            {
                Office.CommandBars cmdBars =
                    this.Application.ActiveExplorer().CommandBars;
                archiveToolBar = cmdBars.Add("Archive Email",
                    Office.MsoBarPosition.msoBarTop, false, true);
            }
            try
            {
                Office.CommandBarButton button_1 =
                    (Office.CommandBarButton)archiveToolBar.Controls
                    .Add(1, missing, missing, missing, missing);
                button_1.Style = Office
                    .MsoButtonStyle.msoButtonCaption;
                button_1.Caption = "Arch&ive";
                button_1.Tag = "Archive selected email";
                if (this.archiveEmailButton == null)
                {
                    this.archiveEmailButton = button_1;
                    archiveEmailButton.Click += new Office.
                        _CommandBarButtonEvents_ClickEventHandler
                        (ArchiveButtonClick);
                }
                archiveToolBar.Visible = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

3. 响应Button click事件,代码如下:

        private void ArchiveButtonClick(Office.CommandBarButton ctrl, ref bool cancel)
        {
            // Make sure we are at "inBox"
            Outlook.Explorer activeExplorer = this.Application.Explorers.Application.ActiveExplorer();
            if (activeExplorer.CurrentFolder.FullFolderPath != inBox.FullFolderPath)
            {
                MessageBox.Show("Please do archive operation in " + inBox.Name);
                return;
            }
            // Get "archive" folder
            Outlook.MAPIFolder archiveFolder = null;
            try
            {
                archiveFolder = inBox.Folders[ARCHIVE_FOLDER_NAME]; // ARCHIVE_FOLDER_NAME is a const string I defined.
            }
            catch (Exception ex)
            {
                inBox.Folders.Add(ARCHIVE_FOLDER_NAME, missing);  // Create a new folder if not exist.
                archiveFolder = inBox.Folders[ARCHIVE_FOLDER_NAME];
            }
            // move selected items to "archive" folder
            Outlook.Explorer activeExplorer = this.Application.Explorers.Application.ActiveExplorer();
            foreach (object selectedItem in activeExplorer.Selection)
            {
                try
                {
                    Outlook.MailItem moveMail = selectedItem as Outlook.MailItem;
                    if (moveMail != null) // TODO: && movemail is in "inBox"
                    {
                        //string titleSubject = (string)moveMail.Subject;
                        //if (titleSubject.IndexOf("Test") > 0)
                        moveMail.Move(archiveFolder);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

在自己的机器上编译运行这个小程序后,Outlook就会自动加入这个插件,以后每次启动Outlook都会运行。不过,要想做个安装包在别人机器上运行,可就麻烦了。这里有个“简单”部署教程 Update: VSTO 2008里,部署超级简单!

部署

VSTO 2008新增了ClickOnce功能。 只要右键点项目,选“publish”就可以生成安装文件,超级简单!这篇文章里有几个截图。

总结

VSTO挺好用,什么时候给IE写插件也能用.Net就好了。MS Office在不断进步,Open Office,WPS Office貌似永远都赶不上啊……

资料

VSTO for Mere Mortals,讲VSTO的一本入门书,适合入门,不过不详细。

MSDN里有好多how to小例子,值得看看。

30八/086

博客界面改版了~

总觉得原先那个模板看起来比较灰暗……今天换了个模板,现在跟以前xiang.blog.edu.cn的风格比较接近了。^_^

其实换模板是挺麻烦的一件事,有不少细节要微调,比如字体大小,RSS订阅链接的颜色,等等。还好Wordpress的php模板代码读起来很清爽,很快就能找到需要修改的地方。

以后有时间的话再把原先博客的文章导入到这里吧。

Update: 刚才试着导入了一些,评论暂时没法导入,还有就是经常会有一篇文章只能导入一半,现在还不知道为什么……

分类: 心情 6 评论
30八/08

如何用Visual Studio 2008和Sql Server 2005 Express写一个数据库程序

装了Vista,SQL Server 2000不能用了。那就用Visual Studio自带的sql server express试试吧。没想到还挺难上手的,配置很麻烦。花了一晚上时间,终于配好了,下面是过程记录。

关键字:教程,配置,例子

一、安装

装完Visual studio和所带的sql server 2005 express之后,还要装如下的东西:

为了便于管理,你还需要去下一个管理器SSMSEE:
http://download.microsoft.com/download/1/1/0/110d908f-c445-4523-b939-220c7d135f3d/SQLServer2005_SSMSEE.msi
(注意:在vista下一定要run as administrator!步骤是,先启动一个admin权限的cmd窗口,再执行.msi程序,否则安装失败)

Northwind数据库示例:(从Sql Server 2005之后,northwind就“消失”了,必须自己下载)
http://www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en
安装.msi文件后,到C:\SQL Server 2000 Sample Databases下执行相应脚本即可。

SQL Server 2005 Books Online文档:(153MB)
http://technet.microsoft.com/en-us/sqlserver/bb428874.aspx

测试一下:在vs 2008的cmd prompt下执行sqlcmd命令,启动文本界面。
(注意大小写!-S,不是-s)

D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlcmd -S .\sqlexpress -E
1> use northwind
2> go
Changed database context to 'Northwind'.
1> select * from employees
2> go

最后,修改sql server express的配置:

1、开启sql2005远程连接功能:
配置工具->SQL Server 外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Database Engine 节点,先择"远程连接",接下建议选择"同时使用TCP/IP和named pipes",确定后,重启数据库服务.

(不开的话,很可能Visual studio连不上数据库。)

2、登陆改为混合模式:
打开management studio管理器->以windows方式连接并进入数据库->右键点击你的数据服务器->属性->security>选中Sql server and windows Authentication

3、新建Sql server方式的用户名和密码:
management studio管理器->security->右键点击logins->new login...->选中sql server authentication->设置login name 和password(confirm password)
最好去掉“enforce password expiration”前的小钩,否则每次登陆都要修改密码。
/*
management studio管理器->windows Authentication>new query>sp_password null,'sa123456','sa'
这样就设置了一个用户名为sa ,密码为:sa123456的用户,下次在登陆时,可以用Sql server方式,
用户名为sa ,密码为:sa123456的用户进数据库了.
*/

4、做完上面三步后,这样写连接字符串就可以顺利进入数据库了(server=.\\sqlexpress;uid=用户名;pwd=密码;database=master")。

5、在configuration manager中打开sql server browser服务。否则visual studio无法自动发现数据库名。

注意,server不能写=local!必须用“.”

二、写一个数据库程序:

1、在visual studio中Add connection,有两种方式:

* 文件方式
可以选Sql server database file,然后在
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data下面打开northwind.mdf
(注意:vista中,要以admin身份运行visual studio!否则没有权限打开数据库。)

* 数据库方式
用sql server的标准data source模式连接数据库,一开始不知道为啥总是看不到数据库列表。后来发现:必须打开sql server browser服务。该服务默认是关闭的。

2、写程序

最简单的方法,只要把某个data table拖到form上松开就可以了,VS会自动帮你配好datasource, dataset, tableadapter等一大堆控件。参考这个视频教程(MSDN上有很多类似的视频小教程,很不错)。

或者参考Visual Studio自带的例子程序,在\Program Files\Microsoft Visual Studio 9.0\Samples\1033目录下,是一个zip文件。(不好找啊!)这里面的例子都非常好。

最后,Beginning C# 2005 Databases:From Novice to Professional 是一本不错的书,特别是前两章。《Beginning C# 2008 Databases》似乎还不如2005讲的好。

26八/083

Singularity:基于形式化方法的操作系统?

Singularity是微软研究院(Redmond)做的研究性操作系统,设计目标是dependable,trustworthy的OS,用了很多formal methods的技术,现在已经出了v1版。

看到Singularity的消息,很多人的第一反应是:这个会取代Windows吗?我认为暂时不会。如同开发者所说,it's a Journey not a Destination。这只是一个research性质的prototype OS,没考虑实用,完全没有考虑向后兼容性。但是,Singularity采用的很多概念都是值得我们思考的。其实Singularity在两三年前就陆续有一些paper发出来了,只是现在才进入大众的视线。

InfoQ上有一篇介绍Singularity的不错文章。建议也看看这篇已发表的paper:Singularity: Rethinking the Software Stack。读了之后感觉很震撼:原来OS还可以这样做!

下面是paper中的一些highlight:

  • Singularity的绝大部分是用Spec#写的,是C#的一个变种。
    (天哪,用managed code写操作系统?garbage collection不是非常会影响性能吗?)
  • Software Isolated Process(SIP):所有的进程都跟kernel放在同一个地址空间里,靠软件验证,而不是硬件保证地址访问的正确:任何指针都只能指向进程拥有的内存,不能指向别人的内存。因为减少了kernel mode/user mode的切换,减少了context switch,所以极大地提高了性能。根据paper里的统计数据,Singularity中create process,create thread的速度比Unix, Windows都高了一个数量级。(garbage collection的影响看来不是那大。)
  • 基于通道的Contract:看到了进程代数中熟悉的通道概念,还有c!, c?符号。进程之间的通讯完全通过通道,而不是共享变量。据作者说,这借鉴了Web service verification的思想,做一些static conformance checking,让compiler来确保程序(Web server,device driver……)按照预先设计的protocol运行,太牛了。(Tony Hoare提出的Grand Challenges其中就包括verifying compiler)而且,paper中还举了一个channel传channel的例子。(pi演算的实际应用?)
  • Manifest-based Programs:每个程序都要带一个manifest说清楚自己做什么(就像java applet那样),这样在安装之前就知道这个程序会不会干坏事。怎么知道的?因为有static checking。因为程序在安装前就知道它是安全的,所以安装时可以做更多的事:比如,把kernel级的代码inline嵌入到程序中,这样又减少了context switch的负担。安装时还会把字节码编译到native code,而不是JIT即时编译,这样又能提高速度。最终,Sing#代码也可以跟C++的代码比比速度了。(不知道static checking的效率如何。)

因为用了很多formal methods的技术,所以程序都是出乎意料的健壮。InfoQ的文章里提到,File System的作者写好代码之后……没有任何测试,竟然直接就可以运行了,没有发现任何bug。

不过还是有一些问题我不太清楚。比如scheduler的实现,跟传统的OS不同,把ready list分成了unblocked list和preempted list两个list,说是有利于频繁地等待的线程的调度。不知道为什么以前的OS没有这样做?

我觉得Singularity最神奇的地方是,能把这样一个概念性的东西给实现出来了,要知道formal methods向来是好看不好用。

可以想象,在实现的过程中肯定遇到了无数的困难,做了无数的trade-off。比如他们提到在实现channel时,为了防止出现unbounded channel,要求contract每次变迁至少包含一个发送“!”和一个接收“?”,以保证channel不会被一大串发送动作撑爆。还好,这个看似严格的要求并没有导致太大的麻烦。garbage collection的算法也有很多细微的问题,文章第3.4节提到了一些。看了paper里列举的种种困难和解决办法,更让人觉得这是个很牛的操作系统了。:)

20八/080

看了一次奥运会

今晚现场看了乒乓球单打前两轮,4点半出发,6点开始看,到现在刚回来,累啊。

现场看的感觉跟电视机上很不一样,特别是到关键球的时候,全场都能感到紧张气氛,不像电视上可能被导播切镜头打断。同时看四个球桌,我也够忙的。缺点是没有解说,有些时候大家都疲倦了,气氛比较冷。

因为今天没有中国队,所以大家就给海外军团们加油了,连台北、朝鲜、尼日利亚的兄弟姐妹们也得到了近似主场的待遇。不过,如果两边都是中国人,大家就不说话了。btw,海外军团的势力真强大啊,什么阿根廷,土耳其,荷兰,法国,波兰,加拿大,澳大利亚……

有几个好玩的情节。法国队女单打到第七局时,教练不知道跑哪去了,队员(中国人,ppmm)真郁闷啊。第七局开始了,对方叫暂停,布置战术,法国这边还是没有教练……无语了。这时大家开始为法国队的队员加油,结果在加油声中她赢了。

各国球迷纷纷试图拉拢中国观众。先有个澳大利亚的哥们带着大家喊加油,但每次都是用一句奇怪的中文开头,三个字,听了半天都听不懂,旁边还有人问我他说啥,我哪里知道,反正大家都稀里糊涂的跟着喊了,然后全场笑场。看到有效果,后来还有荷兰的人喊“喝蓝价优”,葡萄牙的人喊“跑套丫”……

有些观众基本不懂乒乓球……旁边有人说“是不是谁赢了谁发球?”据说还有来了才知道这里是乒乓球比赛的……

全场很空,也就坐了不到1/2的人。感谢lw同学,我幸运的混了一个嘉宾席的座位,几乎算是北大体育馆里最好的座位了。先在第一排坐了一会,发现太低了视角也不好,就改到第五排,有的是空座。总之很爽。另外,很同情坐在三层的观众……

14八/080

关于GPU的一些简单概念

最近看了一些Windows graphics的东西,顺便了解了一下GPU,学了几个显卡设置里常见的单词。Windows vista使用的半透明桌面效果,还有Win+Tab的切换效果都是基于显卡3D加速的。

shader: 不太好翻译,程序纹理着色器,或者着色程序,是一段可以改变像素、顶点和几何学特征的小程序。特点是可编程,原先的显卡里只能调用固定的函数。

vertex shader:把3D坐标变成屏幕上2D坐标(和Z-buffer)

geometry shader:不清楚,一次处理一批vertex?(DirectX 10加入)

rasterization:光栅化,把一个2D坐标换算成一个pixel

pixel shader:对像素上色,考虑texture、光线等因素。(高度并行化,因为每个pixel都是独立的)

unified shader:有利于平衡使用。一个GPU可能有128个处理器,有了unified shader后,某个时刻可以让90%的处理器做vertex shader,10%的做pixel shader;或者反之。(DirectX 10加入)

工作流程:

figure 3 image

因为shader是可编程的,所以可以把某些CPU的计算交给GPU做,也就是所谓的general purpose GPU,这是比较时髦的技术了。

现在的GPU里有很多的处理器,也有调度器,有优先级的概念。但是还不支持page table,因此显存里放的东西都是连续的(这意味着显存里可能会有洞,浪费空间);也不支持抢占。可以预计将来的GPU还会有更多改进。

参考文章:

http://diy.pconline.com.cn/graphics/reviews/0708/1076067_1.html

http://en.wikipedia.org/wiki/Shader

 How GPUs work, IEEE Computer

5八/081

坐久了肩和脖子会疼的解决方法

电脑用多了,很多人都会这儿疼那儿疼的。少用电脑,多锻炼,多活动大家都知道,不过并不是人人都能做得到。按摩,拔罐,针灸什么的我也都试过,管用一阵子,过不了几天又会疼。据我的经验,解决MSD(muscular skeleton disorder)症状的关键是,用好的键盘/鼠标/椅子,让身体保持在一个放松的姿势上!这比疼了再活动一会有效的多。

我现在用的是微软Ergonomic keyboard 4000键盘,罗技MX518鼠标。用了之后,明显的感到手指不太疼了。在G公司,MX518是大多数人的标准配置(也有很多人用轨迹球,我没试过)。

跟椅子相比,这两样就不算贵了。极品的Herman Miller's Aeron椅子是一个时代的象征,自94年推出以来,现在已经作为永久展品陈列在纽约现代艺术博物馆中,号称是世界上最舒服的椅子,坐6小时也不会累。牛椅子不会便宜,它的价格高达$1000……台湾的Ergohuman椅子也不错,不过也很贵很贵。

有好多教程介绍用电脑时要坐直,身体要保持几个直角,比如微软的Microsoft 计算机使用健康指南。这很重要,也很有效,但是,如果椅子不合适,那这些建议根本就不可能做到。

我感觉,除了要能升降高度外,椅子后背的高度很重要。如果太低,就没法把脖子靠在椅背上,这样脖子就很容易疲劳。在电脑城能看到的大部分椅子的椅背都不够高,买的时候要注意挑高的,我以前买的椅子只花了200块。扶手也很重要,没有扶手的椅子意味着肘部关节必须悬空。如果能调扶手高度就更好了。 腰疼的话,弄个靠垫就行,沃尔玛卖30块一个,当然贵的椅子都会有个专门垫腰的部分。

这些人体工学的产品确实都很贵。但是跟健康相比,跟因为疼痛导致的工作效率降低相比,这点开销就不算什么了。

btw,我还有一招,左手用鼠标。很多人都“惊奇”地问过我:哇,你是左撇子?我会给他们一个更“惊奇”的回答: 我不是左撇子,只是左右手都能用鼠标,一只手累了就换另一只手。其实,学习用左手握鼠标并不是那么困难,练习几天后,一般的上网操作就完全足够了,当然打游戏另当别论。

3八/083

什么是Scrum?

Scrum是敏捷开发方法中的项目管理方法,这周现学现用,感觉挺不错。下面是从blog.zenmeban.org看到的一段介绍,我觉得很有同感:


Scrum属于敏捷开发范畴的一种开发流程,以英式橄榄球争球队形(Scrum)为名,Scrum将软件开发团队比作橄榄球队,有明确的更高目标,具有高度自主权。紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都朝向目标有明确的推进。

Scrum的运行方式又很多种,很多公司应用起来也会有些自己的改变,一个简单的Scrum Meeting包含3个要点:

  1. 从上一次Scrum到现在你做了什么
  2. 从现在到下一次Scrum你要做什么
  3. 有什么问题无法解决的

一般如果大家坐在一起,那么每个人都说一下,可能也需要比较长的时间,不适合每天进行,但是如果通过一个多人协同交流系统(比如IRC)来进行,那 么就会迅速很多,多人可以同时发言,发言之后可以查看其他人的发言,效率大幅度提高。一般20人团队,只要没有重大问题,那么3到5分钟的时间就可以进行 完毕,非常适合在每天进行。那么有人会问,这样的几分钟的一个小流程能解决什么问题呢?对于没有亲身经历的人可能不太容易理解。可以这样说,每天的这短短 几分钟时间就能是每天的8小时的工作效率提高一大步的。为什么这样说呢,因为,虽然每个人只有3句发言,但是这3句话要说明,上一个工作周期都作了什么, 下一个工作周期要做什么,因为每天进行,所以大家很容易回忆起来你上次的报告是怎么说得,所以也就很容易的印证,你这次报告的已完成工作跟上次的要进行工 作是否匹配,也很容易知道,你的每个工作周期的工作量是否合适,我想每个人都一样,如果你自己都觉得你的这个工作周期的工作量不太够的话,那么你也一定会 认为别人都这样觉得,这是一个非常强烈的心里暗示,如果你这个工作周期的工作非常繁重,完成的状况非常好,那么你也就会非常的理直气壮了。所以因为每天的 这短短的几分钟处使你在整个工作周期都要集中经历,提高工作效率,这样每天的工作完成情况非常良好,那么也就不会产生无故的加班行为,那样你就有更多的个 人时间来进行你的个人事务,所以大家的工作效率都会非常的高,企业的整个项目进程也会相应的非常高效。这样企业也就可以赚取更多的利润,也就可以回报给员 工更多的利益。

所以我非常的不理解有些老板特别的喜欢看到员工坐在办公桌前超时工作(加班),感觉他好像榨取了更多的员工的价值一样。可是这样带来的必然是正常的 工作时间的效率低下,所以我对某些自以为很了不起的,标榜着自己的加班文化的企业很是不屑,明明可以在短时间之内完成的工作也要拖到下班再加班,可能还不 能完成。这样有什么意义呢。曾经有人跟我说过,在他的公司,如果你工作效率很高,反而得不到老板的赏识,因为老板认为你做的快说明工作没有难度,只有做得 慢了才说明难度大,才会受到重视,真不知道这是什么逻辑。

所以轻量级的迭代流程就显得非常重要了,可以在不浪费大量会议时间的情况下,对过往的流程进行快速的复查,发现问题,找到解决的办法。是提高工作效率的非常有效的手段。

就我个人而言,我是非常的反感加班的,即便有加班费我也宁愿准时回家吃饭、睡觉。

所以每天五分钟的scrum带给你的是什么呢?是高效的工作效率,更多的和家人在一起的时间。对企业来说,就是高效的完成项目进度,员工更快乐的工作,单位时间创造更多的价值。


Scrum还有其他的一些特征,比如30天一个迭代周期的“冲刺”,小于7人的小团队,以及”站着开会“的要求(为了保证Scrum meeting在15分钟内结束)。可以参考这一篇短文”什么是Scrum“,或者看看这本电子书“Scrum Checklists中文版”。

其实不止是软件项目管理,我觉得做research也可以采用类似的思路。 以前听人说过外国某两个教授效率极高,paper出的很快,很向往;问及原因,很简单:因为他们两人天天坐在一起讨论。问题是,为什么学校里每周见面的讨论班制度运作的效率不高呢?团队不够小是一个原因,导师的时间有限也是一个原因。但根据我的经验,每周跟导师见一次面很容易导致平时工作不是特别紧张,每次讨论之前一天效率很高,讨论过后效率又会降低。我猜想如果用Scrum这种短会的策略,是否能提高效率呢?比如,每两天在MSN上讨论一次,汇报内容不超过两句话?

2八/080

如何测试一支钢笔

昨天的培训课讲的是如何建造高质量的软件,测试自然是最重要的。就拿一支钢笔来说,怎么测试一支钢笔?或者说,怎么衡量一支钢笔的质量?

比较容易想到的是“钢笔必须能写字,写出的笔划要连贯”。但是再考虑一下,其实还有很多问题,比如:

  • 能在不同的纸上写吗?能在墙上写吗?笔尖朝上,倒着拿还能写出字吗?
  • 能在不同的环境下写吗?水里?沙漠?低温?太空?
  • 笔的形状是否适合手握?(想像一件用砂纸做的T恤……)
  • 要用多大的力气才能写出字来?
  • 长期放着不用,墨水会不会堵住?
  • 加一次墨水能用多长时间?
  • 笔上的标签有没有错别字?是否考虑了globalization,不同国家、不同文化?logo会不会让某种人反感?
  • 笔容易折断吗?如果折断了,飞出来的东西会不会伤到人?
  • 把笔放到嘴里咬会不会有危险?小孩总会乱吃东西。
  • ……

其实还能写出更多条测试要求来。总之,测试还是很有学问的。Quality永远都比Quantity重要,安装到用户机器上的软件宁愿少一些feature,也要保证质量。

另外,除了著名的Pentium浮点运算错误NASA的航天器单位换算出错等经典案例外,在课上又了解到一条:SQL Slammer病毒,2002年的一个SQL Server漏洞导致世界上大部分Internet都挂了,连ATM都取不出钱了。(因为中国当时在过春节,所以没受多大影响。)