首页 文章 精选 留言 我的

精选列表

搜索[动态执行],共10000篇文章
优秀的个人博客,低调大师

语音科技圈新动态,亚马逊开放Alexa底层技术

考虑到未来最大的回报可能是来自电子商务领域的服务,亚马逊已经开始提供Alexa的独享优惠,以鼓励人们通过语音购物。 近日,为帮助开发者将Alexa的聊天功能融入他们自己的应用,让用户通过语音控制几乎所有的软件,亚马逊面向开发者开放了他们的Alexa的底层技术。 据悉,这项名为Amazon Lex的服务在去年年末就已经推出了预览版。亚马逊CTO维纳·沃格尔斯(Werner Vogels)表示,目前,亚马逊在语音识别和处理方面的能力已经足以支持用户更便捷的使用对话助手或聊天机器人了,不再像以前的工具那么繁琐难用。 将开放Alexa的底层技术作为一项服务,不仅可以通过数百万的用户,利用人们发送给应用的文本和录音来训练Lex以及Alexa,从而持续改进亚马逊的语音识别技术,还可以帮助亚马逊加快数据收集速度。 据统计,目前Echo等使用Alexa的设备销量大约为1000万台,可以预见,此次开放Alexa的底层技术,亚马逊很有可能成为语音控制计算领域的顶尖企业。 与其他云计算服务一样,亚马逊将根据Lex处理的文本和语音数量向开发者收取一定的费用。此外,考虑到未来最大的回报可能是来自电子商务领域的服务,亚马逊已经开始提供Alexa的独享优惠,以鼓励人们通过语音购物。 原文发布时间: 2017-04-20 14:28 本文作者: 伶轩 本文来自云栖社区合作伙伴镁客网,了解相关信息可以关注镁客网。

优秀的个人博客,低调大师

我的架构之路 — 配置中心(三)— 动态更新配置

包含两方面的含义:一、变化的配置能够下发到客户端.二、客户端能够方便地处理这些变化的配置。下面会讲普通监听器回调方式和spring 注解到field的方式。 配置下发 1)客户端间隔20秒(可配)去数据库拉取配置,sql传递的参数有配置名称、环境、上一次最大更新时间2)取到配置后,合并更新本地备份。3)通过监听器的方式通知配置变化。 #监听器接口 public interface ConfigUpdateListener { void update(Properties properties); } #启动时添加监听器 public void addConfigUpdateListener(ConfigUpdateListener configUpdateListener) { configUpdateListeners.add(configUpdateListener); } #配置变化,调用监听器进行通知 for (ConfigUpdateListener configUpdateListener : configUpdateListeners) { configUpdateListener.update(changedProperties); } spring 注解方式绑定成员变量 通过@ConfigValue注解来实现变量绑定,当配置变化的时候会同时更新这个变量。这种方式可以用于一起开关切换、降级处理的场景。 @ConfigValue("baseUrl") private String baseUrl; 实现原理:1)从配置中心获取配置。2)通过BeanPostProcessor 遍历每个spring bean,找出所有包含@ConfigValue注解的field,然后设置值为配置中心的属性值,同时把记录field到Map对象,以后更新配置时就不用想办法遍历了。这里有一个严格处理原则,如果配置中心找不到相应key或值赋值时候报异常,终止程序,保证安全性。其实代码对非spring的、static 成员变量也支持,只是需要程序启动时候指定包含这些static变量的类名列表。 public class PropertyPlaceholderConfigurer extends org.springframework.beans.factory.config.PropertyPlaceholderConfigurer implements BeanPostProcessor { private Map<String,List<BeanField>> configMap= new ConcurrentHashMap<String,List<BeanField>>(); @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { ConfigInjectSupport.inject(mergedProperties,bean.getClass(),bean,configMap); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } public static void inject(Properties properties, Class clazz, Object bean, Map<String,List<BeanField>> configMap){ Field[] fields = clazz.getDeclaredFields(); if (null != fields) { for (Field f : fields) { // 如果 bean ==null(非spring),则必须是静态方法 if(bean==null && !Modifier.isStatic(f.getModifiers())) continue; ConfigValue configValue = f.getAnnotation(ConfigValue.class); if (configValue != null) { String key = configValue.value(); f.setAccessible(true); Object value = properties.get(key); if (value != null) { try { f.set(bean, converter.convertIfNecessary(value, f.getType(), f)); } catch (IllegalAccessException e) { throw new RuntimeException(e); } }else{ RuntimeException e= new RuntimeException("can not find config. key="+key+", class="+clazz+", field="+f.getName()); e.printStackTrace(); throw e; } List<BeanField> list = configMap.get(key); if (list == null) { list = new ArrayList<BeanField>(); configMap.put(key, list); } BeanField beanField=new BeanField(); beanField.setBean(bean); beanField.setField(f); list.add(beanField); } } } clazz = clazz.getSuperclass(); } 3)加入监听器,接收变化的配置,更新field值 public static void addConfigUpdateListener(final Map<String,List<BeanField>> configMap) { DefaultConfigClient.addConfigUpdateListener(new ConfigUpdateListener() { @Override public void update(Properties properties) { for (Map.Entry<Object, Object> e : properties.entrySet()) { List<BeanField> beanFields = configMap.get(e.getKey().toString()); if (beanFields != null) { Object value = properties.get(e.getKey()); for (BeanField beanField : beanFields) { try { ConfigValue configValue = beanField.getField().getAnnotation(ConfigValue.class); if(configValue.updatable()) { ConfigInjectSupport.setFieldValue(beanField, value); } } catch (IllegalAccessException ex) { ex.printStackTrace(); } } } } } }); } public static void setFieldValue(BeanField beanField,Object value) throws IllegalAccessException { Field f=beanField.getField(); f.set(beanField.getBean(), ConvertUtils.convert(value,f.getType())); }

优秀的个人博客,低调大师

动态加载Js代码到Head标签中的脚本

我遇到了这样的问题,请教google,结果大多数只是介绍那个注册js的几个函数,而这几个函数插入的js都在body里面,幸而在老外那里看到了这个代码,其实比较简单,但够有用 1 HtmlGenericControlInclude2 = new HtmlGenericControl( " script " ); 2 Include2.Attributes.Add( " type " , " text/javascript " ); 3 Include2.InnerHtml = " alert('JavaScriptinPageHeader'); " ; 4 this .Page.Header.Controls.Add(Include2); 或 Literalli = new Literal(); li.Text = " <script</script> " ; this .Page.Header.Controls.Add(li); 或者 Code 欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处! 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2009/10/24/1589315.html ,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册