未找到

未发布 百度正式开源其RPC框架brpc
by Harriet666 keys 分享 1506650334597
9月14日,百度正式在GitHub上基于Apache 2.0协议开源了其RPC框架brpc。brpc是一个基于protobuf接口的RPC框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有RPC协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc的性能领跑于其他同类RPC产品。
 
brpc开发于2014年,主要使用的语言是C++和Java,是百度内部使用最为广泛的RPC框架,它经受了高并发高负载的生产环境验证,并支撑了百度内部大约75万个同时在线的实例。据了解,百度内部曾有多款RPC框架,甚至在2014年时还开源过另外一款RPC框架sofa-pbrpc。那brpc是在什么样的背景下诞生的?它有什么样的优势?又为何要开源?就这些问题,InfoQ记者采访了brpc负责人戈君。
 
Q:谈谈brpc的一些基本情况?什么时候开始研发的?经过了怎么样的迭代和升级?目前在内部应用情况如何?

戈君:brpc于2014年创建,在百度内部称为“baidu-rpc”。到目前为止,brpc一共进行了3000次左右的改动,现在仍在持续优化中,百度内的wiki上可以查询到每次改动的描述。brpc的主要语言是C++和Java,对其他语言的支持主要是通过包装C++版本,比如brpc的Python版包含C++版的大部分功能。
 
brpc目前支撑百度内部大约75万个同时在线的实例(不含client),超过500种服务(去年的统计,现在已不统计这类数据)。Hadoop、Table、Mola(另一种广泛使用的存储)、高性能计算、模型训练、大量的在线检索服务都使用了brpc。brpc第一次统一了百度内分布式系统和业务线的通信框架。
 
Q:为什么百度当时要研发brpc?

戈君:我们在实践中意识到,RPC作为最基础的通信组件,当时的百度已经不领先了。我当时的经理刘炀曾是Google的工程师,非常重视基础架构的建设,也愿意在这个方向投入资源。
 
我们在内部会更加深入地讨论这些问题。“好用”有时看起来很主观,但其实还是有据可循的,它的关键点是能不能真正地提高用户的效率:开发、调试、维护都要考虑到,如果用户效率真的被提高了,用户会想着你的,靠吹嘘或政令推广的东西得不了人心。我们创建brpc的初衷是解决百度业务所面临的实际挑战,同时也希望成为百度同学最喜爱的工具,哪怕离开百度也会怀念brpc。我们希望在提供了一个好用框架的同时,也展现了一种工作方法:注释怎么写,日志怎么打,ChangeLog怎么写,版本怎么发布,文档怎么组织,甚至对未来不在百度的同学的工作也有帮助,所以从这点来说brpc从一开始就是拥抱开源的。事实上,我们在口碑上做得还不错,brpc的wiki可能是百度内被点赞最多的内容之一。
 
Q:与其他的一些开源的RPC框架相比,brpc的优势是什么?

戈君:brpc主打的是深度和易用性。一方面我们没有精力像gRPC那样摊大饼,什么都做。另一方面我们也注意到gRPC(包括更早的Thrift)的深度和易用性并不够。技术方面的东西就是这样,看示例程序,文档非常牛逼,但实战中可能就是另一回事了,为什么各个公司都要造自己的轮子,一个隐藏原因就是表面高大上的东西在一些细节上让你无法忍受。

RPC真正的痛点是什么?是可靠性、易用性和定位问题的便利性。服务中不要出现不可解释的长尾,程序的可变项要尽量少,各种诡异问题要有工具支持快速排查。而这些在目前开源的RPC框架中做的并不好,它们大多看着很牛,但就是无法在自己组织中推广开来。回到前面那三点,brpc是如何做的呢?
  • 可靠性。这一方面是代码质量问题,通过为brpc团队设立很高的招聘门槛,以及在团队中深入的技术讨论,我们确保了稳固的代码基础。另一个问题是长尾问题,这是设计问题,brpc其实包含了很多模块,其中的bthread是一个M:N线程库,就是为了更好地提高并发避免阻塞。brpc中的读和写都是wait-free的,这是最高程度的并发。技术细节请点击链接查看。
  • 易用性。有种设计是什么选择都做成选项丢给用户,号称功能都有,但一旦出问题,则是用户“配置错了”。而且这样用户还非常依赖开发团队,没有开发团队的支持基本用不了,开发团队有足够的理由扩充团队。这么做其实非常不负责任,用户面对海量的选项也很难受。brpc对于增加选项非常谨慎,框架能自己做判断的绝不扔给用户,所有用户选项都有最合理的默认值,不设也能用。我们认为这对用户体验来说非常重要。
  • 定位问题的便利性。这点其它开源框架目前做的都不好,正常使用是可以的,但出问题就麻烦了。这个问题在百度内部其实也很严重,brpc之前用户排查问题都要拉RPC同学一起排查,RPC框架对用户是个黑盒,用户根本不知道里面发生了什么。按我们的经验,基本每天都有几个用户在群里问server卡顿,client超时之类的问题,排查问题是常态,人手必然不够。时间长了用户就觉得你这个框架各种问题,人还拽的不行很少回他们消息。brpc的解决办法是给server内加入各种HTTP接口的内置服务,通过这些服务,用户可以很快看到server的延时、错误、连接、跟踪某个RPC、CPU热点、内存分配、锁竞争等信息,用户还可以使用bvar来自定义各类统计信息,并在百度的运维平台NOAH上汇总。这样大部分问题用户可以自助解决。其实我们去看也是看这些,只是会更加专业。内置服务的具体说明可以看这里。
 
Q:作为公司内部的RPC框架,在服务治理方面有什么考虑?

戈君:百度内部RPC使用非常广泛,基本都是RPC调用,一些产品线还会通过local RPC隔离工程框架和策略代码。这么多年下来,服务周边的系统也比较全面了:编译是BCLOUD,发布是Agile,服务注册和发现是BNS,认证是Giano,监控和运维是NOAH。在百度内部,brpc和这些系统做了比较紧密的绑定,用户体验是一站式的。虽然在开源版本中,这些结合大都删掉了,但用户可以根据自己组织中的基础设施来进行定制:交互协议,名字服务,负载均衡算法都可以定制。对于其中一些特别通用的,我们希望用户反馈到开源版本中来以方便所有人。
 
Q:之前百度还开源过sofa-pbrpc,brpc与它的区别是什么?

戈君:sofa-pbrpc也是百度开发的一个比较早期的RPC框架,属于sofa编程框架的一部分,在搜索有应用。brpc相比sofa-pbrpc有如下优点:
  • 对协议的抽象更一般化,并统一了全百度的通信架构。bprc能容纳非常多的协议,基于Protobuf的,基于HTTP的,百度内的nshead/mcpack,开源的Redis/Memcached,甚至RTMP/FLV/HLS直播协议,brpc能逐渐地嵌入现有系统,而不需要彻底重构,但sofa-pbrpc则不具备扩展协议的能力。类似的,sofa-pbrpc也无法定制负载均衡算法,brpc默认提供round-robin、随机、一致性哈希,Locality-aware(局部性感知)四种算法,用户还能定制。
  • 多线程质量更好。多线程编程是非常困难的,看起来简单的RPC遍布多线程陷阱,比如处理超时的代码可能在RPC还没发出去时就运行了;发送函数还没结束,处理回复的回调就被运行了;一个回复还在被处理另一个回复回来了,诸如此类。另外,一个异步RPC的回调里发起一个同步RPC会发生什么,带着锁做同步RPC会发生什么。这些问题我们都不能在sofa-pbrpc中找到满意的答案。
  • 完备的调试和运维支持。解决这个问题的本质还在可扩展性,你如何让用户参与进来定制他们感兴趣的指标,为此我们设计了bvar,让用户能用比原子变量代价还小的方式自由地定制各种指标,用户能在浏览器上看到指标的变化曲线,或在运维平台NOAH看到汇总的监控数据。brpc还加入了大量内置服务方便用户调试程序,查看连接,在线修改gflags,追踪RPC,分析CPU热点,内存分配,锁竞争等一应俱全。
无需讳言,brpc在诞生之初和sofa-pbrpc在百度内部是有竞争关系的,但就像其他地方一样,这种竞争带来了活力。类似的,brpc和其他已经开源的RPC框架也是良性的竞争关系,在比拼谁能真正提高用户效率的过程中共同进步。每个用户都可以去对比代码、文档质量,接口设计,易用程度,扩展能力等,投出自己的一票。
 
Q:谈谈brpc的整体架构?

戈君:技术栈无外乎是从传输层垒到应用层,就略过不讲了,具体可以去看下开源出来的文档。brpc在架构上强调“在不牺牲易用性的前提下增强可扩展性”,比如brpc支持非常多的协议,在百度内部一个brpc server同端口可以支持二十几种协议,这对于服务的平滑迁移就非常好用。

Client端的协议也非常多,用户用brpc和bthread用得很爽,所以希望我们最好能统一所有的客户端,像对Redis和Memcached的客户端支持也是在这个背景下做的,这两个客户端比官方Client好用多了,感兴趣的读者可以去尝试一下。但这么多协议的配置非常简单,填个字符串就行了,比如HTTP就是把ChannelOptions.protocol设为“http”,Redis就是“redis”。Server端甚至不用设,它会自动判断每个client的协议,怎么做到的开源文档里也有。

名字服务、负载均衡也都可以定制。但为了对用户负责,我们也不鼓励“太自由”的定制,比如一点点需求的变化就要搞个新的,这时更需要想清楚本质区别是什么。这个事情我们在百度内的支持群里每天都在做,我们是开放的”乙方”,但我们也是严厉的”乙方”。
 
Q:brpc的性能如何?这么高的性能是怎么做到的?

戈君:性能是我们非常看中的一点,它和用户体验也是紧密联系的。好用但性能不行,或不好用但性能很牛,用户会很难受,我们不希望用户纠结。从另一个角度来看,在推广初期,我们要说服产品线用brpc靠什么?最直观的就是性能提升。而且这儿的性能不能停留在benchmark的图片上,而是能在真实应用中体现出来。开放出来的案例文档中或多或少都包含了性能提升,具体如下:
  • 百度地图API入口
  • 联盟DSP
  • ELF学习框架
  • 云平台代理服务
 
Q:为什么要将brpc开源?接下来在开源项目的迭代方面有什么计划吗?

戈君:因为马上还有不少依赖RPC的百度系统要开源啊。RPC作为最基础的组件,开源不仅仅是为了自身,也是为其它开源项目铺路,比如说我们马上还会开源基于brpc的RAFT库,搭建高可用分布式系统非常方便;以及使用brpc的bigflow,让流式计算变得很顺手。这些年百度对开源的认识也在不断加深,开源看似曝光了百度的核心技术,但带来的生态影响力更重要。从Apollo、PaddlePaddle开始,百度真的开始拥抱开源了。brpc的开源版和内部版很接近,只是去掉了对百度内部独有的一些基础设施的支持,我们在内网写的深入分析RPC技术细节的文档也都一并开源了,后续也会及时推送改动,请大家放心。这是一个活项目,不会拉个开源分支就不管了。
查看更多资讯>>>

未发布 Oracle正式发布Java 9,引入新的Java编程组件
by Harriet666 keys 分享 1506566182619
Java SE 9.0于2017年9月21日发布。JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可命名的、自描述的代码和数据集合。模块技术的核心目标是减少Java应用和Java核心运行时环境的大小与复杂性。为此,JDK本身进行了模块化,Oracle希望通过这种方式提升性能、安全性和可维护性。

为了支持Java 9的模块,引入一种新的模块化JAR文件形式,按照这种形式会在其根目录中包含一个module-info.class文件。Oracle同时提供了工具,允许我们组合和优化一组模块,形成自定义的运行时镜像(image),这样的镜像不必将整个Java运行时包含进来。模块化所带来的其他变化包括从Java运行时镜像中移除了rt.jar和tools.jar。
Java社区进程(JCP)执行委员会的成员Ben Evans认为最急需重构的应用恰好就是最适合进行模块化的应用。如果你已经备受Lava Flow/God Class/Stovepipe System地狱的折磨,而且你的利益相关方明确知道这一点,那么你可能更容易说服他们进行一次完整的底层重构,通过渐进式的努力形成一个完成的模块解决方案(而不是简单重构并迁移至Java 8)是值得去做的。

Oracle宣布Java 8会是一个长期支持的发布版本,会一直支持到2022年,因此Evans认为很多的应用将会停留在Java 8上,根本不会升级到Java 9。Evans补充说,有些应用可能会让开发和构建工具链使用Java 8版本,而在生产环境使用Java 9的运行时。
对特定类型的应用来说,这是很有帮助的。例如,我曾经见到有的电子商务网站具有非常大的堆空间,其中包含了大约40G的字符串数据。Java 9的ompact Strings技术能够将这种类型的内存使用减半。这反过来又会对GC的性能带来积极的影响。对于有些应用来说(这可能就包括大型的Solr安装环境及类似场景),单单这一项收益就值得将运行时升级到Java 9。

Java 9使用G1作为默认的垃圾收集器,替代了之前默认使用的Parallel GC。Evans对这项变化的评论:
这项变更是很重要的,因为相对于Parallel来说,G1会在应用线程上做更多的事情,而Parallel几乎没有在应用线程上做任何事情,它基本上完全依赖GC线程完成所有的内存管理。这意味着切换到G1将会为应用线程带来额外的工作,从而直接影响到应用的性能。


在很多(甚至可以说大多数)场景中,这种额外的性能损耗都不是什么问题。但是,在这方面,我确实也曾经见过从Parallel切换到G1时,有一定比例的工作负载会引起性能的下降。对于这些应用来说,这种性能下降是无法接受的,所以他们无法切换至G1收集器。随着G1成为默认的收集器,这将会影响到升级至Java 9的每个应用。

JClarity的CEO Martijn Verburg认为大型的代码库需要重构为模块的形式。Verburg给出了一些通用的模块化建议,并且指出了开发人员在采用Java 9模块系统时,需要注意的一些事情:
  • 阅读Paul和Sander的图书“Java 9 modularity”:它是本权威指南,提到了所有需要注意的地方,阐述了模块、包以及JAR之间如何运行的关联关系; 
  • 在模块边界的地方,使用定义良好的接口并且针对这些接口编程; 
  • 不要拆分包(split package),也就是说一个包不要分散到两个模块中。Adopt OpenJDK有个探测工具,我们可以用它来探测已有的代码; 
  • 确保不要存在循环依赖(Jigsaw不允许这样); 
  • 模块在源码的布局上与我们已习惯的方式有所不同,需要确保构建工具能够进行对应的处理; 
  • Jigsaw不支持多版本。
 
按照Verburg的说法,核心要点在于处理循环依赖、拆分包的问题,并确保针对接口进行编码。在尝试使用Jigsaw模块化重构之前,针对已有的代码库,这些工作需要预先完成。他还澄清了一个误解,那就是只有模块化的应用才能在Java 9上运行。

由于误解,在这方面有一种FUD(恐惧、不确定和怀疑)情绪,有人误认为在Java 9上运行的必须是模块化的应用。事实并非如此,我们可以将已有的基于类路径的应用直接在Java 9上运行。这里会有一些新的安全限制,因此我们需要设置一些特定的运行时标记(除非你重构代码,使用更安全的方式来访问Java的内部资源),即便如此,默认的行为也只是警告,而不是完全阻止我们(Java 10的限制会更严格)。

Verburg认为Jigsaw会是一个基石,会让Java的演进更快,这要归功于Mark Reinhold、Alan Bateman、Mandy Chung以及Jigsaw团队的其他成员多年来不知疲倦的工作,正是他们的努力使这一切得以实现。

Java 9还引入了jshell工具。这个命令行环境为Java平台带来了读入-求值-打印-循环(Read-Eval-Print-Loop,REPL)功能。它的目的在于以即时结果和反馈的形式,简化原型的实现并帮助我们探索语言在编码时的可选项。

Verburg和Evans看到Java 9中包含了jShell都非常兴奋,但令他们失望的是,HTTP/2只是作为Java 9的一个孵化模块(incubator module)提供的。鉴于社区对这项特性的兴趣和提供的帮助,Evans认为Oracle应该投入足够的工程资源,将HTTP/2交付为GA版本。

JDK 9完整的变更列表可以在Oracle的站点上查阅。Oracle宣布会按照每六个月一次的节奏进行发布,意味着Java 9是最后一次“keystone”特性驱动的版本发布,这反映出了Oracle目前管理Java的特点。Java下一阶段的演化将会按照更短的发布周期并且会按照更加面向特性的方式来发布。Java是否依然能够在服务端技术中占据领导者地位尚有待观察。
更多资讯点击查看>>>



未发布 7个最新的实用性 JavaScript MV*框架
by Harriet666 keys JavaScript 1487317434712
JavaScript是目前web上最受欢迎的编程语言之一。最初它并不是很受欢迎,因为它不是为服务器端编程而设计的。JavaScript主要作用于设计用户界面,许多开发人员特别是经验丰富的专业人士认为它比较适合缺乏经验的新手使用。随着用户体验成为Web开发中一个重要的组成部分,JavaScript的人气也开始增加。有一些框架有助于构建JavaScript应用程序,其中MV *是可以构建MVP和MVVM模式的框架。点击查看7个最新的实用性 JavaScript MV*框架>>>
未发布 MVC界面开发包Essential Studio for ASP.NET MVC发布2017 v3丨附下载
by Harriet666 keys 分享 1503307206856
Essential Studio for ASP.NET MVC控件包是一个原生的MVC界面开发包,它包含了几乎所有企业级Web应用程序开发所需要的控件,如Grids, Charts, Gauges, Menus, Calendars, Editors等。 除此之外,该控件包还包含了可以让您的应用程序浏览和创建Excel,Word,PDF文件的高性能元件库。
 
Essential Studio for ASP.NET MVC 2017 v3点击下载>>>
 
Essential Studio for ASP.NET MVC 2017 v3通过添加StackingSplineArea图类型、图表的标尺等,拓宽了开发Web应用程序的范围。
 

PAGER

新控件

PAGER是一个新的ASP.NET MVC组件,可以将大量数据导入页面进行导航。包含一个可以自定义的UI。
主要特征:
  • 导航到所需页面的选项。
  • 导航到上一个/下一个/最后/第一页的选项。
  • 支持本地化。
  • 支持手机。
4a85afa1b17a43a49b45541b2cc18023ojpg
 

统计图表

StackingSplineArea和100%StackingSplineArea系列

增加新的系列类型StackingSplineArea和100%StackingSplineArea。
f600d199c729410ba1e1d483d113ce2dojpg
8dc2cb8b93ce40d597ee163d9f572a08ojpg


数据标签饱和度

根据背景颜色来显示数据标签文本。
042f402f0d4d4057a6fc9799c8e57fb8ojpg
 

多种样条类型

图表控件现在支持多个样条类型。
d32c1e565d954914bdd77a6df1e71786ojpg
 

数据管理器

Web API批量编辑

数据管理器支持Web API批处理操作。Web API批量编辑是一个独特的功能,添加删除和更改的请求可以一次性处理。
 

可查询的数据操作

数据管理器允许通过使用可查询数据操作来查询特定数据源。它可以执行IQueryable服务器端操作,如过滤、分页和排序。
 

图表

支持标尺

标尺已添加到图表控件中。
cd297c41cc9f40879bf1fc3346aab647ojpg
 

标签拖动限制选项

拖动标签时进行对齐,以便在调整其主体对象大小后保留其相对位置。 还添加了将标签拖动到特定位置的选项。
 

DOCIO

内容控件

DocIO能够在Word文档中创建和修改内容控件,并提供了一种设计具有以下功能文档的方法:
  • 创建一个类似表单的用户界面。
  • 防止用户编辑内容控件的内容。
  • 将内容绑定到XML数据。
104139e1a795442c84f27d7c2f98f80aojpg
 

Word转换PDF增强功能

  • DocIO现在可以在Azure网站中将Word文档转换为PDF。
  • DocIO现在可以将具有旋转图像的Word文档转换为原始格式的PDF格式。
  • DocIO现在可以将镜像边距的Word文档转换为原始格式的PDF格式。
8136f46eb918458ca988d0e2a1e25d8fojpg
 

文件管理器

根文件夹配置

支持访问应用程序的根文件夹,并在该根文件夹中显示备用文本。
ed1c240dd8374ce1ae5191026827571bojpg
 

甘特图

工作周

甘特图控制现在支持改变项目的工作周。
775852b746e5462999f379a1ffb77e60ojpg
 

验证任务栏编辑

现在可以验证任务栏编辑。
eb1b8f75d51c44be97820269c5f26f47ojpg


表格

支持页面大小下拉

通过使用页面大小的下拉列表,支持更改网格页面的大小。
2b7454324c5a4e13bb1a3e4def551b6aojpg
 

看板

状态显示/隐藏选项

显示/隐藏卡的功能。它可以使用键值对卡进行分组,并可以切换显示。
46757f7645ad4663b3dfabbddd70e35cojpg
 

PDF

压缩现有的PDF文档

减小PDF文件的大小。
7ffe56de8fd3496c9439ff1de9223e45ojpg
 

标记PDF

 
通过允许用户创建PDF/通用可访问性(PDF / UA)或符合章节508的PDF文档来提供辅助功能。
7805a042de43444b8724d9e02b2348a4ojpg
 

PDF查看器

 

手写签名

PDF查看器允许您将签名添加到任何PDF文档,并将其保存为标准PDF文件。
23357d2ea53e4af8b515e746a0016222ojpg
 

枢轴网格

按需加载(关系数据库)

按需加载允许仅在向下钻取操作时检索数据,从而提高控件的性能。
7a961866813e48be94b65e5cf0ed502fojpg
 

分页(关系数据库)

分页将大量记录分成单独的段以便轻松查看数据。它还提高了枢纽网格的性能。
63a08a8f4eea49cc8fc743c6f5e81009ojpg
 

按日期分组类型(关系数据库)

枢纽网格对日期类型字段进行分类,并根据年、季、月和日格式进行分组。
8f8bde86a206446da0bca8d448d63454ojpg
 

按日期类型排序(关系数据库)

支持以升序或降序来排序日期类型字段。
bb82fc56099244808a56acb85c0fad83ojpg
 

演示

 

支持插入列

演示文稿现在允许在PowerPoint演示文稿中的表中插入列。
bbd6b21bdacc4ed9b88887f0273b52e6ojpg
 

PDF和图像转换增强功能

 
演示文稿现在可以将具有旋转和嵌套组形状的PowerPoint演示文稿精确转换为PDF或图像格式。
3074d62f238d4ba2b7f3af672d0b02b5ojpg
 

丰富的文本编辑

拼写检查器

拼写检查器控件可以在RTE中的iframe元素上呈现,从而很容易找到拼写错误,并在上下文菜单和对话框模式中提供建议。在对话模式中,将显示一个包含建议单词列表的下拉菜单。 在上下文菜单模式下,当右键单击拼写错误的单词时,将出现具有拼写建议的上下文菜单。
e276540b869a4e808b0ccb3a324718b1ojpg
9f51694f512e4a16b4986c48a93494abojpg


时间表

在线添加/编辑预约

用户现在可以创建或编辑预约。
d9126e4ca35c4045b145fca607cc59ffojpg
 

拼写检查

拼写检查同步请求

拼写检查控件提供了通过发送同步请求来检查拼写错误的选项。
 

错误词建议

拼写检查控件提供了将拼写错误的单词传递给客户端的选项,然后检索建议的单词以进行更正。
 

电子表格

支持不连续范围的图表

电子表格控件现在可以将串联的图表导入不连续的范围或一系列点。
48fcc74cbb9244649d4a05f576f0cbd6ojpg
 

树型网格

文字换行

树型网格控件现在支持在单元格中文本换行。
cb2420d796e44b30b6ad7a8ae047729bojpg
 

按需加载

树型网格控件现在使用“按需加载”方法来支持数据绑定。
 
5e04a46c08274b3eb7f8897b42c16147ojpg
27e87b959dbf4890b05ef905e8198ca6ojpg

 

命令列

现在可以使用树型网格中的命令列执行CRUD操作和自定义操作。
6159700e81d04aaebe2468feed7e5673ojpg
2bded05aad0e4eeb81502460adb8a190ojpg

 

打印

现在可以打印树型网格的内容。
5aff4cc45e6b43788428227ebe4e304dojpg
 

编辑模板

树型网格控件使用编辑模板支持使用自定义编辑器编辑单元格值。
b6decf948197447e86e8f37f704467feojpg
 

列优先

现在使用列优先级响应树格网格列。
32eba02ddd244b9db7b1d23cf9ac988cojpg
 

TREEMAP

文字溢出

支持Treemap控件中的标签文本溢出。
1e48300c56e343d591d7f41ddd865f9dojpg

XLSIO

过滤器功能增强

  • XlsIO现在允许用户通过文本、数字、单元格颜色和字体颜色对过滤的数据进行排序。
  • 提供基于自定义文本过滤器过滤数据的功能。
319473abe59c41dd917560a7d894029aojpg
未发布 图表解决方案Nevron Chart for .NET发布v2017.1,支持Visual Studio 2017
by Harriet666 keys 分享 1508233222079

Nevron Chart for .NET是一款业界领先的ASP.NET和Windows应用程序开发图表解决方案。该组件的设计从根本上满足您的绘图需求并将他们包装到一个良好的思想和一致的编程模型。不管您是否需要创建商业,科学,财经或演示图表应用程序,甚至是功能齐全,综合的商业智能解决方案, Nevron Chart将为您的Winforms和ASP.NET项目提供最终的数据可视化。

Nevron Chart for .NET v2017.1最新版下载
 
Nevron Vision for NET v20171

2017.1新版本在Nevron Chart for .NET中引入了很多新功能,以扩展最先进的.NET图表组件的数据可视化功能。

以下是2017.1版本引入的新功能的总结:


三元点系列

三元点系列显示三角坐标系中的点。 每个点由其总和为常数的A、B和C值指定。
Nevron Vision for NET

Nevron Vision for NET

三元气泡系列

三元气泡系列在三元坐标系中显示气泡。 每个气泡由其A、B和C值指定,其总和为常数,并且还具有确定其大小的第四个参数。

点系列

Point系列现在支持下拉线。 下降线是从点X,Y,Z值延伸到图表壁的线。 可选择的下拉线可以延伸到轴Min,Max值或用户指定的值(drop lines origin)。
Nevron Vision for NET

Nevron Vision for NET

柱形连接线

Bar系列现在支持相邻条之间的连接线。

浮子条连接器线和甘特连接器线

Float Bar系列现在支持相邻条之间的连接线开始/结束值。 此外,它还支持甘特连接器之间的条形结束值和一个或多个条形开始值。 此功能允许您轻松显示甘特图。
Nevron Vision for NET

Nevron Vision for NET

热图轮廓标签

热图系列支持注释轮廓。 用户可以指定轮廓值(高程)的格式。 沿着轮廓的标签之间的距离,标签方向是否必须遵循轮廓斜率,标签是否应剪切其注释的轮廓线等。

热图横断面

热图系列可以生成形成轮廓横截面的点列表,该列是通过将热图与由位于地图上的两个点定义的平面交叉定义的。
Nevron Vision for NET

Nevron Vision for NET

网格水平和垂直横截面

网格表面支持通过将表面与水平面或任意垂直横截面相交产生的网格表面轮廓(横截面)的提取。

步行交点

步行系列支持任意X或Y值的交集。
Nevron Vision for NET

Nevron Vision for NET

注释拖动工具

注释拖动工具允许用户交互式拖动附加到不同图表锚点(数据点、比例坐标、图例项等)的注释。

范围选择拖动工具

范围选择拖动工具允许用户交互地拖动并调整范围选择对象的大小。
Nevron Vision for NET

Nevron Vision for NET

音量选择工具

此工具允许您交互地选择由四个平面(左、上、右和下)定义的3D体积,稍后可用于快速检查3D点是否包含在选择平面所包围的体积中。

面板缩放工具

该工具允许您以交互方式放大或缩小面板区域。
Nevron Vision for NET

更好的WPF集成

Nevron Chart for WFP现在有更好的WFP集成。 控件也为WFP提供了许多新例子。

各种稳定性和性能改进

新版本功能修复了所有报告的问题,以及控件中的许多小型性能改进。

支持Visual Studio 2017

Nevron Vision for .NET现在提供对Visual Studio 2017的全面支持!

【慧都十四周年庆预热开启!全场满额送七级豪礼,AppleMac笔记本电脑、iwatch、iPad等您来拿!】

活动时间:10月1日-10月31日

未发布 集成的HTTP嗅探器HttpWatch更新至v11.1.19丨附下载
by Harriet666 keys 分享 1516179574153
 HttpWatch是一款集成的HTTP嗅探器,为IE和Firefox提供新的方法以查看您网站的负载和运行情况。你可以直接在浏览器中调试由web页面生成的网络流量,而无需切换到一个单独的工具。
  • 新增功能:为Chrome和Selenium添加了表单填写自动化示例程序
  • 新增内容:向Chrome自动化类添加了HttpWatchCRX属性,以便与Selenium一起使用
  • 更改:删除了基于Watir的自动化示例代码
 
HttpWatch v11.1.15
  • 修复:在工具 - >选项 - >录制中输入值时,HttpWatch会进入无限的验证循环
未发布 【FAQ合集】TWAIN扫描识别工具Dynamic Web TWAIN的编程代码问题
by Harriet666 keys 分享 1510217364852
Dynamic Web TWAIN中文介绍免费下载资源教程示例DEMO
Dynamsoft

1.如何获取黑白图像?

DWObject.OpenSource();
DWObject.IfShowUI = false;
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.PixelType = EnumDWT_PixelType.TWPT_BW; //Black - White 
image : EnumDWT_PixelType.TWPT_BW, GRAY image: 
EnumDWT_PixelType.TWPT_GRAY, RGB 
image: EnumDWT_PixelType.TWPT_RGB
DWObject.AcquireImage();

2.如何在没有用户界面的情况下运行?

function BeginScan(){
    DWObject.OpenSource();
    DWObject.IfShowUI = false; //set without user interface
    DWObject.IfDisableSourceAfterAcquire = true;

    DWObject.AcquireImage();
}

function DWObject_OnPostTransfer(){
    DWObject.SaveAsBMP("C:\\temp.bmp",0);
}

3.如何只扫描纸张的某一部分?

DWObject.SelectSource();
DWObject.OpenSource();
DWObject.IfShowUI = false;
//Set Image Layout
DWObject.Unit = EnumDWT_UnitType.TWUN_INCHES;
DWObject.SetImageLayout(0, 0, 5, 5);
DWObject.AcquireImage(); 

4.如何在不显示设备选择对话框的情况下选择设备?

DWObject.OpenSourceManager();

for(i = 0, i<=DWObject.SourceCount - 1,i++){
    if (DWObject.GetSourceNameItems(i) == "Specified device name")
        DWObject.SelectSourceByIndex (i);
}

//if can't find the specified source, it'll select default source
DWObject.AcquireImage(); 

5.如何在不使用UI获取图像时禁用进度指示器对话框?

DWObject.IfShowUI = false;
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.OpenSource();
DWObject.IfShowIndicator = false;
DWObject.AcquireImage();

6.如何分别设置水平和垂直分辨率?

DWObject.SelectSource();
DWObject.OpenSource();

//Set XRESOLUTION current value.
DWObject.Capability = 0x1118; //ICAP_XRESOLUTION
DWObject.CapType = 5; //TWON_ONEVALUE
DWObject.CapValue = 300;
if (DWObject.CapSet == false){
    alert( "Failed to set the x-resolution. " + DWObject.ErrorString);
}

//Set YRESOLUTION current value.
DWObject.Capability = 0x1119; //ICAP_YRESOLUTION
DWObject.CapType = 5; //TWON_ONEVALUE
DWObject.CapValue = 200;
if (DWObject.CapSet == false){
   alert( "Failed to set the y-resolution." + DWObject.ErrorString);
}

DWObject.AcquireImage();

7.如何上传到Web服务器?

DWObject = document.getElementById("dwtcontrolContainer");
//dwtcontrolContainer is the id of the Dynamic Web TWAIN on the page (An object or an embed).
function btnScan_onclick() 
{
DWObject.SelectSource();
DWObject.OpenSource();
DWObject.AcquireImage();
}
function btnUpload_onclick() 
{
var strActionPage;
var strHostIP;
var CurrentPathName = unescape(location.pathname); // get current PathName in 
plain ASCII 
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") 
+ 1); 
strActionPage = CurrentPath + "SaveToFile.aspx"; //the ActionPage's file path
strHostIP = "localhost"; //The host's IP or name 
DWObject.HTTPPort = 80; 
DWObject.HTTPUploadThroughPost(strHostIP,0,strActionPage,"imageData.tif");
if (DWObject.ErrorCode != 0)
alert(DWObject.ErrorString);
else //succeed
alert("Image Uploaded successfully");
}

8.如何使用ADF?希望将每个文档保存在一个单独的文件中。

var iDocumentCounter =0;

function BeginScan(){
    DWObject.OpenSource();

    DWObject.IfShowUI = false;
    DWObject.IfDisableSourceAfterAcquire = true;
    if(DWObject.Duplex != TWDX_NONE)
        DWObject.IfDuplexEnabled = true; //enable duplex

DWObject.IfFeederEnabled = true;
    if (DWObject.IfFeederEnabled == true){
         DWObject.XferCount = -1;

         if(DWObject.IfFeederLoaded == True)
             DWObject.AcquireImage();
    }
}

function DWObject_OnPosttransfer(){
iDocumentCounter = iDocumentCounter + 1;

if(DWObject.SaveAsBMP("C:\\Image\\" + iDocumentCounter + ".bmp", 0) == false)
    alert( DWObject.ErrorString);
}

9.我如何使用SSL?

您可以使用IfSSL属性。下面的JavaScript示例将显示如何使用IfSSL属性。
function btnUpload_onclick() 
{
   DWObject.HTTPPort = 80; 
   DWObject.IfSSL = false; // if 80 is the port number of 
non-secure port

   /* 
   DWObject.HTTPPort = 443; 
   DWObject.IfSSL = true; // if 443 is the port number of secure 
port
   */

   DWObject.HTTPUploadThroughPost("127.0.0.1", 0, 
"/SaveToFile.php", "imageData.jpg");

   if (DWObject.ErrorCode != 0)
      alert(DWObject.ErrorString);
   else //succeed
     alert("Successful");
}

10.如何将新扫描的图像添加到现有的多页TIFF文件中?

function Scan_Click(){
   DWObject.AcquireImage();
}
function DWObject_OnPostTransfer(){
   DWObject.CloseSource();
   DWObject.IfTiffMultiPage = true;
   DWObject.SaveAsTIFF("SaveAsTIFF.tif", 0);
   if (DWObject.ErrorCode != 0)
      alert (DWObject.ErrorString);
   else //succeed
      alert ("Successful");
}

11.如何在保存之前旋转图像?

您可以使用RotateLeft方法和RotateRight方法。

12.如果缓冲区中有多个图像,如何查看指定的图像?

您可以通过更新API CurrentImageIndexInBuffer的值来查看指定的图像或浏览缓冲区中的所有图像。
function NextImage_Click(){
   if (DWObject.HowManyImagesInBuffer == 0) 
   
      alert ("There is no image in buffer");

   DWObject.CurrentImageIndexInBuffer += 1;
}

13.如何进行双面扫描?
function DuplexScan_Click(){
   DWObject.SelectSource();
   DWObject.OpenSource();
   DWObject.IfShowUI = false;
   DWObject.IfDuplexEnabled = true; //enable duplex
   DWObject.AcquireImage();
} 

14.如何以反转颜色扫描图像?

您可以使用PixelFlavor属性。

2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

未发布 GIS软件开发工具包TatukGIS Developer Kernel更新至v11.7丨附下载
by Harriet666 keys 分享 1504171491009
GIS定制开发首选控件,帮您轻松搞定高效、优质、实惠的GIS解决方案

TatukGIS Developer Kernel(DK)是一个用于开发自定义地理信息系统(GIS)应用程序以及解决方案的综合性软件开发工具包(SDK)。众所周知,构建一个庞大的地理信息系统需要花费大量的金钱和人力,而TatukGIS却是同类产品中性价比最高的控件,TatukGIS Developer Kernel DK因其功能强大,价格适中,已被超过 50个国家的个人、公司、以及政府等客户用来实现其地理信息系统解决方案。根据不同地首选开发环境,本产品分别以五个独立产品的形式提供(即VCL、.NET/WPF、ActiveX、Compact Framework和ASP.NET),各个产品使用相同的框架、应用程序编程接口(API)技术。
 
 
TatukGIS Developer Kernel v11.7更新内容
更新内容:
  • DK for Java(Beta)发布。(DK-9623)
  • 一些.NET样本在除96之外的DPI上不能正常打开。(DK-9488)
  • SimplEdit得到了一个更容易测试编辑的数据集。(DK-9501)
  • 插值方法在速度和CS支持方面大大改善。(DK-9502)
  • 插值样本出现错误。(DK-9493) 
  • 修正了WinForms在非标准DPI上放大矩形问题。(DK-9510)
  • 插值样本重做。(DK-9493)
  • 修复了打印预览组件的各种问题。(DK-9510)
  • 示例源代码现在可用于在线浏览。参考Isochrone样品
  • 改进示例文档。
  • 审查样品。
未发布 【教程】网络安全工具FileAudit中配置你的第一个Audit路径
by Harriet666 keys 分享 1511773072972
FileAudit可用于对Windows服务器上文件和文件夹的所有访问进行主动跟踪、审核、报告和警告。本文为大家介绍如何配置你的第一个Audit路径。
 
FileAudit免费下载>>>
 
1、启动FileAudit。

你会发现3个主要分组:
  • Audit:允许您配置审计和警报。
  • Access:显示“文件访问查看器”和“统计”视图。
  • Tools:自定义FileAudit设置,安排自动报告、清理数据库和访问帮助文件。
右上角的“连接”按钮允许您远程连接到“FileAudit服务”的另一个系统。
 
2、要设置您的第一个审计路径,请单击FileAudit集线器中的“添加文件夹”。点击“+”按钮,浏览您的目标文件夹:
 
3、验证了您的选择后,将弹出“FileAudit路径向导”,以指导您完成配置文件夹审计的过程。

该向导将显示所选文件夹的配置状态,并突出显示缺少的任何需求或设置。对于每个必要的操作,您可以选择自动完成(通过向导)或手动完成。我们强烈建议您将FileAudit自动配置用于所有设置。
 
4、需要操作的列表。
 
5、选择自动或手动处理。
 
6、FileAudit将优化NTFS审计设置。
 
7、当NTFS Audit设置被禁用时,FileAudit检查并可以启用它。
 
8、文件夹主机将被添加到“许可服务器”列表中。
 
9、启用实时事件监控。
 
10、您选择的文件夹现在由FileAudit进行监控。所有访问事件将被存储在FileAudit数据库中。
 
注意:
有几个不同的方法来选择要审核的文件/文件夹路径。除了以上方法外,您还可以:
  • 通过右键单击Windows资源管理器中的文件或文件夹启动控制台,然后在“上下文菜单”中选择FileAudit。在这种情况下,前面的步骤将被跳过,因为文件/文件夹路径被直接导入FileAudit控制台。
  • 显示“文件访问查看器”并直接在“路径”字段中输入目标路径。您也可以在“文件访问查看器”中找到两个按钮来添加文件夹或文件。
  • 只需使用“Audit配置”部分中的两个贴图“添加文件夹”或“添加文件”即可。
另外,FileAudit总是检查在不同视图和设置中输入的每个路径的配置状态,例如:
  • “文件访问查看器”
  • 预定的报告配置
  • 定义警报规则
未发布 Edraw Office Viewer component教程(三):将MS Word、Excel、PowerPoint嵌入到WPF应用程序中
by Harriet666 keys 分享 1494580929229
如何将Word、Excel、PowerPoint嵌入WPF应用程序?大部分人应该都记得可以将Excel图表嵌入到Word文档中的OLE技术,但该技术并不支持所有的Microsoft Office文档。它不支持表单中的多个MS Word实例。而Edraw office viewer component对于开发人员可以说是最简单的可以将Word文档、Excel工作表、PowerPoint演示文稿嵌入到WPF应用程序中的解决方案。
 
本文将演示如何逐步嵌入MS Word到wpf应用程序中。如果你没有officeviewer.ocx文件,请先安装。在组件安装文件夹中,你还可以找到wpf示例项目。
打开Visual Studio并创建一个新的WPF应用程序。
右键单击WpfApplication1解决方案。然后单击“Add”菜单并选择“User Control...”。

wpf项目中将会增加一个新的窗体。
选择“User Control”项。不是“User Control(WPF)”项。
双击解决方案面板中的UserControl1.CS。
打开“工具箱”面板,然后单击菜单中的“ Choose Items...”。
在弹出的“Choose Toolbox Items”对话框中,选择“Edraw Office Viewer Component”,然后单击“确定”。
现在,Edraw Office Viewer Component已添加到工具箱的“常规”选项卡中。在UserControl窗体中拖动它。
通过Visual Studio将AxEDofficeLib和EDOfficeLib添加到该解决方案中。
输入打开word文档的C#代码,并保护word文档的修改如下所示:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WpfApplication1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public void Open()
{
axEDOffice1.OpenFileDialog();
}
public void Protect()
{
if (axEDOffice1.GetCurrentProgID() == "Word.Application")
{
axEDOffice1.ProtectDoc(2);
}
}
public void Print()
{
axEDOffice1.PrintPreview();
}
public void Close()
{
axEDOffice1.ExitOfficeApp();
}
}
}

最后,你需要为UserControl编写主机窗口。切换到Windows1.xaml文件,然后添加打开、保护、打印和关闭的按钮,如图所示。

添加以下c#代码来关联office component。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Open_Click(object sender, RoutedEventArgs e)
{
_host.Open();
}
private void Protect_Click(object sender, RoutedEventArgs e)
{
_host.Protect();
}
private void Print_Click(object sender, RoutedEventArgs e)
{
_host.Print();
}
private void Close_Click(object sender, RoutedEventArgs e)
{
_host.Close();
}
}
}

打开配置管理器。将Active Solution平台更改为x86选项。然后建立并运行。
Office Viewer component支持所有版本的MS Word。要将MS Excel或PowerPoint Visio、Project嵌入到WPF应用程序中,你只需要调用Open方法,如下所示:
public void Open()
{
//axEDOffice1.OpenFileDialog();
axEDOffice1.Open(sPath, "Word.Application");
axEDOffice1.Open(sPath, "Excel.Application");
axEDOffice1.Open(sPath, "PowerPoint.Application");
axEDOffice1.Open(sPath, "Visio.Application");
axEDOffice1.Open(sPath, "MSProject.Application");
}
 
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。


 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  2. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  3. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  4. Node.js 打印vite react+go项目目录树
  5. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  6. Windows与Mac通过git ssh和rsync实现文件共享互传
  7. Windows与Mac通过git ssh和scp实现文件共享互传
  8. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  9. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件
  10. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA