• 2016-03-01

    修改Xcode项目编译输出路径

    Views: 3734 | No Comments

    从菜单选取 File - Project - Settings.

    然后只修改 Advanced...

    选中 Legacy 那一项.

    Posted by ideawu at 2016-03-01 13:18:06 Tags:
  • 2016-02-29

    Xcode 设置iOS 9 允许HTTP请求

    Views: 4303 | No Comments

    在 Info.plist 中添加 NSAppTransportSecurity 类型 Dictionary.

    在NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型 Boolean, 值设为 YES.

    Posted by ideawu at 2016-02-29 18:22:32
  • 2016-02-25

    PHP 用 curl 读取 HTTP chunked 数据

    Views: 6767 | No Comments

    对于 Web 服务器返回的 HTTP chunked 数据, 我们可能希望在每一个 chunk 返回时得到回调, 而不是所有的响应返回后再回调. 例如, 当服务器是 icomet 的时候.

    在 PHP 中使用 curl 代码如下:

    <?php  
    $url = "http://127.0.0.1:8100/stream";
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'myfunc');
    $result = curl_exec($ch);
    curl_close($ch);
    
    function myfunc($ch, $data){
        $bytes = strlen($data);
        // 处理 data
        return $bytes;
    }
    

    但是, 这里有一个问题. 对于一个 chunk, 回调函数可能会被调用多次, 每一次大概是 16k 的数据. 这显然不是我们希望得到的. 因为 icomet 的一个 chunk 是以 "\n" 结尾, 所以回调函数可以做一下缓冲.

    function myfunc($ch, $data){
        $bytes = strlen($data);
        static $buf = '';
        $buf .= $data;
        while(1){
            $pos = strpos($buf, "\n");
            if($pos === false){
                break;
            }
            $data = substr($buf, 0, $pos+1);
            $buf = substr($buf, $pos+1);
    
            // 处理 data
        }
    }
    
    Posted by ideawu at 2016-02-25 16:44:11
  • 2016-02-25

    Objective-C 对二进制数据 NSData 进行 URL 编码

    Views: 3444 | No Comments

    Objective-C 和其它所谓的 Unicode 友好型编程语言, 大多对内存不友好, 这些语言一提到"二进制", 好像就当机了一样.

    所以, 我认为 PHP 确实是最好的编程语言, 对于 PHP 来说, 字符串就是二进制, 二进制就是字符串, 不管你什么字符集. 这并不是说 PHP 支持 Unicode, 事实上, PHP 对 Unicode 的支持是最友好最高级的. 例如, 拿到一段内存, 你想把它当作为 UTF-8 或者 UTF-16, 随你意, 只要你认为它是什么, 它就是什么, 然后, PHP 提供了对应的函数来处理.

    回到题目, 在 Objective-C 里, 要将一段二进制数据(也就是一段内存)进行 urlencode(URL 编码), 应该怎么做? 很不幸, CFURLCreateStringByAddingPercentEscapes() 函数只处理字符串. 没错, 又是字符串! 这就是不把字符串当二进制的坏处!

    所以, 只能自己写一个函数.

    static int is_safe_char(char c){
        if(c == '.' || c == '-' || c == '_'){
            return 1;
        }else if(c >= '0' && c <= '9'){
            return 1;
        }else if(c >= 'A' && c <= 'Z'){
            return 1;
        }else if(c >= 'a' && c <= 'z'){
            return 1;
        }
        return 0;
    }
    
    static NSString *urlencode_data(NSData *data){
        NSMutableString *ret = [[NSMutableString alloc] init];
        char *ptr = (char *)data.bytes;
        int len = (int)data.length;
        for(int i=0; i<len; i++){
            char c = ptr[i];
            if(is_safe_char(c)){
                [ret appendFormat:@"%c", c];
            }else{
                [ret appendFormat:@"%%%02X", c];
            }
        }
        return ret;
    }
    
    Posted by ideawu at 16:20:03
  • 2016-02-16

    iphp 框架增加 lazyload 特性

    Views: 5421 | No Comments

    基类中为了方便原则, 一般会加载所有可能用到的属性到 Context 中, 但这会导致性能问题, 所以需要 lazyload 机制. 例如, 某些属性只有在子类中被用到时, 才会真正地去查询数据库, 如果子类中不使用这些属性, 则不会发生数据库请求.

    原型:

    Context::lazyload($name, callable $callback_func);
    

    示例:

    class AppController extends Controller
    {
        function init($ctx){
            parent::init($ctx);
            $ctx->lazyload('account', array($this, 'ctx_lazyload'));
        }
    
        private function ctx_lazyload($name, $ctx){
            if($name == 'account'){
                return Account::get($ctx->user->id);
            }
        }
    }
    
    Posted by ideawu at 2016-02-16 11:41:54
  • 2016-01-29

    mtr 查看网络丢包率

    Views: 4910 | No Comments
    mtr 8.8.8.8
    

    统计网卡流量:http://www.ideawu.net/blog/archives/919.html

    Posted by ideawu at 2016-01-29 22:38:31
|<<<34567891011>>>| 7/120 Pages, 720 Results.