为何新的 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)

免刻盘安装雪豹 10A380。升级至 10A394。顺便 show 一下Dock Exposé。

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。

用 Javascript 批量查找 Excel 中的文字

比 Excel 的查找有下述优点:

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

缺点是比较慢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// 设定值:分别是要查找的目录和查找条件
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, 它会自行报错退出。

摩托罗拉的摄像头和 Windows 7 合不来

我有一部摩托罗拉的 ROKR E6,一只用它插在 USB 口上当摄像头用,还能顺便给它充电。
这个设计还是很实用的,出门就可以少带一样东西。(我买笔记本的时候还没流行内置摄像头)
自从升级到 Windows 7 之后它就不能用了。我还以为是我的手机坏了。
插上之后能正常识别为 Motorola USB camera。就是没法用,图像一直是黑的,也不肯充电。
重启手机,重启电脑。折腾很久都无济于事。

经过一番调查发现,原来 ROKA 的摄像头驱动从 Vista 开始就不灵了。
是换手机呢,还是换回XP?这是一个问题……
暂时先凑合用 VMWare 装个 Skype 专用系统,幸亏 VMWare 里的 XP 还是那么好用。

参阅(英文):