文章的标题是不是感觉有点奇怪,但实际我们在XAFBlazor中使用Blazor组件是很繁琐的,我们需要将Blazor组件封装成属性编辑器(PropertyEditor),再用非持久化对象(NonPersistentObject)去承载它。当我们有许多这样的Blazor组件时,不仅工作量大,同时还容易出错。下面我们通过一个巧妙的方式来减少这样重复的操作,这篇文章只是给出原理,EasyXaf.BlazorTabbedMdi模块( http://www.cnblogs.com/haoxj/p/16916525.html )对它做了实现。
在Blazor组件中添加 @attribute [ComponentNavigationItem] 就可以将Blazor组件添加到XAF导航栏中
XAF中的很多服务都已注册到了容器中,如IObjectSpaceFactory,它可以创建一个IObjectSpace对象,通过它我们可以操作XAF中的BO,如果你想访问Application,可以注入IXafApplicationProvider,它有一个GetApplication方法。
注意:在XAF中自己创建的IObjectSpace对象,需要自己销毁,View中的IObjectSpace对象,XAF会自动销毁
前面是将Blazor组件在主窗口中显示,我们也可将其在模态窗口中显示
我们还可以给Blazor组件传递参数,同时Blazor组件也可以返回结果
Blazor组件代码
演示
前面是在Blazor组件中调用弹窗,在ViewController中也是可以的
演示
在继续阅读之前,你需要知道如何将Blazor组件集成到XAF中去,在有了上面所说的知识后,我们说一下它的实现原理及注意事项。
我们知道在导航项(IModelNavigationItem)中有ObjectKey属性及View属性,将View设置为一个详情视图(DetailView),将ObjectKey设置为相应的主键,就可以直接导航到对应的详情。我们将其改造一下,详情视图是展示Blazor组件的视图,而ObjectKey是Blazor组件的类型名称,这样我们就可以设置不同的ObjectKey值来展示不同的Blazor组件。详情视图的ModelClass是一个非持久化对象,代码如下:
由于非持久化对象的数据需要我们自己提供,我们可以订阅NonPersistentObjectSpace的ObjectByKeyGetting事件,通过Key的值返回对应的Blazor组件类型,代码如下:
需要注意ObjectKey中不能包含点(.),由于XAFBlazor会将ObjectKey作为Url的一部分,而Blazor中对点的处理是请求文件,所以这里我们将点替换为减号(-)。
当我们得到了Blazor组件的类型后,我们就可以将其展示出来,代码如下:
DynamicComponent可以通过类型动态加载组件
上面就是在XAF中使用Blazor组件的思路,如果想再丰富一些,可以创建一个ComponentNavigationItemAttribute,将其放到Blazor组件中,用于收集导航,这是XAF模型的知识,可以参考之前的文章。
在XAFBlazor中直接使用Blazor组件,是一种新的开发体验,这样可以最大程度的扩展XAFBlazor功能,同时也可充分利用WEB开发社区的其它组件。
背景 典型的机器学习工作流程是数据处理、特征处理、模型训练和评估的迭代循环。想象一下,必须对数据处理方法、模型算法和超参数的不同组合进行试验,直到我们获得令人满意的模型性能。这项费时费力的任务通常在超参数优化期间执行。超参数优化 超参数优化的目标是找到最佳模型管道组件及其关联的超参数。让我们假设一个简单的模型管道,它有两个管道组件:一个输入器,然后是一个随机森林分类器。输入步骤有一个超参数称为“strategy”,它决定了如何执行输入,例如使用平均值、中值或众数。随机森林分类器有一个称为“depth”的超参数,它决定了森林中单个决策树的最大深度。我们的目标是找出哪个跨模型管道组件的超参数组合能提供最好的结果。超参数优化的两种常见方法是使用GridSearch或RandomSearch。 GridSearch对于每个超参数,我们生成一个可能值的列表,并尝试所有可能的值组合。在我们的简单示例中,我们有3种输入策略和3种不同的随机森林分类器深度来尝试,因此总共有9种不同的组合。RandomSearch 在随机搜索中,我们定义了每个超参数的范围和选择,并在这些范围内随机选择超参数集。在我们的简
我曾经认为--如果我了解JavaScript,那写后端会很容易。我之所以认为简单,是因为Node是JavaScript。我没必要去学一门新语言。然而,我错了。但是,后端是很难去学的。我花了很长的时间去学习它。(当然,我现在仍然尝试去掌握它)。我意识到在学习后端中我有些问题,因为我曾认为前端和后端是一样的--它们都是代码而已。这是个很大的错误。前端和后端完全是不同的野兽。我能正确地学习后端之前,我必须尊重他们的差异。如果让我来解析前端和后端之间的差异(在执行方面),我会说:前端是有关视觉后端是有关通信前端是有关视觉当我们构建前端事物,我们很大程度上关注了用户对我们构建的东西是怎么看的。我们花费了大量的时间自问了下面这些问题(每个问题都带来数不尽的工作):它看起来好不?它有意义不?它对用户友好不?它容易理解不?它够快不?我们都关心。有时候,我们为了提高用户的视觉体验(带来愉悦感),我们添加了诸如下面的事物:视频/图片/动图Gifs动效颜色主题伴随着每个附加功能,我们还必须考虑它们可能带来的影响:视频/图片/动图Gifs太大了?如果有人无法忍受我们的动效怎么办?用户喜欢明亮的主题还是暗黑主题
python批量复制不同目录下的文件#!/usr/bin/envpython #coding=UTF-8 #authoraping importos,sys,shutil,time importgetpass,os.path fromftplibimportFTP back01="/fs/vm/vm-back/tes.vmdk" back02="/tmp/111.vmdk" back03="/fs/222.vmdk" tmpFileDir="/tmp/" #复制临时存储目录 serverName="BWA123" #资产编号(主机名) logPath="/tmp/log.txt" #日志文件路径 #记录日志函数 deflog(msg=''): log=open(logPath,"a") log.writelines(msg+'\n
方栗子发自凹非寺 量子位报道|公众号QbitAI今天是个美妙的日子。既然你没有女喷油,我们谈谈相亲的话题。相亲的时候,该怎样避免说出奇怪的话,把可爱的妹子吓跑?别说话就行了。前几天,日本某间酒店的宴会厅,一场画风奇崛的相亲大会圆满落幕。 每个人类面前坐着一只机器人,说话的任务都交给它们,人类就不用紧张得讲错话了。28人参加,牵手4对,真是不错的成绩。不一样的8分钟相亲助手,是来自夏普的口袋机器人Robohon,会讲话,也会跳舞。“玛丽桑有些什么爱好?” “最近开始练钢琴了呢。”如果“委托人”的兴趣刚好和对方一样,机器人还会替人类发出一阵惊喜:“哇,我也是,好巧哦。” 「わあ、私もなんです。偶然ですね。」相亲开始之前,人类已经提前回答了45个问题,把个人信息、个人喜好全部告诉机器人。甚至,喜不喜欢做家务,都在问卷的考察范围。毕竟,要帮人类完成脱单大业,了解ta才是最关键的。除此之外,一些很难说出口的问题,让机器人来问,可能会避免尴尬:“冒昧问一下,您的年收入有多少呢?” “也就是我这个年龄段的平均水平吧。”几个问题过后,两边的距离就一点一点拉近了:“第一次约会想去哪里呢?” “我想去
人工智能快速发展,在许多领域取得重大影响,使得不少人担心可能会出现超级智能。DeepMind的联合创始人DemisHassabis和加拿大多伦多大学教授GeoffreyHinton两位国际泰斗在谈到强人工智能(AGI)时表示,强人工智能还有很长的路要走,目前谈之为时尚早。 预测音乐品味、检测转移性肿瘤、生成脑癌的合成扫描、根据真实世界的视频创建虚拟环境、识别被贩卖的受害者、击败国际象棋大师和专家级的Dota2电子竞技队、取代司机成为出租车驾驶员,以上这些只是2018年人工智能(AI)系统取得的一些成功案例,也是该领域迅速发展的证据。据麦肯锡全球研究院的分析师预测:按照目前的发展速度,仅在美国,人工智能将在未来12年内帮助增加20%到25%的净经济效益(放在全球范围内,相当于13万亿美元)。最令人印象深刻的一部分工作来自于对深度神经网络(DNN)的研究,这是一种基于数据表示的机器学习架构。它们是对大脑的松散建模:DNN包含一些由突触连接到一起的人工神经元(即数学函数),其中突触负责神经元之间的信号传输。这些神经元以层的形式排列,信号(馈送到DNN中的数据或输入)在层与层之间传输,可以通过
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意是有两个人比赛,第一个人一定会走最短路,问第二个人最短走多远(不能与最短路路径完全相同)。 其实就是一个次短路问题,我用的dijkstra+链式前向星...AC代码:#include<bits/stdc++.h> #definemaxn500005 #defineinf1e18 #definelllonglong usingnamespacestd; structNode{ llto,next,w; booloperator<(constNode&a)const{ returna.w<w; } }Edge[maxn],Now,Next; inthead[maxn],num; lld1[maxn],d2[maxn]; intT,n,m; voidinit(){ memset(head,-1,sizeof(head)); for(inti=0;i<=n;i++){ d1[i]=inf; d2[i]=inf; } num=0; }
最近在郎师兄推荐下初步了解了一下processing互动编程艺术,真是美轮美奂,直接跪了。今天我用Scratch也做了一个互动的小作品,自我感觉挺好(大神勿喷~),跟大家分享下。一、互动玩法 1.点击鼠标,舞台中众多移动物体会在“聚合”与“发散”两个状态切换;2.点击鼠标的位置,会逐渐出现装饰文字文字;3.点击空格键,更换舞台上活动的角色。二、界面截图如下作品截图1 作品截图2 作品截图3 作品截图4 三、代码部分说明这个案例分为三个元素:舞台、角色和装饰文字,代码分布在这三个元素上。舞台代码主要用于检测鼠标,按下鼠标,舞台上移动物体在聚散之间切换。“聚”则鼠标跟随,“散”则花落满天。舞台代码 角色代码部分主要是克隆自身,设置其大小颜色等特效及移动等控制。按下空格键,切换角色造型(本例中用了四个造型,见上面四个截图)。角色代码 角色内部结构装饰文字代码主要体现在逐渐显现和隐藏,显示位置由鼠标决定。文字代码
原理:主要是拿到视频文件得视频流,然后拿到音频文件的音频流,根据时间戳一帧一帧的封装成一个新的视频文件效果:音频文件和视频文件合成一个文件,合成的文件时间就是两个文件中短的时间。 源代码如下:具体看注释 #include<jni.h> #include<android/log.h> extern"C"{ #include"libavcodec/avcodec.h" #include"libavformat/avformat.h" }; #defineLOG_TAG"JNI_TAG" #defineLOGD(...)__android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) extern"C" JNIEXPORTvoidJNICALL Java_com_zzw_ffmpegdemo_FFmpegHelper_megre(JNIEnv*env,jobjectinstance,jstringmusic
个性化推荐最佳实践一、基本概念网络营销解决方案提供商Questus公司的调查显示,在选择网络购物的消费者中,32%的人认为浏览体验非常重要;在决定不再网上购物的消费者中,22%是因为很难找到想要的商品。根据推荐技术服务公司Baynote的调查,如果人们点击了三次之后还无法找到自己想要的商品,95%的人会离开这个网站。对于零售网站来说,如果不能准确地为顾客展示他们喜欢的产品,让顾客将时间浪费在浏览自己不感兴趣的商品上,那么最终为顾客糟糕的浏览体验埋单的还是零售网站自己。个性化推荐技术已经给零售网站提供了解决方案。目前很多大型的零售网站,比如Amazon、CDNOW、Netflix等都在采用个性化推荐技术来改善顾客的购物体验。个性化推荐系统能够根据每位顾客在网站上的浏览和访问历史来挖掘顾客的个性化偏好,从而向不同的顾客展示他们各自需要的可能不同的商品。No.1什么是个性化推荐?个性化推荐引擎,是通过研究和分析消费者在互联网上行为和内容,主动发现消费者当前或潜在偏好、兴趣和需求的模式,并将消费者感兴趣的商品或服务推荐给消费者,从而提升消费者的购物体验,为电子商务企业创造更大的客户价值。明尼苏
在深度模型中我们通常需要设计一个模型的代价函数(或损失函数)来约束我们的训练过程,训练不是无目的的训练,而是朝着最小化代价函数的方向去训练的。本文主要讨论的就是这类特定的优化问题:寻找神经网络上一组参数 ,它能显著地降低代价函数 ,该代价函数通常包括整个训练集上的性能评估和额外的正则化项。在这篇文章里深度学习的前戏–梯度下降、反向传播、激活函数,我们曾探讨过梯度下降问题,说明了在深度学习中最小化代价函数的方法就是重复计算代价函数在训练集上的梯度,从而使得参数 往梯度相反的方向更新,以使得代价函数取到最小值。1、经验风险和结构风险设 是每个样本的损失函数, 是输入x时所预测的输出, 是数据生成分布, 是目标输出,于是得到目标函数:机器学习算法的目标就是降低上式所示的期望泛化误差,这个数据量被称为风险。但是实际中,我们是无法知道数据的真实分布 的,我们只有有限的训练数据,能得到的也只有训练数据样本的分布,也称为经验分布 ,因此在实际优化问题中,我们需要使用经验分布来代替真实分布,于是目标函数为:因此我们需要最小化经验风险:其中m表示训练样本的数目。基于最小化这种平均训练误
上集提到了我们DCISDN背景信息,我们在实际运营上遇到的一些困惑,以及我们针对运营中看到的问题,提出了SDN方向解决思路。那么下集我们一起窥探里面用到的实现技术原理以及我们是如何思考的。1技术实现1.1概述腾讯下一代数据中心间网络将会实现资源自动池化、业务应用自动化管理网络资源、业务应用自动感知网络资源等特征。业务系统直接通过网络系统提供的北向API接口实现自动化地申请网络资源、使用网络资源、释放网络资源,利用集中式的调度系统无须人工管理,自动化地完成网络资源合理分配和使用。为了实现以上智能调度工作,PCEP(PathComputationElementProtocol)协议给了我们控制器和路由器一个非常好的交互接口(如图)。1.2传统网络设备工作角色从80年代IP网络刚刚起步至今,已经经历了将近30年,在这30年里,IP网络设备一直担负着计算路由、转发报文的工作。从上面探讨到的智能交通城市里,不能再由汽车或者驾驶员决定使用哪条道路到达目的地了。在我们未来的网络世界也一样,不能再由每个独立的路由器决定每个报文的转发路径。原因很简单,因为网络中每个独立的路由器就像城市中的小汽车一样,它
1:MongoDB的官方网址:https://www.mongodb.com MongoDB的中文社区:http://www.mongoing.com/(老外也很看重中国市场啊,知道大家英语不好,做的中文社区) MongoDB的中文网址:http://docs.mongoing.com/manual-zh/ MongoDB的github:https://github.com/mongodb2:在MongoDB的github上面下载压缩包上传到VMware的linux操作系统上面:操作过程就不做多叙述了(使用Xsheel链接linux操作系统,使用Filezilla上传文件到linux操作系统上面),之前的博客讲过操作过程:https://cloud.tencent.com/developer/article/10105293:下载过程(简单叙述,根据需要下载不同操作系统不同的版本即可,这里以linux操作系统为主):4:将MongoDB的压缩包上面到linux操作系统之后就可以进行解压缩操作(拷贝到指定目录的做法):MongoDB常使用的几个命令:5:MongoDB的简单使用(首
1.接口描述本接口(DeleteDevice)用于删除物联网通信设备。 接口请求域名:iotcloud.api.qcloud.com 2.输入参数以下请求参数列表仅列出了接口请求参数,其它参数见公共请求参数页面。 参数名称 必选 类型 描述 deviceName 是 String 需要删除的设备名称 productID 是 String 设备所属的产品ID 3.输出参数 参数名称 类型 描述 code Int 公共错误码。0表示成功,其他值表示失败,详见公共错误码页面 message String 模块错误信息描述,格式为"(模块错误码)模块错误信息",详见本页面的模块错误信码 codeDesc String 模块错误码的英文描述 4.示例输入 https://iotcloud.api.qcloud.com/v2/index.php?Action=DeleteDevice&productID=ABCDE12345&deviceName=apple& 复制 输出 { "message":"", "codeDesc":"S
问题:在ruby命令窗口sass--watchglobal.scss:global.css会报错,且生成的css文件中文注释是乱码的。根据提示是编码问题。 >>>Sassiswatchingforchanges.PressCtrl-Ctostop.Encoding::CompatibilityError:incompatiblecharacterencodings:GBKandUTF-8Use--traceforbacktrace. 解决方法: ✿. scss文件的第一行加 @charset"utf-8"; ✿.在找到ruby安装目录下的engine.rb,打开文件,在所有的require####后面添加 Encoding.default_external=Encoding.find('UTF-8') ✿.如果问题还没解决的话,那就是项目的绝对路径里面有中文命名的文件夹,将路径中以中文命名的文件夹改为英文命名即可。
substring(intbeginIndex,intendIndex)在JDK6与JDK7中的实现方式不一样,理解他们的差异有助于更好的使用它们。为了简单起见,下面所说的substring()指的就是substring(intbeginIndex,intendIndex)方法。 1.substring()是做什么的? substring(intbeginIndex,intendIndex)方法返回一个子字符串,返回的是从原字符串的beginIndex到endIndex-1之间的内容。 1 2 3 String x="abcdef"; x =x.substring(1,3); System.out.println(x); 输出: 1 "bc" 2.当substring()被调用的时候,内部发生什么事? 你或许会认为由于x是不可变的对象,当x被x.substring(1,3)返回的结果赋值后,它将指向一个全新的字符串如下图: 然而,这个图并不完全正确,或者说并没有完全表示出java堆中
http双刃剑无状态明文传输,不安全。 好处服务器的开销比较小。不需要记忆http状态 。坏处购物下单支付每一次都要验证信息。cookie解决。 Cookie通过在请求和响应报文中写入Cookie信息来控制客户端的状态。 明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的F12控制台或Wireshark抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。 但是这正是这样,HTTP的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那你号没了。 HTTP/1.1提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。 持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。 ,这使得管道(pipeline)网络传输成为了可能。 即可在同一个TCP连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。 HTTPS采用的是对称加密和非
javascript中没有大部分语言中都有的string.format方法,但是通过引入第三方库就可以支持了,比如sprintf-js。 其用法如下 用法一 类似Go里面的fmt.sprintf用法。 这也是类似c/c++这样的语言里的用法,用%d表示数字,%s表示字符串: 比如Go代码 s:=fmt.sprintf("数字:%d字符串:%s",123,"javascript") 复制 同样功能的javascript代码为 consts=vsprintf('数字:%d字符串:%s',[123,'javascript']); 复制 输出都为 数字:123字符串:javascript 复制 用法二 类似C#里面的string.format用法: C#的用法比较特别,其用{0}表示传入的第一个参数,依次类推。但是比较灵活,因为同样的占位符。比如{0}可以出现多次,也能以任意顺序出现。 比如C#代码 vars=string.Format("字符串在前{1}字符串再出现一次{1}数字{0}",123,"javascript"); 复制 同样功能的javascript代码为: 不一样的是,这里索
引入 在项目中经常能用到一个功能,就是对于按钮的点击时间间隔控制,如果不控制,什么时候点击都会触发事件,一般一秒内允许按钮点击1到3次; 这里就需要用Runtime实现,下面是我基于UIButton创建的一个分类: .h #import<UIKit/UIKit.h> @interfaceUIButton(XKButton) /** *为按钮添加点击间隔eventTimeInterval秒 */ @property(nonatomic,assign)NSTimeIntervaleventTimeInterval; @end复制 .m #import"UIButton+XKButton.h" #import<objc/runtime.h> #definexkDefaultClickInterval0.5//默认时间间隔 @interfaceUIButton() /** *boolYES忽略点击事件NO允许点击事件 */ @property(nonatomic,assign)BOOLisIgnoreEvent; @end @implementationUIBu
Python高级应用程序设计任务要求 用Python实现一个面向主题的网络爬虫程序,并完成以下内容:(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台) 一、主题式网络爬虫设计方案(15分) 1.主题式网络爬虫名称 名称:爬取虎牙直播视频播放量 2.主题式网络爬虫爬取的内容与数据特征分析 内容:本次爬虫主要爬取虎牙有关王者荣耀直播页的视频标题、主播名字、视频播放量等相关信息。 3.主题式网络爬虫设计方案概述(包括实现思路与技术难点) 实现思路:本案使用requests库爬取目标页面HTML代码,然后使用beautifulSoup库解析页面内容提取目标信息,最后利用pandas将数据存储,读取,再打印出来。 技术难点:1.爬取数据提取相关信息 2.遍历过程 3.保存数据至excel表格 二、主题页面的结构特征分析(15分)1.主题页面的结构特征 https://www.huya.com/g/wzry &nb