Stonefishy Blog - by Andrew Shi

Scribbles of a front and back ends developer

Ruby修炼之道(18)

IO

Ruby程序在启动后会预先分配3个IO对象:
标准输入 - 预定义常量(STDIN), 全局变量(\$stdin)
标准输出 - 预定义常量(STDOUT), 全局变量(\$stdout)
标准错误输出 - 预定义常量(STDERR), 全局变量(\$stderr)

1
2
$stdout.print "output something from $stdout\n"
STDERR.print "output something from $stderr\n"

IO对象是否与控制台关联,我们可以通过tty?方法来判断。

1
2
3
4
5
if $stdin.tty?
  print "stdin is a tty"
else
  print "stdin is not a tty"
end

Ruby修炼之道(17)

正则表达式(Regexp)

Ruby中的正则表达式用Regexp类来表示,正则表达式描述的是一种模式,该模式用于匹配字符串。

创建

其创建方式有多种: 1.使用/ / 把字符串括起来,可以简单地创建出正则表达式

1
2
reg1 = /Ruby/
puts reg1.class       #=> Regexp

Using Nginx in Mac OS X

Introduction

Nginx is a open source quite lightweight HTTP server which is written by Russian Igor Sysoev, the pronunciation is “engine X”. It’s a high performance HTTP and reverse proxy server, and also it is a IMAP/POP3/SMTP proxy server。

There are lots of website using Nginx in China, like Sina, Tencent, 163, Discuz and so on. The Nginx has a very high performance due to event driven way, and also it is a high performance reverse proxy, load balancing.

代码审查之Pull Request

代码审查(Code Review)一直是一个高效团队里面必备的流程,团队成员可以通过它达到技术交流,相互学习以及提升自身编码水平的目的。当然它的目的并不止于此,我们在做某一件事的过程中,所用的技能和工具不外乎都是为了能使结果更符合我们的期望,就拿建筑工程来说,质量控制就是其把控最严的一关,有专门的质量管理领导小组、质量组织管理体系制度来贯穿这个过程,其最终目的就是为了使这栋建筑坚固牢稳,避免随时有可能崩塌的危险。

Ruby修炼之道(16)

散列类

散列(Hash)和数组一样,都是表示对象集合的对象,不同之处在于,数组使用索引来取得元素,而散列则是用键key,key可以是任何对象,而索引则不能,只能是整数。

散列的创建

1.使用 {}

    {key=>value}
    或
    {key:value}

Ruby修炼之道(15)

字符串比较

Ruby中比较字符串是否相同也是用==!=等运算符

1
2
3
#whether two strings are equal
puts "aaa" == "aab"        #=> false
puts "aaa" != "aab"            #=> true

如果是判断两字符串是否相似,采用正则表达式匹配更加简单。

1
2
3
4
5
6
#whether two strings are similar
reg = Regexp.new("^a+b$")
p "aaa" =~ reg            #=> nil (not similar)
p "ab" =~ reg             #=> 0 (similar)
p "aab" =~ reg            #=> 0 (similar)
p "acb" =~ reg            #=> nil (not similar)

Ruby修炼之道(14)

字符串的创建

普通创建

Ruby中使用“ ”‘ ’符号来创建字符串,在字符串中也可以包含表达式#{},这个表达式被称之为内嵌表达式。如果字符串中需要包含”“或者’‘等字符时,则可以通过转义字符\来实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
str = "this is a string"
puts str

str = 'this is also a string'
puts str

args = "string with argument"
puts "this is a #{args}"

str = "Hello 'string'"
puts str

str = "Hello \"string\""
puts str

How to Make the Octopress Adapt OS X EI Capitan

Octopress was broken after I upgraded Mac to OS X EI Capitan 10.11.1 in these days. The details of the problem is below.

Octopress is work well in Mac10.10. but when I upgraded to Mac10.11.1(OS X EI Capitan). And put rake preview in terminal to see the blog what looks like, got following error.

Starting to watch source with Jekyll and Compass. Starting Rack on port 4000
rake aborted!
Errno::ENOENT: No such file or directory - compass
/Users/user/git/octopress/Rakefile:85:in spawn
/Users/user/git/octopress/Rakefile:85:in block in <top (required)>
Tasks: TOP => preview
(See full trace by running task with --trace)

Ruby修炼之道(13)

替换数组内的元素

根据指定规则替换数组中的元素,Ruby也提供了以下方法:

ary.collect { |item| …}
ary.collect! { |item| …}
ary.map { |item| …}
ary.map! { |item| …}

将数组ary中的各元素item传递给块做处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ary = [1, 2, 3]
ary1 = ary.collect do |item|
    item*2
end

p ary1                 #=> [ 2, 4, 6]

ary2 = ary.map do |item|
    if item % 2 == 0
        0
    else
        1
    end
end

p ary2                 #=> [1, 0, 1]

Ruby修炼之道(12)

数组(Array)也是Ruby中表现一组数据的对象

数组的创建

创建方式有一下几种:
1.使用Array.new
Array#new方法可带两个可选参数,第1个参数表示数组中得个数,第2个参数表示每个元素初始值。如果没有指定第2个参数,其元素的初始值为nil。如果不带参数则会创建一个空数组。

1
2
3
4
5
6
7
8
9
10
11
#不带参数c
ary = Array.new
p ary                  #=> []

#带1个参数
ary = Array.new(3)
p ary                  #=> [nil, nil, nil]

#带2个参数
ary = Array.new(3, 5)
p ary                  #=> [5, 5, 5]