• 用 VLC for Mac 播放外挂音频

    VLC for Mac 的图形界面上没有读入外挂音频的选项,但可以通过命令行参数来实现:

    $ open VLC.app ~/Movies/themovie.avi –input-slave ~/Movies/theaudio.mp3
    或者
    $ /Applications/VLC.app/Contents/MacOS/VLC movie.avi –input-slave=audio.mp3

    来源:http://forum.videolan.org/viewtopic.php?f=12&t=61970

    行星地球配上赵忠祥的解说,太爽了。

  • Snow Leopard 升级到 10A402

    系统版本号从 10A392 升级到了 10A402a。
    核心从 Darwin 10.0.0b2 升级到了 10.0.0b3。
    Safari 从 4.0(6531.0) 升级到了 4.0(6531.1)。
    QuickTime 从 10.0(41) 升级到了 10.0(42)。
    界面基本看不出变化,只是好像多了个右键菜单。
    snow-leopard-10A394-10A402a

  • 用 MacBook 打造自己的个性化闹钟

    起因:不知道为何前面推荐的“Red Alarm Clock”在我的机器上不工作,也许是不支持 Snow Leopard 10A394 ? 于是经过简单摸索,通过组合使用 Mac OS X 内置的程序实现了更加强劲的闹钟。

    所需工具:iTunes,Automator,iCal。全是系统内置程序,不需要花一分钱。

    1. 在 iTunes 里建一个闹钟专用的播放列表。这一点很简单,不用说啥吧。就叫“起床铃”吧。
    2. 用 Automator 写个小程序播放这个列表。
      automator-0automator-1

      • 获取 iTunes 播放列表
      • 设置 iTunes 音量
      • 开始播放

      以下为可选设置。逐渐放大音量,防止突然一声想吓着谁:

      automator-2

      • 等10秒
      • 放大音量
      • 等10秒
      • 放大音量

      好,运行一下试试看是不是能够正常启动 iTunes。没问题的话保存成应用程序。这里千万不要选错,不然早上误了点可别怪我 😛 。

    3. 在 iCal 里建立事件以触发闹钟。
      iCal-1
      建立一个重复事件,设定好时间。你可以选择只在工作日触发。也可以像我这样给工作日和休息日分别设定不同的时间(两个事件)。
      iCal-2
    4. 参见前一篇设置定时自动开机。建议比你的闹铃事件提前个5分钟,以便 Mac 有足够的时间启动。

    已知缺点:开机时间不会跟着日期自动变化。好像 Automator 不会控制节能器⋯⋯

  • 早上让音乐叫醒耳朵,晚上枕着乐曲入眠:推荐两款 Widget

    red-alertRed Alarm Clock:有了 Mac,你的闹钟就可以退休了。
    它可以控制 iTunes 当起床铃。
    (如果晚上睡觉前你喜欢关机,或让机器进入睡眠,不要忘记在节能器里面设好定时开机唤醒)

    下载:

    http://www.apple.com/downloads/dashboard/music/redalarmclock.html

    itunes-timeriTunes Timer:如果你像我一样喜欢在睡觉前听点轻音乐,那么这个就是你需要的了。

    用 iTunes 打开喜欢的音乐,然后选上时间,按下开始,就可以睡个好觉了。它会在倒计时结束以后暂停 iTunes。你也可以选择让它使你的 Mac 休眠,也可以关闭 QuickTime 或 DVD Player。午休的时候,你也可以指定让它一段时间之后用音乐叫醒你。非常方便。

    下载:

    http://www.apple.com/downloads/dashboard/music/itunestimer.html

    以上这两个软件都是完全免费的。虽然是英文版,但我想你在使用的时候不会有任何困难,因为他们和真的闹钟一样简单!

    如果你不会设定定时开机关机请看这里:

    auto-wake-1

    auto-wake-2

    auto-wake-3

    顺便表扬以下 MacBook,只有插这电源的时候才会自动启动,这样就不怕半路上它突然启动起来了。缺点也有:好像只能设定一组开关。

  • 为何新的 MBP 交换了 control 和 caps 的位置

    刚拿到新的 13寸 MBP 13 的时候就发现键盘上的 control 和 caps 的位置对换了:Shift 上面是 control,下面是 caps,还带个小灯。一开始我还以为苹果电脑都是这样的。后来发现苹果的键盘本并来不是这样的。

    今天查到一篇文章,终于豁然开朗:Happy Hacking keyboard pro 2的艺术

    原来这样做是有深意的。大名鼎鼎的 HHKB 键盘(两百多美元一副呐!)就是这样设计的。我不像上文作者那么常用Emacs和VIM,但也渐渐体会到了这样设计的好处:

    • 至少在 windows 下按 control C 和 control V 的时候舒服多了(不过在 Mac 下面是用 cmd C,cmd V⋯⋯);
    • 还有 Mac 下面切换输入法开关是用 Caps 键(Windows 下的日语输入法也是),这一下方便多了,不容易按错;
    • 想按 shift 的时候却按到 Caps 的机会也少了。

    本来苹果键盘:

    wired_4_20090306

    官方网站上看到的 15寸 MBP:

    overview-gallery2-20090608

    我的 13寸 MBP:

    0701_001752

    应该不是因为我是日语键盘的缘故吧?

  • 雪豹来了 (Snow Leopard 10A394)

    Snow Leopard DVD

    下载好了雪豹 Snow Leopard 10A380,由于dmg已经超过4.7G,必须得要刻盘的话必须得双层DVD才行,而我上星期买的都是单层的碟片,于是开始尝试免刻盘安装。

    首先准备一块USB移动硬盘,分区。下图使用的是一个超小的 8G U盘。不知到为啥后来复制文件的时候特别慢,所以我实际上是用一块硬盘安装的。

    partition

    这时候需要特别注意的是,如果用的是以前在 Windows 下面使用的主引导分区(MBA)的硬盘或U盘,一定要按“选项”,把盘的分区格式改为 GUID 分区表(GPT)型的:

    partition-option

    分好区之后,辅助点击雪豹的dmg文件,选打开方式》磁盘工具。

    open-with-diskutil

    恢复:

    restore

    恢复完毕就可以用这个盘进行安装了。这个安装过程很顺利。我去洗了个燥,回来就可以重新启动了。

    Snow-Leopard-InstallSnow-Leopard-Install-2

    装好之后:

    snow-leopar-10A380-1

    snow-leopar-10A380-2

    默认的桌面背景比 Leopard 有了微妙的变化,不放在一起比,还以为没变呢。第一排是雪豹,第三排那个是原来的 Leopard 的。

    snow-leopar-10A380-3

    中文输入法由 “智能ABC” 变成了 SCIM。多了手写输入法。我打开了之后差点关不掉⋯⋯其实是按 control-shift-空格。因为打开这东东之后就没有鼠标可用了,所以它刚出来的时候有一行提示。

    snow-leopar-10A380-4

    装完之后,除了 iTunes 需要重新升级一下以外,其他的程序都运行正常。

    硬盘占用确实少了好几G。显示方式也从二进制算法改成了十进制算法,250G硬盘显示为250.06G。(当然了,硬盘占用减少不是因为这个,是确实少了。)

    还有一个重大变化是 Boot Camp 3.0 的驱动使 Window 可以访问苹果的 HFS+ 分区了。

    昨天晚上还为没有 “Dock Exposé”小失望了一下,今天早上就看到提示有更新,可以升级到 10A394 了。

    snow-leopar-10A394-1

    Dock Exposé

    snow-leopar-10A394-2

  • MacBook Pro 第2天:聊天,看电影,听音乐

    补记星期天的体验。

    Mac 上看高清自然是用 VLCplex。继昨天不会关闭之后,在我机器上 plex 碰到了新问题:切换全屏幕的快捷键是用“\”,增大音量的快捷键是“+”。由于我的机器是日语键盘,这两个键的位置都和英文键盘不同。我按遍整个键盘plex都没反应。以至我按“-”减音量减到静音之后彻底不能用了。经过反复调查之后,参考 http://wiki.plexapp.com/index.php/Keymap.xml 的说明自定义快捷键之后就可以正常使用了。上述文档的说明稍微有点过时,不过还是可以看懂的。另外这个软件是给遥控器用的,不支持鼠标着实是不够方便。

    skype-new-messageqq-new-message

    Skype 的 Mac 版比 Windows 版更好用,和家人连线的效果很好。QQ 和 Live Messenger 虽然都有 Mac 版,但都不支持视频和语音。QQ 上面已经有了视频的按钮,但还不能用。Messenger 是 7.0.2,连别名都不支持,好多好友都弄不清楚是谁了…… 据说泄漏出来的 8.0 可以视频了,但很不稳定,也就先不追了。但愿这俩都能快点推出新版本吧。Skype 和 QQ 的 Mac 版比 Windows 版都有个优点:有未读的消息的时候能够在 Dock 上用红字标明新消息的条数(如图)。这比 Windows 的托盘区效果好多了。Google talk 目前没有 Mac 版。但浏览器插件的那个版本可以用。因为 Skype 已经够用了,所以我还没尝试。iChat 可以直接用 Google 账户登录,我登录成功,但没尝试和任何人聊天。

    用 VMware Fusion 装了 XP,很顺利。Fusion 里的装上了网银客户端,很流畅,丝毫没有预想中的卡的感觉。再加上用 Boot Camp 装的 Windows 7,我有两个 Windows 了。

    cog

    播放 ape 采用 Cog。音质没得说,但是对中文 cue 的支持有点问题,单只要把文件转换成 UTF-8 格式就好了。顺便导了一些 MP3 进 iTunes。配合 iCal 可以当闹钟用。

    用 iPhoto 欣赏宝贝女儿的照片实在是一种享受。但缩小和旋转我用一只手操所得成功率有点低。我用两个食指操作可以 100%成功。单手操作放大也没问题,就是缩小和旋转有困难。不知道是不是和我设了右下角当右键有关系。也可能是我大拇指的姿势不太对?

    gimp-mac我还装了个 GIMP 用来处理图片。Photoshop 太贵,咱折腾不起。再说我也不是的平面专业设计师,GIMP 够用了。GIMP 在 Mac 下面有个缺点,它是运行在 X11 中的,所以顶部是 X11 的菜单。它本身的菜单维持在和 Windows / Linux 版相同的位置。其他都很好。多窗口在 Mac 下面用起来还是蛮顺手的。连 Excel 2008 都是多窗口的了。(话说好像 Office 2010 里面有些特性是 2008 里的,呵呵。)

  • 初识 Mac

    经我家领导同意,经过彻夜思想斗争,今天早上终于跑到秋叶原捧回了觊觎已久的 MacBook Pro。我选择的是较高配置的 MB991。路上就激动得打开了包装,欣赏了一路。做工那是没得说,简直就是件艺术品。借个官网的图片炫一下。
    MBP 13

    包装很简洁,以前买的笔记本都是比这大N倍的盒子。这是包装上的配置单:
    MBP配置

    到家赶紧插上电源,等等,变压器很像iPod的变压器,上面直接有插头,有给我一根常常的线做甚,研究一番之后才发现那个插头是可以拔掉的,可以插上长电线。开机,设置语言,设密码,顺利连上了我的 Buffalo G300NH 无线路由。

    接下来装几个软件。顺便说一下,SD 口很好用。也能读 NTFS 格式的移动硬盘。iWork 没问题。VMware Fusion 也顺利装上了。
    然后升级系统,这边上网真快,转眼间就下载好了。
    我是原 Windows 用户,QQ, Skype, MSN,Office 一个都不能少。
    QQ,MSN,Skype On Mac

    然后问题来了:
    没有Ctrl,Alt,Win 键,没有 Home,End,PgUp,PgDn,PrintScreen,Backspace⋯⋯
    哦,有Ctrl,在 Shift 上面,Caps键放在了最左下角,还带个小灯,感觉很好。然后 option键算是 Alt 吧,Command 大约相当于 Windows 键,单比 Win 键有用多了(大致上有时相当于Windows 得 Ctrl 吧,例如 command+c command+v)。

    Home End 暂时没找到,不过暂时也用不上。两个手指头比 PgUp PgDn 好用多了。Mac 有个比 PrintScreen 强大得多得快键:
    command + shift + 3 叮,全屏幕作为一个 png 存桌面了。
    command + shift + 4 可以选择要保存的区域。
    command + shift + 4  空格 可以选择要保存的窗口。
    不需要象 Windows 那样装第三方软件了。

    delete 相当于 Windows 的 backspace,嗯,有这个就够了。

    中文输入法竟然是 智能ABC,好怀念大学时使用智能ABC的时光。当然了,现在的 ABC 比那时强大多了。不过近来习惯了谷歌拼音之后,反倒有些不习惯了。也许要考虑装个第三方的。

    然后为了看高清,装了个 plex。结果全屏幕了之后不知道怎么退出了,汗⋯⋯
    赶紧调查,原来 command+q 就可以了。这个基本上是通用键,相当于 Windows 的 Alt + F4 了。好像以前dos 时代也有 Ctrl + Q 的?

    为了该死的网银,Windows 还是要装的。于是打开 Fusion 开装。很快到了按 F8 同意协议这一步。F8, iTunes 暂停了 。再 F8 , iTunes  又响了,就是虚拟机没反应。汗⋯⋯
    调查之后说是应该 偏好设置》键盘与鼠标》启用 Mac OS 键盘快捷键。把这个钩钩掉就好了。我钩掉之后 iTunes是没反应了,虚拟机还是没反应。也许重新启动 Fusion 会好?

    不跟它叫劲了,换Boot camp 上。很顺利的分好了区,然后它让我插入光盘,可是我一直都是用 USB 硬盘启动装 Windows 7 的,心想应该一样吧。当然,我想错了,MBP 不肯从我的 USB 硬盘启动。赶紧去附近超市买了几张光盘,刻。嗯,Mac 刻盘真方便,不许要装第三方软件就能搞定。然后从 Boot Camp重启,装。这中间很顺利,没啥好说的:启动它之后去洗澡,回来就装好了。

    然后进入 Windows 装 Boot Camp。很顺利就装上了,不象传说中的不让装。它那个不兼容的提示仅仅是提示而已,你装就是了。装好重新启动,原来 Windows 7 也挺漂亮的,一直是被我的 X40 的 poor 显卡给糟蹋了。

    Windows 能装上就好,回 Mac 继续探索。iPhoto 真的是很好玩。可以认识人,帮你找到特定人物的所有照片。Picasa 号称也有脸部识别,但可惜现在智能是识别有人还是没人而已。

    幻灯片播放的时候选“剪贴簿”方式,那效果简直太棒了!早先我是认为 Wii 的播放方式很好看,后来发现 Picasa 新版本也不错。但这些和 iPhoto 比就逊色太多了。

    (这个Mac 版的智能ABC果然还是象我大学时代用的 Windows 版一样可以通过输入 “n88” 来输入 “嗯” 字。嗯,再怀念一次⋯⋯)

    时候不早了,第一天的探索到此为止。

    再加一句,镜面的屏幕真的不适合白天用,特别是看有夜景的电影。LED 背光也不行。晚上效果很好。苹果的新键盘灯很好看。

    睡觉之前找到 VMware Fusion 里面怎么按 F8 了:按 fn+F8 即可。顺便和一般的 PC 笔记本一样 fn+上下 代表PgUp 和 PgDn。

  • 买的影驰显卡居然中奖了

    前些天买的绿色版 Galaxy P96GT-LP ,居然中奖了。
    得了块手表,看上去还不错。还带秒表和世界时。
    0611_225907

  • 用 Javascript 批量查找 Excel 中的文字

    比 Excel 的查找有下述优点:

    • 批量查找整个目录
    • 可以找到图形和文本框中的文字
    • 采用正则表达式查找,可以实现复杂的查找条件

    缺点是比较慢。

    // 设定值:分别是要查找的目录和查找条件
    var searchPath = "D:/temp";
    var searchPattern = /事業/i;
    
    // 正则表达式参考:
    //http://msdn.microsoft.com/en-us/library/1400241x(VS.85).aspx
    //http://msdn.microsoft.com/zh-cn/library/28hw3sce(VS.80).aspx
    
    var msoAutoShape = 1
    var msoGroup = 6
    
    var xlApp = WScript.CreateObject("Excel.Application");
    xlApp.Visible = true;
    xlApp.Interactive = true;
    var logBook = xlApp.Workbooks.Add(); // For Output
    var logSheet = logBook.Sheets(1);
    var logLine = 2;
    var outSheet = logBook.Sheets(2);
    var outLine = 2;
    
    var allFiles = new Array();
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    
    GetFileList(searchPath, allFiles);
    
    var i;
    for (i = 0; i < allFiles.length; i++) {
      logSheet.Cells(logLine + i + 1, "B").Value = allFiles[i].name;
      logSheet.Cells(logLine + i + 1, "B").NoteText (allFiles[i].path);
    }
    
    for (i = 0; i < allFiles.length; i++) {
      xlApp.StatusBar = (i + 1) + '/' + allFiles.length + ': ' + allFiles[i].name;
      ProcessFile(allFiles[i], i);
    }
    
    xlApp.StatusBar = 'done.';
    
    function GetFileList(folderspec, arr) {
      var f = fso.GetFolder(folderspec);
      var fc = new Enumerator(f.SubFolders);
      for (; !fc.atEnd(); fc.moveNext())
        GetFileList(fc.item(), arr);
      fc = new Enumerator(f.Files);
      for (; !fc.atEnd(); fc.moveNext()) {
        var fo = fc.item();
        if (fo.Name.match(/.xls$/i))
          arr.push(fo);
      }
    }
    
    function ProcessFile(fo, lineNo) {
      crtLogLine = logLine + lineNo;
      logSheet.Cells(crtLogLine, "A").Value = "WORKING...";
    
      xlBook = xlApp.Workbooks.Open(fo.path, false, true);
    
      outSheet.Cells(outLine, "A").Value = fo.Name;
      var j;
      for (j = 1; j <= xlBook.Sheets.Count; j++) {
        outSheet.Cells(outLine, "B").Value = xlBook.Sheets(j).Name;
        SearchCells(xlBook.Sheets(j));
        SearchShapes(new Enumerator(xlBook.Sheets(j).Shapes));
    
      }
      xlBook.Close(false);
    
      logSheet.Cells(crtLogLine, "A").Value = "DONE";
    
    }
    
    function SearchCells(sht) {
      var i, j, ur;
      ur = sht.UsedRange;
      sht.Activate();
      for (j = 1; j <= ur.Rows.Count; j++) {
        sht.Cells(j, 1).Select();
        for (i = 1; i <= ur.Columns.Count; i++)  {
          if (sht.Cells(j, i).Value)
            if ((sht.Cells(j, i).Value + "").match(searchPattern)) {
              outSheet.Cells(outLine, "C").Value = sht.Cells(j, i).Address;
              outSheet.Cells(outLine, "D").Value = sht.Cells(j, i).Value;
              outLine++;
          }
        }
      }
    } 
    
    
    function SearchShapes(en) {
      for (; !en.atEnd(); en.moveNext()) {
        var shp = en.item();
        switch(shp.Type) {
        case msoGroup:
          SearchShapes(new Enumerator(shp.GroupItems));
          break;
        case msoAutoShape:
          if (shp.TextFrame.Characters().Text) 
            if (shp.TextFrame.Characters().Text.match(searchPattern)) {
              outSheet.Cells(outLine, "C").Value = shp.Name;
              outSheet.Cells(outLine, "D").Value = shp.TextFrame.Characters().Text;
              outLine++;
          }
          break;
        default:
          break;
        }
      }
      
    }
    // 对付控件工具栏上的 TextBox:
    // sheet.Shapes("TextBox1").DrawingObject.object.Text
    

    用法:把这个文件存为.js文件,修改好参数之后直接双击即可。
    查找的结果保存在新建的 Excel 文件的 Sheet2 里。
    等的不耐烦的时候可以直接关掉 Excel, 它会自行报错退出。