博客

  • 研发工程师有这几个研发管理工具 研发运维开心指数暴涨

    这篇文章适合在小公司成长的小伙伴,如果你恰好看到了,赶紧给自己的公司部署上这几个小工具,你会发现,省下了很多宝贵时间。将研发从代码开始就管理起来,嗯,就是这么神奇哦。

    在小公司有这么个特点,一个人要干的活超级多,有些活非常繁琐,而且经常要干,占用了很多琐碎的时间,投入产出比低就不说了,主要是天天重复做,心如刀割,比如说代码管理,上线发布,代码质量检查等等。回想一下自己用的什么工具在管理代码、用的什么工具自动部署?今天要推荐的这个工具组合,能让代码管理、发布、部署做到质量管理、自动化。没有重复造轮子,有兴趣自己造轮子的,可以尝试一下。

    No.1 Jenkins

    在Jenkins中建立构建任务,把代码从GitLab上拉取下来,构建,Jenkins与sonarcube集成,进行代码质量检查,完成测试环境发布,将构件发布到自动部署的约定位置。

    No.2 sonarqube

    sonarqube is 我见过的最强大的代码质量检查工具了,能分析起各种坏味道,bug,不合理的代码编写,内置了很多检查规则,使用sonarqube可以让团队的代码编写统一规范,而且可以防止一些低级的写法出现。当然,配置sonarqube的检查规则的时候,最好也依据团队的编写做些小小的适应调整,比如写习惯了UserBLL会报上坏味道,要求写成UserBll,有结小小的不爽,是吧。统一规范就是舍去的过程,建立好了检查规范,大家都用sonarqube执行严格的代码检查,就好了。

    No.3 gitlab

    之前使用tfs,svn,后来被带入gitlab,使用gitlab,觉得使用git也不错哦。给自己的公司部署一个Gitlab,严格管理主干分支,新人在分支上玩,发起merge请求,合并主干,一下子管理就规范多了。

    No.4 自动部署系统

    可以自己DIY一个,也可以找个开源的,前几天有看到一个国内的小伙伴开源了一个自动部署系统,在这里就不推荐了。使用Jenkins构建完的war包,jar包,dll,可以使用自动部署系统管理起来,发布的时候,点一下,回滚的时候再点一下。

    后记,自动部署系统可以对接上云主机、物理机、docker,嗯嗯~这么一套强大的系统,结合了Jenkins\sonarqube\gitlab,就是让小伙伴的时间能省下来。一定不要觉得前配置麻烦,这些工具配置好之后,后面就可以开心的玩耍了!

    这么一套工具怎么配置,怎么才能搭建一套呢?回复公众号【研发工具】索取!

    巧妙拆分bolt提升Storm集群吞吐量

    技术岛公众号
    技术岛公众号
  • 快速注入JS 随意跨域 就用BaibianJS(百变JS)

    实在是找不到一个自己喜欢的英文单词来诠释这个小工具,BaibianJS(百变JS) is a little and amazing mini chrome extension!It will help you to inject js and send cross domain xhr request by setting Access-Control-Allow-Origin.百变JS是一个小巧实用的Chrome插件,主要2个功能,1是能帮您任性注入JS,2是通过让您任性跨域!

    为什么会有BaibianJS

    实战背景

    要求爬取所有接口规格,找到带有特定参数的接口。

    为了爬取接口进行分析,用到了hookAjax.js(有bug,有小影响),但是为了省事就将就用了。但是hook js需要注入js,同时结果需要存储到自己的数据库里,于是经过几天的探索,整理出一个BaibianJS。你可能看到的结果就一个小巧的Chrome插件,但是过程却很曲折。

    我们原来的尝试过的方案(踩过的坑):

    1.winform+webbrowser 通过js调winform,能跨域,js替换上出莫名其妙的问题。搬来fiddler进行请求模拟替换js,js注入进去了,但是还是有些bug问题,好像是hookAjax对ie的兼容问题。折腾了许久,此方案没有完全执行下去。因为有点厌倦了webbrower的调试,感觉不爽,也许自己的调试方式不对。

    2.chrome+fiddler

    用Fiddler替换掉js是没有问题,成功将jq.js替换成了hook.js(实际是hookAjax.js+jq.js),但是收集完成接口请求后,保持数据成了问题,提示跨域!采用动态生成script标签的形式跨域到是成功了,不过,传的数据过多,就报错了。URL毕竟是有长度限制。只是想用<iframe/>在内嵌一个页面,实现get转post,还未实战,不过,理论上是完全OK.

    3.纯Chrome插件方案

    Chrome插件是可以直接监控请求的,但是…嗯…不知道为什么有点晕晕的,没有用这个方案。因为对Chrome插件还是了解的一半一半的,时间有限,就不深挖了。

    4.反向代理方案+

    反向代理方案主要是通过反向代理服务器替换掉目前js,主要是jq.js,换成改造后的带hook的js,将一个存数据的请求反向配置到自己的站点。理论上也是完美的。虚拟机里的centos 7也安装了一个反向代理环境,不过,虚拟机吃内存,就…跳过了。

    5.Chrome插件BaibianJs+hookAjax 【当前方案,已验】

    用BaibianJS实现了反向代理的效果,直接配置替换掉原站的jq.js,换成注入后的js,同时BaibianJS关掉了跨域限制,直接将数据存到自己的站点

    BaiBianJS充分利用了Chrome Extension的机制,几行代码就实现了。

    =====看代码啦==============================

    chrome.webRequest.onBeforeRequest.addListener(
    function(info) {
    //here to set your magic hook js
    //在这里设置你修改过的js,比如把自己的代码放到jq的最下面
    return {redirectUrl:’http://localhost:6366/hook.min.js’};
    },
    {
    // here to set which js be replaced
    //这里是设置哪个js要被替换掉,从jq下手,最好了
    urls: [
    “http://www.jishudao.com/js/jquery-1.7.1*”
    ],
    types: [“script”]
    },
    [“blocking”]);
    //if you need to change more,add a new Listener

    //set Access-Control-Allow-Origin
    chrome.webRequest.onHeadersReceived.addListener(function(details) {
    details.responseHeaders.push({name:’Access-Control-Allow-Origin’,value:”*”});
    console.log(details.responseHeaders)
    return {responseHeaders:details.responseHeaders};
    },{urls: [“<all_urls>”]}, [“responseHeaders”,”blocking”]);

    =====看代码啦==============================

    BaibianJS的定位

    BaibianJS是给开发人员的一个小插件产品,使用上不是傻瓜式的,看不懂js的,可以绕行了。也没有提供管理界面,感觉这么简单的使用就好了。

    How to use

    Step 1

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

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

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

    Step 2

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

    直接Github下载代码  https://github.com/Lancker/BaibianJS

    与我互动

    请关注我的公众号

    约吗公众号

    捐助

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

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

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

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

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

    ChinaHadoop转自: http://www.jishudao.com/2018/07/03/hadoop-bigdata-cloud-compute-job/

     

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

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

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

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

    Fork完善版:

    https://github.com/Lancker/NIM_Web_Weapp_Demo

    主要调整思路:

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

    主要调整文件说明:

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

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

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

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

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

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

     

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

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

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

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

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

  • 图书云招内测小伙伴!限量名额,吃鸡的小伙伴速度联系!

     您好,图书云内测中!如您有意参与内测,请回复【个人姓名+手机号】!​如没有及时响应,请加微信13439975582,并注明申请图书云内测资格!

    图书云为共享图书平台,为广大网友提供基于移动地理位置的便捷图书分享服务,让每个人都可以非常方便将自己闲置图书分享给他人!同时可以通过平台查看附近图书,快速借阅!

    qrcode_for_gh_8d44f262115a_258