一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Programming Language

VS2010 优化运行速度

刚安装完VS2010,不仅启动速度慢,编写代码什么的都慢,卡死!!! 1.禁止VS2010显示启动动画 右键VS2010快捷方式,选择【属性】,在【目标】的后面加上:/nosplash(在exe后面加一个空格再写/nosplash),截图如下: 2.让VS2010启动后,显示空环境。 在VS2010中,打开【工具】—-〉〉〉【选项】—-〉〉〉【环境】—-〉〉〉【启动】,在【启动时】选择【显示空环境】,截图如下: 3.禁止VS2010在启动时,启动外部程序。 在VS2010中,选择【工具】—-〉〉〉【外接程序管理器】,截图如下: 在外接程序管理器中,去掉所有外接程序前面的钩,然后确定即可。截图如下: 4、去掉VS2010视觉体验 老样子,在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【环境】—-〉〉〉【常规】,在右边找到【视觉体验】, 把视觉体验下面所有的钩给去掉即可。截图如下: 5.禁用【IntelliTrace】 在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【IntelliTrace】,在右边找到【启用IntelliTrace】,然后去掉其前面的钩 即可。截图如下: 6.在vs2010命令提示符下,执行devenv.exe /resetuserdata   //这个方法我没有试过 参考文章:http://blog.csdn.net/kupepoem/article/details/6584667 7.禁用VS2010智能提示,即代码提示功能了,如果你安装了VA助手,这个智能提示是可以关闭的。 如果你没有安装VA,建议还是保留该功能吧。 在VS2010中,选择【工具】—-〉〉〉【选项】—-〉〉〉【文本编辑器】—-〉〉〉【C/C++】—-〉〉〉【高级】,在右边找到 【禁用IntelliSense】,选择True即可。截图如下: from:http://blog.163.com/pinbo_jiankun/blog/static/1335464882013102105055396/

龙生   18 May 2015
View Details

解决:Entity Framework + MariaDb(MySql)中文乱码

今天写一MVC4+Entity Framework+Mysql的小例子时,发现中文写到数据库里是N个问号(乱码哦~); 于是跟了一下代码,发现页面提交过来的数据正常,这说明肯定是EF写到数据库时出了问题。 为了进一步验证,我用SQLServer2008试了一下,一切正常,那就在Mysql上找原因吧~ 但mysql库编码也是utf8,表也是utf8,这是什么原因呢? 百度了一把,看 了几篇文章也没能解决我的问题,无非都是要把网页、数据库、EF的编码改一致,我的本来都是一致的,难道是字段的编码?但字段的编码怎么改呢?也没找到方法,忽然看到字段的排序项是空的,会不会是它的原因呢?于是改成utf8——测试——一切正常~有图有真相:

龙生   14 May 2015
View Details

台球游戏的核心算法和AI(1)

前言: 08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写. 可见当时的JAVA水平真的不咋地, 时过进迁, 还是一样的不咋地. 这边是当时的CSDN下载链接: java(台球游戏), 实现比较简单. 后来写过一个版本, 比这个要强大许多, 可惜源码丢失了. 效果展示入下图所示: 本文想讲述下台球游戏中核心算法的实现, 以及游戏AI的设计技巧. 当然自己也有个小愿望, 希望能实现一个html5版的台球游戏. 基础物理知识: • 摩擦阻力 其满足牛顿第二定律: f = m * a 速度与加速度关系公式: vt = v0 + a * t 地面摩擦力与运动物体的方向相反, 阻碍物体的向前运动. • 动量守恒 假设物体A质量为m1, 速度为v1, 物体B质量为m2, 速度为v2, 碰撞后速度分别为v1′, v2′. 则满足动量守恒定律: m1 * v1 + m2 * v2 = m1 * v1′ + m2 * v2′ • 碰撞类型和能量守恒定律 1). 完全弹性碰撞 动能没有损失, 则满足如下公式: 1/2 * m1 * v1^2 + 1/2 * m2 * v2^2 = 1/2 * m1 * v1’^2 + 1/2 […]

龙生   12 May 2015
View Details

ASP.NET MVC 模型验证-最舒服的验证方式

在院子里发现 http://www.cnblogs.com/yangecnu/p/3759784.html 模型验证方法 1. 一般方法 繁琐, 无数的if else, 在炎炎夏天,我见过一个验证方法3000行代码的,还要改需求,想必您能了解作为coder当时的心情。 2. 使用第三方框架,功能过于繁琐,还得自己学习,没必要 3. Code Contract 不熟悉,貌似和第三方不同的是:MS提供的,先得高大上一点而已,本质一样 下面的方法,既简单,维护也很方便。代码涉及点: 1) 模型文件代码-添加验证规则,至于你想怎么添加,可以自定义Attribute,或者使用FCL中自带的(本例即是) 2)模型数据操作的Action-在需要验证的Actiond中注入属性或者controller或者全局也行 3)过滤器-添加错误捕捉,处理 维护时,只需要修改各个业务模型中每个字段的验证规则即可 模型建立:

模型数据操作:

from:http://www.cnblogs.com/youlixishi/p/4497462.html

龙生   12 May 2015
View Details

使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运行。 项目的核心功能已经基本实现,但12年之后我基本停止了这方面的开发,现在翻出来在这里写出来想和大家交流一下。   鉴于篇幅和精力的原因,请原谅我这篇博文对于技术实现的具体细节谈的不是很多,只能算是一个概述。对业务的说明也不多,我想大家都是技术流,应该一看就明白。 写这个项目的时间是五六年前,现在回过头去看,有很多不足之处,设计上的,技术上的都有,加上当时技术力有限,不足之处还请指正,谢谢。 后续是否会写一个系列的博文详细的分析讲解实现方法,我暂时也没有想好,主要是没有太多时间,我现在基本又回到了当初每天只睡四五个小时的状态。 如果此篇博文有点儿价值,给个推荐呗 ^_^   项目使用了 .Net Framework 3.5 开发,分为两大块: IDE 和 运行时(解析器) IDE中开发的项目在打包后生成 zip 格式的包,解析器通过读取 zip 包实时解析运行,有点类似中间语言的概念,但我这里生成的 zip 包中主要以 xml 文件为主,通过 xml 文件对项目的 UI,业务,数据结构 进行描述。   到此可以看出,运行时本身并不一定是 .Net 或 WinForm 的,而是可以使用任何平台或语言实现,只要读取 zip 文件和 xml 文件并解析即可。 事实上我自己实现的默认运行时也不是 WinForm,而是用了 Silverlight。   再简单说说 IDE 的设计思路,几个主要的设计目标如下:   1.像 Visual Studio 一样 有可视化的环境,拖拖拽拽界面就出来了。 2.模块化设计 功能模块全部独立,解耦,以插件的形式存在于主程序(宿主)中。 2.不要写代码,业务通过界面,向导进行配置 拖一个按钮上去,想要单击时做一件事情,就先把按钮拖上去,然后设置这个按钮的事件序列,配置对应的事件。 3.把事件这个概念抽象并封装起来 如“保存数据”这个事件,配置好数据的来源,如窗体上的数据,或系统数据,再配置好要保存的目标,某种数据实体,即可,这个事件被添加到某个事件序列,如按钮的单击事件序列中,项目被运行时解析时,就会按钮这个逻辑执行。 4.对数据操作要有一定的自由度 除了基本的向导式配置以外,要能满足特殊需求,比如支持自定义 sql 语句。但是自定义 sql 语句怎样与数据源,目标交互呢?我设计了一种简单的表达方法,如 UPDATE FROM [User] SET [Name] = {FormElement.txtName} WHERE [Id]={System.UserId} 5.对数据库数据表的操作怎样交互 就是将其抽象为“数据实体”,数据实体也在 IDE 中由用户自己定义,定义的过程类似于 SqlServer,定义好数据实体以后,在 IDE 中进行设计时,通过数据实体来抽象对数据库、表的操作,在打包项目时,可以根据定义的数据实体,生成多种数据库,如 SqlServer,Mysql 等。 6.资源文件的管理 在项目中必然要引用到外部资源,这部分外部资源,怎样引入,管理,打包呢?我在 IDE 中设计了独立的资源管理器,在 IDE 中设计 […]

龙生   12 May 2015
View Details

开源搜索引擎Iveely 0.8.0发布,终见天日

这是一篇博客,不是,这是一篇开源人的心酸和喜悦,没有人可以理解我们的心情,一路的辛酸一路的艰辛,不过还好,在大家的支持下,总算是终见天日,谢谢那些给予我们无私帮助的朋友。您的支持,依然是我们无限的动力,作为回报,免费继续保持开源,是我们对您们的真诚谢意。 Iveely 从0.1.0走到现在,我们见证了付出与汇报,失落与惊喜,柳暗花明,我们遭遇了财力枯竭,人员严重短缺,精疲力竭的眼泪,该经历的我们都经历了,但是我们很庆幸,我们幸运的经历了这些,我们痛并快乐的坚持,终究迎来了0.8.0,0.8.0 更加注重知识问答,因此至少为我们带来了下面功能: 1.  分布式实时计算平台。 分布式实时计算平台,脱离任何具体业务,动态分配机器节点,为程序直接进行分布式运行。 2.  强劲数据存储引擎。 对于数据存储,我们想了很多方法,尝试了很多开源数据存储,但是他们都不适合搜索引擎数据存储,在插入和读取之间难以平衡,在0.7.0中,我们拥有了数据存储引擎,但是0.7.0的数据存储弱点依然比较明显,为了达到较快的读取和写入速度,牺牲了较大磁盘空间,很多朋友反应,磁盘很快就不够用,从商业化角度,增加了企业成本,由此,0.8.0,在保证读写性能上,考虑了磁盘存储,使得存储更佳强劲。 3.  插件式热启搜索功能。 我们一直在思考一件事情,怎样更佳灵活的给搜索引擎添加新功能,例如天气预报、计算器、股票信息等等,在加入的过程中,又不影响线上版本的使用。于是乎,我们从新研制了插件热启机制,可以灵活为搜索添加新功能。上线一个新功能,不再需要重启搜索服务。 4.  更智能的问答。 说了这么多,也许你还是想看看,Iveely 0.8.0到底长什么样子?0.8.0中是包含网页搜索,但是示例中未去收录更多网页,原因是我们的硬件资源(硬盘)已经不足,不得不放弃网页搜索的示例。下面截图示例: 事实到了0.8.0这一步,距离0.7.0发布,时隔近6个月,越到后面工作量越大,很多朋友私下QQ或者邮件问了我一些问题: “没有收益,没有盈利,没有公司支持,你们为啥做这个?” 这是我们遭遇到最尴尬的问题,我们原本可以享受着高薪的生活,拿着比同龄人高很多的薪水,甚至有人拿着丰厚的待遇邀我出任其公司CTO,可我们选择了辞掉工作,婉拒别人邀请,和小伙伴们一直坚持最初的梦想。每个人都是聪明的,都非常有天赋,而天赋就是兴趣,每个人都不必去追求职称、纠结绩效,不必为了丰厚的薪酬,丢弃了真实的自己,做自己厌倦的事情。因为我们坚信人工智能的时代已经到来,如果我们能够为这个时代效绵薄之力,我们也会热血沸腾,这也是我们的快乐。 “Iveely 可否用于商业化?” 这是很多期望做垂直领域信息挖掘的朋友都会问我的问题,答案肯定是可以的。0.8.0版本,在我们4台服务器上,稳定运行了30天,基本上排除了大事故的发生,但是谁也不能保证bug的存在不给您造成麻烦,我们也无法为您花时间提供搜索定制化服务,但是我们可以给予您无偿的技术支持,任何问题都可以发送邮件到 liufanping@iveely.com。 捐助我们 如果,我是说如果,您愿意帮助我们,希望您能够联系我们,我们将利用您的捐助租赁更多服务器,以保证Iveely的稳定性,我们提前对您表示感谢! 此外,也感谢Bogdan P Sliwowski先生、Marcin Bak先生对Iveely 0.8.0的不懈支持,您们的无私支持,让我们备受鼓舞。 再次谢谢大家,谢谢团队的奉献,家人们的理解,朋友们的关心,回过头来,感谢有您! 您的朋友:刘凡平     本文相关帮助: 如何使用Iveely的数据存储引擎Iveely Database 如何部署Iveely.Computing分布式实时计算系统 如何快速写一个分布式实时应用程序 如何编写Iveely搜索引擎插件 直接部署文件下载 源码啊文件下载 发布历史记录: 开源搜索引擎 Iveely Search Engine 0.1.0 的发布 开源搜索引擎 Iveely Search Engine 0.2.0 的发布 Iveely 搜索引擎0.3.0 发布 & 如何搭建自己的搜索引擎 千呼万唤始出来,Iveely Search Engine 0.4.0 的发布 开源分布式计算引擎 & 开源搜索引擎 Iveely 0.5.0 为大数据而生 开源搜索 Iveely Search Engine 0.6.0 发布 — 黎明前的娇嫩 开源搜索引擎Iveely 0.7.0发布,不一样,那就让他不一样!   from:http://www.cnblogs.com/liufanping/p/4489864.html

龙生   12 May 2015
View Details

打造自己的视频会议系统 — 原理篇 (附送GGMeeting 1.0 源码)

自从在博客园发布广域网即时通信系统GG(QQ高仿版)以来,结识了很多做IM的朋友,然后我和我的伙伴们也接到了很多与IM相关的项目。相比在发布GG之前难以接到项目的状况相比,现在简直太幸福了,虽然做项目很辛苦,但毕竟有钱赚,那辛苦也值了。 饮水思源,这里要感谢博客园提供了这么好的一个平台,让我们能展现自己的实力,提升我们的知名度,然后才能接到了更多项目。所以,我强烈建议那些希望接项目、接私单的朋友,都来博客园写博客吧,写出自己的知名度后,真是好处多多! 言归正传,前段时间做了个在线教育培训的项目,与视频会议比较类似,所以了,我打算像GG一样,写一个视频会议系统并把实现的原理和源码都分享出来,让有兴趣的朋友可以参考下。继承GG的名称,我把这个视频会议系统命名为GGMeeting,目前版本为1.0,后续功能会不断增强。 一般而言,视频会议的主要核心功能是:多人语音、多人视频、公共电子白板、会议房间管理。本文我们将介绍视频会议系统的主要功能及其实现原理,后面有空在介绍详细每个功能的详细实现细节。 一.语音通话 1.基础模型 在视频会议中,网络语音通话通常多对多的的,但就模型层面来说,我们讨论一个方向的通道就可以了。一方说话,另一方则听到声音。看似简单而迅捷,但是其背后的流程却是相当复杂的。我们将其经过的各个主要环节简化成下图所示的概念模型: 这是一个最基础的模型,由五个重要的环节构成:采集、编码、传送、解码、播放。 语音采集指的是从麦克风采集音频数据,即声音样本转换成数字信号。其涉及到几个重要的参数:采样频率、采样位数、声道数。 假设我们将采集到的音频帧不经过编码,而直接发送,那么我们可以计算其所需要的带宽要求,仍以上例:320*100 =32KBytes/s,如果换算为bits/s,则为256kb/s。这是个很大的带宽占用。而通过网络流量监控工具,我们可以发现采用类似QQ等IM软件进行语音通话时,流量为3-5KB/s,这比原始流量小了一个数量级。而这主要得益于音频编码技术。 所以,在实际的语音通话应用中,编码这个环节是不可缺少的。目前有很多常用的语音编码技术,像G.729、iLBC、AAC、SPEEX等等。 当一个音频帧完成编码后,即可通过网络发送给通话的对方。对于语音对话这样Realtime应用,低延迟和平稳是非常重要的,这就要求我们的网络传送非常顺畅。 当对方接收到编码帧后,会对其进行解码,以恢复成为可供声卡直接播放的数据。 完成解码后,即可将得到的音频帧提交给声卡进行播放。 2.高级功能 如果仅仅依靠上述的技术就能实现一个效果良好的应用于广域网上的语音对话系统,那就太easy了。正是由于很多现实的因素为上述的概念模型引入了众多挑战,使得网络语音系统的实现不是那么简单,其涉及到很多专业技术。一个“效果良好”的语音对话系统应该达到如下几点:低延迟,背景噪音小,声音流畅、没有卡、停顿的感觉,没有回音。 对于低延迟,只有在低延迟的情况下,才能让通话的双方有很强的Realtime的感觉。当然,这个主要取决于网络的速度和通话双方的物理位置的距离,就单纯软件的角度,优化的可能性很小。 (1)回音消除 现在大家几乎都已经都习惯了在语音聊天时,直接用PC或笔记本的声音外放功能。当使用外放功能时,扬声器播放的声音会被麦克风再次采集,传回给对方,这样对方就听到了自己的回音。 回音消除的原理简单地来说就是,回音消除模块依据刚播放的音频帧,在采集的音频帧中做一些类似抵消的运算,从而将回声从采集帧中清除掉。这个过程是相当复杂的,因为它还与你聊天时所处的房间的大小、以及你在房间中的位置有关,因为这些信息决定了声波反射的时长。 智能的回音消除模块,能动态调整内部参数,以最佳适应当前的环境。 (2)噪声抑制 噪声抑制又称为降噪处理,是根据语音数据的特点,将属于背景噪音的部分识别出来,并从音频帧中过滤掉。有很多编码器都内置了该功能。 (3)抖动缓冲区 抖动缓冲区(JitterBuffer)用于解决网络抖动的问题。所谓网络抖动,就是网络延迟一会大一会小,在这种情况下,即使发送方是定时发送数据包的(比如每100ms发送一个包),而接收方的接收就无法同样定时了,有时一个周期内一个包都接收不到,有时一个周期内接收到好几个包。如此,导致接收方听到的声音就是一卡一卡的。 JitterBuffer工作于解码器之后,语音播放之前的环节。即语音解码完成后,将解码帧放入JitterBuffer,声卡的播放回调到来时,从JitterBuffer中取出最老的一帧进行播放。 JitterBuffer的缓冲深度取决于网络抖动的程度,网络抖动越大,缓冲深度越大,播放音频的延迟就越大。所以,JitterBuffer是利用了较高的延迟来换取声音的流畅播放的,因为相比声音一卡一卡来说,稍大一点的延迟但更流畅的效果,其主观体验要更好。 当然,JitterBuffer的缓冲深度不是一直不变的,而是根据网络抖动程度的变化而动态调整的。当网络恢复到非常平稳通畅时,缓冲深度会非常小,这样因为JitterBuffer而增加的播放延迟就可以忽略不计了。 (4)静音检测 在语音对话中,要是当一方没有说话时,就不会产生流量就好了。静音检测就是用于这个目的的。静音检测通常也集成在编码模块中。静音检测算法结合前面的噪声抑制算法,可以识别出当前是否有语音输入,如果没有语音输入,就可以编码输出一个特殊的的编码帧(比如长度为0)。特别是在多人视频会议中,通常只有一个人在发言,这种情况下,利用静音检测技术而节省带宽还是非常可观的。 (5)混音 在视频会议中,多人同时发言时,我们需要同时播放来自于多个人的语音数据,而声卡播放的缓冲区只有一个,所以,需要将多路语音混合成一路,这就是混音算法要做的事情。 二.视频通话 1.基础模型 视频通话的概念模型与语音完全一致: 摄像头采集指的是从捕捉摄像头采集到的每一帧视频图像。在windows系统上,通常使用VFW技术或DirectShow技术来实现。采集视频的两个关键参数是帧频(fps)和分辨率。 一般而言,一个摄像头可以支持多种不同的采集分辨率和采集帧频,而不同的摄像头支持的分辨率的集合不一样。比如现在有很多高清摄像头可以支持30fps的1920*1080的图像采集。 编码用于压缩视频图像,同时也决定了图像的清晰度。视频编码常用的技术是H.263、H.264、MPEG-4、XVID等。 当对方接收到编码的视频帧后,会对其进行解码,以恢复成一帧图像,然后在UI的界面上绘制出来。 2.高级功能 相比于语音,视频的相关处理要简单一些。 (1)动态调整视频的清晰度 在Internet上,网络速度是实时动态变化的,所以,在视频会议中,为了优先保证语音的通话质量,需要实时调整视频的相关参数,其最主要的就是调整编码的清晰度,因为清晰度越高,对带宽要求越高,反之亦然。 比如,当检测网络繁忙时,就自动降低编码的清晰度,以降低对带宽的占用。 (2)自动丢弃视频帧 同样网络繁忙时,还有一个方法,就是发送方是主动丢弃要发送的视频帧,这样在接收方看来,就是帧频fps降低了。 三.电子白板 在视频会议中,电子白板的功能是很重要的。通常会议的主持人会在白板上画图进行讲解,然后其它的人能同步观看和操作电子白板的内容。 通常的电子白板都支持如下功能:线段、箭头线、双箭头线,水平肘型连接符、垂直肘型连接符,矩形、三角形、椭圆(圆),文本,自由曲线,插入图片,激光笔。 在实现上,电子白板主要是使用GDI+技术。 对于电子白板的同步,其原理是这样的:比如,当操作者在白板上绘制一个图像时,这个操作会被封装成一个Command对象(命令模式),然后,通过网络广播发送给会议中的其它人。当其他人接收到这个Command对象时,就将其转换成一个白板操作来执行,这样各个白板的内容就自动同步了。 四.会议房间管理 对于那些动态创建视频会议室,在用完之后就动态将其销毁的通常的视频会议应用场景来说,使用动态组来表示会议房间,是非常恰当的。 所谓“动态组”,就是在服务器内存中动态创建的组,不需要序列化存储到比如数据库或磁盘中,需要的时候就创建一个,然后加入多个成员进行组内沟通,当不再使用的时候,就直接从内存中销毁了。 基于Socket技术,我们可以在服务端实现DynamicGroupManager类来对动态组进行管理。 虽然,动态组仅仅存在于内存之中,但是,在项目需要时,我们仍然可以将其某些重要的信息持久化到数据库中存储。然后,在服务器重启时,可以从DB中加载重要的房间信息。 五.GGMeeting 源码 GGMeeting的当前版本为1.0,已经实现了上述的4个主要功能,大家可以下载源码研究下。 GGMeeting-V1.0 GGMeeting1.0bushu 广告:如果您有类似视频会议系统、在线培训系统、IM系统需要定制开发的,可以联系我们哦:)  QQ:2027224508 运行效果截图: 部署说明: (1)将GGMeeting.Server部署到服务器上,并运行起来。 (2)修改Client配置文件GGMeeting.exe.config中的ServerIP的值。 (3)运行第一个Client实例,以随机帐号进入测试房间。 (4)在别的机器上继续运行Client,以随机帐号进入测试房间,大家即可在测试房间中进行视频会议。 注意:语音视频数据都是实时采集、实时播放的数据,所以测试时,服务器的带宽要求最好是独享带宽,共享带宽一般无法满足实时语音视频的要求。 ________________________________________________________________________ 欢迎和我探讨关于 GG 和 GGMeeting 的一切,我的QQ:2027224508,多多交流! 大家有什么问题和建议,可以留言,也可以发送email到我邮箱:ggim2013@163.com。 如果你觉得还不错,请粉我,顺便再顶一下啊   from:http://www.cnblogs.com/justnow/p/4487201.html

龙生   12 May 2015
View Details

可在广域网部署运行的QQ高仿版 — GG2013总览

(最新版本:V4.2,2015.03.25) GG是QQ的高仿版,包括客户端和服务端,可在广域网部署使用,目前最新版本为4.0。我想写一个类似汇总的文章,通过这篇文章,大家可以了解到GG的全貌和最新进展,以及关于一些常见问题的解答也汇总在这里。 言归正传,对我个人而言,我的目标并不是做一个QQ高仿版的玩具,而是希望做成一个能够真正使用的产品(这个过程还有很长的路要走),并持续维护下去。 一.已实现的功能 (01)注册、登录、添加好友、好友列表。 (02)自拍头像。 (03)文字聊天、字体设置、GIF动态表情、窗口震动、截图、手写板、登录状态(在线、离开、忙碌、勿打扰、隐身)、输入提醒 (04)群功能:创建群、加入群、退出群、群聊天 (05)文件传送、文件夹传送(支持断点续传) (06)语音视频聊天 (07)远程磁盘 (08)远程协助 (09)共享桌面(可以指定要共享的桌面区域) (10)可靠的P2P (11)网盘 (12)离线消息 (13)离线文件 (14)托盘闪动:跟QQ完全一样,当接收到消息时,托盘会闪动对应好友的头像。点击头像,将弹出与好友的聊天框。 (15)最近联系人列表 (16)系统设置:开机自动启动、麦克风设备索引、摄像头设备索引,叉掉主窗口时关闭程序还是隐藏窗口。 (17)聊天记录:支持本地保存和服务器端保存两种方式。 (18)好友分组:新增/删除分组,修改分组名称,改变好友的所属分组。 (19)打开聊天窗口时,自动显示上次交谈的最后一句话。 (20)输入提醒:像QQ一样,当对方正在输入消息时,我这边的聊天框可以看到对方“正在输入”的提示。 (21)自动记录:GG2014会自动记录上次打开的主界面的位置、大小;最后一次打开的聊天窗口的大小;最后一次设定的字体的颜色、大小等。 (22)主窗体靠边自动隐藏。   二.后续待实现的功能 (1)增加持久化支持 (2)视频会议   三.开发环境 开发环境:VS2010 ,开发语言:C#, .NET Framework 版本: 2.0 部署客户端时,客户端机器还需要安装VC++2008 runtime、VC++2010 runtime。   四.相关说明 1.如果要将GG部署到广域网,则可以在服务端的配置文件中设置监听的端口;而在客户端的配置文件中,则可以指定服务器的IP和Port。 2.虚拟数据库 (1)为了部署测试更简单,GG没有采用真实的物理数据库,而是在内存中虚拟了一个数据库(即服务端的VirtualDB类),用于存储用户注册信息、好友关系、群信息等。 (2)GG内置了几个用户:10000、10001、10002、10003,它们的登录密码都是"1"。 (3)GG内置的这几个用户之间都是好友关系。 (4)GG内置了两个群:G001、G002。G001群包含所有内置测试用户,G002群包含10000和10001两个用户。 (5)上述的这些内置信息,在VirtualDB类的构造函数中设定。 3.麦克风、摄像头的选择可在客户端系统设置窗口(SystemSettingForm)中指定。 4.语音视频:也有很多朋友问语音视频设备的工作怎么不正常,或者语音视频不流畅,这个可以直接参考OMCS官方文档:摄像头、麦克风、扬声器、设备测试 、带宽要求。 5.特别说明一下:GG项目中,只要是我写的代码,全部都放出来了。拜托喜欢每一个dll都有源码的朋友不要再问我要其它的源码了:)   五.版本记录 2013.08.07  —  V1.0, 登录、好友列表、文字聊天、文件传送、文件夹传送 2013.09.02  —  V1.8, 语音视频聊天 2013.09.23  —  V2.0, 网盘、远程磁盘 2013.11.05  —  V2.4, 远程协助、共享桌面 2014.04.15  —  V3.0, 注册、加好友、加入群、群聊 2014.05.16  —  V3.2, 离线消息、离线文件 2014.05.28  —  V3.4, 系统设置、最近联系人 2014.06.30  —  V3.5, 自拍头像、修改密码、删除好友 2014.08.06  —  V3.6, […]

龙生   12 May 2015
View Details

用C#开发ActiveX控件,并使用web调用

入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己。最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及到的ActiveX控件开发并用web来显示的,正好也总结一些,之前在学校一直没有接触过,网上是有教程的,但是大多有问题,只有自己亲自测试通过了才放心。 一、开发ActiveX控件 1、新建类库,命名类库名称“user.cs”; 2、在类库中添加自定义用户控件“ UserControl1”,实现各种自定义功能; 3、为了解决浏览器安全设置对控件的影响,必须在组件中加入IObjectSafety接口,所以再添加一个接口类“IObjectSafety.cs”

4、继承接口

5、在UserControl1引入两个命名空间 using System.Security; using System.Runtime.InteropServices; 6、工具——创建GUID——新建GUID——选择第五项——复制,就可以关闭小窗口,然后在命名空间下粘贴,如下

7、最后一步,项目——user属性(最后一项),两处需要修改 ①应用程序——程序集信息——√ 使程序集COM可见 ②生成——√ 为COM互操作注册 8、即可右键项目user——生成 二、web使用ActiveX控件   在web调用很简洁,引用刚刚生成的dll文件,然后在添加

即可完成。注意的是:这里的classid里边的字符串里边有 “ clsid: ”,别忘啦,后面接的是第六步生成的GUID,必须一致! 好了,该吃午饭了,有什么不足的,忘园子大咖们批评指出。 from:http://www.cnblogs.com/EminemJK/p/4496953.html

龙生   12 May 2015
View Details

使用C#开发ActiveX控件全攻略

转自:http://lwchome.spaces.live.com/blog/cns!791B533443007D37!234.entry   前言: 这段时间因为工作的需要,研究了一下ActiveX控件。总结如下: 先说说ActiveX的基本概念。 根据微软权威的软件开发指南MSDN(Microsoft Developer Network)的定义,ActiveX插件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。 ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(现在的网络主要包括Windows和Mac)中任意运行的程序。这个组件就是ActiveX近控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和JAVA applet功能类似。 目前支持ActiveX的主要是IE浏览器。 以前ActiveX开发普遍使用VC++或VB,随着C#和.net的发布,用C#开发ActiveX控件变得更方便、更简单。但需要注意的是用C#开发 的ActiveX控件需要客户机装有.net framework,有点郁闷。可是相对.net强大的功能良好的易用性,这点牺牲还是值得的,况且现在好多计算机已经安装有.net framework了。 其实.net下的winform控件也是可以直接嵌入到web网页里的,但是由于.net安全性的限制,无法在客户端实现复杂的操作,比如磁盘空间操作和注册表操作。因为ActiveX控件是以本地用户的身份运行,可以突破.net安全性的限制,所以开发ActiveX控件还是很必要的。 C#写ActiveX控件的原理很简单,就是使用了.net平台和COM的互操作性。修改项目属性的目的就是将.net控件注册为com。这样,你就可以把这个控件完全当作ActiveX控件来对待了。比如,可以使用JS和VBS来调用,也可以使用C++来调用。 下面一步步来实现C#写ActiveX控件。 第一部分:用vs2008制作一个winForm控件 用vs2008建立一个新的“windows窗体控件库”命名为“WindowsFormsControlLibrary1”如下图 点击确定后,将UserControl1.cs更名为demo.cs。向界面里添加一个Labal、一个TextBox和一个Button,相应的修改控件属性。如下图: 为button1添加Click事件,代码如下: private void button1_Click(object sender, EventArgs e) { label1.Text = textBox1.Text; } 在AssemblyInfo.cs中引用System.Security命名空间,并添加一句: [assembly : AllowPartiallyTrustedCallers()]   为类demo添加Attribute,[System.Runtime.InteropServices.Guid("A82F92E1-BA7F-3B32-B389-584E8AB4441F")]   好,现在编译整个工程,生成\bin\Debug\WindowsFormsControlLibrary1.dll,我们的winform控件就做好了。 下面在解决方案里添加一个web应用程序的工程,名为WebApplication1,用来测试我们的控件。 将WindowsFormsControlLibrary1.dll拷贝到WebApplication1所在的目录下。然后在Default.aspx 里面加入“<object id="helloworld" classid='http://localhost:59639/WindowsFormsControlLibrary1.dll#WindowsFormsControlLibrary1.demo' width="184" height="96" > </object> ok,编译运行后你将看到如下界面: 第二部分:把这个winForm控件转换为ActiveX控件 到目前为止,我们所实现的只是winform控件,还不是真正的ActiveX控件。 鼠标右键,打开WindowsFormsControlLibrary1的工程属性,在“应用程序”里点击“程序集信息…”显示如下界面: 选中“使程序集COM可见”,然后确定。 进入“生成”页面,如下图: 选中“为COM互操作注册”。   重新编译工程,这时WindowsFormsControlLibrary1.dll就变成了一个ActiveX控件。 如果编译时,提示你权限不够(Windows 7 UAC),需要以管理员运行Visual Studio。 如果编译时,The assembly could not be converted to a type library. Type library exporter encountered an error while processing 'xxxxxx'. Error: 找不到元素. 你在Relase 下进行编译。 编译成功后,可以在注册表项HKEY_CLASSES_ROOT\WindowsFormsControlLibrary1.Demo […]

龙生   12 May 2015
View Details
1 133 134 135 177