Alfred工作流workflows实例 - 查询内网ip

作者:matrix 发布时间:2018年9月7日星期五 分类:零零星星

Alfredmac上强大的快速启动工具 可以自定义php/shell/ruby/python脚本执行任意操作。比如快速搜索关键字打开网页 查询字符转码 ip。。。这些都是可以自己定义操作的,只是需要一些脚本语言编写的知识。

windows 上有类型的Wox https://github.com/Wox-launcher/Wox

下载Alfred

官网: https://www.alfredapp.com/

工作流workflows自定义脚本的功能在Alfred中是收费的功能,还好 有可用的版本

nmac.to cracked:https://userscloud.com/o3ibe2w7071h/nmac.to_alf37931b.zip

添加/配置workflows

点击Workflows切换到工作流选项

窗口左下角 「 help + -」,点击 +->Blank Workflow 开始新建工作流程

填写名称name,描述Description,Bundle id为自己标记的包名id 要确保唯一性。

图片4087-Alfred工作流workflows实例

右边黑色背景窗口中右键 inputs->Script Filter 添加自定义执行的脚本

图片4086-Alfred工作流workflows实例

配置执行脚本以及触发的关键字

keyword为触发的关键字 比如alfred启动框框中输入baidu空格query,baidu就是触发脚本的自定义关键字,空格后面的query即为查询的参数下面的Language`即为脚本语言 这里用的系统自带的权限脚本。

图片4090-Alfred工作流workflows实例

#!/bin/bash
ip=$(ifconfig en0 | grep 'inet .*'  | sed 's/^.*inet//g' | sed 's/ netmask.*//g')
cat << EOF
{"items": [
    {
        "title": "${ip}",
        "subtitle": "局域网en0 ip",
        "arg": "${ip}"
    }
]}
EOF

说明:
使用系统bash 查询ifconfig命令en0网卡的IP信息 管道命令符|继续处理sed截取输出结果。
最后使用cat输出json数据用于Alfred读取并显示到结果列表
items具体参数释义参考下方alfredapp.com链接。
这里arg是用于复制粘贴/通知等操作的Alfred变量赋值,否则会没反应。如果只是显示查看 可以只设置titlesubtitle 效果就已经比较好了。

点击save保存

调试

窗口右边有蜘蛛「🕷️」图标 下方的Log下拉框 选择 all information便于查看调试信息

图片4102-Alfred工作流workflows实例 - 查询本地ip

启动

option+space启动 输入触发关键字
图片4097-Alfred工作流workflows实例 - 查询本地ip

下载

上面只是操作记录 这里可以直接下载:local ip.alfredworkflow
解压缩 直接打开alfredworkflow文件import导入

参考:
https://www.alfredapp.com/help/workflows/inputs/script-filter/json/
https://www.jianshu.com/p/7e1ea4f296c8
https://sspai.com/post/44624
https://www.jianshu.com/p/e9f3352c785f

TG工具-MTProxy

作者:matrix 发布时间:2018年8月29日星期三 分类:零零星星

MTProxy是专门给Telegram作加密代理的工具,避免平时打开「酸酸乳」之类工具,经常使用TG都订阅了好多消息类的bot,有这样的代理自己搭建更方便打开即用,搭好了之后可以直接点击tg链接即可完成配置。
要搭建此工具需要有一台国外可以正常访问Telegram的vps

环境

root@BareInstructive-VM:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:    14.04
Codename:   trusty

安装

git clone https://github.com/TelegramMessenger/MTProxy.git
cd MTProxy
make && cd objs/bin
curl -s https://core.telegram.org/getProxySecret -o proxy-secret #获取连接tg的密钥
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf #获取tg服务器ip列表 建议每天定时更新
 head -c 16 /dev/urandom | xxd -ps #使用linux系统创建伪随机数 32长度字符
#生成随机数密钥 31c3f028f2faf77e9ab45d5c209aa02c

开启

./mtproto-proxy -u nobody -p 8888 -H 8181 -S 31c3f028f2faf77e9ab45d5c209aa02c --aes-pwd proxy-secret proxy-multi.conf -M 1

说明:
31c3f028f2faf77e9ab45d5c209aa02c为前面的随机密钥
8888为本地监听的端口 用于查看统计数据: curl localhost:8888/stats
8181为对外提供服务的端口(使用的客户端填写的端口)

图片4050-TG工具-MTProxy

出现main loop就是正常开启

测试

tg中打开链接 OPEN:
https://t.me/proxy?server=tg.hhtjim.com&port=8181&secret=31c3f028f2faf77e9ab45d5c209aa02c

tg://proxy?server=tg.hhtjim.com&port=8181&secret=31c3f028f2faf77e9ab45d5c209aa02c

错误

make编译遇见的问题

  • fatal error: openssl/rand.h: No such file or directory

缺少OpenSSL开发包导致的问题

sudo apt-get install libssl-dev

by:https://linux.cn/article-4147-1.html

  • Makefile:94: recipe for target 'objs/bin/mtproto-proxy' failed
sudo apt-get install zlib1g-dev

by:https://github.com/TelegramMessenger/MTProxy/issues/4

参考:
https://www.jianshu.com/p/d40209b94586
https://github.com/TelegramMessenger/MTProxy
https://liball.me/mtproxy/

一键脚本:https://doub.io/shell-jc7/

IDEA快速插入当前时间

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

快速插入当前时间的功能倒是很少需要,只是现在注释的时候需要有时间标记方便查看。windows上的记事本F5可以获取当前时间,或者手动敲也行。作为IDEA系列的编辑器使用上应该是有这种快捷键的,然而找了大半天的确是没有的。但是有解决办法,还可以自由控制很多快捷关键字。这功能就像java ide中输入sout中达到快捷输入System.out.println()的效果 很方便。

测试:PhpStorm for Mac V2018.1
适用于IDEA系列编辑器

添加group

点击右侧的「+」号
这里添加了group名称为commonInsertTime,故曰 全局范围插入时间

图片4024-IDEA快速插入当前时间

添加/配置Live Template

图片4026-IDEA快速插入当前时间

这里的Abbreviation 就是触发快捷输入的关键字 time
右侧的Description为关键字提示的描述信息,可以输入中文的。
填写Template Text 模版变量 $date$,名称都可以自定义
图片4027-IDEA快速插入当前时间
Expand with表示触发的操作,默认是输入time触发关键字之后按tab键触发快捷输入。
然后点击Edit Variables编辑变量,窗口中会出现刚刚定义的dateExpresssion表达式中输入date("yyyy-MM-dd HH:mm:ss") 点击ok保存。
date函数属于官方模版的预定义函数,具体可参考下方IDEA官方资料来源。
红字提示No application contexts yes是指没有为当前模板设置使用的语言环境,我这里是所有地方都可以使用 点击Define->Everywhere

图片4038-IDEA快速插入当前时间

保存之后在IDEA中任意地方都快速输入当前时间。
输入time,按Tab键即可。
PEACE~

参考:
https://icewing.cc/post/how-to-insert-template-content-into-phpstorm.html

IDEA官方资料

Vue 滚动条定位问题

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

使用jquery的时候可以直接animate方法完成滑动滚动条的动作,但是在vue项目中会很蛋疼。

$('.findcar_brand_ul').animate({scrollTop: liheight}, 300);

Vue中又没有相关的组件可以调用,载入jquery麻烦,要是需要临时解决的话可以使用js的scrollTop
看了网上各路大神的文章才恍悟。要做到渐缓动画 只是需要setTimeOut执行step操作就好,频率快,人眼也就察觉不出。先取使用js操作获取dom的scrollTop取出需要让滚动条定位的目标位置,之后递增/减setTimeout操作。

//方法2。js操作 
                var jump = document.querySelector('#postion');
                var total = jump.offsetTop;//要定位的目标滚动条位置
                console.log('纵坐标', total)
                // var distance = document.documentElement.scrollTop || document.body.scrollTop

                 var distanceDom = document.querySelector('.findcar_brand_ul');//滚动条所在的容器
                var distance = distanceDom.scrollTop;//容器的滚动条照度


                // 平滑滚动,每1ms一跳,共20跳
                var time = 15;//毫秒
                var stepnum = 20;//共20跳
                //时长(time*stepnum) ms


                var step = total / stepnum //因为除法会出现余数情况 导致最终定位有偏差
                if (total > distance) {
                    // console.log('smoothDown')
                    // console.log('distance:'+distance)
                    // console.log('total:'+total)
                    smoothDown()
                } else {
                    // var newTotal = distance - total + 100
                    var newTotal = distance - total
                    step = newTotal / stepnum
                    // console.log('smoothUp')
                    smoothUp()
                }
                function smoothDown () {
                    if (distance < total) {
                        // console.log('distance < total')
                        distance += step
                        // Firefox
                        // document.documentElement.scrollTop = distance
                        // // Chrome
                        // document.body.scrollTop = distance

                        distanceDom.scrollTop = distance;
                        setTimeout(smoothDown, time)
                    } else {
                        // console.log('distance < total: else ')
                        // document.documentElement.scrollTop = total
                        // // document.body.scrollTop = total
                        // window.pageYOffset = total

                        // console.log('standard:'+standard)
                        distance = total;//将最后一小步的滚动操作的偏移量还原到目标位置。若不加此操作 会导致定位偏移不准的情况出现。因为step = newTotal / stepnum 的值会有除不尽的情况  !!important
                        // console.log('distance end:'+distance)
                        distanceDom.scrollTop = distance;
                    }
                }
                function smoothUp () {
                    if (distance > total) {
                        distance -= step

                        // // Firefox
                        // document.documentElement.scrollTop = distance
                        // // Chrome
                        // document.body.scrollTop = distance

                        distanceDom.scrollTop = distance;
                        setTimeout(smoothUp, time)
                    } else {
                        // document.documentElement.scrollTop = total
                        // document.body.scrollTop = total
                        // window.pageYOffset = total

                        distance = total;
                        distanceDom.scrollTop = distance;
                    }
                }

说明:
demo环境:Vue.version >> "2.2.6"
修改代码使用div中滚动条,取消浏览器窗口滚动条的获取。
代码简单修改了下最终的定位偏移问题。因为step = newTotal / stepnum
至少这能解决问题,还需后面完善。

代码来自@wisewrong

PEACE~

图片4005-Vue 滚动条定位问题

参考:
https://www.cnblogs.com/wisewrong/p/6495726.html

TP5.0的response数据拦截处理

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

处理返回数据的时候进行json编码/解码可能会因为不是标准的json字符导致出现一系列的连锁反应问题,没有正确的拦截错误信息的显示。
TP5获取器getAttr中进行json处理,结果出现不可预料的false值,且抛出异常 syntax error 语法错误。很蛋疼啊,明明相应的处理判断,但是错误定位行却是json_encode进行json编码的操作。

后面替换掉以前使用的默认全局函数json()进行自定义json字符输出,解决。

创建自定义Json类

继承\think\response\Json

<?php
/**
 * Created by PhpStorm.
 * User: panc
 * Date: 2018/5/8
 * Time: 上午11:24
 *
 * 自定义处理json的数据【避免json_encode报错:Syntax error 以及各种杂七杂八的问题】
 */

namespace app\common\output;//自定义命名空间


class json extends \think\response\Json
{
//    protected function output($data)  //可以自定义重写数据输出即可  
}

调用Response类输出

控制器中调用执行

//        return json($result);
return new \app\common\output\Json($result);

关键操作如上,虽然只是继承没有任何重写,但是实际上是解决了大问题。可以跟好的控制输出的结果和抛错。

peace~

mysql的分组排序limit问题

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

业务要求按照type,city分组,然后各取前面的100条数据输出,网上找到了类似的需求直接sql语句就可以解决。

测试表结构


CREATE TABLE `esc_catch` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `city` varchar(20) NOT NULL DEFAULT '' COMMENT '城市', `price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '报价', `type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '1,2', `add_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB   DEFAULT CHARSET=utf8mb4

解决办法


set @row=0;set @city=''; set @type=''; select a.city,a.price,a.type ,from_unixtime(a.add_time,'%Y-%m-%d %H:%i:%s') as add_time from esc_catch as a inner join ( SELECT id,add_time, case when (@city = city and @type= type) then @row:=@row+1 else @row:=1 end as rownum, @city:=city as city , @type:=type as type FROM esc_catch order by type,city,add_time desc ) as b on b.id = a.id where b.rownum>=100 order by b.type,b.city ;

说明:

头部事先声明变量
row 用于统计指定分组下出现的次数,
citytype是分组条件

核心在于inner join的的临时表操作,其中使用变量操作追加rownum字段
如果变量citytype值等同于临时表的同名字段则该行数据排序下标row++,否则为1

@city:=city as city , @type:=type as type 表示给每行数据的字段值赋给变量

之后在inner join内联表 之后使用自定义的rownum字段b.rownum<=100进行数量条件的限制即可,最后order by 操作便于查看数据

参考:

https://blog.csdn.net/ylqmf/article/details/39005949

https://blog.csdn.net/woshihaiyong168/article/details/78803655

https://zhidao.baidu.com/question/618263527798895012.html

PEACE~

微基因WeGene初试

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

图片3953-微基因WeGene初试

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

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

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

官网链接

https://www.wegene.com/shop/?_source=R_252713_F29657

图片3958-微基因WeGene初试

图片3959-微基因WeGene初试

图片3960-微基因WeGene初试

图片3961-微基因WeGene初试

后续 更新:
04-27 到达
05-08 DNA提取
05-10 上机检测
05-14 检测完成

祖源分析

85的北方汉族,很是意外.没一点和巴蜀沾边

图片3991-微基因WeGene初试

报告预览

图片3992-微基因WeGene初试

后续

自己估算有6-7层较为符合情况

180916 中国之声《央广新闻》 报道 #11时12分28秒

60%真实性 消费者若有需求应该选择有资质的机构
http://cnvod.cnr.cn/audio2018/live/zgzs/201809/qlglx_20180916021905zgzs_h.m4a#2:12:32
http://www.radio.cn/pc-portal/erji/radioStation.html

过滤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~