xnby08 xnby08
关注数: 37 粉丝数: 30 发帖数: 2,945 关注贴吧数: 9
[道法理]你是想读书,还是想读完…(动机,借着无为而达成) 【拿来主义,文中讲禅宗,这一流派没有接触过,前几天好像有一篇好文章,准备读的后面忘了也找不到了,但是一下也会想到些道家思想,生活中很多东西都来自道家,修行切勿背道而驰】 以前,读书前会很想读一本书,但实际读书时,经常是“想读完书”,而不是“想读书”。这种想法经常会让我的生活变得很痛苦,当你做一件事想着快点做完时,你的心思其实已经不在这件事上了。 这个问题在我大学时困扰了我很久。我没有意识到这本身其实是一个价值观问题,以至于我常在一些时间管理的书中寻找答案。那些书都只能让你更高效地“做完事”,却不能让你在做的过程中更投入一分。 直到后来离开学校,了解了一小部分禅宗思想,我开始豁然开朗。禅宗讲求摒除心中的杂质,全部精神专注于当下,摒弃过去摒弃未来,任何的多余的念头都可能使你正在做的事情不纯粹。禅宗上,这叫“正念”,我非常非常欣赏。 想想看,你去旅行,那你是为了旅行和生活本身呢,还是为了旅行回来能增加一点谈资、写一篇游记呢?答案是显然的。 人生也是一样,如果你一心只等着功成名就家财万贯衣食无忧的那一天,就好像你旅游时只等着回去写游记和炫耀一样,旅行本身就失去了意义。 生活就像这样的旅行,我们今天读的每一本书,写的每一个字,迈的每一个步,做的每一件事,就是这趟旅行的一部分。如果我们不能专注于它本身并享受这种过程,那整个生活就会变成急不可耐的煎熬。 回到读书上来,现在我觉得对书的“量”的追求是完全无意义的。如果我在读一本书时专注于其中,不仅可以获得远比匆匆翻过更深入的东西,而且还能为人生增加不曾虚度的有趣有意义的几天或几小时。 对了,在很多领域都有一个词叫“flow”,描述人们沉浸在某事中获得的愉悦状态,根据我粗浅通俗的理解,禅宗正念的目标,就是把这种状态扩展延伸到你生命的每一秒。
[吐槽]第一次党员公开福利结果 那一天,717,网络上都还在嚷着回家吃饭才是幸福的时候, 我党开始了第一次小福利,收听就能抽抽,50%的概率获得QQ会员一个月 经过一天的推广,党员数居然暴涨了200%,真是2的暴起, 现公布结果: 恭喜不知道获得QQ会员一个月! 很遗憾,吴小丹没有中奖,请关注修二党后续的活动! 很遗憾,毛星辉没有中奖,请关注修二党后续的活动! 很遗憾,卢永菁没有中奖,请关注修二党后续的活动! 恭喜鸥小羊获得QQ会员一个月! 恭喜helo获得QQ会员一个月! 恭喜范晓天获得QQ会员一个月! 恭喜叶振华获得QQ会员一个月! 很遗憾,huaile没有中奖,请关注修二党后续的活动! 恭喜喻~wei获得QQ会员一个月! 恭喜cl获得QQ会员一个月! 很遗憾,小瓶子没有中奖,请关注修二党后续的活动! 恭喜Darren获得QQ会员一个月! 很遗憾,已经坏掉的司徒没有中奖,请关注修二党后续的活动! 很遗憾,bins没有中奖,请关注修二党后续的活动! PS,整个过程在群里公证代码无异议, #include <stdio.h> #include <iostream> #include <math.h> #include <time.h> using namespace std; int main() { char szUser[1024]; srand((unsigned)time(NULL)); while(cin >> szUser) { int iRdNum = rand(); if(iRdNum % 2) { cout << "恭喜" << szUser << "获得QQ会员一个月!\n"; } else { cout << "很遗憾," << szUser << "没有中奖,请关注修二党后续的活动!\n"; } } return 0; }
[挨踢程序猿]MFC中的窗口过程封装 昨天看inside vcl,谈Framework突然想到Windows程序开发的面向对象封装过程 又把之前的这些不确定再看了下,大概理解深了一点, 记录之前说些题外话,现在都是各种Framework下的开发 这些东西已经封装的死死了,在看这些对新环境下的开发确是无多大用吧, 但是,了解下也还ok windows程序的最根本的要素 Winmain,GUI程序入口 然后有个窗口类, 向系统Register一个窗口类, 根据这个窗口类来Create一个Window ShowWindow 然后不断地GetMessage,TranslateMsg,DispatchMsg。 窗口过程,窗口类中注册的一个处理消息的一个函数,windows是基于消息驱动的系统, (消息分为三类,这个后面再去研究) 消息分发是以具体窗口实例的HWND作为区分的。 但是窗口过程却是要指定在窗口类中,而不是具体的窗口。 简单一句话就是,一个窗口类下Create的所有窗口都是关联的同一个窗口过程。 为啥不为每个窗口实例关联一个窗口过程呢?个人感觉也是ok,每次创建的时候注册一个新的 窗口类,或者直接替换窗口过程。 现实的mfc默认情况下还是一对多才处理的,并通过一个HWNDMap保存了HWND到CWnd*的映射, 方便从默认窗口过程将消息转发到对应的窗口实例中。 再来说,系统消息的管理,消息队列,每个GUI线程有自己的消息队列,前面说的GetMessage就是从里面获取消息了。好了一个窗口的运行似乎就这么很简单的解决了。 但是实际上windows程序中很多控件都是有真窗口的, 如果在一个UI线程下,那么还是一个地方GetMessage然后通过DispatchMsg把消息转到具体的窗口过程去处理消息。当然很多时候一些东西常常变态的在一段代码里搞出另外的一个消息循环来。最直观的的就是模态对话框。所以说单线程有时候也不一定靠谱,也有可能出现代码冲入的时候,当程序阻塞在某个莫名的消息循环中的时候。 好了最后谈下,子类化消息处理, 窗口过程写大了代码很麻烦, 汇编上看就是不断的cmp,jmp, 谁也不知道那些消息经常来,如果一个消息放在很后面,就要经常的 跳很远,执行效率有影响,此外 开发维护不易, 所以面向对象封装都使用了子类化。 也就是 默认窗口过程,把消息推到具体的实例CWnd的消息过程中 通过多态来实现。
[挨踢程序猿]任务栏图标的那些破东西 最近跟一个bug,对windows下的任务栏图标进行了一些测试,真是各种被坑 现先把一些情况贴出来 本文说的是winddows任务栏的中间部分,不是右下角的状态栏。 以delphi来描述, xp和win7下不同的,win7默认下只有一个大的图标,这个图标就是 程序的Application的Icon,修改这个icon的方法有很多 SendMessage,SetIon,或者给Application的Icon属性赋值 这样就可以改变状态栏的图标。 xp中状态栏的文字描述为window的title,可以通过SetWindowText来设置。 好了坑爹的东西来了, xp下有个设置自动归类合并类似程序,一个进程创建的多个实例,或者一个进程 创建的多个状态栏,当超过一定数量时就会被系统合并到一起显示, win7下是默认合并的。 合并后的状态栏图标和文字的逻辑xp和win7还不一样 xin7下的逻辑表现很正常,已第一个启动的为准,并随着程序的变化而变化 xp下就显得乱了, 首先,那个描述取的是exe的描述,程序第一次运行时会写入到注册表里面去 windows\shellnoroam\muicache\下对应的exe和描述,修改这里头的描述 下次xp合并对应exe的状态栏时描述就变了 然后icon呢,当一个exe+全路径没有运行过时取的是第一次运行时的icon 比如说,A.exe 的Icon是 A1,第一次运行时,系统记录下了他的组icon是A1和描述A 现在你把B.exe的名字改下改成A.exe这时候合并的内容永远是A1和A B的Icon和title都对分组不起效果,除非去清理注册表。
[码农的修炼]如何成为强大的程序员? 存一份后面看  Aaron Stannard 是新创公司 MarkedUp 的 CEO,他最近花费大量时间雇佣、评估很多不同的程序员,并和他们一起协作。在这个过程中他发现并总结了十种程序员无法意识到自己潜力的原因,意在让更多程序员发掘出自己的潜力,从而成为强大的程序员。   Aaron 提到,他的公司中所使用的技术非常复杂,某些大型企业都很难掌握,所以对于想要加入团队的程序员来说,入门门槛非常高。因此,尽管他们非常仔细地雇佣新人,但还是很难找到足够天才的程序员。于是,他总结出十种阻碍程序员职业生涯发展的行为,并据此来帮助想要提升自身的平凡的程序员们。   1. 太害怕学不会新的工具、语言和框架   一般的程序员会墨守他们最喜欢的工具,而不希望学习新的,因为他们认为,离开了那些语言和工具,多年的经验就会付诸东流。而强大的程序员会拥抱那些挑战和机会,积极地学习新的工作方式。   2. 直到特性“完成”的时候才会提交。(但永远都不会完成!)   他在 MarkedUp 公司中把这种行为叫做“囤积提交(commit hoarding)”。有些程序员没有足够的信心来承受团队中其他成员的批评和审查,因此会把自己的工作藏起来,直到“完成”状态才提交。   这种开发者会损害团队中其他人员的生产力,因为团队看不到他每天的成果,而且他也不会在正常开发的过程中寻求帮助,这样就会造成很多“最后一分钟”的缺陷,从而让交付延迟。而强大的程序员会知道,代码并不是他们自己,因此会把代码经常自信地呈现在其他团队成员的眼前,获得批评和建议。   3. 只是“知其然”会很危险   在这里 Aaron 举了微软最近在C# 5.0 中引入的 async 和 await 关键字为例,这两个关键字会让创建和管理异步调用变得很容易,但是也会造成上下文切换、对共享资源进行多线程访问的成本,仅仅对此有基本了解的程序员会盲目地使用这些特性,把所有I/O调用都封装成 C# 中的 Task 对象,这会创建出危险的、不可预测的而且非常难以测试的代码。   好的开发者不仅“知其然”,而且会了解为什么这么做以及应该在什么样的条件下使用。   4. 分析瘫痪(Analysis paralysis)   分析瘫痪是指在程序开发初期进行系统分析,常因为太过执着于控制所有可能的变化和意外,而造成大量时间的浪费,裹足不前。这是一种很经典的问题,会影响很多一般的程序员。它通常是由过度分析造成的,但是 Aaron 认为其根本原因在于不敢做出坏的决定。一般的程序员会担心犯错,只想一次成功。   而强大的程序员不会害怕,他们会编写很烂的代码,对其进行单元测试,如果认为无法达到目的,就会在 45 分钟之内把它抛弃。强大的程序员会积极地限制用来研究的时间,因为他们知道那是个陷阱——看起来是有效的,但经常都无效。   5. 没有对工具和开发过程投入   如果你想要成为天才程序员,那么就需要投入时间提升技能和知识,而将你和普通的代码工人区分开来的是快速编写出生产级别代码的能力。你可以同时拥有好的代码和速度,但是你需要先对你用于构建的过程投入。   一般的程序员不会对工具、过程和环境投入,只会使用大量的时间学习新的语言特性和 API 如何工作,但那并不会改变什么。   通常,你作为程序员所能够做出的最大改进并不是专注于你所编写的代码,而是优化你编写代码的过程。   6. 羞于请求帮助   一般的程序员羞于或者不想让人知道自己不懂,所以他们装作什么都知道,但这样就有可能提交某种非常可怕的代码到库中。说“我不知道怎么做。”没什么错,强大的程序员知道这一点,所以当被问题难住的时候就会请求帮助。   7. 不知道如何让其他程序员更容易使用你的代码   在所有技术团队中,工作很重要的一部分就是人员的并行(human parallelism),也就是多个人能够同时对同一代码库工作的能力。但是对于团队来说,能够异步工作也很重要,当你不在的时候我可以修改你的代码,反之亦然。
[windows编程]笔记摘要 一、程序的系统观 1.程序是什么, 程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的**。为实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。 程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的** 2.系统是如何考虑程序运行问题 2.1 程序如何运行 2.2程序运行都有哪些需求和问题, 2.3 系统如何解决这些问题 正在运行的程序即进程, 进程由两部分组成 a.内核对象(操作系统用它来管理进程,保存进程统计信息的地方) b.地址空间(包含所有可执行文件或dll模块的代码合数据,还包含动态的内存分配,线程栈和堆) 进程做任何事,都必须让一个线程在他的上下文中运行,线程负责执行地址空间所包含的代码,一个进程可以有多线程,所有线程都在进程的地址空间中“同时”执行代码,每个线程有他自己的一组CPU寄存器和堆栈。每个进程至少有一个线程来执行地址空间包含的代码。(主线程) 对所有要运行的线程,操作系统会轮流为每个线程调度cpu时间(时间片),采取轮询的方式。一个CPU的话相对简单,如果多个CPU则会需要更复杂的算法对线程分配CPU时间,不同线程再不同CPU运行,真正的并行。 ps:内核对象就是一个内存块,他由操作系统内核分配,并只能由操作系统内核访问,内存块的数据结构,其成员维护着与对象相关的信息,少数成员是所有对象共有的,大部分成员是不同内核对象所特有的。如进程对象的进程ID,优先级,文件对象的字节偏移,共享模式,打开模式。 调用一个创举内核对象的函数后会返回一个句柄(handle),为了增强系统的可靠性,这些句柄是进程相关的,传递给另外的进程有可能失败。 典型的内核对象访问令牌对象,事件对象,文件对象,I/O完成端口对象,作业对象,邮件槽对象,互斥对象,管道对象,进程对象,信号量对象,线程对象等等。。 内核对象有个使用计数,由计数来控制生命周期,所以内核对象的生命周期可能比创建它的进程长。 内核对象由一个安全描述符(Security Descriptor)来保护其安全性,SD描述了谁拥有对象,一个对象是不是内核对象,看创建的API有无安全属性信息即可。
首页 1 2 下一页