未找到

未发布 百度正式开源其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是否依然能够在服务端技术中占据领导者地位尚有待观察。
更多资讯点击查看>>>



未发布 Xamarin for Visual Studio v4.6发布,重新设计属性页和Manifest编辑器
by Harriet666 keys 分享 1500624306471
Xamarin for Visual Studio 让开发者可以在Windows上用 Visual Studio 开发原生 iOS, Android 和Windows应用程序。Xamarin for Visual Studio提供了流畅的iOS和Android的API查询,让开发者专注于应用本身。更棒的是,开发者完全可以利用一切他熟悉的开发工具进行开发,从而保证项目的高效性和持续性。

Xamarin for Visual Studio点击下载>>>

V4.6版本中包含的功能:


属性页和Manifest重新设计

在Xamarin 4.6中,我们重新设计了属性页和Manifest编辑器的重新设计,添加了一个新的编辑器:授权编辑器。

新的授权编辑器

新的编辑器现在是一个独立的编辑器。它的设计方式更加简单有效,双击你的entitlements.plist文件来启动。它的UI非常友好,用户可以轻松浏览和运用。

Bug修复

此版本包括以下问题修复:
  • iOS设备列表模拟器在更改iOS版本时不会更新。(4.6.0.289)
  • 修复VS在创建主机发现时挂起Zeroconf的问题。(4.6.0.289)
  • SayGoodbye目标在创建iOS库时失败。(4.6.0.279)
  • MSBuild过程由于XMA监控而产生较高的CPU使用率。(4.6.0.279)
  • 在某些情况下重新连接后,Mac Agent图标不会更新。(4.6.0.279)
  • 在设置中无法手动选择Xcode路径。(4.6.0.279)
  • Android存档 - 向用户发出关于所需的密钥库备份的信息,并有助于将其复制到其他位置。(4.6.0.279)
  • 无法在Visual Studio 2017中打开名为“资产”的目录。(4.6.0.279)
  • VS不会在新的iOS项目的.plist文件中设置MinimumOSVersion键。(4.6.0.279)
  • “链接器行为”下拉列表显示MtouchLink属性的“Don't Lin”默认值不正确。(4.6.0.279)
  • 在Mac Server连接对话框上显示Xamarin.iOS兼容性错误。(4.6.0.279)
  • 未选择数据源类时,不会禁用支持的系列和并发组。(4.6.0.279)
  • 更改连接流程,以便在打开解决方案自动连接时不显示任何对话框。(4.6.0.279)
  • 将UWP项目设置为启动项目时,设置正确的配置平台。(4.6.0.279)
  • tvOS绑定项目创建失败并出现多个错误。(4.6.0.279)
  • 在某些情况下,Visual Studio挂起ZeroConf (4.6.0.279)
  • 由于XMA上的进程监视器不正确,MSBuild进程会产生高CPU使用率。(4.6.0.240)
  • 建立iOS库时,SayGoobye目标失败。(4.6.0.240)
  • 本地静态参考(.a)源文件在构建后最终以0 Kb为单位。(4.6.0.240)
  • Android属性页面上的打字错误。(4.6.0.240)
  • F#Android项目无法构建。(4.6.0.240)
  • 关于部署WatchOS应用程序的System.IO.FileNotFoundException异常。(4.6.0.240)
  • 几个连接可靠性Mac代理修复。(4.6.0.240)
  • Android Library模板包含资源文件。(4.6.0.240)
  • Android项目模板不会生成mipmap图标。(4.6.0.240)
  • 无法在调试模式下解除tvOS扩展应用[电视服务扩展]。设备下拉菜单中没有tvOS模拟器。(4.6.0.240)
  • Visual Studio崩溃,试图启动没有运行的Android应用程序。(4.6.0.240)
  • 将默认模式下的watchOS设置为默认模拟器。(4.6.0.240)

已知的问题

创建会因错误取消:Project'project_name '需要在你的计算机上安装以下组件:...
构建Android应用程序可能需要安装其他组件。这几种情况下可能需要,例如使用新组件、NuGet软件包,或者是你在计算机上构建的第一个Xamarin.Forms解决方案。
Xamarin for Visual Studio检测到资源的缺失,并显示错误信息,要求下载并安装它们:
双击列表中的错误,开始下载并安装缺少的组件。
请记住,你需要在列表中看到Intellisense错误。
如果你尝试在解决方案中创建任何项目,而不安装缺少的组件,那么创建将被取消。
安装缺少组件的可选方法是从命令行中创建。

其他已知问题

如果你在使用此版本后降级为Xamarin 4.2或更低版本,则需要在Mac Server对话框中重新注册已知的Mac服务器。请使用“忘记Mac”选项,并再次配置服务器连接。

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

未发布 苹果公司透露Siri新发音引擎的内部原理
by Harriet666 keys 分享 1505467031256
苹果公司透露了他们通过深度学习让Siri的发音更加自然的内幕。

iPhone用户使用自然语言向Siri提问,Siri也通过语音回答问题。Siri可以使用21种语言回答问题,遍布全球36个国家。在2017年WWDC大会上,苹果宣布了iOS 11上的Siri将使用最新的文本语音引擎。2017年8月,苹果的机器学习期刊透露了他们是如何让Siri的发音更加自然的。

iPhone上的语音是通过拼接预先录制的人类语音来生成的。先录制几个小时的语音,再把它们拆分成单词,然后再把单词拆成最基本的元素:音素。在生成句子的时候,系统会选择合适的音素,再把它们拼接在一起。
 
为音素选择合适的录音是一件很有挑战性的事情。每一个音素都要与发音相匹配,也要与相邻的其他音素相匹配。旧系统只有几种录音,音素的来源很有限,所以听起来有点不自然。于是苹果决定使用深度学习来确定声音单元在句子中的各种属性。
 
每一台iOS设备都包含了一个小型的预录音素数据库。每一份数据都包含了音频属性:声音频谱的音高和音长。一个经过训练的“深度混合密度网络(deep mixture density network)”用于预测每一个音素在句子中的特征。苹果设计了一个成本函数来训练这个网络,着重考虑到两个方面的问题:如何让音素与发音相匹配以及如何让它与句子相融合。
 
在通过“Viterbi”算法从数据库里找到需要的数据后,系统会选出最佳的音素组合,把它们拼接起来,然后播放出声音。
 
另一种方式是生成声波,而不是拼接预录的声音。2016年9月,Alphabets Deepmind发布了WaveNet引擎,可以基于电脑生成文本语音。它的不足是速度很慢,就算使用最快的台式电脑也需要很长时间才能完成合成任务。所以,Siri不会在短时间使用合成语音代替录制语音。
未发布 网络安全工具FileAudit更新v5.5 Beta版本,新增访问事件
by Harriet666 keys 分享 1514279161521
FileAudit可用于对Windows服务器上文件和文件夹的所有访问进行主动跟踪、审核、报告和警告。
 
 
FileAudit v5.2新功能

新增:
  • 新视图 - 特定用户执行的访问事件。
  • 新视图 - 在特定路径/文件上执行的访问事件。
  • 新视图 - 通过双击事件中的细节。
  • 安装文件夹中提供的新工具(FileAuditReporter)来访问归档数据库。
  • 不通过邮件发送就能生成预定的报告。
  • 可以选择保存计划报告的文件夹。
  • 能够保存所有预定报告的历史记录。
  • 可以在更改远程连接设置时重新启动FileAudit服务。
  • 发送通知到Slack。
  • 在“设置”部分保存系统。
  • 在生成预定报告出现错误时时发出警告通知。
  • 根据用户权限,访问未被授权时,仪表板中的Tiles将变灰。
修复:
  • 如果FileAudit只有一个管理员,可能会拒绝任何人访问控制台。
  • 在用户过滤器中排除用户的语法与用于排除组过滤器中的组的语法不一致。
  • 文件访问查看器中的对象类型筛选器和法语版本中的预定报告不能正确筛选。
  • 安装.exe文件的详细信息有不正确的版权信息。
  • 程序和功能”窗口对话框中的字段是错误的。
  • 使用远程控制台访问“文件访问查看器”时没有“配置设置”权限会出现异常。

未发布 开源的跨平台移动开发利器Xamarin Studio v6.3发布丨附下载
by Harriet666 keys 分享 1492590701399

Xamarin Studio是跨平台移动开发(IDE)利器。Xamarin Studio是一个开发效率很高的移动开发工具,开发者可以轻松查看iOS、Android和OS X APIs,快速查询类型、方法和API功能,而且不会打乱你的思路。

【最新版Xamarin Studio点击下载>>>】

Xamarin Studio v6.3更新内容


苹果开发者帐户管理

此版本介绍了使用Xamarin Studio来管理Apple开发人员帐户和iOS / macOS代码签名权限的功能。新界面提供了查看与Apple ID相关联的所有开发团队的方法,并显示每个团队的签名身份和配置文件列表。
选择首选项>发布> Apple开发者帐户来添加一个Apple ID。 Apple ID验证需要在fastlane的命令行上执行。必须安装fastlane才能认证成功。有关fastlane以及安装方法的更多信息参见fastlane文档

已知的问题

登录过程不支持打开两步身份验证的帐户。
[Bug#53906]团队详细信息对话框为空。在某些情况下,即使在用户计算机上安装并且有效也不会显示签名身份和配置文件。我们会尽快发布一个解决方案。

iOS

在设备上调试App Extensions

新版本的Xamarin Studio可以在设备上调试iOS App Extensions。为了实现这一点,首先你需要编辑你现有App Extension项目的项目选项,然后更改位于iOS调试器设置页面中的调试器端口设置。建议将端口更改为10000以上的值。
新的App Extension项目将自动被分配一个随机的调试器端口,以避免将来出现这个问题。

改进执行目标

iOS加载项正在使用Xamarin Studio 6.3中引入的主工具栏的新功能来改善用户体验,例如自定义图标、工具提示和执行目标标灰的功能。
我们还改进了我们的逻辑,可以为你显示连接到Mac的设备,并告诉你为什么它们不可用于部署。
这是非常好的,因为很多类型的设备不可用:错误的设备系列,错误的功能或不符合部署目标的操作系统版本。
现在,你的设备将显示在“不可用设备”中,并在名称旁边有简要说明。如果你将鼠标放在设备名称上,则会提示更多详细信息。
以下是所有更改的列表:
  • iOS、watchOS、tvOS和macOS的主要工具栏中的新设备图标。
  • 当无法显示模拟器或设备时,在“Build Only”菜单分隔符下有Generic Simulator / Device。
  • 总是在工具栏中显示“设备”菜单分隔符,就像对模拟器一样。
  • Mac项目现在使用iMac图标显示名为“MyMac”的实际执行目标,而不是使用iPhone图标显示“Default”。

音频单元向导

新的音频单元扩展向导添加了3个选项来自定义音频单元项目模板的plist。
  • 音频单元类型
    • 仪器
    • 发生器
    • 效果
    • 音乐效果
  • 子类型代码:必须是4个字符
  • 制造商代码:必须是4个字符

删除TLS Provider选项

iOS构建选项中不需要TLS Provider,因为:
  1. AppleTLS是自C7以来的默认值,支持TLS 1.2。
  2. MonoTLS仅限于SSLv3和TLSv1:两者都已被弃用。
注意:Xamarin.iOS 10.4发行说明已经提到MonoTLS已被弃用,将来会被删除。

其他改进和bug修复

  • 现在部署到设备时会显示一个进度条。这对于watchOS来说尤其有用(需要Xamarin.iOS 10.5.0.323+)。
  • 现在使用Xamarin.iOS的已知操作系统版本来填充部署目标下拉列表。这两个优点是可以为每个App Extensions类型提供精确的最低版本,并避免显示基于Xcode的Xamarin.iOS尚不支持的操作系统版本。
  • 存在于Images.xcassets(或Assets.xcassets)目录中的* .csproj文件未导入的任何图像资源都将被忽略。

调试器

  • 在异常情况下支持HelpLink。点击异常对话框顶部的更多信息将打开默认浏览器中的链接。

微软身份

  • Xamarin Studio不再需要启动外部进程,以便在登录到Microsoft帐户时获取登录详细信息。

一般

  • “新建项目”对话框现在显示最近使用的模板列表。
  • Xamarin.UITest项目模板已更新到最新的版本。
    • Xamarin.UITest 2.0.6
    • Xamarin.TestCloud.Agent 0.20.3
未发布 Essential Studio for JavaScript发布2017 v3版本,支持统计图表
by Harriet666 keys 分享 1503649818838
Essential Studio for JavaScript是首款专门用于LOB应用开发的JavaScript框架。包含40多种独特的、全新设计的控件,包括网格、图表、计量器、编辑器、树形视图、菜单、OLAP网格等等。
 
Essential Studio for JavaScript 2017 v3点击下载>>>
 
Essential Studio for JavaScript 2017 v3增强了一些功能,支持统计图表以及甘特图控件的工作周。
所有JavaScript控件通用

ANGULAR

支持Angular 4

基本的JavaScript Angular组件升级,无缝支持Angular v4与Ahead-of-Time compilation。

主题切换

主题切换选项用于渲染和可视化所有可用的JavaScript主题中的组件。

 

AURELIA

支持Webpack

Aurelia-Syncfusion-bridge升级为支持最新版本的webpack和最新的Aurelia skeleton-navigation。

主题切换

主题切换选项用于渲染和可视化所有可用的JavaScript主题中的组件。
 

IONIC

Ionic app

Angular组件现在可以与Ionic移动应用开发框架集成。
 

JSPLAYGROUND

AngularJS支持的版本

SyncFusion JSPlayground升级到支持v1.6的AngularJS。
 

统计图表

StackingSplineArea和100%StackingSplineArea系列

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


 

数据标签饱和度

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

 

多种样条类型

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

 

数据管理器

Web API批量编辑

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

图表

支持标尺

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

 

标签拖动限制选项

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

文件管理器

根文件夹配置

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

 

表格

支持页面大小下拉

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

 

看板

状态显示/隐藏选项

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

 

PDF查看器

手写签名

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

 

时间表

在线添加/编辑预约

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

 

拼写检查

拼写检查同步请求

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

错误词建议

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

甘特图

工作周

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


验证任务栏编辑

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

 

枢轴网格

按需加载(关系数据库)

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

 

分页(关系数据库)

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

 

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

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

 

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

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

 

富文本编辑

拼写检查器

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


 

电子表格

 

支持不连续范围的图表

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

 

树型网格

文字换行

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

 

按需加载

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


 

命令列

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



 

打印

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

 

编辑模板

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

 

列优先

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

 

TREEMAP

文字溢出

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

未发布 集成的HTTP嗅探器HttpWatch更新至v11.0.21,改进F5刷新机制
by Harriet666 keys 分享 1509957982193
 HttpWatch是一款集成的HTTP嗅探器,为IE和Firefox提供新的方法以查看您网站的负载和运行情况。你可以直接在浏览器中调试由web页面生成的网络流量,而无需切换到一个单独的工具。

【HttpWatch v11.0.21免费下载>>>】


HttpWatch v11.0.21更新内容

  • 改进:使用HttpWatch扩展窗口中的F5和Ctrl+F5快捷键现在会刷新或强制刷新正在记录的Chrome选项卡
  • 改进:为“协议”列中的值添加了数据提示
  • 改进:Windows 10的扩展版本信息现在显示在“属性”窗格中
  • 修复:重复的评论项目被错误地添加到HAR文件中

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

未发布 多平台移动项目开发工具Elements发布v9.2,新增Java语言
by Harriet666 keys 分享 1503912870638
Elements是一款多平台移动项目开发工具软件,它包含Oxygene、C#、Swift三种编程语言和相关工具,并且提供这三种语言丰富的开发经验以及最新的Fire开发环境,极大的方便开发人员开发软件项目。
 
Elements最新版点击下载>>>
 
Elements v9.2进行了许多改进、修复和提升以及全新的前端语言。

Iodine: Java

Elements v9.2新增了第四种语言:Java。不要与Java平台混淆,Iodine将Java语言带入了Elements,并将其应用于所有平台:.NET、Cocoa、Java/Android和Island。这意味着你现在可以在.NET平台上使用Java语言,或者在创建iOS应用程序时重用一些现有的Android代码。这也意味着Java开发人员现在可以将Java用于本机Android NDK应用程序和扩展,而不必使用C/C ++。
 
当然,Java完全支持Visual Studio、Fire和Water Preview。
 

Water (Preview)

我们在发布Elements 9.1时开启了Water项目,让你了解在Windows上Elements开发人员的IDE体验。Alpha的初步反馈一直是积极的,用户对IDE的速度感到惊讶。现在,你可以使用稳定的9.2编译器查看最新的Water Preview,并进行实际运用。
 

Island

不到一年的时间,我们针对CPU编译器目标的Island平台正在紧密结合。虽然这一次的更改日志不如五月份那样长,但是Elements 9.2增加了一些重要的改进,包括Windows上的Island应用程序的全新定制调试引擎、新的模板和帮助Android NDK开发,并支持用于本地平台上的任务和异步代码。
 

Fire

Elements 9.2是Fire的一次重要升级。对于非托管调试器(Cocoa和Island),有一个新的反汇编视图,可以让你在CPU指令级别(包括没有符号的代码,例如OS库)中检查和逐步执行应用程序。
 
搜索已经通过新的嵌入式搜索窗格、搜索历史记录以及过滤文件的功能得到改进。代码编辑器现在加强了周围的代码块和匹配的XML标签,并且支持自动完成XML关闭标签和XML代码完成(目前为.plist文件,但为下一步XAML和Android XML CC奠定基础)。
 

Silver: Swift

在Silver方面,此版本支持Swift 4(Apple将在今年晚些时候发布),以及平台平衡和与Apple Xcode兼容性的其他改进。
未发布 MailBee.NET Objects发送电子邮件(SMTP)教程七:添加多个附件
by Harriet666 keys 分享 1495099317250
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。
 
 
本文主要介绍了如何使用MailBee.NET Objects在邮件中添加多个附件的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
 
MailBee.NET Objects允许开发人员管理此邮件消息的所有附件对象的集合。你可以通过SMTP对象的SMTP.Message.Attachments属性访问此集合。要向邮件中添加多个附件,开发人员应该调用SMTP.Message.Attachments.Add方法。该方法的不同重载允许开发者不仅可以指定附加文件的路径,还可以指定其他参数,如Content-ID(CID)、目标文件名、Content-Type等:
C#:

oMailer.Message.Attachments.Add(@"C:\Temp\report.doc");
oMailer.Message.Attachments.Add(@"C:\Temp\prices_2005.xls", "prs2005.xls");
oMailer.Message.Attachments.Add(@"C:\Temp\my_photo.jpg", "pic1.jpg","<12s4a8a8778c$5664i1b1$ir671781@tlffmdqjobxj>");

oMailer.Message.Attachments.Add(@"C:\Temp\john_doe_photo.jpg", "pic2.jpg","<12s4a8a8932r$5664i1t1$iy671661@yljfmkqjghxu>", "image/gif", null, NewAttachmentOptions.Inline,  MailTransferEncoding.Base64);

VB.NET:
oMailer.Message.Attachments.Add("C:\Temp\report.doc")
oMailer.Message.Attachments.Add("C:\Temp\prices_2005.xls", "prs2005.xls")
oMailer.Message.Attachments.Add("C:\Temp\my_photo.jpg", "pic1.jpg","<12s4a8a8778c$5664i1b1$ir671781@tlffmdqjobxj>")
 
oMailer.Message.Attachments.Add("C:\Temp\john_doe_photo.jpg", "pic2.jpg", "<12s4a8a8932r$5664i1t1$iy671661@yljfmkqjghxu>", "image/gif", Nothing, NewAttachmentOptions.Inline, MailTransferEncoding.Base64)
 
上面的示例向邮件添加了四个附件。第一个文档作为report.doc附加。第二个文件作为附带指定的CID的prs2005.xls。第三个附件是一张图片,也有自己的CID。最后一个附件被强制作为Base64编码中的内联对象。
 
如果附件被认为是一个内联对象,它将与邮件正文一起显示。但是,如果开发人员需要从邮件正文的任何​​地方引用此附件,则应将相应的CID分配给此附件。
 
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。

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


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