imac使用心得

mac21.5一开始觉得显示器的点距比较,但是使用了几天才发现还是有优势的。以前一直存在着22寸1680*1050分辨率是最适合人眼的思想彻底被革新了,转而代之的是操作系统对于字体的前段优化处理是最最重要的。当然有个还坚信的是,工作还是用22以内的显示器吧,27的偏娱乐了,除非是图片工作者才会买imac27吧。

待续补图

还有一点是,安装软件一定要托到应用程序里面,不然很多程序直接再img包里面就可以运行,最后你的数据全保存在临时目录里面了,重启之后有两个问题,第一个是数据没有保存上,第二个是再运行还得从img包里面运行,还有一个问题就是你在应用程序找不到它的身影。

另外有一点,也是让我很困惑的。mac os的字体相对于windows来说略微逊色了一些。不过mac os对英文的支持绝对比windows强太多太多了。就拿这个21.5的imac来说,用来看英文文档,丝毫不会觉得累。只是看中文文档,或者是现在在写博客真的会觉得会有一些累,看中文时间久了,就会觉得windows看中文相对来讲会好一些。

发表在 未分类 | 留下评论

iOS学习第三天——耐心

需要耐心,一步一个脚印。

(待续)

先写后看

文档里面一堆例子,你自己最好随便挑个主题去做个小东西出来,东西要足够小,然后做的时候什么不会在文档里面找什么,参考相关的例子

发表在 未分类 | 留下评论

iPhone app Hello World

第一天用mac开发练习iPhone App开发工程,完成一个Hello World。
正在阅读Objective-C的文档,英语阅读水平飞速提升中。
目前最大的感触就是,英文文档的干货比中文书籍多得多。

发表在 未分类 | 留下评论

学习app开发的干货

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/
http://itunes.apple.com/itunes-u/ipad-iphone-application-development/id473757255
官方document和Stackoverflow确实很好,还有一个是官方的library
https://developer.apple.com/library/ios/navigation/
里面有很多Guides,对于初期开发者是莫大的帮助。

几本书籍

    Cocoa Fundamental’s Guide;
    The Objective-C Programming Language;
    iOS Application Programming Guide;
    Object Oriented Programming With Objective-C;
    iOS Technology Overview;
    iOS Human Interface Guidelines;
发表在 未分类 | 3 条评论

加速itunes下载

http://www.v2ex.com/go/dns

修改好dns以后,清除缓存

ipconfig /flushdns

lookupd -flushcache

/etc/rc.d/init.d/nscd restart

发表在 未分类 | 留下评论

Objective-C 学习笔记

有些散乱,过段时间滤清思路再统一整理一下吧,到时候再出一个思维导图。

Objective-C的学习官方有很好的教材,只不过全是英文的如果你英文足够好就看英文的文档吧,学习效率绝对比看中文资料要快很多。

封装
继承
多态

.h 头文件。头文件包含类,类型,函数和常数的声明。
.m 源代码文件。这是典型的源代码文件扩展名,可以包含Objective-C和C代码。
.mm 源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码。仅在你的Objective-C代码中确实需要使用C++类或者特性的时候才用这种扩展名。

#include
#import 确保相同的文件只会被包含一次

单个字符被单引号包括,字符串被双引号包括。
大多数框架把字符串传递给NSString对象。
NSString类提供了字符串的类包装,包含了所有你期望的优点,包括对保存任意长度字符串的内建内存管理机制,支持Unicode,printf风格的格式化工具,

因为这种字符串使用的非常频繁,Objective-C提供了一个助记符可以方便地从常量值创建NSString对象。

%d代表的是以整形的方式输出,%c代表的是以字符的方式输出

NSString*  myString = @”My String\n”;
NSString*  anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];

// 从一个C语言字符串创建Objective-C字符串
NSString* fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

NSString* myString = @”My String\n”;
NSString* anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];

NSString* fromCString = [NSString stringWithCString:"A C string" encoding:NSASCIIStringEncoding];

类是Objective-C用来封装数据,以及操作数据的行为的基础结构。
对象就是类的运行期间实例,它包含了类声明的实例变量自己的内存拷贝,以及类成员的指针。
Objective-C的类规格说明包含了两个部分:接口和实现。
接口部分包含了类声明和实例变量的定义,以及类相关的方法。
实现部分包含了类方法的实际代码。

类声明总是由@interface编译选项开始,由@end编译选项结束。
类名之后的(用冒号分隔的)是父类的名字。
类的实例(或者成员)变量声明在被大括号包含的代码块中。
实例变量块后面就是类声明的方法的列表。
每个实例变量和方法声明都以分号结尾。

@interface MyClass: NSObject
{
int count;
id data;
NSString* name;
}
- (id)initWithString:(NSString*)aName;
+ (MyClass)createMyClassWithString:(NSString*)aName;
@end

类实现的位置也由两个编译选项确定,@implementation和@end。
这些选项给编译器提供了要将方法和对应类联系起来,所需的范围信息。
因此方法的定义和接口中对应的声明是匹配的,只是多了个代码块而已。

@implementation MyClass

- (id)initWithString:(NSString *) aName
{
if(self = [super init])
{
count count = 0;
data = nil;
name = [aName copy];
return self;
}
}

+ (MyClass *)createMyClassWithString: (NSString *) aName
{
return [[[self alloc] initWithString:aName] autorelease;
}
@end

当用变量保存对象的时候,始终应该使用指针类型。
Objective-C对变量包含的对象支持强弱两种类型。
强类型指针的变量类型声明包含了类名。
弱类型指针使用id作为对象的类型。
弱类型指针常用于类的集合,在集合中对象精确的类型可以是未知的。
如果你用过强类型语言,你也许觉得使用弱类型变量可能会带来问题,
但是他们实际上给了Objective-C程序巨大的灵活性,而且使它更强大。

MyClass*  myObject1;    // Strong typing
id        myObject2;    // Weak typing

MyClass* myObject1;
id myObject2;

Objective-C中的类可以声明两种类型的方法:实例方法和类方法。
实例方法就是一个方法,它在类的一个具体实例的范围内执行。
也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。
而类方法,比较起来,也就是说,不需要你创建一个实例。

方法声明包括方法类型标识符,返回值类型,一个或多个方法标识关键字,参数类型和名信息。

insertObject:atIndex:实例方法的声明。
声明由一个减号(-)开始,这表明这是一个实例方法。
方法实际的名字(insertObject:atIndex:)是所有方法标识关键的级联,包含了冒号。
冒号表明了参数的出现。
如果方法没有参数,你可以省略第一个(也是唯一的)方法标识关键字后面的冒号。
本例中,这个方法有两个参数。

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

- 实例方法
+ 类方法

method type identifier
return type
method signature keywords
parameter types
parameter names

方法类型标识符 (返回值类型)
方法标识关键字:(参数类型)名称

当你想调用一个方法,你传递消息到对应的对象。
这里消息就是方法标识符,以及传递给方法的参数信息。
发送给对象的所有消息都会动态分发,这样有利于实现Objective-C类的多态行为。
也就是说,如果子类定义了跟父类的具有相同标识符的方法,那么子类首先收到消息,
然后可以有选择的把消息转发(也可以不转发)给他的父类。

消息被中括号( [ 和 ] )包括。中括号中间,接收消息的对象在左边,消息(包括消息需要的任何参数)在右边。
例如,给myArray变量传递消息insertObject:atIndex:消息,你需要使用如下的语法:

[myArray insertObject:anObj atIndex:0];

为了避免声明过多的本地变量保存临时结果,Objective-C允许你使用嵌套消息。
每个嵌套消息的返回值可以作为其他消息的参数或者目标。
例如,你可以用任何获取这种值的消息来代替前面例子里面的任何变量。
所以,如果你有另外一个对象叫做myAppObject拥有方法,可以访问数组对象,
以及插入对象到一个数组,你可以把前面的例子写成如下的样子:

[[myAppObject getArray] insertObject:[myAppObject getObjectToInsert] atIndex:0];

虽然前面的例子都是传递消息给某个类的实例,但是你也可以传递消息给类本身。
当给类发消息,你指定的方法必须被定义为类方法,而不是实例方法。

类方法的典型用途是用做创建新的类实例的工厂方法,或者是访问类相关的共享信息的途径。
类方法声明的语法跟实例方法的几乎完全一样,只有一点小差别。
与实例方法使用减号作为方法类型标识符不同,类方法使用加号( + )。

下面的例子演示了一个类方法如何作为类的工厂方法。
在这里,arrayWithCapacity是NSMutableArray类的类方法,为类的新实例分配内容并初始化,然后返回给你。

NSMutableArray*   myArray = nil;    // nil is essentially the same as NULL

// Create a new array and assign it to the myArray variable.
myArray = [NSMutableArray arrayWithCapacity:0];

属性

属性是用来代替声明存取方法的便捷方式。
属性不会在你的类声明中创建一个新的实例变量。
他们仅仅是定义方法访问已有的实例变量的速记方式而已。
暴露实例变量的类,可以使用属性记号代替getter和setter语法。
类还可以使用属性暴露一些“虚拟”的实例变量,他们是部分数据动态计算的结果,而不是确实保存在实例变量内的。

实际上可以说,属性节约了你必须要些的大量多余的代码。
因为大多数存取方法都是用类似的方式实现的,属性避免了为类暴露的每个实例变量提供不同的getter和setter的需求。
取而代之的是,你用属性声明指定你希望的行为,然后在编译期间合成基于声明的实际的getter和setter方法。

属性声明应该放在类接口的方法声明那里。
基本的定义使用@property编译选项,紧跟着类型信息和属性的名字。
你还可以用定制选项对属性进行配置,这决定了存取方法的行为。
下面的例子展示了一些简单的属性声明:

@property 类型 名称;
@property BOOL flag;
@property (copy) NSString* nameObject;  // Copy the object during assignment.
@property (readonly) UIView* rootView;  // Create only a getter method.

使用属性另外的好处就是你可以在代码中访问他们的时候,使用点语法,如下面的例子所示:

myObject.flag = YES;
CGRect   viewFrame = myObject.rootView.frame;

虽然前面例子里面的对象和属性名是故意这么取的,他们还是展现了属性的灵活性。
点语法实际上隐藏了对应的方法调用。
每个可读的属性由一个与属性同名的方法支持。
每个可写属性由一个叫做“set属性名”的额外方法来支持,属性名的第一个字母要大写。
(这些方法是属性的实际实现方式,也是你可以声明一个没有任何实例变量支持的属性声明的原因。)
如果用方法来代替前面代码中的属性,你就要下下面的代码:

[myObject setFlag:YES];
CGRect   viewFrame = [[myObject rootView] frame];

协议和代理

协议声明了可以被任何类实现的方法。协议不是那些类本身。
他们仅是定义一个接口,其他的对象去负责实现。
你实现了协议里面的方法,就叫做符合协议。

在iPhone OS中协议常用来实现委托对象。
委托对象就是一个对象以其他的对象的模式行事。
了解协议,委托和对象最好的办法就是看一个例子。

UIApplication类实现了一个程序需要的行为。
如果想接收程序当前状态的简单消息,并不需要强制你创建UIApplication的一个子类,
反之UIApplication类通过调用委托对象的指定方法来分发这些通知消息。
实现UIApplicationDelegate方法的对象都可以接受这样的通知,并进行响应的反应。

协议的声明跟类接口的声明很像,只是协议没有父类,而且他们不会定义任何实例变量。
下面的例子展示了一个有一个方法的协议声明:

@protocol MyProtocol
- (void)myProtocolMethod;
@end

@protocol MyProtocol
- (void)myProtocolMethod;
@end

在大多数委托协议情况下,使用某种协议仅仅是简单的实现协议定义的方法而已。
有些协议要求你明确的表明你支持这种协议,协议可以指定必须或者可选的方法。
在你深入开发的过程中,你应该花点时间学习协议以及他们的用途,请阅读Objective-C 2.0编程语言的协议章节。
前面的信息是为了让你对Objective-C语言的基础所有了解。
本文提到的语言特性,你可以在阅读完整文档的时候找到。
但是这个语言不仅仅有这些特性,所以最好请仔细阅读文档Objective-C 2.0编程语言。

发表在 未分类 | 标签为 , , | 留下评论

影响创业公司发展的五类员工

每个创业的公司都能从员工身上或多或少的买到经验和教训,有的付出了血的代价,有的很快的意识到某些员工的危害性,那么究竟什么样的员工会阻碍公司的发展,影响公司的组织建设呢?

  1. 打打动动,拨拨转转。(盯着做,不盯着就不动了)
  2. 反复同样的问题。(不懂学习方法)
  3. 嘴把式,最后一刻掉链子。(不能出一个整活)
  4. 干活算中等,对于公司的核心技术发展方向不坚定的。(不稳定的人)
  5. 道德缺失。(贪小便宜)

那么什么样的会比较好些呢?

  1. 自学,自我约束。
  2. 做的永远比让做的好的。
  3. 等等

不论是带人还是带团队,管理者的综合素质必须全面,尤其对于新员工应该有耐心,一些事情的处理上要轻柔。

欢迎大家一起交流~

发表在 未分类 | 标签为 , , , , , , , , | 一条评论

思维导图——如何学技术

如何学技术这篇文章做成思维导图,希望对有志于此道者有所启发。

点击放大

 

发表在 未分类 | 标签为 , , , , , , | 2 条评论

如何学习技术?

文章来自baidu NY 同学的邮件,整理发出

1. 想学的技术非常多,该怎么办?

区分重点,选定目标,循序渐进。技术是无边际的,随着知识的不断增加,会发现未知的东西更多。我们能做的是:

1) 找重点:区分感兴趣的技能和必须技能,将重点放在必须技能上。如实在区分不开,可以这样问自己:不学这个技术会现在的工作是不是干不下去了?
2) 定目标:在一段时间(至少半年内)选定一个技术方向,精研下去
3) 不断向前:当某一种技术掌握后,再开始另一个技术的研究;

2. 很想学一种技术,但项目工作太多,没时间开展,一直拖着,怎么办?

生存状况和工作性质注定了我们不能像在学校和外企那样有大把的可支配时间,所以要追求技术进步只能自己找时间,也即“白天求生存,晚上谋发展”的道理。我一般会将晚上和周末的时间拿出一部分来学习。

3. 选定一个技术方向作为学习目标的时候哦,如何开展效果比较好?

学习一门技术一般分几个阶段,入门->掌握->精通。一般情况下,达到熟练掌握的程度即可,要实现至少需一年的积累。

可以分下边几步:

1) 知其然:了解该技术的基本原理和应用场景,并进行简单的实践。这个阶段,官方文档是最好的教材;
2) 站在巨人的肩膀上:找该技术业界成熟的开源类库和应用系统进行学习,精度源代码;
3) 在问答中进步:去相关论坛学习,提问或者回答问题,并尝试独立解决论坛中已有问题,www.stackoverflow.com是最好的选择。
4) 躬身而行:实践相关技术,达到能独立完成中等规模应用的程度;
5) 知其所以然:深入了解该技术的运行机制、周边技术、性能优化、深度知识等;
6) 善用资源:在公司,高手很多,你想了解的任何一门技术,差不多都能找到相应的牛人,多和这些人沟通,会事半功倍。

以PHP为例:

熟悉语法&api -> 阅读zend、ci、wordpress源码 -> 用PHP独立开发项目 -> 深入了解PHP引擎实现细节、扩展编写、性能优化等

4. 外界干扰太多,静不下心来学习,怎么办?

刚来百度的时候,前辈给过我一个建议:关掉QQ,结合在学校时的体会,我深知这个建议的重要性,欣然接受了。

其实,静心是做好任何事的前提,关掉QQ只是一个表象,最本质的是我们要给自己营造一个好的学习环境。

做技术需要一个安静的环境和一套方法论,方法论可以找到很多(论语第一篇讲的最好),环境必须我们自己营造。

所以我的建议是:忘掉QQ、适度娱乐,努力使自己沉迷到工作和学习中。

虽然不太容易做到,但做到了对提高效率、找出学习时间都很有帮助。

一些复杂的技术会涉及很多方向,每个方向也可以按照上边的方式分解。

技术学习可以触类旁通,当你完全吃透一门技术的时候,其它的再学起来就快了。

以上内容归根结底就是要我们:懂得选择,学会放弃,耐得住寂寞,经得起诱惑。

做技术如同做学问,关于如何做学问,王国维有段话我高中以来一直非常喜欢:

古今之成大事业、大学问者,罔不经过三种之境界:“昨夜西风凋碧树。独上高楼,望尽天涯路。”此第一境界也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二境界也。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处。”此第三境界也。

有兴趣者可参阅:http://www.china.com.cn/culture/guoxue/2010-03/16/content_19620537.htm

技术之路是艰辛且寂寞的,希望以上内容对有志于此道者有所启发。

发表在 未分类 | 标签为 , , , , , , | 一条评论

Sublime Text 2 使用笔记

最早知道Sublime Text还是从ruby的教程上,后来看到一篇Vim之魅力的文章又一次提到它,直到看到这篇入门技巧的文章(另外还有这篇),便想必须得用一用了。不止一个人说它好,想必必须有它的特别之处。另外还存在这样的传言,Sublime Text大有取TextMate 的趋势,不得不让人生畏。说到这,我们没有任何理由不去尝试这款文本编辑器了,那么让我们开始吧:)

首先说一下,如何手动安装Sublime Package Control:

  1. 点击 Preferences > Browse Packages… 选项
  2. 此目录上一级,有个叫 Installed Packages 的文件夹
  3. 下载这个文件 Package Control.sublime-package 复制到刚才的 Installed Packages 文件夹
  4. 重启 Sublime Text

一般通过命令安装不成功的,这样既可安装成功。

(待续)

发表在 未分类 | 标签为 , , , , | 一条评论

从MIUI产品开发获得启示

2012年1月7日,从天津来到北京参加极客公园创新大会,此行收获甚多。很早就想写这个总结,这一天获得的“干货”实在太多,需要沉淀的东西也是在太多,也就耽搁了。到今天都一个月过去了,必须得逼着自己总结了。那么就先写一篇,从MIUI产品开发获得的启示。

MIUI产品经理许斐宣讲的标题是“相信用户的知觉”,整个演讲过程围绕着这个中心进行。有非常多非常多的细节,描述产品的设计与开发是如何相信用户知觉的,听者无不惊叹。那么,MIUI团队是如何相信用户的知觉的呢?第一步,构筑交流平台。

“用户的知觉是, 不通过一步步分析思考而直接获得的整体认知,以及因此得出的设想,判断快速、直接、跳跃,结果也有豁然性。”

用户会直接呼吁一个功能

用户会提出问题, “把手机借给朋友用一下,或给小孩子玩,又担心隐私曝光和设置弄乱”。

“逢年过节总要群发短信,但一看就是群发的,特别没个性”。

用户会提出解决方案

用户想要的功能,转换为产品的设计需要修饰修饰再修饰。直接从用户的角度思考很可能被带入死胡同。从产品开发的角度考虑,又豁然开朗。用户也会惊叹原来自己需要的是这样的功能。

专人负责和用户沟通,搞投票等等,用户非常有自己的存在感。很可能周二提出的问题,周五就能看到结果,就可以用上这个功能了。反观其他行业的产品,虽然周期长,但是和用户的紧密联系程度可能还没有如此这般吧。

每周五硬性让用户看到又有什么新功能了,让用户测试,让用户说话,同时通过用户来验证自己的方向是否正确。

相信用户,用户导向。活的MIUI。这个演讲非常精彩,感谢许斐,感谢MIUI,感谢雷军。作为一个互联网产品开发者,从学到的甚多,如果能融汇一二进入自己的开发中,相信世界会因为一个好的产品而变得更好。

发表在 未分类 | 标签为 , , , , | 一条评论

Firefox插件推荐——用于显示PR值的PageRank Client

作为Web开发者,我们经常会看一些网站的参数,其中非常重要的一点就是PR——PageRank体现网页的相关性和重要性。而插件PageRank Client,可以非常简洁的显示这个值,这一点是最重要的。

另外的替代方法就是直接修改Firefox的配置,也可以达到相同的效果。

发表在 Firefox | 标签为 , , , , , | 留下评论

双线主机已经过时

待续

发表在 未分类 | 标签为 , , , , , | 留下评论

youtube 优酷 土豆 架构

发表在 未分类 | 标签为 , , , , , , | 留下评论

《代码大全》读书笔记

软件构件:
定义问题
需求分析
规划构建
软件架构
详细设计
编码与调试
单元测试
集成测试
集成
系统测试
保障维护

(待续)

发表在 未分类 | 标签为 , , | 留下评论