Month: December 2010

  • 使用 PECL 的 OAuth 库访问 QQ 微博 API

    大势所趋,QQ 也在自家门上开了个小洞让诸位看客过过瘾。不过 API 文档不给力,疏漏多、讲得粗,没有 SDK,没有 Step by step,关键细节交代不清……幸而,摸索两日,总算是探得一个靠谱的办法——PECL 的 OAuth 库访问。

    特别记录于此,供众玩家观赏。
    (more…)

  • 使用 PECL 的 OAuth 访问腾讯微薄 API 的一点麻烦

    尝试用 PECL 的 OAuth 访问腾讯微薄,到 Access Token 那步总是有问题。 5% 的成功率。在 Request Token 的时候,也总有不成功的情况发生。

    捕捉到异常:“Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)”,服务器返回“Invalid / expired Token”。

    奇怪的是同样的代码,那 5% 的成功率是哪里来的。上 Q 一问,腾讯某大牛提示检查检查 nonce 或者 timestamp 是不是正确。于是乎,检查了一下 OAuth 的代码

    	if (soo->nonce) {
    		nonce = estrdup(soo->nonce);
    	} else {
    		struct timeval tv;
    		int sec, usec;
    		/* XXX maybe find a better way to generate a nonce... */
    		gettimeofday((struct timeval *) &tv, (struct timezone *) NULL);
    		sec = (int) tv.tv_sec;
    		usec = (int) (tv.tv_usec % 0x100000);
    		spprintf(&nonce, 0, "%ld%08x%05x%.8f", php_rand(TSRMLS_C), sec, usec, php_combined_lcg(TSRMLS_C) * 10);
    	}
    

    看到“spprintf(&nonce, 0, “%ld%08x%05x%.8f”, php_rand(TSRMLS_C), sec, usec, php_combined_lcg(TSRMLS_C) * 10);”了吗?!悲剧啊!

    现在明白腾讯文档上那句“随机串(32个字符长度)”是什么意思了,RFC 5849 完全没提 nonce 需要 32 字符长度。腾讯自己说自己复合 OAuth 1.0a 标准,然后在标准上搞出了小标准⋯⋯

    我比较懒,简单搞掂:

    $oauth->setNonce(md5(rand()));
    
  • URL to Barcode

    每当我使用PC上网的时候,总是有一些链接我想分享到手机里。Barcode 2D 正合适做这件事情。所以,你看到了这个“URL to Barcode”。这个简陋的网站帮你将 URL 转换为 Barcode。

    使用

    • 输入URL;
    • 点击“生成 BARCODE”按钮;
    • 获取到 BARCODE;
    • 使用手机上的条码扫描程序扫描;
    • 使用手机里的浏览器打开 URL。

    致谢

    Barcode 是由 PHP QR Code 生成的。

    在 Android 平台,Barcode Scanner 是非常棒的扫描软件。它给了我很多帮助!

    在 iOS 平台,我并不清楚哪个软件更好。这个文章可能会给你一些帮助:5 个最好的 Barcode iPhone 应用(英文)

    (more…)

  • UIKit 控件背景贴图方法

    在产品经理强烈的要求下,决定还是对 UIToolbar 进行背景贴图,以增强用户体验。

    废话不多说,先来看代码:

    - (void) viewDidLoad {
        [super viewDidLoad];
        [self.view insertSubview:[[[UIImageView alloc] initWithImage: [UIImage imageName:@"bg.jpg"]]autorelease] atIndex: 0];
    }
    

    viewDidLoad 方法是重写了 UIViewController 的方法,目的是在 view 界面创建完毕后加载贴图。貌似不一定非要放在这个地方,我图省事……放这一定不会出现 UI 初始化不完全的情况。

    insertSubView 是 UIView 实现的方法,apple 文档见此:https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html

    用图像文件首先创建一个 UIImage,并利用 UIImage 创建 UIImageView。发送 insertSubview 消息,将这个 UIImageView 添加到 UIView 的最顶层(atIndex: 0)。

    贴图即完成……

    方法很简单,重点是大家理解这个 UI 的树状结构。想怎么控制就怎么控制了。

  • [翻译]学习 Objective-C

    接到 ceo 通知,招聘、培训都不用我再负责了,所有人从“闲人”要变成“战斗人员”。于是撸撸袖子,潜心学习 cocoa 和 Object-c。静心学习两日,小成。不经意看到这篇,好文,兴起,翻译之⋯⋯

    原文地址:http://cocoadevcentral.com/d/learn_objectivec/

    Objective-C

    Objective-C 是编写 Mac 软件的主要语言。如果你适应基本的面向对象和C语言,Objective-C 会给向你展示许多这些内容。如果你不知到C,你应当先阅读  C 指南[英文]

    这个指南由Scott Stevenson撰写并排版。

    (more…)