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é 效果 |
支持多用户配置 | * |
多语言支持 | * |
2011/11/23 ·
python
cx_Oracle 是Python的一个扩展模块,提供符合Python数据库API规范的Oracle访问支持,是Python下访问Oracle的利器,不过鉴于其版本众多,很多人在安装上就遇到了障碍,我这里简单记录一下。
最普适的方法就是编译安装了,官方有详尽的安装文档,我这里基本只是翻译。
准备
首先下载两个东西:
然后设置环境变量,最好写到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