欢快的使用谷歌搜索

无障碍使用

使用谷歌搜索的时候,要么无法访问,要么谷歌会将你的 google.com 重定向到具有特定国家或地区后缀的谷歌搜索地址,如 google.com.hk 等
当然,我们可以直接输入这类带地区后缀的地址, 这样有时也能实现访问, 当是很多时候却并不好用,也常有无法访问的时候

避免谷歌重定向的方法是使用 google.com/ncr , 这种方法屡试不爽非常可靠,但是停止搜索一会后却又不行了,然后又得继续手动的输入这个地址

那么有没有办法自动在 google.com 后面加入 ncr 呢,万能的谷歌插件没让人失望
这个插件便是 NoCountryRedirect (NCR)

谷歌使用是 https 协议,我们还需要让我们的输入 google.com 自动使用 https, 这样我们还需要1款插件 HTTPS Everywhere

好了,这样我们就能用谷歌愉快的进行各种搜索了

hosts来一计

https://github.com/racaljk/hosts

更好的使用

编辑 hosts 文件,在末尾加入 2 行

mac os系统问题解决

在 OS X El Capitan 安装 git-svn

在 Mountain Lion 和 Mavericks 系统中,安装 git-svn 中断的解决办法如下
不幸的是,由于 El Capitan 系统保护机制,上述操作无效了

1
2
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN /System/Library/Perl/Extras/5.18/SVN
ln: /System/Library/Perl/Extras/5.18/SVN: Operation not permitted

下面操作是新的有效的解决办法
因为虽然不能写入 /System, 但是可以写入 /Library

1
2
3
sudo mkdir /Library/Perl/5.18/auto
sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/SVN /Library/Perl/5.18/darwin-thread-multi-2level
sudo ln -s /Applications/Xcode.app/Contents/Developer/Library/Perl/5.18/darwin-thread-multi-2level/auto/SVN /Library/Perl/5.18/auto/

web相关

js对象的定义

无序属性的集合,其属性可以包含基本值、对象或者函数
一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数

1
2
3
4
5
6
7
8
9
var Person=function(){
this.name="phodal";
this.weight=50;
this.height=166;
this.future=function dream(){
return "future";
};
};
var person=new Person();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var calc={
add: function(a,b){
return a+b;
},
sub: function(a,b){
return a-b;
},
dif: function(a,b){
if(a>b){
return a;
}else{
return b;
}
}
}
1
2
3
4
5
6
7
8
9
function Calc(){
}
Calc.prototype.add=function(a,b){
return a+b;
};
Calc.prototype.sub=function(a,b){
return a-b;
};

原型继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var Chinese=function(){
this.country="China";
}
var Person=function(name,weight,height){
this.name=name;
this.weight=weight;
this.height=height;
this.futrue=function(){
return "future";
}
}
Chinese.prototype=new Person();
var phodal=new Chinese("phodal",50,166);

浏览器渲染过程

  • 解析HTML去构建DOM树
  • 渲染树形结构
  • 生成渲染的树形图布局
  • 绘制树形图

第一步 Parse HTML,而 Parse HTML 实质上就是将其将解析为 DOM Tree。与此同时,CSS 解析器会解析 CSS 会产生 CSS 规则树。
随后会根据生成的 DOM 树和 CSS 规则树来构建 Render Tree,接着生成 Render Tree的布局,最后就是绘制出 Render Tree。

macos查看网络端口情况

使用 netstat 命令

1
netstat -nat | grep <port>
1
netstat -nat |grep LISTEN

使用 lsof 命令

1
2
3
4
5
6
lsof -n -P -i TCP -s TCP:LISTEN
-n 表示主机以ip地址显示
-P 表示端口以数字形式显示,默认为端口名称
-i 意义较多,具体 man lsof, 主要是用来过滤lsof的输出结果
-s 和 -i 配合使用,用于过滤输出

使用 telnet 命令

1
telnet 127.0.0.1 <port>

使用 nc 命令

1
2
3
4
5
6
7
nc -w <time> -n -z <ip> <port_start-port_end>
-w 表示等待连接时间
-n 尽量将端口号名称转换为端口号数字
-z 对需要检查的端口没有输入输出,用于端口扫描模式
ip 需要检查的ip地址
port_start-port_end 可以是一个端口,也可以是一段端口,返回结果为开放的端口

vagrant 常用操作

查看全局状态

vagrant global-status

基本安装流程,以centos为例

vagrant add centos cent.box

vagrant init centos

vagrant up

vagrant ssh

销毁

vagrant destroy

vagrant box remove centos

PHP代码重构

删除 else

1
2
3
4
5
6
7
8
function test($arg)
{
if($arg == 'foobar'){
return true;
}else{
return false;
}
}

更好的写法

1
2
3
4
5
6
7
8
function test($arg)
{
if($arg == 'foobar'){
return true;
}
return false;
}

拆分为多个函数

这种方式需要将函数名取的尽量清晰易懂,不要嫌长。

1
2
3
4
5
6
7
8
if($age > 18){
doSomeThingA();
doSomeThingB();
doSomeThingC();
}else{
doSomeThingD();
doSomeThingE();
}

多层 if 嵌套的语法,把他写成线性的,就像写规则一样将其一条条罗列出来

1
2
3
4
5
6
7
8
9
10
11
12
13
function match($age, $salary, $pretty){
if($age > 18){
// do some thing A;
if($salary > 5000){
// do some thing B;
if($pretty == true){
return true;
}
}
}
return false;
}

改写成这样

laravel中用到的ServiceProvide

路由

全局限制

如果你希望路由参数可以总是遵循正则表达式,则可以使用 pattern 方法。你应该在 RouteServiceProvider 的 boot 方法里定义这些模式:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 定义你的路由模型绑定,模式过滤器等。
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function boot(Router $router)
{
$router->pattern('id', '[0-9]+');
parent::boot($router);
}

模式一旦被定义,便会自动应用到所有使用该参数名称的路由上:

1
2
3
Route::get('user/{id}', function ($id) {
// Only called if {id} is numeric.
});

路由模型绑定

Laravel 路由模型绑定提供了一个方便的方式来注入类实例到你的路由中。例如,除了注入一个用户的 ID,你也可以注入与指定 ID 相符的完整 User 类实例。

首先,使用路由的 model 方法为指定参数指定类。必须在 RouteServiceProvider::boot 方法中定义你的模型绑定:

绑定参数至模型

laravel 技巧

快速找到 facade 中对应的类

1
2
3
Route::get('test', function(){
dd(get_class(HTML::getFacadeRoot()));
});

或者使用 idehelper

将数据表里的数据导出成 Seeder 文件

  1. composer require orangehill/iseed
  2. 在 config/app.php 文件中添加 Service Provider
  3. php artisan iseed 后面带上本地数据表的名称, 可直接将数据库表的内容转换为 seeder 文件
  4. 强制覆盖导出文件 – force

建议 使用模型工厂来填充数据

模型工厂

避免

1
factory(\App\Models\User::class)->times(300)->create();

正确的做法:使用 make 方法

1
2
$users = factory(\App\Models\User::class)->times(1000)->make();
\App\Models\User::insert($users->toArray());

传统方式