Hi,丸子|一个挺不正经的前端小混混

Uncategorized

升级Ubuntu 14.04的OpenSSL

博客迁移到DO的vps上,顺便就把https给上了,上完https就到https://www.ssllabs.com/ssltest/测试一下ssl是否足够健壮,结果只得了个F,如图: OpenSSL Padding Oracle vulnerability (CVE-2016-2107) 关于OpenSSL Padding Oracle vulnerability (CVE-2016-2107)漏洞的信息可以查看:https://blog.cloudflare.com/yet-another-padding-oracle-in-openssl-cbc-ciphersuites/ 知道是OpenSSL的问题那就直接升级 Shell $ sudo apt-get update$ sudo apt-get dist-upgrade$ wget ftp://ftp.openssl.org/source/openssl-1.0.2h.tar.gz$ tar -xvzf openssl-1.0.2h.tar.gz$ cd openssl-1.0.2h$ ./config --prefix=/usr/$ make ....

Uncategorized

地球坐标系 (WGS-84)到火星坐标系 (GCJ-02) Javascript版

背景 第一次开发跟地图相关的应用,一开始定位获得经纬度什么的还比较顺利,直到要在地图上显示出来的时候发现位置标记跟理想的不同,虽已提前了解也预料到,但本以为某某地图会提供相关的API实现,翻了一个晚上文档都没有看到,于是就只能自己动手寻找相关算法实现,貌似没有找到Javascript版本,于是有了该移植版本的地图纠偏算法。 最新更新请移步项目地址:https://github.com/hiwanz/wgs2mars.js 快速开始 引入脚本 XHTML <script src="src/js/wgs2mars.min.js"></script> 调用代码 JavaScript var gcjloc = transformFromWGSToGCJ(119.3122312,26.0240049); 返回GCJ-02坐标对象 {lng: 119.31705425869873, lat: 26.02096344048847} 致谢 感谢科普和其他语言版本开源作者的贡献! 坐标系科普: 【高德地图API】如何解决坐标转换,坐标偏移? 该版本算法参考了以下两位的相关实现: C#版:地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 C语言版:ChinaMapShift ....

Uncategorized

动态隐藏安卓应用图标

出于某些设计的原因,应用在安卓手机上安装并启动服务后,不再需要显示应用图标,因此需要在运行一次之后就从安卓的启动器上移除,用到的代码很简单: Java public class MainActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //演示代码省略逻辑        //启动后隐藏应用图标        PackageManager p = getPackageManager();        p.setComponentEnabledSetting(getComponentName(),                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,                PackageManager.DONT_KILL_APP);        //退出        this.finish();    }} 顺带提一下,如果你是通过AndroidManifest.xml配置来隐藏图标的话只需要将配置里的android.intent.category.LAUNCHER这行去掉就可以了,但是会导致它无法响应消息广播,要解决这个问题就是再加一行android.intent.category.DEFAULT配置: XHTML <activity android:name="MainActivity" android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter></activity>

Uncategorized

自定义Sonar代码审查规则(Javascript)

前言 在上一篇文章《代码质量管理平台Sonar》中,我们简单介绍了Sonar这个代码质量管理平台,提到了它可以定制多种开发语言的代码质量审查支持,也演示了官方的Javascript审查插件的使用,但是官方插件默认的规则是不够的,或者说不一定适用于我们团队自己的内部规范,因此,接下来来说说如何定制自己的审查规则。 扩展规则 Sonar扩展代码审查规则的方式有两种:1,使用Java编写Sonar插件;2,在SonarQube界面直接添加XPath规则。 第一种方式需要用户有Java代码编写能力,定制性强,对于大部分前端来讲要求较高,如果你有能力实现,可以根据官方提供的示例进行改造。我们主要介绍第二种方式,要求懂得XPath 1.0语法,自定义规则必须使用该规范版本的语法来遍历抽象语法树(Abstract Syntax Tree,AST),因此在编写自定义规则之前,你得先知道你所调试的代码对应的语法树是什么样子,官方提供了一个SSLR Javascript Toolkit来帮助我们方便的分析Javascript的语法树,本文使用的sslr-javascript-toolkit-1.6.jar。 sslr javascript toolkit 1.6 如上图所示,窗口左侧是源码区,右边是语法树信息,下面是XPath语句执行区域。源码区可以手动贴入或编写代码,也可以通过Open Source File按钮打开js文件,在手工编辑代码时需要点击Parse Source Code来生成语法树。下面的XPath执行区域就不用多说了,来演示一下。假设我们要分析的代码如下: JavaScript function loadFile(srcFile){ document.write('<script src="'+srcFile+'"></script>');} 规则是要禁止document.write方法的使用,于是我们需要匹配代码中的document.write,首先需要看看这个方法在语法树上的节点是什么样子的,见图: AST:document.write AST:document.write 从图中我们不难看出,document.write这个调用在AST中是callExpression下的memberExpression,他的子节点primaryExpression的tokenValue为document,identifierName的tokenValue为write,因此我们得到的XPath表达式为: 1//callExpression/memberExpression[primaryExpression[@tokenValue = ....

Uncategorized

代码质量管理平台Sonar

简介 Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。 安装运行 Sonar的安装可以说是非常便利了,自带Jetty应用服务器和H2数据库,唯一的要求就是系统安装了JRE6+,到官网下载最新的安装包解压至任意目录,然后切换到解压的目录,运行一条命令即可启动平台。 当前测试环境:Red Hat Enterprise Linux Server release 5.8 (Tikanga),sonar-3.7.4。 Shell [root@localhost ....

Uncategorized

centos下spm-yuan安装报错

未知原因在centos下安装spm-yuan的时候一直无法成功,报错信息如下: Shell EACCES, permission denied '/root/.spm'  you need install spm to register the program    $ npm install spm -g  if you have installed spm, it maybe you haven't set a NODE_PATH environment variable ....

Uncategorized

centos下nodejs问题记录

最近搞内部系统开发,频繁跟nodejs打交道,遇到了不少莫名其妙的坑,暂时记录下,回头有时间深究到底。 系统环境: Shell [root@localhost ~]# lsb_release -aLSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarchDistributor ID: RedHatEnterpriseServerDescription:    Red Hat Enterprise Linux Server release 5.8 (Tikanga)Release:        5.8Codename:       Tikanga[root@localhost ~]# python -VPython 2.7.3[root@localhost ~]# node -vv0.10.26[root@localhost ~]# npm -v1.4.3 1,nodejs环境问题 手动编译的nodejs,流程很简单,先把Python升级了,然后下载nodejs包make ....

Uncategorized

Nginx多重代理: 413 Request Entity Too Large

处理php+nginx环境下的文件上传出现:413 Request Entity Too Large,这样的报错,按照经验,对于这个问题的处理一般是下面的步骤: 1,修改nginx配置 Shell 1# vi /etc/nginx/nginx.conf 2,在http,server或者location段修改下面的配置: # set client body size to 8M #client_max_body_size 8M; 3,根据文件大小的支持情况修改,让nginx可以支持接受post过来的大数据,保存后重新加载配置,使设置生效: Shell # /usr/local/nginx/sbin/nginx -s reload 上面的配置在我本机开发的时候是没有问题的,当然除此之外php本身处理上传也有相应的配置(php.ini): INI ;This sets ....

Uncategorized

NPM本地缓存方案

如果你被前一篇《centos下搭建npm镜像》搞晕了搞挫败了搞得萎了,毕竟完整镜像npm几十G的内容需要大量的时间,期间可能遇到各种网络问题(由于某些大家都知道的原因),或者像这位哥们吐槽官方教程不给力(https://github.com/npm/npmjs.org/issues/106),你只是想简单架个本地服务而不具备太多系统或程序相关的知识,无法一下子处理各种奇葩的异常,那么你应该继续看下去。 NPM本地缓存? 在天朝网络环境下做nodejs相关开发,在我看来最痛的点就是使用npm的时候各种依赖包下载超级慢和各种异常,所以我关注的几个点: 1,下载依赖速度要快2,不会因为npm官方镜像挂掉而影响开发3,私有模块管理 当然,你可以常年挂着VPN,你可以找几个国内靠谱的镜像出现问题的时候切换过去,你可以内部管理模块然后npm link,就可以解决上面的问题,在这之外不妨动手自己架设一个本地服务。 找了一圈,我发现了两个cache模块:https://github.com/mixu/npm_lazy和https://github.com/rlidwka/sinopia,这两个模块的实现彻底消除了之前完整镜像npm官方的痛,几乎是零配置,他们基本的思路基本一致:在本地运行一个服务器实例,初始化一个空的“仓库”,我们无需关心它是什么样的仓库,当用户向本地服务器发起请求时,先检查本地是否有现成的已更新的包,有则从本地仓库返回,无则从官方或指定的镜像下载请求所需要的包缓存到本地并返回给用户。从某种程度上,该逻辑解决了我们前面提到的两个问题大多数情况,因为如果你使用一个从来没使用过的模块就还是有问题。关于私有模块,sinopia提供了自己的解决方案,私有模块都建议以“local-”开头进行发布,npm_lazy则没有提及。 npm_lazy的使用 作为演示,我们选择npm_lazy快速的架设一个本地npm cache服务。 测试环境: Shell [root@localhost ~]# node -vv0.10.21[root@localhost ~]# npm -v1.3.11[root@localhost ~]# lsb_release -aLSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarchDistributor ID: RedHatEnterpriseServerDescription:    Red Hat Enterprise Linux Server release ....

Uncategorized

使用Yeoman定制前端开发项目构建工具

Nodejs介绍 现在说起Nodejs大家肯定不陌生了,没吃过猪肉也见过猪跑,它的推广也是带着争议的,有些人或多或少会鄙视它,免不了被各种程序语言社区对比。在我开始用它之前,我也不知道它到底有什么好的。原归正传,官方的介绍如下: Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and ....