By admin on July 22, 2010
之前看<<Little Scheme>>的时候使用的是DrScheme (现在已经改名为DrRacket),这个环境中带有一个REPL和一个拥有类似Emacs键绑定的编辑器,但是使用起来感觉还是没有Emacs爽快.好在Emacs中对MIT/GNU Scheme提供了良好的支持,通过xscheme能够在scheme-mode中编辑和执行scheme程序,下面将介绍如何在10.6上编译MIT/GNU Scheme和Emacs的相关设置.
1. 首先你需要下载MIT/GNU Scheme的源代码,这里需要选择”Portable C”版本的源代码下载,目前最新的版本是9.0.1.虽然官方网站上提供了Mac OS X binary的文件下载,不过那只以app的形式打包,并且实在10.5上编译的,没有64位支持.
2. 下载得到mit-scheme-c-9.0.1.tar.gz文件之后就可以开始我们的编译了:
$ cd mit-scheme-c-9.0.1/src
$ CFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" sh etc/make-liarc.sh
注意我们是要编译64位版本,所以需要制定CPU架构为x86_64,执行上面的命令后编译就会开始了,这个过程比较漫长,大约需要一个小时左右.
3. 当编译结束后,我们还需要执行一个配置脚本:
4. 这样,MIT/GNU Scheme的编译就完成了,接下来要对Emacs进行配置.我是用的是Cocoa Emacs 23.2,自带了xscheme,所以不用再安装,如果你缺少这个文件可以到
这里下载xscheme.elc文件,然后放到
/Applications/Emacs.app/Contents/Resources/lisp/文件夹下(如果你是在命令行下使用Emacs,请放到/usr/share/emacs/22.1/lisp/文件夹下,这里是Mac自带的Emacs的位置,具体根据你安装的位置而定).然后,在你的Emacs配置文件中加入下面的语句:
保存后重启Emacs或者更新配置文件.
5. 因为我们编译的时候Scheme是安装在/usr/local/bin/目录下面,所以Emacs可能会提示找不到scheme,解决的办法是建立一个符号链接到/usr/bin/目录下:
ln -s /usr/local/bin/scheme /usr/bin/
之后打开Emacs,运行M-x run-scheme 就可以打开一个Scheme的REPL,你可以输入语句然后通过C-x C-e快捷键对表达式进行求值,结果会以注释的形式显示在语句下方.
这里列举了一些xscheme中常用的键绑定,同时这些绑定在scheme-mode中也可以使用,当你编辑一个.scm文件的时候Emacs将会进入到scheme-mode.
Posted in Macintosh, Programming | Tagged emacs, scheme
By admin on May 22, 2010
最近经常需要编译一些开源的第三方的库,但是由于在10.6下默认都是编译为x86_64架构的二进制,所以在与某些旧代码一起使用是会出现链接错误,这就就需要将这些库编译为Universal-binary.
首先要修改几个环境变量:
export CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.6u.sdk \
-arch i386 -arch x86_64 -arch ppc"
export LDFLAGS="-arch i386 -arch x86_64 -arch ppc"
接着在执行配置脚本时需要加入–disable-dependency-tracking, 因为gcc的依赖检查在使用多个-arch标帜时发生冲突:
./configure --disable-dependency-tracking
然后直接make & make install就行了.你可以使用file命令查看编译结果是否支持多架构:
$ file libjpeg.dylib
libjpeg.dylib: Mach-O universal binary with 3 architectures
libjpeg.dylib (for architecture x86_64):Mach-O 64-bit dynamically linked shared library x86_64
libjpeg.dylib (for architecture i386):Mach-O dynamically linked shared library i386
libjpeg.dylib (for architecture ppc7400):Mach-O dynamically linked shared library ppc
显然这样子每次编译都进行配置十分麻烦,你可以安装ccub这个工具,安装后以后都将默认编译为Universal-binary,具体使用方法请参考源代码里面的README文件.
Posted in Macintosh | Tagged compile, Mac
By admin on May 1, 2010
去掉打开从网上下载的html文件时的安全提示
在使用Xcode的文档的时候有一个很不方便的地方就是每次只能打开一个文档,带来很多的不便,浏览体验也不佳,尤其是不支持Tab标签,所以我使用Launchbar来进行关键词的查找,然后在浏览器中打开。一来Launchbar的文档搜索速度很快,二来在浏览其中可以同时打开几个文档进行浏览,十分方便。
但是有一个问题:
由于苹果的文档是保存为HTML格式的,所以在浏览器打开的时候会弹出一个对话框让你确认是否打开,十分烦人。这里提供一个解决的办法:
首先建立一个名为com.apple.DownloadAccessment的Plist文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSRiskCategorySafe</key>
<dict>
<key>LSRiskCategoryContentTypes</key>
<array>
<string>public.html</string>
<string>public.xml</string>
</array>
<key>LSRiskCategoryExtensions</key>
<array>
<string>xhtml</string>
</array>
</dict>
</dict>
</plist>
然后,将文件保存到~/Library/Preferences文件夹中即可,其中的:
<array>
<string>public.html</string>
<string>public.xml</string>
</array>
是你想要解除安全警告的文件类型,你可以自行添加想要支持的类型到里面。
Posted in Macintosh | Tagged Mac, tips
By admin on April 3, 2010
要提高在Mac上的工作效率就要少用鼠标多用快捷键,但是对于刚接触到Mac的人来说,要记忆这些快捷键可需要花费一点的时间,我们可以从使用频率最高的操作开始(如复制、粘贴、删除、取消、重做等等)使用对应的快捷键,因为使用多所以记得也快,之后在慢慢去记忆一些使用频率低一点的快捷键,最后你还可以自定义快捷键(一般在SystemPreference->Keyboard->KeyboardShotcuts里设置,不过要注意快捷键冲突)。
那么,要怎样查找快捷键呢,到各个程序点菜单查看显然没效率,这里介绍一个很好用的Dashboard Widget—xCuts,它能提供以关键自搜索、及各种分类查找快捷键,安装后只需F4打开Dashboard就可以在xCut查找了,非常方便哦!

P.S.:要将键盘操作的的优势发挥到极致,还需要安装Mac上的神器:QuickSilver。它的功能非常强大,能让你通过键盘做很多神奇的事情(文件操作,文本操作,打开程序,定时提醒,发送邮件,关机,重启,执行脚本,播放音乐,查单词。。。),大家可以到网上搜索相关的视频领略一下。
Posted in Macintosh | Tagged Mac, widget
By admin on February 28, 2010
在使用C语言中,由于运算符优先级而引发的错误既常见又难以发觉。我们常武断地使用了错误的优先级,导致常常是找到了出错的表达式却还是不得其解。通常避免出现这种错误的方法是使用括号来确定其优先级,但是,对于比较长的表达式,加上括号后会导致其难以阅读。所以,好好地记忆一下运算符的优先级就有非常有必要了。你或许会问,那么多的运算符,而且还要分成十几个优先级,还有运算符结合的方向,怎么记啊?既然要记忆的内容多,那么记忆的方法就很重要了,下面就介绍一种不错的记忆C语言运算符优先级的方法:
首先,我们把他们由高到低分成15个级别,然后再由高到底逐个级别进行分析,寻找其间的规律:
1. 先来看优先级最高的一组,这组运算符号的特点是它们中的大部分都不是正真意义上的运算符,它们分别是:
其中的自增(++)和自减(–)都是后缀运算符。
2. 第二组的成员是剩下来所有的一元运算符,它们分别是:
++, --, +, -, ~, !, *, &, (type), sizeof
其中的++于–都是前缀运算符。另外这一组的运算符都是右结合的。
3. 一元运算符之后就剩下二元运算符了,而二元运算符中优先级中最高的就是算术运算符这一类,所以第三组是:
4. 可以由第3组推断得出第四组是:
5. 级别次于算术运算符的是位移运算符,所以这一组的成员是:
6. 接下来这一类就是关系运算符了,第6组的成员有:
7. 虽然都是关系运算符,但是
优先级要低一些,这样我没就可以写出诸如:
这样的判别式。
8. 次于关系运算符的是二元的位运算符,一共有三个,把它们分为三个组,这一组是:
9. 然后是
10.最后是
11.接着就是逻辑运算符这一类了,只有两个,分成两组,这组是:
12.然后
13.二元的运算符之后就好似三元运算符了,C语言中只有一个:
14.级别倒数第二高的是那些赋值运算符了,有很多:
=, +=, -=, *=, /=, ^=, %=, &=,|=, <<=, >>=
15.最后是优先级最低的运算符:
遍历了15个级别之后,让我们再来总结一下。其中我们可以看出这样两个规律:
规律一、按照操作数个数来区分,一元运算符高于二元运算符,二元运算符高于三元运算符;
规律二、按照运算符的作用来区分,级别最高的是那些不是严格意义上的运算符,次之是算术运算符,位移运算符,关系运算符,位运算符,逻辑运算符,赋值运算符。
此外还有两特别的地方需要注意:
一、同为关系运算符,但==和!=的级别低于其它四个;
二、第2组与第13组的操作符是右结合的,其它的都为左结合;
通过分类我们大大减少了需要记忆的内容,遇到使用操作符的时候,我们只需想想它们是什么类型的运算符就可以确定它们之间的相对优先级,从而避免一些不必要的错误。
Posted in Programming | Tagged C, precedences
By admin on February 20, 2010
为了方便使用Vim阅读源代码,Tag List 这个Vim插件不可或缺。这是一个用来浏览源代码的Vim插件,使用它我们可以概览源代码的结构并在各个源文件中跳转浏览,非常方便。
Tag List插件需要Ctags这个程序的支持(动态生成tag file),Ctags 是一个用来为源文件中的标识符(如变量、函数、类成员、宏定义等)创建索引文件(tag file)的程序。这些索引让我们能够快速便利地在编辑器或其它工具中定位到指定标识符的定义。最初的Ctags由Ken Arnold编写并首先出现在BSD Unix中,现在大多数的Unix-like系统中都已经内置了这个工具,当然,也包括了Mac OS X 。
然而,系统自带的Ctags功能比较简单,支持的语言也少(如不支持C++、Java等语言),所以推荐安装更强大的Exuberant Ctags。Exuberant Ctags最初由Darren Hiebert编写并随Vim发布,但在Vim6时独立出来为一个项目,它提供了对更多的编程语言(支持多达41种语言,并可以添加自定义语言),同时兼容原始Ctags的索引文件格式,除此之外很多的Vim插件也只支持Exuberant Ctags,所以最好把它装上。
接下来我们在Mac下编译安装Exuberant Ctags:
首先到官方网站下载Exuberant Ctags的源代码,最新版本是5.8。
接着解压到本地并进入文件夹,确保你的Mac上面已经安装了XCode之后,就可以开始编译安装Exuberant Ctags:
./configure
make
sudo make install
根据这几个简单的步骤,Exuberant Ctags就会被安装在/usr/local/目录下了,但是由于系统中原先已经内置了Ctags,如果没有将/usr/local/bin添加到系统路径中的话,默认执行的是/usr/bin/ctags,可以在命令行中执行:
如果返回的不是/usr/local/bin/ctags,那么就需要在~目录下的.profile文件中加入以下语句:
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
然后命令行中执行:
或者直接在~/.vimrc中加入以下配置语句:
let Tlist_Ctags_Cmd="/usr/local/bin/ctags"
不过还是推荐第一种做法,因为通常用户自行安装的软件安装到/usr/local目录下会比较合适,这样做的好处可以参考这篇文章,所以不妨先把路径加到$PATH变量中。
Exuberant Ctags安装完毕之后就可以安装Tag List插件了,在官方网站上下载Tag List然后解压,将plugin文件夹中的taglist.vim复制到~/.vim/plugin/中,将doc文件夹中的taglist.txt复制到~/.vim/doc/中,如果~目录下没有对应的文件夹请自行创建。
最后,处理Tag List的帮助文件,先命令行进入~/.vim/doc文件夹,然后启动Vim,在Vim中执行(注意命令中的”.”):
安装完毕!接下来就是对Tag List进行配置了,Tag List提供了很多的配置参数,用户可以根据自己的使用习惯和需要在Vim的配置文件中进行设置,查看详细的帮助信息可以在Vim中执行:
下面列举一些常用的配置:
" Configure the Tag List plugin
nnoremap :TlistToggle
let Tlist_Auto_Open=0 " Let the tag list open automatically
let Tlist_Auto_Update " Update the tag list automatically
let Tlist_Compact_Format=1 " Show small menu
let Tlist_Ctags_Cmd='ctags' " Location of ctags
let Tlist_Enable_Fold_Column=0 "do show folding tree
let Tlist_Process_File_Always=1 " Always process the source file
let Tlist_Show_One_File=1 " Only show the tag list of current file
let Tlist_Exist_OnlyWindow=1 " If you are the last, kill yourself
let Tlist_File_Fold_Auto_Close=0 " Fold closed other trees
let Tlist_Sort_Type="name" " Order by name
let Tlist_WinWidth=40 " Set the window 40 cols wide.
let Tlist_Close_On_Select=1 " Close the list when a item is selected
/pre>
Posted in Programming | Tagged ctags, plugin, vim
Recent Comments