mac上我最依赖的10个软件
按照习惯的依赖程度排名:
1. QuickSilver
对于我这个记性不好的懒人来说,这个绝对是NO.1, 可以说这是最万能的软件了, 从找歌,听音乐,打开iterm,网址簿, 快速email,文件加tag…. 无所不能!
2. Safari
3. Mail
上面这2个没什么可说的. Firefox3是个候选,但是习惯了Safari..
4. iTerm
虽然Leopard的term.app改进了不少,但是还是习惯iTerm,配合QS.
5. TextMate
吃饭的家伙. Eclipse太重了,不到万不得已是不开的.
6.QuickView
习惯了按下空格查看文件内容,就冲这个,我是不会再用Tiger了…
7. iWorks
比MS Office要强多了.
8. Parallels Desktop
比如网银之类还是需要在IE下进行的, 这时候只能用虚拟机了
9.IPMessenger(飞鸽)
局域网传送文件方便
10. Aduim/QQ for Mac
IM了,虽然我更喜欢用Email,不过有时候还是要上一下线的.
在MBP(Leopard)上快速搭建MogileFS 2.x测试环境
最初试验MogileFS好像是06年初了,从那开始一直看它的代码,去年作doggy的时候就加入了对MogileFS的支持,作为一个备选的Storage Provider实现. 但是一直没有投入生产环境中. 主要的原因是需求并不强烈, 还有就是其他同事并不熟悉,好在使用
Storage接口, 从FileSystem切换MogileFS也非常简单…
这几天放假,没有环境了,决定在自己的MacBookPro上搭建一下,在此记录一下,省得以后又忘了.
1. 安装MogileFS及其相关的CPAN模块
night$ sudo cpan -i BSD::Resource
night$ sudo cpan -i MogileFS::Client
night$ sudo cpan -i MogileFS::Server
night$ sudo cpan -i MogileFS::Utils
night$ sudo cpan -i MogileFS::Client::FilePaths
好了,必要的软件都安装完毕
BTW, 我是懒人,所以用cpan迅速解决一切,
虽然也可以直接从danga.com下载或者svn co, 不过, 有必要那么烦么…
2. 安装数据库
可以通过安装Store::Sqlit来作一个纯测试的环境,但是最好还是选择mysql
night$ mogdbsetup
按照提示修改数据库,或者干脆 mogdbsetup –yes
会生成一个mogilefs数据库.
3.配置tracker(mogilefsd)
建立测试环境:
mkdir -p /usr/local/mogilefs/conf
创建 /usr/local/mogilefs/conf/mogilefsd.conf, 内容如下:
#pidfile = /var/run/mogile/mogilefsd.pid
daemonize = 1
# Database settings
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
# You must insert your password here!
# db_pass = __PASSWORD__
# Network settings
conf_port = 7001
#listen = 127.0.0.1:7001,
# Storage
#
# UPDATE::原先老版本使用NFS,当前版本已经不再使用,可以忽略
# mog_root = /usr/local/mogilefs/mnt
# Plugins
#plugins = …
# Tuning knobs
query_jobs = 2
delete_jobs = 1
replicate_jobs = 1
monitor_jobs = 1
reaper_jobs = 1
#min_free_space = 100
#max_disk_age = 5
#node_timeout = 2
#old_repl_compat = 1
#default_mindevcount = 2
*_jobs用于定义各自工作线程数量, 上面是适合我的MBP的值,仅供测试而已.
把tracker启动起来
mogilefs -c /usr/local/mogilefs/etc/mogielfsd.conf
检查一下:
night$ mogadm check
Checking trackers…
127.0.0.1:7001 … OK
Checking hosts…
No devices found on tracker(s).
4. 配置存储节点(mogstored).
实际上mogilefs的存储节点本质是WebDAV(只不过最初是作为Perbal的wrapper),
因此Nginx,Lighttpd都可以作为存储节点.
还是记录一下mogstored的配置,其他如何配置网上很多:
mogstored的逻辑是host,device. 一个mostored服务对应一个host(逻辑上的),
所以你可以在同一台物理主机上通过监听不同的端口同一台物理主机上通过IP别名来实现不同的host.
下面是创建一个服务:
创建 /usr/local/mogilefs/etc/mogstored.conf
#pidfile = /var/run/mogile/mogstored.pid
daemonize = 1
# Network settings
httplisten = 127.0.0.1:7500
mgmtlisten = 127.0.0.1:7501
# Storage
docroot = /usr/local/mogilefs/mogdata
# Server type
# Perlbal is the default
#server = perlbal
# But lighttpd is supported too
#server = lighttpd
#serverbin = /usr/sbin/lighttpd
# Tuning knobs
#max_conns = 10000
#opt_iostat 1
启动节点服务
$ mkdir -p /usr/local/mogilefs/mogdata
$ mogstored -c etc/mogstored.conf
将存储节点追加到tracker, 命名为storage1
night$ mogadm host add storage1 –ip 127.0.0.1 –port=7500 –status=alive
night$ mogadm host list
storage1 [1]: alive
IP: 127.0.0.1:7500
上述输出表示节点已经被加入到tracker中.
现在,为存储节点增加存储设备device, 首先手动创建一个目录(生产环境下应该mount到一个独立的分区)
night$mkdir /usr/local/mogilefs/mogdata/dev1
添加到storage node:
night$ mogadm device add storage1 1 –status=alive
检查一下结果:
Macintosh-2:mogilefs night$ mogadm check
Checking trackers…
127.0.0.1:7001 … OK
Checking hosts…
[ 1] storage1 … OK
Checking devices…
host device size(G) used(G) free(G) use% ob state I/O%
—- ———— ———- ———- ———- —— ———- —–
[ 1] dev1 55.770 50.008 5.762 89.67% writeable 0.0
—- ———— ———- ———- ———- ——
total: 55.770 50.008 5.762 89.67%
这样,存储节点storage1就完成了, 为了测试复制,可以再启动一个节点,
通过修改etc/mogstored.conf 为: etc/mogstored2.conf
httplisten = 192.168.8.100:7500
mgmtlisten = 192.168.8.100:7501
# Storage
docroot = /usr/local/mogilefs/mogdata2
$ mogstored -c etc/mogstored2.conf
$ mogadm host add storage2 –ip 192.168.8.100 –port=7500 –status=alive
….
(为storage2添加device, id 从2 开始)
现在2个存储节点已经搭建好了, 它们之间可以实现自动复制.
测试一下实际的工作:
Macintosh-2:mogilefs night$ mogadm domain add test
Macintosh-2:mogilefs night$ mogadm domain list
domain class mindevcount
——————– ——————– ————-
test default 2
添加一个文件
mogtool –trackers=127.0.0.1:7001 –domain=test inject test.txt t
查看:
mogtool –trackers=127.0.0.1:7001 –domain=test extract t -
====================
完成.
////////////////////////////
UPDATE:
1.CPAN,DBI, DBD-Mysql 这些CPAN模块都要事先安装,不再赘述.
2.Device ID 是唯一的,一旦创建将无法删除,只能mark为dead. 所以,如果你某个磁盘坏了,你mark为dead, 后来又修好了,
那么你必须重新格式化并命名为新的device id, 不支持将device从dead变为alive.
Firefox3真是太棒了
升级到Leopard后就基本没有用过Firefox, 受不了它的速度和内存. 就算测试,也用Camino替代.
不过今天试装了下Firefox3.0RC2, 还真是让我大大吃惊了一下.
首先是速度, 页面渲染的速度和2相比真是有天壤之别, 甚至感觉比我现在用的Safari3.1还要快些.
其次, 界面改动很大, 和Leopard的界面统一了,但是感觉颜色的灰度还是稍微有一点点深,较为遗憾(Mac用户还是比较在意界面的统一性的).
那个神奇的地址栏, 用起来太爽了, 基本上不用去找书签栏了,因为它可以自动搜索你书签中相关的地址,和Quicksilver有的一拼. 此外很方面知道是否已经收藏,对于我这种记性不好的,真是方便.
现在,对我倒是个选择, 用Firefox3 还是Safari?
给ImageMagick加了lqr支持
给实验室的机器装ImageMagick, 由于需要试验一些新特性,就是想加入lqr的支持.
安装了liblqr,没啥. 但是在编译IM时候, 加入 –with-lqr, configure仍然无法识别.
于是,将/usr/local/lib/pkgconfig 加入PKG_CONFIG_PATH中, configure仍然
无法识别,可pkg-config能够正常显示参数. 怒了, 没工夫搭理了, 对configure强暴了一回:
在38348行,加入一下三行:
have_lqr=yes
LQR_CFLAGS=”-I/usr/local/include/lqr-1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include”
LQR_LIBS=”-L/lib -llqr-1 -lglib-2.0″
if test “$have_lqr” = ‘yes’; then
重新configure, PASS.
自己动手给gogle小朋友美容
6.1到了,昨天辣椒买了推子回来, 要给golge美容. 本来是她要给g剪毛的,不过没经验阿,
推了2下就下不了手了,于是我就接过这个烂摊子咯. 俗话说,没吃过猪肉还没见过猪跑么.
以前给gogle美容的时候也在一旁看过, 怎么剪的倒是有印象. 不过,刚开始的时候没有手感,
深一下浅一下的, 后来就走上正轨了. 折腾了3个小时,终于大功告成了, 看着还不赖呢.
今天辣椒带gogle去广场上转了一圈,还给g弄了个气球,就算是过节了呵呵.
不过,gogle的美容综合症又范了,整天坐卧不安, 早上竟然当我的面突然窜到我床上了…
看看我第一次给狗美容的成果,还有lp今天中午作的美餐:
Nginx上的Memcached应用改进
由于nginx的memcached module不支持压缩, 直接缓存页面, 非常浪费内存.
实验了2个方案:
1. 直接将压缩的数据输出,并添加一个header:Content-Encoding:deflate
按说这是效率最高的,不过,很遗憾,Safari和FF都可以正常显示页面,但是**** IE, 只能显示空白页面.
2. 取消PECL内置的COMPRESS, 手动使用PHP的gzcompress函数进行压缩,这样,nginx可以通过添加header,
直接输出memcached的内容,由浏览器自行解压.
缺点: 对于不支持gzip的客户端,将无法正确获得内容. 因此,最好还是判断一下客户端是否支持gzip.这样, 下面的方案是比较好的选择.
3. 还是老办法,用perl写了memcached的fastcgi, 独立运行. 使用 IO::Uncompress::AnyInflate 解压,
并输出结果. 这个还是不错的, 使用了独立的fastcgi server的形式, 效率不低. 而且只占用一个Memcached
链接, 我也作了简单的统计, 可以监控缓存的命中率.
我使用了Memcached::libmemcached 这个CPAN module , 它使用了libmemcached 这个最近最受关注
的库. 效率比传统的Client要高效.
几个注意事项:
1. 部署时注意, 为了使用error_page进行转发, 需要 在nginx相关配置中加入:
fastcgi_intercept_errors on;
默认是off,因此, fastcgi中的404等错误将不被nginx进行重新转发.
这是我用的配置mcached.conf:
fastcgi_pass unix:/tmp/nginx-mcached.socket;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
需要缓存的location:
location /v {
set $memcached_key $scheme://$host$request_uri;
include mcached.conf;
error_page 404 = /missing$request_uri;
}
在/missing 则重写到实际的后端去.
2. PHP PECL压缩时使用了deflate, 因此需要使用inflate进行解压,不可用gunzip, 为了方便,可以用
IO::Uncompress::AnyInflate , 这样可以自动使用相应的算法.