使用 iTerm2 作为默认终端

2011/11/24 · mac

一直以来 Mac 默认的终端也蛮好用的,但是今天发现 SSH到远程服务器之后,vim无法正常的split分屏显示,让我很郁闷,于是就找到了iTerm2.

iTerm2是从iTerm的基础上开发的,只不过iTerm不再更新,所以这位George Nachman兄就接手继续做起来,修复了很多Bug,一天用下来还是蛮稳定的,而且功能非常强大,在此表示遥远的感谢:)

功能介绍

功能 介绍
窗口分割 支持横/竖/混合等,每个窗口保持一个独立session
全局热键 通过自定义热键的方式迅速切换到iTerm2
搜索 支持Mac风格的搜索条,Cmd-F可快速搜索当前页面,支持正则
自动完成 按Cmd-; 可以打开命令自动完成的下拉菜单
无鼠标复制 在搜索时,可按shift-tab或者tab左右扩展搜索内容并自动复制到剪切板,按Option-Enter直接将搜索匹配结果粘贴到命令行
历史复制 按Cmd-Shift-H可打开剪切板历史记录,甚至还可以将记录保存到磁盘
快照回放 按Cmd-Opt-B可打开快照记录,然后使用左右键来查看某个时间的命令结果快照,按Esq返回
丰富的配置 支持各种自定义快捷键、皮肤、透明度设置、窗口背景图片等
支持Lion全屏 *
支持256色 顺便说一句,某些服务器上可能不支持256色,导致SSH上去之后看不到颜色,此时只要在Prefences->Profiles->Terminal里设置一下普通的xterm就可以了
Unix风格 保持原汁原味Unix风格的操作习惯
颜色友好 启用Smart Cursor后,可以自动的改变光标块颜色使之与选中的文字颜色产生高对比,当你找不到光标时,甚至还可以按Cmd-/让光标突出显示
鼠标支持 *
支持Growl 通知 *
Exposé 效果 按Cmd-Opt-E 打开内置的Exposé 效果
支持多用户配置 *
多语言支持 *

cx_Oracle 编译安装及简单使用方法

2011/11/23 · python

cx_Oracle 是Python的一个扩展模块,提供符合Python数据库API规范的Oracle访问支持,是Python下访问Oracle的利器,不过鉴于其版本众多,很多人在安装上就遇到了障碍,我这里简单记录一下。
最普适的方法就是编译安装了,官方有详尽的安装文档,我这里基本只是翻译。

准备

首先下载两个东西:

  • cx_Oracle
  • Oracle Instant Client. Oracle官方提供的轻量客户端组件,需要同时下载 instantclient-linux-basic 和 instantclient-sdk-linux 并解压到同一目录

然后设置环境变量,最好写到profile文件里

export ORACLE_HOME=[你的解压目录]/instantclient_11_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

MAC OS X 下还需设置另一个环境变量

export DYLD_LIBRARY_PATH=$ORACLE_HOME

然后做一下软链

cd $ORACLE_HOME
ln -s libclntsh.so.x.x libclntsh.so

编译安装

接下来非常简单,进入你的cx_Oracle源码目录后执行以下两条语句就OK了

python setup.py build
python setup.py install

测试是否正常

$ python
Python 2.5.2 (r252:60911, Oct 25 2008, 19:37:28)
[GCC 4.1.2 (Gentoo 4.1.2 p1.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

没有异常的话就说明安装成功了。

简单的使用

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import cx_Oracle

try:
  db = cx_Oracle.connect('username','passwd','host:port/dsn')
  cursor=db.cursor()
  cursor.execute(sql)
  #查询
  for column, in cursor:#注意只有一列的时候也要后面加','来解包
    #do something
  #取一列
  row = cursor.fetchone()
  #带名字参数的查询
  cursor.execute(
    'select * from table where id = :id ',{'id':5,})
  #按位置参数的查询
  cursor.execute(
    'select * from table where id = :1',
    (id,))#注意只有一个参数时也要加','参数是元组

  cursor.close()
  db.close()
except cx_Oracle.DatabaseError, e:
  print e
  sys.exit(2)

最后,连接默认是没有设置autocommit的,更删改的话需要commit。

新博客安家

2011/11/22 · life

经过一番思想斗争,决定还是找个地方写点东西,用冯唐的话说,用文字打败时间:D

域名

照例在Godaddy上买的域名,本来想用自己其他的域名,后来想想还是用likang.me吧,幸好没被注册掉:)

过程中发现貌似Godaddy跟支付宝的合作结束了,网站上没有支付宝的付款选项了,只好刷了信用卡,在盗卡盛行的今天,这是我在第二个网站上直接填写信用卡信息付款(第一家是Apple的AppStore),心里还是有点不靠谱的感觉的=.=
注:好吧现在发现支付宝又神奇的出现在Godaddy上了

托管方案

这个过程真是曲折=.= 一开始是要用Godaddy提供的免费hosting + Wordpress的,况且使用Windows + IIS7的方案的话Wordpress上还没有广告,但是速度不理想,放弃。

于是跑去新浪的SAE(Sina App Engine),SAE做的还是不错的,提供的一系列分布式服务用起来都很方便,而且速度也不错。但是要命的是绑定域名的话需要提供备案信息:( 不是我不想备案,只是像我这样国内没有主机的备案起来实在是不可能的事。于是想想算了吧,还是另寻他处。
(BTW: SAE上有开发奖励,我决定做点东西赚赚云豆攒起来:D )

然后想起Github上是有Pages服务的,我就搜了一下有没有方便的工具来扩展这个看似简单的功能。结果发现我真是孤陋寡闻,竟然很早就已经有成熟的Jekyll和Octopress了,虽然暂时我对Ruby不感冒,但粗看之后我立即被这个简单强大优雅的东东给吸引了,而且Github还非常给力的支持域名绑定,于是我毫不犹豫的就动手把环境搭起来了:) 现在写博客只需要用markdown语法写纯文本就可以了,而且用Git还可以方便的做版本管理,很理想。

于是最终就是这个样子啦,Octopress + Github,万事俱备:D