• 刷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

  • Nginx POST请求405 Not Allowed

    full

    Nginx有时候POST请求是405错误,查到相关信息是说Nginx把请求的URL误认成静态页面地址,比如你定义的一个API如下

    var express = require('express')
    var app = express()
    
    app.post('/handle.html', function (req, res) {
      res.send('hello world')
    })
    

    以上代码,URL表面看好像是在请求服务器端的一个静态资源,但实际上是服务器端脚本在处理,解决方法是强制所有请求405都按200走,在server段加入以下代码

    ...

    READ ALL

  • Linux升级Python提示Tkinter模块找不到解决

    安装tkinter

    在Linux中Python默认是不安装Tkinter模块

    [root@li250-193 ~]# python
    Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import Tkinter
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named Tkinter
    >>>
    

    ...

    READ ALL

  • Linode十周年内存翻倍流量翻十倍

    Linode每周年都有惊喜,今天迎来十周年惊喜比往年力度要大!

    流量内存翻十倍

    现在登录Linode买VPS的朋友应该是升级后的配置,看看截图

    full

    价格也都涨了0.5刀,但这样的配置以及Linode的口碑实在很有诱惑力,VPS的性能主要就是内存,现在不少VPS提供商都在卖512M,设置diahosting还有180M/10刀/每月

    新买用户能享受到升级,老用户同样也可以免费升级,在Dashboard标签的又下方有一个升级提示,点击它系统会引导你进入下一步升级,最后进入队列

    ...

    READ ALL

  • JavaScript快速获取图片宽高的方法

    快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器。

    我们一步一步进入这个过程

    简陋的获取图片方式

    // 图片地址 后面加时间戳是为了避免缓存
    var img_url = 'https://www.qttc.net/static/upload/2013/13643608813441.jpg?'+Date.parse(new Date());
     
    // 创建对象
    var img = new Image();
     
    // 改变图片的src
    img.src = img_url;
     
    // 打印
    console.log('width:'+img.width+',height:'+img.height);
    

    ...

    READ ALL

  • 分享一道JavaScript闭包定时执行的笔试题

    这道笔试题如下

    var arr = ['第一次', '第二次', '第三次'];
     
    for (var i=0; i < arr.length; i++) {
      setTimeout(function () {
        document.getElementById('info').innerHTML = arr[i];
      }, i * 10000);
    }
    

    问你执行结果。第一眼看到这道题,我当即就知道考的是闭包,于是我最快就直接说三次的arr[i]的值都是表示数组最后一个值,所以三次赋值结果都是第三次。时间是10秒第一次,20秒第二次,30秒第三次。

    ...

    READ ALL