0

vim插件管理

Posted by reedboat on Mar 6, 2012 in 软件

昨天试用了一下编辑器Sublime Text 2。 跨平台,据说有超越textmate的趋势。 还支持vim操作方式(这个对我相当的受用),zencoding支持非常的完美。 文件切换非常的快速方便,缩进指示也很好。支持TextMate的bundle等等。也有很好的扩展支持和管理.我没用的很仔细,但是初步感觉很好。

这个时候,想到vim还有很多的地方不完善。比如项目管理和插件管理,虽然也有扩展支持,但是其实效果都不理想。 在想,是否该适当的转换一下我的编辑方式,尤其是sublime还支持基本的vim操作方式情况下。

今天抽空在网上转了转,没想到找到了一个我非常喜欢的vim插件管理机制。在github上发现了一个项目vim-scripts (https://github.com/vim-scripts) 它将vim的插件,全部搬到了github,使用git来管理。

例如FuzzyFinder,

    git clone "http://github.com/vim-scripts/FuzzyFinder.git"

然后在vimrc中增加配置

    set runtimepath+=path_to_fuzzyfinder

这样以后,就可以直接用git pull来更新了。

后来又发现还有更好的方式, 有个工具vundle支持这个项目。 安装扩展只需要在vimrc中加入一句

    vundle FuzzyFinder

就可以方便的下载安装和升级插件了。

这正是我想要的,vim的插件管理终于完美了。是时候将我之前的插件们都迁移一下了

Tags:

 
0

提高Coding速度和效率

Posted by reedboat on Mar 5, 2012 in 编程

影响写代码速度的因素

 

  1. 未考虑清楚就匆忙下手,导致不断的停下来思考和重写。
  2. 匆匆写完之后,出现很多的错误,包括各种语法错误,花费了大量时间
  3. 在整体逻辑没理清之前,陷入了很多的细节,纠缠不清。
  4. 对于一些方法的使用不清楚,需要不停的去查询手册或者google之。
  5. 编写重复的代码,执行重复的操作。
  6. 经常被其他的人或者事情打断,无法集中精力。
  7. 过早的进行性能之类的优化,引入了复杂性和潜在的bug。

提高编码速度的方法

  1. 使用恰当的工具。如一些代码生成工具,好的编辑器(vim, textmate, eclipse and so on)。
  2. 掌握相当数量的快捷键,
  3. 先写整体逻辑和测试代码,再逐步实现细节。
  4. 对于常用的库函数记住用法,并想办法提高查询文档的效率
  5. 写完代码先自己阅读,检查语法逻辑是否正确。也可以采用结对编程的方式
  6. 检查无误之后,再测试。
  7. 使用番茄工作法等方法,为自己建立较为完整的编码时间,在这段时间完成高质量的编码。
  8. 问题整体思路想清楚了,然后开始编码。
  9. 有意加强练习上面的一些方法。
  10. 选择好的调试方法,日志、断言等等,积累自己的调试工具。
  11. 积累自己的代码库,经常做改进
  12. 想到了再继续添加

Tags:

 
0

这一年的工作

Posted by reedboat on Nov 23, 2011 in 产品

阅米从开始到现在做了半年了。加上之前产品的摸索阶段,来每讯有一年了。从开始学习模仿Flipboard和zite,到慢慢形成自己的特点。邀请码内测了很久, 不断的完善,用户较少,心里没有底。 现在在Q+平台上, 终于用户开始有较快的增长,活跃度也还不错,不禁有一些欣慰。当然产品还有很多需要完善的地方,推荐算法也要进一步改进。还有手机和ipad客户端,希望尽快的能够上线使用。这一年收获很多,研究了不少东西

热文发现:

  • 从微博,RSS中发现热门的内容
  • 按照热度排序.
  • 按照时间衰减。

自然语言处理:

  • 网页正文提取, 过滤广告、导航等内容,只保留文章主体。
  • 文章标题提取, 自动去掉标题中含有的网站名称、标语等噪音。
  • 制作缩略图,制作不同的缩略图,适用不同的版式和终端展示。
  • 文本去重,内容相同或者相近的文章识别并只保留一篇。
  • 文本分类,自动将内容划分到合适的分类。
  • 来源提取,友好的文章来源展示。
  • 关键词提取,分词并自动提取适用于展示给用户的关键词。

社会化:

  • 接入腾讯微博、新浪微博
  • Q+、人人等开放平台
  • 社会化分享

个性化算法:

  • 用户喜好模型的建立, 用户的主动、被动行为分析。
  • 用户模型的快速生成和更新,用于冷启动。
  • 新闻按照用户个人喜好等排序.
  • 微博过滤,按照时间、热门度、用户关系、用户兴趣排序
  • 即时计算用户喜欢的文章列表。
  • 各种个性化因子的权重优化、评价。
  • LDA话题模型。
  • 计算用户间的亲密度
  • 杂志化自动排版技术。

跨平台:

  • 普通的Web版本, Q+版。
  • 手机web版
  • 未能完成的HTML5版本
  • 即将推出的Andoroid、IPhone手机版本
  • 即将推出的IPad客户端

语言层面:

  • 在php, javascript之外,也写了一些Java,C++, Python 的代码。
  • 此外还研究了HTML5, NodeJs, Objective C等等。

Tags: , , , ,

 
0

Objective C 学习笔记(3) – 实现特点

Posted by reedboat on Jun 9, 2011 in 编程

objc的内存管理方式

 1. retain count. 对象创建的时候(new, alloc, copy)系统自动为对象指定了计数1. 当向向对象发送retain消息的时候,计数+1,当发送release消息的时候,技术-1. 如果计数为0,对象就被销毁,并发送dealloc消息。 注意手工发送retain方法的时候,retain和release必须对应上,保持平衡。

2. 还可以向对象发送autorelease消息,该对象将被放到一个NSAutorelasePool对象池中。当对象池被销毁的时候,会给其中的每个对象,发送release消息. 这些对象的计数都会-1,如果计数减为0,对象就会被销毁. 如果使用Appkit, 会在特定的时间给对象池发送销毁消息,比如当前的用户事件处理完后。

3. 垃圾回收机制。编译的时候,指定-fobjc-gc-only选项,将启用gc机制。用户不需要自己管理内存,像java一样,系统自动识别哪些对象没有指针指向了,自动释放这些内存。. GUI程序中,gc也在事件处理完后触发。 只是目前iphone开发中还不能用这个特性.

对象初始化

objc的对象初始化包括两步
 1. 分配内存[ClassName alloc],alloc方法继承自NSObject,分配内存,并清空置0.
2. 初始化[Object init], 返回对象实例; 注意init方法有可能返回的是跟alloc取得的不同的对象. init 是个普通的方法,类可以有多个初始化方法.

- (id) init {
    if (self = [super init]){
    }
    return (self);
}


object = [[ClassName alloc] init];

categories

作用: 给已经存在的类增加新的对象方法
用法
1. 将类的实现代码拆分到多个文件,如果很多的话
2. 创建私有方法的前向引用
3. 给对象增加非正式的协议

动态特性 [待补充]

Tags:

 
0

Objective C 学习笔记(1) — 语法

Posted by reedboat on Jun 8, 2011 in 编程

objective c 是在C语言上扩展出来的,C的各种语法特性仍然适用。

#import 引用头文件,比#include 好的地方在于头文件只会包含一次,不用再写#ifdef 了.

NSLog Cocoa提供的函数库,统一以NS作为前缀,以示同C标准库的差别. NSLog与printf类似。

@”strings” @后接双引号字符串,代表NSString类型的字符序列,比普通的字符串有更多的用法。

main方法,同c语言一致 int main(int argc, const char * argv[]){return (0);}

面向对象.

id:对象指针类型
方法调用 [shape draw] ,调用shape对象的draw方法.shape 是id类型

[circle draw]
//带参数的调用,green是参数
[circle setFillColor:green]

@interface 声明类接口 

@interface Circle :NSObject
{
    ShapeColor fillColor;
    ShapeRect bounds;
}
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end

@implementation 实现类

@implementation Circle. 实现代码中省略掉了self self->fillColor = c;
- (void) setFillColor: ( ShapeColor ) c
{
    fillColor = c;
}
@end //Circle

创建新实例, 调用类的new方法

[Circle new]

构造方法
init

访问器 getter/setter
set方法需要带上set前缀,get方法不需要,保持跟属性一致即可。
@property 可以简化访问器. 声明同数据成员相同的属性,可以省去访问器方法的编写
@property (选项) 类型 名字;选项包括readwrite/readonly/assign/retain/copy/atomicity等。
在实现中需要用@synthesize让编译器获取实现代码
之后可以用.来引用属性来读取和写入,而不需要调用方法。

继承/组合
super 访问父类
self

@class 声明使用的类,可以不需要#import a.h, 避免循环引用

静态方法, 以+开头
+ (void) instance;

@protocol 协议,类似其他语言中的接口。 遵循协议就必须实现其中规定的方法。
一个类可以同时遵循多种协议。还可以用@optional指定非必须实现的方法

@protocol NSCoding
 
- (void) encodeWithCoder: (NSCoder *) aCoder;
- (id) initWithCoder: (NScoder *) aDecoder;



@end

@interface Car: NSObject
{
}

@end

 

Tags:

Copyright © 2012 苇叶舟 All rights reserved. Theme by Laptop Geek.