一行代码三个Bug 专业写Bug十余载 False Unused “private” methods should be removed

不用不知道,一用吓一跳,原来这么多Bug,这么多坏味道。sonarqube就是神一样的存在,能把代码中各种不规范,各种逻辑漏洞,各种容易出问题的写法都一一指出来,并附带了详细的说明与修改参考,可谓是一个Coding利器。被sonarqube不断的“调教”,代码就越来越规范,整个团队的代码就越来越统一。这个过程是有点小小的煎熬。sonarqube就像一位不会生气的好同事,一点一点帮我把所有写得不好的地方指出来,再怎么煎熬也是值得。

相见恨晚

第一次见到sonarqube就非常喜欢TA,这远远超出了我早前设想的代码检查工具,采用反射+正则进行代码分析,既然有现成的sonarqube,我也没有太大的动力去实现这个梦想中的想法。这已经是第二次写sonarqube了,每一次写,感触都不一样。

sonarqube Bug

每次去坏味道,一个一个去,一个一个调整,处理到private method的时候,都有点抓狂,明明这个private methed被使用到了,却一直提示False Unused “private” methods should be removed,这个事情都有点冲动,想要写一个自己的代码分析器,不想被sonarqube调戏。今天查了好久的资料,终于在stackoverflow查到,这原来是sonarqube的一个bug,最新的版本,已经没有这问题了。

使用sonarqube的过程,就是养成一种coding习惯的问题,不用刻意去记要这样写要那样写,这规则那规则,跑起sonarqube,让工具来告诉你哪里不合理,哪里要调整,多经历几次 ,就自然的养成了一种全球化的规范coding习惯。

图书云公众号二维码

图书云公众号二维码

  1. 代码不要嵌套太深

​sonarqube会告诉你,代码不能超过三层嵌套,要直观明了,不能一层一层无限嵌套。try算一层if算一层while算一层for也算一层,一般来讲,不用sonarqube来检查,很容易凭自己的感觉写出深度嵌套的代码。嵌套越深,意味着代码的复杂度越高,越难维护。有的时候,自己不觉得,别人接手的话,会很痛苦。这大概,是sonarqube这个规则的出发点。所以,依据这个规则提示,重构代码,如果层次要越过3层了,就赶紧写个新的方法,这样子避免一个方法中的嵌套越过3层。依据09年在人力资本职场所学到的经验,通常,人类不擅长处理5个因子以上事情,能控制在3个因子里,效率更高。所以,我们尽量拆解拆解,像sonarqube这个嵌套检查规则,不要超过3层。

2.驼峰命名

如果写习惯了C#的BLL,跑到java里,写bll,是不是感觉很别扭,按sonarqube的提示去修改吧,也不用太刻意想,跑sonarqube,这些小细节,都能查出来!编码规范就是这么被执行的,不用人来review代码规范,用工具就统一了。

3.判断的时候值在前还是变量在前

sonarqube会要求你把值写在前面,这里面有什么故事么?可以使用公众号回复why查看原因。

4.catch到exceptiony请写日志

悄悄的吞掉ex,那怎么行,sonarqube不会给通过的,代码都发布不了。想想也是,有了异常,连个日志都不写,是有点不妥。

5.不关闭文件操作网络操作可不行

sonarqube会告诉你,有文件流操作没有关闭,让补上。一般网上找代码,拿过来用,都可能会有这啊那的问题,拿sonarqube做个检查,是再好不过的。

6.没用的参数去掉

如果定义了多个参数,但是有的参数却不使用,sonarqube,会要求你删除掉。

7.定义了本地变量不使用

不行,sonarqube不允许。

8.定义了一个本地变量,用了一次

不行,sonarqube提示你,是不是可以省下这个本地变量

9.是不是使用lambda

sonarqube会跟你说,有更简洁的lambda写法,请换个写法

10.你看,那对括号可以省掉

如果在filter,多加了括号,sonarqube会跳出来,告诉你,省下这两个括号。

11.哎呀,重复代码

sonarqube控制代码重复,重构,再重构,达到sonarqube的要求。这个地方最最让人揪心的是单元测试与重复代码的前世今生。回复powermock查看我写单元测试的经验心得。

12.布尔条件请合并合并

sonarqube告诉你,不要秀两个if,合并成一条吧。

还有很多很多sonarqube的Coding提示,内置了很多优秀的coding风格,说这么多,也是希望每一位朋友都能重视代码质量,都能使用一下sonarqube,相信你也会喜欢这款代码质量检查工具,对于公司,对于团队,对于个人来讲,都是一个非常不错的研发质量保证工具。

发表在 未分类 | 留下评论

大学、中小学校园图书馆如何接入图书云平台

图书云是免费图书共享平台,任何个人、企事业单位都使用或接入到图书云平台。校园图书馆接入图书云的几大好处:

一、无限可能的藏书量

通过图书云平台,每位学生都可以是一个私人图书馆馆长,虽然单个学生的图书有限,但是学生多,整体的藏书量相当可观。

二、更加丰富图书品类

与校园图书馆每年有仅有限的经费支撑不同,学生的藏书量有学习成长动力支撑,有学生的兴趣爱好支撑。多元化的品类,更加丰富的图书品类,也能与校图书馆形成良好的互补机制。

三、更加新鲜的图书

有没有一种感觉,学校的图书偏老偏旧,市场上都不再使用或落伍的技术占满墙。你能想像满墙满墙的《delphi从入门到精通》么?学生的藏书,不受学校采购计划等各种因素影响,世界之么大,说买就买。学校就不能这么任性。

四、微信图书馆免费开启

通过图书云的校园图书馆解决方案,每个学校都可以有快速建立起微信图书馆,通过微信小程序为学生提供更加便利的图书检索、借阅通知、发送催还提醒、预约借阅等等功能。

接入流程与步骤

图书云校园解决方案包括两大块,共享图书+校园微信书馆,均为免费提供。接入流程与步骤如下:

1、联系图书云运营微信13439975582,洽谈接入意向

2、签定接入合作意向

3、对接系统

4、上线试运营2个月

5、正式上线

图书云公众号二维码
图书云公众号二维码

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

感谢以下赞助商对图书云的支持:

发表在 未分类 | 留下评论

图书云1.1.3.7校园图书共享优化版上线啦 简化流程,减少输入量 使用图书云校园图书共享功能 开启有智慧的青春校园读书生活

每个版本的背后,都有一个……一个故事!图书云1.1.3.7校园共享图书优化版基于海医学院实战经验总结而来。依据改版之前,要想加入图书云校园图书共享,需要输入手机号姓名,有些繁琐。改版后,不再需要输入手机号与姓名,加入后,可以通过图书云公众号沟通,无需花费短信费或电话费。

化繁为简

本次改版,不仅是学生群体使用体验的改版,更重要的是图书云运营策略的改变,更加开放的共享体验,更加简单的加入方式!简单,就是本次改版的核心理念!将原申请开通学校流程移除掉,学生可以自发开启校图共享!

体验方式

本次图书云1.1.3.7版本已经于2019年6月10日完成发布,全网均可直接使用!对于使用上的建议也可以随时通过图书云公众号反馈,也许你所想的的功能,你想要的体验就是下一个版本的主打。

抢前体验

图书云1.1.3.8会带来哪些新鲜的功能,带来哪些惊喜呢?欢迎加入图书云内测体验,请联系微信13439975582抢内测名额,请注明:图书云内测名额。

图书云公众号二维码
图书云公众号二维码

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

感谢以下赞助商对图书云的支持:

发表在 未分类 | 留下评论

图书云1.1.3.6小区精度优化版发布 1.1.3.7校园图书共享流程优化预告 图书云共享平台持续更新升级中 只为您更好的共享

图书云新版本发布

图书云1.1.3.6小区精度优化版发布 

本次图书云发布的小区共享功能精度优化,充分考虑了图书云用户反馈的小区位置识别体验,经过产品的探索与权衡,推出此版! 图书云共享平台持续更新升级中,只为您更好的共享图书!在此,也感谢为图书云提出建议的各位朋友,虽然未曾谋面,但是你们对图书云的每一个建议,都将让图书云做得更好。图书云也将不断聆听用户的心声,不断的完善图书云功能与流程。也希望越来越多的朋友能积极反馈自己的想法与建议。

精度优化背景

本次1.1.3.6优化背景是基于一位网名为【上官振宏】的网友建议,他提出了小区识别方面的不足,导致每次加入图书云小区共享都会被图书云拦截。本次通过优化精度,基本上不会出现被莫名拦截了。同时,也针对【上官振宏】反馈的通过小区分享码未能进入到小程序功能页问题,进行了优化。目前新版本1.1.3.6都能进行更好的玩转图书云小区共享了。

图书云小区共享攻略

书非借不可读也,组建一个小区读书俱乐部,定期约小区朋友一起看看书,成长就在点滴积累中!可以是读读古典小说,也可以是玄幻科幻,亦可是IT技术、学术研究,书中自有黄金屋!

上线速度

本次1.1.3.6的上线速度受限于有关部门的审核中,通常上线是1个工作日,本次上线花了15个工作日。感慨一下,人在江湖,身不由己!

图书云1.1.3.7校园图书共享流程优化预告

图书云1.1.3.7将重点放在了校园图书共享流程的优化上,虽然新版本还未上线,但是功能已经发布出去。现在校园图书共享流程更加简洁了,学生群体可以直接加入自己所在的学校进行图书共享。同时,图书云1.1.3.7优化了沟通消息通知,借阅状态的变化都会通知双方,引导双方进行沟通。预计1个工作日可发布,敬请期待。

图书云公众号二维码

图书云公众号二维码

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

感谢以下赞助商对图书云的支持:

发表在 未分类 | 留下评论

腾讯云通信聊天记录同步实战 与云通信巨头合作的点点滴滴 技术选型、技术实现、同步方案设计统统一线切身体会 躺坑在前 后来人有福啦

腾讯云通信聊天记录同步实战,与云通信巨头合作的点点滴滴,涉及技术选型、技术实现、同步方案设计,统统一线切身体会,躺坑在前,后来人有福啦!

云通信选型

比较了阿里旺信、网易云通信、容云通信、极光IM多款产品,一轮选型,直接锁定在阿里与腾讯云通信,这个主要是选择大品牌的出发点。第二轮锁定在腾讯云通信,这个的出发点在于,腾讯的微信可能会屏蔽阿里产品,就像淘宝之类的产品,在微信都是可能屏蔽掉的。再一个就是,旺信的文档显示,这个产品提供的文档很少很有限。相对之下,腾讯云通信的资料还是更齐全。

聊天记录同步技术方案

有两种方案可以将历史聊天记录保存下来,一是对接腾讯云通信的聊天回调通知,实时接收聊天信息。另一个方案是周期性拉取腾讯云通信的聊天记录。我们选择了方案二。因为方案一是实时的,如果聊天过于火爆,可能会我方的服务器带来压力。方案二,则不会出现压力问题,我们只需要慢慢的去拉取,有点错峰处理的意思。

历史聊天记录同步的技术实现

技术实现上,采用java开发语言堆出来一个后台服务程序,这个后台程序运用到了redis,myql,cron,springframework,ibatis、分布式锁,在遵循代码中的方法不能有超过一屏,严格区分bll,service,agent等代码规范要求下,实现了一版历史聊天记录同步程序。

1.分布式锁的运用

为了防止多个服务器实时并发跑,造成重复拉取,我们要运用分布式锁。最开始的时候,当同事们聊到分布式锁,我感觉好高大上啊。当我打开工历史代码,仔细看看目前的三种实现方式,就感觉,嗯嗯。1.是使用mamcache,2.是使用redis,3是使用zookeeper。经过咨询多个前辈。这个项目,就选redis了,因为我们需要使用redis做些缓存,正好又拿来实现分布式锁。这个是基于redis.setnx,原子性操作,如果key存在,则会设置失败,利用这个特性,实现了一个分布式锁。

2.cron+springframework

作业的调度,采用了springframework的任务调度功能(schedule),配置一个cron,感觉还是很方便。想想不用自己去创建线程,不用自己去启动线程,只需要安心的写业务代码,有点小小的开心。

3.ibatis

嗯嗯,ibatis几乎融合在所有的项目里,用来操作数据库,还是很贴心的。就不再八卦了,

4.严格的代码规范

一个方法的长度不能超过一屏。嗯嗯,怪不得有同事把屏幕坚起来写代码。我的字体设置的比较大,又是横屏显示,这个有点点挑战。我先把主体逻辑写完,以业务实现为目标,完成业务代码的实现,这个阶段,我并不太考虑代码分层是否合理,一个方法的代码是否在一屏之内。等业务逻辑实现好了,我再进行代码重构,要拆的拆,要分的分,这种方式还是很不错。一边写,一边可以思考怎么拆更合理,等业务实现完了,基本上对代码重构有了一个完整的重构思路。当然,找一个有经验的同事一起重构是最重要的经验啦。

5.我们的代码逻辑

一个分布式锁,一个按天调度逻辑,一个按小时调试循环,再到聊天文件解析,将图片链接替换成长期存储连接。

小结

今天主要介绍了一下我们与云通信巨头对接历史聊天记录的实战经验,你应该能知晓我们为什么在众多云通信厂商中选择腾讯云!并了解我们历史聊天记录的同步方案以及所使用到的技术。好了,今天的分享就到这里了,一期文字,码了好久!期待下一期!

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

图书云共享图书不断迭代力图连接13亿个人图书成就全球最大图书馆 打破信息孤立 公众号与小程序用户体系流程整合

 

 

图书云公众号二维码

图书云公众号二维码

要想把一个产品做,那不断的迭代完善是避免不了的。图书云1.1.3.3体验版刚出,体验期才1天,就正式上线了。经过打通公众号与小程序用户体系,目前图书云已经正式支持小程序与图书云公众号的信息互通、体系互通。当用户在小程序发起借阅,藏书人将能收到图书云公众号推送的实时消息,不会耽误用户之间借书。试想一下,如果没有通知,同事借本书,尴尬得不要不要的。

做为专注共享图书的图书云平台,已经进入1.1.3.4的迭代周期,每一位用户都可以反馈使用体验与改进建议,我们会依据迭代周期排期,为用户增加更多的实用功能,让图书共享更加便捷!【跳过两张图书云靓照,还有文字哦】

图书云共享图书首页

图书云共享图书首页

图书云共享图书-共享经济

图书云共享图书-共享经济

图书云做为共享图书平台,支持个人、企业、公司、事业单位、学校、俱乐部等各类有图书互换环节的场景,看书是一个永恒的话题,活到老学到老。做为一名技术人,也要不断的学习更新自己的技术储备,除了看电子书,纸质书有着自己独特的视觉感观。系统的学习一门知识,安静的看看书,这也许是图书云为每位用户勾勒出的一种原生态生活。

图书云共享图书,为每一位爱书爱学习的用户而努力!请关注我们图书云公众号,让我们聆听您的心声。我们将不断的更新迭代,让您拥有更加便利的图书共享工具,让13亿中国人彼此连接,形成全世界最大的图书馆-图书云!

图书云公众号二维码

图书云公众号二维码

发表在 未分类 | 留下评论

是云主机还是肉机?小白怎么防范国外黑客的频繁骚扰骚扰 维护小主机的安全与稳定 一次实战经验分享 效果显著 持续跟进攻防智斗大黑客

技术岛公众号

技术岛公众号

最近发现有台云主机被黑了,挂了很多英文的商品信息。站点里多出了很多【木马】文件。ChinaHadoop.org是一个简单的站点,也没有什么文章,但是却招来黑客,这个着实有些尴尬。

整个站点被嵌入了很多莫名奇妙的东西。因此,把网站重新安装了一遍,把整个网站全部删除掉了。为了防止国外黑客再次前来破坏网站,直接将国外IP全部封掉了,现在国外访问直接跳到一个广告页面。

这个黑客事件其实也是开源产品一个头疼的问题。虽然开源是免费的,但是开源也意味着代码是透明的,没有足够的安全机制,很容易出现这种事故。

把一个开源产品从头到位熟悉一遍,我觉得不够通用。直接从网络请求入口出发,进行IP限制管理,通过IP规则,将国外请求全部阻断。这个虽然没有完全解决掉问题,但是从攻击范围上来讲,已经屏蔽了很大一部分攻击了。同时开启,请求限制,将有风险的操作功能授权给个别IP,其他的IP只能查看静态页面即可,留言不需要,登陆不需要,评论也不需要。就是很纯粹的一个站点。

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论

玩转企业微信群聊机器人 用机器人定时提醒饭点 订餐时间 任务时间 下班时间 任务代办事项 每个人都可以快速拥有的一个Robot

今天突然发现企业微信群聊的时候有个机器人功能,点了点,玩起了企业微信群聊机器人。用企业微信群聊机器人可以实现很多有意思的功能,如果能给自己单独做个机器人就好了,现在必须拉个群才能玩,有点小尴尬!今天带大家玩一下企业微信群聊机器人,看起之后,你应该能够自大实现一个群聊机器人,并能开发出来定时提醒饭点、订餐时间、任务时间 下班时间、任务代办事项等等通知功能,来来,走一波~~

机器人入口

企业微信群聊机器人入口

企业微信群聊机器人入口

点击新创建机器人

创建企业微信群聊机器人

创建企业微信群聊机器人

创建完机器人,得到授权接口址址

企业微信群聊机器人设置

企业微信群聊机器人设置

这是一个非常轻量级的机器人,上手速度非常快,看看官方的入门文档配置,真的是秒入门,秒使用!接口地址自带授权token,完全不需要来回签名验证的,直接关心做自己最喜欢的机器人功能就好。

来瞅瞅官方文档与个人自媒体的差异:

官方文档是这么写,不喜欢看官方文档的可以直接跳过,到下面的实战环节!

如何使用群机器人在终端某个群组添加机器人之后,可以获取到webhook地址,然后开发者用户按以下说明构造post data向这个地址发起HTTP POST 请求,即可实现给该群组发送消息。下面举个简单的例子.假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=633a31f6-7f9c-4bc4-97a0-0ec1eefa589以下是用curl工具往群组推送文本消息的示例(注意要将url替换成你的机器人webhook地址,content必须是utf8编码):curl 'http://in.qyapi.weixin.qq.com/cgi-bin/webhook/send?key=633a31f6-7f9c-4bc4-97a0-0ec1eefa5898' \   -H 'Content-Type: application/json' \   -d '   {        "msgtype": "text",        "text": {            "content": "hello world"        }   }'当前自定义机器人支持文本(text)、markdown(markdown)两种消息类型。消息类型及数据格式文本类型{    "msgtype": "text",    "text": {        "content": "广州今日天气:29度,大部分多云,降雨概率:60%",        "mentioned_list":["wangqing","@all"],        "mentioned_mobile_list":["13800001111","@all"]    }}参数  必须  说明msgtype  true  消息类型,此时固定为textcontent  true  文本内容,最长不超过2048个字节,必须是utf8编码mentioned_list  false  userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_listmentioned_mobile_list  false  手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人markdown类型{    "msgtype": "markdown",    "markdown": {        "content": "实时新增用户反馈<font color=\"warning\">132例</font>,请相关同事注意。\n         >类型:<font color=\"comment\">用户反馈</font> \n         >普通用户反馈:<font color=\"comment\">117例</font> \n         >VIP用户反馈:<font color=\"comment\">15例</font>"    }}参数  必须  说明msgtype  true  消息类型,此时固定为markdowncontent  true  markdown内容,最长不超过2048个字节,必须是utf8编码目前支持的markdown语法是如下的子集:标题 (支持16级标题,注意#与文字中间要有空格)# 标题一## 标题二### 标题三#### 标题四##### 标题五###### 标题六加粗**bold**链接[这是一个链接](http://work.weixin.qq.com/api/doc)行内代码段(暂不支持跨行)`code`引用> 引用文字字体颜色(只支持3种内置颜色)<font color="info">绿色</font><font color="comment">灰色</font><font color="warning">橙红色</font>图片类型{    "msgtype": "image",    "image": {        "base64": "DATA",        "md5": "MD5"    }}参数  必须  说明msgtype  true  消息类型,此时固定为imagebase64  true  图片内容的base64编码md5  true  图片内容(base64编码前)的md5值注:图片(base64编码前)最大不能超过2M,支持JPG,PNG格式图文类型{    "msgtype": "news",    "news": {       "articles" : [           {               "title" : "中秋节礼品领取",               "description" : "今年中秋节公司有豪礼相送",               "url" : "URL",               "picurl" : "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"           }        ]    }}参数  必须  说明msgtype  true  消息类型,此时固定为newsarticles  是  图文消息,一个图文消息支持18条图文title  是  标题,不超过128个字节,超过会自动截断description  否  描述,不超过512个字节,超过会自动截断url  是  点击后跳转的链接。picurl  否  图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150消息发送频率限制每个机器人发送的消息不能超过20条/分钟。

实战环节

直接复制官方提供的curl命令执行的话,会报错,因为官方提供的是用来查看的,得调整一下,调整成这样子才可以跑起来:

curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx" -H "Content-Type: application/json"   -d "{\"msgtype\": \"text\",\"text\": {\"content\": \"hello world\" }}"

还有问题是curl发送中文的时候,在群里收到的是乱码,这个很让人揪心哦~。为了实现定时提醒功能,自然想到了windows定时任务!如果使用linux的话,也有类似的机制,今天就不介绍了。有同时使用jinkens做定时构建来玩,我也跳过了。我觉得今天的重点是还是使用一些比较常见的玩法。

如果喜欢使用english发信息的话,直接改改我上面提醒的curl命令,建个bat文件,现在windows任务中心创建一个定时任务就可以了。

玩法一 只能发英文的bot

 

  1. 建立一个bot.bat,内容跟截图错不多就可以。对于要提醒吃饭吃药下班做操等等提醒来说,只要将hello world修改成对应的英文内容就可。比如说:It is time for lanch.
  2. 企业微信群聊英文机器人enbot

    企业微信群聊英文机器人enbot

  3. 建立一个windows任务

win10进入任务管理直接输入“任务”,其他操作系统的话,可以在控制面板找找。

windows10任务计划入口

windows10任务计划入口

任务计划可以建很多,为了方便管理,建议先建一个目录叫做Robot,然后再新建任务计划到这个目录中。任务名字自己取,比如吃饭提醒什么的。

创建windows任务计划

创建windows任务计划

设置好触发时间

机器人任务计划配置

机器人任务计划配置

这里设置的是很天的上午11点50提醒。如果有些工作需要每周、每月提醒,则依据提示调整即可。

立即执行感受效果

立即执行机器人动作查看效果

立即执行机器人动作查看效果

到这里就完成了一个简单的bot机器人的设置,到约定时间,机器人就会执行,发送相应的消息。

玩法二 能发中文的bot

发英文的话,比较晦涩!不好Get到点。中文的bot可以使用其他脚本或开发语言完成,node.js\python都可以,不过,这里提供的方案是html+js+bat文件+winodws任务执行。

中文版企业微信群聊机器人

中文版企业微信群聊机器人

b.bat内容

start "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe" D:\robot\robot.html 

QywxRobot.html内容

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script src="jquery-3.4.1.min.js"></script></head><body>    <input id="robotUrl" style="width:100%" type="text" value="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx"/>  <textarea id="msg" style="width:100%;height:200px;" value="我是机器人好不"></textarea>  <button style="display:flex;margin:30px auto;" id="btnSend">发送</button>  <script>    //关注微信公众号 技术岛Jishudao 体验最新的技术潮流,获取更多实用小工具    //微信 13439975582    $(function(){      $("#btnSend").click(function(){        var botData = {            "msgtype": "text",            "text": {              "content": $("#msg").val()            }         };         $.ajax({            url: $("#robotUrl").val(),            type: 'post',            dataType: 'json',            data: JSON.stringify(botData),            success: function(res){              console.log(res)              if (res.code === 200) {                               }               },            error: function(e) {               }          });      });    });    </script></body></html>

jquery-3.4.1.min.js可以到网上找一个,也可以直接到我的仓库获取:https://github.com/Lancker/QywxRobot

任务设计可以参考上面的说明。

以上就是今天的玩转企业微信群聊机器人,欢迎加入【技术岛】微信技术交流群,加微信13439975582【注明技术岛】

发表在 未分类 | 留下评论

腾讯云通信、网易云通信、极光IM、阿里百川、容云通信国内云通信抉择之路 看云通信市场风云与掌控力 带腾讯云通信实战代码demo

技术岛公众号

技术岛公众号

我们的当前的需求:需要在web中集成聊天功能。我不知道为什么我们只考虑使用别人家的云通信,没有考虑自建聊天功能,那就干脆顺着这个思路看了看腾讯云通信、网易云通信、极光IM、阿里百川、容云通信。

历史上的今天

记得18年做过网易云通信的小程序集成,记忆依旧是那么的清晰,好像昨天的事情。记得18年看到腾讯云通信是10万用户都免费,今天睁大眼睛再看看,免费的版本只支持100用户,简单差太远了。

怎么选?

从品牌实力上来讲,腾讯+阿里。但是腾讯不跟阿里玩,阿里百川社区里阿里的人在谴责、吐槽,还支招使用NGINX隐藏阿里域名。虽然阿里百川免费,但是就冲微信喜欢百川这一条,我们直接Pass掉了阿里。我到是想使用免费的百川,只是想想阿里把我的10年TB店都封掉了,我也Pass掉阿里。

从SDK 上来讲,我觉得网易云算是比较完善的,阿里虽然被Pass掉,但是今天比较的结果来看,本身阿里对于h5、小程序的支持就缺失。腾讯云通信显得比较高傲,爱用不用,demo就这么丑丑的,小程序demo可以说是亮瞎了眼,功能都不齐全。网易云的demo到是比较良心,不过,想想啊,想想啊,看起来比较良心,实际也没有怎么太考虑真实用户怎么去集成与使用。拿网易云通信小程序集成来讲,还得看我之前的版本,官方压根就不是用来集成的,纯粹用来秀。

改良版本:https://github.com/Lancker/NIM_Web_Weapp_Demo

从收费上来讲,阿里是免费的,但是不建议使用!极光好像也是免费的,但是没有来得及尝试demo,我们已经决定使用腾讯云通信了。

腾讯云通信Demo

头一次看到这么奇葩的git仓库,把H5、小程序、iOS、安卓都放一起了。公司克隆下来老是中断,浏览器下载也老是断。最后想了一招,先使用云服务器,将仓库zip包下载到服务器,再用国内云盘的离线下载功能下载,再通过云盘下到本地。

实战第一步:先去腾讯云通信后台创建一个应用

实战第二步:下载sig生成的服务端代码,很多选择。今天尝试的php版本,本来是想使用java版本的,但是时间有限啊。先来看看php版本。

部署效果:

http://imphp.joke.dog/index.php   临时部署的,访问这个页面会生成三上用户sig值,后面登陆用到。类似于一个登陆授权token。

string(308) “eJxNjV1rgzAYRv*LtxvzTTQTB7uQflDX2lqqqwwhpE3sglStxhoZ**8Tt267PYfzPB9GtNo9sOOxbAtFVV8J48kA437EkotCyUyKeoBKNArQj2FVJTllilo1-xc0PKejGhiyATC4xLo1QleyFpRlatxDhBAMcEuvom5kWQwCAyIIWwB-Usmz*E4cGxxEfv-kacDBLJ7426nO3fnbwivz-BB55TVCUReHurvMUvN1H3pbvj73SeK-k9TEnX96ceRit7H6eJ5t2tVhAsE6yYgOhGvfPS4LLvftchqm5kWz4Nn4-AJSVVjS” bool(true) ======string(308) “eJxNjdtOg0AURf9lno09MzBcfCOtSakK0ppeTBNCYIAjwoww9hr-vQTr5XWtrL3P5OVxcZukqfxsdKyPSpA7AuRmwJiJRmOOou2hFp0GdjWJUpjFiY6NNvsXdFkVD6pn1ARg4HKDXqU4KGxFnOR62KOccwbwk*5E26FsesGAcsoMgD*psRbfiW2CTfnvHxY9frrfjP1o4mz2JU5Xp0Cm25G79O2pZ3jV*rBfUvl2lNYpaPNuYdGwdAq-9EK2LiYzaMTcquh2FETmg-KSj5k5r153WY3puHbD*t2JGueZfF0A5KJYdg__” bool(true) ======string(308) “eJxNj9tOg0AQQP*FZyOzCyvWpA8VSC2WNIipqSEhUIY6FSldFlI0-rsbrJfXc*bMZD6Mx2V8mW23h65WqRoaNG4MMC5GTAXWikpCqaHCVoF1NlnTUJFmKrVk8S9oi9d0VJoxG4DDRFjsLPHUkMQ0K9W4jwkhOMBP2qNs6VBrwYEJxi2AP6noDb8TxwaHid97tNM49CN3MS9Pifm8xNgtdg9H387aY1j2eL12EtMN5NynSbxKzHuM74bwfUa3ez3ezdpqk0fei90PwxXfiy7y8kD-yStr9bQgb1PF6yCPplPj8wunDlk9” bool(true)

我直接生成了三个用户的sig值,代码是用腾讯云通信demo代码简单改造而来。php的写法让我有点想吐了。就像好久没有坐公交车。来来来,上代码。

<?phpinclude 'TLSSigAPI.php';use Tencent\TLSSigAPI;final class ZuimeIM{    static private $private_key_string = <<<'EOT'-----BEGIN PRIVATE KEY-----MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgjVKC5YlaxSH8FFeqYac++yKIXQ6+edkSQC21+uUQivyhRANCAATtoD5MbgZ+h/O3Rdiu8c3B+BXktZrQXRgR39N0k/xzkTOkD5PZZfFCyUVHDjK9PiJ3iNqdE4HebFsiiSJu+xbC-----END PRIVATE KEY-----EOT;    static private $public_key_string = <<<'EOT'-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7aA+TG4Gfofzt0XYrvHNwfgV5LWa0F0YEd/TdJP8c5EzpA+T2WXxQslFRw4yvT4id4janROB3mxbIokibvsWwg==-----END PUBLIC KEY-----EOT;    public function testGenAndVerify($userCode){        $api = new TLSSigAPI();        $api->SetAppid(1400209531);//设置在腾讯云申请的appid        $api->SetPrivateKey(self::$private_key_string);//生成usersig需要先设置私钥        $api->SetPublicKey(self::$public_key_string);//校验usersig需要先设置公钥        $sig = $api->genSig($userCode);//生成usersig        $result = $api->verifySig($sig, $userCode, $init_time, $expire_time, $error_msg);//校验usersig    var_dump($sig);    var_dump($result);    }}$zuimeIM = new ZuimeIM();$zuimeIM->testGenAndVerify("test01");echo "======";$zuimeIM->testGenAndVerify("test02");echo "======";$zuimeIM->testGenAndVerify("test03");​

把官方的H5代码传上去(推荐使用filezilla ftp,开源免费好用)!index.html中的代码要调整一下,主要是换一下appid等,非常简单,直接看代码注释就换掉了。不再晒代码!直接看效果吧!

http://imphp.joke.dog/H5/index.html

后记:demo只是跑起来,真正的业务才刚刚开始!不过,至少知道怎么跑起来了!国内云通信还是有不少,但是他们没有真正站在集成的角度思考,坑苦了一般哥们做二次开发!统一云通信将是下一个趋势!

注意:本文中使用到的

http://imphp.joke.dog/index.php

http://imphp.joke.dog/H5/index.html

是临时搭建的,如果点不开的话,就自己再搭一个吧。喜欢玩服务器的,可以加好友!

发表在 未分类 | 留下评论

游戏vs工作 用游戏的玩法构建工作生态圈 工作大礼包 打怪升级与工作相结合 一个游戏化的工作平台 累计游戏化经验快乐成长起来!

谈到工作与游戏,感觉就是对立的两件事情,多少祖国花朵沉迷在游戏中不能自拔。多数人都喜欢玩游戏,但是一提到工作,就感觉累!那能不能把工作氛围设计成一种游戏的感觉,让大家上班像玩游戏一样呢?

关于设计一种游戏化工作文化或者说构建一个类游戏化工作平台,也是时不时在脑海里转啊转的,今天大概分享一下类游戏工作平台的想法,涉及一些思路与手段。

愿景:

今天我领到一个任务礼包,我很开心的做任务,拿到任务金币。积累一定金币后,我升级了!

工作度量

如果说完成任务能拿到经验值,那么公平起见,需要对每项工作进行合理的度量,以便为每个任务设置不同的经验值。累计经验值,转化成角色等级。如何度量工作呢?不同类型的工作得用不同的度量方式。对于软件开发任务,来说,综合TestCase数量、功能实现难度等,转化成同一基准的经验值。

​荣誉体系

游戏等级是游戏的追逐点,第一名,前三名,吃鸡、躺鸡、王者、荣耀、青铜。同样,做为一个游戏化工作平台,荣誉体系也是必不可少。对于新人来讲,从荣誉体系中很快可以找到能帮忙自己成长的同事,快速解决问题,快速升级。

任务设计团队

将项目拆解成合适大小的任务,让经验值与任务平衡,让工作玩家能不间断的处理任务拿到经验值,并确保任务设计的合理性与公平性,这对于一个游戏化工作平台来讲,是非常重要的。这不同于传统意义上的接包平台,需求粗,难度量。任务设计团队可专注于任务的设计,玩家可专注做任务。

师徒体系

对于新手来讲,有一个人带着,会比较好!怎么玩,怎么玩好,都能快速的进入节奏!

中间先来个小小的总结,把工作变成游戏,重要的是工作经验值度量!有了这个基础,就好将师徒体系、成长体系、挑战赛、排行榜等游戏体系的引入,让工作充满乐趣。我还想补充的是,建立一个游戏化工作生态圈需要一些工具来辅助,它们分别是自动化部署、自动化测试、无感任务平台、代码质量检查工具。为什么会这么说呢?且听详细分解。

一、自动化部署

日常琐碎的工作,除了消耗时间与体力,还能说有什么价值?这种重复性劳动,并不能让工作充值乐趣。自动化部署,将这块繁琐,吃力不讨好的事情省下来,让工作在乐趣的范围里。

二、自动化测试与压测

游戏化,意味着竞争,意味着抢经验值。不能因为竞争性导致个人疯狂抢任务,质量降低。严格的产品交付,压测标准,确保游戏化后的交付质量。

三、无感任务平台

游戏化工作平台,我觉得任务体系要自然一点,无感操作,或者能有好的体验感知也行。

四、代码质量检查工具

代码质量检查工具,首推sonarQube,没有用过的,赶紧去搜索下载使用一下。为什么要用这个工具呢?当然是要保证游戏化后,能有好的代码质量。工具也能辅助提醒工作玩家代码存在的bug、不规范。

嗯嗯,写了这么多,来个最后的总结吧!今天主要分享一个游戏化工作平台的设想!想想,无论何是何地,不管是在北京还是在上海,还是在18线小镇,进入到这么一个游戏工作平台,赚取经验值,每个月还能有RMB,这不是很好么!

技术岛公众号

技术岛公众号

发表在 未分类 | 留下评论