Php返回多个参数

function callee() {
    return array($content = "foo", $code = 200);
}

list($content, $code) = callee();

Minimum Viable Product 最小可行产品

In product development, the Minimum Viable Product (MVP) is a strategy used for fast and quantitative market testing of a product or product feature, popularized by Eric Ries for web applications.


https://en.wikipedia.org/wiki/Minimum_viable_product

Traits in Php 5.4

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

可以用此关键字实现多继承,类似Ruby中的Mixin


http://php.net/manual/zh/language.oop5.traits.php

OSX 文件系统大小写不敏感

HFS+(Mac文件系统)一般配置是大小写不敏感但大小写保留,意思是文件系统会认为fooFoO是同一个文件,但当创建该文件时系统就记住哪个字母大写哪个小写

当格式化成HFS+格式时你可以指定文件系统是否大小写敏感。但如果你格式化成UFS(Unix FileSystem)的话将会永远是大小写敏感

检查你的磁盘格式是否大小写敏感

diskutil info <device>

例如

diskutil info /dev/disk0s2

Name (User Visible): Mac OS Extended (Journaled)

如果是Mac OS Extended (Case-sensitive, Journaled)则表示大小写敏感,如果没有Case-sensitive字样则仅仅是大小写保留非大小写敏感。


http://apple.stackexchange.com/questions/22297/is-bash-in-osx-case-insensitive

Vim批量注释

  • 批量注释

    1. ctrl+v 进入列编辑模式
    2. 上下移动光标,把需要注释的行的开头选中
    3. shift+i,插入注释符,比如//
    4. Esc,就会全部注释了
  • 批量去掉注释

    1. ctrl+v,进入列编辑模式
    2. 横向选中列的个数,如//注释符号
    3. d, 就会删除注释符号

防止ssh过一段时间后中断

$ sudo vim /etc/ssh/sshd_config

修改

# 如果超过15秒后没有收到客户端的任何数据,sshd将通过安全通道向客户端发送一个"alive"消息,并等候应答,默认值0表示不发送
ClientAliveInterval 15

# sshd在未收到任何客户端回应前最多允许发送45个"alive"消息,默认值3
ClientAliveCountMax 45

重启sshd

$ sudo /etc/init.d/sshd restart

Php Cookie Deleted

使用setcookie('name', '')方式删除cookie时,PHP将cookie的值设置为deleted,过期时间设置为一年前。如果用户本地时间为两年前,则该cookie没有被删除,而是将值设置为了deleted。

比较靠谱的删除cookie的方法为:

setcookie('name', 'deleted', 1, $path, $domain);

注意:在PHP5.2版本之前(包含5.2),cookie的值可以不是deleted,但是不能为空,否则,时间参数将不被参考。

Php Utf-8 Bom

1. 测试接口是否有返回有BOM

curl -s http://i.wan.liebao.cn/ | head -1 |sed -n l

# 有BOM情况
\357\273\277{"data":{"uname":"jiangrongyong","s_face":"http:\/\/static.hdslb.com\/images\/member\/noface.gif"},"msg":"ok","code":1}

# 无BOM情况    
{"data":{"uname":"jiangrongyong","s_face":"http:\/\/static.hdslb.com\/images\/member\/noface.gif"},"msg":"ok","code":1}

2. vim设置BOM

设置utf-8编码

:set fileencoding=utf-8

添加BOM

:set bomb

删除BOM

:set nobomb

检测是否有BOM

:set bomb?

3. 查找有BOM的文件

grep -r -I -l $'^\xEF\xBB\xBF' $path

4. 批量删除BOM

grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'

Tmux

最近介绍tmux的文章好多,虽然已久仰大名,今天试用了一下,果然是神器。没用过screen,直接跳级使用tmux。。

记录下常用操作

输入tmux,进入tmux模式

tmux attach -t {session_name} attach到某个session

tmux kill-session -t {session_name} kill掉某个session

control + b 操作入口

" pane水平切割

% pane纵向切割

$ 重命名session

d detach tmux

Fibonacci Algorithm

1,1,2,3,5,8,13,21依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数(Fibonacci Sequence)。

任何相邻的两个数,次第相除(如8/13,13/21),其比率都最为接近0.618这个值,它的极限就是所谓的”黄金分割数”。

递推关系

f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2) //n>=2
3f(n)=f(n+2)+f(n-2)

用PHP打印斐波那契数

<?php
function fib($n) {
    if($n <= 1) {
        return $n;
    }
    return fib($n - 1) + fib($n - 2);
}

for($i = 0; $i < 9; $i++) {
    echo fib($i) . ' ';
}

github source

https://github.com/jiangrongyong/algorithm

优化方案,加入缓存 Ruby

def fibonacci(n, cache=Hash[[[0,0],[1,1]]])
    return cache[n] if cache[n]
    cache[n] = fibonacci(n-2, cache) + fibonacci(n-1, cache)
end
puts (1...1000).to_a.collect{|t| fibonacci(t) }.join(', ')