• 2014-10-15

    Mac 下创建隐藏用户

    Views: 11299 | No Comments

    Mac 下创建隐藏用户, 例如 nobody, nginx, mysql 用户等等, 这些是 Apache, Nginx, Mysql, PHP-fpm 等软件要用到的. 但是, 这些用户又不想它能登录系统.

    sudo dscl . create /Groups/nginx PrimaryGroupID 390
    sudo dscl . create /Users/nginx UniqueID 390
    sudo dscl . create /Users/nginx PrimaryGroupID 390
    sudo dscl . create /Users/nginx UserShell /bin/false
    sudo dscl . create /Users/nginx RealName nginx
    sudo dscl . create /Users/nginx NFSHomeDirectory /dev/null
    sudo dscl . create /Groups/nginx GroupMembership nginx
    
    Posted by ideawu at 2014-10-15 14:49:28
  • 2014-02-13

    用 QuickTime Player 在 Mac 下录制屏幕

    Views: 12775 | 1 Comment

    用 Windows 的朋友可能会遇到过到处找盗版软件来录制屏幕操作经历. 对于 Mac 用户, OS X 自带的 QuickTime Player 就是一个非常棒的屏幕录制软件, 而且功能强大!

    QuickTime Player 可以录制屏幕的操作, 还可以录制你用鼠标划出来的任何一个矩形区域.

    使用方法很简单:

    1. 启动 QuickTime Player
    2. 从"文件(File)"菜单时选择"新建屏幕录制(New Screen Recording)".
    3. 然后会在屏幕正中央弹出一个浮云的提示条, 上面提示你怎么开始录制.
    4. 你可以直接单击鼠标, 然后就开始录制整个全屏了. 录完后点击顶部图标区域的一个按钮结束. 或者, 你用鼠标在屏幕上拖曳划出一个矩形区域, 只录制这个区域内的画面.

    Posted by ideawu at 2014-02-13 21:37:44
  • 2013-09-27

    Mac下改变文件关联(打开方式)的方法

    Views: 29034 | 6 Comments

    苹果的 Mac 操作系统不允许程序主动地修改文件的打开方式, 只能一种一种后缀名地修改. 下面以 Tovi(Mac 下的看图软件)为例.

    1. 打开 Finder. 如果你想修改 .jpg 文件的打开方式, 找到一个 .jpg 文件.

    2. 右键点击该文件, 从菜单中选择"显示简介(Get Info)"

    3. 从简介窗口中的"Open With..."区域内的下拉菜单中选中"Tovi.app", 然后点击"全部改变(Change All)".

    Posted by ideawu at 2013-09-27 11:13:15 Tags:
  • 2013-06-12

    遍历NSString每一个字符的正确方式!

    Views: 29142 | No Comments

    最近在处理Cocoa NSString时, 遇到一些字符编码的问题, 从而引出一个遍历NSString每一个字符的"正确"方式! 很有趣.

    NSString是UTF-16编码的, 也就是16位的unichar字符的序列. 所以, 一般遍历其每一个字符的方法就是:

    for(int i=0; i<str.length; i++){
        unichar ch = [str characterAtIndex: i];
    }
    

    但是, 我们平常书写的字符, 并不全部都是用唯一的一个16位字符来表示, 而是有一部分用两个16位字符来表示, 这就是surrogate pairs的概念. 如果还是用上面的方法遍历字符串, 就会出现"断字". 例如图中这个Apple Color Emoji的"THUMBS UP SIGN"字符, 其实是用2个16位unichar来表示, 它的Unicode是U+1F44D, 用(U+D83D U+DC4D)两个字符来表示.

    还好, NSString的rangeOfComposedCharacterSequencesForRange:rangeOfComposedCharacterSequenceAtIndex:两个方法可以用来处理这种情况. 所以, 真正正确的遍历NSString的每一个字符的方法就是这样了:

    NSRange range;
    for(int i=0; i<str.length; i+=range.length){
        range = [str rangeOfComposedCharacterSequenceAtIndex:i];
        NSString *s = [str attributedSubstringFromRange:range];
    }
    

    一次遍历一个子串, 而不是遍历一个unichar了.

    相关资料:

    Posted by ideawu at 2013-06-12 12:26:39
  • 2013-05-22

    Mac OSX下的看图软件Tovi

    Views: 31033 | 23 Comments

    Mac OSX 自带的看图软件是 Preview, 虽然和操作系统整合很紧密, 但有几个非常致命的缺点.

    一是无法播放gif动画. 二是不能自动生成幻灯片查看同目录下的所有图片.

    Xee 是一个可选的替代品, 也是免费的, 但 Xee 也有一些缺点, 比如快捷键不方便, 不能用方向键浏览, 缩放也不方便. 为此我做了 Tovi, 用来在 Mac OSX 下浏览图片. Tovi 是一个收费软件, 下面是一批兑换码, 想要的同学请自取, 兑换后麻烦回来通知一声, 我将它从列表中删除.

    63KRREAF6XNJ
    J9JX747N7ERJ
    K4JA3MNFW6J9
    FFTM447HTKT7
    967FJXKT9RHX
    FAHENJYP6KYE
    X73LNPNRPL49
    NTRT3P63FHMM
    F7NNK97LAKWH
    PJANEP3L69N6
    



    Posted by ideawu at 2013-05-22 13:15:55
  • 2013-04-14

    Cocoa处理JSON转换, 兼谈计算机语言的哲学

    Views: 19926 | 3 Comments

    用了下 Objective-C Cocoa 里的 JSON 相关类 NSJSONSerialization, 发现简单的事情突然变得太复杂了. 想想用 php 语言的时候, 如果想把 php 语言对象转成字符串, 直接 json_encode(); 如果想把网络或者文件中的一段二进制数据(JSON 字符串)转成 php 对象, 直接 json_decode().

    但是, 在 Cocoa 里就不那么直接了. 首先, 你会遇到字符编码的问题, 所以你得到的和操作的不能是字符串, 而是 NSData. 其次, NSJSONSerialization 无谓地增加了限制, 顶层 Objective-C 对象只能是数组和字典.

    我不想探讨这里面的原因, 我当然知道这里面的原因, 我只是说, 这些原因可以避免.

    第一, 为解决后一个限制, 我可以做一些封装, 支持语言的整数对象和字符串对象(非常重要)直接转成 JSON 字符串, 而忽略所谓的 NSData(后面讲为什么 NSData 不是一个好东西).

    Continue reading »

    Posted by ideawu at 2013-04-14 15:51:29
|<<<1234567>>>| 6/7 Pages, 38 Results.