摘要: 好久没写博客了。最近在重构代码,碰到了很多了有意义的问题,在此和大家分享。大家知道,在使用异步IO或者大量多线程代码时,总会碰到同步问题,例如在其他线程调用Winform的Control相关代码,就会导致异常。最近发现NAudio的WaveIn和WaveOut居然也需要使用UI线程的消息结构才能正常工作,他们会在后台创建不可见窗口。如果你在Socket的异步IO回调中直接调用Wave系列的方法,则会异常或者没有任何反应。(BeginXXX系列等异步方法的回调是在线程池中某个线程中调用的)一般Windows程序的UI线程只有一个,UI相关的更新都应该发生在UI线程上,才能保证安全。因此实际工作中 阅读全文
posted @ 2012-06-22 19:35 Leading 阅读(3142) 评论(5) 推荐(0) 编辑
摘要: 最近用一些淘汰的机器搭建计算集群,使用openSUSE。主节点当作各种服务器,当然也是集群网络的网关。为了能让集群里面的机器也上网,openSUSE要做一些设置。网上找了很多资料,一直没有成功,很多人说只要打开ip forwarding就行了,实际上,如果没有防火墙(iptables),这样也就可以了。但是SUSE默认都是打开防火墙的,而且做一个集群,不用防火墙,放心吗?所以关键的设置都在防火墙里面。比如设置两块网卡,哪个是external,哪个是internal,启用masquerating,等等,但是网上那些写教程的人都成功了,为什么我的就是不行呢?今天早上,我终于找到国外一篇博客,ope 阅读全文
posted @ 2012-05-06 13:23 Leading 阅读(1213) 评论(0) 推荐(0) 编辑
摘要: 最近看CLR via C#的线程一部分,对线程的理解有了很大的提高。于是我突然想起了大学时在光谷书城看到的一本书,讲的是微软的面试,翻了几页就发现了作者在说这个问题。当时我感觉这个作者很牛B,因为对当时的水平还比较菜。后来就淡忘了。(当然我也没买那本书,没想到今后会求职)今天突然想起来这个问题。小试一下,居然成功了。我在这里斗胆向各位介绍一下背后的原理并附上代码,这种程序没有什么实际意义,纯粹一种加深对多线程理解的练习。有图有真像: 其实我的第一次尝试是这样的: 如果有不懂的,先看我下面的解释,然后我再解释上面两幅图代表的意思(先申明机器是双核的)。1. CPU占用率是什么?首先我们得知... 阅读全文
posted @ 2012-03-21 11:25 Leading 阅读(5744) 评论(11) 推荐(6) 编辑
摘要: 最近在写一个音频通信的系统,因为需要还要处理其他事件,所以就自己设计底层的通信协议,用了不少底层的Socket编程(.Net Framework),搞清楚了不少细节问题。先做一些铺垫工作。音频系统服务器需要给所有的客户端发送音频。服务器端要记录下连接的客户端的IPEndPoint(也就是IP+端口号),然后会对所有连接的客户端群发。因为客户端很可能是在NAT后的,所以不可能直接用向某个地址的Udp客户端发送连接。所以客户端需要把第一条消息发送给服务器端,NAT服务器就会打开一个口,允许服务器端向这个客户端发送包(这就是最简单的所谓的“Udp打洞”技术)。当然这个端口不会一直保留,一般不用的话很 阅读全文
posted @ 2012-03-20 19:29 Leading 阅读(2396) 评论(5) 推荐(1) 编辑
摘要: 最近装了VS11Beta,才关注有关WinRT的信息。C++这次又被微软“扩展”了,新名字叫C++/CX。C++/CLI是微软为了让C++代码能够在.Net上运行所做的尝试(谁还记得Managed C++),C++/CX是为了让C++程序员能在WinRT上“轻松”地一展身手所做的扩展。现在C++/CX的资料非常少,Google上搜索一下,头条就是Inside the C++/CX Design,是微软Visual C++团队的一个哥们写的。看他的照片,一脸苦逼样,就知道他被C++折磨得非常不爽。他的文章中也是充满了痛苦。为了迎合微软的COM技术(为什么微软老是抱着COM不放)和WinRT的模型 阅读全文
posted @ 2012-03-05 09:14 Leading 阅读(14370) 评论(34) 推荐(11) 编辑
摘要: Git是一个非常流行的分布式版本控制系统,好处就不多说了。如果不是搞Git开发,就可以装Git For Windows(而不是完整的msysGit)。一般情况下,我都会装Portable版本,可是发现解压后文件居然有200M+,令我非常不爽。仔细一看,libexec中的git-core文件夹有很多相同大小的文件,都是git-*.exe形式的。每个都有1.2M左右,我估计都是一样的。用Windiff比较一下,还真是。为什么不搞成链接呢,Windows现在支持啊!去网上搜索,发现很少有说这个的,难道为了安装一个Git就花掉200M+的空间没人感觉不爽吗?最后终于在googlegroup一个偏僻的角 阅读全文
posted @ 2012-03-02 16:54 Leading 阅读(41711) 评论(5) 推荐(12) 编辑
摘要: 我想下载Taylor Swift的Safe And Sound(MP3),搜了半天终于在SongTaste找到了,当我点击下载,它告诉我必须安装“多米播放器”才能下载(真是**行径)。当然我还是要点击下载,于是我在地址栏出现了如下地址:duomi://t=o&ac=d&u=http://media6.songtaste.com/201202270702/d35b818d85aedef5be99a4db21fe92d1/6/64/6456e46b3226af1ac01ec73b58694578.mp3&sn=c2FmZSBhbmQgc291bmQgsLLIq87e7aY= 阅读全文
posted @ 2012-02-27 08:06 Leading 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 软件应该是一门艺术。我对软件的兴趣,从来是学习一门新语言,使用一个超酷的软件,自己实现一门语言,以及对自己智力的挑战;而不是被分配实现一个功能,不是写各种扯淡的文档,不是把本来很简单的事情搞得复杂化。软件工程就是学术界有些吃饱了没事干的人,搞一些术语和图表,以此产生的垃圾论文和方法论。我看到的最恶心的定义就是“软件是程序和文档的集合”。好像程序就不是软件,我编写一个程序就不是软件了?很多牛逼的开源软件就不是软件了?这种迂腐的定义简直是令人作呕。我相信,有些人就是把本来很有意思的事搞得枯燥无味的。今天我看程序设计师教程,软件工程这一部分,真是难以想象这么多废话是从哪抄来的。这种书也算是教材,要不 阅读全文
posted @ 2012-02-09 08:28 Leading 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 最新一期的Distrowatch Weekly对Deepin Linux有了评论,焦点是深度Linux软件中心很有特色。做评论的博文似乎也引起了不少讨论。首先说一下这个发行版。国内做Linux发行版的也有一些,但是很少有Deepin这样专心一致,比较正规的。总体来说,感觉这个发行版很有前景,是中国开发者在国际开源舞台上展示的一个契机,而且他们确实也对上游的社区做出了贡献(最起码翻译了不少软件)。Deepin Software Center的界面是个典型的国产界面,其实这样的界面在国内已经很流行了(360开的先河?)。但是这样的界面居然让很多老外感觉很吃惊,因为Linux的GUI真的很难看(也很 阅读全文
posted @ 2012-01-03 18:34 Leading 阅读(886) 评论(0) 推荐(0) 编辑
摘要: 最近重温Swing,尝试了以前没试过的事情。大家可能都知道,J字头的组件(JComponent)都是awt.Container的子类,所以理论上所有的JComponent都可以当作容器来用,比如说JButton或者JMenuItem可以包含一个文本框。以前一直以为这只是概念上的,从来没有试过,如今尝试一下,发现真的可以,有图为证: 图上的菜单中含有个文本框,最下面是个按钮,也有一个文本框,可以正... 阅读全文
posted @ 2011-11-22 11:17 Leading 阅读(1258) 评论(0) 推荐(0) 编辑