GIT仓库迁移

作者:matrix 发布时间:2018-12-01 分类:零零星星

git仓库之前可以简单的实现包含所有提交信息数据完全搬迁操作。在之前link站的git仓库使用的csdn,后来没有维护就转移到了gitee。最近发现墙外的环境无法正常连接到gitee,也就想试试git仓库的迁移。

新建空白仓库

在新仓库建立git项目,我这里用的腾讯开发者云 https://dev.tencent.com/
获取git地址 如:https://git.dev.tencent.com/plola/link.git

克隆旧库到本地

git clone https://gitee.com/rollio/link.git --bare

说明:
--bare 参数用于复制裸仓库也就是只是复制一个类似软连接的东西.git信息 不会把仓库中的代码文件copy下来
这个裸仓库只会保存git提交的历史版本信息,上面不能进行各种git操作

推送到新库

cd link.git/ #进入刚刚克隆时生成的git目录

git push https://git.dev.tencent.com/plola/link.git --all  #推送数据

git push https://git.dev.tencent.com/plola/link.git --tags #推送标签

最终完成。 操作就几步,真的很简单方便。以后再也不用担心git数据搬家问题了,以后我的所有commit都在 哈哈。

参考:
https://coding.net/help/doc/git/import.html
https://blog.csdn.net/feizxiang3/article/details/8065506

PEACH~

存储MongoDb的经纬度数据实现空间索引

作者:matrix 发布时间:2018-11-26 分类:零零星星

数据存储

mongoDb自带了地理空间索引,使用2dsphere索引类型 可以存储GeoJSON格式数据 指定点、线和多边形。
mongoDb数据

{
    "_id" : ObjectId("5bf04829c6671064f9039dd0"), 
    "order_info" : {
        "survey_coordinate" : {
            "type" : "Point", 
            "coordinates" : [
                105.431, 
                42.009
            ],
            "name":"XXXXX街道办"
        }
    }
}

order_info.survey_coordinate字段为需要存储的数据
type:Point 点
coordinates 经纬度信息: [longitude, latitude]代表[经度, 纬度]
name为附加自定的存储名称字段

参考:
http://geojson.org/
mongodb官方文档:https://docs.mongodb.com/manual/reference/geojson/

添加索引

  1. 手动创建
    db.order.ensureIndex( {"order_info.survey_coordinate" : "2dsphere"} )
    //联合索引 如:  db.order.createIndex( {"order_info.survey_coordinate" : "2dsphere","category" : -1, name: 1 } )
    // 指定索引名称:db.order.createIndex( {"order_info.survey_coordinate" : "2dsphere"},{name:"locc"} ) 
    

    参考:
    http://www.runoob.com/mongodb/mongodb-indexing.html

  2. 代码创建

    后来专门去找了下php下代码的操作,翻看各种TP文档无果,还是Google靠谱。php官方文档中
    ThinkPHP5.0 参考

            $mongodb;//mongodb对象为 think\db\Connection  https://www.kancloud.cn/manual/thinkphp5/167865 
            //创建索引
            $command = new \MongoDB\Driver\Command([
                'createIndexes' => 'order',//给哪个集合创建索引
                'indexes' => [[
                    'name' => 'order_info_loc_2dsphere',//索引名称
                    'key'  => ['order_info.survey_coordinate' => '2dsphere']//索引的字段  索引类型
                ]]
            ]);
           $result =  $mongodb->command($command);
    
           //首次创建返回数据
    //        /vagrant/saasSystem/thinkphp/library/think/Debug.php:193:
    //array (size=1)
    //  0 =>
    //    array (size=4)
    //      'createdCollectionAutomatically' => boolean false
    //      'numIndexesBefore' => int 1
    //      'numIndexesAfter' => int 2
    //      'ok' => float 1
    //0.322759s ShowPageTrace
    
           //重复创建返回数据
    //        /vagrant/saasSystem/thinkphp/library/think/Debug.php:193:
    //array (size=1)
    //  0 =>
    //    array (size=5)
    //      'createdCollectionAutomatically' => boolean false
    //      'numIndexesBefore' => int 2
    //      'numIndexesAfter' => int 2
    //      'note' => string 'all indexes already exist' (length=25)
    //      'ok' => float 1
           halt($result);
    

    参考:
    http://php.net/manual/en/mongocollection.createindex.php#119584

数据查询

  1. runCommand执行

    db.runCommand( {
       geoNear: "order" , //存在2dsphere索引的集合名称
       near: { type: "Point" , coordinates: [118.783799, 31.979234] } ,
       spherical: true,
       limit:1,
    }) 
    
  2. find
    db.order.find({"order_info.survey_coordinate" : { "$near" : { "$geometry" : { "type" : "Point", "coordinates" : [118.783799, 31.979234] } } } })
    

参考:
https://blog.csdn.net/u014230597/article/details/52635190
https://blog.csdn.net/medea_yang/article/details/53436460

流水:首次eBay海淘--GERBER 31-001901

作者:matrix 发布时间:2018-11-25 分类:零零星星

GERBER是贝尔代言的求生刀品牌 这刀JD报价2K死贵 https://item.jd.com/1546446.html
虽然没找到荒野求生同款 但是贝爷家的东西二话不说 收藏都值
eBay看了下CNY 405.69,简直感动,但是运费的话按照最快的时间就要CNY202.97 价格比起狗东的要好很多。
刚刚正好从邱总(http://veryatom.com/)那里&小飞&倒唐一起聚了回来取了包裹。周一到今天周末EMS收货正好一个星期 很满意 没有多余费用。之前毕竟没有海淘的经验,只晓得运费贵 时间长 问题多。
eBay上购买的时候要看好商品是否支持邮寄中国,成色,运费这些 收货地址填写 价格合适就拍了。
大致过程参考:https://post.smzdm.com/p/54928/
刚开始怕老外不能打印中文的收货地址就填写的拼音,还好付款之后人家直接发邮件来说明可以打印中文地址信息 这样方便国内揽件。
图片4204-记首次eBay海淘--GERBER 31-001901
Tracking number就是运单号 完成之后就是每天刷包裹信息,这把刀是从澳洲店铺买的 澳大利亚邮政包裹查询:https://auspost.com.au/mypost/track/#/search
国际邮政列表:http://www.ems.com.cn/mailtracking/cha_xun_lian_jie.html
到国内后的EMS包裹查询:
http://yjcx.chinapost.com.cn/qps/yjcx
http://intmail.183.com.cn/qps/yjcx

或者使用17track更方便:
https://www.17track.net/zh-cn

开箱图

图片4207-记首次eBay海淘--GERBER 31-001901
图片4208-记首次eBay海淘--GERBER 31-001901
图片4209-记首次eBay海淘--GERBER 31-001901

图片4210-记首次eBay海淘--GERBER 31-001901

图片4211-记首次eBay海淘--GERBER 31-001901

国外测评YouTube:

贝爷是大学时候看荒野求生了解的,简直偶像。现在上班都是一屁股坐一天 很少时间走动,体能也差 但是心里很想出去玩玩 向往之~
PEACE

xiaomi开源SQL优化建议工具 - soar

作者:matrix 发布时间:2018-10-29 分类:零零星星

SOAR -- sql Optimizer And Rewriter 由小米运维 DBA 团队开发的sql 智能优化与改写工具20181021宣布开源。
github:https://github.com/xiaomi/soar

安装说明:https://github.com/XiaoMi/soar/blob/master/doc/install.md

测试环境:ubuntu 16.04

安装GO

apt-get安装失败改用
源码下载:https://GOlang.GOogle.cn/dl/
配置环境变量

解压:
> sudo tar -C /usr/local -xzf go1.11.1.linux-amd64.tar.gz

全局用户的环境变量:
> sudo vi /etc/profile

末尾添加:
export PATH=$PATH:/usr/local/go/bin

go版本查看:

> go version

source更新环境变量:

source /etc/profile

还需要配置GOPATH环境变量:表示go的工作目录 USER_NAME 为用户名
export GOPATH="/home/USER_NAME/go"

安装soar

> go get -d github.com/XiaoMi/soar
> cd ${GOPATH}/src/github.com/XiaoMi/soar && make

若安装顺利,最终会显示success。否则 build error

我前几次安装都失败

go build github.com/pingcap/tidb/parser: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed 
Makefile:69: recipe for target 'build' failed

之后google找到帖子 有人说是vps内存太低导致的,遂重启了下Ubuntu 重新make。bingo~

安装成功之后会发现~/go/src/github.com/XiaoMi/soar多出一个 soar文件。
执行测试:

> cd ~/go/src/github.com/XiaoMi/soar
> echo 'select * from film' | ./soar

图片4152-xiaomi开源SQL优化建议工具 - soar

使用soar

常用命令:https://github.com/XiaoMi/soar/blob/master/doc/cheatsheet.md

打印所有的启发式规则1

$ soar -list-heuristic-rules

打印支持的报告格式

$ soar -list-report-types

以指定格式输出报告

$ soar -report-type json

语法检查工具

$ echo "select * from tb" | soar -only-syntax-check
$ echo $?
0

$ echo "select * fromtb" | soar -only-syntax-check
At SQL 0 : syntax error at position 16 near 'fromtb'
$ echo $?
1

慢日志进行分析示例

$ pt-query-digest slow.log > slow.log.digest
# parse pt-query-digest's output which example script
$ python2.7 doc/example/digest_pt.py slow.log.digest > slow.md

SQL指纹

$ echo "select * from film where col='abc'" | soar -report-type=fingerprint

输出

select * from film where col=?

将UPDATE/DELETE/INSERT语法转为SELECT

$ echo "update film set title = 'abc'" | soar -rewrite-rules dml2select,delimiter  -report-type rewrite

输出

select * from film;

合并多条ALTER语句

$ echo "alter table tb add column a int; alter table tb add column b int;" | soar -report-type rewrite -rewrite-rules mergealter

输出

ALTER TABLE `tb` add column a int, add column b int ;

SQL美化

$ echo "select * from tbl where col = 'val'" | ./soar -report-type=pretty

输出

SELECT
  *
FROM
  tbl
WHERE
  col  = 'val';

EXPLAIN信息分析报告

$ soar -report-type explain-digest << EOF
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | film  | ALL  | NULL          | NULL | NULL    | NULL | 1131 |       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
EOF
##  Explain信息

| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1  | SIMPLE | *film* | NULL | ALL | NULL | NULL | NULL | NULL | 0 | 0.00% | &#x2620;&#xfe0f; **O(n)** |  |


### Explain信息解读

#### SelectType信息解读

* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).

#### Type信息解读

* &#x2620;&#xfe0f; **ALL**: 最坏的情况, 从头到尾全表扫描.

markdown转HTML

通过指定-report-css, -report-javascript, -markdown-extensions, -markdown-html-flags这些参数,你还可以控制HTML的显示格式。

$ cat test.md | soar -report-type md2html > test.html

PEACE~

参考:
https://github.com/beego/wetalk/issues/32
https://www.oschina.net/news/101034/xiaomi-opensource-soar
https://juejin.im/entry/5bbf21fde51d450e61605d99

pecl安装php mongodb扩展

作者:matrix 发布时间:2018-09-20 分类:零零星星

mongodbmongo扩展不同

与mongo扩展不同,此扩展是在»libmongoc和»libbson库之上开发的。它为核心驱动程序功能提供了最小的API:命令,查询,写入,连接管理和BSON序列化。

http://php.net/manual/zh/set.mongodb.php

安装扩展

 > sudo pecl install mongodb

显示success完成安装

Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.5.2
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini

配置so文件

一般安装成功会自动配置ini文件,但是还需要自行查看确保正常。

确保so文件配置成功 需要查看/usr/local/php/etc/php.ini文件末尾是否存在extension=mongodb.so

> sudo echo 'extension=mongodb.so' >> 'php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"'

最后pphinfo()输出查看扩展是否存在

图片4138-pecl安装php mongodb扩展

参考:
https://github.com/mongodb/mongo-php-driver

Alfred+workflows 快速截图ocr识别

作者:matrix 发布时间:2018-09-12 分类:零零星星

前些时间使用看到Alfred的ocr识别插件workflows插件真心不错,超实用的工具 完全胜任图片文字提取的工作。

mac自带的截图快捷工具我常常使用,但是能够截图之后马上对图片进行内容识别 这倒是很稀奇 至少我是这样。
一般专门的ocr软件我很少用 若要临时应急的话就会很麻烦 因为我需要去查找提供ocr识别服务的三方网站服务 然后进行图片上传 之后再复制内容到剪贴板。像这种情况下有个顺手的小工具是多爽 😆 😆 虽然插件也是使用开源库tesseract-ocr,但是整合到随手调用这就很少有人做了。

安装tesseract开源库

brew install tesseract #使用brew工具
tesseract --version #查看版本号

配置语言包

tesseract --list-langs #查看当前只是的语言

默认自带英文eng,简体中文为chi_sim

https://github.com/tesseract-ocr/tessdata
下载chi_sim_vert.traineddata,chi_sim.traineddata两文件放至/usr/local/Cellar/tesseract/3.05.02/share/tessdata。其中3.05.02为你安装的tesseract版本号

安装workflows

下载OCR

alfredworkflow被我简单添加了下触发关键字 cn中文,en英文

使用

图片4117-Alfred+workflows 快速截图ocr识别

图片4124-Alfred+workflows 快速截图ocr识别

ocr #默认所有中英文语言
ocr cn #指定识别中文
ocr en #指定识别英文

回车截图之后会出现消息通知(响应时间据字符长度而不定)

若内容为空 最好debug查看workflows报错信息

后续问题

自定义修改插件的时候发现有些时候输入的内容无法被Alfred读取 会被自动截断 无任何反应
这里是因为编码转换的问题导致的 确保输入内容以及输出内容的编码 过滤掉特殊字符
php处理:

 function force_utf8_safe($str) {
    $res = mb_convert_encoding($str, "UTF-8", "UTF-8" ); // replace invalid characters with ?
    $res = preg_replace('/\p{Cc}+/u', '?', $res); // replace control characters with ?
    return $res;
}

说明:
字符过滤来自于 https://github.com/willfarrell/alfred-encode-decode-workflow
还可以参考它的输入字符处理方式 使用normalise脚本再处理传入
参考:https://www.alfredforum.com/topic/10141-workflow-arguments-are-always-decomposed/

我的AlfredWorkflows:https://github.com/Hootrix/AlfredWorkflows

参考:
https://www.zhihu.com/question/20656680
https://tonydeng.github.io/2016/07/28/on-the-use-of-tesseract-picture-text-recognition/

PEACE~

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

作者:matrix 发布时间:2018-09-07 分类:零零星星

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-08-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/