almost 8 years ago

chrome下的vim插件vimium,如果用过vim编辑器,使用这个插件确实欲罢不能,赶紧去试试吧。

快捷键

Modifier keys are specified as <c-x>, <m-x>, and <a-x> for ctrl+x, meta+x, and alt+x
respectively. See the next section for instructions on modifying these bindings.

修饰符指定为<c-x>, <m-x>, <a-x>,分别为ctrl+x, meta+x和alt+x,请看下一节,为绑定修饰符的说明。

导航当前页:

?       show the help dialog for a list of all available keys
                所有能使用的键列表的帮助窗口
h       scroll left
                向左滚动
j       scroll down
                向下滚动
k       scroll up
                向上滚动
l       scroll right
                向右滚动
gg      scroll to top of the page
                滚动到页面顶部
G       scroll to bottom of the page
                滚动到页面底部
d       scroll down half a page
                向下滚动半页
u       scroll up half a page
                向上滚动半页
f       open a link in the current tab
                打开一个链接在当前标签页
F       open a link in a new tab
                打开一个链接在新标签页
r       reload
                刷新
gs      view source
                显示源码
i       enter insert mode -- all commands will be ignored until you hit esc to exit
                进入插入模式 -- 全部命令将被忽略直到你点击ESC退出
yy      copy the current url to the clipboard
                拷贝当前URL到clipboard
yf      copy a link url to the clipboard
                拷贝一个链接URL到clipboard
gf      cycle forward to the next frame
                循环向前到下一个框

导航到新页:

o       Open URL, bookmark, or history entry
                打开URL,书签或历史记录
O       Open URL, bookmark, history entry in a new tab
                在新标签页打开URL,书签、历史记录
b       Open bookmark
                打开书签
B       Open bookmark in a new tab
                在新标签页打开书签

使用查找:

/       enter find mode -- type your search query and hit enter to search or esc to cancel
                进入查找模式 -- 输入你的搜索疑问,点击确认搜索,或按ESC取消
        See here for advanced usage (regular expressions): https://github.com/philc/vimium/wiki/Find-Mode
        看更高级的使用(正则表达式)
n       cycle forward to the next find match
                循环向前到下一个查找匹配
N       cycle backward to the previous find match
                循环向后到前一个查找匹配

导航历史:

H       go back in history
                回后一个历史记录
L       go forward in history
                回前一个历史记录

操作 tabs:

J, gT      go one tab left
                     去左边的标签页
K, gt      go one tab right
                     去右边的标签页
g0         go to the first tab
                     去第一个标签页
g$         go to the last tab
                     去最后一个标签页
t          create tab
                     创建标签页
yt         duplicate current tab
                     重复创建目前标签页
x          close current tab
                     关闭目前标签页
X          restore closed tab (i.e. unwind the 'x' command)
                     恢复关闭的标签页(对应'x'命令)
T          search through your open tabs
                     搜索通过你打开的标签页

其他高级浏览命令:

]]      Follow the link labeled 'next' or '>'. Helpful for browsing paginated sites.
                前往'next'或'>'链接标记。帮助浏览分页网站。
[[      Follow the link labeled 'previous' or '<'. Helpful for browsing paginated sites.
                前往'previous'或'<'链接标记。帮助浏览分页网站。
<a-f>   open multiple links in a new tab
                在新标签页打开多个链接
gi      focus the first (or n-th) text input box on the page
                focus在页面的第一个(或第n个)输入框
gu      go up one level in the URL hierarchy
                去这个URL阶层的上一层
gU      go up to root of the URL hierarchy
                去这个URL阶层的根

Vimium supports command repetition so, for example, hitting '5t' will open 5 tabs in rapid succession. <ESC> (or <c-[>) will clear any partial commands in the queue and will also exit insert and find modes.

Vimium支持命令的重复,例如,点击'5t'将快速连续打开5个标签页。<ESC>(或<c-[>)将清除在队列任何部分的命令,并且也将退出插入和查找模式。

Resource

http://v.youku.com/v_show/id_XMjM0MTE3MDcy.html
https://github.com/philc/vimium

 
almost 8 years ago

规则

[abc] 单个字符 a, b 或 c
[^abc] 任何单个字符,除了a, b, c
[a-z] 任何单个字符的范围 a-z
[a-zA-Z] 任何单个字符的范围 a-z A-Z
^ 开始
$ 结束
\A 串开始
\z 串结束
. 任何单个字符
\s 任何空白字符
\S 任何非空白字符
\d 任何数字
\D 任何非数字
\w 任何单词字符(字母,数字,下划线)
\W 任何非单词字符
\b 任何单词边界
(...)
(a|b) a 或 b
a? 0 或 1个a
a* 0或更多a
a+ 1个或更多a
a{3} 刚好3个a
a{3,} 3个或更多a
a{3,6} 3到6个a之间

操作

i 不分大小写
s 单行模式
m 多行模式
x 在regex忽略空白
o 执行#{}仅一次

例子

网址(URL) [a-zA-z]+://[^\s]*
IP地址(IP Address) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
电子邮件(Email) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
QQ号码 [1-9]\d{4,}
HTML标记(包含内容或自闭合) <(.*)(.*)>.*<\/\1>|<(.*) \/>
密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上) (?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$
日期(年-月-日) (\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))
日期(月/日/年) ((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})
时间(小时:分钟, 24小时制) ((1|0?)[0-9]|2[0-3]):([0-5][0-9])
汉字(字符) [\u4e00-\u9fa5]
中文及全角标点符号(字符) [\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
中国大陆固定电话号码 (\d{4}-|\d{3}-)?(\d{8}|\d{7})
中国大陆手机号码 1\d{10}
中国大陆邮政编码 [1-9]\d{5}
中国大陆身份证号(15位或18位) \d{15}(\d\d[0-9xX])?
非负整数(正整数或零) \d+
正整数 [0-9]*[1-9][0-9]*
负整数 -[0-9]*[1-9][0-9]*
整数 -?\d+
小数 (-?\d+)(\.\d+)?
不包含abc的单词 \b((?!abc)\w)+\b

Resource

http://rubular.com/
https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
http://www.williamlong.info/archives/433.html
http://deerchao.net/tutorials/regex/common.htm

 
almost 8 years ago

将本地的redmine迁移到VPS上去,十分简单,只需要按照安装redmine的步骤走一遍,然后将数据库里的数据更换掉,基本没有什么问题的。

迁移遇到的一个坑

我直接将数据导入数据库,然后访问网站,这样是会报错误。
正确的步骤是执行rake db:migrate RAILS_ENV="production",然后在替换掉数据即可。

附上redmine的安装文档
https://github.com/xfstart07/redmine/blob/master/doc/INSTALL

Resource

http://stackoverflow.com/questions/9653813/refinerycms-rails-3-2-1

 
almost 8 years ago

Update and upgrade system

sudo apt-get update
sudo apt-get upgrade

Changing the Time Zone

sudo dpkg-reconfigure tzdata

安装基本开发环境

sudo apt-get install build-essential zlib1g-dev libssl-dev libreadline5 libyaml-dev

安装MySQL环境

sudo apt-get install mysql-server
sudo apt-get install libmysqlclient-dev

Install rvm ruby

curl -L https://get.rvm.io | bash -s stable --ruby
source ~/.rvm/scripts/rvm

配置rvm环境

rvm requirements

# 将显示的全部安装上
rvmsudo /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Install gem bundler

gem install bundler

Install libcurl4-openssl-dev for passenger

sudo aptitude install libcurl4-openssl-dev

Install XML parser

sudo apt-get install libxml2 libxml2-dev libxslt1-dev

Nokogiri

gem install nokogiri

Install Node.js

sudo apt-get update
sudo apt-get install python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

more

Install Passenger and Nginx

gem install passenger 

安装Nginx

rvmsudo passenger-install-nginx-module

一般的选择recommended,nginx路径安装在/usr/local/nginx

Start nginx

sudo service nginx start 

无法启动的话,可以软连接(ln)/usr/local/nginx/sbin/nginx到/usr/sbin/目录下。

Install imagemagick

先卸载系统自带的imagemagick

sudo apt-get remove imagemagick

安装lib

sudo apt-get install libmagickcore-dev libmagickwand-dev

下载Imagemagick,安装

最好安装在/opt目录下

./configure
make
sudo make install

然后 vim .bash_profile 加入

 LD_LIBRARY_PATH=/usr/local/lib

Install rmagick

gem install rmagick

Resource

https://www.digitalocean.com/community/articles/how-to-install-rails-and-nginx-with-passenger-on-ubuntu
https://github.com/rocodev/guides/wiki/setup-production-development

 
almost 8 years ago

Sed

删除文本里的注释和空行

sed -e '/^#/d' -e '/^$/d' nginx.conf
# -e 添加多个条件

iptables

iptables -A INPUT -p tcp --dport 80 -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

通过iptables实现简单的流量限制,主要针对基于TCP协议的应用,通过iptables的limit模块,实现对每秒通过的数据包数量进行限制。

 
almost 8 years ago
# 分页插件 - Kaminari

安装

gem 'kaminari'

运行bundle install安装插件。

使用

# 基本的分页使用

@users = User.order(:name).page params[:page]

配置每个model的分页值

class User < ActiveRecord::Base
  paginates_per 50
end

显示分页

<%= paginate @users %>

自定义分页主题

rails g kaminari:views THEME # bootstrap

SQL的时间查询插件 - by_star

by_star是一个辅助 ActiveRecord 的组件,让你可以简单的实现按某年,某月,某日,或者星期几,来查询数据.

比如,查询今天注册的user

User.today

生成SQL语句

SELECT "books".* FROM "books" WHERE (books.created_at >= '2012-03-26 00:00:00.000000' AND books.created_at <= '2012-03-26 23:59:59.999999')

Resource

kaminari

https://github.com/amatsuda/kaminari
http://rubydoc.info/gems/kaminari/frames

by_star

http://ruby-china.org/topics/2151
http://rubydoc.info/gems/by_star/frames
https://github.com/radar/by_star

 
almost 8 years ago
由于要写一下PHP的代码,所以在Mac上安装Netbeans这个IDE,至于为什么用Netbeans这个IDE,因为之前在公司实习时用过,还是比较熟悉它的配置。以前在学校里用过Eclipse,不过Eclipse感觉太大了,Netbeans只安装PHP版的话才40+M,而且需要安装的插件也比较少。由于这段时间一直在用Vim写代码,所以在Netbeans里安装了jvi这个Vim的插件。

下载安装

https://netbeans.org/downloads/index.html

安装的话比较简单就不说了。代码高亮换成我一直用的Monokai,google一下就有。

安装jvi插件

下载地址:http://sourceforge.net/projects/jvi/files/jVi-for-NetBeans/

配置jvi

jvi Config > Platform

Mac Retina Cursor Xor Bug 打勾 # Mac Retina光标显示

jvi Config > General

‘number’ 'nu' 打勾 # 行号

jvi Config > Buffer Modifications

'backspace' 'bs' 选2

Zen Coding插件

https://github.com/lorenzos/ZenCodingNetBeansPlugin

使用快捷键 CTRL+ALT+N

 
almost 8 years ago
使用[@Rei](https://github.com/chloerei)的`wmd-rails`插件做markdown-editor

Usage

安装

gem 'wmd-rails'
# 然后 bundle install

使用

# In app/assets/javascripts/editor.js or other js

//= require wmd/wmd

//= require wmd/showdown


$(function(){
  new WMDEditor({
    input: "editor-input",
    button_bar: "editor-button-bar",
    preview: "editor-preview",
    helpLink: "http://daringfireball.net/projects/markdown/syntax"
  });
})

More wmd document: https://github.com/chloerei/wmd

# In app/assets/stylesheets/editor.css or other css
/*
 *= require 'wmd/wmd'
*/

配置

# In config/application.rb

config.assets.precompile += %w(editor.js editor.css)

使用

在html里添加markdown-editor

<div>
  <div id="notes-button-bar"></div>
  <textarea id="notes" name="copy"></textarea>
  <div id="notes-preview"></div>
  <input type="text" name="copy_html" value="" id="copy_html">              
</div>

使用redcarpet插件来显示markdown格式的文档

# 设置Redcarept-html属性

renderer = Redcarpet::Render::HTML.new(:no_style => true, :hard_wrap => true)

# 设置markdown属性

markdown = Redcarpet::Markdown.new(renderer, :autolink => true, ::no_intra_emphasis => true)

# sanitize格式化一下,使html更安全

sanitize(markdown.render("This is *bongos*, indeed."))
# => "<p>This is <em>bongos</em>, indeed</p>"

Resource

https://github.com/chloerei/wmd-rails
https://github.com/vmg/redcarpet

http://ruby-china.org/topics/774
http://ruby-china.org/topics/474

http://codecampo.com/topics/381

 
almost 8 years ago
### 简单的用户登录总结

用户登录的情况通过Session来记录。当登录页面通过表单(form_for)将用户密码发送到服务器,Session Controller 验证用户名(或邮箱)和密码的正确性,如果正确则将用户id存储到session中,以便页面通过session判断该用户是否登录,如果不正确则重定向会登录页面重新登录。

  1. 登录页面:
<div class="row">
  <div class="span4 offset4">
    <section class="box" id="login-form">
      <%= form_for(:user, url: sessions_path) do |f| %>
        <fieldset>
          <legend>Login</legend>
          <div class="control-group">
            <%= f.label 'Email' %>
            <div class="controls">
              <%= f.text_field :email %>
            </div>
            <%= f.label 'Password' %>
            <div class="controls">
              <%= f.password_field :password %>
            </div>
            <div class="form-actions">
              <%= f.submit 'Login', class: 'btn' %>
              or
              <%= link_to 'Not signup yet?', signup_path %>
            </div>
          </div>
        </fieldset>
      <% end %>
    </section>
  </div>
</div>
  1. session controller验证
def create
    user = User.find_by_email(params[:user][:email])
    # TODO: user.authenticate 源码是什么?

    if user && user.authenticate(params[:user][:password])
      sign_in user
      redirect_to root_url
    else
      redirect_to signin_url
    end
end
  1.  ApplicationController 的sign_in帮助方法
def sign_in(user)
    @current_user = user
    session[:user_id] = user.id
end

简单的用户注册

通过页面提交表达(form_for),将请求发送到User controller创建用户,User Model自动调用has_secure_password()方法,验证密码的正确性并生成Hash密码,然后创建一个新的用户对象,通过save()方法将用户信息保存到数据库中。

  1. User controller 创建用户
def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      redirect_to root_url
    else
      render :new
    end
end

简单的用户退出

通过页面用户退出请求,经过routes发送到Session controller的destroy方法,将session注销来实现用户退出功能。

  1.  Session controller 用户退出
def destroy
    sign_out
    redirect_to root_url
end
  1. ApplicationController 的sign_out 帮助方法
def sign_out
    session[:user_id] = nil
end
 
almost 8 years ago
首先添加库到Gemfile中:
gem 'anjlab-bootstrap-rails', '>= 2.3', :require => 'bootstrap-rails'

然后运行bundle install命令安装库。

样式(Stylesheets)

添加样式到 app/assets/stylesheets/application.css

*= require twitter/bootstrap

或者你可以弃用bootstrap变量

  1. 替换 = require twitter/bootstrap 为 = require app_bootstrap
  2. 创建 app_bootstrap.scss
// change colors
$linkColor: red;

// change grid
$gridColumnWidth: 70px;

$gridGutterWidth: 10px;

// import original bootstrap
@import "twitter/bootstrap";

@import "twitter/bootstrap-responsive";

注意:这里需要重启一下程序才能使用。

Javascript

添加javascript文件到 app/assets/javascripts/application.js

// Include all twitter's javascripts

//= require twitter/bootstrap


// Or peek any of them yourself

//= require twitter/bootstrap/transition

//= require twitter/bootstrap/alert

//= require twitter/bootstrap/modal

//= require twitter/bootstrap/dropdown

//= require twitter/bootstrap/scrollspy

//= require twitter/bootstrap/tab

//= require twitter/bootstrap/tooltip

//= require twitter/bootstrap/popover

//= require twitter/bootstrap/button

//= require twitter/bootstrap/collapse

//= require twitter/bootstrap/carousel

//= require twitter/bootstrap/typeahead

//= require twitter/bootstrap/affix

清除缓存

rm -rf tmp/cache

Resource:

https://github.com/anjlab/bootstrap-rails