这是一个悲伤的程序员爱情故事



        程序员的爱情,少了点浪漫,多了点bug。
        小马,科班出身,毕业后顺利进入了一家软件开发公司,可能天生就是干程序员的料,沉默寡言,但是遇到程序难题乐于钻研,誓死不休,人称拼命三郎,同事都觉得这个称呼太长,后来便逐步简化为“三郎”了。

        这家伙有一个怪癖,每次解决一个难题,总会对着电脑哈哈傻笑,把身边的人吓得一咯噔。刚开始大家都以为他脑子有问题,久而久之也就习惯了。

       幸福来得太突然,有一天,公司来了一位女程序员,乍一看,没有一点程序猿的样子,长发飘飘,一副大边框的眼睛里藏着一双美丽的大眼睛,连走路的风都带着阵阵清香。

        她被安排在了三郎身边,微笑着向三郎问好,随意但气质不减。但是就是这个简单的动作,让三郎不知所措,连刚才需要解决的bug都抛到九霄云外了。



        俗话说,近水楼台先得月,美女是刚毕业的小妹,工作中难免有许多问题需要问三郎,三郎也总是有求必应,很快帮她解决。美女进步很快,为了答谢三郎,决定请三郎吃个饭。这个不争气的家伙,有点怕,叫上了同事。

       饭桌上,几乎是美女一个在说话,或者说是美女在审问他,她问一句,他答一句。但三郎也是个男人,也有男人都有的想法,但却没有男子汉应该有的勇气,一直红着脸低头吃饭。最后忍不住想看她一眼,却差点噎着了。

      生活又在平淡中过了半年,一个晚上,他依然一个人在办公室里加班。突然她给她打了个电话,她说她喝多了,让他去接她。

      他见到她的时候,她是撑到了极限。如果他晚点到,她可能就睡地上了。

       她刚问完她的地址,她就醉倒了。她吃力的扶着她上了出租车,这也许是他第一次能如此近距离的和美女接触,能如此近距离的味着长发的味道。他费了好大的劲终于把她弄到了屋里,他自己也累得倒在了她边上。房间很静,他能听到她的心跳,能感受到她呼吸的空气撞到他脸上……。









他感觉自己心跳的频率比处理线上支付系统的Bug跳得还要快,他想尝试靠近她一点。就在这时,她吐了出来,弄得两个人一身污垢。

他给自己和她简单擦了一下,然后他拿出了电脑继续写代码。本来三天的工作量,他一个晚上就写完了,效率高得连他自己都不敢相信。

第二天她醒后,连连说谢谢。她说她和男友分手了,心情不好,然后自己跑出去喝酒了,要不是他还真不知道会发生什么事。

这以后,他工作总是心不在焉了。终于有一天,公司上了一个新项目,做一个通用敏捷开发框架,项目命名为“learun”(现在已经成为公司最赚钱的项目了),三郎和美女一起调到了这个项目,美女毕竟经验不丰富,在一个OA组件的构建上遇到了难题,要三郎帮他解决。他连续三天加班到凌晨,顺利帮她完成,而且在代码的注释里,表达了对她的喜欢,这是三郎能想到的最好的方式了。可是天不遂人愿,正好那天美女有事,直接便把这个模块提交了,上线后便没有改过。
        多少天,他一直希望那些地方再出一个bug,让她重新再看到她写给她的心里话。不过,他等了几个月,发现她和之前没什么区别,后来三郎就离职了,50%的工资涨幅都没能留住他。

       接下来的几年里,三郎又换了几家公司。

       今年,他到一家大公司面式的时候,最后的技术总监问他干技术这么多年,最让他揪心的事是什么。

      把他的这个故事和面试官说了。

     最后面试官问他这女孩子到现在有没有联系过你。

     他摇了摇头。

     面试官说了一句,你被录用了,这么多年,那女孩子都没有联系你,说明你写的代码很稳定。
继续阅读 »


        程序员的爱情,少了点浪漫,多了点bug。
        小马,科班出身,毕业后顺利进入了一家软件开发公司,可能天生就是干程序员的料,沉默寡言,但是遇到程序难题乐于钻研,誓死不休,人称拼命三郎,同事都觉得这个称呼太长,后来便逐步简化为“三郎”了。

        这家伙有一个怪癖,每次解决一个难题,总会对着电脑哈哈傻笑,把身边的人吓得一咯噔。刚开始大家都以为他脑子有问题,久而久之也就习惯了。

       幸福来得太突然,有一天,公司来了一位女程序员,乍一看,没有一点程序猿的样子,长发飘飘,一副大边框的眼睛里藏着一双美丽的大眼睛,连走路的风都带着阵阵清香。

        她被安排在了三郎身边,微笑着向三郎问好,随意但气质不减。但是就是这个简单的动作,让三郎不知所措,连刚才需要解决的bug都抛到九霄云外了。



        俗话说,近水楼台先得月,美女是刚毕业的小妹,工作中难免有许多问题需要问三郎,三郎也总是有求必应,很快帮她解决。美女进步很快,为了答谢三郎,决定请三郎吃个饭。这个不争气的家伙,有点怕,叫上了同事。

       饭桌上,几乎是美女一个在说话,或者说是美女在审问他,她问一句,他答一句。但三郎也是个男人,也有男人都有的想法,但却没有男子汉应该有的勇气,一直红着脸低头吃饭。最后忍不住想看她一眼,却差点噎着了。

      生活又在平淡中过了半年,一个晚上,他依然一个人在办公室里加班。突然她给她打了个电话,她说她喝多了,让他去接她。

      他见到她的时候,她是撑到了极限。如果他晚点到,她可能就睡地上了。

       她刚问完她的地址,她就醉倒了。她吃力的扶着她上了出租车,这也许是他第一次能如此近距离的和美女接触,能如此近距离的味着长发的味道。他费了好大的劲终于把她弄到了屋里,他自己也累得倒在了她边上。房间很静,他能听到她的心跳,能感受到她呼吸的空气撞到他脸上……。









他感觉自己心跳的频率比处理线上支付系统的Bug跳得还要快,他想尝试靠近她一点。就在这时,她吐了出来,弄得两个人一身污垢。

他给自己和她简单擦了一下,然后他拿出了电脑继续写代码。本来三天的工作量,他一个晚上就写完了,效率高得连他自己都不敢相信。

第二天她醒后,连连说谢谢。她说她和男友分手了,心情不好,然后自己跑出去喝酒了,要不是他还真不知道会发生什么事。

这以后,他工作总是心不在焉了。终于有一天,公司上了一个新项目,做一个通用敏捷开发框架,项目命名为“learun”(现在已经成为公司最赚钱的项目了),三郎和美女一起调到了这个项目,美女毕竟经验不丰富,在一个OA组件的构建上遇到了难题,要三郎帮他解决。他连续三天加班到凌晨,顺利帮她完成,而且在代码的注释里,表达了对她的喜欢,这是三郎能想到的最好的方式了。可是天不遂人愿,正好那天美女有事,直接便把这个模块提交了,上线后便没有改过。
        多少天,他一直希望那些地方再出一个bug,让她重新再看到她写给她的心里话。不过,他等了几个月,发现她和之前没什么区别,后来三郎就离职了,50%的工资涨幅都没能留住他。

       接下来的几年里,三郎又换了几家公司。

       今年,他到一家大公司面式的时候,最后的技术总监问他干技术这么多年,最让他揪心的事是什么。

      把他的这个故事和面试官说了。

     最后面试官问他这女孩子到现在有没有联系过你。

     他摇了摇头。

     面试官说了一句,你被录用了,这么多年,那女孩子都没有联系你,说明你写的代码很稳定。 收起阅读 »

NIUDAY 11.23 北京站 |环信CEO刘俊彦现场讲述人工智能赋能客户互动之现状与未来

2018 年是见证「奇迹」的一年。AI 从多年的热门话题中开始走下神坛,逐渐深入到了各个行业,加速经济结构优化及行业智慧化升级,AI 已不再是难以企及的神话而是可触摸的美好未来。 政策支持加上资本推动,无论是从新兴行业还是传统行业都出现了人工智能方面的布局者和佼佼者,智慧教育、移动社交、智能语音、智慧客服、传统媒体等行业都在突破技术上和流程上的难点和困惑。



11 月 23 日,一场由七牛云主办主题为「AI 产业技术的渗透与融合」的 NIUDAY 小牛汇共享日将在北京举行。会上,将邀请众多行业内知名企业及技术专家,针对当前 AI 在技术上以及行业中遇到的一些壁垒问题,进行深入探讨和分享。

智慧教育、移动未来,体验指尖上的 AI

在此次活动中,除行业专家的视点剖析之外,对于 AI 与行业的渗透与融合度是理论大于实践亦或是理论与实践已完美结合,已经应用的行业代表案例有哪些?对于这些问题,大家可以在此次活动中得以解惑。

微信图片_20181115162453.jpg

刘俊彦


手机电商、手机软件系统的快速更迭让在线客服、移动客服有了更大的发展空间,成了市场中的一片蓝海,究竟现状如何、客户体验的真实反馈是什么?环信 CEO 刘俊彦先生带来的《人工智能赋能客户互动之现状与未来》让你更贴近生活,更能体会 AI 的无处不在。

微信图片_20181115162531.jpg

谢华亮



科技发展教育先行,技术与教育的结合又将碰撞出怎样的火花,会上,将有好未来 SEG 智慧教育事业部技术总监谢华亮带来主题为《AI 在教育行业中的应用》的精彩演讲。

微信图片_20181115162544.jpg

佘超杰



移动互联网的发展已影响到我们身边的每一个人,游戏、娱乐、社交等手机平台的火爆更是带来了巨大的信息流量。但如何应对这些突然爆发的信息流,如何让产品与技术更好地去结合以吸引更多的受众人群,成为人们关注的话题。以作为专注于移动互联网社交的知名企业 Blued 为例,实践与技术并重的技术专家佘超杰将分享给我们《AI 在 Blued 上的应用》。
                
连线行业专家,洞悉专业视点

人工智能技术在飞速发展过程中得到了国家以及政府的极大关注与大力支持,中国人工智能产业发展联盟作为国家发展改革委、科学技术部、工业和信息化部、中央网信办四部委共同指导下的人工智能产业权威联盟机构,也将加入到此次 NIUDAY 小牛汇共享日活动中来。

微信图片_20181115162600.jpg


孙明俊



中国信息通信研究院人工智能部副主任,中国人工智能产业发展联盟总体组组长、数据中心联盟秘书长孙明俊女士将出席本次活动,并将从行业专家的角度带来主题为《人工智能产业发展水平分析》的演讲,向大家解析产业发展水平、分享行业利好政策等。

战略签约中国网 传统与创新的再突破

微信图片_20181115162615.jpg


杨新华



值得一提的是,本次 NIUDAY 小牛汇共享日活动上七牛云将与中国互联网新闻中心举行战略合作签约仪式。届时,中国互联网新闻中心·中国网副总编辑杨新华先生将带来《AI 如何讲好中国故事》的演讲,介绍七牛云在未来媒体平台构建中发挥的作用,以及正处于变革中的媒体行业对 AI 的思考。

当然作为本次 NIUDAY 小牛汇活动的主办方,七牛云也准备了满满的干货带给大家。七牛云技术总监陈超《数据智能时代的智慧工厂实践》、七牛云人工智能实验室资深产品经理杨叶青《一站式审核助力无忧运营》带你体会七牛云两大重要产品线的技术与发展。

更多大咖嘉宾,请往下看~ 

5bed2dcd27fe6.jpg

关于环信机器人:

环信机器人已经在中通快递、新东方、天津农商行、宜家、环球捕手等头部企业的“双十一”中发挥着中流砥柱的作用,机器人可以帮助解决80%以上的常见问题,在售后环节能替代超90%的人工,轻松实现7*24无间断客户服务,AI从此让我们的客服人员告别苦逼,云淡风轻,笑对各种节假日促销、狂欢节。

目前,环信机器人已经广泛服务于包括保险、证券、银行、教育、物流、商旅、电商、汽车等行业的数万客户,日机器人会话超千万条。
活动报名地址:http://www.huodongxing.com/event/2464773427600
继续阅读 »

2018 年是见证「奇迹」的一年。AI 从多年的热门话题中开始走下神坛,逐渐深入到了各个行业,加速经济结构优化及行业智慧化升级,AI 已不再是难以企及的神话而是可触摸的美好未来。 政策支持加上资本推动,无论是从新兴行业还是传统行业都出现了人工智能方面的布局者和佼佼者,智慧教育、移动社交、智能语音、智慧客服、传统媒体等行业都在突破技术上和流程上的难点和困惑。



11 月 23 日,一场由七牛云主办主题为「AI 产业技术的渗透与融合」的 NIUDAY 小牛汇共享日将在北京举行。会上,将邀请众多行业内知名企业及技术专家,针对当前 AI 在技术上以及行业中遇到的一些壁垒问题,进行深入探讨和分享。

智慧教育、移动未来,体验指尖上的 AI

在此次活动中,除行业专家的视点剖析之外,对于 AI 与行业的渗透与融合度是理论大于实践亦或是理论与实践已完美结合,已经应用的行业代表案例有哪些?对于这些问题,大家可以在此次活动中得以解惑。

微信图片_20181115162453.jpg

刘俊彦


手机电商、手机软件系统的快速更迭让在线客服、移动客服有了更大的发展空间,成了市场中的一片蓝海,究竟现状如何、客户体验的真实反馈是什么?环信 CEO 刘俊彦先生带来的《人工智能赋能客户互动之现状与未来》让你更贴近生活,更能体会 AI 的无处不在。

微信图片_20181115162531.jpg

谢华亮



科技发展教育先行,技术与教育的结合又将碰撞出怎样的火花,会上,将有好未来 SEG 智慧教育事业部技术总监谢华亮带来主题为《AI 在教育行业中的应用》的精彩演讲。

微信图片_20181115162544.jpg

佘超杰



移动互联网的发展已影响到我们身边的每一个人,游戏、娱乐、社交等手机平台的火爆更是带来了巨大的信息流量。但如何应对这些突然爆发的信息流,如何让产品与技术更好地去结合以吸引更多的受众人群,成为人们关注的话题。以作为专注于移动互联网社交的知名企业 Blued 为例,实践与技术并重的技术专家佘超杰将分享给我们《AI 在 Blued 上的应用》。
                
连线行业专家,洞悉专业视点

人工智能技术在飞速发展过程中得到了国家以及政府的极大关注与大力支持,中国人工智能产业发展联盟作为国家发展改革委、科学技术部、工业和信息化部、中央网信办四部委共同指导下的人工智能产业权威联盟机构,也将加入到此次 NIUDAY 小牛汇共享日活动中来。

微信图片_20181115162600.jpg


孙明俊



中国信息通信研究院人工智能部副主任,中国人工智能产业发展联盟总体组组长、数据中心联盟秘书长孙明俊女士将出席本次活动,并将从行业专家的角度带来主题为《人工智能产业发展水平分析》的演讲,向大家解析产业发展水平、分享行业利好政策等。

战略签约中国网 传统与创新的再突破

微信图片_20181115162615.jpg


杨新华



值得一提的是,本次 NIUDAY 小牛汇共享日活动上七牛云将与中国互联网新闻中心举行战略合作签约仪式。届时,中国互联网新闻中心·中国网副总编辑杨新华先生将带来《AI 如何讲好中国故事》的演讲,介绍七牛云在未来媒体平台构建中发挥的作用,以及正处于变革中的媒体行业对 AI 的思考。

当然作为本次 NIUDAY 小牛汇活动的主办方,七牛云也准备了满满的干货带给大家。七牛云技术总监陈超《数据智能时代的智慧工厂实践》、七牛云人工智能实验室资深产品经理杨叶青《一站式审核助力无忧运营》带你体会七牛云两大重要产品线的技术与发展。

更多大咖嘉宾,请往下看~ 

5bed2dcd27fe6.jpg

关于环信机器人:

环信机器人已经在中通快递、新东方、天津农商行、宜家、环球捕手等头部企业的“双十一”中发挥着中流砥柱的作用,机器人可以帮助解决80%以上的常见问题,在售后环节能替代超90%的人工,轻松实现7*24无间断客户服务,AI从此让我们的客服人员告别苦逼,云淡风轻,笑对各种节假日促销、狂欢节。

目前,环信机器人已经广泛服务于包括保险、证券、银行、教育、物流、商旅、电商、汽车等行业的数万客户,日机器人会话超千万条。
活动报名地址:http://www.huodongxing.com/event/2464773427600 收起阅读 »

成功与失败取决于工作流



        记得有一家国内知名的国企,在2013年时整合了各个地区的集团分公司,销售公司都搬到一块儿地儿进行集中生产办公。按理说这是大好事,能集中精力专注产品质量,抓好各个研发、生产、销售环节。但由于各个分公司协调不到位,就导致了工作流程环节脱序、扯皮的事件发生。因此,国企的管理者就引进了一套工作流系统,以期能通过这个系统改进和优化整个集团公司的工作流程,让工作流程混乱的现象不再发生。想法虽好,但事与愿违。工作流系统让部分管理者头痛,审批处理环节丢失,导致生产、销售。节出了部分的问题,以致于企业的发展缓慢,原本打算5年上市计划也无法实现。
        工作流是企业成败的幕后推手?这个选择疑问句并不能简单的用“是”与“否”来回答,因为不同的企业、不同的软件时刻都会成为这个问题的变量,左右着即将揭晓的答案。

         有的管理软件(这里以OA为例)对工作流并不是很重视,流程偏传统,样式刻板;有的甚至是写死的,系统中存在什么样的工作流你就得用什么样的,完全没有照顾到企业间的差异性。这类的OA管理软件就显得不是很友好,而它给企业日常工作带来的麻烦还在远不止这些。这是管理软件自身的劣势给出的答案:否。当然也有正面的回答,譬如微宏协同办公管理系统就十分的专注工作流,各个环节的配置都由专人进行实施和维护,将建立强大的工作流引擎作为一项策略。而在目前看来,这个追求是正确的。
         而对企业来说,这个答案是取决于它对工作流的重视程度以及后期的选型。我们知道,对症下药绝对是每个企业都该遵循的规律,而工作流作为管理过程中不能缺少的重要成分,没有理由不被重视。企业要是能抓到这个痛点,想必不难回答上面提出的问题。

         第一,工作在一定程度确保了所执行活动的安全性。因为流程中的权限设置使得该项任务的执行过程只能由已经设定的负责人参与,其他不相关的人并不能进入。

         第二,领导随时可以查看工作进度,加强管控。每一个处理过程都会在系统中留下痕迹,也会显示不同的进度。领导正是通过这一丝丝的蛛丝马迹来对公司整体情况进行把控。

        第三,取代人工的传递方式,节约时间,提高工作效率。员工在完成自己负责的那一阶段时,工作任务便通过预定的流程自动传递到下一位负责人那里去,既保证了正确性,又减少了不必要的时间的浪费。
         第四,工作流也将企业的管理制度电子化,带来企业效益。工作流以及OA系统本身为企业建立的是一整套的制度,从人事到财务再到具体的每项任务如何执行,都是有其规则。作为领导者也能在企业内部发生变动时,轻轻松松的去更改这些设定好的内容以适应企业发展现状。

         第五、工作流系统的售后维护决定了企业能否与人事变动、业务流程、销售流程、采购流程、生产流程等变动相适应,以保证整个系统的正常运行。及时高效的处理工作流系统中的环节问题,就可以保障系统的正常运行。也就不会让管理层有所抱怨和无所适从。

        总而之言,必须让工作流系统能随时保障企业的生产、销售需求,工作流的好坏是由企业管理者决定的,充分维护和更新好工作流系统才能让企业更好更顺利的发展。因此,成败不由工作流决定,而是由企业决策者的“心”决定。态度决定成败,工作流也一样。
官方:http://www.learun.cn/

免费体验地址:http://www.learun.cn/Home/VerificationForm
继续阅读 »


        记得有一家国内知名的国企,在2013年时整合了各个地区的集团分公司,销售公司都搬到一块儿地儿进行集中生产办公。按理说这是大好事,能集中精力专注产品质量,抓好各个研发、生产、销售环节。但由于各个分公司协调不到位,就导致了工作流程环节脱序、扯皮的事件发生。因此,国企的管理者就引进了一套工作流系统,以期能通过这个系统改进和优化整个集团公司的工作流程,让工作流程混乱的现象不再发生。想法虽好,但事与愿违。工作流系统让部分管理者头痛,审批处理环节丢失,导致生产、销售。节出了部分的问题,以致于企业的发展缓慢,原本打算5年上市计划也无法实现。
        工作流是企业成败的幕后推手?这个选择疑问句并不能简单的用“是”与“否”来回答,因为不同的企业、不同的软件时刻都会成为这个问题的变量,左右着即将揭晓的答案。

         有的管理软件(这里以OA为例)对工作流并不是很重视,流程偏传统,样式刻板;有的甚至是写死的,系统中存在什么样的工作流你就得用什么样的,完全没有照顾到企业间的差异性。这类的OA管理软件就显得不是很友好,而它给企业日常工作带来的麻烦还在远不止这些。这是管理软件自身的劣势给出的答案:否。当然也有正面的回答,譬如微宏协同办公管理系统就十分的专注工作流,各个环节的配置都由专人进行实施和维护,将建立强大的工作流引擎作为一项策略。而在目前看来,这个追求是正确的。
         而对企业来说,这个答案是取决于它对工作流的重视程度以及后期的选型。我们知道,对症下药绝对是每个企业都该遵循的规律,而工作流作为管理过程中不能缺少的重要成分,没有理由不被重视。企业要是能抓到这个痛点,想必不难回答上面提出的问题。

         第一,工作在一定程度确保了所执行活动的安全性。因为流程中的权限设置使得该项任务的执行过程只能由已经设定的负责人参与,其他不相关的人并不能进入。

         第二,领导随时可以查看工作进度,加强管控。每一个处理过程都会在系统中留下痕迹,也会显示不同的进度。领导正是通过这一丝丝的蛛丝马迹来对公司整体情况进行把控。

        第三,取代人工的传递方式,节约时间,提高工作效率。员工在完成自己负责的那一阶段时,工作任务便通过预定的流程自动传递到下一位负责人那里去,既保证了正确性,又减少了不必要的时间的浪费。
         第四,工作流也将企业的管理制度电子化,带来企业效益。工作流以及OA系统本身为企业建立的是一整套的制度,从人事到财务再到具体的每项任务如何执行,都是有其规则。作为领导者也能在企业内部发生变动时,轻轻松松的去更改这些设定好的内容以适应企业发展现状。

         第五、工作流系统的售后维护决定了企业能否与人事变动、业务流程、销售流程、采购流程、生产流程等变动相适应,以保证整个系统的正常运行。及时高效的处理工作流系统中的环节问题,就可以保障系统的正常运行。也就不会让管理层有所抱怨和无所适从。

        总而之言,必须让工作流系统能随时保障企业的生产、销售需求,工作流的好坏是由企业管理者决定的,充分维护和更新好工作流系统才能让企业更好更顺利的发展。因此,成败不由工作流决定,而是由企业决策者的“心”决定。态度决定成败,工作流也一样。
官方:http://www.learun.cn/

免费体验地址:http://www.learun.cn/Home/VerificationForm 收起阅读 »

力软敏捷开发框架工作流实现技术



         工作流管理联盟(WFMC)提出了一个工作流参考模型,约定了工作流系统的体系结构、应用接口及特性,主要目的是为了实现工作流技术的标准化和开放性。下面简要介绍系统中的各个部分,并对参考模型中的五类接口进行描述。

  1. 工作流管理系统中的各种数据

        工作流控制数据(Workflow Control Data)工作流执行服务/工作流机通过内部的工作流控制数据来辨别单个过程或活动实例的状态。这些数据由工作流执行服务/工作流机控制。用户、应用程序或其它的工作流机/工作流执行服务不能对其进行直接读写操作,它们可以通过向工作流执行服务/工作流机发送消息来获得工作流控制数据的内容。

        工作流相关数据(Workflow Relevant Data)工作流管理系统通过工作流相关数据来确定过程实例状态转换的条件,并选择下一个执行的活动。这些数据可以被工作流应用程序访问并修改。因此,工作流管理软件应该在活动实例之间传递工作流相关数据。

         工作流应用数据(Workflow Application Data)这种数据指那些由应用程序操作的数据。它们是针对应用程序的,工作流管理系统无法对它们进行访问。  

2. 工作流模型和工作流建模工具 

         工作流模型过程模型包含了工作流执行服务运行该过程的所有必需的信息,包括它启动和结束的条件、组成的活动、活动间导航的准则、参与其中的用户、需要激活的应用程序的指针、需要用到的工作流相关数据的定义等等。    

         在工作流的建模期间需要参考组织/角色模型来获得有关组织结构和组织内角色的信息。过程定义指定完成某项活动的组织实体或角色,而不是定义具体人员。工作流执行服务负责在工作流运行环境内将组织实体或角色映射为特定的人员。    

        工作流建模工具它主要用于分析、建模、描述并记录经营过程。它应输出一个能被工作流机动态解释的过程定义。不同的工作流产品其建模工具输出的格式是不同的,参考模型中的接口1不仅使工作流的定义阶段和运行阶段分离,使用户可以分别选择建模工具和执行产品,还可以使不同的工作流产品合作为一个过程定义的执行提供运行服务环境。    

         工作流管理联盟针对工作流建模做了两方面的工作:  (1) 建立了一个元模型(process meta model):它用于描述一个过程模型内各个对象、它们之间的关系及它们的属性,有利于多个工作流产品之间交换模型信息。  (2) 定义了一套可以在工作流管理系统之间及在管理系统与建模工具之间交互过程模型定义的API接口。  图1为工作流管理联盟定义的过程元模型。  

3. 工作流执行服务

        工作流执行服务由一个或多个工作流机组成(在分布环境下,由多个工作流机组成),提供了过程实例执行的运行环境,主要完成以下功能:  (1) 解释流程定义,生成过程实例,并管理其实施过程。  (2) 依据过程定义和工作流相关数据为过程实例的导航提供进入和退出的条件、并行或串行执行活动的信息、用户信息或所需激活的应用程序的信息等等。  (3) 与外部资源交互完成各项活动。 (4) 维护工作流控制数据和工作流相关数据(这些数据包括不同过程和活动实例的内部状态信息、工作流机用于协调和恢复的各种检查数据和恢复/重起信息等),并向用户传递必要的相关数据。    
      在分布式的工作流执行服务中,多个工作流机协调工作,推进工作流机实例的执行。每一个工作流机控制过程执行的一部分,并使用相关的资源和应用工具。这种执行服务需要共同的命名和管理范围,便于过程定义和用户/应用名称一致。分布式的工作流系统采用特定的协议来同步各工作流机,并传递相应的控制信息。在一个同构的工作流执行服务中这些协议是因厂家而异的。当选用不同的工作流系统产品时,各工作流机之间需要一个标准来进行转换。它应包括以下几个方面的内容:  (1) 一个共同的命名机制;  (2) 支持共同的过程定义对象和属性;  (3) 能够传递相应的工作流相关数据,并控制过程实例的生成;  (4) 能够在异构的工作流机间传递过程、子过程及活动;  (5) 支持共同的管理职能。

 4. 工作流机 

         工作流机是一个为工作流实例的执行提供运行环境的软件服务或“引擎”。它主要提供以下功能:  (1) 对过程定义进行解释;  (2) 控制过程实例的生成、激活、挂起、终止等;  (3) 控制活动实例间的转换,包括串行或并行操作、工作流相关数据的解释等;  (4) 支持用户操作的界面;  (5) 维护工作流控制数据和工作流相关数据,在应用或用户间传递工作流相关数据;  (6) 提供一用于激活外部应用程序和访问工作流相关数据的界面;  (7) 提供控制、管理和监督的功能。    

        工作流机的一个重要功能就是控制实例和活动实例的状态转换。工作流管理联盟的参考模型中为过程实例的运行状态和活动实例的状态进行了定义,并给出了状态转换的条件。图2和图3分别描述了过程实例和活动实例各个状态之间的转换。  过程实例包括以下几种运行状态:  初始(inactived):一个过程实例已经生成,但该过程实例并没有满足开始执行的条件;  准备运行(running):该过程实例已经开始执行,但是还不满足开始执行第一个活动并生成一个任务项的条件;       
        运行中(active):一个或多个活动已经开始执行(也就是已经生成一个工作项并分配给了合适的活动实例)  挂起(suspended):该过程实例正在运行,但处于静止状态,除非有一个“重启”的命令使该过程实例回到准备运行状态,否则所有的活动都不会执行;  结束(completed):该过程实例满足结束的条件,工作流管理系统将执行过程实例结束后的操作(如统计),并删除该过程实例;  终止(terminated):该过程实例在正常结束前被迫终止,工作流管理系统将执行补救措施,并删除该过程实例。    
        活动的运行状态包括:  未开始(inactive):该活动实例已经生成但还没有被激活(例如活动开始条件没有满足);  运行中(active):该活动实例已经被激活了;  挂起(suspended):该活动实例处于静止状态;  结束(completed):该活动已经执行完毕,工作流管理系统将进行活动结束后的导航工作,激活下一个符合启动条件的活动实例。

 5. 客户端应用 

        这种方式适合于需要人员参与的活动。这种情况下,工作流机通过任务项列表管理器来进行控制。工作流管理联盟提供了四种可能的通过任务项列表来实现工作流客户工作流机之间的通讯方式,如图4所示。其中一种支持集中式的结构,另外三种适合分布情况下的工作流系统。  (1) 基于主机方式的模型(Hust Based Model):这种方式适合于集中的情况。此时,客户端应用程序、任务项列表管理器、任务项列表和工作流机都列在中央的主服务器上,用户通过模拟一个终端用户来获得任务项列表;  (2) 共享的文件库模型(Shared Filestore Model):在这种情形下,客户应用程序和任务列表管理器位于用户的工作站上,而工作流位于中央服务器上。任务项列表位于一个客户应用和工作流机都能够达到的共享的文件系统中。  (3) 电子邮件模型(Electronic Mail Model):这里,客户应用和任务项列表管理器位于用户的工作站上,工作流机位于中央主机上。所有的通讯都使用电子邮件。此时,任务项列表一般位于客户端;  (4) 过程调用或信息传递模型(Procedure Callor Message Passing Model):这时,客户应用程序和任务项列表管理器位于用户的工作站上,任务项列表和工作流机位于服务器端。用户通过RPC或者其它的消息传递机制来获得任务项列表。     
 6. 由工作流机直接调用的应用程序 

         这种情况适合于不需要人员参与的活动。在简单的情况下,工作流机通过过程模型中定义的活动的信息、应用程序的类型和需要的数据来激活应用程序。被激活的应用程序可以和工作流机位于一台计算机上,可以位于相同的运行平台上,也可以位于网络可以到达的不同平台上。模型定义提供了有关应用程序的类型、地址等充分信息,便于工作流机激活该程序并执行相应的动作。  

 7. 工作流执行服务之间的互操作性

        工作流联盟的目标之一就是规定一个标准使得不同厂商提供的工作流产品能够协调工作,整个系统能够无缝地在各个产品之间传递任务项。工作流管理联盟在互操作性上的工作主要集中在提供了一系列互操作的情景,从简单的任务传递到传输整个工作流过程模型和工作流参考数据。尽管有可能考虑那些很复杂的情形(如不同厂商提供的工作流机共同协作实现工作流执行服务,这在目前还不可能实现,因为它要求所有的工作流机都能够解释过程模型,共享一套工作流控制数据,并在异构的工作流机环境下共享过程实例状态。)但就目前来说,比较切合实际的目标是在不同的工作流执行服务间传递过程的部分内容,支持其实例的运行。  

  8. 系统管理和监控工具

        该工具能够对工作流在整个组织内的流动状况进行监控,并提供一系列的管理功能,如有关安全性、对过程的控制和授权操作等方面的管理。主要功能包括以下几个方面:  (1) 建立、设置和优化组成工作流管理系统的各个软件;  (2) 对过程模型进行实例化;  (3) 将过程模型中的角色实例化;  (4) 将运行中的过程实例、活动实例和数据分发到各个工作流机中;  (5) 启动、挂起、恢复和终止过程实例;  (6) 管理正在执行的过程实例并对正常或异常退出的过程的历史数据进行统计和分析。  

 9. 工作流参考模型中的五类接口  

         工作流联盟给出了五类接口:  (1) 接口1:工作流服务和工作流建模工具;  (2) 接口2:工作流服务和客户应用之间的接口,这是最主要的接口规范,它约定所有客户方应用和工作流服务之间的功能访问方式;  (3) 接口3:工作流机和直接调用的应用程序之间的接口;  (4) 接口4:工作流管理系统之间的互操作接口;  (5) 接口5:工作流服务和工作流管理工具之间的接口。    其中,接口1为在不同物理或电子介质之间传递过程定义的信息提供了交互的形式和API调用;接口2定义了通信建立、工作流定义操作等功能;接口3激活应用程序的API函数应覆盖的几个方面的功能;接口4完成工作流执行服务之间需要提供大量的WAPI来实现互操作,无论是在两个工作流执行服务之间的直接调用还是通过网关函数;接口5主要实现对工作流的管理和监视。
官网:www.learun.cn

免费演示地址:http://www.learun.cn/Home/VerificationForm
继续阅读 »


         工作流管理联盟(WFMC)提出了一个工作流参考模型,约定了工作流系统的体系结构、应用接口及特性,主要目的是为了实现工作流技术的标准化和开放性。下面简要介绍系统中的各个部分,并对参考模型中的五类接口进行描述。

  1. 工作流管理系统中的各种数据

        工作流控制数据(Workflow Control Data)工作流执行服务/工作流机通过内部的工作流控制数据来辨别单个过程或活动实例的状态。这些数据由工作流执行服务/工作流机控制。用户、应用程序或其它的工作流机/工作流执行服务不能对其进行直接读写操作,它们可以通过向工作流执行服务/工作流机发送消息来获得工作流控制数据的内容。

        工作流相关数据(Workflow Relevant Data)工作流管理系统通过工作流相关数据来确定过程实例状态转换的条件,并选择下一个执行的活动。这些数据可以被工作流应用程序访问并修改。因此,工作流管理软件应该在活动实例之间传递工作流相关数据。

         工作流应用数据(Workflow Application Data)这种数据指那些由应用程序操作的数据。它们是针对应用程序的,工作流管理系统无法对它们进行访问。  

2. 工作流模型和工作流建模工具 

         工作流模型过程模型包含了工作流执行服务运行该过程的所有必需的信息,包括它启动和结束的条件、组成的活动、活动间导航的准则、参与其中的用户、需要激活的应用程序的指针、需要用到的工作流相关数据的定义等等。    

         在工作流的建模期间需要参考组织/角色模型来获得有关组织结构和组织内角色的信息。过程定义指定完成某项活动的组织实体或角色,而不是定义具体人员。工作流执行服务负责在工作流运行环境内将组织实体或角色映射为特定的人员。    

        工作流建模工具它主要用于分析、建模、描述并记录经营过程。它应输出一个能被工作流机动态解释的过程定义。不同的工作流产品其建模工具输出的格式是不同的,参考模型中的接口1不仅使工作流的定义阶段和运行阶段分离,使用户可以分别选择建模工具和执行产品,还可以使不同的工作流产品合作为一个过程定义的执行提供运行服务环境。    

         工作流管理联盟针对工作流建模做了两方面的工作:  (1) 建立了一个元模型(process meta model):它用于描述一个过程模型内各个对象、它们之间的关系及它们的属性,有利于多个工作流产品之间交换模型信息。  (2) 定义了一套可以在工作流管理系统之间及在管理系统与建模工具之间交互过程模型定义的API接口。  图1为工作流管理联盟定义的过程元模型。  

3. 工作流执行服务

        工作流执行服务由一个或多个工作流机组成(在分布环境下,由多个工作流机组成),提供了过程实例执行的运行环境,主要完成以下功能:  (1) 解释流程定义,生成过程实例,并管理其实施过程。  (2) 依据过程定义和工作流相关数据为过程实例的导航提供进入和退出的条件、并行或串行执行活动的信息、用户信息或所需激活的应用程序的信息等等。  (3) 与外部资源交互完成各项活动。 (4) 维护工作流控制数据和工作流相关数据(这些数据包括不同过程和活动实例的内部状态信息、工作流机用于协调和恢复的各种检查数据和恢复/重起信息等),并向用户传递必要的相关数据。    
      在分布式的工作流执行服务中,多个工作流机协调工作,推进工作流机实例的执行。每一个工作流机控制过程执行的一部分,并使用相关的资源和应用工具。这种执行服务需要共同的命名和管理范围,便于过程定义和用户/应用名称一致。分布式的工作流系统采用特定的协议来同步各工作流机,并传递相应的控制信息。在一个同构的工作流执行服务中这些协议是因厂家而异的。当选用不同的工作流系统产品时,各工作流机之间需要一个标准来进行转换。它应包括以下几个方面的内容:  (1) 一个共同的命名机制;  (2) 支持共同的过程定义对象和属性;  (3) 能够传递相应的工作流相关数据,并控制过程实例的生成;  (4) 能够在异构的工作流机间传递过程、子过程及活动;  (5) 支持共同的管理职能。

 4. 工作流机 

         工作流机是一个为工作流实例的执行提供运行环境的软件服务或“引擎”。它主要提供以下功能:  (1) 对过程定义进行解释;  (2) 控制过程实例的生成、激活、挂起、终止等;  (3) 控制活动实例间的转换,包括串行或并行操作、工作流相关数据的解释等;  (4) 支持用户操作的界面;  (5) 维护工作流控制数据和工作流相关数据,在应用或用户间传递工作流相关数据;  (6) 提供一用于激活外部应用程序和访问工作流相关数据的界面;  (7) 提供控制、管理和监督的功能。    

        工作流机的一个重要功能就是控制实例和活动实例的状态转换。工作流管理联盟的参考模型中为过程实例的运行状态和活动实例的状态进行了定义,并给出了状态转换的条件。图2和图3分别描述了过程实例和活动实例各个状态之间的转换。  过程实例包括以下几种运行状态:  初始(inactived):一个过程实例已经生成,但该过程实例并没有满足开始执行的条件;  准备运行(running):该过程实例已经开始执行,但是还不满足开始执行第一个活动并生成一个任务项的条件;       
        运行中(active):一个或多个活动已经开始执行(也就是已经生成一个工作项并分配给了合适的活动实例)  挂起(suspended):该过程实例正在运行,但处于静止状态,除非有一个“重启”的命令使该过程实例回到准备运行状态,否则所有的活动都不会执行;  结束(completed):该过程实例满足结束的条件,工作流管理系统将执行过程实例结束后的操作(如统计),并删除该过程实例;  终止(terminated):该过程实例在正常结束前被迫终止,工作流管理系统将执行补救措施,并删除该过程实例。    
        活动的运行状态包括:  未开始(inactive):该活动实例已经生成但还没有被激活(例如活动开始条件没有满足);  运行中(active):该活动实例已经被激活了;  挂起(suspended):该活动实例处于静止状态;  结束(completed):该活动已经执行完毕,工作流管理系统将进行活动结束后的导航工作,激活下一个符合启动条件的活动实例。

 5. 客户端应用 

        这种方式适合于需要人员参与的活动。这种情况下,工作流机通过任务项列表管理器来进行控制。工作流管理联盟提供了四种可能的通过任务项列表来实现工作流客户工作流机之间的通讯方式,如图4所示。其中一种支持集中式的结构,另外三种适合分布情况下的工作流系统。  (1) 基于主机方式的模型(Hust Based Model):这种方式适合于集中的情况。此时,客户端应用程序、任务项列表管理器、任务项列表和工作流机都列在中央的主服务器上,用户通过模拟一个终端用户来获得任务项列表;  (2) 共享的文件库模型(Shared Filestore Model):在这种情形下,客户应用程序和任务列表管理器位于用户的工作站上,而工作流位于中央服务器上。任务项列表位于一个客户应用和工作流机都能够达到的共享的文件系统中。  (3) 电子邮件模型(Electronic Mail Model):这里,客户应用和任务项列表管理器位于用户的工作站上,工作流机位于中央主机上。所有的通讯都使用电子邮件。此时,任务项列表一般位于客户端;  (4) 过程调用或信息传递模型(Procedure Callor Message Passing Model):这时,客户应用程序和任务项列表管理器位于用户的工作站上,任务项列表和工作流机位于服务器端。用户通过RPC或者其它的消息传递机制来获得任务项列表。     
 6. 由工作流机直接调用的应用程序 

         这种情况适合于不需要人员参与的活动。在简单的情况下,工作流机通过过程模型中定义的活动的信息、应用程序的类型和需要的数据来激活应用程序。被激活的应用程序可以和工作流机位于一台计算机上,可以位于相同的运行平台上,也可以位于网络可以到达的不同平台上。模型定义提供了有关应用程序的类型、地址等充分信息,便于工作流机激活该程序并执行相应的动作。  

 7. 工作流执行服务之间的互操作性

        工作流联盟的目标之一就是规定一个标准使得不同厂商提供的工作流产品能够协调工作,整个系统能够无缝地在各个产品之间传递任务项。工作流管理联盟在互操作性上的工作主要集中在提供了一系列互操作的情景,从简单的任务传递到传输整个工作流过程模型和工作流参考数据。尽管有可能考虑那些很复杂的情形(如不同厂商提供的工作流机共同协作实现工作流执行服务,这在目前还不可能实现,因为它要求所有的工作流机都能够解释过程模型,共享一套工作流控制数据,并在异构的工作流机环境下共享过程实例状态。)但就目前来说,比较切合实际的目标是在不同的工作流执行服务间传递过程的部分内容,支持其实例的运行。  

  8. 系统管理和监控工具

        该工具能够对工作流在整个组织内的流动状况进行监控,并提供一系列的管理功能,如有关安全性、对过程的控制和授权操作等方面的管理。主要功能包括以下几个方面:  (1) 建立、设置和优化组成工作流管理系统的各个软件;  (2) 对过程模型进行实例化;  (3) 将过程模型中的角色实例化;  (4) 将运行中的过程实例、活动实例和数据分发到各个工作流机中;  (5) 启动、挂起、恢复和终止过程实例;  (6) 管理正在执行的过程实例并对正常或异常退出的过程的历史数据进行统计和分析。  

 9. 工作流参考模型中的五类接口  

         工作流联盟给出了五类接口:  (1) 接口1:工作流服务和工作流建模工具;  (2) 接口2:工作流服务和客户应用之间的接口,这是最主要的接口规范,它约定所有客户方应用和工作流服务之间的功能访问方式;  (3) 接口3:工作流机和直接调用的应用程序之间的接口;  (4) 接口4:工作流管理系统之间的互操作接口;  (5) 接口5:工作流服务和工作流管理工具之间的接口。    其中,接口1为在不同物理或电子介质之间传递过程定义的信息提供了交互的形式和API调用;接口2定义了通信建立、工作流定义操作等功能;接口3激活应用程序的API函数应覆盖的几个方面的功能;接口4完成工作流执行服务之间需要提供大量的WAPI来实现互操作,无论是在两个工作流执行服务之间的直接调用还是通过网关函数;接口5主要实现对工作流的管理和监视。
官网:www.learun.cn

免费演示地址:http://www.learun.cn/Home/VerificationForm 收起阅读 »

一个程序员的六年反思,我为什么选择快速开发



经常会写点东西,写久了就不知道该说些什么了,看着各位技术大V在社区中侃侃而谈,菜鸟新手孜孜不倦,甚是感慨,回想一下自己走过的路,诸多记忆涌上心头,今天闲来无事,一起聊上一聊。

今天为止,混到CTO已经两年了,参与过大大小小的项目也有几十个了,苦逼的是现在依然需要带小弟,毕竟要保持团队年轻化嘛,其实对他们也只有一个要求,那就是把学到的东西写下来(有点老传统了哈)。这可能和我个人的习惯有关系,在过去几年我基本上都在和客户做项目,每遇到一个问题基本都会在博客上分享,但是与开始的个苦心吸引眼球不同,现在写来也就是图个乐趣,提醒自己还有那么多的领域我没有领悟,以此鞭策自己,不要再走弯路。
说起开发,大学毕业之后就开始做了,最初也无所谓兴趣,只是亲朋好友都说这一行收入比较不错,便投入进去。八月份,也就是在毕业一个月后,我便开始了我的第一份工作,是一家外企,做移动互联网产品,薪资不差,可惜不到两周我就跑了,现在想想真是一点儿也不理智,因为离开四个月后,这家外企就从上海撤了,如果当时留下来,至少能得到两个月的遣散补偿,真是悔恨啊。

可能你也在想,离职是不是我不行,在公司待不下去了呢?不是!因为在我进入公司的这两周,同部门就有三个人离职,整个公司估计就更多了,离职这种事情是能传染的,尤其是对一个刚毕业的菜鸟来说。因为一旦一个公司有大量离职,心里会想这个公司一定有哪里出了问题吧,对我的未来一定不是好事,于是头脑一热,便拂袖而去。

后来,我去了一个当时正在大规模拓展的外卖平台,名字就不说了,前三个月基本上就在学学学,接下来几个月便是写写写,这时候用的基本上全是java,由于实操机会比较少,经历了坎坎坷坷,总算完成了人生第一个小项目,如果当时你有用的话,APP上那些“低价超值”,“简餐快餐”、“省钱神器”、“限时抢购”等项目,基本上我都有参与。而做这些项目的本质,是要解放那些运营部的靓妹帅哥,让他们有更多的时间去约会,现在想想,还挺有意义。
后来,鬼使神差,我不知被谁蛊惑的,想着了解技术前沿,又去读了一年计算机学院,那时候真的是计算机技术发展的黄金几年,我直到在学院毕业,还不知道我学的东西根本没有,除了一张结业证书。但是,就是我觉的没有的计算机学院,导师却在毕业时给了我一个方向,关于未来软件技术发展的认知,并把我推荐到了如今的公司。

这是我第一次接触到快速开发,光概念性的东西我就花了好几个月的时间去了解。Web端的东西,关于.net的一切我又重新复习了一遍,C#语言,说实话我以前没怎么用过,而公司的框架却是以此为基础,不过计算机语言都是想通的,经过几个月的磨合倒也上手很快。

在我最初的认知里,软件项目通常都是定制化开发,没个几十万很难做成,但是当我接触到快速开发这一块的时候,我的想法发生了巨变,就像现在,OA可能都要进入4.0时代了,最开始的模式遭到淘汰也就理所应当了。
快速开发,其实针对的是融合框架,在框架中部署一些列的通用组件,做到灵活配置,其实这就要求这个框架的兼容性好、功能完善、可拓展性较为优良,至少能做到大部分企业的通用需求和部分个性化需求,这样可以比较好的解决企业和软件公司相互扯皮的矛盾。企业用较小的成本拿到框架,根据框架进行自主便捷化配置,软件公司只需提供简单的技术指导便可以了,双方省心。

以learun快速开发框架为例,初代版本便包含众多实用组件,而这些组件又能单独开发多套企业应用系统,例如OA/ERP/CRM/移动APP/电商后台等,真正做到了一套多用:







当然了,这里使用的只是1.0的功能表,实际上,learun如今已经发展到7.0,功能要比这里的丰富很多(因为涉及行业竞争就不放出来了)。

这些,基本上都是根据行业客户的案例一点一点整理出来的,开会开会在开会,讨论讨论再讨论而定。而且在后续的实际开发中,也深刻感觉到到个人能力和团队合作对软件质量的重要性。

如果你问我,一个合格的程序员应该包含哪些能力:

编程能力、团队沟通、写文档、追求完美、知识储备。

而你要问要做一个行业创新框架需要哪些能力:

不怕死!
官网:www.learun.cn

免费入口:http://www.learun.cn/Home/VerificationForm
继续阅读 »


经常会写点东西,写久了就不知道该说些什么了,看着各位技术大V在社区中侃侃而谈,菜鸟新手孜孜不倦,甚是感慨,回想一下自己走过的路,诸多记忆涌上心头,今天闲来无事,一起聊上一聊。

今天为止,混到CTO已经两年了,参与过大大小小的项目也有几十个了,苦逼的是现在依然需要带小弟,毕竟要保持团队年轻化嘛,其实对他们也只有一个要求,那就是把学到的东西写下来(有点老传统了哈)。这可能和我个人的习惯有关系,在过去几年我基本上都在和客户做项目,每遇到一个问题基本都会在博客上分享,但是与开始的个苦心吸引眼球不同,现在写来也就是图个乐趣,提醒自己还有那么多的领域我没有领悟,以此鞭策自己,不要再走弯路。
说起开发,大学毕业之后就开始做了,最初也无所谓兴趣,只是亲朋好友都说这一行收入比较不错,便投入进去。八月份,也就是在毕业一个月后,我便开始了我的第一份工作,是一家外企,做移动互联网产品,薪资不差,可惜不到两周我就跑了,现在想想真是一点儿也不理智,因为离开四个月后,这家外企就从上海撤了,如果当时留下来,至少能得到两个月的遣散补偿,真是悔恨啊。

可能你也在想,离职是不是我不行,在公司待不下去了呢?不是!因为在我进入公司的这两周,同部门就有三个人离职,整个公司估计就更多了,离职这种事情是能传染的,尤其是对一个刚毕业的菜鸟来说。因为一旦一个公司有大量离职,心里会想这个公司一定有哪里出了问题吧,对我的未来一定不是好事,于是头脑一热,便拂袖而去。

后来,我去了一个当时正在大规模拓展的外卖平台,名字就不说了,前三个月基本上就在学学学,接下来几个月便是写写写,这时候用的基本上全是java,由于实操机会比较少,经历了坎坎坷坷,总算完成了人生第一个小项目,如果当时你有用的话,APP上那些“低价超值”,“简餐快餐”、“省钱神器”、“限时抢购”等项目,基本上我都有参与。而做这些项目的本质,是要解放那些运营部的靓妹帅哥,让他们有更多的时间去约会,现在想想,还挺有意义。
后来,鬼使神差,我不知被谁蛊惑的,想着了解技术前沿,又去读了一年计算机学院,那时候真的是计算机技术发展的黄金几年,我直到在学院毕业,还不知道我学的东西根本没有,除了一张结业证书。但是,就是我觉的没有的计算机学院,导师却在毕业时给了我一个方向,关于未来软件技术发展的认知,并把我推荐到了如今的公司。

这是我第一次接触到快速开发,光概念性的东西我就花了好几个月的时间去了解。Web端的东西,关于.net的一切我又重新复习了一遍,C#语言,说实话我以前没怎么用过,而公司的框架却是以此为基础,不过计算机语言都是想通的,经过几个月的磨合倒也上手很快。

在我最初的认知里,软件项目通常都是定制化开发,没个几十万很难做成,但是当我接触到快速开发这一块的时候,我的想法发生了巨变,就像现在,OA可能都要进入4.0时代了,最开始的模式遭到淘汰也就理所应当了。
快速开发,其实针对的是融合框架,在框架中部署一些列的通用组件,做到灵活配置,其实这就要求这个框架的兼容性好、功能完善、可拓展性较为优良,至少能做到大部分企业的通用需求和部分个性化需求,这样可以比较好的解决企业和软件公司相互扯皮的矛盾。企业用较小的成本拿到框架,根据框架进行自主便捷化配置,软件公司只需提供简单的技术指导便可以了,双方省心。

以learun快速开发框架为例,初代版本便包含众多实用组件,而这些组件又能单独开发多套企业应用系统,例如OA/ERP/CRM/移动APP/电商后台等,真正做到了一套多用:







当然了,这里使用的只是1.0的功能表,实际上,learun如今已经发展到7.0,功能要比这里的丰富很多(因为涉及行业竞争就不放出来了)。

这些,基本上都是根据行业客户的案例一点一点整理出来的,开会开会在开会,讨论讨论再讨论而定。而且在后续的实际开发中,也深刻感觉到到个人能力和团队合作对软件质量的重要性。

如果你问我,一个合格的程序员应该包含哪些能力:

编程能力、团队沟通、写文档、追求完美、知识储备。

而你要问要做一个行业创新框架需要哪些能力:

不怕死!
官网:www.learun.cn

免费入口:http://www.learun.cn/Home/VerificationForm 收起阅读 »

iOS 环信视频语音 细节处理(挂断电话逻辑处理)

对方挂断语言,可能要发送相应的消息(对方拒接   挂断等)在结束实时通话的回调中
- (void)callDidEnd:(EMCallSession *)aSession
reason:(EMCallEndReason)aReason
error:(EMError *)aError 
根据EMCallEndReason这个枚举看通话结束的原因,去发送NSNotification通知
然后在聊天页面EaseMessageViewController.m中去监听这个通知,然后在通知方法中去插入消息,可参考以下代码:
NSString *insertStr = @"对方已挂断";
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:insertStr];
NSString *from = [[EMClient sharedClient] currentUsername];
//生成Message
EMMessage *message = [[EMMessage alloc] initWithConversationID:self.conversation.conversationId from:from to:self.conversation.conversationId body:body ext:nil];
message.chatType = EMChatTypeChat;// 设置为单聊消息
message.status = EMMessageStatusSucceed;
message.direction = callEnder;
[self addMessageToDataSource:message progress:nil];
[self.conversation insertMessage:message error:nil];
继续阅读 »
对方挂断语言,可能要发送相应的消息(对方拒接   挂断等)在结束实时通话的回调中
- (void)callDidEnd:(EMCallSession *)aSession
reason:(EMCallEndReason)aReason
error:(EMError *)aError 
根据EMCallEndReason这个枚举看通话结束的原因,去发送NSNotification通知
然后在聊天页面EaseMessageViewController.m中去监听这个通知,然后在通知方法中去插入消息,可参考以下代码:
NSString *insertStr = @"对方已挂断";
EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:insertStr];
NSString *from = [[EMClient sharedClient] currentUsername];
//生成Message
EMMessage *message = [[EMMessage alloc] initWithConversationID:self.conversation.conversationId from:from to:self.conversation.conversationId body:body ext:nil];
message.chatType = EMChatTypeChat;// 设置为单聊消息
message.status = EMMessageStatusSucceed;
message.direction = callEnder;
[self addMessageToDataSource:message progress:nil];
[self.conversation insertMessage:message error:nil]; 收起阅读 »

2018 freeCodeConf 全国联动报名通道已正式开启

筹划已久的 freeCodeConf 终于和大家见面啦!React、Vue、Java、小程序开发、敏捷开发、区块链技术、开源项目维护......主题丰富,大咖云集,12个城市社区同步呈现。不管你是努力学习、热衷分享的开发者,还是技术粉、编程爱好者,都将收获满满!

freeCodeConf 是 freeCodeCamp 中国举办的每年一度大型联动技术大会,旨在联合 freeCodeCamp 各城市本地开发者社区,促进高度垂直、高度人才集中、高度明星企业集结的互联网与软件行业技术交流。

第一届 freeCodeConf 将于2018年11月10日在上海、天津、深圳、成都、西安、武汉、北京、杭州、广州、重庆、郑州、济南全国12个城市同期举办,诚邀广大开发者共享技术盛宴。
 大会亮点
 
一.12城同期举办
 
12个城市社区同期举办,促进本地开发者技术分享与交流

二.与大咖面对面交流
 
与数十位前端、区块链等领域的优秀开发者和技术负责人面对面交流
 
三.优质企业现场招聘
 
部分城市设置现场招聘环节,为企业和开发者搭建沟通桥梁
 
四.丰厚的礼品
 
华为云体验券、IBM开发者纪念品、技术书籍、个性胸章......各种精美礼品等你来拿!
 
演讲嘉宾
 


1.jpg

报名通道
 
2018 freeCodeConf 成都站

 
【时间】2018.11.10  9:00-18:00
【地点】天府大道北段 966 号天府国际金融中心 4 号楼 1 层 1 号会议厅
 
演讲主题(成都站)
 
《How does freeCodeCamp help people learn to code for free and become developers》|《给 Node.js 插上 C++ 的翅膀》|《开源项目维护》|《敏捷中国史》|《高效 H5 动画开发方式》|《高可用React服务端渲染》|《打造 Vue 组件库》
 
报名通道(成都站)
成都.png

扫描二维码报名
 
2018 freeCodeConf 天津站
 
 
【时间】2018 年11月10日(周六) 13:00-18:00
【地点】天津市大学软件学院天软微吧2楼(地铁三号线大学城站)
 
演讲主题(天津站)
 
《前端工程师的格局》| 《多租户Saas平台web实践》|  《Vue.js中的DOM和性能优化》| 《工程能力原子化的探索与实践》| 《数据可视化实践》| 《前端代码尺寸精简》
 
报名通道(天津站)

天津.png

(扫描二维码报名)
2018 freeCodeConf 深圳站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】广东深圳深南大道10000号腾讯大厦
 
演讲主题(深圳站)
 
《Tencent Server Web 详解》| 《CSS GRIDS 终极探秘》|  《React Native 开发》等
 
报名通道(深圳站)


深圳.png

(扫描二维码报名)
2018 freeCodeConf 杭州站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】杭州市文一西路1818-2号中国人工智能小镇
 
演讲主题(杭州站)
 
《如何基于graphene开发智能合约》|《基于 VUE SSR 的前后端同构解决方案》等
 
报名通道(杭州站)


杭州.png

2018 freeCodeConf 上海站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】上海市静安区愚园路546号3号楼1层
 
演讲主题(上海站)

 
《从“零”做起的系统架构演进之路》| 《公有链开发技术分享:从共识算法到性能优化》等
 
报名通道(上海站)

上海.png

2018 freeCodeConf 北京站
 
【时间】2018.11.10 下午 13:30 - 17:00
【地点】北京市朝阳区建国路108号海航实业大厦8、9层(氪空间-国贸海航实业大厦社区)
 
演讲主题(北京站)
 
《小程序对战功能实现及浅析排行榜》|《小程序的开发生态变迁》等
 
报名通道(北京站)
北京.png

(扫描二维码报名)
2018 freeCodeConf 西安站
 
【时间】2018 年11月10日(周六) 14:00-18:00
【地点】西安市高新区沣惠南路36号橡树街区B-10101哈希屋HashHouse咖啡厅
 
演讲主题(西安站)
 
《Android 热修复背后的那些 Java 进阶知识》| 《Java 与未来发展职业规划》|  《如何阅读源代码》| 《可视化的遗留系统微服务改造》
 
报名通道(西安站)
 

西安.png

(扫描二维码报名)
2018 freeCodeConf 广州站
 

【时间】2018.11.10 下午 13:30 - 17:00
【地点】广州市番禺区大学城青蓝街22号国家数字家庭应用示范产业基地B区(大学城北C出口)
 
报名通道(广州站)

广州.png

(扫描二维码报名)
2018 freeCodeConf 济南站
 

【时间】2018 年11月10日(周六) 13:00-17:30
【地点】济南市高新区鑫盛大厦2号楼801
 
报名通道(济南站)

济南.png

2018 freeCodeConf 郑州站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】上海市静安区愚园路546号3号楼1层
 
演讲主题(郑州站)
 
《互联网下半场产品核心竞争力--UED》| 《运营那点事儿》| 《如何成为一名合格的“接盘侠”》| 《VUE实践框架志iview》| 《大象圈到底是个什么圈?》
 
报名通道(郑州站)
郑州.png

(扫描二维码报名)
了解活动最新进展,请关注 freeCodeConf 大会官网 https://conf.freecodecamp.one  
 

2.jpg

 
 
 
 
 
 
 
 
 
 
 
继续阅读 »
筹划已久的 freeCodeConf 终于和大家见面啦!React、Vue、Java、小程序开发、敏捷开发、区块链技术、开源项目维护......主题丰富,大咖云集,12个城市社区同步呈现。不管你是努力学习、热衷分享的开发者,还是技术粉、编程爱好者,都将收获满满!

freeCodeConf 是 freeCodeCamp 中国举办的每年一度大型联动技术大会,旨在联合 freeCodeCamp 各城市本地开发者社区,促进高度垂直、高度人才集中、高度明星企业集结的互联网与软件行业技术交流。

第一届 freeCodeConf 将于2018年11月10日在上海、天津、深圳、成都、西安、武汉、北京、杭州、广州、重庆、郑州、济南全国12个城市同期举办,诚邀广大开发者共享技术盛宴。
 大会亮点
 
一.12城同期举办
 
12个城市社区同期举办,促进本地开发者技术分享与交流

二.与大咖面对面交流
 
与数十位前端、区块链等领域的优秀开发者和技术负责人面对面交流
 
三.优质企业现场招聘
 
部分城市设置现场招聘环节,为企业和开发者搭建沟通桥梁
 
四.丰厚的礼品
 
华为云体验券、IBM开发者纪念品、技术书籍、个性胸章......各种精美礼品等你来拿!
 
演讲嘉宾
 


1.jpg

报名通道
 
2018 freeCodeConf 成都站

 
【时间】2018.11.10  9:00-18:00
【地点】天府大道北段 966 号天府国际金融中心 4 号楼 1 层 1 号会议厅
 
演讲主题(成都站)
 
《How does freeCodeCamp help people learn to code for free and become developers》|《给 Node.js 插上 C++ 的翅膀》|《开源项目维护》|《敏捷中国史》|《高效 H5 动画开发方式》|《高可用React服务端渲染》|《打造 Vue 组件库》
 
报名通道(成都站)
成都.png

扫描二维码报名
 
2018 freeCodeConf 天津站
 
 
【时间】2018 年11月10日(周六) 13:00-18:00
【地点】天津市大学软件学院天软微吧2楼(地铁三号线大学城站)
 
演讲主题(天津站)
 
《前端工程师的格局》| 《多租户Saas平台web实践》|  《Vue.js中的DOM和性能优化》| 《工程能力原子化的探索与实践》| 《数据可视化实践》| 《前端代码尺寸精简》
 
报名通道(天津站)

天津.png

(扫描二维码报名)
2018 freeCodeConf 深圳站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】广东深圳深南大道10000号腾讯大厦
 
演讲主题(深圳站)
 
《Tencent Server Web 详解》| 《CSS GRIDS 终极探秘》|  《React Native 开发》等
 
报名通道(深圳站)


深圳.png

(扫描二维码报名)
2018 freeCodeConf 杭州站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】杭州市文一西路1818-2号中国人工智能小镇
 
演讲主题(杭州站)
 
《如何基于graphene开发智能合约》|《基于 VUE SSR 的前后端同构解决方案》等
 
报名通道(杭州站)


杭州.png

2018 freeCodeConf 上海站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】上海市静安区愚园路546号3号楼1层
 
演讲主题(上海站)

 
《从“零”做起的系统架构演进之路》| 《公有链开发技术分享:从共识算法到性能优化》等
 
报名通道(上海站)

上海.png

2018 freeCodeConf 北京站
 
【时间】2018.11.10 下午 13:30 - 17:00
【地点】北京市朝阳区建国路108号海航实业大厦8、9层(氪空间-国贸海航实业大厦社区)
 
演讲主题(北京站)
 
《小程序对战功能实现及浅析排行榜》|《小程序的开发生态变迁》等
 
报名通道(北京站)
北京.png

(扫描二维码报名)
2018 freeCodeConf 西安站
 
【时间】2018 年11月10日(周六) 14:00-18:00
【地点】西安市高新区沣惠南路36号橡树街区B-10101哈希屋HashHouse咖啡厅
 
演讲主题(西安站)
 
《Android 热修复背后的那些 Java 进阶知识》| 《Java 与未来发展职业规划》|  《如何阅读源代码》| 《可视化的遗留系统微服务改造》
 
报名通道(西安站)
 

西安.png

(扫描二维码报名)
2018 freeCodeConf 广州站
 

【时间】2018.11.10 下午 13:30 - 17:00
【地点】广州市番禺区大学城青蓝街22号国家数字家庭应用示范产业基地B区(大学城北C出口)
 
报名通道(广州站)

广州.png

(扫描二维码报名)
2018 freeCodeConf 济南站
 

【时间】2018 年11月10日(周六) 13:00-17:30
【地点】济南市高新区鑫盛大厦2号楼801
 
报名通道(济南站)

济南.png

2018 freeCodeConf 郑州站
 
【时间】2018 年11月10日(周六) 14:00-17:30
【地点】上海市静安区愚园路546号3号楼1层
 
演讲主题(郑州站)
 
《互联网下半场产品核心竞争力--UED》| 《运营那点事儿》| 《如何成为一名合格的“接盘侠”》| 《VUE实践框架志iview》| 《大象圈到底是个什么圈?》
 
报名通道(郑州站)
郑州.png

(扫描二维码报名)
了解活动最新进展,请关注 freeCodeConf 大会官网 https://conf.freecodecamp.one  
 

2.jpg

 
 
 
 
 
 
 
 
 
 
  收起阅读 »

据说这是18年最值得期待的产品经理大会@产品经理那些事


微信图片_20181029175955.jpg

这是17年深圳产品经理大会。

这也是我们第一次,办这么大的线下活动。

一眨眼间一年过去了……

我们在北京、上海、广州、深圳、成都、杭州、厦门、武汉都建立了自己的分会,让全国各地产品伙伴都能连接在一起,提供产品人一个交流的平台。通过线上社区社群打卡学习、话题交流、发表文章、问答交流......

说出来你可能不相信,PMTalk2018年才一周岁呢!

那“周岁宴”我们要怎么过呢?

现在,我们想诚邀坐标深圳的各位产品经理们,欢聚一堂,一起倾(chī)心(dà)交(dàn)谈(gāo)!!
 
2018深圳产品经理大会,来了!!
 
私享级分享嘉宾、参会大咖云集、PMTalk创始故事大曝光、领到手软的礼品、超大型下午茶甜品盛宴、一起切超大的多层蛋糕、与PMTalk创始团队共进烛光晚餐……

这大概是PMTalk在今年举办的最最最最最最盛大的一次线下活动了!

那么这次的一周年盛会到底有什么看点,PMTalk产品经理社区又给各位小伙伴们邀请到了哪些大咖呢?请往下看!

微信图片_20181029180258.jpg

让人看到就再也挪不动腿的下午茶
微信图片_20181029180413.jpg

丰富的周边礼品

(只是冰山一角,神秘大奖我才不会现在就告诉你!)

微信图片_20181029180437.jpg

礼品多到你抱不回家……
 
活动报名
 
2018深圳产品经理大会 

名方式:点击活动报名即可报名。
平台含有限量早鸟票,可享受20元的优惠哦~拼手速赶紧抢啦!(截止时间:11月15日
 
 
继续阅读 »

微信图片_20181029175955.jpg

这是17年深圳产品经理大会。

这也是我们第一次,办这么大的线下活动。

一眨眼间一年过去了……

我们在北京、上海、广州、深圳、成都、杭州、厦门、武汉都建立了自己的分会,让全国各地产品伙伴都能连接在一起,提供产品人一个交流的平台。通过线上社区社群打卡学习、话题交流、发表文章、问答交流......

说出来你可能不相信,PMTalk2018年才一周岁呢!

那“周岁宴”我们要怎么过呢?

现在,我们想诚邀坐标深圳的各位产品经理们,欢聚一堂,一起倾(chī)心(dà)交(dàn)谈(gāo)!!
 
2018深圳产品经理大会,来了!!
 
私享级分享嘉宾、参会大咖云集、PMTalk创始故事大曝光、领到手软的礼品、超大型下午茶甜品盛宴、一起切超大的多层蛋糕、与PMTalk创始团队共进烛光晚餐……

这大概是PMTalk在今年举办的最最最最最最盛大的一次线下活动了!

那么这次的一周年盛会到底有什么看点,PMTalk产品经理社区又给各位小伙伴们邀请到了哪些大咖呢?请往下看!

微信图片_20181029180258.jpg

让人看到就再也挪不动腿的下午茶
微信图片_20181029180413.jpg

丰富的周边礼品

(只是冰山一角,神秘大奖我才不会现在就告诉你!)

微信图片_20181029180437.jpg

礼品多到你抱不回家……
 
活动报名
 
2018深圳产品经理大会 

名方式:点击活动报名即可报名。
平台含有限量早鸟票,可享受20元的优惠哦~拼手速赶紧抢啦!(截止时间:11月15日
 
  收起阅读 »

2018科大讯飞全球1024开发者节,来了!

10月24日-10月25日,安徽·合肥,2018届科大讯飞全球1024开发者节即将重磅开启,邀请MIT科技创新专家等大咖,还有10多场AI+分论坛、1000+AI产品等你体验。点击阅读原文,即刻进入官网抢票!

微信图片_20180930150850.jpg

如果要用一样事物来形容科技,非光莫属。科技革新如光一般照亮我们的生活,让我们看到未来。

讯飞开放平台自2010年成立以来,目前已拥有83万开发者。我们一起在“追光之旅”中不断探索万物互联的缤纷世界,攀登AI之巅!

秉承“开放·合作·生态·共享”理念。2018届科大讯飞全球1024开发者节,我们为开发者们带来更多精彩。 
今年1024,你将看到
 
1.AI领军人物齐聚前沿论坛
如果你想与AI商业化专家吴霁虹、斯坦福大学教授蒋里、科大讯飞董事长刘庆峰、AI大学校长胡郁、讯飞华南公司总裁杜兰、智慧医疗专家陶晓东、MIT35岁以下科技创新青年魏思等AI领袖面对面,请一定不要错过本届1024开发者节。
 
2.1024计划全新发布
2017届全球1024开发者节,“1024计划”重磅推出。从“AI教引”、“AI生态”、“AI公益”三个方面,辅导、赋能开发者,关注公益事业。

回顾:重磅 | 科大讯飞发布《1024计划》,AI点亮全球

今年开发者节,全新“1024计划”将现场公布,新的计划将:

更大规模:覆盖更宽广的领域,让更多用户感受到AI所带来的便捷!

更大力度:用更先进的AI科技,更全面的支持策略,赋能未来!
 
3.最强AI开发者现场终极PK
科大讯飞2018年面向全球正式发起首届“顶天立地”iFLYTEK AI开发者大赛。历时4个月,大赛吸引了1万余名世界各地的优秀开发者踊跃参加,共计收到全球3千多支团队提交参赛作品。

10月24日,应用开发AI挑战赛总决赛9支团队,方言种类识别AI挑战赛总决赛8支团队将在开发者节现场展开AI开发技能的巅峰对决和终极PK。
 
4.公益音乐节,以AI之名传递温暖
2018届科大讯飞全球1024开发者节,将延续“三声有幸”的公益主题,盛邀公益音乐人亲临,为AI献声!以歌声传达鼓舞人心的力量,用音乐唤醒人们对公益的认知。另外,现场还将有特别呈现的“公益天使”带来的的额外惊喜!

注:AI公益音乐节所有门票收入将全部用于讯飞“三声有幸”公益计划。
 
5.2大展区,50+展位,1000+黑科技
在AI体验区,我们准备了多个神秘环节,带给你突破想象力边界的AI旅程。我们用1000+AI黑科技展示对生活的思考。
 
在生态展区,科大讯飞集结自己的生态合作伙伴,在50多个展位上展示最前沿的AI落地产品和服务。覆盖企业服务、图像识别、健康医疗、公益、大数据、智能家居、机器人、智能营销、智能招聘……为你带来最in的场景化体验。

AIUI、讯飞医疗、AI大学、智慧城市……科技展区将带来科大讯飞各事业群的最新成果,从大型电信级应用到小型嵌入式应用;从手机到车载;从家电到玩具,你将体验能够满足不同应用环境的各种惊喜。


6.行业大咖做客,10+场AI细分领域论坛
医疗、客服、营销、家居、机器人、城市、AIoT……本届1024开发者节围绕等10多场AI+场景举行深度分论坛。

知名企业的资深大咖将与大家分享AI时代的见解,在圆桌互动交流彼此观点。我们将会展示讯飞和合作伙伴之间共创的各项核心赛道的AI风采,以科技之心为开发者赋能,用AI之光点亮全行业!

7.丰富互动,亲身参与“追光之旅”
你既可以与AI大咖零距离沟通,围绕AI发展进行思维碰撞,也可以现场与他人分享你对AI产品的使用体验。在2018届科大讯飞全球1024开发者节,你不仅是一名AI巅峰领域的见证者,更是追逐AI科技之光的参与者!

如何开启我的“追光之旅”?2018届全球1024开发者节购票通道已正式开启

贵宾票、嘉宾票、学生票、音乐节票任你选择

点击购买门票即刻抢票

微信图片_20180930151332.jpg

想了解更多关于票务及优惠方面的信息,快添加AI小助手微信号:iFLYTEKAI

微信图片_20180930151351.jpg

 
我们希望全球1024开发者节可以构建人工智能生态链接,打造科技文化独家品牌,影响全球人工智能开发者、爱好者,用人工智能共创美好世界!

2018届科大讯飞全球1024开发者节将用最新最全的人工智能技术和产品促进跨行业链接、多领域碰撞、新技术开发,以科技之光、生态之念,立足当下、放眼未来!

凡是过往,皆为序曲。AI+带来的无限可能,都在此刻埋下伏笔。1024,许你未来之光!
继续阅读 »
10月24日-10月25日,安徽·合肥,2018届科大讯飞全球1024开发者节即将重磅开启,邀请MIT科技创新专家等大咖,还有10多场AI+分论坛、1000+AI产品等你体验。点击阅读原文,即刻进入官网抢票!

微信图片_20180930150850.jpg

如果要用一样事物来形容科技,非光莫属。科技革新如光一般照亮我们的生活,让我们看到未来。

讯飞开放平台自2010年成立以来,目前已拥有83万开发者。我们一起在“追光之旅”中不断探索万物互联的缤纷世界,攀登AI之巅!

秉承“开放·合作·生态·共享”理念。2018届科大讯飞全球1024开发者节,我们为开发者们带来更多精彩。 
今年1024,你将看到
 
1.AI领军人物齐聚前沿论坛
如果你想与AI商业化专家吴霁虹、斯坦福大学教授蒋里、科大讯飞董事长刘庆峰、AI大学校长胡郁、讯飞华南公司总裁杜兰、智慧医疗专家陶晓东、MIT35岁以下科技创新青年魏思等AI领袖面对面,请一定不要错过本届1024开发者节。
 
2.1024计划全新发布
2017届全球1024开发者节,“1024计划”重磅推出。从“AI教引”、“AI生态”、“AI公益”三个方面,辅导、赋能开发者,关注公益事业。

回顾:重磅 | 科大讯飞发布《1024计划》,AI点亮全球

今年开发者节,全新“1024计划”将现场公布,新的计划将:

更大规模:覆盖更宽广的领域,让更多用户感受到AI所带来的便捷!

更大力度:用更先进的AI科技,更全面的支持策略,赋能未来!
 
3.最强AI开发者现场终极PK
科大讯飞2018年面向全球正式发起首届“顶天立地”iFLYTEK AI开发者大赛。历时4个月,大赛吸引了1万余名世界各地的优秀开发者踊跃参加,共计收到全球3千多支团队提交参赛作品。

10月24日,应用开发AI挑战赛总决赛9支团队,方言种类识别AI挑战赛总决赛8支团队将在开发者节现场展开AI开发技能的巅峰对决和终极PK。
 
4.公益音乐节,以AI之名传递温暖
2018届科大讯飞全球1024开发者节,将延续“三声有幸”的公益主题,盛邀公益音乐人亲临,为AI献声!以歌声传达鼓舞人心的力量,用音乐唤醒人们对公益的认知。另外,现场还将有特别呈现的“公益天使”带来的的额外惊喜!

注:AI公益音乐节所有门票收入将全部用于讯飞“三声有幸”公益计划。
 
5.2大展区,50+展位,1000+黑科技
在AI体验区,我们准备了多个神秘环节,带给你突破想象力边界的AI旅程。我们用1000+AI黑科技展示对生活的思考。
 
在生态展区,科大讯飞集结自己的生态合作伙伴,在50多个展位上展示最前沿的AI落地产品和服务。覆盖企业服务、图像识别、健康医疗、公益、大数据、智能家居、机器人、智能营销、智能招聘……为你带来最in的场景化体验。

AIUI、讯飞医疗、AI大学、智慧城市……科技展区将带来科大讯飞各事业群的最新成果,从大型电信级应用到小型嵌入式应用;从手机到车载;从家电到玩具,你将体验能够满足不同应用环境的各种惊喜。


6.行业大咖做客,10+场AI细分领域论坛
医疗、客服、营销、家居、机器人、城市、AIoT……本届1024开发者节围绕等10多场AI+场景举行深度分论坛。

知名企业的资深大咖将与大家分享AI时代的见解,在圆桌互动交流彼此观点。我们将会展示讯飞和合作伙伴之间共创的各项核心赛道的AI风采,以科技之心为开发者赋能,用AI之光点亮全行业!

7.丰富互动,亲身参与“追光之旅”
你既可以与AI大咖零距离沟通,围绕AI发展进行思维碰撞,也可以现场与他人分享你对AI产品的使用体验。在2018届科大讯飞全球1024开发者节,你不仅是一名AI巅峰领域的见证者,更是追逐AI科技之光的参与者!

如何开启我的“追光之旅”?2018届全球1024开发者节购票通道已正式开启

贵宾票、嘉宾票、学生票、音乐节票任你选择

点击购买门票即刻抢票

微信图片_20180930151332.jpg

想了解更多关于票务及优惠方面的信息,快添加AI小助手微信号:iFLYTEKAI

微信图片_20180930151351.jpg

 
我们希望全球1024开发者节可以构建人工智能生态链接,打造科技文化独家品牌,影响全球人工智能开发者、爱好者,用人工智能共创美好世界!

2018届科大讯飞全球1024开发者节将用最新最全的人工智能技术和产品促进跨行业链接、多领域碰撞、新技术开发,以科技之光、生态之念,立足当下、放眼未来!

凡是过往,皆为序曲。AI+带来的无限可能,都在此刻埋下伏笔。1024,许你未来之光! 收起阅读 »

git push -f 是什么?应该怎么处理


我们的内网有使用gitlab作为我们的版本控制工具,最近组里出现了一次误操作,没有更新服务器的代码到本地仓库,直接使用git push -f 强制将本地的修改覆盖了远程仓库的版本,将其他人的commit都给冲掉了,而且无法使用通常的git reset方式回滚,因为使用 git log查看远程仓库的提交历史已经没有其他同事在这之前提交的commit记录了。
一般遇到这种情况,如果同事A将本地覆盖了远程,覆盖了同事B和同事C的commit,而同事B和C本地仓库依旧有他们的提交,这个时候同事B和C只需要同步一下远程,然后再git push -f一下他们的提交,这样就能将被覆盖的commit重新合并到远程仓库里面。

但是我遇到的情况比较特殊,因为当时同事B和同事C是在gitlab的网页版直接编辑的文件,并通过Gitlab提交,也就是说所有人本地都没有同事B和同事C提交的内容,这个时候同事A使用git push -f直接就冲掉了记录,所以就没办法通过上面的办法来回滚了。

废话那么多,下面记录下找回的过程:

 1 场景
```bash
Original:
(remote origin:)
    branch master -> commit 111111
(local)
    branch master -> commit 22222
After git push -f:
(remote origin:)
    branch master -> commit 22222
```
2 找回步骤
(1)这个方法的前提是你有权限登陆部署了Gitlab的服务器,我们需要找到Gitlab保存仓库的目录,首先通过ssh登陆上Gitlab的服务器,然后找到gitlab的存放仓库的地方,默认是在```/var/opt/gitlab/git-data/repositories```。
在这个目录下找到自己要回滚的仓库,并cd到该仓库。
(2)在执行回滚操作前一定要先进行仓库备份:
```bash
tar cvzf project-backup.tgz  /path/to/project.git
```
备份好之后才可以进行下面的操作。
首先gitlab的仓库的目录是这样的:
```
config description HEAD hooks hooks.old.xxx info objects refs
```
在当前目录使用```git fsck```工具找回上次执行的危险操作,直接执行```git fsck```命令,该命令显示所有未被其他对象引用 (指向) 的所有对象,会有如下输出:
```bash
dangling commit ab1afef80fac8e34258ff41fc1b867c702daa24b
```
ab1afef80fac8e34258ff41fc1b867c702daa24就是可能被丢弃的commit,也就是被冲掉的commit,具体是自己想要的哪个,可以:
```
git log ab1afef80fac8e34258ff41fc1b867c702daa24
```
查看在这之前的commit历史,找到自己想要回滚的commit。
(3)找到了想要回滚的commit 哈希值,是不是可以在本地仓库执行
```
git reset --HEAD  ab1afef80fac8e34258ff41fc1b867c702daa24
```
实现回滚了呢?答案是不可以的,因为仓库关于被覆盖的对象已经被清除了,所以clone下来的仓库是没有被覆盖的对象可以回滚的,所以回滚操作还是需要在gitlab的实际仓库里操作。
```
echo ab1afef80fac8e34258ff41fc1b867c702daa24 > refs/heads/master
```
将commit 哈希值直接添加到refs/heads/master文件里,然后克隆远程仓库到本地,你会发现以前的commit又神奇的回来了。

具体的原理需要大家自己去了解git的原理,参考这几篇文章:
https://git-scm.com/book/zh/v1/Git-内部原理-维护及数据恢复
https://superuser.com/question ... 98015
希望对大家有所帮助。
Regards,
codjust
 
继续阅读 »

我们的内网有使用gitlab作为我们的版本控制工具,最近组里出现了一次误操作,没有更新服务器的代码到本地仓库,直接使用git push -f 强制将本地的修改覆盖了远程仓库的版本,将其他人的commit都给冲掉了,而且无法使用通常的git reset方式回滚,因为使用 git log查看远程仓库的提交历史已经没有其他同事在这之前提交的commit记录了。
一般遇到这种情况,如果同事A将本地覆盖了远程,覆盖了同事B和同事C的commit,而同事B和C本地仓库依旧有他们的提交,这个时候同事B和C只需要同步一下远程,然后再git push -f一下他们的提交,这样就能将被覆盖的commit重新合并到远程仓库里面。

但是我遇到的情况比较特殊,因为当时同事B和同事C是在gitlab的网页版直接编辑的文件,并通过Gitlab提交,也就是说所有人本地都没有同事B和同事C提交的内容,这个时候同事A使用git push -f直接就冲掉了记录,所以就没办法通过上面的办法来回滚了。

废话那么多,下面记录下找回的过程:

 1 场景
```bash
Original:
(remote origin:)
    branch master -> commit 111111
(local)
    branch master -> commit 22222
After git push -f:
(remote origin:)
    branch master -> commit 22222
```
2 找回步骤
(1)这个方法的前提是你有权限登陆部署了Gitlab的服务器,我们需要找到Gitlab保存仓库的目录,首先通过ssh登陆上Gitlab的服务器,然后找到gitlab的存放仓库的地方,默认是在```/var/opt/gitlab/git-data/repositories```。
在这个目录下找到自己要回滚的仓库,并cd到该仓库。
(2)在执行回滚操作前一定要先进行仓库备份:
```bash
tar cvzf project-backup.tgz  /path/to/project.git
```
备份好之后才可以进行下面的操作。
首先gitlab的仓库的目录是这样的:
```
config description HEAD hooks hooks.old.xxx info objects refs
```
在当前目录使用```git fsck```工具找回上次执行的危险操作,直接执行```git fsck```命令,该命令显示所有未被其他对象引用 (指向) 的所有对象,会有如下输出:
```bash
dangling commit ab1afef80fac8e34258ff41fc1b867c702daa24b
```
ab1afef80fac8e34258ff41fc1b867c702daa24就是可能被丢弃的commit,也就是被冲掉的commit,具体是自己想要的哪个,可以:
```
git log ab1afef80fac8e34258ff41fc1b867c702daa24
```
查看在这之前的commit历史,找到自己想要回滚的commit。
(3)找到了想要回滚的commit 哈希值,是不是可以在本地仓库执行
```
git reset --HEAD  ab1afef80fac8e34258ff41fc1b867c702daa24
```
实现回滚了呢?答案是不可以的,因为仓库关于被覆盖的对象已经被清除了,所以clone下来的仓库是没有被覆盖的对象可以回滚的,所以回滚操作还是需要在gitlab的实际仓库里操作。
```
echo ab1afef80fac8e34258ff41fc1b867c702daa24 > refs/heads/master
```
将commit 哈希值直接添加到refs/heads/master文件里,然后克隆远程仓库到本地,你会发现以前的commit又神奇的回来了。

具体的原理需要大家自己去了解git的原理,参考这几篇文章:
https://git-scm.com/book/zh/v1/Git-内部原理-维护及数据恢复
https://superuser.com/question ... 98015
希望对大家有所帮助。
Regards,
codjust
  收起阅读 »

《AI企业级应用产品实力榜单》:环信机器人实力上榜

企服行业头条组织筹办的《AI企业级应用产品实力榜单》对外发榜,从众多报名的产品中,经过层层筛选及评审打分,“环信机器人”凭借深厚的AI技术沉淀以及在保险、教育等领域的大规模落地获得上榜。

微信图片_20180919164853.jpg

环信机器人上榜《AI企业级应用产品实力榜单》


 

作为企业服务领域的资深观察者,企服行业头条一直关注企服领域内的动态,这次组织筹办《AI企业级应用产品实力榜单》,希望寻找有价值的优秀企业级产品,传递企业服务的商业价值和趋势。
 
 
榜单综述
 
企服行业头条根据上榜产品在人工智能方面的特点,把产品划分为几个大类。包括例如商业智能和解决方案类、计算机视觉类、人机交互类等等。

现在,企服君又进一步标注出了这50个产品所处的细分行业,试图进一步挖掘榜单背后蕴藏的行业发展趋势。

在细分行业统计中:纯AI行业产品有25个;信息安全+AI有2个;大数据+AI有11个;云计算+AI有1个;行业SaaS+AI有7个;其他行业+AI有4个。
 
 

15372523952.png

 
从行业分布比例图可以很明显看出,虽然此次企服行业头条评选的是企业级AI产品,但细分行业却并非100%全部来自人工智能领域。

不仅如此,榜单甚至一半(50%)的产品都来自非AI行业。而这也恰恰说明,现在越来越多企业开始主动拥抱人工智能技术,人工智能与各个行业的融合也越发紧密。

接下来,企服君就该榜单的典型产品“环信机器人”进行解读。
 
环信机器人:
 
 
AI1.0——4.0,环信机器人全貌展示AI客服发展史

近年,基于规则和传统机器学习的AI 1.0兴起,随着Google等科技大鳄以及资本的推波助澜,基于算法升级的深度学习AI 2.0时代慢慢开始改造客服行业,准确率和召回率(覆盖率)均取得了大幅度提升。到了AI 3.0时代,从单点的文字机器人产品出发实现了全工具链改造,这个阶段环信智能IVR、智能质检、人机协作、环信智能外呼机器人等产品和服务应运而生,到了AI 4.0大规模落地时代,环信又发布了以保险行业为首的四大行业解决方案,环信机器人产品的发展史很好的全貌展示了AI改造中国客服行业的发展历程。

作为自然语言理解技术最先实现商业化落地的领域,智能客服行业吸引了众多市场玩家争相布局。从传统呼叫中心厂商、到SaaS云客服公司、再到客服机器人公司,各类企业都在积极用AI为客服赋能。那么,现阶段什么样的智能客服产品真正实现了大规模落地,帮助企业规模化的优化了生产力结构,助力客服中心从成本中心往利润中心演变,环信机器人4.0似乎已经给出了答案。

对于智能客服赛道上的三类公司,环信CEO刘俊彦用“刀架”和“刀片”做了一个形象的比喻:基础客服系统是刀架,特点是高粘性业务系统,替换成本高,竞争激励毛利相对较低;AI是刀片,特点是技术壁垒高,毛利高,但不能脱离刀架单独存在。传统呼叫中心厂商缺乏一个多租户的、基于云架构的在线客服系统,因此刀架尚不完备;客服机器人厂商从做刀片起家,目前正在竭力补足刀架短板;而像环信这样的云客服厂商先有刀架,后磨砺刀片,能够为客户提供全套智能客服解决方案。

 

环信机器人4.0,低成本可持续运营的客服机器人解决方案

环信机器人4.0致力于为企业提供一套低成本可持续运营的客服机器人解决方案。4.0版本新推出了三大平台级应用(环信AIROOT运营平台、环信AIROOT Pro训练师平台、环信中文语义计算平台)和保险行业智能机器人解决方案,一举将AI在客服行业的传统单点型产品全面升级为体系化整体解决方案。

环信AIROOT运营平台是一个面向客服团队的简单、智能、低成本可持续运营的客服机器人运营平台。通过打造可快速上手的运营体系,建设快速落地的学习闭环。AIROOT提供了机器人运营环节所有涉及到的常用功能,包括:完整的服务数据产品、运维支撑产品、服务运营产品、机器人知识库、知识运营体系产品,使得平台拥有业界领先的知识构建、知识运营和服务交付能力,并且有效降低使用的难度与成本。

针对诸如100坐席+、日咨询会话1万+、知识点1000以上的大型客户,环信AIROOT可以帮助企业实现1-2周完成知识构建快速上线,并在后续的知识持续运营中实现“1天+1人+2小时”完成的运营工作量。保障广大企业真正实现智能客服机器人的“买得起、用得起”的愿望。

环信AIROOT Pro 训练师平台是一个面向专业知识训练师的专业、高效深度调优的客服机器人运营平台。AIROOT Pro通过完整专业的算法优化调优平台,全面打通从“数据清洗”数据标注””模型训练””效果评测””用户反馈”的完整学习闭环,使得能力调优环节中的大批量数据生产、训练以及模型迭代成为可能。并利用环信中文语义计算平台提供的AI能力,全面提升调优过程中的工具智能化程度,有效降低成本。

经实际落地评测,在无需机器人厂商的算法人员、软件工程师、数据工程师参与的情况下,基于AIROOT Pro的训练相较于普通算法平台的能力调优整体效率提升30%以上,客服机器人知识建设周期整体缩短20%。

环信中文语义计算平台是一个面向开发者的自然语言处理(NLP)的能力开放平台。环信中文语义计算平台在经过了近三年的核心算法能力提升和迭代后,在开放NLP基础算法能力的同时,也完整开放了在NLP领域经常使用的应用级别算法能力诸如:纠错、情感分析、意图识别、语义相似度计算等,帮助开发者们在NLP领域的应用环节具有更强的能力,快速应用落地在更多价值场景。

经实际落地评测,环信中文语义计算平台的基于深度学习的意图分类算法在多个测试集上达到了95%准确率的业界领先水平,语义相似度计算到达了93%准确率的业界领先水平。

环信一直秉承着AI必须通过行业解决方案落地帮助企业提能增效解决实际业务问题来体现生产力。基于环信在保险领域的深入积累,环信率先发布了环信机器人保险行业解决方案。环信机器人保险行业解决方案致力于为保险行业提供开箱可用的AI能力,针对寿险、财险保险智能客服、智能IVR、产品推荐、代理人支持等领域的提供了全套综合智能化保险解决方案。以环信机器人保险行业解决方案中的寿险机器人为例,环信的寿险机器人在业界领先的算法和工程能力基础上,还预装了全套寿险服务知识图谱,涵盖了从保险百科到理赔核保的数百个服务场景下的数千条知识图谱,并与业内主流保险核心业务系统预集成打通,真正做到了开箱可用的行业AI能力。

经过近三年的迭代发展,环信机器人已经在保险、证券、教育、物流、银行、电信运营商、航空等领域树立了一批标杆客户,包括新东方、泰康在线、中意人寿、中信证券、长江证券、天津农商行、南京银行、中通快递、厦门航空等。

客户服务作为现代企业和消费者沟通的核心环节,年产业规模高达5000亿元。对于企业来说,如何利用AI新技术、新产品最大化客服价值,如何把客服这个成本中心转化为利润中心,已成为当务之急,或许人工智能产业化改造整个客服行业的奇点已经来临!
 
 
继续阅读 »
企服行业头条组织筹办的《AI企业级应用产品实力榜单》对外发榜,从众多报名的产品中,经过层层筛选及评审打分,“环信机器人”凭借深厚的AI技术沉淀以及在保险、教育等领域的大规模落地获得上榜。

微信图片_20180919164853.jpg

环信机器人上榜《AI企业级应用产品实力榜单》


 

作为企业服务领域的资深观察者,企服行业头条一直关注企服领域内的动态,这次组织筹办《AI企业级应用产品实力榜单》,希望寻找有价值的优秀企业级产品,传递企业服务的商业价值和趋势。
 
 
榜单综述
 
企服行业头条根据上榜产品在人工智能方面的特点,把产品划分为几个大类。包括例如商业智能和解决方案类、计算机视觉类、人机交互类等等。

现在,企服君又进一步标注出了这50个产品所处的细分行业,试图进一步挖掘榜单背后蕴藏的行业发展趋势。

在细分行业统计中:纯AI行业产品有25个;信息安全+AI有2个;大数据+AI有11个;云计算+AI有1个;行业SaaS+AI有7个;其他行业+AI有4个。
 
 

15372523952.png

 
从行业分布比例图可以很明显看出,虽然此次企服行业头条评选的是企业级AI产品,但细分行业却并非100%全部来自人工智能领域。

不仅如此,榜单甚至一半(50%)的产品都来自非AI行业。而这也恰恰说明,现在越来越多企业开始主动拥抱人工智能技术,人工智能与各个行业的融合也越发紧密。

接下来,企服君就该榜单的典型产品“环信机器人”进行解读。
 
环信机器人:
 
 
AI1.0——4.0,环信机器人全貌展示AI客服发展史

近年,基于规则和传统机器学习的AI 1.0兴起,随着Google等科技大鳄以及资本的推波助澜,基于算法升级的深度学习AI 2.0时代慢慢开始改造客服行业,准确率和召回率(覆盖率)均取得了大幅度提升。到了AI 3.0时代,从单点的文字机器人产品出发实现了全工具链改造,这个阶段环信智能IVR、智能质检、人机协作、环信智能外呼机器人等产品和服务应运而生,到了AI 4.0大规模落地时代,环信又发布了以保险行业为首的四大行业解决方案,环信机器人产品的发展史很好的全貌展示了AI改造中国客服行业的发展历程。

作为自然语言理解技术最先实现商业化落地的领域,智能客服行业吸引了众多市场玩家争相布局。从传统呼叫中心厂商、到SaaS云客服公司、再到客服机器人公司,各类企业都在积极用AI为客服赋能。那么,现阶段什么样的智能客服产品真正实现了大规模落地,帮助企业规模化的优化了生产力结构,助力客服中心从成本中心往利润中心演变,环信机器人4.0似乎已经给出了答案。

对于智能客服赛道上的三类公司,环信CEO刘俊彦用“刀架”和“刀片”做了一个形象的比喻:基础客服系统是刀架,特点是高粘性业务系统,替换成本高,竞争激励毛利相对较低;AI是刀片,特点是技术壁垒高,毛利高,但不能脱离刀架单独存在。传统呼叫中心厂商缺乏一个多租户的、基于云架构的在线客服系统,因此刀架尚不完备;客服机器人厂商从做刀片起家,目前正在竭力补足刀架短板;而像环信这样的云客服厂商先有刀架,后磨砺刀片,能够为客户提供全套智能客服解决方案。

 

环信机器人4.0,低成本可持续运营的客服机器人解决方案

环信机器人4.0致力于为企业提供一套低成本可持续运营的客服机器人解决方案。4.0版本新推出了三大平台级应用(环信AIROOT运营平台、环信AIROOT Pro训练师平台、环信中文语义计算平台)和保险行业智能机器人解决方案,一举将AI在客服行业的传统单点型产品全面升级为体系化整体解决方案。

环信AIROOT运营平台是一个面向客服团队的简单、智能、低成本可持续运营的客服机器人运营平台。通过打造可快速上手的运营体系,建设快速落地的学习闭环。AIROOT提供了机器人运营环节所有涉及到的常用功能,包括:完整的服务数据产品、运维支撑产品、服务运营产品、机器人知识库、知识运营体系产品,使得平台拥有业界领先的知识构建、知识运营和服务交付能力,并且有效降低使用的难度与成本。

针对诸如100坐席+、日咨询会话1万+、知识点1000以上的大型客户,环信AIROOT可以帮助企业实现1-2周完成知识构建快速上线,并在后续的知识持续运营中实现“1天+1人+2小时”完成的运营工作量。保障广大企业真正实现智能客服机器人的“买得起、用得起”的愿望。

环信AIROOT Pro 训练师平台是一个面向专业知识训练师的专业、高效深度调优的客服机器人运营平台。AIROOT Pro通过完整专业的算法优化调优平台,全面打通从“数据清洗”数据标注””模型训练””效果评测””用户反馈”的完整学习闭环,使得能力调优环节中的大批量数据生产、训练以及模型迭代成为可能。并利用环信中文语义计算平台提供的AI能力,全面提升调优过程中的工具智能化程度,有效降低成本。

经实际落地评测,在无需机器人厂商的算法人员、软件工程师、数据工程师参与的情况下,基于AIROOT Pro的训练相较于普通算法平台的能力调优整体效率提升30%以上,客服机器人知识建设周期整体缩短20%。

环信中文语义计算平台是一个面向开发者的自然语言处理(NLP)的能力开放平台。环信中文语义计算平台在经过了近三年的核心算法能力提升和迭代后,在开放NLP基础算法能力的同时,也完整开放了在NLP领域经常使用的应用级别算法能力诸如:纠错、情感分析、意图识别、语义相似度计算等,帮助开发者们在NLP领域的应用环节具有更强的能力,快速应用落地在更多价值场景。

经实际落地评测,环信中文语义计算平台的基于深度学习的意图分类算法在多个测试集上达到了95%准确率的业界领先水平,语义相似度计算到达了93%准确率的业界领先水平。

环信一直秉承着AI必须通过行业解决方案落地帮助企业提能增效解决实际业务问题来体现生产力。基于环信在保险领域的深入积累,环信率先发布了环信机器人保险行业解决方案。环信机器人保险行业解决方案致力于为保险行业提供开箱可用的AI能力,针对寿险、财险保险智能客服、智能IVR、产品推荐、代理人支持等领域的提供了全套综合智能化保险解决方案。以环信机器人保险行业解决方案中的寿险机器人为例,环信的寿险机器人在业界领先的算法和工程能力基础上,还预装了全套寿险服务知识图谱,涵盖了从保险百科到理赔核保的数百个服务场景下的数千条知识图谱,并与业内主流保险核心业务系统预集成打通,真正做到了开箱可用的行业AI能力。

经过近三年的迭代发展,环信机器人已经在保险、证券、教育、物流、银行、电信运营商、航空等领域树立了一批标杆客户,包括新东方、泰康在线、中意人寿、中信证券、长江证券、天津农商行、南京银行、中通快递、厦门航空等。

客户服务作为现代企业和消费者沟通的核心环节,年产业规模高达5000亿元。对于企业来说,如何利用AI新技术、新产品最大化客服价值,如何把客服这个成本中心转化为利润中心,已成为当务之急,或许人工智能产业化改造整个客服行业的奇点已经来临!
 
  收起阅读 »

【环信征文】我做面试官的第三个故事

有一天Java主管江总拿着一份简历找我协助他面试一个自称既懂Java又懂Android的人
江总:你Android和Java都会?来面试Android还是Java?
他:(我猜他打量了6年经验的江总和4年经验的我之后选了一个好对付的)我最近今年都在搞Android,还是面试Android吧!
我:(看他的简历和面试登记表上面的信息出入有点大,心里就有底了)请简单介绍下自己吧
他:balah……balah……(就像《海贼王》有漫画版、动画版和国内百度贴吧版三种剧情一样,他的工作经历也有打印简历版、面试登记表手写版和面试口述版三种)
我:(知道他是什么牛鬼蛇神了,一上来就让他出丑)你能说说Fragment的生命周期吗?
他:Fragment的生命周期……emmm……就是和Activity的生命周期差不多嘛
我:这儿有纸笔,你默写Activity的生命周期吧
他:(边嘟囔边写)先是onCreate()……emmm……还有onResume()……onStart()和onDestroy()
我:Activity的生命周期不是写出来了吗?再好好想想Fragment的生命周期是啥样的
他:就是在Activity的onCreate()上边加上onActivityCreate()和onAttach()……emmm……onDestroy()下边再加上onDestroyView()吧~
我:在什么情况下Fragment的onResume()方法执行?
他:Fragment从不可见到可见的情况下
我:同一个Activity里,从A Fragment切换到B Fragment,然后从B切换到A,A执行了onResume()吗?
他:那当然执行咯~

我:我再问问你View事件分发机制吧
他:(感觉死耗子终于来找瞎猫了)这个我知道,就是从最外层的ViewGroup……
我:(打断他的话)ACTION_DOWN和ACTION_UP总是成对出现吗?换句话说,一个View触发了ACTION_DOWN之后,一定会触发ACTION_UP吗?反过来,一个View触发了ACTION_UP之前,它一定先触发ACTION_DOWN吗?
他:那是一定的,ACTION_UP是手指离开屏幕时触发的……
我:(打断他的话)按住A View,拖动到B View,松手,A和B也都触发了ACTION_UP和ACTION_DOWN吗?
他:这个……emmm……我不太清楚哈~

我:(偷偷看一眼江总,江总正在冷笑摇头)我再考考你Java基础吧,ArrayList和LinkedList,哪个线程安全?哪个线程不安全?
他:ArrayList线程不安全,LinkedList线程安全
我:那你知道线程池有哪几种吗?
他:有四种,就是有带缓存的……emmm……还有别的~

我:(看他简历上的银行项目负责人的工作经历)你长期从事银行、金融软件开发,记录存款和消费金额之类和钱账有关的数据用那种数据类型呀? 

他:当然用float了,精确度比double高嘛 

我:double精度比float低吗? 

他:那当然啦,double只精确到小数点后两位嘛,double在英语里就是二的意思 

我:你现在拿出手机查查 

他:(用手机查了一会)emmm……我刚才口误,我们记钱账的数据类型是double 

我:那你听说过BigDecimal吗?

江总:(此时的鄙夷表情已经和相亲时候拜金女听见“租房”关键词时候的表情一样了)你还想继续面Android吗?
他:不,不,我Java经验更丰富些,还是面Java吧
江总:拿你对Spring Cloud了解多少?
他:balah……balah……(说了一大堆驴唇不对马嘴的东西)
江总:好吧,今天的面试就到这里,有消息我们会通知你
我:(送他出去之后)你知道他简历造假的破绽有多明显吗?
江总:他简历上的毕业年份和填表上的不一样
我:我连他以前什么职业都知道,他是送外卖的或者工地上下苦力的,培训几个月出来骗人了
江总:你怎么知道的?
我:常年室内工作的人脸没那么黑
 
后记:他被我介绍给了一个“工资一开始没那么高,我看你做得好以后会给你股份”的“创业公司CEO”做技术扶贫去了,也不知道他俩到底谁坑了谁
 
往期推荐:
今天面试一个自称两年经验的Android
我又做了一次面试官
继续阅读 »
有一天Java主管江总拿着一份简历找我协助他面试一个自称既懂Java又懂Android的人
江总:你Android和Java都会?来面试Android还是Java?
他:(我猜他打量了6年经验的江总和4年经验的我之后选了一个好对付的)我最近今年都在搞Android,还是面试Android吧!
我:(看他的简历和面试登记表上面的信息出入有点大,心里就有底了)请简单介绍下自己吧
他:balah……balah……(就像《海贼王》有漫画版、动画版和国内百度贴吧版三种剧情一样,他的工作经历也有打印简历版、面试登记表手写版和面试口述版三种)
我:(知道他是什么牛鬼蛇神了,一上来就让他出丑)你能说说Fragment的生命周期吗?
他:Fragment的生命周期……emmm……就是和Activity的生命周期差不多嘛
我:这儿有纸笔,你默写Activity的生命周期吧
他:(边嘟囔边写)先是onCreate()……emmm……还有onResume()……onStart()和onDestroy()
我:Activity的生命周期不是写出来了吗?再好好想想Fragment的生命周期是啥样的
他:就是在Activity的onCreate()上边加上onActivityCreate()和onAttach()……emmm……onDestroy()下边再加上onDestroyView()吧~
我:在什么情况下Fragment的onResume()方法执行?
他:Fragment从不可见到可见的情况下
我:同一个Activity里,从A Fragment切换到B Fragment,然后从B切换到A,A执行了onResume()吗?
他:那当然执行咯~

我:我再问问你View事件分发机制吧
他:(感觉死耗子终于来找瞎猫了)这个我知道,就是从最外层的ViewGroup……
我:(打断他的话)ACTION_DOWN和ACTION_UP总是成对出现吗?换句话说,一个View触发了ACTION_DOWN之后,一定会触发ACTION_UP吗?反过来,一个View触发了ACTION_UP之前,它一定先触发ACTION_DOWN吗?
他:那是一定的,ACTION_UP是手指离开屏幕时触发的……
我:(打断他的话)按住A View,拖动到B View,松手,A和B也都触发了ACTION_UP和ACTION_DOWN吗?
他:这个……emmm……我不太清楚哈~

我:(偷偷看一眼江总,江总正在冷笑摇头)我再考考你Java基础吧,ArrayList和LinkedList,哪个线程安全?哪个线程不安全?
他:ArrayList线程不安全,LinkedList线程安全
我:那你知道线程池有哪几种吗?
他:有四种,就是有带缓存的……emmm……还有别的~

我:(看他简历上的银行项目负责人的工作经历)你长期从事银行、金融软件开发,记录存款和消费金额之类和钱账有关的数据用那种数据类型呀? 

他:当然用float了,精确度比double高嘛 

我:double精度比float低吗? 

他:那当然啦,double只精确到小数点后两位嘛,double在英语里就是二的意思 

我:你现在拿出手机查查 

他:(用手机查了一会)emmm……我刚才口误,我们记钱账的数据类型是double 

我:那你听说过BigDecimal吗?

江总:(此时的鄙夷表情已经和相亲时候拜金女听见“租房”关键词时候的表情一样了)你还想继续面Android吗?
他:不,不,我Java经验更丰富些,还是面Java吧
江总:拿你对Spring Cloud了解多少?
他:balah……balah……(说了一大堆驴唇不对马嘴的东西)
江总:好吧,今天的面试就到这里,有消息我们会通知你
我:(送他出去之后)你知道他简历造假的破绽有多明显吗?
江总:他简历上的毕业年份和填表上的不一样
我:我连他以前什么职业都知道,他是送外卖的或者工地上下苦力的,培训几个月出来骗人了
江总:你怎么知道的?
我:常年室内工作的人脸没那么黑
 
后记:他被我介绍给了一个“工资一开始没那么高,我看你做得好以后会给你股份”的“创业公司CEO”做技术扶贫去了,也不知道他俩到底谁坑了谁
 
往期推荐:
今天面试一个自称两年经验的Android
我又做了一次面试官 收起阅读 »

基操!坐下!勿6!5分钟搭建小程序直播

今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。

TIM图片20180828171626.png

作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了这个“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
 
直播购物小程序运行GIF效果图
44b07cdeaeb3cf7296db23283efe2696.gif

 
小程序体验指南(仅需三步):

 
1.下载小程序直播源码:github源码

2.下载微信小程序开发工具:小程序开发工具下载地址
 
3.导入源码:将附件的源码解压直接导入 
 
就是这么简单,还有问题?我们准备了视频教程!
 
手把手教学直播小程序开发【环信公开课35期】:公开课回放地址

5b7d3665df6b6.png

公开课视频截图
 
课程大纲:
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
附:环信小程序直播开发文档文档地址
 
关于环信直播聊天室:
1、采用支持高并发的异步架构,轻松应对千万级并发请求; 各项基础服务集群化,确保系统高可用性; 系统冗余度高,容量评估体系完善,弹性扩容应对流量峰值;

2、支持各种消息格式:文字、表情、图片、声音、视频、附件、位置、扩展消息;

3、支持实时配置的消息分级策略,确保重要消息优先必达; 

4、支持直播聊天室后台管理及审核功能,提供直播相关数据统计;

5、提供智能反垃圾和自定义敏感词过滤功能;

6、快速集成,demo提供高质量代码示例,可根据运营情况随时扩展;

7、聊天室人数无上限
继续阅读 »
今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。

TIM图片20180828171626.png

作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了这个“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
 
直播购物小程序运行GIF效果图
44b07cdeaeb3cf7296db23283efe2696.gif

 
小程序体验指南(仅需三步):

 
1.下载小程序直播源码:github源码

2.下载微信小程序开发工具:小程序开发工具下载地址
 
3.导入源码:将附件的源码解压直接导入 
 
就是这么简单,还有问题?我们准备了视频教程!
 
手把手教学直播小程序开发【环信公开课35期】:公开课回放地址

5b7d3665df6b6.png

公开课视频截图
 
课程大纲:
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
附:环信小程序直播开发文档文档地址
 
关于环信直播聊天室:
1、采用支持高并发的异步架构,轻松应对千万级并发请求; 各项基础服务集群化,确保系统高可用性; 系统冗余度高,容量评估体系完善,弹性扩容应对流量峰值;

2、支持各种消息格式:文字、表情、图片、声音、视频、附件、位置、扩展消息;

3、支持实时配置的消息分级策略,确保重要消息优先必达; 

4、支持直播聊天室后台管理及审核功能,提供直播相关数据统计;

5、提供智能反垃圾和自定义敏感词过滤功能;

6、快速集成,demo提供高质量代码示例,可根据运营情况随时扩展;

7、聊天室人数无上限 收起阅读 »

环信公开课35期回放:手把手教学直播小程序开发

   微信小程序越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户次使用路径复杂,很难培养用户的使用习惯;微信小程序入口便捷使用方便,极大提升了用户体验。

直播商业化最困扰的地方在于哪里?流量!微信有庞大的低成本的流量可以帮助商家获取和转化用户。小程序直播可以说是商业化用户最好的工具。直播和购物的结合就是其中一个较好的表现形式。

8月8日,环信公开课邀请了小程序开发业界大牛席海江老师,分享了全国首个小程序直播源码,在公开课上手把手教学从零开始搭建一套基于环信的小程序直播平台。
公开课第35期视频回放
公开课回放视频

直播购物小程序运行GIF效果图

微信图片_20180822174317.gif


TIM图片20180822173456.png

席海江老师演示集成环信小程序直播


 课程回顾:
 
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
 
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
课程亮点:全国首个直播购物小程序源码分享,手把手搭建基于环信的直播购物小程序。
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与。

感谢合作伙伴APICLloud,APKBUS,码客,七牛云,客户世界对本期环信公开课的大力支持,环信公开课合作、课程订阅请添加公开课小助手微信:huanixn-hh
 

强烈推荐:每周三下午3点环信IM在线培训,工程师现场答疑,还有定制T恤送出,观看地址环信公开课
继续阅读 »
   微信小程序越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户次使用路径复杂,很难培养用户的使用习惯;微信小程序入口便捷使用方便,极大提升了用户体验。

直播商业化最困扰的地方在于哪里?流量!微信有庞大的低成本的流量可以帮助商家获取和转化用户。小程序直播可以说是商业化用户最好的工具。直播和购物的结合就是其中一个较好的表现形式。

8月8日,环信公开课邀请了小程序开发业界大牛席海江老师,分享了全国首个小程序直播源码,在公开课上手把手教学从零开始搭建一套基于环信的小程序直播平台。
公开课第35期视频回放
公开课回放视频

直播购物小程序运行GIF效果图

微信图片_20180822174317.gif


TIM图片20180822173456.png

席海江老师演示集成环信小程序直播


 课程回顾:
 
环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】环信后台创建及api 方式创建
3、【房间主播及推拉流地址设置】创建直播,主播绑定房间,房间设置直播地址。
 
小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置小程序进行直播推拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及特效】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效延时处理。
 
课程亮点:全国首个直播购物小程序源码分享,手把手搭建基于环信的直播购物小程序。
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与。

感谢合作伙伴APICLloud,APKBUS,码客,七牛云,客户世界对本期环信公开课的大力支持,环信公开课合作、课程订阅请添加公开课小助手微信:huanixn-hh
 

强烈推荐:每周三下午3点环信IM在线培训,工程师现场答疑,还有定制T恤送出,观看地址环信公开课 收起阅读 »

环信 ios 发不了录音

发送block 返回 code 401  描述是 录音文件地址+ too small 接手别人的代码 一步一个坑 环信还没技术支持 以前还有在线支持的  求解
发送block 返回 code 401  描述是 录音文件地址+ too small 接手别人的代码 一步一个坑 环信还没技术支持 以前还有在线支持的  求解

html5仿微信网页版|h5仿微信聊天web版

html5开发的仿微信网页版聊天案例,h5仿新浪微博网页版聊天,采用html5+css3+jquery+swiper+wcPop等技术混合架构开发,自研弹窗插件wcPop.js仿微信弹窗效果,修复编辑器插入表情时光标定位错误bug,实现了微信网页版的主要功能。
https://blog.csdn.net/xiaoyan_2015/article/details/81750894 

001360截图20180816000327143.png


002360截图20180816000509114.png


003360截图20180816000759161.png


004360截图20180816000759161.png


005360截图20180816001212086.png


006360截图20180816001504426.png


007360截图20180816002528151.png


008360截图20180816003308259.png


009360截图20180816003538528.png


010360截图20180816003726016.png


011360截图20180816004133604.png


012360截图20180816004512015.png


013360截图20180816004755282.png
继续阅读 »
html5开发的仿微信网页版聊天案例,h5仿新浪微博网页版聊天,采用html5+css3+jquery+swiper+wcPop等技术混合架构开发,自研弹窗插件wcPop.js仿微信弹窗效果,修复编辑器插入表情时光标定位错误bug,实现了微信网页版的主要功能。
https://blog.csdn.net/xiaoyan_2015/article/details/81750894 

001360截图20180816000327143.png


002360截图20180816000509114.png


003360截图20180816000759161.png


004360截图20180816000759161.png


005360截图20180816001212086.png


006360截图20180816001504426.png


007360截图20180816002528151.png


008360截图20180816003308259.png


009360截图20180816003538528.png


010360截图20180816003726016.png


011360截图20180816004133604.png


012360截图20180816004512015.png


013360截图20180816004755282.png
收起阅读 »

2018安卓巴士开发者大会【技术之声 改变世界】

2018安卓巴士开发者大会,是中国最具前沿性、专业性的安卓技术会议。由安卓巴士技术社区首次发起并组织的安卓线下交流大会,集结500位安卓开发,与你一起交流学习,探讨行业动态。

本次上海作为首站,将盛邀数位业内技术大咖为开发者们带来最高质量的技术分享和丰富的现场互动体验项目,让参会者在得到业务成长的同时还能知晓行业动态、结识同僚并享受活动带来的特别体验。

报名链接:http://www.hdb.com/dis/fmjhe7y02o

5b56e0005f47f.jpg

付费说明:

本次活动经费用于场租、设备、物料、礼品等。

早鸟票¥199,享受活动五折优惠。

标准票¥399,购此票种开发者凭大会当天凭二维码签到可得安卓开发书籍一本。

团购票¥798,此票为套票3张,即三人成行一人免单,经济实惠。

VIP票¥599,此票座位为会场前排、赠高级礼品、有提问机会、可加入讲师群。

活动须知:

请各位小伙伴认真填写所有的报名资料用于审核使用,由于场地位置有限和为了保证活动质量,活动当天拒绝空降,现场签到凭报名成功二维码,谢谢配合!

活动路线:

地铁路线:地铁9号线金桥站2号口骑行1公里。

公交:1045路、浦东27路、上川专线新金桥路唐陆路站下步行418米。

驾车路线:收费停车场位于唐陆公路与新金桥路交叉口西南150米。(前40名可拥有免费停车券)

5b56e0286ca33.png

 
继续阅读 »
2018安卓巴士开发者大会,是中国最具前沿性、专业性的安卓技术会议。由安卓巴士技术社区首次发起并组织的安卓线下交流大会,集结500位安卓开发,与你一起交流学习,探讨行业动态。

本次上海作为首站,将盛邀数位业内技术大咖为开发者们带来最高质量的技术分享和丰富的现场互动体验项目,让参会者在得到业务成长的同时还能知晓行业动态、结识同僚并享受活动带来的特别体验。

报名链接:http://www.hdb.com/dis/fmjhe7y02o

5b56e0005f47f.jpg

付费说明:

本次活动经费用于场租、设备、物料、礼品等。

早鸟票¥199,享受活动五折优惠。

标准票¥399,购此票种开发者凭大会当天凭二维码签到可得安卓开发书籍一本。

团购票¥798,此票为套票3张,即三人成行一人免单,经济实惠。

VIP票¥599,此票座位为会场前排、赠高级礼品、有提问机会、可加入讲师群。

活动须知:

请各位小伙伴认真填写所有的报名资料用于审核使用,由于场地位置有限和为了保证活动质量,活动当天拒绝空降,现场签到凭报名成功二维码,谢谢配合!

活动路线:

地铁路线:地铁9号线金桥站2号口骑行1公里。

公交:1045路、浦东27路、上川专线新金桥路唐陆路站下步行418米。

驾车路线:收费停车场位于唐陆公路与新金桥路交叉口西南150米。(前40名可拥有免费停车券)

5b56e0286ca33.png

  收起阅读 »

环信即时通讯云V3.5.0更新--多版本实时音视频发布,总有一款适合你

摘要:​ 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。

400196470_wx.jpg

iOS SDK 更新日志
 
版本 V3.5.0 2018-08-13
 
新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。在创建会议时可以传入以下几种类型:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景; 

2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
优化:
  • 优化实时音视频多人会议功能

 
Android SDK 更新日志
 
版本 V3.5.0 2018-08-13

新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。类型如下:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景;

 2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​
继续阅读 »
摘要:​ 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。

400196470_wx.jpg

iOS SDK 更新日志
 
版本 V3.5.0 2018-08-13
 
新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。在创建会议时可以传入以下几种类型:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景; 

2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
优化:
  • 优化实时音视频多人会议功能

 
Android SDK 更新日志
 
版本 V3.5.0 2018-08-13

新功能:
  • 为满足不同场景需求,3.5.0版本开始将实时音视频会议划分了不同的类型,不同类型对应了不同场景,使你能够轻松地将实时音视频功能集成到你的应用或者网站中。类型如下:

 
1. Communication:普通通信会议,最多支持参会者6人,会议里的每个参会者都可以自由说话和发布视频,该会议类型在服务器不做语音的再编码,音质最好,适用于远程医疗,在线客服等场景;

 2. Large Communication:大型通信会议,最多参会者30人,会议里的每个参会者都可以自由说话,最多支持6个人发布视频,该会议模式在服务器做混音处理,支持更多的人说话,适用于大型会议等场景;

 3. Live:互动视频会议,会议里支持最多6个主播和600个观众,观众可以通过连麦与主播互动,该会议类型适用于在线教育,互动直播等场景。
 
版本历史:Android SDK更新日志  ios SDK更新日志
下载地址:SDK下载​ 收起阅读 »

最近开发的即时通讯软件,有ios和安卓


151326252235608692.jpg


349117477846089395.jpg


661323024749514028.jpg


675322798145162335.jpg


734479370889593645.jpg


849550710384045190.jpg

 
有不足之之处,还请大家多多指教哈,可以加我q使用交流一下  249793044
继续阅读 »

151326252235608692.jpg


349117477846089395.jpg


661323024749514028.jpg


675322798145162335.jpg


734479370889593645.jpg


849550710384045190.jpg

 
有不足之之处,还请大家多多指教哈,可以加我q使用交流一下  249793044 收起阅读 »

图解View测量、布局及绘制原理

来自https://www.jianshu.com/p/3d2c49315d68
Android中自定义View一直是一个高级的技能,入门比较难,看起来很高大上。想要学会自定义View,当然要理解View的测量、布局及绘制原理,本篇文章将以图表的形式讲解View的测量、布局及绘制原理。
一、View绘制的流程框架

3985563-5f3c64af676d9aee.png

View的绘制是从上往下一层层迭代下来的。DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。关于DecorView,可以看这篇文章。

3985563-a7ace6f9221c9d79.png

二、Measure流程

顾名思义,就是测量每个控件的大小。

调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setMeasuredDimension()设定View的宽高信息,完成View的测量操作。
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
}
measure()方法中,传入了两个参数 widthMeasureSpec, heightMeasureSpec 表示View的宽高的一些信息。
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

由上述流程来看Measure流程很简单,关键点是在于widthMeasureSpec, heightMeasureSpec这两个参数信息怎么获得?

如果有了widthMeasureSpec, heightMeasureSpec,通过一定的处理(可以重写,自定义处理步骤),从中获取View的宽/高,调用setMeasuredDimension()方法,指定View的宽高,完成测量工作。
MeasureSpec的确定

先介绍下什么是MeasureSpec?
3985563-d3bf0905aeb8719b.png

MeasureSpec由两部分组成,一部分是测量模式,另一部分是测量的尺寸大小。

其中,Mode模式共分为三类

UNSPECIFIED :不对View进行任何限制,要多大给多大,一般用于系统内部

EXACTLY:对应LayoutParams中的match_parent和具体数值这两种模式。检测到View所需要的精确大小,这时候View的最终大小就是SpecSize所指定的值,

AT_MOST :对应LayoutParams中的wrap_content。View的大小不能大于父容器的大小。

那么MeasureSpec又是如何确定的?

对于DecorView,其确定是通过屏幕的大小,和自身的布局参数LayoutParams。

这部分很简单,根据LayoutParams的布局格式(match_parent,wrap_content或指定大小),将自身大小,和屏幕大小相比,设置一个不超过屏幕大小的宽高,以及对应模式。

对于其他View(包括ViewGroup),其确定是通过父布局的MeasureSpec和自身的布局参数LayoutParams。

这部分比较复杂。以下列图表表示不同的情况:

3985563-e3f20c6662effb7b.png


当子View的LayoutParams的布局格式是wrap_content,可以看到子View的大小是父View的剩余尺寸,和设置成match_parent时,子View的大小没有区别。为了显示区别,一般在自定义View时,需要重写onMeasure方法,处理wrap_content时的情况,进行特别指定。从这里看出MeasureSpec的指定也是从顶层布局开始一层层往下去,父布局影响子布局。

View的测量流程:

3985563-d1a57294428ff668.png

三、Layout流程

测量完View大小后,就需要将View布局在Window中,View的布局主要通过确定上下左右四个点来确定的。

其中布局也是自上而下,不同的是ViewGroup先在layout()中确定自己的布局,然后在onLayout()方法中再调用子View的layout()方法,让子View布局。在Measure过程中,ViewGroup一般是先测量子View的大小,然后再确定自身的大小。
public void layout(int l, int t, int r, int b) {  

// 当前视图的四个顶点
int oldL = mLeft;
int oldT = mTop;
int oldB = mBottom;
int oldR = mRight;

// setFrame() / setOpticalFrame():确定View自身的位置
// 即初始化四个顶点的值,然后判断当前View大小和位置是否发生了变化并返回
boolean changed = isLayoutModeOptical(mParent) ?
setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

//如果视图的大小和位置发生变化,会调用onLayout()
if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {

// onLayout():确定该View所有的子View在父容器的位置
onLayout(changed, l, t, r, b);
...

}

上面看出通过 setFrame() / setOpticalFrame():确定View自身的位置,通过onLayout()确定子View的布局。
setOpticalFrame()内部也是调用了setFrame(),所以具体看setFrame()怎么确定自身的位置布局。
protected boolean setFrame(int left, int top, int right, int bottom) {
...
// 通过以下赋值语句记录下了视图的位置信息,即确定View的四个顶点
// 即确定了视图的位置
mLeft = left;
mTop = top;
mRight = right;
mBottom = bottom;

mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
}

确定了自身的位置后,就要通过onLayout()确定子View的布局。onLayout()是一个可继承的空方法。
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
}
如果当前View就是一个单一的View,那么没有子View,就不需要实现该方法。

如果当前View是一个ViewGroup,就需要实现onLayout方法,该方法的实现个自定义ViewGroup时其特性有关,必须自己实现。

由此便完成了一层层的的布局工作。

View的布局流程:


3985563-8aefac42b3912539.png

四、Draw过程

View的绘制过程遵循如下几步:
①绘制背景 background.draw(canvas)

②绘制自己(onDraw)

③绘制Children(dispatchDraw)

④绘制装饰(onDrawScrollBars)

从源码中可以清楚地看出绘制的顺序。
public void draw(Canvas canvas) {
// 所有的视图最终都是调用 View 的 draw ()绘制视图( ViewGroup 没有复写此方法)
// 在自定义View时,不应该复写该方法,而是复写 onDraw(Canvas) 方法进行绘制。
// 如果自定义的视图确实要复写该方法,那么需要先调用 super.draw(canvas)完成系统的绘制,然后再进行自定义的绘制。
...
int saveCount;
if (!dirtyOpaque) {
// 步骤1: 绘制本身View背景
drawBackground(canvas);
}

// 如果有必要,就保存图层(还有一个复原图层)
// 优化技巧:
// 当不需要绘制 Layer 时,“保存图层“和“复原图层“这两步会跳过
// 因此在绘制的时候,节省 layer 可以提高绘制效率
final int viewFlags = mViewFlags;
if (!verticalEdges && !horizontalEdges) {

if (!dirtyOpaque)
// 步骤2:绘制本身View内容 默认为空实现, 自定义View时需要进行复写
onDraw(canvas);

......
// 步骤3:绘制子View 默认为空实现 单一View中不需要实现,ViewGroup中已经实现该方法
dispatchDraw(canvas);

........

// 步骤4:绘制滑动条和前景色等等
onDrawScrollBars(canvas);

..........
return;
}
...
}

无论是ViewGroup还是单一的View,都需要实现这套流程,不同的是,在ViewGroup中,实现了 dispatchDraw()方法,而在单一子View中不需要实现该方法。自定义View一般要重写onDraw()方法,在其中绘制不同的样式。
3985563-594f6b3cde8762c7.png

五、总结

从View的测量、布局和绘制原理来看,要实现自定义View,根据自定义View的种类不同,可能分别要自定义实现不同的方法。但是这些方法不外乎:onMeasure()方法,onLayout()方法,onDraw()方法。

onMeasure()方法:单一View,一般重写此方法,针对wrap_content情况,规定View默认的大小值,避免于match_parent情况一致。ViewGroup,若不重写,就会执行和单子View中相同逻辑,不会测量子View。一般会重写onMeasure()方法,循环测量子View。

onLayout()方法:单一View,不需要实现该方法。ViewGroup必须实现,该方法是个抽象方法,实现该方法,来对子View进行布局。

onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法
 
继续阅读 »
来自https://www.jianshu.com/p/3d2c49315d68
Android中自定义View一直是一个高级的技能,入门比较难,看起来很高大上。想要学会自定义View,当然要理解View的测量、布局及绘制原理,本篇文章将以图表的形式讲解View的测量、布局及绘制原理。
一、View绘制的流程框架

3985563-5f3c64af676d9aee.png

View的绘制是从上往下一层层迭代下来的。DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下,依次measure(测量),layout(布局),draw(绘制)。关于DecorView,可以看这篇文章。

3985563-a7ace6f9221c9d79.png

二、Measure流程

顾名思义,就是测量每个控件的大小。

调用measure()方法,进行一些逻辑处理,然后调用onMeasure()方法,在其中调用setMeasuredDimension()设定View的宽高信息,完成View的测量操作。
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
}
measure()方法中,传入了两个参数 widthMeasureSpec, heightMeasureSpec 表示View的宽高的一些信息。
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

由上述流程来看Measure流程很简单,关键点是在于widthMeasureSpec, heightMeasureSpec这两个参数信息怎么获得?

如果有了widthMeasureSpec, heightMeasureSpec,通过一定的处理(可以重写,自定义处理步骤),从中获取View的宽/高,调用setMeasuredDimension()方法,指定View的宽高,完成测量工作。
MeasureSpec的确定

先介绍下什么是MeasureSpec?
3985563-d3bf0905aeb8719b.png

MeasureSpec由两部分组成,一部分是测量模式,另一部分是测量的尺寸大小。

其中,Mode模式共分为三类

UNSPECIFIED :不对View进行任何限制,要多大给多大,一般用于系统内部

EXACTLY:对应LayoutParams中的match_parent和具体数值这两种模式。检测到View所需要的精确大小,这时候View的最终大小就是SpecSize所指定的值,

AT_MOST :对应LayoutParams中的wrap_content。View的大小不能大于父容器的大小。

那么MeasureSpec又是如何确定的?

对于DecorView,其确定是通过屏幕的大小,和自身的布局参数LayoutParams。

这部分很简单,根据LayoutParams的布局格式(match_parent,wrap_content或指定大小),将自身大小,和屏幕大小相比,设置一个不超过屏幕大小的宽高,以及对应模式。

对于其他View(包括ViewGroup),其确定是通过父布局的MeasureSpec和自身的布局参数LayoutParams。

这部分比较复杂。以下列图表表示不同的情况:

3985563-e3f20c6662effb7b.png


当子View的LayoutParams的布局格式是wrap_content,可以看到子View的大小是父View的剩余尺寸,和设置成match_parent时,子View的大小没有区别。为了显示区别,一般在自定义View时,需要重写onMeasure方法,处理wrap_content时的情况,进行特别指定。从这里看出MeasureSpec的指定也是从顶层布局开始一层层往下去,父布局影响子布局。

View的测量流程:

3985563-d1a57294428ff668.png

三、Layout流程

测量完View大小后,就需要将View布局在Window中,View的布局主要通过确定上下左右四个点来确定的。

其中布局也是自上而下,不同的是ViewGroup先在layout()中确定自己的布局,然后在onLayout()方法中再调用子View的layout()方法,让子View布局。在Measure过程中,ViewGroup一般是先测量子View的大小,然后再确定自身的大小。
public void layout(int l, int t, int r, int b) {  

// 当前视图的四个顶点
int oldL = mLeft;
int oldT = mTop;
int oldB = mBottom;
int oldR = mRight;

// setFrame() / setOpticalFrame():确定View自身的位置
// 即初始化四个顶点的值,然后判断当前View大小和位置是否发生了变化并返回
boolean changed = isLayoutModeOptical(mParent) ?
setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

//如果视图的大小和位置发生变化,会调用onLayout()
if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {

// onLayout():确定该View所有的子View在父容器的位置
onLayout(changed, l, t, r, b);
...

}

上面看出通过 setFrame() / setOpticalFrame():确定View自身的位置,通过onLayout()确定子View的布局。
setOpticalFrame()内部也是调用了setFrame(),所以具体看setFrame()怎么确定自身的位置布局。
protected boolean setFrame(int left, int top, int right, int bottom) {
...
// 通过以下赋值语句记录下了视图的位置信息,即确定View的四个顶点
// 即确定了视图的位置
mLeft = left;
mTop = top;
mRight = right;
mBottom = bottom;

mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
}

确定了自身的位置后,就要通过onLayout()确定子View的布局。onLayout()是一个可继承的空方法。
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
}
如果当前View就是一个单一的View,那么没有子View,就不需要实现该方法。

如果当前View是一个ViewGroup,就需要实现onLayout方法,该方法的实现个自定义ViewGroup时其特性有关,必须自己实现。

由此便完成了一层层的的布局工作。

View的布局流程:


3985563-8aefac42b3912539.png

四、Draw过程

View的绘制过程遵循如下几步:
①绘制背景 background.draw(canvas)

②绘制自己(onDraw)

③绘制Children(dispatchDraw)

④绘制装饰(onDrawScrollBars)

从源码中可以清楚地看出绘制的顺序。
public void draw(Canvas canvas) {
// 所有的视图最终都是调用 View 的 draw ()绘制视图( ViewGroup 没有复写此方法)
// 在自定义View时,不应该复写该方法,而是复写 onDraw(Canvas) 方法进行绘制。
// 如果自定义的视图确实要复写该方法,那么需要先调用 super.draw(canvas)完成系统的绘制,然后再进行自定义的绘制。
...
int saveCount;
if (!dirtyOpaque) {
// 步骤1: 绘制本身View背景
drawBackground(canvas);
}

// 如果有必要,就保存图层(还有一个复原图层)
// 优化技巧:
// 当不需要绘制 Layer 时,“保存图层“和“复原图层“这两步会跳过
// 因此在绘制的时候,节省 layer 可以提高绘制效率
final int viewFlags = mViewFlags;
if (!verticalEdges && !horizontalEdges) {

if (!dirtyOpaque)
// 步骤2:绘制本身View内容 默认为空实现, 自定义View时需要进行复写
onDraw(canvas);

......
// 步骤3:绘制子View 默认为空实现 单一View中不需要实现,ViewGroup中已经实现该方法
dispatchDraw(canvas);

........

// 步骤4:绘制滑动条和前景色等等
onDrawScrollBars(canvas);

..........
return;
}
...
}

无论是ViewGroup还是单一的View,都需要实现这套流程,不同的是,在ViewGroup中,实现了 dispatchDraw()方法,而在单一子View中不需要实现该方法。自定义View一般要重写onDraw()方法,在其中绘制不同的样式。
3985563-594f6b3cde8762c7.png

五、总结

从View的测量、布局和绘制原理来看,要实现自定义View,根据自定义View的种类不同,可能分别要自定义实现不同的方法。但是这些方法不外乎:onMeasure()方法,onLayout()方法,onDraw()方法。

onMeasure()方法:单一View,一般重写此方法,针对wrap_content情况,规定View默认的大小值,避免于match_parent情况一致。ViewGroup,若不重写,就会执行和单子View中相同逻辑,不会测量子View。一般会重写onMeasure()方法,循环测量子View。

onLayout()方法:单一View,不需要实现该方法。ViewGroup必须实现,该方法是个抽象方法,实现该方法,来对子View进行布局。

onDraw()方法:无论单一View,或者ViewGroup都需要实现该方法,因其是个空方法
  收起阅读 »

环信公开课第35期-手把手教学开发直播小程序

微信小程序,依托微信,已经越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户每次使用都有较复杂的路径,很难培养用户的使用习惯,而小程序呢?使用之后有永久留存,用户下次再使用可以瞬间找到入口,大大提升用户使用直播的习惯。直播商业化最难的地方在于哪里?在于流量,微信有庞大的低成本的流量可以帮助你去获得用户,转化用户。小程序直播可以说是你商业化用户最好的工具,同样也是你客户商业化微信流量的最好的工具。直播和购物的结合比较经典的,也是我们课程主要剖析的一个项目就是“超级购物台”——直播购物小程序。

574444888629916042.jpg



公开课参与
开课时间:2018年8月8日15:00
课程时长:40分钟
课程亮点:全国首个小程序直播购物Demo分享。手把手搭建基于环信的小程序直播购物平台
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与
 
课程大纲:

环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】包括环信后台创建及api 方式创建。
3、【房间主播及推流拉流地址设置】创建直播。主播绑定房间,房间设置直播地址。

小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置已有房间到小程序进行直播推流拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及聊天功能特殊情况处理】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效等的一些延时。
答疑送奖品:
从提问中抽5名同学送出环信定制T恤,大家多多提问互动
TIM图片20180803110129.jpg

 
公开参与:报名听课
继续阅读 »
微信小程序,依托微信,已经越来越多的新功能不断上线,流量入口的不断增加,俨然成为互联网公司“必争之地”。 传统的公众号第三方直播由于入口较深,用户每次使用都有较复杂的路径,很难培养用户的使用习惯,而小程序呢?使用之后有永久留存,用户下次再使用可以瞬间找到入口,大大提升用户使用直播的习惯。直播商业化最难的地方在于哪里?在于流量,微信有庞大的低成本的流量可以帮助你去获得用户,转化用户。小程序直播可以说是你商业化用户最好的工具,同样也是你客户商业化微信流量的最好的工具。直播和购物的结合比较经典的,也是我们课程主要剖析的一个项目就是“超级购物台”——直播购物小程序。

574444888629916042.jpg



公开课参与
开课时间:2018年8月8日15:00
课程时长:40分钟
课程亮点:全国首个小程序直播购物Demo分享。手把手搭建基于环信的小程序直播购物平台
课程形式:网络直播 全国各地区、联网电脑、联网手机均可免费参与
 
课程大纲:

环信直播技术流程
1、【环信账号准备】注册、认证。
2、【直播间创建】包括环信后台创建及api 方式创建。
3、【房间主播及推流拉流地址设置】创建直播。主播绑定房间,房间设置直播地址。

小程序技术分享
1、【创建小程序项目】创建好已有UI的小程序项目。
2、【环信小程序sdk集成】基于webIM sdk 开发的小程序版本SDK集成配置。
3、【配置已有房间到小程序进行直播推流拉流测试】模拟直播间,使用推流工具进行推流测试。
4、【开发直播间聊天功能及聊天功能特殊情况处理】利用小程序SDK进行直播聊天室聊天开发。弹幕、特效等的一些延时。
答疑送奖品:
从提问中抽5名同学送出环信定制T恤,大家多多提问互动
TIM图片20180803110129.jpg

 
公开参与:报名听课 收起阅读 »

滴滴!“全村的希望”环信T恤已发出,收到的同学打个卡

千呼万唤!经过与工厂沟通无数沟通,环信T恤量产到货啦!中奖同学收到了吗?

TIM图片20180802190143.jpg

实物图


希望款:
环信机器人,正面是我们美女设计师设计的三个机器人,扛着“全镇的希望”,“全县的希望”,“全环信的希望”三个小旗,背面印有“全村的希望”
IM款:
正面:IM
背面:IM (即时通讯)
 
活动回顾:【有奖调查】环信T恤文案征集,你来我们就送!
中奖名单:
  • 楼层6:Eternally(额外奖励,提建议被采纳)
  • 楼层8:°﹏D.X.F.VIP 
  • 楼层18:空谷幽兰
  • 楼层28:skoxe
  • 楼层38.咚咚

  欢迎大家以后多参加我们活动,除了T恤还有更多礼品送出,感谢继续支持环信!
继续阅读 »
千呼万唤!经过与工厂沟通无数沟通,环信T恤量产到货啦!中奖同学收到了吗?

TIM图片20180802190143.jpg

实物图


希望款:
环信机器人,正面是我们美女设计师设计的三个机器人,扛着“全镇的希望”,“全县的希望”,“全环信的希望”三个小旗,背面印有“全村的希望”
IM款:
正面:IM
背面:IM (即时通讯)
 
活动回顾:【有奖调查】环信T恤文案征集,你来我们就送!
中奖名单:
  • 楼层6:Eternally(额外奖励,提建议被采纳)
  • 楼层8:°﹏D.X.F.VIP 
  • 楼层18:空谷幽兰
  • 楼层28:skoxe
  • 楼层38.咚咚

  欢迎大家以后多参加我们活动,除了T恤还有更多礼品送出,感谢继续支持环信! 收起阅读 »

【开源项目】全国首个开源直播小程序源码

今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。
 
微信图片_20180725162426.jpg


作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
直播购物小程序源码github地址:https://github.com/YuTongNetworkTechnology/wechat_live/tree/master 
git打不开可直接点下面链接下载



预览图.jpg

直播购物小程序运行预览图 
 
小程序体验指南(仅需两步):
 
1、下载微信小程序开发工具,下载地址:https://developers.weixin.qq.c ... .html 
 
Catch9A07(07-20-17-38-30).jpg

2、导入源码:将附件的源码解压直接导入 


Catch1C69(07-20-17-38-30).jpg


环信小程序直播技术文档
一、 使用的技术
1、 环信IM直播室。
2、 微信小程序实时音视频播放组件live-player。
3、 推流软件(obs、易推流)等推流。
4、 视频流服务器(UCLOUD、七牛、腾讯)等视频流服务器。
二、 系统使用流程。
1、 视频推流软件将视频流推到流服务器。
2、 打开视频直播demo小程序注册环信账号。
3、 进入软件直播室进行测试。
三、 技术流程及使用的SDk
1、 注册环信账号
打开https://www.easemob.com/ 环信官网,点击右上角注册按钮,选择[注册即时通讯云]
1.png

填写对相关信息进行注册

2.png

注册成功后进行登录
3.png

注:新注册用户需进行账号的认证。
2、 直播应用创建
登录成功点击应用列表选择创建应用
4.png

输入应用名称等信息
 

5.png

创建成功后点击应用进入

6.png

需要注意的是应用的OrgName 和AppName这两个是以后都需要用到的两个参数变量
7.png

3、 直播创建
1)在创建直播之前需要对应用进行设置首先需要设置应用的直播流地址
第一步获取应用管理员的Token
curl -X POST "https://a1.easemob.com/[应用OrgName]/[应用AppName]/token" -d '{"grant_type":"client_credentials","client_id":"[应用client_id]","client_secret":"[应用] client_secret"}'
返回格式
{
"access_token":"YWMtWY779DgJEeS2h9OR7fw4QgAAAUmO4Qukwd9cfJSpkWHiOa7MCSk0MrkVIco",
"expires_in":5184000,
"application":"c03b3e30-046a-11e4-8ed1-5701cdaaa0e4"












第二步设置直播流地址
curl -X POST -H "Authorization: Bearer [管理员Token]"  " https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms/stream_url -d '{"pc_pull":"[pc拉流地址]","pc_push":"[pc推流地址]","mobile_pull":"[手机拉流地址]","mobile_push":"[手机推流地址]"}'"
成功返回格式:
{
"action": "post",
"application": "e1a09de0-0e03-11e7-ad8e-a1d913615409",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"pc_pull": true,
"mobile_push": true,
"mobile_pull": true,
"pc_push": true
},
"timestamp": 1494084474885,
"duration": 1,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












2)创建主播
点击IM用户

8.png

点击注册IM用户

9.png

填写用户信息

10.png

创建用户的过程同样也可以通过REST API形式进行
curl -X POST -i " https://a1.easemob.com/[应用OrgName]/[应用AppName]/users" -d '{"username":"[用户名]","password":"[密码]"}'

注:应用必须为开放注册

11.png

将注册的用户添加为主播
curl -X POST -H "Authorization: [管理员Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/super_admin -d'{"superadmin":"[IM用户名]"}'
返回结果示例:
{
"action": "post",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"result": "success"
},
"timestamp": 1496236798886,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












3)创建直播
点击直播

12.png

点击新建房间

13.png

填写房间信息
14.png

创建房间同时也可以使用REST API形式进行详情可以查看http://docs.easemob.com/im/live/server-integration环信官方文档。
4、 小程序demo集成使用
小程序直播购物demo集成官方WebIM SDK详情请查看https://github.com/easemob/webim-weixin-xcx
Demo具体配置如下
打开demo 下sdk配置文件

15.png

修改appkey为自己应用的appkey

16.png

打开pages/live/index.js修改房间默认拉流地址及直播间房间号

17.png

四、 扩展说明
Demo中房间为固定测试房间,实际使用中应获取环信直播的房间信息及房间列表。具体如下:
获取直播间列表:
curl -X GET -H "Authorization: Bearer  [用户Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms?ongoing=true&limit=[获取数量]&cursor=[游标地址(不填写为充开始查询)]

响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params": {
"cursor": [
"ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6MzE"
],
"ongoing": [
"true"
],
"limit": [
"2"
]
},
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": [
{
"id": "1924",
"chatroom_id": "17177265635330",
"title": "具体了",
"desc": "就咯",
"startTime": 1495779917352,
"endTime": 1495779917352,
"anchor": "wuls",
"gift_count": 0,
"praise_count": 0,
"current_user_count": 8,
"max_user_count": 9,
"status": "ongoing",
"cover_picture_url": "",
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1"
},
{
"id": "1922",
"chatroom_id": "17175003856897",
"title": "香山",
"desc": "随便",
"startTime": 1495777760957,
"endTime": 1495777760957,
"anchor": "sx001",
"gift_count": 0,
"praise_count": 8,
"current_user_count": 1,
"max_user_count": 3,
"status": "ongoing",
"cover_picture_url": "http://127.0.0.1:8080/easemob- ... ot%3B,
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1"
}
],
"timestamp": 1496303336669,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"cursor": "ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6NDk",
"count": 2
}












获取直播间详情:
curl -X GET -H "Authorization: Bearer [用户Token]" " https://a1.easemob.com/[应用OrgName]/[应用AppName]/[房间id]/status"
响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"liveRoomID": "1946",
"status": "ongoing"
},
"timestamp": 1496234759930,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"count": 0
}














 
使用环信直播购物小程序遇到任何问题欢迎跟帖讨论。
继续阅读 »
今天你看直播了吗?
拥有10亿微信生态用户的小程序已经成为了继移动互联后的又一个现象级风口,随着微信小程序对外开放实时音视频录制及播放等更多连接能力,小程序与直播强强联合,在各行各业找到了非常多的玩法,小程序直播相比微信直播和APP直播更加简洁、流畅、低延时、多入口等众多优势迅速向商业直播领域及泛娱乐直播领域蔓延。从小游戏、内容付费、工具、大数据、社交电商创业者到传统品牌商们,都在努力搭上小程序直播这辆快车,以免错过微信生态里新的流量洼地。
 
微信图片_20180725162426.jpg


作为一名环信生态圈资深开发者,本着对技术的热衷,对环信的眷恋和对党的忠诚,基于环信即时通讯云写了“直播购物小程序”,目前项目源码已全部免费开放,希望对有需求的企业和开发者提供一个思路和参考。
直播购物小程序源码github地址:https://github.com/YuTongNetworkTechnology/wechat_live/tree/master 
git打不开可直接点下面链接下载



预览图.jpg

直播购物小程序运行预览图 
 
小程序体验指南(仅需两步):
 
1、下载微信小程序开发工具,下载地址:https://developers.weixin.qq.c ... .html 
 
Catch9A07(07-20-17-38-30).jpg

2、导入源码:将附件的源码解压直接导入 


Catch1C69(07-20-17-38-30).jpg


环信小程序直播技术文档
一、 使用的技术
1、 环信IM直播室。
2、 微信小程序实时音视频播放组件live-player。
3、 推流软件(obs、易推流)等推流。
4、 视频流服务器(UCLOUD、七牛、腾讯)等视频流服务器。
二、 系统使用流程。
1、 视频推流软件将视频流推到流服务器。
2、 打开视频直播demo小程序注册环信账号。
3、 进入软件直播室进行测试。
三、 技术流程及使用的SDk
1、 注册环信账号
打开https://www.easemob.com/ 环信官网,点击右上角注册按钮,选择[注册即时通讯云]
1.png

填写对相关信息进行注册

2.png

注册成功后进行登录
3.png

注:新注册用户需进行账号的认证。
2、 直播应用创建
登录成功点击应用列表选择创建应用
4.png

输入应用名称等信息
 

5.png

创建成功后点击应用进入

6.png

需要注意的是应用的OrgName 和AppName这两个是以后都需要用到的两个参数变量
7.png

3、 直播创建
1)在创建直播之前需要对应用进行设置首先需要设置应用的直播流地址
第一步获取应用管理员的Token
curl -X POST "https://a1.easemob.com/[应用OrgName]/[应用AppName]/token" -d '{"grant_type":"client_credentials","client_id":"[应用client_id]","client_secret":"[应用] client_secret"}'
返回格式
{
"access_token":"YWMtWY779DgJEeS2h9OR7fw4QgAAAUmO4Qukwd9cfJSpkWHiOa7MCSk0MrkVIco",
"expires_in":5184000,
"application":"c03b3e30-046a-11e4-8ed1-5701cdaaa0e4"












第二步设置直播流地址
curl -X POST -H "Authorization: Bearer [管理员Token]"  " https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms/stream_url -d '{"pc_pull":"[pc拉流地址]","pc_push":"[pc推流地址]","mobile_pull":"[手机拉流地址]","mobile_push":"[手机推流地址]"}'"
成功返回格式:
{
"action": "post",
"application": "e1a09de0-0e03-11e7-ad8e-a1d913615409",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"pc_pull": true,
"mobile_push": true,
"mobile_pull": true,
"pc_push": true
},
"timestamp": 1494084474885,
"duration": 1,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












2)创建主播
点击IM用户

8.png

点击注册IM用户

9.png

填写用户信息

10.png

创建用户的过程同样也可以通过REST API形式进行
curl -X POST -i " https://a1.easemob.com/[应用OrgName]/[应用AppName]/users" -d '{"username":"[用户名]","password":"[密码]"}'

注:应用必须为开放注册

11.png

将注册的用户添加为主播
curl -X POST -H "Authorization: [管理员Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/super_admin -d'{"superadmin":"[IM用户名]"}'
返回结果示例:
{
"action": "post",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"result": "success"
},
"timestamp": 1496236798886,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui"
}












3)创建直播
点击直播

12.png

点击新建房间

13.png

填写房间信息
14.png

创建房间同时也可以使用REST API形式进行详情可以查看http://docs.easemob.com/im/live/server-integration环信官方文档。
4、 小程序demo集成使用
小程序直播购物demo集成官方WebIM SDK详情请查看https://github.com/easemob/webim-weixin-xcx
Demo具体配置如下
打开demo 下sdk配置文件

15.png

修改appkey为自己应用的appkey

16.png

打开pages/live/index.js修改房间默认拉流地址及直播间房间号

17.png

四、 扩展说明
Demo中房间为固定测试房间,实际使用中应获取环信直播的房间信息及房间列表。具体如下:
获取直播间列表:
curl -X GET -H "Authorization: Bearer  [用户Token]"  https://a1.easemob.com/[应用OrgName]/[应用AppName]/liverooms?ongoing=true&limit=[获取数量]&cursor=[游标地址(不填写为充开始查询)]

响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"params": {
"cursor": [
"ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6MzE"
],
"ongoing": [
"true"
],
"limit": [
"2"
]
},
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": [
{
"id": "1924",
"chatroom_id": "17177265635330",
"title": "具体了",
"desc": "就咯",
"startTime": 1495779917352,
"endTime": 1495779917352,
"anchor": "wuls",
"gift_count": 0,
"praise_count": 0,
"current_user_count": 8,
"max_user_count": 9,
"status": "ongoing",
"cover_picture_url": "",
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1924_1"
},
{
"id": "1922",
"chatroom_id": "17175003856897",
"title": "香山",
"desc": "随便",
"startTime": 1495777760957,
"endTime": 1495777760957,
"anchor": "sx001",
"gift_count": 0,
"praise_count": 8,
"current_user_count": 1,
"max_user_count": 3,
"status": "ongoing",
"cover_picture_url": "http://127.0.0.1:8080/easemob- ... ot%3B,
"pc_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"pc_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_pull_url": "rtmp://vlive3.rtmp.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1",
"mobile_push_url": "rtmp://publish3.cdn.ucloud.com.cn/ucloud/easemob-demo_chatdemoui_1922_1"
}
],
"timestamp": 1496303336669,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"cursor": "ZGNiMjRmNGY1YjczYjlhYTNkYjk1MDY2YmEyNzFmODQ6aW06Y2hhdHJvb206ZWFzZW1vYi1kZW1vI2NoYXRkZW1vdWk6NDk",
"count": 2
}












获取直播间详情:
curl -X GET -H "Authorization: Bearer [用户Token]" " https://a1.easemob.com/[应用OrgName]/[应用AppName]/[房间id]/status"
响应:
{
"action": "get",
"application": "4d7e4ba0-dc4a-11e3-90d5-e1ffbaacdaf5",
"uri": "http://127.0.0.1:8080/easemob- ... ot%3B,
"entities": [ ],
"data": {
"liveRoomID": "1946",
"status": "ongoing"
},
"timestamp": 1496234759930,
"duration": 0,
"organization": "easemob-demo",
"applicationName": "chatdemoui",
"count": 0
}














 
使用环信直播购物小程序遇到任何问题欢迎跟帖讨论。 收起阅读 »