Https just means "http with ssl". In order to enable SSL, we need a certificate which is either self-signed or signed by an external Cerificate Authority. A self-signed certificate need to be imported when browsing. For easy-to-use purposes, use an external cerificate here. http://www.startssl.com/ and https://buy ...
read moreVim Tips
- 缩进: 10 >>
- 宏: qa q @a
Vim for Rails
使用vim来进行Rails开发,对配置过程略做记录,前提vim已安装完毕。
1、 安装pathogen
pathogens是vim的插件管理工具,可简化对vim插件的管理。
安装如下:mkdir -p ~/.vim/autoload ~/.vim/bundle; \ curl -LSso ~/.vim/autoload/pathogen.vim \ https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim;
然后在
.vimrc
中加入:execute pathogen#infect() " 加在下列配置之前 syntax on filetype plugin indent on
2、 rails.vim
rails插件,无需多介绍。
常用快捷键:read moregf ...
Metaprogramming(code generator)
根本没有什么元编程,只有编程!?
-
注1: 由于代码字符串和块非常相似,因此,在很多情况下,可以选择使用任 意一种。但是,一般情况下,只要能用块就尽量用块。
-
注2: 使一个模块可以通过钩子方法扩展它的包含者。
read moremodule M def self.included(base) base.extend(ClassMethods) end module ClassMethods def my_method 'a class method' end end end class C include M end C.my_method # => "a class method"
-
Meta programming(Class)
在Ruby中,使用class定义类时,实际上是在运行代码,这与java之类的静态语 言有很大的差别。
另外,类只是一个增强的模块,因此,任何适用于类的东西也 适用于模块。
* 注1:在类(或模块)定义时,类本身充当了当前对象self的角色。result = class MyClass self end result # => MyClass
-
注2:Ruby中总是存在一个当前对象self,与此类似,也总是存在一个当前类 (或模块)。每当通过class关键字来打开一个类时,这个类就成为当前类, 但是使用class关键字需要一个类的名字。 如果只有一个类的引用,需要用class_eval()方法打开这个类。
-
注3:类实例变量仅仅是属于Class类对象的普通实例变量。它仅仅可以被类 本身所访问,而不能被类的实例或之类所访问。
-
注4:类方法的实质,它们只是一个类的单件方法。
-
注5: 在类定义中使用一个类方法。
-
注6: eigenclass是一个对象特有的隐藏类,它是单件方法存在的地方。Ruby中可以使用如下语法进入eigenclass的作用域。
read moreclass << an_object # do ...
-
Metaprogramming(Block)
块继承自“函数式编程语言(functional programming languages)”的世界。
* 注1: 在一个方法中,可以向Ruby询问当前的方法调用是否包含块。这可以通 过Kernel#block_given?()方法来做到。-
注2: 如果在一个扁平作用域中定义了多个方法,这这些方法可以用一个作用 域们进行保护,并共享绑定,这种技术称为共享作用域。
-
注3: 传递给instance_eval()方法的块称为一个上下文探针,因为它就像是一 个深入到对象中的代码片段,对其操作。
class C def initialize @x="a private instance variable" end end obj=C.new obj.instance_eval(@x) #=>"a private instance variable"
- 注4: 有时,你会创建一个对象,仅仅是为了在其中执行块 ...
-
Metaprogramming(Methods)
Ruby是动态语言,没有静态类型检查,同时也提供了很多java等静态语言无法提 供的编程技巧。本章主要专注于消除重复代码的技巧,通过用两种不同的方式对一 段代码的重构来展示Ruby的强大功能,涉及的知识点比较少。
* 注1: method_missing()是Kernel中的一个实例方法,当Ruby找不到调用的方 法时,它最后就会调用这个名为method_missing()的方法。- 注2: 移除一个对象中的所有方法,以便把它们转换成幽灵方法。
重构例子
read more# 原始代码 class Computer def initialize(computer_id, data_source) @id = computer_id @data_source = data_source end def mouse info = @data_source.get_mouse_info(@id) price = @data_source.get_mouse_price(@id) result = "Mouse: #{info} ($#{price})" return "* #{result}" if price >= 100 ...
Metaprogramming(ObjectModel)
在Ruby程序中,除了对象之外,还有类、模块以及实例变量这些语言构件。这 些语言构件存在于其中的系统称为对象模型。在对象模型中,你可以找到诸 如"这个方法来自哪个类"和"当我包含这个模块是会发生什么"此类问题的答案。
* 注1: class关键字更像是一个作用域操作符而不是类型声明语句,它的确可以 创建一个还不存在的类,不过也可以把这看成是一个副作用。对于class关键 字,其核心任务是把你带到类的上下文中,让你可以在其中定义方法。-
注2: 修改已有类的特性时,由于粗心导致bug,像这种鲁莽的修改方式被称为 猴子补丁。不过,如果是正确的运行打开类这种技术,猴子补丁也可以表示为 一个褒义词,会很有用。
-
注3: 对象是一组实例变量外加一个指向其类的引用。对象的方法并不存在于对象本身,而是存在于对象的类中。在类中,这些方法被称为类的实例方法。 类是一个对象(Class类的一个实例)外加一组实例方法和一个对其超类的引用。 值得注意的是,实例变量存放在对象中,而方法存放在类中,比如
read moreclass MyClass def my_method ...
-
Metaprogramming(Tutorial)
元编程(Metaprogramming),简单来说,就是写出编写代码的代码。正式的定义为:编写在运行时操纵语言构件的代码。 Ruby是一门对元编程支持很强大的语言(只是比lisp弱一点),而且,元编程 也是通向Ruby的高级编程之路。可以说,除非掌握了元编程否则不能算是真正掌 握了Ruby。 下图简要总结了的基本内容,经验有限,不足之处请多指正。
read more
就如蜘蛛侠大叔曾经说的,能力越大,责任越大。元编程赋予了你强大的能力,同时也意味着你需要肩负更大的责任。A* Algorithm
A*算法是一种经典的启发式搜索算法,公式表示为:f(n)=g(n)+h(n),其中f(n) 是从初始点到目标点的估价函数,g(n)是从初始点到节点n的代价,h(n)是从节 点n到目标节点的估计代价,保证找到最短路径关键在于估价函数h(n)的选取。
一、几个相关知识:
启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。估价函数:从当前节点移动到目标节点的预估费用;这个估计就是启发式的。在寻路问题和迷宫问题中,我们通常用曼哈顿(manhattan)估价函数。
A*算法的特点:A*算法在理论上是时间最优的,但是也有缺点:它的空间增长是指数级别的。
A*算法与BFS:可以这样说,BFS是A ...
read more