Why Mac OS X is great than Windows

本文豆瓣讨论请猛击此处

为什么Mac OS X Mountain Lion比Windows伟大?如果你拥有一台iPhone和一台Mac笔记本,还有一台Apple TV,并且Mac笔记本中运行的是Mac OS X Mountain Lion,你会明白什么叫硬件、软件一体化的解决方案,你会明白原来生活中所有需要的电子产品能够提供的辅助功能,这一套设备就全部提供了,你会明白为什么说Mac OS X比Windows伟大。

在Mountain Lion没有推出之前,很多人说这样一个Lion加强版怎么还要再收费100多人民币呢?也许Mountain Lion确实是Lion的升级版,但是这个升级版却可以说是划时代的,它几乎全面打通了Mac OS X和iOS的交互,在这个版本之后,Apple的Mac OS X操作系统真正地作到了比Windows伟大。

Notes用于记事,Reminders用于备忘和计划,iWorks用于企业文档,TextEdit和Preivew用于普通文本文件和图片的浏览,Notification Center集成了多种社会化软件的功能,iTunes用于iOS软件的下载安装,App Store用于Mac OS X的软件下载安装,Game Center用于那些游戏是生活一部分的人的交互,而这一切都以iCloud作为云服务的支撑,只需要在系统中创建一个Apple ID。这种深入到骨髓的云化在Mac OS X Mountain Lion中表现的淋漓尽致。

如果你只有一个Apple产品,这种遍布系统各个角落的云化可能并不能让你有深刻的体验,但是如果你拥有多个产品,不需要太多,一部Mac笔记本,一个iPhone,一台Apple TV(当然你还需要一个真正的电视),一个人的生活中所有需要的与电子产品相关的娱乐(比较基本的娱乐)以及一个人的工作中所有需要的与电子产品相关的硬件软件,就可以完全搞定了。

我并不知道最终的Windows 8会是什么样,但是至少从测试版中我只发现不过是一个加了Metro样式壳子的Windows 7,面对山狮,Win8毫无胜算。

当人们意识到Windows系统已不再是稳当的龙头老大,不再具备完全无法撼动的优势时,没有人能够预测到怎样的市场力量将会被释放出来。

Python for the Oracle DBA on Mac OS X Lion (1)

作为一个技术人员,不学习一门编程语言,人生是不完整的。
是Shell是Perl还是Python,哪个简单哪个好用,哪个更适合Oracle DBA,这不是本文的范围,俗话说,萝卜青菜,各有所爱。

Mac OS X中自带Python(实际上也自带Shell和Perl),在Lion之后,由于64bit Oracle客户端无法在Mac中正常运行,导致一系列的麻烦。在Python中连接Oracle数据库,通常是使用cx_Oracle扩展模块。如果是Windows或者CentOS/Redhat/OEL Linux可以直接在cx-oracle.sourceforge.net下载相应的安装文件,但是对于Mac而言,却必须下载源码,自行编译。需要解决64bit问题和Oracle Instant Client配置问题。

文本大部分内容参考Andy Chan的Tutorial: How to Install Python Oracle Module “cx_Oracle” on Mac OS X Lion

在作一切操作之前,请先确认已经安装了XCode,并且安装了Command Line Tools,否则会在最后编译安装cx_Oracle的时候报错:unable to execute llvm-gcc-4.2: No such file or directory

1. 安装Oracle Instant Client,由于众所周知的64bit客户端在Mac OS X Lion中回发生“Segmentation fault: 11”的错误,因此必须下载32bit版本。
编译cx_Oracle需要下载如下图的两个安装文件,不过实际上我是除了Basic Lite之外都下载安装了。具体安装步骤及其它设置可以参看之前我的文章:How to use Oracle Instant Client in Mac OS X Lion

2. Oracle Instant Client的安装实际上就是解压,然后将生成的目录放在$PATH环境变量中,我将解压后的目录放在:/Applications/Utilities/instantclient,目录中的内容如下:

bogon:instantclient Kamus$ ls -l
total 204152
-rw-r--r--@  1 Kamus  staff       278 Apr  1  2009 BASIC_README
-rw-r--r--@  1 Kamus  staff       276 Apr  1  2009 JDBC_README
-rw-r--r--@  1 Kamus  staff       282 Apr  1  2009 SQLPLUS_README
drwxr-xr-x   3 Kamus  admin       102 Aug  9  2011 bin
-rw-r--r--@  1 Kamus  staff   1609607 Feb  2  2008 classes12.jar
-rwxr-xr-x@  1 Kamus  staff     30556 Apr  1  2009 genezi
-rwxr-xr-x@  1 Kamus  staff      1555 Aug  9  2011 glogin.sql
drwxr-xr-x  13 Kamus  admin       442 Jul 22 01:38 lib
lrwxr-xr-x   1 Kamus  admin        20 Jul 22 01:38 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff  21537536 Mar 31  2009 libclntsh.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff     31788 Mar 25  2009 libheteroxa10.dylib
-rwxr-xr-x@  1 Kamus  staff     31788 Mar 25  2009 libheteroxa10.jnilib
-rwxr-xr-x@  1 Kamus  staff   1683924 Feb 11  2009 libnnz10.dylib
-rwxr-xr-x@  1 Kamus  staff   1142284 Feb 11  2009 libocci.dylib.10.1
-rwxr-xr-x@  1 Kamus  staff  72626824 Apr  1  2009 libociei.dylib
-rwxr-xr-x@  1 Kamus  staff    106184 Mar 25  2009 libocijdbc10.dylib
-rwxr-xr-x@  1 Kamus  staff    106184 Mar 25  2009 libocijdbc10.jnilib
-rwxr-xr-x@  1 Kamus  staff    933744 Mar 25  2009 libsqlplus.dylib
-rwxr-xr-x@  1 Kamus  staff   1442316 Feb 11  2009 libsqlplusic.dylib
drwxr-xr-x   3 Kamus  admin       102 Jul 30  2011 network
-rw-r--r--@  1 Kamus  staff   1555682 Feb  2  2008 ojdbc14.jar
-rw-r--r--@  1 Kamus  staff   1646178 Jan 23  2008 orai18n.jar
drwxr-xr-x@  7 Kamus  admin       238 Apr  1  2009 sdk
drwxr-xr-x   3 Kamus  admin       102 Aug  9  2011 sqlplus

其中需要注意的是:
1) libclntsh.dylib是需要手工创建的链接。

ln -s libclntsh.dylib.10.1 libclntsh.dylib

2) lib目录,在默认解压以后,没有该目录,需要手工创建,然后将所有lib*复制到该目录中。否则在安装cx_Oracle的时候会报错:无法找到正确的ORACLE_HOME。我的lib目录中文件列表如下:

bogon:instantclient Kamus$ ls -l lib
total 194656
lrwxr-xr-x  1 Kamus  admin        20 Jul 22 01:38 libclntsh.dylib -> libclntsh.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin  21537536 Jul 22 01:36 libclntsh.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin     31788 Jul 22 01:36 libheteroxa10.dylib
-rwxr-xr-x@ 1 Kamus  admin     31788 Jul 22 01:36 libheteroxa10.jnilib
-rwxr-xr-x@ 1 Kamus  admin   1683924 Jul 22 01:36 libnnz10.dylib
-rwxr-xr-x@ 1 Kamus  admin   1142284 Jul 22 01:36 libocci.dylib.10.1
-rwxr-xr-x@ 1 Kamus  admin  72626824 Jul 22 01:36 libociei.dylib
-rwxr-xr-x@ 1 Kamus  admin    106184 Jul 22 01:36 libocijdbc10.dylib
-rwxr-xr-x@ 1 Kamus  admin    106184 Jul 22 01:36 libocijdbc10.jnilib
-rwxr-xr-x@ 1 Kamus  admin    933744 Jul 22 01:36 libsqlplus.dylib
-rwxr-xr-x@ 1 Kamus  admin   1442316 Jul 22 01:36 libsqlplusic.dylib

3. 修改环境变量,将以下行添加到~/.bash_profile文件中。

export ORACLE_HOME=/Applications/Utilities/instantclient
export LD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export SQLPATH=$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME/bin
#for cx_Oracle,这是必须的,强制Python使用32位版本
export VERSIONER_PYTHON_PREFER_32_BIT=yes 

4. 启动新的Terminal窗口,先安装pip,pip是Python的包管理软件,使用pip可以方便地从网络上直接安装需要的Python模块。

sudo easy_install pip

5. 安装cx_Oracle

sudo pip install cx_Oracle

安装过程中产生的类似如下这些警告,可以忽略:

/Applications/Utilities/instantclient/sdk/include/nzt.h:2746: warning: function declaration isn’t a prototype
......
Connection.c:283: warning: implicit conversion shortens 64-bit value into a 32-bit value
......

最终显示如下信息表示安装成功:

Successfully installed cx-Oracle

6. 最后测试一下cx_Oracle是否工作正常。具体语法参看:cx_Oracle 5.1.2 documentation

bogon:~ Kamus$ python
Python 2.7.1 (r271:86832, Aug  5 2011, 03:30:24) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from cx_Oracle import connect
>>> conn=connect('kamus/oracle@www.enmotech.com:1521/orcl')
>>> curs = conn.cursor()
>>> curs.execute("select * from v$version")
<__builtin__.OracleCursor on >
>>> rows = curs.fetchall()
##以下报错是Python语法对于强制代码缩进的体现,如果for循环中的语句开头没有缩进,则会报错。
>>> for i in range(len(rows)):
... print rows[i][0]
  File "", line 2
    print rows[i][0]
        ^
IndentationError: expected an indented block 
##在print前增加两个空格即可
>>> for i in range(len(rows)):
...   print rows[i][0]
... 
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE	11.2.0.3.0	Production
TNS for Solaris: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production