vi有两种模式:命令模式和插入模式,打开文件,默认进入的是命令模式。
移动光标
/*** 上下移动 ***/
j 向下移动,一行,光标不会发生左右移动
+
enter 向下移动,光标会移动到下一行的行首
k 向上移动,一行,光标不会发生左右移动
- 向上移动,光标会移动到上一行的行首
H 移动光标到当前屏幕的第一行
L 移动光标到当前屏幕的最后一行
M 移动光标到当前屏幕的中间行
nH 移动光标到当前屏幕的第一行的后n行
nL 移动光标到当前屏幕的最后一行的前n行
gg 移动到当前文档的第一行
G 移动到当前文档的最后一行
nG 移动到当前文档的第n行
h, j, k, l 前面可以跟阿拉伯数字,用以移动多行或多个字符
( 移动到当前句子的开始
) 移动到下一句的开始
{ 移动到当前段落的开始
} 移动到下 » » »阅读更多
日期加减可以使用INTERVAL关键字或DATE_ADD()函数。DATE_ADD()函数接收两个参数,第一个参数为日期类型的字段,第二个是加或减的天数。
mysql> SELECT NOW() + INTERVAL 6 DAY;
mysql> SELECT DATE_ADD(NOW(), INTERVAL 6 DAY);
计算两个日期之间的天数可以用DATEDIFF()函数,该函数仅接收两个日期类型的字段,需要注意的是第一个参数为较小的日期,否则返回的数据是复数。
mysql> SELECT DATEDIFF(NOW() + INTERVAL 4 DAY, NOW());
获得某个月份的最后一天,可以使用LAST_DAY()方法。
mysql> SELECT LAST_DAY(NOW());
阅读更多
这篇文章并不打算涵盖MySQL手册中的所有内容,要不直接看手册了事,一来是学习记录,二来以备不时之需,会忘记的东西能知道从哪里找回来也算是一种幸福。
字符串连接用到concat方法,concat方法支持无限多个参数,将这些参数合并起来,并返回一个字符串。
select concat(name, ' is ', price, ' dollar') as description
from products;
使用条件逻辑,类似于程序语言中的switch结构,判断返回的结果可以用在排序中,感觉很有用处。
select name,
case when price > 80 then 'More than eighty dollar'
when price = 80 then 'eighty'
when price < 80 then 'less than eighty'
end as price
from products
字符串截取用到substirng方法,第一个参数为要截取的字段,第二个是字符的起始位置,第三个是要截取的字符长度。需要注意的是:mysql中的字符串截取首字母的索引是1,而不是多数程序语言中的0。
select substring(name » » »阅读更多
在读书的时间里,总能寻到哲理性的观点。伴随着时光的流失,这种观点印刻在内心的深处,每次翻起另外一本书,发现很多作者竟然在表达同样的观点,只不过他们身处不同的领域。而我发现,最终的解释是他们在自己的领域中已经触摸到了某种真理性的东西,是经过岁月的洗礼和经验的累积而形成的。
爱民老师的书中有一段话这样说:“泛义的工具是文明的基础,而确指的工具却是愚人的器物。“一直喜欢这句话,我把这句话理解为,只有思想才能迸发出推动人前进的强大力量,而工具使我们沉迷于光怪陆离的虚浮世界。工具是做某些事情所依靠的外界实物,而思想却指导我们如何优雅的完成某些东西的创造。再多的工具也只是数量的堆积,工具是思想达到一定阶段的派生品,每一个工具背后有它所阐述的思想,而我们只关注如何使用工具,却不再关注更深层次的东西。
对于我所从事的行业而言,基础知识尤其重要,而我也是在很长时间之后才明白。而之前也没有谁告诉我这些东西是那 » » »阅读更多
看了网上流传的一些PHP面试题。其中有一道是关于变量交换的,而且不借助中间变量完成。在平常的程序开发中,一般的思维模式是借助中间量达到变量交换的目的,几乎每个人都可以完成这样的操作。面试在于考察一个人的思维方式,当然无法和平常的开发相提并论,网上流传的答案如下。
$a = "abcd";
$b = "1234";
echo "初始化时 a=$a,b=$b";
$a = $a . $b;
$b = strlen( $b );
$b = substr( $a, 0, (strlen($a) - $b ) );
$a = substr( $a, strlen($b) );
echo "交换后 a=$a,b=$b";
下面是我采用的方式,效果是相同的。使用了PHP中的list函数,和一个临时数组。
$a = 'javascript';
$b = 'java';
echo "交换前a= $a, b= $b";
list($b, $a) = array($a, $b);
echo "交换后a= $a, b= $b";
不过我认为还会有更好的方式达到同样的效果,鉴于每个人的理解层次不同,我也能想到的答案就只有第二个了。
阅读更多
编程语言中变量都是先声明后使用,在某些强制类型的语言中更加明显。不过在JavaScript中竟然突破了这种限制,变量在声明之前可以访问到值,当然并不是正确的值。这种变量声明的顺序令人感到费解,一般会和JS的引擎有很大关系。当然,为了避免不必要的麻烦,实际的开发中还是安份点好。例如:
alert(name);
var name = 'javascript';
在不同的浏览器中返回不同的结果。具体产生这样结果的原因是什么,当然可以在JS引擎中找到原因。这个寻找答案的过程是漫长的,除非真正潜心研究JS。在这里只能留下一些结果,在这结果之上的研究需要时日。
Chrome Safari
页面第一次载入返回空字符串,刷新返回javascript
Firefox
每次载入都返回空字符串
Opera IE
每次载入返回undefined
阅读更多
很久没有什么值得燃起激情的事情发生,似乎世界只是按照同一种轨迹终日循环,生活在这天空下的人们似乎只是提线木偶一般,毫无个人的喜怒哀乐,深深隐藏在冰冷的外表之下。当你发现自己陷入到这种境况的时候,还有什么比这更糟糕的事情!我们的身体在这世界游荡,灵魂在空中尖叫。深深的绝望中还能否寻得一丝的希望,改变这早已麻木的世界。这,不是我想要的生活。没有任何智力活动的生活是悲哀的,这悲哀中显现着一种对现实的无望,如何改变,需要的不仅仅是把伤口给别人看。受伤的动物要学会舔舐自己的伤口,并且不要被它打倒。
看着别人的快乐,嫉妒地泛着酸涩的眼泪。这孤独是份难以获得的礼物,在黑暗中的人更能清楚的看清自己的得失。你所羡慕的,未必比你得到的要多。十年磨一剑,这过程是痛苦的,倘若忍受不了如此的折磨,是难以获得想要的成果。既非天才,如果后天不努力,也只能看着别人快乐,自己困守在顾影自怜之中。
“路要一步步走,步子迈大了 » » »阅读更多
想要在Ruby中连接MongoDB,需要使用mongo模块,该模块可以通过ruby自带的gems程序进行安装。
$ gem update --system
$ gem install mongo
$ gem install bson_ext
Mongo模块提供了Mongo::Connnection类连接MongoDB,如果不指定具体的数据库,默认情况下会创建一个持有MongoDB连接的实例,
require 'mongo'
conn = Mongo::Connection.new
puts conn.class # Mongo::Connection
puts conn.database_names # ["admin", "local", ...]
如果需要指定默认的数据库,可以在创建实例的时候指定。如果指定的数据库不存在,MongoDB会创建该数据库。
db = Mongo::Connection.new.db('blog')
db.create_collection('users') # 创建一个collection
puts db.class # Mongo::DB
涉及数据库的操作,基本的创建、删除、拷贝、重命名。重命名操作可以通过拷贝和删除组合完成。
conn.copy_database('blog', 'blog-backup')
conn.drop_dat » » »阅读更多
在Ruby中使用Cookie非常简单,需要用到CGI模块。下面是一个简单的示例:
#!/usr/bin/env ruby
require "cgi"
cookie = CGI::Cookie.new('name' => 'username',
'value' => 'david',
'expires' => Time.now + 3600)
一般来说,cookie和session保存的都是字符串,其它类型的数据类型会强制转换成字符串的形式,所以,如果想要要在cookie或session保存对象数据,必须先将其转化成比特流形式,访问的时候再将其转换成对象的形式,这样才能在cookie或session中传递对象数据。
Ruby中提供了Marshal模块达到上述的功能。其中主要用到的是dump和load方法。dump方法用来生成比特流,load方法将比特流转化成对象的形式。
class User
attr_reader :name, :sex
def initialize(name, sex)
@name = name
@sex = sex
end
end
user = User.new('david', 'male')
user_s = Marshal.dump(user) # 处理成比特 » » »阅读更多
Sinatra是一个基于Ruby语言,以最小精力为代价快速创建web应用为目的的DSL(领域专属语言)。熟悉了一下Sinatra的使用,个人感觉还是比较灵活的,相比rails来说,这款框架实在是简单灵活。
Sinatra可以通过Ruby自带的gems包管理工具安装,Windows下和Linux并无区别,Ruby1.9版本一般都自带了gems。
$ gem install sinatra
安装好之后就可以进行开发了。下面是简单的测试脚本。
# filename: hi.rb
require 'sinatra'
get '/' do
"hello world"
end
将上面的程序保存名为hi.rb的文件,然后在命令行下面执行:
$ ruby hi.rb
== Sinatra/1.1.2 has taken the stage on 4567 for development with backup from WEBrick
[2011-01-26 20:16:42] INFO WEBrick 1.3.1
[2011-01-26 20:16:42] INFO ruby 1.9.2 (2010-08-18) [i686-linux]
[2011-01-26 20:16:42] INFO WEBrick::HTTPServer#start: pid=4186 port=4567
在浏览器中访问localhost:4567,便可看到运 » » »阅读更多