微基因WeGene初试

作者:matrix 发布时间:2018年4月24日星期二 分类: 零零星星

图片3953-微基因WeGene初试

去年@TESTV BBT系列  看到女后期的基因测序,种草已久。网上找到其他很多相关的是国外的23andMe,蛋疼的是不支持中国地区。后来跟同事聊过,大多觉得没卵用,感觉是自己语言表达能力不够  没能安利出去啊(感觉被说微商了)。我不管。。反正我很想知道像我一样来自四川盆地边缘的非少数民族说63话的祖源分析图。对~  我对此很感兴趣。。

WeGene算是国内较大的一家了,至少很容易找到它。交钱后等待收到采集器,之后采集自己的口水填信息后寄回去等待报告就好。高科技算命就是这么的容易。

21号提交的订单,昨天到的口水采集器,回家按照WeGene官网提示进行口水装填作业。今天中午直接丢去丰巢快递柜 顺丰到付。期待后面的报告~
图片3958-微基因WeGene初试

图片3959-微基因WeGene初试

图片3960-微基因WeGene初试

图片3961-微基因WeGene初试

后续 更新报告。

 

过滤json中下划线字段名为驼峰式

作者:matrix 发布时间:2018年3月31日星期六 分类: 零零星星

项目中有需要将统一的json接口数据转换为驼峰式字段名,但是网上的确没找到能解决的代码。
还好难度不大,直接正则替换就好。代码都是去年的了,一直放在有道云笔记里面,早就想拉出来分享下,趁着还是3月份 补一片文章来占位。
代码是php的,其他语言同理用正则替换解决。

 /**
     * json编码处理 传入数组
     * json字段名统一输出为驼峰式
     * @param $data
     * @return array
     */
    protected function json_encode($data)
    {
        $data =  json_encode($data);
        return preg_replace_callback('/[_]([a-zA-Z])(?=[^"]*?":)/',
            function ($matches) {
                return strtoupper($matches[1]) ;
            }, $data);
    }

说明:
代码不需要过多解释,传入数组数据 结果值会返回json字符,字段名推统一替换为驼峰式。
核心在于[_]([a-zA-Z])(?=[^"]*?":)的正则表达式
PEACE~

wakatime 统计ide使用的编码时间

作者:matrix 发布时间:2018年1月25日星期四 分类: 零零星星

昨晚听DaoTangBill说了下wakatime,感悟以前代码都TM白了,连基本的时间记录都看不到 这工具简直是神器,没想过能统计编码时间,真是coder必备啊。
wakatime支持了很多IDE编辑器,IDEA家族,eclipse,sublime等 都有对应插件。只要编辑器是跨平台的,自然附加插件也就可以。
使用上只需要在IDE安装wakatime插件,输入key即可,完全不影响编码,不需要安装其余软件和设置开机启动操作。

官网

https://wakatime.com

获取账户 获取key

重新注册账户或者链接到GitHub之类的三方账户登录即可。

settings->account->Api Key

图片3868-wakatime 统计ide使用时间

安装IDE对应的插件

在ide的插件中搜索wakatime安装,最后输入key即可。

Quantify your coding

系统会自动默认会每周发送一周的统计报表到邮箱,使用中。。。 巴适
图片3869-wakatime 统计ide使用时间

参考:
http://www.iamlj.com/2016/07/recommend-tools-wakatime/

Ajax-hook拦截全局ajax请求操作

作者:matrix 发布时间:2017年12月13日星期三 分类: 零零星星

github项目地址:https://github.com/wendux/ajax-hook/blob/master/src/ajaxhook.js

项目页面中有很多ajax接口请求,每次需要手动判断数据code进行错误消息提示,再加上有些使用jQuery,有些使用fetch操作,要是能有一个统一的$.ajaxSetup那就爽翻。搜索下ajax的全局拦截,有大神好了,打开即食,NICE。代码量不大,大致的原理好像是把内置的XMLHttpRequest对象给代理了,克隆一份,进行伪装。请求操作都是通过的代理层,拦截、修改操作也都是可以的~

使用

加载ajaxhook.js文件,代码中给浏览器window对象注册全局方法:hookAjax,unHookAjax。

hookAjax //挂载拦截钩子
unHookAjax() //取消ajax请求代理

拦截处理操作

hookAjax方法注册拦截的切入点,执行回调操作。
这里用到onload 即请求完成获取数据的时候。
代码是放在vue项目里面,手动挂载DOM。若出现第一次错误请求没有成功拦截的情况,那就需要把代码放置在头部。

        //全局监听ajax请求,用于提示会话过期,和其他的错误消息。
        if ('function' === typeof(hookAjax)) {
            hookAjax({
                onload: function (xhr) {
                    if (xhr.status >= 500) return layer.alert('服务器报错,请联系管理员!'+"</br>请求地址:</br>"+xhr.responseURL, {icon: 2, title: '无形之刃 <3'});
                    var data = JSON.parse(xhr.responseText);
                    if (!!data) {
                        if (data.code !== 0) {
                            if (!!data.msg) {
                                layer.alert(data.msg, {icon: 2, title: 'ERROR'});
                            }
                        }
                    }
                }
            })
        }

拦截函数 如:onload 返回值是一个boolean,如果为true会阻断ajax请求,默认为false,不会阻断请求。

参考:
http://www.jianshu.com/p/9b634f1c9615

phpStorm配置vagrant下的xdebug

作者:matrix 发布时间:2017年10月15日星期日 分类:零零星星

测试环境:

服务端:vagrant下ubuntu16的lnmp.org一键安装包
IDE:phpStorm for mac
xdebug扩展进行断点调试

安装配置xdebug扩展

连接vagrant ssh

cd ~
wget https://xdebug.org/files/xdebug-2.5.5.tgz
tar -zxvf xdebug-2.5.5.tgz
cd xdebug-2.5.5
/usr/local/php/bin/phpize #用phpize生成configure配置文件
./configure && make && make install

记录下Installing shared extensions的信息用于配置php.ini
尾部添加:

[xDebug]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so
xdebug.idekey = "vagrant"
xdebug.default_enable = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9000
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_handler="dbgp"

配置phpStorm

确保Languages & Frameworks =》 PHP =》 Debug 配置端口和xdebug.remote_port一样。
图片3812-phpStorm配置vagrant下的xdebug

添加server
图片3813-phpStorm配置vagrant下的xdebug

根据自己开发环境修改配置:

Name是Server名称,可以随便填写;
Host是项目的访问地址;
Port为你Web服务器的端口,一般为80。
还需要配置项目路径的映射(path mapping),将项目的根目录以及public目录映射到Vagrant服务器中的绝对路径。

添加PHP web Application

菜单栏中 Run -> Edit Configurations添加后选择配置好的server之后再点击

图片3814-phpStorm配置vagrant下的xdebug

开启调试 :Run -> Start Listening for PHP Debug Connections 或者点击顶部导航栏的☎️电话图标

设置断点之后run即可看到调试信息。

参考:
https://segmentfault.com/a/1190000007789295
http://mrcelite.blog.51cto.com/2977858/1903157

nginx定向清理Proxy Cache缓存

作者:matrix 发布时间:2017年8月22日星期二 分类: 零零星星

图片3703-nginx定向清理Proxy cache缓存
很多服务器是使用nginx内置的Proxy_cache来缓存资源,防止不必要的后端请求。有时候需要单独清理某个缓存,这就麻烦了。
按照大多数做法是给nginx安装purge模块,但是目前有更加精简的办法使用代码手动删除
道理很简单:获取nginx缓存url的文件路径,然后删除就可以了。

proxy_cache_key缓存的key

nginx 配置了proxy_cache_key的话需要根据自定义的key来获取url的缓存hash值,默认的key一般都是完整的访问url
具体自己的nginx是以什么作为缓存key的,具体随便找个缓存文件vi一下看看,有些设置了upstream负载均衡,就需要替换访问的host为对应主机上的upstream节点名,SO 随便找个缓存文件看看。

缓存路径的拼接

缓存根目录中一般是 单字母/俩字母/32位字符路径作为缓存的文件存储。
首先需要对key进行md5 Hash的计算,取出最后3位字符。
单字母:md5最后一位
双字母:md5最后2,3位
最后再拼接出完整路径,删除就可以了。

缓存根目录是nginx中配置的,默认路径就不清楚了。

PHP代码参考,其他语言还请大牛附言~

//去除服务器nginx缓存
$root = '/var/tmp/Tengine/proxy_cache/';

//之所以替换 使用为nginx服务器设置了反向代理proxy_pass
//具体缓存的key还需查看真实的缓存文件的key值
$map = array(
    'http://www.hhtjim.com/' => 'http://www_hhtjim_com_backend/',
);
$key =  @$args[0];//访问的url链接作为缓存的key
if(empty($key)) die("Please input the cache url eg:http://www.hhtjim.com\n");
$key = str_replace(array_keys($map), array_values($map), $key);
$md5 = md5($key);
$file = sprintf('%s%s/%s/%s', $root, substr($md5, -1), substr($md5, strlen($md5) - 3, 2), $md5);
if (@unlink($file)) {
    echo 'DEL SUCCESS:' . $key."\n";die;
}
echo 'FAILED:'.$file."\n";

最后再访问url看看自己服务器响应头配置的$upstream_cache_status变量X-cache缓存标记为MISS 其他状态参考:

MISS 未命中,请求被传送到后端
HIT 缓存命中
EXPIRED 缓存已经过期请求被传送到后端
UPDATING 正在更新缓存,将使用旧的应答
STALE 后端将得到过期的应答

参考:
http://www.jb51.net/article/74595.htm

缓存命中率:http://www.361way.com/nginx-cache/2665.html

peace

T-Rex 在线版本的chrome离线恐龙游戏

作者:matrix 发布时间:2017年2月15日星期三 分类: 零零星星

图片3623-T-Rex 在线版本的chrome离线恐龙游戏

断网的时候chrome中会出现恐龙小游戏T-Rex/Dino。
来自 @thecodepost

试玩

html

http://www.hhtjim.com/wp-content/uploads/2017/02/T-RexGame.html

参考:http://www.thecodepost.org/internet/play-hidden-t-rex-game-offline-chrome/
http://www.cnblogs.com/undefined000/p/trex_8.html