smartDns折腾记

smartdns是目前比较新的DNS分流解决方案,众所周知在科学上网方面,DNS污染一直都是一个较为让人感觉头疼的问题。目前的情况是这样的,如果使用国外无污染的DNS的53 udp协议端口,九成九会被国内的服务器抢答,返回错误的地址。所以奇技淫巧在于使用openDns的443端口。

另外一个问题就是对多个DNS测试看看谁能返回最快的地址,这种行为本身带有浓厚的中二气质,因为逻辑上你的ISP应该给你最快的地址,但是就是不信这件事的人就要折腾一番。

以及国内外无污染分流方案里ChinaDNS其实已经完成的很好了。

smartdns折腾一番以后认为返回速度并不快,而且本身额外带来了很多无用的开销。我估计是因为我的网络环境太好,压根用不上这么折腾的方案,只能估计是某些环境特别恶劣的时候作为备选方案来采用的。比如国内某些移动宽带环境。

使用Tencent WX JSSDK代替原有的百度LBS接口判断地理位置

从2019年初微信7版本开始,微信内公众号使用的html5接口中,地理定位接口在部分安卓手机上就出现不稳定的情况。

起初使用百度地图定位是如下代码

var geolocation = new BMap.Geolocation();
varmap = newBMap.Map(“container”);
vargeoc = newBMap.Geocoder();
var point1 = new BMap.Point(curlong,curlat);
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
lat=r.point.lat;
long=r.point.lng;
pt = newBMap.Point(long, lat);
console.log(pt);
distance = map.getDistance(point1,pt).toFixed(2);
其中point1的地理定位来源是预先存放的一个地理位置,计算距离在指定范围之后就可以进行匹配了。
现在新的算法是
//首先读取jsticket,然后计算token
varjsticket=”<%=jsticket%>”;
varnoncestr=”Wm3WZYTPz0wzccnW”;
vartimestamp=Math.floor(Date.now() / 1000).toString();
//注意这里使用当前页面为回调页面
varurl=window.location.href;
resultstr=”jsapi_ticket=”+jsticket+”&noncestr=”+noncestr+”&timestamp=”+timestamp+”&url=”+url;
sign=sha1(resultstr);
下面配置当前页面
wx.config({
debug:false,
appId:’wx9669b157f8ab081c’,
timestamp:timestamp ,
nonceStr:noncestr,
signature:sign,
jsApiList: [‘getLocation’]
});
//一旦加载成功即可获得坐标
wx.ready(function(){
wx.getLocation({
type:’wgs84′, // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入’gcj02′
success:function (res) {
varlatitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
varlongitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
// $(“#lats”).val(latitude);
// $(“#lngs”).val(longitude);
distanceByLnglat(longitude,latitude,curlong,curlat);
},
fail:function(err){
alert(JSON.stringify(err));
}
})
});

//下面是用球面坐标计算wgs84两点间距离

functiondistanceByLnglat(lng1,lat1,lng2,lat2)
{
varradLat1 = Rad(lat1);
varradLat2 = Rad(lat2);
vara = radLat1 – radLat2;
varb = Rad(lng1) – Rad(lng2);
vars = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137.0;// 取WGS84标准参考椭球中的地球长半径(单位:m)
s = Math.round(s * 10000) / 10000;
alert(s);
distance=s;
$(“#tjbutton”).attr(“disabled”,false);
if(distance<1000){glocalcheck=true};
// //下面为两点间空间距离(非球面体)
// var value= Math.pow(Math.pow(lng1-lng2,2)+Math.pow(lat1-lat2,2),1/2);
// alert(value);
}
functionRad(d)
{
returnd * Math.PI / 180.0;
}
使用腾讯js sdk后定位速度比使用百度地图慢一点,但是精度高了很多。

微信机器人的架设

1.安装docker。装完之后别忘了在advance目录里设置一下镜像所在目录,还有就是设置share文件夹把要给docker使用的磁盘share给docker

2.使用

docker pull registry.docker-cn.com/zixia/wechaty

来拉取中国区镜像,关于中国区镜像问题可以参考。

https://www.docker-cn.com/registry-mirror

3.挂载镜像文件

docker run -ti –rm –volume=”F:\mycode\wechaty”:/bot registry.docker-cn.com/zixia/wechaty mybot.js

这里的–volume后面的路径要求是当前之前share过的那个磁盘的路径,否则无法加载,这句话的意思就是挂载wechaty这个文件夹为镜像里的bot目录,因为wechaty默认运行的路径就是启动bot目录下的mybot.js这个文件。

写好之后可以用-d 命令长期后台。下面考虑做出一个接口,让这个bot可以访问一些内部服务,于是只要发指令给bot,bot就可以查询内部接口返回结果了。

4.接下来尝试将现有数据序列化,首先下载了一个mongo镜像

docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db –name mongo docker.io/mongo

然后下载并运行了一个mong-express镜像
docker run –link mongo:mongo -p 8081:8081 mongo-express

现在本地有一个数据库服务器和一个数据库服务器的管理器了。下一步可以考虑写一个express的接口了。

appium连接夜神模拟器

首先需要安装appium,直接从官网下载即可。

打开之后并不需要配置它和模拟器的连接,模拟器连接是靠ADB来做的。

接着在夜神模拟器目录下执行adb device命令,活的当前活动设备的列表,如果显示

E:\nopx\Nox\bin>adb devices
List of devices attached
127.0.0.1:62001 device

这种即表示完成了,接着把这个目录下的adb加到path里面,让任何目录调用的时候都能找到他。

当然还需要安装python的类库pip install Appium-Python-Client

# coding=utf-8
from appium import webdriver
接着就在python里引用然后调用
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub&#8217;, desired_caps)
注意这里的http地址其实是appuim配置服务器的地址和端口。

Angular2的相关资料

UI类库

老牌的ng-bootstrap http://valor-software.com/ngx-bootstrap/#/

material angular https://material.angular.io/components 官方产品 目前在beta状态

ionic https://ionicframework.com/ 移动端适配的几乎唯一选择

好的代码示例

管理门户 https://github.com/akveo/ng2-admin

工具的使用,创建新工程

https://github.com/angular/angular-cli

先使用Npm  i -g angular-cli 安装

安装之后比较常用的就是

ng new

The Angular CLI makes it easy to create an application that already works, right out of the box. It already follows our best practices!

ng generate

Generate components, routes, services and pipes with a simple command. The CLI will also create simple test shells for all of these.

ng serve

Easily test your app locally while developing.

装完可以直接用ng– help看一下

第二个方案是使用 webpack

https://github.com/AngularClass/angular2-webpack-starter

去天津玩了一趟

据说所有事情都早晚会变成回忆。所以为了让回忆有趣意一点,我来记述一下这两天去天津旅游的行程。

第一天早晨乘坐九点多的高铁一路顺利的到达天津。下车之后出错了站台,导致后来选错了酒店。

在酒店踌躇半天之后跑去看了张学良故居

以上是张学良故居的一角。

中午在金牌餐厅吃了八珍豆腐。这个菜很好吃


下午去听了人民公园里的西岸相声。我常来听,主要是为了发掘自己有多高明


晚上在听一居吃了天津老爆三


第二天逛了大悲禅院


中午吃了包子

Reload Express.js application on file save

When you start with Node.js and Express you are probably friends with
CTRL + S (Save file)

CMD + Tab (Mac, switch windows)

CTRL + C (Stop server/application in terminal)

UP ARROW then ENTER (Restart server/application)

However there are tools to do this for you, one is Nodemon, and you can install this globably with
npm install -g nodemon
For your standard Node.js app which you start with node server.js you change that call to nodemon server.js. Now, each time you make a change Nodemon will handle restarting the app … think of it frantically calling CTRL+C, UP ARROW & ENTER in the background for you.
For Express.js the setup is slightly different. From the terminal you would use something like this (Mac/Linux) npm start or DEBUG=myApp npm start to get your project up and running on http://localhost:3000. To use Nodemon here you need to edit your projects package.json file so it looks like this

  “scripts”:{

    // “start”: “node ./bin/www”

    “start”: “nodemon ./bin/www”

   }
Once that’s done, start your Express.js project the normal way and each time you make a change you can go straight to the browser and refresh the page.