Storm历险记之浅入浅出:Storm Hello World入门示例

俗话说一图胜千言万语,想了解Storm的话,先来看几张图,直观的了解一下Storm。图片有官方的图片,也有技术人自己画的图片,均来自互联网,在看代码之前先来简单的看一下图片。请快速的看一下图片,找一下感觉,如果一下子看不明白,其实也没有关系。图片流之后,会有一小段文字说明。本文适合Storm小白看,大神吐槽或在1秒内关掉。

Storm历险记之浅入浅出:Storm Hello World入门示例
Storm历险记之浅入浅出:Storm Hello World入门示例

图1

Storm历险记之浅入浅出:Storm Hello World入门示例
Storm历险记之浅入浅出:Storm Hello World入门示例

图2

Storm历险记之浅入浅出:Storm Hello World入门示例
Storm历险记之浅入浅出:Storm Hello World入门示例

图3

Storm历险记之浅入浅出:Storm Hello World入门示例
Storm历险记之浅入浅出:Storm Hello World入门示例

图4

Storm历险记之浅入浅出:Storm Hello World入门示例
Storm历险记之浅入浅出:Storm Hello World入门示例

图5

Storm是实时流式处理计算框架,不断的取数据,不断的处理数据,这个过程就像水流一样。官方配图就是一个水龙头来诠释Storm内涵。数据处理流程的开始是Spout,取数据,中间的过程是多个Bolt组合,Bolt是处理数据的单元,Spout与Bolt就像流程图的开始与中间处理过程。Spout与Bolt组合成了一个topology作业,丢给storm就能跑起来。Storm有本地模式,也有远程模式,今天的Storm Hello World采用本地模式。

 

代码结构:

图6

代码源自https://www.cnblogs.com/xuwujing/p/8584684.html,因为用的最新的storm-core 1.2.2,代码有些改变。从eclipse报错提示来看,store代码中原来 superclass中的部分方法被移到了interfase中,所以有些@Override要去掉。

 

POM文件

<!– https://mvnrepository.com/artifact/ring-cors/ring-cors –>

<dependency>

<groupId>ring-cors</groupId>

<artifactId>ring-cors</artifactId>

<version>0.1.12</version>

</dependency>

<!– https://mvnrepository.com/artifact/org.apache.storm/storm-core –>

<dependency>

<groupId>org.apache.storm</groupId>

<artifactId>storm-core</artifactId>

<version>1.2.2</version>

<scope>provided</scope>

</dependency>

修正过的代码

TestSpout

import java.util.Map;

import org.apache.storm.spout.SpoutOutputCollector;

import org.apache.storm.task.TopologyContext;

import org.apache.storm.topology.OutputFieldsDeclarer;

import org.apache.storm.topology.base.BaseRichSpout;

import org.apache.storm.tuple.Fields;

import org.apache.storm.tuple.Values;

 

public class TestSpout extends BaseRichSpout{

 

private static final long serialVersionUID = 225243592780939490L;

 

private SpoutOutputCollector collector;

private static final String field=”word”;

private int count=1;

private String[] message =  {

“Storm Hello World”,

“http://www.jishudao.com storm blog”,

“Play with storm”

};

 

/**

* open()方法中是在ISpout接口中定义,在Spout组件初始化时被调用。

* 有三个参数:

* 1.Storm配置的Map;

* 2.topology中组件的信息;

* 3.发射tuple的方法;

*/

public void open(Map map, TopologyContext arg1, SpoutOutputCollector collector) {

System.out.println(“open:”+map.get(“test”));

this.collector = collector;

}

 

/**

* nextTuple()方法是Spout实现的核心。

* 也就是主要执行方法,用于输出信息,通过collector.emit方法发射。

*/

public void nextTuple() {

 

if(count<=message.length){

System.out.println(“第”+count +”次开始发送数据…”);

this.collector.emit(new Values(message[count-1]));

}

count++;

}

 

 

/**

* declareOutputFields是在IComponent接口中定义,用于声明数据格式。

* 即输出的一个Tuple中,包含几个字段。

*/

public void declareOutputFields(OutputFieldsDeclarer declarer) {

System.out.println(“定义格式…”);

declarer.declare(new Fields(field));

}

 

/**

* 当一个Tuple处理成功时,会调用这个方法

*/

@Override

public void ack(Object obj) {

System.out.println(“ack:”+obj);

}

 

/**

* 当Topology停止时,会调用这个方法

*/

@Override

public void close() {

System.out.println(“关闭…”);

}

 

/**

* 当一个Tuple处理失败时,会调用这个方法

*/

@Override

public void fail(Object obj) {

System.out.println(“失败:”+obj);

}

 

}

 

TestBolt

import java.util.Map;

 

import org.apache.storm.task.OutputCollector;

import org.apache.storm.task.TopologyContext;

import org.apache.storm.topology.OutputFieldsDeclarer;

import org.apache.storm.topology.base.BaseRichBolt;

import org.apache.storm.tuple.Fields;

import org.apache.storm.tuple.Tuple;

import org.apache.storm.tuple.Values;

 

public class TestBolt extends BaseRichBolt{

 

/**

*

*/

private static final long serialVersionUID = 4743224635827696343L;

 

private OutputCollector collector;

 

/**

* 在Bolt启动前执行,提供Bolt启动环境配置的入口

* 一般对于不可序列化的对象进行实例化。

* 注:如果是可以序列化的对象,那么最好是使用构造函数。

*/

public void prepare(Map map, TopologyContext arg1, OutputCollector collector) {

System.out.println(“prepare:”+map.get(“test”));

this.collector=collector;

}

 

/**

* execute()方法是Bolt实现的核心。

* 也就是执行方法,每次Bolt从流接收一个订阅的tuple,都会调用这个方法。

*/

public void execute(Tuple tuple) {

String msg=tuple.getStringByField(“word”);

System.out.println(“开始分割单词:”+msg);

String[] words = msg.toLowerCase().split(” “);

for (String word : words) {

this.collector.emit(new Values(word));//向下一个bolt发射数据

}

 

}

 

/**

* 声明数据格式

*/

public void declareOutputFields(OutputFieldsDeclarer declarer) {

declarer.declare(new Fields(“count”));

}

 

/**

* cleanup是IBolt接口中定义,用于释放bolt占用的资源。

* Storm在终止一个bolt之前会调用这个方法。

*/

@Override

public void cleanup() {

System.out.println(“TestBolt的资源释放”);

}

}

 

Test2Bolt

import java.util.HashMap;

import java.util.Map;

 

import org.apache.storm.task.OutputCollector;

import org.apache.storm.task.TopologyContext;

import org.apache.storm.topology.OutputFieldsDeclarer;

import org.apache.storm.topology.base.BaseRichBolt;

import org.apache.storm.tuple.Tuple;

 

public class Test2Bolt extends BaseRichBolt{

 

/**

*

*/

private static final long serialVersionUID = 4743224635827696343L;

 

 

/**

* 保存单词和对应的计数

*/

private HashMap<String, Integer> counts = null;

 

private long count=1;

/**

* 在Bolt启动前执行,提供Bolt启动环境配置的入口

* 一般对于不可序列化的对象进行实例化。

* 注:如果是可以序列化的对象,那么最好是使用构造函数。

*/

public void prepare(Map map, TopologyContext arg1, OutputCollector collector) {

System.out.println(“prepare:”+map.get(“test”));

this.counts=new HashMap<String, Integer>();

}

 

/**

* execute()方法是Bolt实现的核心。

* 也就是执行方法,每次Bolt从流接收一个订阅的tuple,都会调用这个方法。

*

*/

public void execute(Tuple tuple) {

String msg=tuple.getStringByField(“count”);

System.out.println(“第”+count+”次统计单词出现的次数”);

/**

* 如果不包含该单词,说明在该map是第一次出现

* 否则进行加1

*/

if (!counts.containsKey(msg)) {

counts.put(msg, 1);

} else {

counts.put(msg, counts.get(msg)+1);

}

count++;

}

 

 

/**

* cleanup是IBolt接口中定义,用于释放bolt占用的资源。

* Storm在终止一个bolt之前会调用这个方法。

*/

@Override

public void cleanup() {

System.out.println(“===========开始显示单词数量============”);

for (Map.Entry<String, Integer> entry : counts.entrySet()) {

System.out.println(entry.getKey() + “: ” + entry.getValue());

}

System.out.println(“===========结束============”);

System.out.println(“Test2Bolt的资源释放”);

}

 

/**

* 声明数据格式

*/

public void declareOutputFields(OutputFieldsDeclarer arg0) {

 

}

}

 

 

 

App

import org.apache.storm.Config;

import org.apache.storm.LocalCluster;

import org.apache.storm.StormSubmitter;

import org.apache.storm.topology.TopologyBuilder;

import org.apache.storm.tuple.Fields;

 

public class App {

 

private static final String test_spout=”test_spout”;

private static final String test_bolt=”test_bolt”;

private static final String test2_bolt=”test2_bolt”;

 

public static void main(String[] args)  {

//定义一个拓扑

TopologyBuilder builder=new TopologyBuilder();

//设置一个Executeor(线程),默认一个

builder.setSpout(test_spout, new TestSpout(),1);

//shuffleGrouping:表示是随机分组

//设置一个Executeor(线程),和一个task

builder.setBolt(test_bolt, new TestBolt(),1).setNumTasks(1).shuffleGrouping(test_spout);

//fieldsGrouping:表示是按字段分组

//设置一个Executeor(线程),和一个task

builder.setBolt(test2_bolt, new Test2Bolt(),1).setNumTasks(1).fieldsGrouping(test_bolt, new Fields(“count”));

Config conf = new Config();

conf.put(“test”, “test”);

try{

//运行拓扑

if(args !=null&&args.length>0){ //有参数时,表示向集群提交作业,并把第一个参数当做topology名称

System.out.println(“运行远程模式”);

StormSubmitter.submitTopology(args[0], conf, builder.createTopology());

} else{//没有参数时,本地提交

//启动本地模式

System.out.println(“运行本地模式”);

LocalCluster cluster = new LocalCluster();

cluster.submitTopology(“Word-counts” ,conf,  builder.createTopology() );

Thread.sleep(20000);

//  //关闭本地集群

cluster.shutdown();

}

}catch (Exception e){

e.printStackTrace();

}

}

}

 

 

踩坑 The POM for ring-cors:ring-cors:jar:0.1.5 is missing

解决办法:

https://mvnrepository.com/artifact/ring-cors/ring-cors/0.1.12

直接把ring-cors-0.1.12.jar ring-cors-0.1.12.pom下载下来,放到maven本地库中。

 

有初步的Hello World感觉之后,可以再详细看看官方的资料,除了看别人翻译的,强烈建议对比着官方的看。官方有详细的文档清单,不要着急,一个一个慢慢看。

Basics of Storm

Layers on top of Storm

Trident

Trident is an alternative interface to Storm. It provides exactly-once processing, “transactional” datastore persistence, and a set of common stream analytics operations.

Streams API

Stream APIs is another alternative interface to Storm. It provides a typed API for expressing streaming computations and supports functional style operations.

NOTE: Streams API is an experimental feature, and further works might break backward compatibility. We’re also notifying it via annotating classes with marker interface @InterfaceStability.Unstable.

SQL

The Storm SQL integration allows users to run SQL queries over streaming data in Storm.

NOTE: Storm SQL is an experimental feature, so the internals of Storm SQL and supported features are subject to change. But small change will not affect the user experience. We will notify the user when breaking UX change is introduced.

Flux

Setup and Deploying

Intermediate

Debugging

Integration With External Systems, and Other Libraries

Container, Resource Management System Integration

Advanced

本文适合Storm小白看,大神吐槽或在1秒内关掉。也适合.net转java的软件工程师查看。建议先照流程跑起代码,再自己照着示例一行一行敲一遍,感受一下storm关键词,加深印象。不能带你深入浅出,只能浅入浅出。我也刚看,欢迎关注公众号,一直学习成长!

 

参考与引用:

http://storm.apache.org/releases/current/index.html

https://www.cnblogs.com/xuwujing/p/8584684.html

BaibianJS(百变JS) 快速注入JS 随意跨域

BaibianJS(百变JS) is a little and amazing mini chrome extension!It will help you to inject js and send cross domain xhr request by setting Access-Control-Allow-Origin.百变JS是一个小巧实用的Chrome插件,主要2个功能,1是能帮您任性注入JS,2是通过让您任性跨域!

为什么会有BaibianJS

为了注入JS和跨域,最先的方案都是用winform+webbrowser,玩得不要不要的,但是调试起来不方便!在实际使用过程中上,也用过Fiddler进入注入,但是替换JS要计算请求长度,用起来会比较烦。而最佳的注入节点又是jq 下方,所以Fiddler实现了想要的注入,但是却很烦。最后,想用chrome Extension主要在于,替换更加灵活,而且有chrome强大的console辅助调试。

BainbianJS正是在这种纠结的背景下孕育而生,虽然只是一个简单的JS,功能却非常实用。可以非常灵活的注入JS,对网页进行分析与数据提取。

How to use

Step 1

下载BainbianJS插件文件,background.js\manifest.json,真正起作用的就这两个,放到一个BianbianJS文件夹里。进入Chrome Extension插件界面,选加载安装,选择BianbianJS文件夹,安装成功。

如何进入Chrome Extension插件管理界面

在谷歌浏览器中输入 chrome://extensions/

Step 2

安装成功后,要依据自己的使用情况修改backgroud.js中的配置,配置要替换的JS,非常简单,就不废话了。修改JS记得重载加载插件哦!

与我互动

请关注我的公众号

约吗公众号

捐助

如果你觉得不错,想捐助献爱心,请扫码

微信赞赏码

 

代码已经开源到Github

https://github.com/Lancker/BaibianJS

图云书分享朋友圈操作指南 让朋友们方便查看到自己的闲置图书图单 互换互借图书

 

图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南

将自己的图书扫码录入后,如何分享到朋友圈,这个问题已经有不少小伙伴在问小编,下面就来讲一下,怎么操作流程。

文字简要版:通过图书云公众号菜单-我的-我的书目,点击任意一本书,在图书页,点【截二维码分享到朋友圈】,有没有Catch到?

下面,小编再带大家分享图解一下:

看图之前,小编分享一下常用共享图书吃鸡分享文案:

书非借不可读也 微信识别二维码即可借阅我的闲置图书!高端大气上档次的《Angular 5 高级编程》带回家!上微信公众号图书云,与身边的朋友同事好朋友共享图书,让闲置图书

图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南
图书云-分享朋友圈操作指南

更有价值!

换成通用的即:

书非借不可读也 微信识别二维码即可借阅我的闲置图书!高端大气上档次的《XXXXXXX》带回家!上微信公众号图书云,与身边的朋友同事好朋友共享图书,让闲置图书更有价值!

亲们可以发挥想像力,让朋友们以最快的速度将自己的闲置图书搬空~~

本期《图云书分享朋友圈操作指南》讲解完毕,有不明白的地方可以通过微信公众号【图书云】给留言~

ChinaHadoop会员博客集中营 源自Hadoop云计算群

ChinaHadoop.org 源自Hadoop云计算群(qq群号:300165122),是国内最早一批投身Hadoop大数据行业的小伙伴,目前近2000人!为更好的提供交流互动平台,特创办了ChinaHadoop.org,微信公众号ChinaHadoop,我们希望通过不断完善ChinaHadoop会员机制,促进会员之间的交流与互动,让知识更快的传播!

扫码关注ChinaHadoop公众号

ChinaHadoop微信公众号二维码
ChinaHadoop微信公众号二维码 博客集中营 源自Hadoop云计算群

会员权益:

所有Hadoop云计算群成员(qq群号:300165122)可免费获得顶级域名一个( .top \.work\.tech),免费获得不限量虚拟主机空间一个。会员权益享受请联系微信13439975582

交换友情链接 ChinaHadoop   https://ChinaHadoop.org

成员博客列表

如需在https://ChinaHadoop开通博客权限,请微信联系

ChinaHadoop维护负责人微信 13439975582

转自: https://chinahadoop.org/index.php/2018/07/03/chinahadoop-hello-world/

Hadoop大数据云计算工作机会-去哪儿网大数据

去哪儿网大数据中心在招人,主要是hadoop集群运维方向 有意者可以私聊地点:北京中关村待遇:30*16左右,关于去哪儿hadoop工作,请咨询(QQ群:300165122)群成员@白杨

Hadoop云计算QQ群:300165122,汇聚了业务近2000名从业人员,是国内较早一批投身Hadopp大数据工作的聚集地!本群主要进行业务技术交流,发布业内活动、工作机会!

Hadoop百度百科介绍:
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

 

小程序集成网易云通信群聊功能Demo发布

网易云通信官方小程序Demo:

https://github.com/netease-im/NIM_Web_Weapp_Demo

Fork完善版:

https://github.com/Lancker/NIM_Web_Weapp_Demo

主要调整思路:

消息通道初始化放到app.js,以实现从任意小程序页面进入,都能建立消息通道。有消息时,底部导航能实现显示小红点。

主要调整文件说明:

一、imeventhandler.js是重点调整对象,官方采用

var app = getApp()的方式获取小程序的全局上下文,导致在app.js中无法使用imeventhandler。目前调整成注入的方式获取,即app是从app.js直接传到imeventhandler。
代码示例:
在这里使用imeventhandler其实传递了一个技术概念,并不能体现业务领域,确切的说,此处是连接两个系统的bridge,采用eventhandler的形式建立连接。因此从业务领域的角度来讲,这里使用imeventhandler本身过于技术化。
对imeventhandler.js的调整更多的是将官方代码进行重构,以适应注入传递app.详细代码可Github上查看源代码。代码注释一定要仔细看一遍:
//var app = getApp()
//注:此类最大的调整是重构,代码基本上还是原来的代码。
//第一:代码结构调整
//最大的区别在于,原来app的获取方式无法在app.js中使用IMEventHandler
//调整之后,app的上下文是通过注入的方式传进去的
//第二:群聊支持
//群聊要解决的问题是:将群聊单聊抽象为一种聊天数据结构,怎么区分开?
//最佳的方式:可以传一个类型以便兼容更多的消息类型,其次使用is_group_msg区分
//不过,在实现的过程中,采用了一种特殊的方式,因为我们的帐号有一个特点,群聊的id很短,普通用户的id很长,所以什么字段也没有加。
//【警示】如果您比较懒,就得沿用这种古怪的方式,在生成云通信帐号的时候,特殊把accid生成20字符长度以上的字符串,否则,就没法区分群聊与单聊了。
//【ps:懒一点也可以的,生成云通信帐号的时候注意一下就好了】
//by 钟代麒 13439975582
二、app.js初始化信息通道
new IMEventHandler({
token: app.globalData.userInfo.im_token,
account: app.globalData.userInfo.im_accid,
app: app,
onSyncDone: function () {
app.globalData.isLogin = false
app.globalData.isImInit = true
wx.hideLoading()
//安全回调
typeof callBack == “function” && callBack(app.globalData)
}
})
对比官方的IMEventHandler能发现,此处多了app,onSyncDone, 传入app是为了解决出现globalData未定义的报错,onSyncDone示范了外置业务逻辑的方式。由于app全局上下文传到IMEventHandler中,因此没有特别讲究的话,在里面做些操作与在外面做些操作,也都可以。
三、消息重放recentchat
消息页面除非像官方一样登陆立即进入,否则无法显示出历史消息。因为消息页面在实际业务场景中,不会像官方demo那样子,登陆就直达。用户可能停留在首页看了很久,点入消息时,消息页面才开始订阅消息。因此之前的消息要显示出来的话,只能【消息重放】,将app.globalData中的消息重放一遍。代码实现主要依靠循环app.globalData.recentChatList,这里就不帖代码了,可以进入Github查看源代码
https://github.com/Lancker/NIM_Web_Weapp_Demo/blob/master/pages/recentchat/recentchat.js
四、区分群单与单聊
IMEventHandler中有注释说明,之所以单独拿出来说一下,是强调一下想省事的亲,如果不想改代码,那么服务端创建云通信帐号的时候,需要将用户的iccid设置为至少20个字符,以区分群id与用户iccid。
后记:关于群聊功能、信息通道初始化问题在官方demo的issue中聊过,官方意识到了这个问题。官方提供的demo虽然以【为了实现不同端同一账号体系,所以没有采用微信授权登录】为由提供了一个不恰当的小程序集成demo,导致一线的小伙伴看到一个与小程序集成度不高的demo,集成工作非常不顺利。那当然不能埋没官方提供demo的意义,至少目前集成工作是在官方demo基础上进行改造而来。有的时候写一段精致的代码,不如写一段能用的代码。

 

图书云小程序体验版发布 参与内测小伙伴可识别二维码进入小程序进行体验

图书云Tushuyun小程序体验二维码请关注公众号【图书云】获取

目前图书云内测中,获得内侧资格的小伙伴请识别二维码体验!有兴趣加入体验内测的小伙伴,可以发送【姓名+手机号】至微信13439975582,申请注明图书云内测。

图书云为共享图书平台,向附近的朋友借书、同事、群友、俱乐部好友借书!图书云让小伙伴们享受便捷的移动图书馆服务,每个人都能将自己的闲置图书分享给身边的小伙伴!同时,也能通过图书云发现附近自己喜欢看的图书!

二话不说,一睹为快!

一、轻爽的首页,六大主体功能直达!

首页还配有精心截屏的分享效果图,让每位会员直观的看到闲置书图分享效果!主打的扫码录入图书功能也在首页进行了重点突出!

二、扫码录入图书

分享闲置图书本身是一件情怀中的情怀!为了让情怀更简单,避免输入文字上传图片,特意准备了扫码录入功能。一字不录,轻松就把家里的闲置图书全部管理进来。亲朋好友想借书,直接分享书目。有小伙伴会问,什么时候分享书目,什么时候分享图书呢?这个问题问得好!分享环节会重点介绍。

三、分享,扫码录入完成后,即可分享

分享只需要轻轻点击【分享此书给好友】,即可完成分享!这个时候来解答一下,什么时候分享书目,什么时候分享图书!一般来讲,自己重点推荐给好友看的书,就直接分享图书!如果不知道好友看书倾向,就直接分享书目!

四、我的书目

刚才有提到,分享书目最省事了,不用废脑子猜好友想看什么,直接一波发过去,把这个纠结的选择问题交给小伙伴!

五、分享效果

还是很喜欢分享图书的效果,大大封面,很诱惑人!

本期图书云文字发布会差不多尾声了!有意参加体验的小伙伴记得关注公众号【图书云】,并回复手机号姓名+申请体验。

互联网告别裸奔时代 Let’s Encrypt 免费开启Https安全链接

现在开发小程序,https是标配!部署https成了刚需!通常https所需的数字证书都是需要花钱的,然则Let’s Encrypt 改变了这个局面!当然,还有其他的免费数字证书方案,比如阿里云签发的是Symantec 免费版 SSL、腾讯云签发的是TrustAsia TLS RSA CA(1年)。还有一个cloudflare也能提供,并且带免费cdn功能。

Let’s Encrypt最大的优势是支持泛域名,不太好的地方是每三个月要续签。不过配合自动化工具来讲,  Let’s Encrypt算是目前最值得推荐的https部署方式了。

 

阿里云签发的是Symantec 免费版 SSL,如果不想折腾,签发一个一年的,也算省钱。不过泛域名要额外收费。

​腾讯云签发的是TrustAsia TLS RSA CA(1年),如果不想折腾,这也是一个不错的选择!小编就乐呵呵的符发了好多TrustAsia证书,然后部署到公司的服务器上!到期之前还会有短信提醒,服务很贴心!

小小的总结一下,https将成为必备!爱折腾的,可以选择 Let’s Encrypt配合自动签发工具,很多面板也自带签发功能。想省事的,可以选择阿里、腾讯的免费证书签发!如果硬要从阿里腾讯中选择一个,就看自己爱好了!有自己公司服务器的,不想创建阿里帐号,就直接使用QQ或微信登陆腾讯云,免费签发证书。

转载请注明来自技术岛www.jishudao.com

原文链接 http://www.jishudao.com/2018/06/26/lets-encrypt-https/ ‎

2018 CCF-GAIR:CCF会员特别福利放送 全球人工智能和机器人大会

2018  6  29 日至 7  1 日 2018 CCF-GAIR(全球人工智能和机器人大会)将在深圳前海华侨城JW万豪酒店举行。100多位嘉宾,11大专场,3天干货,2500人来袭,正式拉开了全球「跨界」人工智能和机器人盛会的参会帷幕。

作为一个横跨学术界、科技界(传统产业界)、投资界的3界会议,CCF-GAIR大会准备了30多位顶尖学术大牛供诸位学术界人士交流学习的平台;70多位企业演讲嘉宾供诸位学术界人士了解产业界的先锋风貌;11个领域供诸位学术界人士了解每个领域学术界和产业界结合的前沿趋势。而CCF作为本次大会的主办单位,学术界力量中的典型代表组织,雷锋网这边给CCF会员准备了特别福利放送。

5000元。(每人赠一年CCF会员服务)
1210000元。(每人赠一年CCF会员服务)

附使用规则:点击CCF专享链接,直接拍下即可。使用时间截止628号晚

* 55K   https://gair.leiphone.com/gair/otherCart?s=5b2a363c30f37

* 1210K https://gair.leiphone.com/gair/otherCart?s=5b2a3675a4730

附注意事项:团购购票的参会者们,填写个人信息激活后,非CCF会员会获得一年CCF会员资格,已经是CCF会员的会延长一年CCF会员资格~

详情见附件。

CCF会员部

2018622

——————————————————————————-

另附大会议程:

学术依然是主旋律

人工智能行业目前还处于初级的发展阶段,有好的学术基础才能成就更高「实际应用」的上层建筑。CCF-GAIR 2018 第一天的主论坛主要还是会以学术为主,当然也有几位产业界的重磅嘉宾出席。主论坛中,依然群星闪耀。

中国科学院院士,清华大学教授张钹;
图灵奖得主,欧洲科学院院士、法国科学院院士、美国国家工程院院士Joseph Sifakis
德国汉堡科学院院士,德国汉堡大学信息雪科学系教授,国家千人计划专家张建伟;
ACM SIGKDD
现任主席,京东集团副总裁,ACM/IEEE Fellow裴健;
2018 
汽车工程学会(SAE International)主席,Velodyne LiDAR 高级副总裁兼CQOMircea Gradu
香港中文大学(深圳)副校长,加拿大皇家科学院院士,千人计划专家罗智泉;斯坦福大学教授,INFORMS Fellow Ben Van Roy
瑞士苏黎世大学人工智能实验室原主任,酷哇机器人首席科学家Rolf Pfeifer

英特尔高级首席工程师,大数据技术全球CTO戴金权;
云天励飞CEO陈宁;
美国犹他州立大学计算机系终身教授,计算机视觉与模式识别实验室主任,承恒达。

这样的嘉宾阵容搭配,主要是想给学术界、产业界与会者从多个维度了解更富前瞻性的技术与落地应用可能性相结合的趋势,让与会者能够在会议上从不同的角度听到自己所想知道的内容。除了主会场之外,大会也设置了几个更偏向学术讨论的专题会场:

仿生机器人

仿生机器人研究一直都是机器人领域最重点的研究对象,通过研究自然生物的神奇特征,将特征引用到机器人身上,能够使机器人有无限的可能性。在本专场,大会邀请了五位学术界的大咖:
Metin Sitti ,卡内基梅隆大学教授
戴振东,南京航空航天大学仿生结构与材料防护研究所所长,南航溧水仿生产业研究院院长
谢广明 ,北京大学工学院教授
熊蓉,浙江大学智能系统与控制研究所机器人实验室主任
邓新燕,美国普度大学机械工程学院副教授
这几位嘉宾会向我们展示世界顶尖的研究项目和技术成果。

计算机视觉

计算机视觉是目前人工智能行业最重点的研究对象之一,也是在可预见的未来,落地应用最广泛的技术之一。所以,为凸显重视,在630日,大会设置了一整天的计算机视觉专场,汇聚美国工程院院士,国际顶会主席,世界名校AI实验室主任,微软亚洲研究院、腾讯等企业的首席技术高管,为参会者分享最前沿的计算机视觉技术研究与商用成果。

本专场确认出席嘉宾有:
权龙,香港科技大学教授,ICCV 2011主席,IEEE Fellow
孙剑,旷视科技首席科学家、研究院院长
姚志强 ,云从科技联合创始人
任鹏,臻识科技联合创始人兼CEO
王孝宇,云天励飞首席科学家,前Snap研究院首席研究员
林达华 商汤科技联合创始人,港中文 – 商汤联合实验室主任
田捷,中国科学院分子影像重点实验室主任,IEEE Fellow
沈定刚,北卡罗莱纳大学教授,联影智能联席CEOMICCAI 2019主席,IEEE Fellow
张益肇,微软亚洲研究院副院长
王熙,飞利浦中国副总裁、首席技术官
邢磊,斯坦福大学医学物理系主任,美国科学院院士候选人
柴象飞,汇医慧影创始人兼CEO
赵地,中国科学院计算所副研究员

李明强,图普科技CEO
龚纯斌,睿视智觉CEO

计算机视觉是各大学术会议重点提及的对象,CCF-GAIR也相应邀请了以上部分学术界的科学家,但是同样也邀请了一些产业界的人士。在本专场,与会者会从学术的角度出发,看到复杂的学术研究如何成为实际应用并充分发挥它的价值。

自然语言处理

如果说计算机视觉是机器的眼睛,「自然语言处理」这门学科就是机器的耳朵和嘴巴。自然语言处理是人工智能研究领域中最为困难的问题之一,也是产业界需求十分旺盛的一门研究。在本专场中,大会将围绕多个 NLP 经典方向,邀请国内顶尖自然语言处理研究专家及产业界应用人士,分享他们的真知灼见。

本专场确认出席嘉宾:
刘挺,哈尔滨工业大学教授、哈工大人工智能研究院副院长(分会场主席)
孙茂松,清华大学计算机科学与技术系教授
赵军,中国科学院自动化研究所模式识别国家重点实验室,研究员
秦兵,哈尔滨工业大学教授,社会计算与信息检索中心副主任
张文斌,云孚科技创始人兼CEO
翁嘉颀,竹间智能 CTO
张瑞飞,神州泰岳AI大数据副总裁

产业同样不容忽视

人工智能行业从来都不是学术圈曲高和寡的自嗨,而是更需要立足产业,以应用落地为目的研究。在以上本身更偏学术气息的专场中,大会已经融合了产业界的元素,而在更多的领域中,产业界更是占据了重要地位。

机器人应用

相对于我们最开始提到的仿生机器人专场,机器人应用专场将为我们介绍机器人行业如何加速落地、如何更好的做到产学融合?在本专场,通过对特定场景下的机器人技术应用、落地实践等案例分享,激发与会者更多关于机器人应用的思考。

本专场确认嘉宾:
王田苗,北京航空航天大学教授,长江学者特聘教授
丁宁,香港中文大学(深圳)机器人与智能制造研究院副院长
谢阗地,大疆创新公共关系负责人
程昊天,高仙机器人创始人兼CEO
韩龙,灵喵机器人CEO
夏泽洋,中科院深圳先进技术研究院研究员
赵信宇,大道智创联合创始人兼CEO
林天麟,NXROBO创始人

智能驾驶

智能驾驶是近两年人工智能领域的大热门,雷锋网也一直在该领域深入观察。从某种意义上来说,智能驾驶汽车就是带着四个轮子的机器人。和机器人应用专场一样,CCF-GAIR 2018 智能驾驶专场,主要针对未来汽车的定义、自动驾驶的落地、人工智能对城市交通与物流网路的改变等多个问题进行讨论。与会者将会在此专场听到学术界、产业界对人工智能、智能驾驶技术的思考与实践。和机器视觉专场一样,大会同样为智能驾驶专场设置了一天的会议。本专场确认出席嘉宾有:

王飞跃,中国科学院自动化研究所复杂系统管理与控制国家重点实验室主任、中国自动化学会副理事长兼秘书长
綦平 ,采埃孚(中国)投资有限公司工程技术中心总监
Boaz Sacks 
Mobileye中国区总监
王凯,伟世通首席架构师
杨光,耀途资本合伙人
谭黎敏, 西井科技 CEO
单记章,黑芝麻智能科技CEO
李星宇 ,地平线市场拓展和战略规划副总裁
许炜 ,零跑汽车副总裁
陈振武,深圳市城市交通规划设计研究中心 交通信息与模型院副院长
佟显乔,Roadstar.ai 创始人兼CEO
余宁 ,安波福电气分配系统亚太中心产品工程总监 、应用工程总监
邱纯鑫 ,速腾聚创CEO
何弢 ,酷哇机器人创始人兼CEO
刘万千,PlusAI CEO
朱岩,蔚来资本合伙人
马喆人 ,G7总裁
肖健雄,AutoX CEO
刘振宇,诗航智能 CTO
张力,景驰运营副总裁
蒋齐, 盼达用车科技商务总监

AI+

由智能驾驶就可以看出产业界对于人工智能需求。2018年,人工智能终于迎来市场指数级增长的商业化浪潮,在人工智能市场化急速前进的节点,CCF-GAIR 2018 为此专门设置了「AI+专场」,在本专场邀请了技术落地能力强、产品商业化进程快的行业代表性企业,为业内人士深入分享极具价值的人工智能产品与商业创新方法论。

本专场确认出席嘉宾有:

胡侠 ,美国德州农工大学数据挖掘实验室主任、计算机学院终身教职系列助理教授
崔炜,乂学教育首席科学家
曹友盛,中兴力维首席技术官
高峰 ,清华大学未来实验室博士后,博云视觉联合创始人

金融科技

人工智能的的发展,给产业界带来的变化并不止于新硬件的诞生,也给一些传统行业带来了变革,比如金融。金融科技的快速发展为金融行业带来了新的机遇,同时也带来了新的挑战,在技术变革和期望升温的背景下,对金融科技和支付创新方式的分析和探讨显得尤为重要。论坛将邀请政府机构及协会、国内外知名银行、监管机构支付平台、消费金融公司等金融和支付领域大咖和精英,共同探讨国内外金融科技领域、消费金融、供应链金融、区块链、大数据、反欺诈以及移动支付等应用领域的最新突破。

本专场确认出席的嘉宾:
叶强,哈工大管理学院院长,长江学者特聘教授
Ivan Martinovic
,牛津大学计算机科学系教授,深圳市和信中欧金融科技研究院特聘专家
吴小川,众安科技复旦大学区块链联合实验室副主任
陈邦道,深圳市和信中欧金融科技研究院执行院长
张羽,融慧金科COO
季元,百融金服CRO
李纪为,香侬科技创始人/CEO

智能安全

安全一直是科技行业的重要命题,无论是AI、机器人、IoT、区块链+……所有智能相关领域都需要相应的安全保障,那么人工智能行业的安全话题集中在哪?业界未来发展方是什么?与会者均可在CCF-GAIR 2018 智能安全专场找到答案。

本专场去人出席嘉宾:
任奎,浙江大学网络空间安全研究中心主任,国家千人计划特聘教授,IEEE Fellow
聂科峰,百度AI安全技术总监
张玉东,阿里巴巴集团安全部资深总监
胡珀,腾讯安全平台部总监,腾讯安全平台部Blade Team负责人
苏志刚 ,京东安全硅谷研究中心负责人
王滨,海康威视网络安全部总监,网络与信息安全实验室主任

大会新的亮点

在聚焦产业界的同时,雷锋网一直在密切关注人工智能领域渗透的新方向,亦或那些崛起的新势力。所以,今年大会特别设置了此前从来没有涉及过的两个新专场。

AI 芯片

AI 芯片在近两年愈发火热,无论是 IntelNvidia 、高通这样的半导体龙头;还是苹果、Google、三星这样的科技巨擘;亦或近几年异军突起的芯片独角兽企业,都纷纷跻身其中,谱写了人工智能时代通用芯片和定制化芯片并存,创业公司潜伏的局面。本专场邀请了几位芯片巨头和定制化芯片独角兽与大家一同探讨最后整个芯片的生态将如何定格。

本专场确认出席嘉宾:
魏少军,清华大学微电子所所长
陈玉荣 ,英特尔首席研究员、英特尔中国研究院认知计算实验室主任
张永谦,地平线智能解决方案与芯片事业部总经理
何永,深脑链创始人兼CEO

谭章熹,OURS创始人兼CEO
周斌,NovuMind中国区总裁
牛昕宇,鲲云科技CEO

IoT

作为很早就提出的概念,IoT在今年又重新火热了起来,从各大巨头的布局来看,IoT慢慢向AIoT靠拢。那么国内IoT整体发展现状如何?IoT行业中云服务商、物联网解决方案企业、终端厂商如何有效协作?从「万物互联」到「万物智联」的发展过程中,还需要面临哪些机遇和挑战?CCF-GAIR IoT专场中,将汇聚国内顶尖物联网平台、物联网专有云服务厂商、物联网技术提供商以及IoT上下游关键模组、终端硬件等企业参会,与会者将分享当下IoT从云端的全方位发展趋势和成果。

本专场确认出席嘉宾:
赵峰,海尔CTO兼副总裁,前微软亚洲研究院常务副院长
崔宝秋 ,小米人工智能与云平台副总裁
张陈,科大讯飞消费者事业群智能硬件事业部总经理
龙一民,阿里巴巴IoT事业部高级技术专家
张发恩,创新奇智CTO
刘振宇,致趣科技CEO

以上就是CCF GAIR 2018 全部议程预告,更多精彩内容,请锁定629-71日,深圳前海华侨城JW万豪酒店, CCF-GAIR 2018 全球人工智能与机器人峰会见。

关注更多业内活动信息,请关注公众号【Yuema约吗】

 

网易云通信小程序集成实践+群组功能完善

在微信里放一个IM,被指定放网易云通信。这次实践是一场非常虐心的体验,虽然集成网易云通信有官方资料参考,也有官方的demo参考,但是踩的坑也不少。

一、不完全是技术问题

消息漫游需要联系商务开通

二、官方小程序demo更加一个独立的app

demo 过于独立,没有考虑到在小程序中集成互通。找到官方demo的时候很开心,用的时候还是很不开心的。不过,出于谋生考虑,硬着头皮在官方的demo上做了调整。

引用自己Github上的说明:

  • – 1.没有与小程序帐号集成。 这个本人在实际项目中已经解决。
    – 2.消息通道初始化问题。 由于官方没有与微信帐号集成,这个初始化问题也是存在的。正确的初始化位置,应当在app.js中完成。目前项目上已经改造好了,除了将初始化移到app.js,还写了一个【消息回放功能】,因为用户进入小程序后,是到首页,消息tab并没有点击,离线的消息与未点消息tab之前的时间窗口消息都需要给消息tab页。app.js中要订阅消息,有消息时要将消息tab打上小红点。
    – 3.群聊功能的缺失.已解决。
    解决思路:直接在官方的代码基础上,改造一下消息订阅,消息发送、消息显示。优雅的处理方式:在原官方的代码基础上,增加一个msgType标明是哪种消息,然后在后续消息显示、发送逻辑上区别对待。
    消息订阅:官方直接将群组消息team消息忽略掉了,因此,需要写一个逻辑分支,p2p消息处理沿用原逻辑,team消息走新逻辑。
    消息发送:发送代码很好改造,基本上将类型从p2p修改成team
    消息显示:复制一份单聊chating代码取名为groupchating,在recentchat会话列表上做逻辑分支,群聊定向到groupchating.群聊头像需要人肉构建。后记:单聊、群聊本身可以抽象为一种实现,但是目前官方的demo明显倾向于单聊,群聊无法直接使用。

Fork了官方的demo打算把本次项目代码清洗一下,放到github上,也算是为后来人提供一份网易云通信小程序集成的参考。可以关注github工程地址,回头会更新!

https://github.com/Lancker/NIM_Web_Weapp_Demo

欢迎加微信交流 13439975582

转载请注明来自 技术岛 http://www.jishudao.com 附具体链接

网易云通信小程序集成实践+群组功能完善

与小伙伴相约