分类 学习笔记 下的文章

Mac升级High Sierra 10.13后git提示missing xcrun错误的解决方法

昨天闲着没事升级了MacOS High Sierra 10.13,今早写代码打开PyCharm提示Git错误,如下图所示:

在想应该不是路径不对吧,iTerm看了下路径没错,执行git就报错了

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决方法:

只需要在终端下执行如下命令,在弹出的对话框中点击安装,等待安装完成即可!

xcode-select --install

如下图所示:

安装完成后重启PyCharm就可以正常使用了。

PHP成熟源码加密方案对比

screenshot

# 方案 类型 是否免费 优劣势分析
1 Zend Guard 基于加解密客户端 收费 PHP官方出品,是目前成熟的加密方案,不支持PHP7。Zend Guard用于加密(安装在开发或打包环境),Zend Guard Loader用于解密(安装在线上环境)软件下载
市面上仅流传出Zend Guard 6.0的破解版,支持PHP 5.3 5.4,安全平台使用的是PHP 5.6.30。
2 ionCube PHP Encode 基于加解密客户端 收费 Zend Guard只能对带有PHP标记或源码的文件进行加密,而ionCube可对PHP或非PHP文件进行加密,ionCube在功能方面经过测试优胜于Zend公司的ZendGuard。
没有找到破解版。
3 Swoole Compiler 加密后可直接运行 收费 支持5.4-7.2全系列版本,优点:进行了很深入的编译优化,以目前 PHP 反汇编领域的情况看,根本破不了。
Swoole Compiler 有两道工序,第一步:从源码编译为 opcode,这一步会移除代码中除逻辑以外的其他信息,如注释、变量名称、类名、常量、函数名。 第二步:opcode 加密混淆处理。这一步才是关键,最终生成的指令连 vld、phpdbg 这些工具都无法识别。
4 PHP Screw 加密后可直接运行 免费 开源项目,没有维护了。加密算法比较弱,网上已有 破解方法
5 PHP Screw plus 基于扩展 免费 开源项目,基于扩展来加解密,采用AES256算法。他还有个功能,可阻止执行未经许可的php文件,这样黑客就算上传了webshell也不能执行。
6 PHP Beast 基于扩展 免费 开源项目,基于扩展来加解密,可选DES、AES、BASE64加密算法。支持自定义开发加密模块。

效率提升:打造秒开国内外站点的浏览器

0x00 题外话

天下武功,唯快不破!

  1. 电脑/浏览器快
  2. 网络快

0x01 网络拓扑

骨干网

目前,中国拥有九大骨干网:

  • 中国公用计算机互联网(CHINANET)
  • 中国科技网(CSTNET)
  • 中国教育和科研计算机网(CERNET)
  • 中国金桥信息网(CHINAGBN)
  • 中国联通互联网(UNINET)
  • 中国网通公用互联网(CNCNET)
  • 中国移动互联网(CMNET)
  • 中国国际经济贸易互联网(CIETNET)
  • 中国长城互联网(CGWNET)

CHINANET

CHINANET骨干网核心层由北京、上海、广州、沈阳、南京、武汉、成都、西安等8个城市的核心节点组成。核心节点之间为不完全网状结构,以北京、上海、广州为中心的三中心结构。

CN2

CN2全称为中国电信下一代承载网,英文Chinatelecom Next Carrier Network,缩写为CNCN,进一步缩写为CN2。

中国电信CN2网络特点:

CN2是中国电信最新建设的最先进基于MPLS技术的承载网,主要提供给客户MPLS VPN业务,比之基于ChinaNet 提供的VPN业务,无论是带宽保证和延迟上有着无可比拟的优势,而且CN2有自己专用的欧洲出口和美洲出口(独立于ChinaNet的),所以使用CN2网络访问国外网络速度极快,当然CN2价格也很昂贵,除非有特殊需要,一般都是有经济实力的大公司使用。

ChinaNet(CN1)和CN2的差异化定位

ChinaNet

ChinaNet国际互联

CN2

CN2国际互联

中国大陆的海底光缆连接点只有三个(青岛、上海、汕头),共6条 来源

ChinaNet:定位与个人大众互联网业务,主要是宽带接入业务,提供普遍服务,担负中国全民信息化普及的重任;

CN2网络:定位与大客户业务和高品质互联网业务,为企业和大众提供可选择的优质服务,满足特殊应用、特殊客户群体、特殊行业的高品质要求。这就像高速公路与普通公路、高铁和普快一样,让客户有更多的选择。

0x02 测速对比

ping + traceroute

traceroute可视化工具 BestTrace

洛杉矶CN2

$ ping -c10 107.151.180.xxx
PING 107.151.180.xxx (107.151.180.xxx): 56 data bytes
64 bytes from 107.151.180.xxx: icmp_seq=0 ttl=47 time=164.298 ms
64 bytes from 107.151.180.xxx: icmp_seq=1 ttl=47 time=178.755 ms
64 bytes from 107.151.180.xxx: icmp_seq=2 ttl=47 time=164.465 ms
64 bytes from 107.151.180.xxx: icmp_seq=3 ttl=47 time=167.945 ms
64 bytes from 107.151.180.xxx: icmp_seq=4 ttl=47 time=164.087 ms
64 bytes from 107.151.180.xxx: icmp_seq=5 ttl=47 time=163.866 ms
64 bytes from 107.151.180.xxx: icmp_seq=6 ttl=47 time=163.814 ms
64 bytes from 107.151.180.xxx: icmp_seq=7 ttl=47 time=164.456 ms
64 bytes from 107.151.180.xxx: icmp_seq=8 ttl=47 time=164.994 ms
64 bytes from 107.151.180.xxx: icmp_seq=9 ttl=47 time=166.280 ms

--- 107.151.180.xxx ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 163.814/166.296/178.755/4.328 ms

洛杉矶非CN2

测试域名来源

$ ping -c10 w12.gubo.org
PING w12.gubo.org (23.247.25.156): 56 data bytes
64 bytes from 23.247.25.156: icmp_seq=0 ttl=46 time=408.069 ms
64 bytes from 23.247.25.156: icmp_seq=1 ttl=46 time=427.814 ms
64 bytes from 23.247.25.156: icmp_seq=2 ttl=46 time=448.257 ms
64 bytes from 23.247.25.156: icmp_seq=3 ttl=46 time=467.056 ms
64 bytes from 23.247.25.156: icmp_seq=4 ttl=46 time=487.210 ms
64 bytes from 23.247.25.156: icmp_seq=5 ttl=46 time=302.851 ms
64 bytes from 23.247.25.156: icmp_seq=6 ttl=46 time=322.496 ms
64 bytes from 23.247.25.156: icmp_seq=7 ttl=46 time=293.046 ms
64 bytes from 23.247.25.156: icmp_seq=8 ttl=46 time=362.551 ms
64 bytes from 23.247.25.156: icmp_seq=9 ttl=46 time=381.685 ms

--- w12.gubo.org ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 293.046/390.103/487.210/65.507 ms

香港CN2

$ ping -c10 47.90.126.43
PING 47.90.126.43 (47.90.126.43): 56 data bytes
64 bytes from 47.90.126.43: icmp_seq=0 ttl=45 time=48.971 ms
64 bytes from 47.90.126.43: icmp_seq=1 ttl=45 time=49.702 ms
64 bytes from 47.90.126.43: icmp_seq=2 ttl=45 time=49.817 ms
64 bytes from 47.90.126.43: icmp_seq=3 ttl=45 time=49.186 ms
64 bytes from 47.90.126.43: icmp_seq=4 ttl=45 time=49.712 ms
64 bytes from 47.90.126.43: icmp_seq=5 ttl=45 time=49.047 ms
64 bytes from 47.90.126.43: icmp_seq=6 ttl=45 time=50.129 ms
64 bytes from 47.90.126.43: icmp_seq=7 ttl=45 time=56.474 ms
64 bytes from 47.90.126.43: icmp_seq=8 ttl=45 time=49.993 ms
64 bytes from 47.90.126.43: icmp_seq=9 ttl=45 time=49.371 ms

--- hk3.vxtrans.link ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 48.971/50.240/56.474/2.111 ms

香港非CN2

$ ping -c10 103.56.217.77
PING 103.56.217.77 (103.56.217.77): 56 data bytes
64 bytes from 103.56.217.77: icmp_seq=0 ttl=40 time=284.071 ms
64 bytes from 103.56.217.77: icmp_seq=1 ttl=40 time=284.210 ms
64 bytes from 103.56.217.77: icmp_seq=2 ttl=40 time=283.120 ms
64 bytes from 103.56.217.77: icmp_seq=3 ttl=40 time=447.613 ms
64 bytes from 103.56.217.77: icmp_seq=4 ttl=40 time=298.072 ms
64 bytes from 103.56.217.77: icmp_seq=5 ttl=40 time=298.584 ms
64 bytes from 103.56.217.77: icmp_seq=6 ttl=40 time=299.883 ms
Request timeout for icmp_seq 7
64 bytes from 103.56.217.77: icmp_seq=8 ttl=40 time=339.707 ms
64 bytes from 103.56.217.77: icmp_seq=9 ttl=40 time=298.915 ms

--- 103.56.217.77 ping statistics ---
10 packets transmitted, 9 packets received, 10.0% packet loss
round-trip min/avg/max/stddev = 283.120/314.908/447.613/49.622 ms

网页浏览

所有速度演示站点 - 古博

0x03 VPS推荐

自己用过+靠谱的

第三方/网友测评

0x04 代理工具&插件

Shadowsocks(R)

一个可穿透中国防火墙(GFW)的快速代理。

使用说明

win简明教程



秒开国内外站点配置技巧

方式一:

您可以在【系统代理模式】中选择【全局模式】

然后在【代理规则】中选择【绕过局域网和大陆】

方式二:

您可以在【系统代理模式】中选择【PAC模式】

然后更新PAC为【绕过大陆常见域名列表】

以上任意方式都可以帮助您畅游国际网络

COW

COW 是一个简化穿墙的 HTTP 代理服务器。它能自动检测被墙网站,仅对这些网站使用二级代理。使用说明

Proxy SwitchyOmega

Chrome插件,可轻松快捷地管理和切换多个代理设置。安装地址

参考内容

LogStash简易数据中转方案

有时一些小规模的数据中转需求,可直接使用 LogStash::Inputs::TCPLogStash::Outputs::TCP 来做转发工作。

在实际配置时遇到一个坑,梳理下备忘。

配置示例

简易架构图

简易架构图

普通接收端配置

input {
    syslog {
        host => "10.0.0.10"
        port => "514"
    }
}
filter {}
output {
    redis {
        host => ["10.0.0.11"]
        port => 6379
        data_type => "list"
        codec => "json"
        key => "xxlog"
        timeout => 30
        congestion_interval => 5
    }
}

数据中转client配置

input {
    syslog {
        host => "192.168.0.10"
        port => "514"
    }
}
filter {}
output {
    tcp {
        host => "10.0.0.10"
        port => 8888
        mode => "client"     //划重点
        codec => json_lines  //划重点
    }
}

中转接收端配置

input {
    tcp {
        host => "10.0.0.10"
        port => 8888
        mode => "server"  //划重点
        codec => json     //划重点
    }
}
filter {}
output {
    redis {
        host => ["10.0.0.11"]
        port => 6379
        data_type => "list"
        codec => "json"
        key => "xxlog"
        timeout => 30
        congestion_interval => 5
    }
}

配置说明

在数据中转端采用 LogStash::Outputs::TCP 方式发送给远端的 TCP 端口,这里需要注意的是,默认 LogStash::Outputs::TCP 的 codec 选项是 json,而远端的 LogStash::Inputs::TCP 的默认 codec 选项却是 plain !!所以不指定各自的 codec ,对接肯定是失败的。

另外,由于 IO BUFFER 的原因,即使是两端共同约定为 json 依然无法正常运行,接收端会认为一行数据没结束,一直等待直至自己 OutOfMemory !

所以,正确的做法是,发送端指定 codec 为 json_lines ,这样每条数据后面会加上一个回车,接收端指定 codec 为 json_lines 或者 json 均可,这样才能正常处理。

Elasticsearch数据分析实践之聚合功能介绍

1. terms聚合(group by+sum)

使用场景

获取数据中某个字段的值列表,例如nginx访问日志中clientip列表,通过内置排序取前10即为网站TOP10访客。

query DSL

{
  "size": 0,
  "aggs": { [1]
    "topIP": { [2]
      "terms": { [3]
        "field": "clientip",
        "size": 10,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}
-1- 聚合操作被置于顶层参数 aggs 之下(如果你愿意,完整形式 aggregations 同样有效)
-2- 然后,可以为聚合指定一个我们想要名称,本例中是: topIP
-3- 最后,定义单个桶的类型 terms

response

"aggregations": {
    "topIP": {
      "buckets": [
        {
          "key": "123.59.215.53",
          "doc_count": 961868
        },
        {
          "key": "115.231.24.219",
          "doc_count": 804120
        },
        {
          "key": "58.215.139.89",
          "doc_count": 439965
        },
        ……
      ]
    }
  }

可视化

饼图
饼图

条形图
条形图

2. date_histogram聚合

使用场景

时间维度上构建指标分析,如:

  • 网站今天每小时的访问量是多少?
  • 网站今天每小时的平均响应时间是多少?

query DSL

1 网站今天每小时的访问量是多少?
{
  "size": 0,
  "aggs": {
    "page_view": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "1h",
        "time_zone": "Asia/Shanghai",
        "format": "yyyy-MM-dd HH:mm",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493827200000,
          "max": 1493913599999
        }
      }
    }
  }
}
2 网站今天每小时的访问量和平均响应时间是多少?
{
  "size": 0,
  "aggs": {
    "page_view": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "1h",
        "time_zone": "Asia/Shanghai",
        "format": "yyyy-MM-dd HH:mm",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493827200000,
          "max": 1493913599999
        }
      },
      "aggs": {
        "avg_resp_time": {
          "avg": {
            "field": "upstream_response_time"
          }
        }
      }
    }
  }
}

response

"aggregations": {
    "page_view": {
      "buckets": [
        {
          "avg_resp_time": {
            "value": 0.008664544491125232
          },
          "key_as_string": "2017-05-04 09:00",
          "key": 1493859600000,
          "doc_count": 321402
        },
        {
          "avg_resp_time": {
            "value": 0.015245752238360864
          },
          "key_as_string": "2017-05-04 10:00",
          "key": 1493863200000,
          "doc_count": 456973
        },
        {
          "avg_resp_time": {
            "value": 0.01839558196852533
          },
          "key_as_string": "2017-05-04 11:00",
          "key": 1493866800000,
          "doc_count": 754249
        },
        {
          "avg_resp_time": {
            "value": 0.11747828058831987
          },
          "key_as_string": "2017-05-04 12:00",
          "key": 1493870400000,
          "doc_count": 530589
        },
        {
          "key_as_string": "2017-05-04 13:00",
          "key": 1493874000000,
          "doc_count": 64519
        }
      ]
    }
  }

可视化

3. histogram聚合

使用场景

针对数值型指标,通过设定间隔大小,快速绘制条形图。

query DSL

{
  "size": 0,
  "aggs": {
    "page_view": {
      "histogram": {
        "field": "bytes",
        "interval": 1024
      }
    }
  }
}

response

"aggregations": {
    "topIP": {
      "buckets": [
        {
          "key": 0,
          "doc_count": 199002
        },
        {
          "key": 1024,
          "doc_count": 296
        },
        {
          "key": 2048,
          "doc_count": 1754
        },
        {
          "key": 3072,
          "doc_count": 13
        },
        {
          "key": 4096,
          "doc_count": 15
        },
        {
          "key": 5120,
          "doc_count": 131
        },
        ……
      ]
    }
  }

可视化

4. cardinality聚合(unique count)

使用场景

统计去重后的数量,它提供一个字段的基数,即该字段的 distinct 或者 unique 值的数目。 SQL 形式为:

SELECT COUNT(DISTINCT color) FROM cars

query DSL

{
"size": 0,
  "aggs": {
    "2": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "30s",
        "time_zone": "Asia/Shanghai",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493881370817,
          "max": 1493882270817
        }
      },
      "aggs": {
        "1": {
          "cardinality": {
            "field": "uri_path"
          }
        }
      }
    }
  }
}

可视化