2013年6月27日星期四

[转] Mac 中文件的 @ 权限(属性)

mac中文件的@权限(属性)

当我在看mac下的文件属性的时候,发现一件奇怪的事情, 就是有的文件权限最后会有个@符号. 这个我从没在linux下看到过, 想必有什么特殊的含义. (不过通过google找这个问题还是有点难度的)

类似:
-rw-r--r--@  1 yarco  staff    22369877  1 13  2010 Adium_1.3.10.dmg
-rw-r--r--@  1 yarco  staff    19386869  7 14 05:22 Firefox 3.6.7.dmg
-rw-r--r--@  1 yarco  staff     6384001  7 10 02:43 Growl-1.2.1.dmg
drwxr-xr-x   3 yarco  staff         102  7 21 22:50 MacPorts-1.9.1.pkg

最后找到一个帖子 forums.macosxhints.com/showthread.php 原来man ls里是有这个解释的(谁有空去读那么一大串文档哦...)
If the file or directory has extended
attributes, the permissions field printed by the -l option is followed by
a '@' character. Otherwise, if the file or directory has extended secu-
rity information, the permissions field printed by the -l option is fol-
lowed by a '+' character.
 
@指 该文件有扩展的属性
+指该目录有扩展的安全信息

macbook:Downloads yarco$ ls -l@
total 7636752
-rw-r--r--@  1 yarco  staff    22369877  1 13  2010 Adium_1.3.10.dmg
com.apple.diskimages.fsck            20 
com.apple.diskimages.recentcksum            79 
com.apple.metadata:kMDItemWhereFroms           125 
com.apple.quarantine            74 
-rw-r--r--@  1 yarco  staff    19386869  7 14 05:22 Firefox 3.6.7.dmg
com.apple.diskimages.fsck            20 
com.apple.diskimages.recentcksum            79 
com.apple.metadata:kMDItemWhereFroms           242 
com.apple.quarantine            74 
-rw-r--r--@  1 yarco  staff     6384001  7 10 02:43 Growl-1.2.1.dmg
com.apple.diskimages.fsck            20 
com.apple.diskimages.recentcksum            80 
com.apple.metadata:kMDItemWhereFroms            88 
com.apple.quarantine            74 
drwxr-xr-x   3 yarco  staff         102  7 21 22:50 MacPorts-1.9.1.pkg

这下看清楚了吧...

也刻意通过xattr查看更多细节
$ xattr PhysicsEditor-1.0.10.dmg
com.apple.diskimages.fsck
com.apple.diskimages.recentcksum
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine

[转] Objective C 类方法

Objective C 类方法

一,Objective C  的类方法(class method),即 static 方法,是用 + 修饰的方法。类方法是属于类对象的,所以无需创建类的实例对象我们就可以直接使用它们。使用形式为:
[ClassName classMethod];
在这里 ClassName 代表的就是一个类对象,而不是作为一种类型。类名只有出现在接收消息的表达式中才代表一个类对象,其他情况下都表示一种类型。
二,类方法可以继承自基类,就像普通的类成员方法一样。有一个特别的类方法 + (void) initialize,在类接收到任何消息之前,运行时系统会向类对象发送这个消息,因此我们可以在这个函数里对类对象做一些初始化,比如初始化 static 变量等等。在 NSObject 中,该方法什么也不做。
三,当类对象接收到一个消息却没有相应的类方法响应时,运行时系统会去检查是否存在一个 root (通常是 NSObject)的实例方法能够响应,如果能够响应就会执行 root 的成员方法来响应。只有在这种情况下,类对象才能够执行实例方法!再次声明类对象执行实例方法的条件:
1,类对象没有相应的类方法来响应某个发送至它的消息;
2,root 类定义了能够响应这个消息的实例方法。
四,类方法的返回值类型默认为 id,也能接受不定参数,这些都与实例方法是一致的。例如:
+ makeGroup:group, ...;
五,在类方法中使用 self 和 super,这时 self 和 super 指代的都是类对象,而非实例对象,这一点要特别注意。推荐的工厂方法写法如下,在这里使用 self class 而不是直接写类名,是为了应对子类调用该函数的情况。
+ (id) getInstance
{
    id instance = [[[self class] alloc] init];
    return [instance autorelease];
}

2013年6月21日星期五

[转] Mac OS X 系统上类似 ldd 的工具

Mac OS X系统上类似 ldd 的工具

ldd是用来查看一个可执行文件中包括对哪些共享库的调用,但是在MAC OX X下似乎没有ldd,取而代之的是另一个叫otool的命令,使用该命令的-L命令可以实现ldd的功能。
ldd on Mac OS X
"ldd" in various flavors of Unix is used to check which dynamic libraries are used by the executable. There is no "ldd" command in Mac OS X (Convenient, huh?). Instead, Apple provides something that is talled "otool", which has many different options. One of them is "-L", which displays the linked libraries:
sparrow (13:18)$ otool -L h3dpost.x 
h3dpost.x:
/opt/local/lib/libmpi.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.3)
/opt/local/lib/libmpi_f77.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
/opt/local/lib/libopen-rte.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
/opt/local/lib/libopen-pal.0.dylib (compatibility version 1.0.0, current version 1.0.0) 
/usr/local/lib/libgfortran.3.dylib (compatibility version 4.0.0, current version 4.0.0) 
/usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
from: http://schumakov.info/howto-osx.php

2013年6月19日星期三

[转] 为 git 实现 'svn info' 的功能

为 git 实现 'svn info' 的功能

git没有类似svn中的'svn info'功能, 自己写一个脚本来实现这样的功能:
#!/bin/sh

# Find base of git directory
while [ ! -d .git ] && [ ! `pwd` = "/" ]; do cd ..; done

# Show various information about this git directory
if [ -d .git ]; then
    echo "== Remote URL: `git remote -v`"

    echo "== Remote Branches: "
    git branch -r
    echo
    echo "== Local Branches:"
    git branch
    echo
    echo "== Configuration (.git/config)"
    cat .git/config
    echo
    echo "== Most Recent Commit"
    git --no-pager log --max-count=1
    echo
    echo "Type 'git log&' for more commits, or 'git show' for full commit details."
else
    echo "Not a git repository."
fi
运行效果如下:
== Remote URL: origin https://danshan@bitbucket.org/danshan/haidaofm.git (fetch)
origin https://danshan@bitbucket.org/danshan/haidaofm.git (push)
== Remote Branches:
origin/HEAD -> origin/master
origin/master

== Local Branches:
* master

== Configuration (.git/config)
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://danshan@bitbucket.org/danshan/haidaofm.git
[branch "master"]
remote = origin
merge = refs/heads/master

== Most Recent Commit
commit 843423895f429aa6d78be1b2d26fb93472c64548
Author: Dan Shan
Date: Mon Oct 15 07:12:33 2012 +0400

webapi
[bugfix]
1. fix some import error of java

Type 'git log' for more commits, or 'git show' for full commit details.
下载: http://www.shanhh.com/assets/post/2012/10/gitinfo.zip

2013年6月18日星期二

[转] 让 Vim 查找字符忽略大小写

让Vim查找字符忽略大小写

Vim默认是对大小写敏感的,下面是让Vim忽略大小写的几种方法:

:set ignorecase

再查找 "include",现在它将匹配 "Include","INCLUDE" 和 "InClUDe"
:set noignorecase

让我们保留这个设定,并查找 "INCLUDE"。它匹配的文本就跟查找 "include" 时一模一
样。现在我们设定 'smartcase' 选项:
 :set ignorecase smartcase

如果你采用的模式里至少有一个大写字母,查找就成了大小写敏感的。可以这样理解,你
不必键入大写字母,也能查找到含有大写字母的词,所以,你若键入大写字母,必然是因
为你要大小写敏感的匹配。聪明!
    设定了这两个选项,你会找到以下匹配:
    模式                    匹配  
       word                 word、Word、WORD、WoRd 等。
       Word                 Word
       WORD                 WORD
       WoRd                 WoRd
单个模式里的大小写

如果你仅想忽略一个特定的模式里的大小写,那么,在模式前添加 "\c" 字符串就行了。
添加 "\C" 将使该模式的匹配大小写敏感。这排除了 'ignorecase' 和 'smartcase' 选
项的影响,当 "\c" 或 "\C" 起作用时,它们设成什么值无关紧要。

       模式                    匹配  
       \Cword                  word
       \CWord                  Word
       \cword                  word,Word,WORD,WoRd,等。
       \cWord                  word,Word,WORD,WoRd,等。

采用 "\c" 和 "\C" 的好处在于它粘附在所用的模式上。因此,重复查找历史记录里的某
个模式会产生同样的结果。'ignorecase' 或 'smartcase' 是否更改不影响结果。

2013年6月14日星期五

[总结] 常用文件重定向命令

标准输入,输出和错误
---------------------------------
文件文件                描述符
---------------------------------
输入文件—标准输入       0
输出文件—标准输出       1
错误输出文件—标准错误   2
---------------------------------

常用文件重定向命令
-------------------------------------------------
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 command 命令以 filename 文件作为标准输入,以 filename2 文件作为标准输出
command < filename command 命令以 filename 文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到 delimiter 分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符 m 中
command <&- 关闭标准输入
--------------------------------------------------
*注:在使用 sort 命令的时候(或其他含有相似输入文件参数的命令),重定向符号一定要离开 sort 命令两个空格,否则该命令会把它当作输入文件.
如果想创建一个长度为0的空文件,可以用 '>filename':
$ >myfile

2013年6月7日星期五

[转] objective-c 中 nonatomic的作用

objective-c中nonatomic的作用

它要与@synthesize一起使用才有意义。
atomic的意思就是setter/getter这个函数是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样。
nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。

比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态,这样取到的东西会有问题。

如果不需要多线程支持的话,当然nonatomic就够用了,另外由于不涉及锁操作,所以它执行相对快点