Gowhich

Durban's Blog

在主机列表中(像MacOS、linux的主机文件为/etc/hosts, windows系统下在C:\WINDOWS\system32\drivers\etc中)添加如下:

127.0.0.1 www.gravatar.com
127.0.0.1 graph.facebook.com
127.0.0.1 ajax.googleapis.com

保存后再重新打开(windows修改完了可能要禁用网卡再重新启用才会生效)

公共DNS

公共DNS 是一种面向大众免费的 DNS 互联网基础服务。我们知道要上网,就必须要 DNS 解析服务,尽管大多数电脑用户都很少会去手动设置 DNS 服务器地址,而是采用默认自动获取网络商 DNS 地址的方式,不过对于一些小型网络服务商而言,可能全球或者全国 DNS 节点比较少,这样就容易导致打开网页偏慢等现象。

更换 DNS 服务器地址为 公共DNS 后,可以在一定程度上加快域名解析速度防止 DNS劫持加强上网安全,还可以屏蔽大部分运营商的广告。下面列出几个目前常用的 公共DNS 服务器地址:

名称 DNS 服务器 IP 地址
OpenerDNS 42.120.21.30
阿里 AliDNS 223.5.5.5 223.6.6.6
V2EX DNS 199.91.73.222 178.79.131.110
CNNIC SDNS 1.2.4.8 210.2.4.8
114 DNS 114.114.114.114 114.114.115.115
Google DNS 8.8.8.8 8.8.4.4
OpenDNS 208.67.222.222 208.67.220.220

给出了这么多,说一下选择吧,如果是国内用户,没有洁癖的,可以考虑 114DNS阿里DNS,如果有洁癖,国内可以选择 V2EX DNSOpenerDNS,国外的可以选择很多,优选 Google 的,虽然有延迟,但还能接受,其他的看自己的网络情况了。

Google镜像站搜集 分享啦

Glgoo:http://www.glgoo.com/
九尾搜索:http://www.jwss.com/
谷粉搜搜:http://www.gfsswy.com/
谷粉搜搜:http://gufensoso.com/
谷粉恰搜:http://www.qiasou.com/
蝴蝶:http://www.xiexingwen.com/
一哥搜:http://www.egeso.com/
谷歌搜:http://www.gugesou.com/
谷大爷:http://g.phvb.cn
谷壳:http://www.googke.me/
南搜:http://nan.so/
白鸽:http://baigeso.com/
GG搜索:http://ggsousuo.duapp.com/
大中华:http://i.forbook.net/
红杏谷歌:http://www.hxgoogle.com/
逆天谷歌:http://www.go2121.com/
谷歌363:http://www.g363.com/
FKDD:http://fkdd.com/
Sosolu:http://www.sosolu.com/
OpenGG:http://www.opengg.cn/
Avira:https://safesearch.avira.com/
Suche:http://suche.web.de/
WOW:http://www.wow.com/
Ask:http://home.tb.ask.com/
Googleout:https://www.out1000.com/
WebWebWeb:http://webwebweb.com/
Disconnect:https://search.disconnect.me/

原版

http://carbyne.net.cn/
http://g.itechzero.com/
https://g.wen.lu/
https://s.ets.cc/
https://www.90r.org/
https://guge.io/
https://sepu.org/
https://gg.avpn.cc/
https://g4w.me/
https://s.bt.gg/
https://duliziyou.com/
https://www.booo.so/
https://www.muzhiso.com/
http://google1314.com/
http://gl.randomk.org/
https://www.ggncr.com/
https://g.ftfish.com/
https://allee.science/
http://www.kb58.cn/
http://google.ihuan.me/
http://discus.cf/
https://hk.g.net.co/
https://laoshandaoshi.so/
https://www.gotosearch.info/
http://www.googlestable.cn/
http://www.googleforchina.com/
http://0s.o53xo.m5xw6z3mmuxgizi.erenta.ru/

IP直连

http://4.31.38.9/
http://4.31.38.26/
http://4.31.38.27/
http://4.31.38.31/
http://58.123.102.23/
http://64.233.189.163/
http://66.185.84.19/
http://74.125.102.230/
http://74.125.104.113/
http://91.213.30.153/
http://95.173.210.55/
http://118.174.27.112/
http://173.194.1.13/
http://173.194.14.40/
http://173.194.14.41/
http://173.194.14.50/
http://173.194.14.52/
http://173.194.138.103/
http://201.163.0.13/
http://202.152.192.171/
http://203.211.0.100/
http://209.85.225.23/
http://209.85.226.146/
http://209.85.228.11/
http://209.85.228.19/

最近突然想试试git的tag标签,感觉git的标签很实用,比如说你要在某个分之上发布一个app的版本包,ok,你就可以直接将此分支搞过来就好了,下次你想使用或者查看上一个版本的包,可以指定上一个tag就可以直接获取到上一个版本的代码了。

其实理解一下tag的添加、查看、删除这些基本的操作很简单的。

问题是,如果我想要获得某个版本的代码即某个标签的代码,来做修改,改如何处理呢?

这里我在网上搜索了一些资料。简单的介绍了一下git的分支管理策略,这个对项目的管理,测试,分发,以及后面的代码bug修改都有很大的帮助。

一篇是git的分支管理策略,一篇是git标签的操作指南,简要的介绍了一个标签的创建和使用,更简单的git标签的使用也可以参考这篇文章:GIT-打标签,同时还有另外一篇文章,解决了我的疑问的文章,就是如何获取git打好的tag所对应的代码,了解了这几篇文章,我觉得对git的合理利用应该能够可以得到充分的理解了。

React组件的生命周期分成三个状态:

  • Mounting:已插入真实 DOM
  • Updating:正在被重新渲染
  • Unmounting:已移出真实

DOM
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。

  • componentWillMount()
  • componentDidMount()
  • componentWillUpdate(object nextProps, object nextState)
  • componentDidUpdate(object prevProps, object prevState)
  • componentWillUnmount()

此外,React 还提供两种特殊状态的处理函数

  • componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
  • shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

Ubuntu 14.04 LTS Wifi/Network 网络连接,输入法状态没有了,很可能是这样子的:

网络上的大概都很久远了,也许我这个也是很久远了,但是可以尝试一下.

Google chrome wanna remove 3 packages: Ubuntu-Desktop,
Indicator-application and network-management-indicator before install so
after install it you will be confused LOL

这个引自一篇外文的文章:

解决办法是:

1
sudo apt-get install indicator-application

不信的自己测试一下好了.

iframe 解禁 方案,应该是没有的,但是也不可能没有的,想要解禁iframe其实网上的方案可多的,大家都可以去试试,不过我这里你们可以试试这个属性:

1
sandbox=""

第一步:添加远程仓库

1
2
git remote add origin 第一个仓库地址 //origin只是个别名哦
git remote add osc 第二个仓库地址 //osc也是个别名哦

第二步:

创建分支

1
2
git checkout -b master
git checkout -b osc

第三步:

提交代码:

分别切换分支提交

1
2
3
4
5
git chekcout master
git push origin master
//=========================
git checkout osc
git push osc master

linux或者macosx 中可以按住那个sox这个库,可以使用play xxx.mp3来进行播放音乐

自己去找这个对应的源来按照那个就好了。

这里是用MacOS安装的。

1
brew install sox

Ubuntu的话 可以试试这个命令:

1
sudo apt-get install sox

这样就ok了

我自己下载了mp3音乐,直接执行下面的命令就可以播放音乐了。

1
play xxxx.mp3

突发奇想如何把他用nodejs实现呢,child_proccess.exec这个方法就可以实现了。

1
2
3
4
5
6
7
var child_process = require('child_process');
var mp3 = '/xxx/xxx/Downloads/small_apple.mp3';
child_process.exec('play '+mp3,function(err,stdout,stderr){
console.log(err.message.yellow);
console.log(stdout.blue);
console.log(stdout.red);
});

把此代码保存为playmusic.js就好了。

然后执行node命令就好了

1
node playmusic.js

我又发现一个奇葩,我呆住了,nodejs有个库叫做player,可以直接进行播放的,其实原理是一样的,来吧,代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var Player = require('player');
// create player instance
var player = new Player('/xxx/xxx/Downloads/small_apple.mp3');

// play now and callback when playend
player.play(function(err, player){
console.log('playend!');
});

// event: on playend
player.on('playend',function(item){
// return a playend item
console.log('src:' + item + ' play done, switching to next one ...');
player.play();
});

大家看下代码,这个test和match还是晕了我很久的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var __parsers = [];
__parsers.push({'regExp':/.*one.*/g});
__parsers.push({'regExp':/.*two.*/g});
__parsers.push({'regExp':/.*three.*/g});
__parsers.push({'regExp':/.*four.*/g});
__parsers.push({'regExp':/.*five.*/g});
__parsers.push({'regExp':/.*six.*/g});
__parsers.push({'regExp':/.*seven.*/g});
__parsers.push({'regExp':/.*eight.*/g});

var matchParser = function(subject){
for (var i = 0; i < __parsers.length; i++) {
// console.log('RegExp:',__parsers[i].regExp);
if(subject.match(__parsers[i].regExp)){
return __parsers[i];
}
}
throw new Error('No Match');
}

var testParser = function(subject){
for (var i = 0; i < __parsers.length; i++) {
// console.log('RegExp:',__parsers[i].regExp);
if (__parsers[i].regExp.test(subject)) {
return __parsers[i];
}
}
throw new Error('No Match');
}

简单的测试代码就这些。我们用一个循环来执行。

//第一种测试

1
2
3
4
5
6
7
8
for(var i=0;i<5;i++){
var subject = 'two';
try{
console.log(testParser(subject));
}catch(err){
console.log(err.message);
}
}

//结果

1
2
3
4
5
{ regExp: /.*two.*/g }
No Match
{ regExp: /.*two.*/g }
No Match
{ regExp: /.*two.*/g }

看吧,还是有没有匹配到的吧。罪过啊。

//第二种测试

1
2
3
4
5
6
7
8
for(var i=0;i<5;i++){
var subject = 'two';
try{
console.log(matchParser(subject));
}catch(err){
console.log(err.message);
}
}

//结果

1
2
3
4
5
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }
{ regExp: /.*two.*/g }

你们看,是不是瞬间很开心啊。

可以使用nodejs执行整理执行一下。被坑了的感觉有木有啊!

可以看出来,使用match的全部匹配出来了,为什么,给你一个可想的空间吧。match完胜啊。

0%