Xway

The world is full of fascinating problems waiting to be solved~.

最牛的linux Shell命令(摘录)

| Comments

这里仅仅根据自己的需求摘录了一部分,想看完整版的可以去这里

第一部分

1.以sudo运行上条命s令

$sudo!!

2.以http方式共享当前文件的文件夹,在127.0.0.1:8000可见

$python -m SimpleHTTPServer

3.以普通用户打开vim时,保存时发现需要root权限,用这条命令

:w !sudo tee%

4.替换上一个命令中的一个词,比如将上个命令中的first换成second

$^first^second^

5.快速备份一个文件

$cp filename{,.bak}

第二部分

1.新建文件

>file.txt

2.定时执行一次性任务,用at,多次性任务,用cron,午夜echo

echo cmd|at midnight

可使用tomorrow、next week,比较人性化。

3.查看系统中占用端口的进程

netstat -tulnp

4.用python快速开启一个smtp服务

python -m smtpd -n -c DebuggingServer localhost:1025

第三部分

1.实时查看目录下最新改动过的文件

watch -d -n 1 'df; ls -FlAt /path'

2.用wget的递归方式下载整个网站

wget --random-wait -r -p -e robots=off -U Mozilla www.example.com

3.显示消耗内存最多的10个运行中的进程,按内存使用量排序

ps aux | sort -nk +4 | tail

第四部分

1.简易计算器

time read

运行命令开始计算时间,结束时按一下Enter,显示计时精确到ms

2.列出最常用的10条命令

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

3.检查gmail新邮件

curl -u you@gmail.com --silent "https://mail.google.com/mail/feed/atom"|perl -ne \
'
print "Subject: $1 " if /<title>(.+?)<\/title>/ && $title++;
print "(from $1)\n" if /<email>(.+?)<\/email>/;
'

4.用telnet看星球大战

telnet towel.blinkenlights.nl

字符艺术,so cool!

使用octopress中的故障记录

| Comments

使用octopress已有半年了,到目前为止感觉不坏,相比国内的博客平台,最大的好处是不用担心若干莫名其妙的敏感词导致文章不能发布,而且它确实是个时尚玩具,和ruby,github,sass都扯上了关系,满足了我这个伪程序员一点虚荣心,不过这类玩意儿就像快刀,好用是好用,一不小心就划伤手指。

言归正传,记载几个我使用过程中遇到过的问题,大部分情况下,你在rake generate时看到的出错提示很相似,如下:

最常见的故障显示

/Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:203:in `parse': (/Users/toutakashi/xway/octopress/_config.yml): could not find expected ': while scanning a simple key at line 8 column 1 (Psych::SyntaxError)
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:151:in `parse'
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:127:in `load'
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:297:in `block in load_file'
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:297:in `open'
from /Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:297:in `load_file'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/gems/jekyll-0.11.0/lib/jekyll.rb:119:in `configuration'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/gems/jekyll-0.11.0/bin/jekyll:207:in `<top (required)>'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/bin/jekyll:19:in `load'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/bin/jekyll:19:in `<main>'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `eval'
from /Users/toutakashi/.rvm/gems/ruby-1.9.3-p194/bin/ruby_noexec_wrapper:14:in `<main>'

别被浩浩荡荡的提示吓着了,怎么看呢,根据我的经验,以from开头的句子都可以忽略,看其他的吧。

_config.yml中的空格

上面这个例子中说在config.yml中找不到某个 “ : ”, 实际上是,config.yml中各个项的写法是类似simple_search: http://google.com/search,注意冒号后面有个空格,忘掉打空格,就等着报上面的错。

categories中的类别

上面的错误至少还指示了出错的文件和行号,那下面这个完全就是看不明白了(已省略大把的from):

/Users/toutakashi/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): did not find expected key while parsing a block mapping at line 2 column 1 (Psych::SyntaxError)

一个<unknown>让你欲哭无泪。我碰上这个错误时,恰好是在更新octopress之后,于是怀疑面很广,为此重装了octopress,重装了不同版本的ruby,其间发现由于我的新系统lion不带gcc,无法编译ruby,又折腾半天发现得给xcode安个command tools,但即使这样还是没有改善,最后偶然的发现原因是最近的一片文章中categories格式错了,本来应该是categories: [python,notes],我不小心给写成了categories: [python],[notes],于是悲剧了。

sass更新的问题

没事儿最好别急着更新,我在某次跟风更新octopress的源码之后,界面变得乱七八糟,最后发现是sass版本太新的原因,好在这种事情不是我一个人遇到,不久作者的github的页面上就给出了解决方案,但我也有半个月没写成博客。

记载

上述这些故障并不复杂,很多是由于失误造成,但由于错误呈现的方式不明,解决起来相当耗时,先记载这些,再遇上新问题会直接添加在此文末尾。

The Django Book 2 :Notes 1

| Comments

入门

  1. 先安装好python和mysql等。
  2. 下载django,运行命令 python setup.py install 安装之。
  3. 选择好安装目录,进入,运行命令 django-admin.py startproject mysite
  4. cd mysite,运行命令 python manage.py runserver ,也可以指定端口 python manage.py runserver 0.0.0.0:8000
  5. 访问 http://127.0.0.1:8000/,看Django是否启动。

视图和URL配置

静态页面请求处理过程

  1. 进来的请求转/hello/
  2. Django通过在ROOT_URLCONF配置来决定根URLconf
  3. Django在URLconf的所有URL模式中,查找第一个匹配/hello/的条目
  4. 如果找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. Django转换HttpResponse为一个适合的HTTP response,以web page显示出来

模板系统

名词

变量:两个大括号包围,{{person_name}}
标签:大括号和百分号包围,{% if ordered_warranty %}
过滤器:用(|)来调用,{{ship_date|date:"Fj,Y"}}
标签和过滤器的列表,见附录F,可以用其创建自己的tag和filters。

如何使用模板

1.创建模板对象,就是将模板的代码或者html文件变成Template

from django.template import Template
t = Template('Your name is {{ name }}.')

2.渲染模板,就是将模板中的变量用Context对象中的变量替换

form diango.template import Context
t.render(Context({'name':'john'}))

常用模板标签

1.{%if%} ,标签需要成对出现,可以嵌套,{%else%}可选。

{% if athlete_list %}
    ……
{% else %}
    …… 
{% endif %}

{%ifequal%} 和 {%ifnotequal%},用来比较变量

{% ifequal section 'sitenews' %} 
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

2.{%for%},标签需要成对出现,可以嵌套

{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li> 
{% endfor %}

a.增加reversed使列表反向迭代:

{% for athlete in athlete_list reversed %} 
    ……
{% endfor %}

b.循环之前检测列表大小,列表为空时输出提示:

{% if athlete_list %}
    {% for athlete in athlete_list %}
        <p>{{ athlete.name }}</p> 
    {% endfor %}
{% else %}
    <p>There are no athletes. Only computer programmers.</p>
{% endif %}

以上语句等价于使用{%empty%},如下:

{% for athlete in athlete_list %} 
    <p>{{ athlete.name }}</p>
{% empty %}
    <p>There are no athletes. Only computer programmers.</p>
{% endfor %}

方便的多,请使用{%empty%}。 c.forloop变量,详见文档。

3.注释

{# This is a comment #}

或者

{% comment %}
    This is a multiline comment. 
{% endcomment %}

过滤器

过滤器使用管道字符,可以套接(一个管道输出作为下一个管道输入),例如查找列表第一个元素并转换为大写:

{{my_list|first|upper}}

过滤器可带参数,以双引号包围,例如显示变量bio的前30个词:

{{ bio|truncatewords:"30" }}

几个重要过滤器:
addslashes:添加反斜杠到任何反斜杠、单引号、双引号之前。这在JavaScript处理中十分有用。
date:按指定格式参数化date或datetime对象。
length返回变量的长度。

在视图中使用模板

1.定位至settings.py配置文件,找到TEMPLATE_DIR,设置模板目录,别忘了逗号
2.使用render_to_response()

from django.shortcuts import render_to_response 
import datetime

def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', 
                                {'current_date': now})

如果不提供第二个参数,render_to_response()使用一个空字典。
3. 使用locals() ,上面的代码可修改为:

def current_datetime(request):
    current_date = datetime.datetime.now()
    return render_to_response('current_datetime.html', locals())

locals()可以让模板中的变量和代码中的变量相通,locals()记住所有已定义的局部变量。

模板继承

{%include%}标签仅仅是引入部分内容

{% include 'includes/nav.html' %}

对这部分内容无法修改,比如引入header,对于其中的title就无法修改,而模板继承就可以。要用到{% extends %}标签,基础模板范例(base.html):

<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN"> <html lang="en">
<head>
    <title>{% block title %}{% endblock %}</title> </head>
<body>
    <h1>My helpful timestamp site</h1> 
    {% block content %}{% endblock %} 
    {% block footer %}
    <hr>
    <p>Thanks for visiting my site.</p> {% endblock %}
</body> 
</html>

其中{%block%}标签告诉模板引擎可以重载这些部分。
使用基础模板(current_datetime.html):

{% extends "base.html" %}
{% block title %}The current time{% endblock %}
{% block content %}
    <p>It is now {{ current_date }}.</p> 
{% endblock %}

注意:
1.{% extends %}必须为第一个标签。
2.基础模板中{% block %}标签越多越好。

数据模型

数据库查询简单方法

使用MySQLdb类库执行SQL语句查询并处理:

db = MySQLdb.connect(user='me',db='mydb',passwd='secret',host='localhost')
cursor = db.cursor()
cursor.execute('SELECT name FROM books ORDER BY name')
db.close()

数据库配置

在’setting.py’中找到DATABASES设置数据库,注意sqlite和其他数据库的用法不同。

第一个app

一个project可以包含很多app,如果使用了Django的数据库层(模型),必须建一个app,模型放在apps中。

假设要建立一个books的app,步骤如下:

1.在manage.py目录下,建app目录:

python manage.py startapp books

2.修改models.py,设计数据库表结构,注意添加__unicode__函数:

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()        
    def __unicode__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40)
    email = models.EmailField()
    def __unicode__(self):
        return self.first_name

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
    def __unicode__(self):
        return self.first_name

3.安装数据模型,在setting.pyINSTALLED_APPS最后添加books:

INSTALLED_APPS = (
 'books',
)

4.验证数据模型的有效性:

python manage.py validate

5.根据models.py中的描述生成创建表的sql语句:

python manage.py sqlall books

6.使用5中生成的语句创建表:

python manage.py syncdb

回文数和利克瑞尔数

| Comments

回文数就是看起来左右对称的自然数,比如121、876678,如果将一个自然数与将该数按位翻转后形成的新数相加,并将此过程反复迭代后,往往都会得出一个回文数。例如:

56在一次迭代后形成回文数:56+65 = 121.  
57在两次迭代后形成回文数:57+75 = 132, 132+231 = 363.  
89经过少有的24次迭代(它是10,000以下的数中迭代次数最多的)而得到回文数8813200023188.    

假如某数翻转又不停迭代相加后得不出回文数呢?那么它就被称为利克瑞尔数(Lychrel Number)。
利克瑞尔数实际上很罕见,而且难以证明,90%的10000以内的数经过不多于7次迭代后会变成回文数, 唯一例外的是196,至今还未被迭代成回文数,也许它就是最小的利克瑞尔数。
科普完毕,下面写个小程序来验证利克瑞尔数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def Lychrel_Number(num,counter):
  '''验证一个数是否为利克瑞尔数'''
  sum = num + reverse_num(num)
  print '%d+%d=%d'%(num,reverse_num(num),sum)
  counter = counter + 1    #迭代计数
  if is_palindrome(sum):
      print('%d times!'%counter)
      return
  else:
      Lychrel_Number(sum,counter)
      
def reverse_num(n):
  '''将一个数翻转'''
  l = num_to_list(n)            
  r = 0
  for i in range(len(l)):
      r = r + l.pop()*pow(10,i)        
  return r

def num_to_list(n):
  '''将一个数从个位开始放入一个列表'''
  l=[]
  while n:
      l.append(n%10)
      n = n/10
  return l

def is_palindrome(n):
  '''判断回文数'''
  original = num_to_list(n)
  result = original[::-1]       #翻转序列
  return original == result

num = input("please enter a number:")
Lychrel_Number(num,0)

运行示例如下:

please enter a number:99
99+99=198
198+891=1089
1089+9801=10890
10890+9801=20691
20691+19602=40293
40293+39204=79497
6 times!

别验证196哦,会溢出的哦!

在mac上使用MySQLdb

| Comments

Django的缘故,需要用到python下的mysql接口,但mac上安装MySQLdb比我想象的要麻烦的多,看起来一切顺利,就是用不成,折腾了半天才发现一些注意事项,现将其写在这里:

安装步骤

1.安装正确的python和mysql版本

若未安装python和mysql,可以使用二者官方网站上的img镜像安装,但记住若你的mac os是64位的,一定安装64位的版本。
若已安装python和mysql,用file命令搞清楚mac上的python和mysql是什么版本(32位还是64位):

file $(which python)
file $(which mysql)

现在的mac基本都是64位,看看是不是,千万别搞错,否则安装肯定出错。

2.增加路径

安装上述软件之后,须将其加入环境变量path,一般来说,python的路径在/Library/Frameworks/Python.framework/Versions/2.7/bin,mysql的路径在/usr/local/mysql/bin,增加方法:

sudo vim /etc/paths

将路径添加在里面即可。

3.安装MySQL-python

使用pip或者easy_install来安装MySQL-python,建议用pip安装:

pip install  MySQL-python

完成之后进入python,import一下:

import MySQLdb

若无问题,则安装成功。

4.卸载mysql的问题

mac下用DMG格式的mysql安装的话,出错后卸载很麻烦,卸载方法如下:

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
vim /etc/hostconfig and removed the line MYSQLCOM=-YES-
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

看起来很简单,可是浪费了我整个下午。

Dive Into Python 3 :Notes 1

| Comments

以下是我最近阅读《深入python3》后记的笔记。

第一份Python程序

条件表达式

C语言中的条件表达式是这样 x = condition ? true_value : false_value
python中是这样 x = true_value if condition else false_value,例如:

X = true if logging else flase

文档字符串docstring

紧跟在函数声明的下一行,用引号或三重引号包围,描述函数必备,在有些ide,当用鼠标指向函数名时,其docstring以tooltip的方式显示出来,很便利。
PEP 257: Docstring 约定解释了用什么来从大量的 docstring 中分辨出一个好的 docstring。

异常

在被调用程序中使用 raise 语句来抛出异常,在调用程序中使用 try…except 块来处理异常。

__name____main__

if __name__ == '__main__'

这种写法的原理:模块是对象,所有的模块对象都有一个内置的属性 __name__ ,如果import这个模块,那么__name__就等于这个模块的文件名(不包含路径和扩展名),但如果将此模块当做一个独立的程序来运行的话,__name__ 将是一个特殊的默认值__main__,所以才用此if语句来判断。

内置数据类型

八大内置数据类型,booleans,numbers,strings,bytes,lists,tuples,sets,dictionaries。

用 type() 函数来检测任何值或变量的类型。
用 isinstance() 函数判断某个值或变量是否为给定某个类型。如:

isinstance(1, int)

常见数值运算

其他的都和c语言差不多,除了这两个: //除后取整 ; **求幂运算 ;

列表[ ]

  • 列表用 [ ] 来定义。
  • 可用list[-1]来从反方向索引。
  • 布尔上下文,空列表为false,有元素的列表为true。

切片几种用法

list[1:3] ; list[1:-1]; list[0:3]; list[:3]; list[3:]; list[:]      

list[:]是一个新列表,与list并不一样,只是拥有完全相同的元素,是对列表进行复制的一条捷径。

  • 增加元素
    • +号,list+[2.0,3],此方法效率较低。
    • append(),list.append(5),append只能添加一个元素。
    • insert(),list.insert(2,'j'),insert需要一个索引位置。
    • expend(),list.extend(['four', 'Ω']),参数是列表,主要用于合并列表。
  • 删除元素
    • del,直接 del list[1] ,命令行用法。
    • remove(),list.remove(item) ,删除item的第一次出现。
    • pop(), list.pop() 删除最后的元素,list.pop(2)删除该索引位置的元素,此方法返回被pop的值。
  • 检索
    • count(),list.count(item) 返回item出现的次数。
    • in,if x in list 返回布尔值。
    • index(),list.index(item) 返回item的索引值。

元组( )

以下是与list的相同点:

  • 元组用( )来定义,可以用[ ]来索引。
  • 负索引同于列表。
  • 布尔上下文同于列表。
  • 切片同于列表。
  • 索引,也可用count(),in,index()。

以下是与list的不同点:

  • 创建单元素元组,须如此(“a”,),加上逗号,python才认元组,否则认为括号多余。
  • 元组不可修改,故无增加删除之方法。

元组的优点:

可同时赋多个值

v=('a',2,true)
(x,y,z) = v

有多种用途,例如:

(MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY)=range(7)

或者让函数返回元组,赋值给不同的变量。 * 进行遍历操作比列表快。 * “写保护”,让代码更安全。 * 可用作字典键,列表不行。 * 与列表可以相互转换,tuple()冻结列表,list()融合元组。

集合{ }

  • 集合用 { } 来定义,用此方法定义时,至少含一个元素,纯{ }是表示空字典。
  • 创建空集合,用不带参数的set(),如 a_set = set() 不能用 a_set = { }
  • 可用列表创建集合,如 a_set = set(list) 初始化。
  • 集合装载唯一值,所以会自动消除重复元素。
  • 增加元素
    • add(),增加单值,a_set.add(11)
    • udate(),增加一个序列,list或者tuple,a_set.update([10,30,59])
  • 删除元素
    • discard() ,删除单值,a_set.discard(10) ,若值不存在,无反应。
    • remove(),删除单值, a_set.remove(21),若值不存在,抛出错误。
    • pop(),弹出单值并返回该值,是随机弹出。
    • clear(),清空集合。

字典{ }

  • 集合装载唯一值,所以会自动消除重复元素。

同一字典的值可以装入不同数据类型和任何对象,但是键只能是数据类型,如:

{1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
 1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}
  • 可以使用len()in
  • 可以使用类似集合的增加和减少元素的方法。

推导式

紧凑,直观,有点像sql语句。

列表推导式

对某列表中每个元素应用一个函数,将其映射到另一个列表。
将a_list中的元素乘以3

[elem * 3 for elem in a_list]

将当前目录下所有xml文件加上全路径

[os.path.realpath(f) for f in glob.glob('*.xml')]  

过滤列表,返回当前目录下所有大小大于6000字节的py文件

[f for f in glob.glob('*.py') if os.stat(f).st_size > 6000]

返回元组列表,每个元组包含文件字节数和绝对路径

[(os.stat(f).st_size, os.path.realpath(f)) for f in glob.glob('*.xml')] 

字典推导式

与列表推导式不同之处有两点:
1.被花括号包围而非方括号。
2.对于每个元素它包含由冒号分隔的两个表达式。冒号前为键,其后为值。

{f:os.stat(f) for f in glob.glob('*.py')}

也可以加上if形成过滤字典

{os.path.splitext(f)[0]:humansize.approximate_size(meta.st_size) \ 
     for f, meta in metadata_dict.items() if meta.st_size > 6000} 

小技巧,交换字典的键和值

{value:key for key, value in a_dict.items()}

集合推导式

与列表推导式和字典推导式类似,其输入不一定是集合,可以是任何序列:

 {2**x for x in range(10)} 

Octopress折腾记

| Comments

年初,发现很多技术博客(特别是喜好ruby的)都换了新面孔,简洁大气,开始还以为是wordpress的new theme,后来发现不是,他们用了Ocotopress,其中贴代码的部分十分漂亮,让我心动不已,自己本来有个wordpress的博客在SAE上,但老要买云豆很不爽,于是也摆弄摆弄Octopress,顺便把尘封已久的github账号拿出来抖抖灰,抽空折腾了两天,小记一下,我是将其部署至github,本地系统为mac,整个过程参考了此处

了解

环境

如果你已经安装了最新的git和ruby,请忽略。

github

安装Octopress

下载Octopress

git clone git://github.com/imathis/octopress.git octopress
cd octopress # 如果使用 RVM, 这里将会询问是否信任该 .rvmrc (选yes).
ruby --version # 应该大于 Ruby 1.9.2

.rvmrc文件中默认的ruby版本是1.9.2,假如你的ruby版本高于1.9.2,修改它。

安装相应的gem

bundle update

生成模板文件

rake install

部署至github

连接至github

rake setup_github_pages

输入url地址,形如

git@github.com:username/username.github.com.git

生成静态页面

rake generate

本地预览

rake preview 

访问http://localhost:4000 查看本地效果,用ctrl+c可结束 。

部署

rake deploy

访问 http://username.github.com 查看博客服务器效果 。

更新Octopress

每过一段时间,可能需要更新一下Octopress版本,使之保持最新。

配置博客信息

修改Octopress/_config.yml,参考http://octopress.org/docs/configuring/ ,示例如下,若包含中文,请将文件格式保存成utf-8的格式。

url: http://kleistx.github.com/
title: Xway
subtitle: 
author: xway
simple_search: http://google.com/search
description:

创建新文章

rake new_post["article name"]

文章创建后,可在source/_post文件夹下找到,推荐使用Mou编辑,更新之后需要重新生成静态页面,并重新部署。

rake generate
rake deploy

使用Disqus评论系统

注册一个Disqus账号,记住shortname,然后打开”_config.yml”,找到disqus相关的配置项,修改即可:

#Disqus Comments
disqus_short_name: xway
disqus_show_comment_count: true

记住冒号后面是有空格的。

贴代码

Octopress使用了pygments,所以支持多种编程语言的代码,具体方法见此处,我常用的方式是:

{% codeblock %}
  Awesome code snippet
{% endcodeblock  %}

效果如下:

1
Awesome code snippet

或者

{% codeblock Time to be Awesome - awesome.rb %}
  puts "Awesome!" unless lame
{% endcodeblock %}

效果如下:

Time to be Awesome - awesome.rb
1
puts "Awesome!" unless lame

添加新页面

例如在导航中增加'About' ,首先:

rake new_page["page name"]

会在在source下新建about目录,并在里面添加index.markdown文件。
然后,编辑导航条source/_includes/custom/navigation.html ,添加上

<li><a href="/about">About</a></li>  

首页只显示摘要

在文中加入<!--more-->来控制摘要截取位置。
修改_config.yml里的excerpt_link。

修改标题字体

先去google webfonts挑两款字体,将生成的链接拷贝下来,加入 /source/_includes/custom/head.html
然后修改 sass/custom/_font.scss,分别将标题和副标题的字体设置为刚才挑选的两款。

保存源代码

在项目里建立source分支用于保存所有的代码(配置,sass,文章)。

git add .
git commit -m 'blog'
git push origin source

Mac常用第三方软件推荐

| Comments

编程工具

xcode:mac下编译软件必备。
python:我最喜欢的编程利器。
pip:方便安装第三方python包。
ruby:和python一样是语言中的战斗机。
homebrew:依赖ruby,方便安装卸载很多编程工具。
iterm2:增强终端。
github for mac:github官方出品的git客户端。
color Exploer:取色器。
go2shell:在finder中打开终端并转入当前目录。
snippets:代码片段收集工具。
navicat for mysql lite:老牌数据库管理工具。

浏览器

chrome:有诸多插件。

中文输入法

搜狗拼音:相比fit和QQ输入法,这个更适合我。

编辑器和IDE

textmate:神器一枚,由于dhh的推荐,路人皆知。
sublime text 2:类textmate编辑器,跨平台,支持中文,有取代textmate之势。
chocolat:类textmate编辑器,不过现在还是测试版。
pycharm:python编程IDE,是目前使用最顺手的一个。
coderunner:编程利器,功能比textmate稍逊,轻便且使用简单。
cssedit:编辑css专用。
coda 2:编辑html用。
mou:使用makedown语法,写文章专用。

办公套件

iwork09:包括keynote、pages、和numbers。
office 2011:微软的办公套件。

效率工具

evernote:免费版已够用,记录笔记,支持云同步。
everbox:类似dropbox,盛大云存储客户端。
google drive:google的云端硬盘。
mind note:思维导图工具。
alfred:快速启动工具,类似windows下launchy。

阅读器

chmox:阅读chm格式文件。
reeder:google reader客户端。
cappuccino:另一个reeder,目前测试中。
readlater:收集文章,待有空时慢慢看。
ocrkit:转换扫描版pdf成文字版。

多媒体

mplayerx:开源媒体播放器,通杀所有格式。
pptv网络电视:在线看电影。
vox:音频播放器,短小精悍。
diumoo:豆瓣电台客户端。
guitar pro:吉他六线谱编辑和播放软件,学吉他必备。
screenflow:录屏软件。

图形图像

skitch:简单图片处理,和evernote出自同一公司。
picasa:google出品的非常智能的图片库软件。
xee:看图软件。

虚拟机

vmware fusion:和windows下的vmware一样出名。

上传下载工具

迅雷:比windows下的迅雷简洁的多,支持bt和电驴。
sitesucker:下载整个网站。

系统工具

1password:密码管理必备。
cleanmymac:系统清理软件。
ccleaner:系统垃圾清理。
appfresh:系统软件更新。
day-o:替换系统时间工具。
memoryfree 2 :内存释放工具。
simonfree:网络工具。

即时通讯

qq:无法逃避的腾讯客户端。
ipmessenger:mac下的飞鸽传书。
macbo:新浪微博客户端。

其他

google earth:研究世界。

旧日读书时光

| Comments

最怀恋小时候的那些闲暇时光,世界充满了不可知,了解外界的窗口仅仅就是电视机,没有身处于时代洪流中的匆忙,得以慢慢的学习,那是何等的惬意啊,为了一点小知而洋洋得意,抓住什么书就了解什么,不管他是翻译晦涩的,还是文笔粗陋的,还是不明逻辑的,统统并收。那时看了很多其实很有意思,但今天决不会再花时间的书。
今天的时间总是不够用,似乎要把时间留给最重要的学问,最有用的技术,渐渐的反而看书的范围越来越窄,无法突破了。