后知后觉的看了电影《社交网络》,竟然看得热血沸腾,还一连看了两遍。在看第二遍的时候,随手写了几条关于电影的微博,不过由于这部电影涉及了太多我感兴趣的话题,而影片的节奏又远远超过发微博的速度,所以就就着已发的微博写了这篇绝非影评的微博体博客。

一、团队与合作伙伴

除了计算机,马克·扎克伯格另一个天才的地方是挑选合作伙伴,他总能在合适的时候挑中合适的人,无论爱德华多还是肖恩·帕克,当然,在他们失去作用后,他也毫不犹豫地抛弃了他们。

扎克伯格该不该让爱德华多和肖恩·帕克退出?我觉得绝对应该,退出前的爱德华多和肖恩已经很难为Facebook再做出什么贡献了,甚至还产生了很大的负作用,而他们却拿着与贡献不相称的股权,这不是利益问题,更主要的是发言权与决策权。但扎克显然没有找到让他们退出的合适方法,这与陷害他们的人是不是扎克无关。

扎克、爱德华多和肖恩·帕克最终走不到一起的另一个重要原因是目标差距太大,爱德华多想的是几百万,肖恩想的是10亿,而扎克的野心则远远超过了他的同伴。

关于爱德华多的退出,电影中有一个重要的细节:风投向扎克询问占30%股份的爱德华多是什么人。其实是资本而不是扎克提出了让爱德华多退出,资本也许冷血,却展示了效率,也体现了公平,爱德华多对Facebook的贡献开始可能是30%,但到后来也许真只剩0.3%了。

但归根结底,导致爱德华多最终退出的是他自己,标志性的事件是对肖恩·帕克的态度及要不要去硅谷,而肖恩的方式、硅谷的土壤才是适合互联网公司的,爱德华多选择的纽约显然太“传统”了,用电影中扎克的话说就是“你已经落后的太多了”。

关于肖恩·帕克退出的原因,电影里借爱德华多的话来做铺垫的,尽管肖恩做了大名鼎鼎甚至堪称传奇的Napster和其他的几家公司,但这些公司的结局无一例外的都是关张。

社交网络

二、抄袭与创新

尽管扎克有没有抄袭Winklevoss兄弟的哈佛关系网从法律上讲是一件难以辨别的事情,但我依然很难把这定义为抄袭,我想扎克确实借鉴了哈佛关系网的创意,但他做出的Facebook却是远远超出Winklevoss兄弟想象的产品,如同科学史上最著名的牛顿、莱布尼茨微积分创立权之争,很难说莱布尼茨就是因为看过了牛顿的零星手稿才完成了微积分,何况Winklevoss兄弟并没有做出和Facebook、哪怕是最初的Facebook一样好的产品。

如扎克所说,Winklevoss兄弟并不是因为扎克“偷”了他们的创意,而是因为他们一直顺利,这次却被远远超越。让他们越来越愤怒并最终决定起诉扎克的几件事都是因为Facebook影响力的扩大,更重要的是这种影响力实际上早超出了他们的想象力,如果说赛艇他们只输了一点,那么做网站,他们甚至进不了赛场。

为什么Facebook借鉴哈佛关系网却可以被称为创新,人人、开心借鉴了Facebook却要被指为山寨呢?我觉得这恰恰体现了创新与山寨最大的区别:创新不是无中生有,创新也需要学习和借鉴,创新其实是站在巨人肩膀上的发展;而山寨的最大特征除了简单的模仿,还有低质化。

让扎克付出6500万赔偿(付给Winklevoss兄弟)的法律是好的法律,它在最大限度上保护了一切创造者的利益,并给抄袭者甚至是疑似抄袭者以惩罚,它让创新而不是抄袭成为成本更低、风险更小的选择。而在法律“宽松”的中国,抄不仅比创新容易,也比“买”便宜,因此在中国只有腾讯这样以抄为核心能力的巨无霸,而无法产生出千千万万个很酷的小作坊。

三、才能、态度及其他

光有好的创意,而没有把概念落实的能力,是不可能产生什么好的成果的,而创意也只会停留在它雏形的样子,就像Winklevoss兄弟干的那样。假设做出Facebook的不是扎克,而是和Winklevoss兄弟没产生过任何联系的人,他们的愤怒也许将被变成后悔。

Winklevoss兄弟既想要做网站,又要练习赛艇,还有学业、还有俱乐部……;爱德华多除了Facebook,还有凤凰俱乐部,还有他的课程;而扎克,只有Facebook。因为专注,所以他走得最远。

过程很重要,但只有结果导向的过程才有意义,因此在扎克和爱德华多分手前的最后一次谈话中,爱德华多讲尽他在纽约吃的苦、做出的努力,却经不起扎克简单的一句“那有什么成果”。

四、关于电影本身

吸引我连看两遍《社交网络》的,不是大卫·芬奇,而是马克·扎克伯格,尽管这是一部剧情片,而非纪录片。

我觉得《社交网络》就是一部以互联网、商业为背景的操蛋的青春史,就像《美国往事》是一部以黑帮为背景的青春史一样。

在谈论大卫·芬奇的时候千万别忘了Aaron Sorkin,影片开头那段扎克与女友多线索、跳跃式的对话真是神来之笔。

挺喜欢九寸钉做的配乐,特别是扎克写代码那一段充满80年代感觉的8位机电音,极度的黑客味道。

来源:宋大妈投稿,原文链接

从iSO3.2开始,我们就可以在应用程序中开始切分窗口应用了.这个大量用户基于web的程序,比如在线杂志,消息类软件.简单一点就是这边选择,那边显示..

试试看:

1.用Xcode创建一个Split View-based Application,有单独的一个选项,不再是view-based Application了.命名为splitViewBasedApp,如图:

4-27.png

2.打开文件的Classes文件夹和Resources文件夹,注意这里可以看到出现了两个view控制类,RootViewController和DetailViewController.

4-28.png

3.运行一下看看,C+R,我们可以看到在模拟器中显示出了这样的画面,一边是选项,一边是内容

4-29.png

换个方向看看,左边的选项变成按钮显示了

4-30.png

它是怎么实现的呢?

这个好玩的一个地方就是在我们旋转屏幕的时候所发生的变化,当我们横向的时候,左边会分割窗口的一部分用户显示列表,而竖向的时候会隐藏到顶部的一个按钮中.

首先我们来看看splitViewBasedAppAppDelegate.h的内容:

 

#import <UIKit/UIKit.h>
@class RootViewController;
@class DetailViewController;
@interface splitViewBasedAppAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UISplitViewController *splitViewController;
RootViewController *rootViewController;
DetailViewController *detailViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic,retain) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic,retain) IBOutlet RootViewController *rootViewController;
@property (nonatomic,retain) IBOutlet DetailViewController *detailViewController;
@end

 

#import <UIKit/UIKit.h>

@class RootViewController;

@class DetailViewController;

@interface splitViewBasedAppAppDelegate : NSObject <UIApplicationDelegate> {

UIWindow *window;

UISplitViewController *splitViewController;

RootViewController *rootViewController;

DetailViewController *detailViewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic,retain) IBOutlet UISplitViewController *splitViewController;

@property (nonatomic,retain) IBOutlet RootViewController *rootViewController;

@property (nonatomic,retain) IBOutlet DetailViewController *detailViewController;

@end

这里面包含一个view 控制对象UiSplitVewController(splitViewController)和两个view控制类(rootViewController和detailViewController).用这个对象来实现我们主从页面的对接.

接下来,我们来看splitViewBasedAppAppDelegate.m文件

#import “splitViewBasedAppAppDelegate.h”

#import “RootViewController.h”

#import “DetailViewController.h”

@implementation splitViewBasedAppAppDelegate

@synthesize window, splitViewController, rootViewController, detailViewController;

- (BOOL)application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// 分割窗口并且显示出来.

[window addSubview:splitViewController.view];

[window makeKeyAndVisible];

return YES;

}

- (void)applicationWillTerminate:(UIApplication *)application {

// Save data if appropriate

}

- (void)dealloc {

[splitViewController release];

[window release];

[super dealloc];

}

@end

当这个应用程序被加载的时候,自动加载splitViewController对象到显示窗口.

双击MainWindow.xib文件,我看到一个叫Split View Controller的新窗口,里面包含了2个窗口控制器.回到MainWindow.xib文件,用列表显示模式,我们可以看到下面有一些选项,其中就有Split View Controller,里面有(如图)

➤➤ Navigation Controller(导航控制器)

➤➤ Detail View Controller(主页面控制器)

4-31.png

这个Navigation Controller控制器主要负责左边这个分割窗口的应用.它由一个导航栏和一个根目录控制器组成

4-32.png

根目录控制器(Root View Controller)用RootViewController类来控制4-33.png

主窗口控制器(Detail View Controller)来控制右边分割窗口的应用.

4-34.png

主窗口控制器(Detail View Controller)我们用DetailViewController类来控制

4-35.png

右键点击Split View Based App App Delegate项目,瓦萨,东西真多啊.我们可以看到很多 对分割窗口应用的链接定义

4-36.png

让我们看看包含在Split View Controller中的两种视图控制器RootViewController和DetailViewController.

我们来看RootViewController.h文件

#import <UIKit/UIKit.h>

@class DetailViewController;

@interface RootViewController : UITableViewController {

DetailViewController *detailViewController;

}

@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;

@end

要注意的是RootViewController类是从UITableViewcontroller类继承下来的,而UITableViewcontroller类是UIViewController类的一个子类.这个我们后面会详细在Table View的时候讲.

在RootViewController.m文件中

#import “RootViewController.h”

#import “DetailViewController.h”

@implementation RootViewController

@synthesize detailViewController;

/*

---Other commented out code are omitted from this code listing---

*/

- (void)viewDidLoad {

[super viewDidLoad];

self.clearsSelectionOnViewWillAppear = NO;

}

// Ensure that the view controller supports rotation and

// that the split view can therefore show in

// both portrait and landscape.

- (BOOL)shouldAutorotateToInterfaceOrientation:

(UIInterfaceOrientation)interfaceOrientation {

return YES;

}

// The size the view should be when presented in a popover.

- (CGSize)contentSizeForViewInPopoverView {

return CGSizeMake(320.0, 600.0);

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {

// Return the number of sections.

return 1;

}

- (NSInteger)tableView:(UITableView *)aTableViewnumberOfRowsInSection:NSInteger)section {

// Return the number of rows in the section.

return 10;

}

- (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @“CellIdentifier”;

// Dequeue or create a cell of the appropriate type.

UITableViewCell *cell = [tableView

dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault

reuseIdentifier:CellIdentifier] autorelease];

cell.accessoryType = UITableViewCellAccessoryNone;

}

// Configure the cell.

cell.textLabel.text =

[NSString stringWithFormat:@“Row %d”, indexPath.row];

return cell;

}

- (void)tableView:(UITableView *)aTableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath {

/*

When a row is selected, set the detail view controller’s

detail item to the item associated with the selected row.

*/

detailViewController.detailItem =

[NSString stringWithFormat:@“Row %d”, indexPath.row];

}

- (void)didReceiveMemoryWarning {

// Releases the view if it doesn’t have a superview.

[super didReceiveMemoryWarning];

// Relinquish ownership any cached data, images,

// etc that aren’t in use.

}

- (void)viewDidUnload {

// Relinquish ownership of anything that

// can be recreated in viewDidLoad or on demand.

// For example: self.myOutlet = nil;

}

- (void)dealloc {

[super dealloc];

}

@end

这里面用到了很多方法,我说些简单的

➤➤ contentSizeForViewInPopoverView — 定义显示大小.

➤➤ numberOfSectionsInTableView: — 确定显示的数量

➤➤ tableView:numberOfRowsInSection: — 确定显示行的数量

➤➤ tableView:cellForRowAtIndexPath: — 每一行的内容.

➤➤ tableView:didSelectRowAtIndexPath: — 用户选择控制.

下面我们再来看看DetailsViewcontroller.h文件

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController

<UIPopoverControllerDelegate, UISplitViewControllerDelegate> {

UIPopoverController *popoverController;

UINavigationBar *navigationBar;

id detailItem;

}

@property (nonatomic, retain) UIPopoverController *popoverController;

@property (nonatomic, retain) IBOutlet UINavigationBar *navigationBar;

@property (nonatomic, retain) id detailItem;

@end

值得注意的是DetailViewController类遵从下面的这些协议:

➤➤ UIPopoverControllerDelegate —对气泡栏,就是变成竖式之后隐藏起来的那个列表窗口的控制

➤➤ UISplitViewControllerDelegate — 当方向改变的时候,是否显示气泡窗口的控制

这节很长啊.......我们再来看DetailsViewController.m文件:

#import “DetailViewController.h”

#import “RootViewController.h”

@implementation DetailViewController

@synthesize navigationBar, popoverController, detailItem;

/*

---Other commented out code are omitted from this code listing---

*/

/*

When setting the detail item, update the view and dismiss

the popover controller if it’s showing.

*/

- (void)setDetailItem:(id)newDetailItem {

if (detailItem != newDetailItem) {

[detailItem release];

detailItem = [newDetailItem retain];

// Update the view.

navigationBar.topItem.title = [detailItem description];

}

if (popoverController != nil) {

[popoverController dismissPopoverAnimated:YES];

}

}

- (void)splitViewController:(UISplitViewController*)svc

willHideViewController:(UIViewController *)aViewController

withBarButtonItem:(UIBarButtonItem*)barButtonItem

forPopoverController:(UIPopoverController*)pc {

barButtonItem.title = @“Root List”;

[navigationBar.topItem setLeftBarButtonItem:barButtonItem

animated:YES];

self.popoverController = pc;

}

// Called when the view is shown again in the split view,

// invalidating the button and popover controller.

- (void)splitViewController:(UISplitViewController*)svc

willShowViewController:(UIViewController *)aViewController

invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {

[navigationBar.topItem setLeftBarButtonItem:nil animated:YES];

self.popoverController = nil;

}

// Ensure that the view controller supports rotation and that the

// split view can therefore show in both portrait and landscape.

- (BOOL)shouldAutorotateToInterfaceOrientation:

(UIInterfaceOrientation)interfaceOrientation {

return YES;

}

- (void)viewDidUnload {

// Release any retained subviews of the main view.

// e.g. self.myOutlet = nil;

self.popoverController = nil;

}

- (void)dealloc {

[popoverController release];

[navigationBar release];

[detailItem release];

[super dealloc];

}

@end

这里有2个对定义UiSplitVewControllerDelegate协议十分重要的事件需要注意:

 

➤➤ splitViewController:willHideViewController:withBarButtonItem:forPopover-

Controller: --当ipad改成竖方向,气泡窗口被显示,列表窗口隐藏.

➤➤ splitViewController:willShowViewController:invalidatingBarButtonItem: — 当ipad改成横向,气泡窗口被隐藏,列表窗口显示.

这节太长了,花了我一下午的时间来弄...呵呵,大家把代码多看看,一条一条的理解,这个还是比较简单的.后面的太复杂,我都看着头麻麻的!

今天重庆天气真适合睡觉啊!!!!!!!!

动态窗口切换

前面一节我们已经搞定了在不同的窗口切换,但是它还不够,在很多iPad或者iphone的应用中动态的显示才能然我们的程序更加的美观,界面更加的友好.因此我们在切换窗口的时候加入动态的切换能使我们的程序更完美,来试试吧!

例子:动态的切换Animating the Transitions

1.用到上一节的例子MySecondViewController,在MySecondViewControlle.m文件中加入下面红色代码:

 

-(IBAction) buttonClicked: (id) sender{
//---add the view of the view controller to the current View---
viewController = [[HelloWorldViewController alloc]
initWithNibName:@“HelloWorldViewController”
bundle:nil];
[UIView beginAnimations:@“flipping view” context:nil];

 

-(IBAction) buttonClicked: (id) sender{

//---add the view of the view controller to the current View---

viewController = [[HelloWorldViewController alloc]

initWithNibName:@“HelloWorldViewController”

bundle:nil];

[UIView beginAnimations:@“flipping view” context:nil];

 

[UIView setAnimationDuration:1];

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft

forView:self.view cache:YES];

[self.view addSubview:viewController.view];

[UIView commitAnimations];

}

2.在HelloWorldViewController.m文件中,加入下面的红色代码:

 

-(IBAction) btnClicked:(id) sender{

[UIView beginAnimations:@“flipping view” context:nil];

[UIView setAnimationDuration:1];

[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight

forView:self.view.superview cache:YES];

[self.view removeFromSuperview];

[UIView commitAnimations];

}

3.保存,C+R,运行点击Ok按钮,看看我们界面的切换的变化.如图:

4-25.png      4-26.png

嘿嘿,怎么样?是要比上一节生硬的切换好玩吧!

这个是怎么样实现的呢?原理解释:

这是由UIView类里面的beginAnimation:方法来现实的,就是这句

[UIView beginAnimations:@“flipping view” context:nil];

并且用setAnimationDuration:方法来制定动态的时间:(这里我们定义的是1秒钟,都是以秒为单位)

[UIView setAnimationDuration:1];

再用到setAnimationCurve:方法来设置动画的旋转曲度变化

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

我们可以根据后面的常量定义来修改动画的样式:

 

➤➤ UIViewAnimationCurveEaseInOut — 慢慢的开始,快速的过程,最后完成时刻又慢慢的结束

➤➤ UIViewAnimationCurveEaseIn — 慢慢的开始,直接加速到结束

 

➤➤ UIViewAnimationCurveEaseOut — 快速的开始,然后慢慢的结束

➤➤ UIViewAnimationCurveLinear — 匀速变化

大家可以自己修改后,多试试看,so easy!

通过setAnimationTransition:方法可以定义在动画的类型

 

 

 

[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft

forView:self.view cache:YES];

看上面这句,主要是定义你动画的样式的,比如右进左出啊,这些

cache:参数定义是否将当前页面定义为一副图画进行动画操作,下面的这些常数可以定义我们动画的样式:

 

➤➤ UIViewAnimationTransitionNone — 没有过渡

➤➤ UIViewAnimationTransitionFlipFromLeft —翻转一个视图从左向右

➤➤ UIViewAnimationTransitionFlipFromRight — 翻转一个视图从右到左

➤➤ UIViewAnimationTransitionCurlUp — 从上卷动

➤➤ UIViewAnimationTransitionCurlDown — 从下卷动

在这个动画的结尾,需要用到commitAnimations:方法

[UIView commitAnimations];

HelloWorldViewController中动画的显示与在MySecondViewControlle中的类似,除了在父子页面的定义,就是说是哪个是父窗口,哪个是子窗口self.view.superview:

 

[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight

forView:self.view.superview cache:YES];

呵呵,停课快半年了,儿子也要半岁了.今天是6.1儿童节.儿子本月也满半岁.老九决定从今天开始继续开始iPad开发教程.希望大家不要嫌弃.

老九在电驴上发现了国人做的一个教程,十分的给力,和老九用的教材是一样的.都是Wrox.2010.6出的这本Beginning.iPad.Application.Development.不过他做的是视频,我做的是文字.现在发现视频好像比较流行,而且不费力,不费时.快捷高效.但是在代码的熟悉,初学着的上手性上还是文字的比较好,可以清楚的看到代码的组成,自己书写,有利于理解代码的组成和作用.大家可以结合来看.这样可以事半功倍.

本节主要内容是将多窗口间的切换,在很多应用中,我们经常会用到很多不同的窗口和页面,来显示不同的信息内容,用户根据不同的选择,完成各种程序任务.因此这节我们来学习如何设计这样的程序.

例子:Switching Views

1.创建一个项目MySecondViewController(前面我们已经建立过这个项目,现在需要只是进入MySecondViewControlle.m文件).将红色代码添加进去:

import “MySecondViewController.h”

#import “HelloWorldViewController.h”

@implementation MySecondViewController

//---创建一个窗口控制程序---

HelloWorldViewController *viewController;

-(IBAction) buttonClicked: (id) sender{

//---add the view of the view controller to the current View---

viewController = [[HelloWorldViewController alloc]

initWithNibName:@“HelloWorldViewController”

bundle:nil];

[self.view addSubview:viewController.view];

/*

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“Action invoked!”

message:@“Button clicked!”

delegate:self

cancelButtonTitle:@“OK”

otherButtonTitles:nil];

[alert show];

[alert release];

*/ }

- (void)dealloc {

[viewController release];

  [label release];

[button release];

[super dealloc];

}

import “MySecondViewController.h”
#import “HelloWorldViewController.h”
@implementation MySecondViewController
//---create an instance of the view controller---
HelloWorldViewController *viewController;
-(IBAction) buttonClicked: (id) sender{
//---add the view of the view controller to the current View---
viewController = [[HelloWorldViewController alloc]
initWithNibName:@“HelloWorldViewController”
bundle:nil];
[self.view addSubview:viewController.view];
/*
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@“Action invoked!”
message:@“Button clicked!”
delegate:self
cancelButtonTitle:@“OK”
otherButtonTitles:nil];
[alert show];
[alert release];
*/
}
- (void)dealloc {
[viewController release];
[label release];
[button release];
[super dealloc];
}

2.在HelloWorldViewController.h文件中声明一个btnClicked:事件:

 

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController {

}

-(IBAction) btnClicked:(id) sender;

@end

3.在HelloWorldViewController.m文件中定义btnClicked:事件:

 

-(IBAction) btnClicked:(id) sender{

//---remove the current view; essentially hiding the view---

[self.view removeFromSuperview];

}

4.双击HelloWorldViewController.xib文件,在Interface Builder中编辑它.在View窗口中按住Ctrl点击和拖拽Round Rect Button链接到HelloWorldViewController.xib窗口中的File's Owner item选择btnClicked:.

5.在Xcode中,Command+R,运行这个程序,点击OK按钮,我们就能带出Hello World窗口了.

原理解释:

1.在这个例子中,我们用到了addSubview:方法来实现窗口的切换:

//---add the view of the view controller to the current View---

viewController = [[HelloWorldViewController alloc]

initWithNibName:@“HelloWorldViewController”

bundle:nil];

[self.view addSubview:viewController.view];

2.关闭一个窗口,我们用到了removeFromSuperview:方法:

 

//---remove the current view; essentially hiding the view---

[self.view removeFromSuperview];

ok,大家先试试,下节我们使用动态方式显示窗口切换

弋然小朋友近期照片整理

最近弋然小朋友带给全家十分的欢乐,丫丫学语的小瓜瓜样让我们笑声不断啊

哈哈,都说不像是5个月的小baby......好成熟

IMG_0272[1].jpg

睡姿很大套....

IMG_0306.jpg

还没有到可以吃零食的时候,先常常自己的臭脚脚是什么味道!

IMG_0333.jpg

脱了袜子再尝尝,味道还行!哈哈

IMG_0334.jpg

吃东西要有腔调.....

IMG_0338.jpg

ps:新教程马上发布更新,请大家不要吵我懒....

About Me

我是一个超级苹果迷+老乔的fans和Google的簇拥,一切新奇的事物我都好奇,摄影、运动、旅游、读书、电影、游戏都是我的爱好,荒淫大家给我留言,发邮件,请我吃饭、带我旅游(也不要忘记了我的领导同志!)……

« 2012年2月 »
   1234
567891011
12131415161718
19202122232425
26272829   

微博

统计

文章:119篇
评论:95条 (0条Spam)
相册:11个 (339张图片)
主题:InSense theme