• 利用谷歌做站内搜索,免费的!

    站内搜索是必备的功能了,但搜索这玩意水很深,研究无底洞,而且更要命的是非常损耗服务器资源。在MySQL数据库中使用like关键字在数据比较多的时候那种蜗牛的速度更是让人蛋疼,专业一点的站点都会使用全文搜索,比like这种傻瓜匹配相对好点,但频繁的搜索请求也会扛不住。

    偶然看到有些站点利用谷歌做站内搜索,感觉不错,所以推荐那些为搜索而苦恼的童鞋们

    看看例子:

    full

    非常方便吧!格式:

    site:domain keyword

    ...

    READ ALL

  • CSS3实现背景颜色线性渐变gradient

    CSS3新加特性gradient可以实现背景颜色,鉴于各浏览器之间还有兼容性因此这里只说线性渐变,其它渐变就算是有也不敢贸然使用

    Mozilla

    仅针对FireFox

    background: -moz-linear-gradient(top, #eee, #aaa);
    
    • linear 表示线性
    • 参数top表示从顶部开始
    • 参数#eee表示开始颜色
    • #aaa表示结束颜色

    full

    Webkit

    background: -webkit-gradient(linear, 0 0, 0 100%, from(#eee), to(#aaa));
    

    ...

    READ ALL

  • Python数组list操作

    Python list相当于JavaScript的Array数组,可以随意添加删除元素,元素类型也不限定

    声明一个list

    arr = []
    

    往里边添加元素

    arr.append('New item')
    print arr # Output: ['New item']
    

    添加元素到第一个位置

    arr.insert(0, 'First item')
    print arr # Output: ['First item', 'New item']
    

    添加元素到第二个位置

    arr.insert(1, 'Second item')
    print arr # Output: ['First item', 'Second item', 'New item']
    

    ...

    READ ALL

  • Python字符串MD5加密

    Python加密模块有好几个,但无论是哪种加密方式都需要先导入相应的加密模块然后再使用模块对字符串加密。

    先导入md5加密所需模块

    import hashlib
    

    创建md5对象

    m = hashlib.md5()
    

    生成加密串,其中 password 是要加密的字符串

    m.update('password')
    

    获取加密串

    psw = m.hexdigest()
    

    输出

    print psw
    

    Output:

    5f4dcc3b5aa765d61d8327deb882cf99

    ...

    READ ALL

  • PHP系统函数in_array()使用

    PHP有一个系统函数is_array()可以判断一个值是否在数组中。

    语法如下:

    in_array(value,array,type)
    return boolen

    参数说明:

    • value: 要搜索的值
    • array: 被搜索的数组
    • type: 类型,true全等 ,false非全等(默认)

    示例一:普通使用

    $str = 1;
    $arr = array(1, 3, 5, 7, 9);
    $boolvalue = in_array($str, $arr);
    var_dump($boolvalue);
    

    Output:

    ...

    READ ALL

  • 刷iPhone的惨痛经历!

    前几天花血本入手两部在58上个人转手港版iPhone4,用一天感觉其中一部已越狱的iPhone打电话突然没声,发烫。感觉系统不好就想刷机,换个好系统。

    full

    刷机我早有听闻,但从来没实践,现在是实践的机会了。开始刷机路程,时间晚上九点。

    从iTunes点击更新升级提示3194

    一开始,我用iTunes更新到6.1.3,等了十多分钟下载了固件后开始安装,结果在验证的时候老提示3194错误。谷歌一下都说3194是网络原因,不是机器故障,弄一些什么hosts让电脑能访问gs.apple.com服务器就好。防火墙、杀毒、其他程序通通关闭以后,还是3194错误。准备放弃刷机!

    ...

    READ ALL

  • Linux监测日志tail命令详细使用

    如果在Linux下调试程序的朋友应该都知道tail命令,它确实是调试程序监测日志文件的能手。打开Linux输入以下命令看看命令的使用帮助

    [root@lee ~]# tail --help
    用法:tail [选项]... [文件]...
    显示每个指定文件的最后10 行到标准输出。
    若指定了多于一个文件,程序会在每段输出的开始添加相应文件名作为头。
    如果不指定文件或文件为"-" ,则从标准输入读取数据。
    
    长选项必须使用的参数对于短选项时也是必需使用的。
      -c, --bytes=K         输出最后K 字节;另外,使用-c +K 从每个文件的
                            第K 字节输出
      -f, --follow[={name|descriptor}]
                    即时输出文件变化后追加的数据。
                            -f, --follow 等于--follow=descriptor 
      -F            即--follow=name --retry
      -n, --lines=K            output the last K lines, instead of the last 10;
                               or use -n +K to output lines starting with the Kth
          --max-unchanged-stats=N
                               with --follow=name, reopen a FILE which has not
                               changed size after N (default 5) iterations
                               to see if it has been unlinked or renamed
                               (this is the usual case of rotated log files).
                               With inotify, this option is rarely useful.
          --pid=PID         同 -f 一起使用,当 PID 所对应的进程死去后终止
      -q, --quiet, --silent 不输出给出文件名的头
          --retry           即使目标文件不可访问依然试图打开;在与参数
                            --follow=name 同时使用时常常有用。
      -s, --sleep-interval=N   with -f, sleep for approximately N seconds
                                 (default 1.0) between iterations.
                               With inotify and --pid=P, check process P at
                               least once every N seconds.
      -v, --verbose            always output headers giving file names
          --help            显示此帮助信息并退出
          --version         显示版本信息并退出
    
    如果字节数或行数K 的第一个字符是"+",输出从文件开始第K 个项目,否则输出文件
    最后K 个项目。K 可以使用一下几种单位之一:
    b 512,kB 1000,K 1024,MB 1000*1000,M 1024*1024,
    GB 1000*1000*1000,G 1024*1024*1024,以及T,P,E,Z,Y。
    
    如果您希望即时追查一个文件的有效名称而非描述内容(例如循环日志),默认
    的程序动作并不如您所愿。在这种场合可以使用--follow=name 选项,它会使
    tail 定期追踪打开给定名称的文件,以确认它是否被删除或被其它某些程序重新创建过。
    
    请向bug-coreutils@gnu.org 报告tail 的错误
    GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>
    GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>
    请向<http://translationproject.org/team/zh_CN.html> 报告tail 的翻译错误
    要获取完整文档,请运行:info coreutils 'tail invocation'
    

    ...

    READ ALL

  • JavaScript获取图片原始尺寸

    上周我写了一篇快速获取图片大小的文章,参见《JavaScript快速获取图片宽高的方法》,在那篇文章里所获取的图片大小都是原始尺寸。既然这样,我今天为何还要再写一篇文章介绍如何获取页面上图片原始大小的方法呢?只是有些博友发邮件问我这个问题了,我感觉还是有必要写写。

    通过去除样式获取原始大小

    在JavaScript中获取页面中图片的大小都是最终样式呈现的大小,比如一张1000px宽的图片你给它设置宽为300px那么JavaScript获取到图片的宽度就是300px。

    ...

    READ ALL

  • Golang创建HTTP请求错误too many open files

    Golang写了一个小程序抓信息然后发送一个HTTP请求到指定的服务器

    http.Get("/someapi")
    

    服务运行了大概三天,发现有多处错误日志打印,并且转发没有工作

    xxx dial tcp x.x.x.x:8070: socket: too many open files
    

    判断了半天,发现是因为http创建的请求没有Close,导致连接数量过多,不能继续创建新的socket连接,解决方法很简单,在所有的请求都要Close

    res, err := http.Get("/someapi")
    if err != nil {
      panic(err)
    }
    
    // 这句话很重要,就算你不需要响应数据,也需要总是关闭
    defer res.Body.Close()
    res.Close = true
    

    ...

    READ ALL

  • Linux下tar命令exclude选项排除指定文件或目录

    在Linux中可以用tar打包目录以方便传输或者备份,我们先来看一个例子

    test文件夹有如下文件

    [root@lee ~]# ll test
    总用量 8
    -rw-r--r--. 1 root root    0 4月  14 22:18 a.jpg
    -rw-r--r--. 1 root root    0 4月  14 22:25 a.log
    -rw-r--r--. 1 root root    0 4月  14 22:18 a.txt
    -rw-r--r--. 1 root root    0 4月  14 22:18 b.jpg
    -rw-r--r--. 1 root root    0 4月  14 22:25 b.log
    -rw-r--r--. 1 root root    0 4月  14 22:18 b.txt
    drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir1
    drwxr-xr-x. 2 root root 4096 4月  14 22:18 dir2
    

    ...

    READ ALL