一直跑在亚马逊服务器上的一些Facebook应用,昨天抽风了,平时正常的页面都出现了504的timeout错误。Web使用的是Django,于是查看日志,发现N多记录:

SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /(ip x.x.x.x) !!!

write(): Broken pipe [plugins/python/wsgi_subhandler.c line 193]

然后看nginx的error日志:

[error] 16948#0: *21 upstream prematurely closed connection while reading response header from upstream

费了半天力气跟踪代码,发现是卡在调用facebook的api上,以前一直是好好的,怎么突然出问题了?

在服务器上尝试wget一下www.facebook.com,get不下来,才发现是亚马逊的DNS解析facebook的域名出问题了。于是调用facebook的api的那段代码就timeout了……

于是临时把DNS换成8.8.8.8,一切正常,坑爹的亚马逊……

VN:F [1.9.22_1171]
Rating: 10.0/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: +3 (from 3 votes)

最近在 OS X 下编译一些东西的时候常常遇到 Missing required libcurl dev >= 7.18.2 的问题,版本已经确认是最新的了,devel的也装了,还是不行。

Google了一下,这样搞: 

export LIBCURL_CFLAGS=-I/usr/local/opt/curl/include

export LIBCURL_LIBS=-L/usr/local/opt/curl/lib

记录下来备忘,免得下次再到处找。

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 2 votes)

 将iPod touch 5的系统升级到了扁平化的iOS7,如丝般顺滑,比预想的要完美。很多不经意间发现的小细节让人发出雅典娜之惊叹。所以狗日的不要相信那些媒体的胡说八道,那些人根本就没有体会过即能写出各种奇谈怪论。纸上得来终觉浅,绝知此事需躬行。推荐升级安装。

然后是Xcode5,整个界面也是冲着扁平化的方向,怎么说呢,简约而不简单。总之就是更好用了。赶紧将以前写的一些app放Xcode5下编译,不少问题出来了。

首当其冲就是界面上的状态栏了,iOS7貌似默认程序就是全屏(fullscreen)模式,用半透明的方法将状态栏挡在后面,感觉有点怪怪的,比如:

要干掉它还真不容易,在iOS7之前,我们可以这样干:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

但是现在无效了,怎么解?Google了一下,这么干:在app的plist文件中,添加两个属性:UIStatusBarHidden和UIViewControllerBasedStatusBarAppearance,顾名思义,就是用来设置状态栏的,如图所示:

搞定,收工。

VN:F [1.9.22_1171]
Rating: 5.9/10 (14 votes cast)
VN:F [1.9.22_1171]
Rating: +4 (from 6 votes)

刚刚安装Python的MySQL支持库,一口气遇到了一连串的问题,好在Google一下,均解决。遂记录下,备忘。

1.下载Python的MySQL支持库

地址:http://sourceforge.net/projects/mysql-python/

2.解压编译

python setup.py install

遇到第一个问题:

_mysql.c:44:23: error: my_config.h: No such file or directory

解决办法,编辑setup_posix.py文件,将mysql_config.path设置成你安装的mysql的目录,比如/usr/local/mysql/bin/mysql_config

3.在python中"import MySQLdb",遇到问题:

ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory

解决办法,编辑/etc/ld.so.conf.d/mysql-i386.conf文件

改成正确的mysql安装地址,比如我的:usr/local/mysql/lib/mysql

存盘后退出,执行ldconfig

4.搞定,打完收工

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

 在学习 Android 开发的过程中,经常调用一个类的方法的时候,总想按住 command + 鼠标左键 去点击这个方法,试图进入该类的源代码中看看是怎样实现的,但屡屡都报找不到 Android 源代码的错误。不爽,于是就干脆去下源代码好了。

Android SDK 官方源代码的下载地址:http://source.android.com/source/downloading.html

按照上面的教程一步一步来,就可以很方便地将源代码拖回到本地硬盘上,占用了我硬盘 9 个 G 的空间!不过这个教程是针对 Linux 或 Mac OS X 系统的。

然后在 Eclipse 中点击项目中的 android.jar,在右键菜单中选择“属性”,Location 指向刚刚下回来的源代码库的根目录,硬盘一阵狂响,搞定。

源代码全部出来了,很爽有木有?

VN:F [1.9.22_1171]
Rating: 10.0/10 (6 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

来源:http://stackoverflow.com/questions/2506647/iphone-flip-animation-when-controller-pushed 

总所周知,在 CoCoa Touch 中通过设置 modalTransitionStyle 属性可以很方便地在切换 ViewController 的时候实现各种动画效果,但如果使用 pushViewController 则不会出现如何效果,如果在 pushViewController 中实现 Flip 的翻页的效果呢? 废话不多说,上代码:

[UIView beginAnimations:@"animation" context:nil];
[self.navigationController pushViewController:myController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
[UIView setAnimationDuration:0.7];
[UIView commitAnimations];
VN:F [1.9.22_1171]
Rating: 8.5/10 (2 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

 

最近将jQueryMobile的库更新到最新版后,发现以前用 jQueryMobile 写的一些东西, header 导航栏上的“后退”按钮统统不见了。这个功能挺贴心的,可以自动为你的 Web App 在不同页面之间跳转的时候增加导航功能。于是翻 jQueryMobile 的官方文档,在不起眼的地方发现了这样一句话:

jQuery Mobile has a feature to automatically create and append "back" buttons to any header, though it is disabled by default. This is primarily useful in chromeless installed applications, such as those running in a native app web view. The framework automatically generates a "back" button on a header when the page plugin’s addBackBtn option is true. This can also be set via markup if the page div has a data-add-back-btn="true" attribute.

原来默认把这个功能是关闭。打开它很简单,需要在页面源代码的 page 中加上 data-add-back-btn="true" 。

同时页面的代码中加上一句 js 代码即可:

$(document).bind("mobileinit", function() {
    $.mobile.page.prototype.options.addBackBtn = true;
});  
VN:F [1.9.22_1171]
Rating: 7.9/10 (7 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

 Mac OS系统有一个很方便的功能就是文件预览,在Finder中选中一个文件,按下空格键就能够预览其中的内容。支持图片、文档、视频等类型。在iOS4.0系统中,官方SDK提供了一个QLPreviewController,使用它就可以让我们的App在iPhone/iPad中直接预览各个文件了。官方的开发文档中说明其支持的文件类型有:

  1. iWork文档
  2. 微软Office97以上版本的文档
  3. RTF文档
  4. PDF文件
  5. 图片文件
  6. 文本文件和CSV文件

使用方法也很简单,直接alloc出一个QLPreviewController对象,用presentModalViewController方法把它调出来即可。要指定QLPreviewController预览那个文件,只要直接实现它的代理方法previewItemAtIndex,返回一个NSURL对象即可:

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{   
    return [NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/Documents/files/%@”, NSHomeDirectory(), [fileList objectAtIndex:currentIndex]]];
}

 

直接预览PDF,效果不错

VN:F [1.9.22_1171]
Rating: 7.8/10 (31 votes cast)
VN:F [1.9.22_1171]
Rating: +4 (from 8 votes)

 在iPhone开发中,在UITableView中需要弹出UIActionSheet,直接调用它的showInView方法即可。因为iPhone屏幕相对iPad较小,UIActionSheet会直接从屏幕底部向上弹出,但是如果在iPad中showInView的话,只会在屏幕的中间弹出。如果用户点击底部的TableViewCell,也在中间弹出菜单的话,显然有些怪异。

这时候,可以用它的showFromRect方法,指定一个矩形区域来显示UIActionSheet。在UITableView,矩形区域的位置当然最好就是用户选中的那个TableViewCell,可以使用cell.bounds属性。在TableView的代理方法中,我们可以这样写(伪代码):

- (void)tableView:(UITableView *)tableView 
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    
    UIActionSheet *actionSheet = [[[UIActionSheet alloc]…]autorelease];//省略创建代码
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:[indexPath row]];
    [actionSheet showFromRect:cell.bounds inView:cell animated:TRUE];
}

效果如下图:

 

VN:F [1.9.22_1171]
Rating: 10.0/10 (3 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)