博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2013年7月9日

摘要: 这里是使用 OnTouchListener 实现的监听双击 or 多击的监听器。通过 View.setOnTouchListener ,可以实现在任意 View 上监听双击事件。 网上有许多文章简单的使用 OnTouchListener + 计数器自增 的方法实现,但该方法有个严重的弊端:连续三击会被当作一次双击和一次单机;连续四击会被当作两次双击,………… 原因就是无法分辨多次单击是连续的。 下面是一个完整的实现,可以监听多击,且知道次数。阅读全文

posted @ 2013-07-09 17:24 [虫子] 阅读(1387) 评论(0) 编辑

2011年8月9日

摘要: from: http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html如何为代码选择开源许可证,这是一个问题。世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。即使在最流行的六种----GPL、BSD、MIT、Mozilla、Apache和LGPL----之中做选择,也很复杂。乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这六种许可证之间的最大区别。下面是我制作的中文版,请点击看大图。阅读全文

posted @ 2011-08-09 17:59 [虫子] 阅读(93) 评论(0) 编辑

2009年6月23日

摘要: 之前做拓扑图,本来打算整一套坐标系统在里面的,后来因为时间原因暂时用了最原始的方法实现。现在稍稍得闲,重新开始思考这个问题。不过在搜索的时候,意外发现.Net Framework类库中自带的有实现坐标系转换功能的类。Reflector了一把,发现代码看不懂了——都是利用矩阵操作的。矩阵这玩意儿,几年没用早忘完了。于是认真学习了一把,顺便把如何用矩阵进行坐标转换的过程记录和注解一下。文中部分内容摘取自MSDN,搜索“变换的矩阵表示形式”即可找到。 阅读全文

posted @ 2009-06-23 19:10 [虫子] 阅读(7825) 评论(1) 编辑

2009年2月26日

摘要: 编码人员的误区 误区一:因为任务紧迫,所以没有时间想 有些人认为只有在领导规定的时间内完成任务才是最重要和最紧急的。至于方向是否正确,功能是否完整则没有时间去考虑。 这些人陷入了多写些代码和程序就会安全了的假象当中。殊不知方向错了,跑得越快,损失越大。 抱有这种想法的根本原因在于他们的不自信,不知道如何分析问题,找出最佳解决途径和细致的评估影响面,因而无法向上级提出一个更加合理的时间。 例如: Bulk Address feature 的设计者也是说时间紧,没时间细想。后来的结果就是这个 feature 的 design 和代码被一次又一次的推翻和重做。而我们的 leader 也因为反复的向 Jerry Lu 解释上次做错了能否接受我们新的 Solution 而招致了 Jerry Lu 的反感。 误区二:在最后一刻告诉 Leader 代码写完就算开发任务完成了 这种人认为只要写完代码告诉 Team Leader ,自己就可以交差了。 如果做错了,大不了重做; 如果漏做了,大不了补做; 如阅读全文

posted @ 2009-02-26 16:53 [虫子] 阅读(221) 评论(0) 编辑

2009年2月20日

摘要: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象。一:定义类并创建类的实例对象在Javascript中,我们用function来定义类,如下:Code h...阅读全文

posted @ 2009-02-20 12:43 [虫子] 阅读(208) 评论(2) 编辑

2008年12月11日

摘要: 近来发现,有很多同事在设计Asp.Net Application时,选择用字符串拼Html文本而不用GridView等控件,原因居然是“Asp.Net太慢”。看来有必要再次明确一个本质问题:我们是做产品的,不是搞学术研究的;同时要强调一个习惯:要用事实去证明你的猜测,而不要臆断。 一、Remember:我们是做产品的,不是搞学术研究的 直接贴一个前阵子的一封邮件,“全在邮件里面了”: 发件人: 发送时间: 收件人: 主题: 答复: 关于WebService的性能损失 这个问题里面,缺少对用户场景的描述。 我认为,我们实际应该关心的并不是这两种方式的性能究竟差别有几倍,而是他们是否会对用户、对业务产生影响。 在这个例子里面,1500次的访问,WebService多出了5000毫秒,平均每次访问多出了3ms。那么我有以下几个问题: 1、当用户执行一次操作的时候,会调用几次Web Service,从而会多出多少毫秒? 2、多出的这些时间,是不是我们必须省下来,还是在允许接受的范围内、可以忽略不计? 3、如果用户的一次操作确阅读全文

posted @ 2008-12-11 17:13 [虫子] 阅读(3206) 评论(54) 编辑

2008年12月8日

摘要: 服务端,端口的状态变化   先在本机(IP地址为:192.168.1.10)配置FTP服务,然后在其它计算机(IP地址为:192.168.1.1)访问FTP服务,从TCPView看看端口的状态变化。   下面黑体字显示的是从TCPView中截取的部分。   1、LISTENING状态   FTP服务启动后首先处于侦听(LISTENING)状态。   State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。   从TCPView可以看出本机开放FTP的情况。它的意思是:程序inetinfo.exe开放了21端口,FTP默认的端口为21,可见在本机开放了FTP服务。目前正处于侦听状态。   inetinfo.exe:126阅读全文

posted @ 2008-12-08 15:57 [虫子] 阅读(3086) 评论(0) 编辑

2008年4月24日

摘要: 前几天在看《.Net框架程序设计》的时候,好像记得书中有提到说每个对象在创建后都会有一个字段保存了一个内存地址,这个内存地址指向对象实际类型的方法表,其中维护了类型每个方法的签名以及他们的入口地址的对应关系。每次调用方法的时候会到这个表中去查找方法入口地址。而根据我之前对于程序的了解,只有虚函数才会需要保存在这个“函数指针表”中,而非虚方法因为在编译时就已经知道了函数入口地址的相对偏移量(因为确切的知道将要调用的是哪个类的哪个方法),所以最终生成的cpu call指令中可以直接得到函数入口地址(模块加载时的基地址加上偏移量就是实际的入口地址)。而虚方法在编译时无法知道具体调用的是哪个方法,所以才会用这个“虚函数指针表”来使系统能够在运行时获得要调用的是哪个方法。阅读全文

posted @ 2008-04-24 01:11 [虫子] 阅读(2994) 评论(24) 编辑

2008年4月17日

摘要: 自打使用.Net以来,他给我的印象就一直是:慢。不过这几天看了一下.Net程序运行时的原理,才明白了我们平时的.Net程序是为什么慢的,也明白了在某些情况下其实.Net程序运行起来也不比非托管程序慢。阅读全文

posted @ 2008-04-17 01:35 [虫子] 阅读(7287) 评论(76) 编辑

2008年4月7日

摘要: 我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 1、假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒? 2、某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?阅读全文

posted @ 2008-04-07 14:45 [虫子] 阅读(16583) 评论(79) 编辑

摘要: Refactoring to, towards, and away from pattern 1、设计过度和设计不足同样不可取 2、设计欠账 3、模式的真正价值只是一种思想,而不是一个框图。 4、模式是否会使得代码更加复杂阅读全文

posted @ 2008-04-07 01:15 [虫子] 阅读(556) 评论(0) 编辑

2008年4月6日

摘要: 在上一篇文章中,我们探讨了使用Thread类实现异步的方法。

在整个过程中,可以发现Delegate这个东西出现了很多次。而仔细研究Delegate,我们发现每一个Delegate类型都自动产生了Invoke、BeginInvoke、EndInvoke等方法。而BeginInvoke、EndInvoke这两个方法,我们马上就可以猜到这是用来实现异步的~~

那么我们现在就看一下怎样使用委托来实现异步。阅读全文

posted @ 2008-04-06 20:09 [虫子] 阅读(3238) 评论(14) 编辑

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part III) zz阅读全文

posted @ 2008-04-06 18:10 [虫子] 阅读(246) 评论(0) 编辑

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part II) zz阅读全文

posted @ 2008-04-06 18:09 [虫子] 阅读(181) 评论(1) 编辑

摘要: A Taste of AOP from Solving Problems with OOP and Design Patterns (Part I) 阅读全文

posted @ 2008-04-06 18:07 [虫子] 阅读(202) 评论(0) 编辑

摘要: 通过RealProxy是最简单的方法,缺点是不能同时加入多个代理,否则会抛异常。
实现步骤:
1、实现RealProxy的继承类
2、实现应用上述实现的RealProxy类的ProxyAttribute
3、把上述实现的Attribute应用到ContextBoundObject实例上阅读全文

posted @ 2008-04-06 18:04 [虫子] 阅读(712) 评论(2) 编辑

摘要: 因为这两篇太安逸了,东西很多,很实用,所以转到我格子里!总的来说,如果你要找js 的东西,而不看这两篇的话,肯定要多花好多时间!!哈哈!!如果你找的javascript的东西的话,建议你 ctrl+F 直接在这个页上找,因为这里80%有你要找的,但是要让你挨着看的话,你就准备看完就去配眼镜!! 事件源对象 event.srcElement.tagName event.srcElement.type...阅读全文

posted @ 2008-04-06 18:02 [虫子] 阅读(366) 评论(1) 编辑

摘要: 关于枚举的种种 [C#, IL, BCL] Enumeration FAQ [C#, IL, BCL]Updated on Tuesday, January 11, 2005Written by Allen Lee from: http://www.cnblogs.com/allenlooplee/archive/2004/12/19/70230.htmlQ:在C#里,我们如何表达枚举类型?A:你...阅读全文

posted @ 2008-04-06 17:59 [虫子] 阅读(266) 评论(4) 编辑

摘要: 在写程序的过程中,我们可能会需要对某些功能实现异步操作,比如记录调用日志等。

提到异步,我们最容易想到的就是多线程:我们可以启动另外一个线程,把一部分工作交给另外一个线程去执行,而当前线程继续去做一些更加急迫的事情。这里的“把一部分工作交给另外一个线程取执行”,是通过将要执行的函数的函数入口地址告诉另外一个线程来实现的,当新的线程有了函数的入口地址,就可以调用该函数。

我们先来看一下怎样使用C#中的Thread类来实现异步。
阅读全文

posted @ 2008-04-06 17:52 [虫子] 阅读(3884) 评论(20) 编辑