未找到

未发布 百度正式开源其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技术细节的文档也都一并开源了,后续也会及时推送改动,请大家放心。这是一个活项目,不会拉个开源分支就不管了。
查看更多资讯>>>

未发布 条码识别控件Dynamsoft Barcode Reader更新至v5.2丨附下载
by Harriet666 keys 分享 1505814675249
Dynamsoft Barcode Reader SDK一款多功能的条码读取控件,只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序,能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。
 
 
31935a2406f642ab98a8a5a6ebf07737ojpg
 

Dynamsoft Barcode Reader v5.2新版本更新和改进仅适用于Windows Edition。
 
新版本的亮点:
  • 通过优化的本地化和识别算法,提高了PDF417的识别性能。
  • 通过优化的去模糊算法提高了1D条形码的识别精度。
  • 现在可以设置暂停条形码识别。
 
改进:
  • 改进了PDF417条形码的本地化和识别算法。
  • 优化了1D条形码的去模糊算法,提高识别精度。
  • 现在可以暂停条码识别。
  • 增加B&W图像的QR码和数据矩阵条码识别速度。
修复:
  • 小的修复和调整。
未发布 MailBee.NET Objects撰写邮件教程(三):请求阅读/发送状态提示
by Harriet666 keys 分享 1502269098187
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。
 
 
本文主要介绍了电子邮件请求阅读/发送状态提示的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
要查看邮件发送状态,开发人员应使用DeliveryNotificationOptions类。此类提供如何以及何时将ESMTP传递状态通知(DSN)发送回发送方的属性和方法。要获取或设置触发ESMTP服务器的事件,开发人员应使用NotifyCondition属性:
C#
Smtp mailer = new Smtp();
mailer.DeliveryNotification.NotifyCondition = DsnNotifyCondition.Always;

VB.NET
Dim mailer As New Smtp() 
mailer.DeliveryNotification.NotifyCondition = DsnNotifyCondition.Always
 
如果邮件服务器支持DSN扩展,则开发人员可以指定触发ESMTP服务器将发送状态发回邮件发送方的事件。为此开发人员应该使用DsnNotifyCondition枚举。例如,使用默认值,服务器将自行发送通知;如果邮件发送失败则会触发通知。有时,当邮件发送失败时,可以使用发送状态通知返回原始邮件。使用MailBee,开发人员可以指定邮件发送失败时哪个部分(整个邮件或仅标头)应与发送状态通知一起发回:
C#
mailer.DeliveryNotification.ReturnPortion = DsnReturnPortion.Header;

VB.NET
mailer.DeliveryNotification.ReturnPortion = DsnReturnPortion.Header
 
开发人员还可以指定将添加到通知邮件中的特定唯一字符串。它可以用于将通知邮件与原始邮件进行匹配:
​C#
mailer.DeliveryNotification.TrackingID = "UNQIUE_STRING_q8sdf74d";
VB.NET
mailer.DeliveryNotification.TrackingID = "UNQIUE_STRING_q8sdf74d"
 
如果服务器不支持DSN,则不会发送状态通知。但是,在这种情况下,不会向应用程序返回任何错误。你可以手动检
查服务器是否支持发送状态通知:
C#
if (mailer.GetExtension("DSN") != null)
{
    Console.WriteLine("The message will be submitted with DSN support");
}
else
{
    Console.WriteLine("The message will be submitted without DSN support");
}

VB.NET
If mailer.GetExtension("DSN") IsNot Nothing Then
    Console.WriteLine("The message will be submitted with DSN support")
Else
    Console.WriteLine("The message will be submitted without DSN support")
End If
 
请注意,你应该在Smtp.Connect方法调用后在调用GetExtension(“DSN”)。
请求查看邮件发送状态的另一种方法是使用MailMessage.ConfirmReceipt属性。它允许开发人员获取或设置应收到发送确认邮件的个人电子邮件地址。
以下代码设置Return-Receipt-To消息头:
C#
// Create new MailMessage object.
MailMessage msg = new MailMessage();

msg.LoadMessage(@"C:\Temp\MyMail.eml");

msg.ConfirmReceipt = "jdoe@domain.com";

VB.NET
' Create new MailMessage object.
Dim msg As New MailMessage()
 
msg.LoadMessage("C:\Temp\MyMail.eml")
 
msg.ConfirmReceipt = "jdoe@domain.com"

收件人的邮件服务器应该检查接收到的邮件Return-Receipt-To标题值,并将发送确认邮件发送到该标题中指定的电子邮件地址。因此,收件人的邮件软件必须支持Return-Receipt-To功能。一些服务器支持Return-Receipt-To和DSN,而其他服务器只支持其中一个,甚至不支持。你可以同时使用这两种方法。
发送状态信息尚未确保收件人已阅读该邮件。要获取包含电子邮件地址的字符串,请使用MailMessage.ConfirmRead属性。
C#
// Create new MailMessage object.
MailMessage msg = new MailMessage();

// Load the message from .eml file
msg.LoadMessage(@"C:\Temp\MyMail.eml");

// Show the e-mail address of recipient of the read confirmation message.
Console.WriteLine("Send confirmation to " + msg.ConfirmRead);

VB.NET
' Create new MailMessage object.
Dim msg As New MailMessage()
 
' Load the message from .eml file
msg.LoadMessage("C:\Temp\MyMail.eml")
 
' Show the e-mail address of recipient of the read confirmation message.
Console.WriteLine("Send confirmation to " + msg.ConfirmRead)
注意: 收件人使用的邮件客户端必须支持ConfirmRead功能(该软件必须支持Disposition-Notification-To标头)。
未发布 【更新】支持多种格式音视频的本地.NET组件Audio Sound Recorder for .NET 更新至v9.0.0.0
by Harriet666 keys 分享 1510908930689
Audio Sound Recorder for .NET是一款本地.NET组件,它可以轻松把录音功能添加到用Visual Studio.NET和Borland Developer Studio编写的Winforms应用程序中。

Audio Sound Recorder for .NET v9.0.0.0最新版下载

Audio Sound Recorder for .NET v9.0.0.0更新内容:
新功能
  • 支持播放声音,同时通过鼠标手动滚动波形滚动条。
  • 支持通过外部编码器FdkAac.exe以AAC+格式记录和导出。
  • 支持播放录制声音。
  • 支持对录制声音进行高速播放,可以将声音保持原始速度。
  • 支持以HLS格式(HTTP Live Streaming)进行流媒体回放。
  • 增加了将Wasapi采集或回送设备的立体声录音会话分为两个单声道输出文件的可能性
  • 增加了切换立体声分离录制会话的单声道输出文件的功能
  • 波形分析仪的新选项
      - 波形现在可以基于绝对值显示检测到的峰值
      - 更多地控制时间标尺上显示的时间字符串的格式
      - 可选的自动垂直缩放功能,用于低音量级别的波形
  • 回放期间显示在波形视觉反馈上的峰值现在通过专用事件报告给容器应用程序。
  • 增加了在录制和回放过程中检索峰值电平和RMS(均方根)电平的支持。
  • 增加了从波形分析仪中检索包含波形峰值的缓冲区的可能性
 
新属性
  • EncodeFormats.AACPlus (class)
 
新方法
  • CallbackWaveformValueChangeSet
  • StartSplitFromWasapiCaptureDevice
  • StartSplitFromWasapiLoopbackDevice
  • SwitchOutputFilesOnSplit
  • StreamPeakLevelsGet
  • RecordedSound.PlaybackRateGet
  • RecordedSound.PlaybackRateSet
  • RecordedSound.PlaybackTempoGet
  • RecordedSound.PlaybackTempoSet
  • RecordedSound.PlaybackRateRatioGet
  • RecordedSound.SoundDirectionEnable
  • RecordedSound.SoundDirectionGet
  • RecordedSound.SoundDirectionIsEnabled
  • RecordedSound.SoundDirectionSet
  • WASAPI.MixerInputDevicePeakLevelsGet
  • WaveformAnalyzer.AutoZoomEnable
  • WaveformAnalyzer.SettingsRulersTimeFormatSet
  • WaveformAnalyzer.PeaksBufferLengthGet
  • WaveformAnalyzer.PeaksBufferGet
  • WaveformScroller.PlaybackOnScrollEnable
  • WaveformScroller.PlaybackOnScrollInfoGet
 
新事件
  • WaveformValueChange
 
新的回调委托
  • CallbackWaveformValueChange
 
新的类
  • EncodeAACplus

试用、下载、了解更多产品信息请点击"咨询在线客服"  

未发布 MailBee.NET Objects接收电子邮件(POP3)教程三:POP3认证
by Harriet666 keys 分享 1500972453843
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。
 
 
本文主要介绍了POP3认证的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
要登录POP3帐户,你必须提供有效的帐户名称(也称为用户名,登录名等)和密码。
C#
Pop3 pop = new Pop3();
pop.Connect("mail.domain.com");
pop.Login("jdoe", "secret");

VB.NET
Dim pop As New Pop3() 
pop.Connect("mail.domain.com")
pop.Login("jdoe", "secret")
 
某些服务器要求帐号名称包含域名部分(例如jdoe@domain.com)。
许多POP3服务器支持多种认证机制来进行安全认证。默认情况下会使用更安全的身份验证方法。你可以使用Login方法的其他重载来覆盖此行为(如果服务器错误地执行某些身份验证方法)。例如,上面的代码强制MailBee仅尝试APOP方法(APOP是特定于POP3协议的安全认证方法,由许多POP3服务器支持):
C#
Pop3 pop = new Pop3();
pop.Connect("mail.domain.com");
pop.Login("jdoe", "secret", AuthenticationMethods.Apop);

VB.NET
Dim pop As New Pop3() 
pop.Connect("mail.domain.com")
pop.Login("jdoe", "secret", AuthenticationMethods.Apop)
 
或者,你可以强制MailBee首先尝试简单的身份验证方法,并且只有在服务器不支持简单的方法时才使用安全方法。下面的示例代码使用最简单的身份验证方法进行登录。如果服务器支持基本的明文USER / PASS认证则会使用它。但是,如果USER / PASS方法未启用(假设服务器仅支持安全的SASL NTLM),那么MailBee将使用该方法。
C#
pop.Login("jdoe", "secret", AuthenticationMethods.Auto, AuthenticationOptions.PreferSimpleMethods, null);

VB.NET
pop.Login("jdoe", "secret", AuthenticationMethods.Auto, AuthenticationOptions.PreferSimpleMethods, Nothing)

MailBee还支持Windows集成身份验证(使用当前记录的Windows用户的凭据登录)。如下所示:
C#
pop.Login(null, null, AuthenticationMethods.SaslNtlm);

VB.NET
pop.Login(Nothing, Nothing, AuthenticationMethods.SaslNtlm)
 
但是,如果你正在开发在匿名IIS或ASP.NET用户中运行的ASP.NET应用程序(因为当前记录的用户将是IIS用户而不是使用该应用程序的人员),则无法使用它。
未发布 CAD绘图控件VectorDraw web library (javascript)更新至v7.7014.0.2,在线购买6.6折!
by Harriet666 keys 分享 1513156801275
VectorDraw web library (javascript)是一个矢量图形库,它不仅能打开CAD图纸,而且能显示任何支持HTML5标准平台上的通用矢量对象,如Windows,安卓,iOS和Linux。无需任何安装,VectorDraw web library (javascript)就可以运行在任何支持canvas标签和Javascript的主流浏览器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。这意味着可以用DXF,DWG,DGN,VDML等多种格式在任何台式、平板电脑,智能手机和便携式笔记本上展现出你的业务。
 
慧都百厂约惠
VectorDraw web library (javascript)6.6折全年最低!
立即购买>>>
 
VectorDraw web library (javascript) v7.7014.0.2更新内容
WebJS
新增需求(7.7014.0.1)
  • 70001215 MergeDocument方法支持使用mergeFlags
漏洞(7.7014.0.1)
  • 70001204 线路对象捕捉无法运作
  • 70001206 导出到vds脚本时出现异常
  • 70001210 WebGl渲染中的实体影线问题
    
Converter
新增需求(7.7014.0.1)
  • 70001217 DGN中unsuported对象的类型
漏洞(7.7014.0.1)
  • 70001212 Textstyle未使用正确的TTF字体导入
    
Engine
新增需求(7.7014.0.1)
  • 60001730 不要从部分剪辑中隐藏手柄
  • 70000019 vdScreenBlock的HitTest返回用户点击的内部块对象
  • 70001186 开始用户动画的操作
  • 70001191 支持3D
  • 70001203 禁用某些触摸屏操作的功能
  • 70001211 支持分机线固定长度
  • 70001214 TextStyle高度覆盖任何尺寸或样式文字高度
  • 70001216 显示屏幕3d导航立方体
  • 70001218 带裁剪的vdInsert的边界框计算不正确
  • 70001228 具有TTF_TEXT标志的线类型,支持ShapeText字符串中的Unicode字符
漏洞(7.7014.0.1)
  • 70001207 GetModel2dProjection无法正常工作
  • 70001208 多行文字引发错误
  • 70001213 vdInsert返回错误的边界框
  • 70001219 透视模式下无法正常工作
  • 70001220 Mtext未显示正确的文本
未发布 GLG工具包Visualization and HMI Toolkit更新至v3.6,支持Java Script
by Harriet666 keys 分享 1490344507662

Visualization and HMI Toolkit的为开发高级图形的动态界面而设计的艺术化的框架:它不仅仅是简单的按键与菜单,它是全动态的能显示动态数据以及能反映用户互动的图片对象。它不仅仅是能制作“漂亮图片”绘制工具(它还具有很多其他功能),而是能使开发人员定义图片对象以及与程序中的对象互动的图形引擎。它的使用对象主要针对应用程序开发人员,能将乏味的低级别图片代码编译工作转化成高级的互动设计行为。

GLG工具包Visualization and HMI Toolkit更新至v3.6,点击下载>>>

支持Java Script:

对Java Script的增加的支持使得用户可以定义自定义函数,将多个输入值转换为驱动动画的输出值。通过可以添加到对象属性的新Java Script转换来使用Java Script。例如,一个新的“LED Value Display”部件可以通过使用Java Script转换来实现部件的逻辑。

转换的Java Script属性包含用于生成输出值的Java Script代码。转换的Arg List属性通过$ N符号提供脚本中使用的可变的参数,其中N是基于1的参数索引(即 $ 1是第一个参数)。参数可以是双(D)、字符串(S)或XYZ(G)类型。Java Script转换的输出值也可以是D、S或G类型,与其所附属性的类型相匹配。

例如,可以使用以下Java Script将D属性的值设置成以度为单位的第一个参数的sin函数:Math.sin ($ 1 / 180. * Math.PI)

下面的Java Script可用于根据第一个参数的值和由第二个、第三个参数定义的阈值来在“NORMAL” 和“ALARM”之间切换的文本字符串:$ 1 <$ 2 || $ 1> $ 3?“ALARM”:“NORMAL”

对于复杂的Java Script来说,可以通过Java Script文件提供Java Script函数和方法库。加载此文件时,可以在图形中使用该文件中定义的Java Script函数。

应用程序可以使用包含Java Script方法集合的全局Java脚本文件并在应用程序的图纸中使用。该文件将被预加载并用作Java Script库。Viewport的JavaScriptFile属性也可定义为该viewport预加载的Java Script文件。所有加载的Java脚本都是全局的,可以在应用程序的任何位置访问。从Java Script文件加载的函数将覆盖任何以前具有相同名称的Java Script函数。

GLGeditors和所有GLG API都支持Java Script:C / C ++、Java、C#和Windows上的ActiveX。C / C ++和ActiveX中的Java Script支持由Duktape JavaScript Engine提供,对于C#来说可以使用Jurassic JavaScript引擎(由Jurassic.dll提供)。在Java中可以使用Java的JavaScript引擎。

所有Java Scripts都在绘图设置时先行编译,以实现更快的运行。这些脚本也可以进行缓存。

GlgJavaScriptFile全局配置资源或GLG_JAVA_SCRIPT_FILE环境变量可用于指定全局Java Script文件。 对于GLG Builder和GLG HMI配置器,还可以通过-glg-java-script-file命令行选项或GLG配置文件中的GlgJavaScriptFile资源(即glg_config或glg_hmi_config)提供全局Java Script文件。

本文作者慧都Elyn,转载注明出处

未发布 VCL图表控件包TMS Grid Pack v6.7.2.2发布丨附下载
by Harriet666 keys 分享 1507541171337
TMS Grid Pack是一款功能齐全的VCL图表控件包,包含TAdvStringGrid、TAdvColumnGrid、TAdvSpreadGrid、TAdvGridExcelIO、TAdvGridRTFIO、TAdvGridPDFIO和TDBAdvGrid多个控件于一体,能帮助用户节省大量的开发时间和费用。

TMS Grid Pack最新版点击下载>>>
 
v6.7.2.2

改进:
  • TDBAdvGrid中支持没有内置书签的数据集
修复:
  • TAdvStringGrid中当grid.FixedRows <> 1时选择所有调用
 
v6.7.2.1

改进:
  • TAdvColumnGrid中窗体构造函数中的样式更新
  • TAdvStringGrid中对嵌入单元格中的进度条进行高DPI处理
修复:
  • 分组的TDBAdvGrid中通过列行访问单元格的问题
  • TAdvStringGrid中edEditBtn在线编辑器按钮点击和隐藏选项的问题
  • TAdvGridPDFIO中单行网格的问题
  • TAdvStringGrid中鼠标滚轮的问题
  • TAdvStringGrid中单列网格索引排序的问题
  • TDBAdvGrid中的剪贴板复制的问题

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

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

未发布 【教程】Edraw Max(亿图图示)案例:产品经理如何用亿图绘制流程图?
by Harriet666 keys 分享 1499325107927
做调研、看数据、画原型、写文档、整理需求、跟进项目……这些琐碎的工作是基本上是每个产品人的日常。然而如何从凌乱的任务清单中抽丝剥茧,让每天的工作更加高效,自然成为了许多产品人迫切需要解决的问题!所谓,工欲善其事,必先利其器。作为一名优秀的产品人,光有想法还远远不够,将想法快速付诸于行动才是最实际有效的。本文给大家分享一下如何用Edraw Max(亿图图示)软件提高工作效率,让想法与行动完美结合,绘制完美的流程图!
 
Edraw Max(亿图图示)软件是一款综合类型的图形图表设计软件,你可以在这里绘制各种类型的图形、图表,不管是创建项目、跟踪进度、流程安排、日程管理,还是数据管理、产品展示等等。目前Edraw Max(亿图图示)在线订购享75折优惠活动正在进行中,欢迎您下载、购买进行运用!
 
Edraw Max(亿图图示)V8.7中文版点击下载>>>

对比Visio,Edraw Max(亿图图示)具有哪些优势?
1、用Edraw Max绘制的流程图比Visio更美观,只需轻轻的拖曳即可做出漂亮的图形,无需额外设置。
2、Edraw Max(亿图图示)包含了丰富精美的模板和实例库,相对于Visio自带模块,Edraw Max的模块更丰富绚丽,给人的感觉会更舒心更高大上一些!
3、Edraw Max(亿图图示)自带“高光流程图”让绘制的流程图更有质感。
4、Edraw Max(亿图图示)内置的12000多个模板实例库中,很多都非常适用于产品经理!
 
流程图绘制的四个步骤:
1、调研
让熟悉整体业务的人讲解了解大局,并实地观察和询问,验证讲解以及发现潜在问题。
2、梳理与呈现
将整个流程进行分解,由上至下、由整体到部分、由宏观到微观、由抽象到具体的用流程图展现出来。
温馨提示:此环节一定要恰当的进行层次分解,不要将所有都铺到一张图上。流程图上所涉及的各个岗位、角色,适当的让他们进行参与、交流,会让你事半功倍。最后流程图一定要有始有终,不要让人看了半天,还在云里雾里。
3、评审与确认
这一环节不仅仅是评审流程图是否符合现实,同时也是评审目前的业务流程是否符合理想。不同岗位不同职责的人员会在根据自身实际情况对整个流程相互提出意见,这样一场头脑风暴,想必对流程优化也不失为一件好事!
4、归档维护
流程不断变更,业务流程图也需要及时作出相应的修改。
未发布 jQuery JavaScript的综合性UI组件库jQWidgets更新至v4.5.1丨附下载
by Harriet666 keys 分享 1492486905498

jQWidgets是一个基于jQuery JavaScript的综合性和创新性的HTML5 UI组件库,旨在帮助开发者创建专业、跨平台的Web应用程序,并最大限度的节省开发时间。jQWidgets包含30多种UI组件,是最快的JavaScript UI框架之一。

【最新版jQWidgets v4.5.1点击下载>>>】

jQWidgets v4.5.1更新内容:
改进:
  • 当固定tabbedGroups或取消autoHideGroups时,jqxLayout / jqxDockingLayout“allowClose”设置现在将被保留。
修复:
  • 修复了当decimalSeparator为“,”时,jqxNumberInput中关于移动设备行为的问题。
  • 修复了jqxScheduler中关于exactTimeRendering功能的问题,2天中会出现同一个预约。
  • 修复了jqxScheduler中当没有聚焦单元格时对话框会打开的问题。
  • 修复了关于jqxPopover中showArrowButton属性被动态设置的问题。
  • 修复了jqxGrid中关于“复选框”列中工具提示的问题。
  • 修复了jqxGrid中关于剪贴板粘贴功能的问题。
  • 修复了jqxGrid中当网格行详细信息和聚合功能分组启用时切换箭头显示的问题。
  • 修复了jqxGrid中关于分组聚合渲染逻辑的的问题。
  • 修复了jqxGrid中关于过滤器行下拉列表和“全选”项的问题。
  • 修复了jqxGrid中当按下“ESC”并且在源对象中定义了“updaterow”时关于全行编辑的问题。
  • 修复了jqxDataTable中关于服务器端过滤的的问题。
  • 修复了jqxWindow中关于动态启用/禁用窗口拖动的问题。
  • 修复了jqxWindow中关于关闭模式窗口后Tab键导航的问题。
  • 修复了jqxTabs中当关闭按钮被启用时有关setTitleAt方法的问题。
  • 修复了jqxRibbon中关于animationType:“slide”的问题。
  • 修复了jqxWindow中关于Internet Explorer“销毁”方法的问题。 

阅读原文>>>


 近期热门 - 点击最多
  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